HN user

rabidgnat

298 karma
Posts1
Comments83
View on HN

My path to programming, as a product of the internet generation:

As a child, I loved the idea of computer programming. I got books at the library that told you how, but they always needed equipment I didn't have. I actually wrote fake programs in Ami Pro because of sample code I found in books! My parents were cutting-edge with computer purchases, but were otherwise nontechnical. They didn't know that toy programming languages existed, and probably didn't care. They just wanted me outside!

Time passed, and in 8th grade I needed to sign up for high school classes. I saw "Computer programming" in the class listing and I registered immediately. I didn't want to enter the class knowing nothing, so I researched C++ (the language taught by the class) and came across DJGPP. I spent a lot of nights that summer careening through internet tutorials and wrote a mountain of crap, but it was fun!

The first day of school was very disappointing - I got the syllabus, and saw that I'd already learned everything on the sheet. I was equally disappointed 2 years later when I signed up for the AB C++ exam and realized I knew nothing on the sheet. The next year was the worst yet - I knew everything on the AB Java exam, but I had to spend the year relearning it all in Java! Yuck!

I run into plenty of situations where I have multiple lines, and I'd like the respective elements to align. It's not limited to tabular data, but it's the easiest example

There are plenty of problems with CSS. You can't specify the width of an inline element, for one. That alone prevents a lot of reasonable layouts, like tables. Also problematic is a standards body that ignores this use case! In this case, they protect the writer from over-filling some boxes with more boxes. But that would at least be visible - in this case, the workarounds end up far worse.

The police investigates crimes that have already been observed. Journalists have the freedom to investigate potential crimes based on their gut feeling. Recall Enron - a police officer standing anywhere in Headquarters would have missed a crime. However, some pesky reporters asking too many questions brought the whole operation to its knees.

But my original point is that there's one dev team in the middle of this dealing with concurrency, and any number of remote applications that can use it through a library because someone else worried about the hard parts. There isn't a day of reckoning where developers as a group worry about efficient concurrent computation, it's the few guys in the center.

It's not some silly vision of the future, but an oversimplified version of today! A brief and incomplete list of applications I use in a typical day:

Remote storage and/or processing: GMail, Google Docs, Weather.com, Reddit.com, Hacker News, Outlook web client, Google.com, DuckDuckGo, Delicious, Facebook, Github, tens of blogs/articles, online help documentation for, well, everything

Local storage and/or processing: Windows+Linux, Firefox, Chrome, Outlook, Visual Studio, Emacs, Python (or other dynamic languages), Acrobat, Amarok, random Unix utilities, various games

Most of my applications exist solely to present data stored elsewhere. I see no reason the trend won't continue: for instance, why would I compile C++ code on my machine when I can farm it out? Why would I store flat code files on my machine when I can have synthesized views of the code I need to see at one time?

Split up by time, most of my attention is spent manipulating or displaying data from somewhere else (or that could be stored somewhere else)

Games show that there are exceptions

Most application developers won't worry about concurrent program design. Ever. More and more applications are becoming layered each year, and all of the hard work is done on the server side. Drawing an application's chrome takes little power in comparison.

Concurrent programming ends up in the data center, fussed over by the (relatively) small core of engineers and software developers. Everyone else just queries this data and makes it look good. Concurrently fetching data doesn't need a paradigm shift, just a good library. If you still need a few threads, you can use the same crummy techniques we've always used.

Cloud computing will alter Moore's Law on most devices. Devices may need twice as many transistors every 18 months, but the transistors are no longer on your desktop. They're mostly in some data center.

German Tank Problem 16 years ago

Rejewski and Turing's Enigma cracking accomplishments were staggeringly significant, but they won nothing. If the Allies bombed every submarine that radioed a position, the Germans would have thrown the machines into the ocean. The Enigma let the Allies stack the overall war strategy in their favor, but it was far from over.

I do agree that brainpower won the war - our cryptology was stronger, resource management between the Pacific and European fronts was superb, and the Allies had a knack for picking battles and battlefields where they could excel

I disagree with your perspective. Scientists don't need to understand everything about life to make meaningful contributions to our lifespan. This stuff isn't magic - there are sound, repeatable principles at the bottom of everything you mention, and the principles are possibly within our grasp. The technology needed for making these discoveries only gets better with time, never worse.

Look at it this way: crude principles applied at the macro level have extended our lifespan by decades. As scientists get better and better at piecing together the building blocks from the bottom, they'll likely find principles at the micro level that improves our lifespan as well

If I feel extra contact with someone is inevitable, I usually try to request that the person email me some helpful info that I need. If they say they'll "just call," I point out that [list of people] might find it useful, and joke that I can't forward them a phone conversation we've had. Some people still insist on calling, and I let them.

You could take the beginning of habit 5 as complementary to Emacs. Has another program ever been extended to do more?

Towards the end of point 5, Bram really points out the strength of Vim over Emacs - it is small enough that it could be refactored to be embeddable. This is the real slight towards Emacs - Emacs will never be embeddable, not in a hundred years. It is the all-purpose consumer that provides little benefit to outside programs. I think Bram saw a niche in creating a 'libvim' that other programs could use

Keeping your email under control requires an unreasonable amount of discipline. I've managed to avoid 'defaulting' on my email so far, but at a decent overhead rate: Every hour or two, I wipe out my inbox completely and leave only items that absolutely require an action. Most mail is read once and interesting email gets archived by sender name. I have lots of filters set up for people who usually send me uninteresting mail. Everything else is deleted.

I've almost lost control a few times - mostly because of vacations- and I'm certain that I'll hit a tipping point where my time doesn't scale to my inbox size. I couldn't handle my boss' email load, for instance...

Are there any good techniques that scale for dealing with email?

Easily!

First, I'd stare at the Clojure webpage, and try some examples in the REPL. I'd feel like I'm not grokking idiomatic Clojure, so I'd try some Google searches, but find nothing compelling. I'd hit random Clojure links on Hacker News and Reddit for a few weeks, but give up and move to a language with a more active community.

A year later, I'd accidentally find it at the bottom of an unrelated post and yell "If only I had that a year ago!"

I was reminded of this:

"There's nothing sadder to me than associations held together by nothing but the glue of postage stamps. If you can't see or hear or touch a man, it's best to let him go" ~ East of Eden

After reading this, I lost all guilt about losing some old friends due to moving around the country.

I lightly approve of anecdotal posts like these. Facebook controls all of the data needed to make informed decisions, and they're not going to share if the OP's claims are accurate. Lots of bad press about CPM and cost/click will force Facebook to publish data proving the worth of getting Facebook ads that transcend the 'case study' nonsense. If they continually ignore lots of bad press, that's a big tell that the only party that benefits is Facebook, even though it's not a smoking gun.

I've taken this approach with PayPal. I'd use them for person-to-person finances, but I've heard so many small-business horror stories that I'd invest the time to make a merchant account if I made a startup. It's not exactly scientific, but PayPal's not exactly flooding the market with data either

[dead] 16 years ago

"I sure as hell don't remember being showered with praise or getting athletic trophies just for turning up"

I experienced a lot of that, but in retrospect my parents managed it pretty well by rewarding hard work. If I got a trophy for a bad sports season, they gave me the option to throw it out. I always did. When I was little, I earned an allowance by doing chores and yardwork. When I was in high school, I was expected to work in the yard if I didn't have a weekend job, so I was always working, but only sometimes getting paid. I was given cash rewards for quarterly grades through high school, but a B paid so much less than an A that it was more of an insult.

I came out the other end a little backwards: I dislike getting awards, and I feel uncomfortable if someone tells me I did a good job.

In the end, child development always comes down to parenting. If the child's environment isn't pushing them hard enough, they can do something about it

Before now, I assumed that teaching programming meant giving exercises where students figure out how to piece together the fundamentals of programming languages, and then try to build them up to harder programs. After reading through Zed's PDF, I realize I may have been wrong! If you let people absorb ideas by typing existing programs, they won't need to be taught how to decompose ideas, they'll try new things themselves. To teach game programming, you don't need to teach every single fundamental and build the user up to making a full fledged game. You just need to get them to install PyGame and draw a rectangle that they can move with the keyboard arrows, and tell them where the documentation is. Anyone who is really interested will do the rest themselves.

"What happens to Lisp if Google buys ITA Software?"

Over the years, subsystems will get converted one-by-one to C++/Python/Java, and programmers will get converted one-by-one to C++/Python/Java programmers. Google would have a lot of good arguments for playing by the rules - they would be able to leverage scalable computing and storage at scales ITA could only imagine, and the rest will fall into place

I follow the Git mailing list, and he's even-keeled and surprisingly helpful in discussions. The tone of the original post is representative of what he normally writes.

I'm sure he's no saint, but his most famous rants were responses to sniping. The Minix/Linux debate was started by Tanenbaum, Bram Cohen picked a fight over merge strategies in a list discussion, and the 'C++ sucks' rant was in response to some flamebait.

If you have RSI typing pain and haven't treated it, spend a whole day typing with wrist braces. It convinced me to switch CTRL and CAPS LOCK on my keyboard. I love keyboard shortcuts, and bending my wrist to hit CTRL was causing my left pinkie to go numb.

I also have 'evasive action' that works well. When I feel pain typing, I immediately stop and give the offending hand a workout with a stress ball for 5 minutes. Then I massage the tendons in my forearm and then stretch my wrist on all axes. I haven't had significant RSI pain in a few years, and at this point I'm not brave enough to test which part of the routine helps most :D

"I really hope you are a Steve Jobs sockpuppet account"

Probably not. The Jobs-o-grams that I've seen are terse. Jobs probably would have written something like:

"Mark should not be hacking. We wouldn't want a Captain greasing a ship's engine."

It's going pretty well, but we're cheating: we give the other devs both the CVS and the git checkout commands, and let them use what they want. The early adopters tend to be those who already use it outside of work.

I agree that the tools on Windows aren't stable: I've had to help debug at least 3 or 4 git installs of TortoiseGit-esque tools. I personally just use it from the command line.

Moving forward, we'll train people to use git when they go offsite with other developers, or if they're curious. Part of our job involves spending days away from an Internet connection, so they'll suddenly be sink-or-swim and probably never turn back :)

Backwards-compatibility efforts like these are great. Some CVS/SVN users are (un?)surprisingly stubborn about trying new things, and they can halt upgrade efforts with their complaints. My company is converting our repositories from CVS to git as we speak, and the number within our ranks who prefer CVS is surprising. Without support for older programs like CVS, we wouldn't have the momentum to upgrade

Kudos to Github for providing one less excuse to holdouts!

Try to land a system programming gig at a bleeding-edge research company! I work as one, and easily 1/2 of the workers don't come in until 10:00. Some come in as late as 1:00 when they don't have meetings.

It's also a great environment for early risers. I get in at 8, and I'm a machine through 10:00 every day

Wow, this actually found a moderate security vulnerability in my website!

Fetching http://mysite.com/static/ returned the plaintext template of my index.html file, which I must have accidentally copied in some manual hackery during a broken push (none of my scripts copy it normally)

However, I almost missed the warning: Skipfish complained because the page lacked a content type, and it was buried in several similar warnings. I'd like it to recognize potentially templated files, which is a much more serious vulnerability than missing a 'text/plain' content type. Years of staring at unimportant compiler warnings might cause people to miss gems like this.

"If one of those little people you fake-befriended and then got rid of ends up in a position where you need something from them in the future, you're screwed."

Or as my father put it, "The people you meet on the way up are the people you meet on the way down."