Hacker News new | ask | show | jobs
by nostrademons 4696 days ago
I assume you're actually thinking of going into software engineering as a profession, and not just getting a CS degree and doing something else. The latter can actually be pretty useful in a variety of scientific, technical, and management fields, except you have to pair it with something. Anyway, here's my list (for reference, I'm 32, have roughly 9 years of professional experience all of it in software, and currently work on search for Google. I have a CS degree but went to a liberal arts college and switched around between physics, philosophy, and sociology before settling on it):

1. Programming is a very cognitively demanding and highly rational skill. To do it well, you to some extent need to "shut down" your emotional circuitry and your intuitions about how things should work, pay very careful attention to how things do work, and then retrain your instincts to take this into account. All on a very rigorous, formal, mathematical level. Unfortunately, if you do this without simultaneously maintaining an active social life, you risk finding yourself unable to relate to "normal" people. It's not just that programming attracts geeks, it's that programming enough can turn you into a geek. This is avoidable (some of the top minds in our field have a life outside work and are quite approachable as human beings), but it requires that you set strict limits on the time you spend hacking - which can often be hard to keep to when you hear about a 19-year-old kid who invented a peer-to-peer protocol or a 23-year-old who invented a programming language.

2. There's an expiration date on your knowledge. It's not as drastic as some people make it out to be - it is still possible to get hired as an engineer past 40. But pretty much everything you learned when you first started out will be obsolete. I've only been doing this since 2000 and I've had to reinvent myself at least three times - I started as a desktop UI dev working with Java Swing; then I learned JS and web technologies pretty deeply; then I got into unstructured data mining, clustering, and ranking algorithms; now I'm back doing UI, but for mobile web devices (which have completely different performance characteristics as desktop) in a lead role. In fields like law or accounting you gradually learn more of a huge body of relatively static knowledge, and so your intellectual capital increases monotonically over your career. In computing, large bodies of knowledge become completely obsolete overnight, and so you can easily have huge discontinuities in your career where you have to adapt or fade into irrelevance.

3. Programming is not amenable to just putting in your time and packing it away when you go home at 5. It's a creative profession, and creativity is subject to the whims of your brain and requires engagement and grappling with the subject. Many programmers find it really hard to work on a set schedule - Paul Graham has a good essay called "Maker's schedule vs. Manager's schedule" on this.

4. The egos. A large segment of the software world seems to be composed of people who keep trying to one-up each others in their knowledge of esoteric trivia, and then once they've found something they know that nobody else does, suddenly everyone else is an idiot. This is exhausting and not all that pleasant. It is much more prevalent in some communities than others - there are places you can go that are quite supportive, where everybody is interested in learning new things and new knowledge is gently pointed out and explained - but if you read many of the places where programmers gather, there are many a pissing contest that are just complete wastes of time.

2 comments

The egos. A large segment of the software world seems to be composed of people who keep trying to one-up each others in their knowledge of esoteric trivia, and then once they've found something they know that nobody else does, suddenly everyone else is an idiot. /////

I have tried a lot but the being arrgant when you meet somene with similar skills is so tough to avoid. Plus the sheer chauvinism against non-techie people, makes me feel guilty too. What do you suggest to avoid the ego factor?

It comes from insecurity. A lot (not all, this is a gross generalization) of tech people are really insecure, because a profession where you don't have to deal with people tends to attract a lot of people who don't like to deal with people, and one of the most common reasons for not liking people is being insecure about our own worth.

The best way to avoid this is to not tie your self-worth to your technological prowess. Discover what you like to do (beyond programming), and go do it, and be willing to put yourself out there and enjoy things even if you don't get any outside approval for it. Oftentimes this makes people really anxious; therapists or talking things over with a solid circle of friends can be helpful for discharging the anxiety, but really you pretty much have to lean into it and accept that being good with computers is not going to make you better than anyone else or solve any other problems you might have.

Do you feel that people in Google are more or less egotistical than other engineers you've encountered? Or is it a culture where people are willing to teach others without making them feel stupid that they don't know X?
There's really no way to answer that question without making a gross generalization. There are some programmers at Google with outsize egos (although to be fair, they often have outsize accomplishments as well). For the most part, though, the culture rejects the chest-thumping brogrammer type. Your performance reviews are done by your peers, and so if you continually make your peers feel stupid, it will be hard to get promoted. Also, virtually everything is done in teams, and you're judged by what your team accomplishes, and so it's to your advantage to raise the level of the people around you.
Did you learn data mining/clustering/ranking algorithms before you worked at Google? or was it something you mostly? picked up during the job?
I did not - it was pretty much something I picked up entirely at Google.