I've worked in both a startup environment and a tech giant. It's true that you get to write more new code at the startup, but beyond that I think this post is bunk.
"Maintaining old code" at a tech giant is not about keeping some ancient system working by periodically fixing a bug or adding a feature. It is about building scalable systems that are constantly adapting to new demands. It's about dealing with large-scale constraints and constantly finding and removing bottlenecks. I find it tremendously challenging intellectually.
Which isn't to say that the startup route is bad or not intellectually stimulating either. Writing new code is FUN. Trying out new stuff is FUN. Solving the problems that come with doing things differently is also fun and intellectually challenging.
I think there are advantages and disadvantages to both. I learned a lot in both kinds of environments and I think I would be a worse engineer for only having done one or the other. Some people might just be wired up to prefer one or the other, but my recommendation to people earlier in their career (particularly interns) would be to get experience in as many kinds of environments as possible.
> He says the sense you get from college recruiters is that you get to write new code. Most great hackers love to do this. But that's not what you get from a software engineering position at the tech giants. You get to maintain old code. The job should really be called software technician.
I've never thought about it this way. I've never worked at a startup (or even given it much consideration) but this makes me want to change that.
"But that's not what you get from a software engineering position at the tech giants. You get to maintain old code."
I wouldn't say that's true in general. It's going to be a mix a both. But improving/fixing old code will often teach you a lot more than writing new code. You can both see clever things that other people have done and bad design decisions that are now causing you problems.
"Maintaining old code" at a tech giant is not about keeping some ancient system working by periodically fixing a bug or adding a feature. It is about building scalable systems that are constantly adapting to new demands. It's about dealing with large-scale constraints and constantly finding and removing bottlenecks. I find it tremendously challenging intellectually.
Which isn't to say that the startup route is bad or not intellectually stimulating either. Writing new code is FUN. Trying out new stuff is FUN. Solving the problems that come with doing things differently is also fun and intellectually challenging.
I think there are advantages and disadvantages to both. I learned a lot in both kinds of environments and I think I would be a worse engineer for only having done one or the other. Some people might just be wired up to prefer one or the other, but my recommendation to people earlier in their career (particularly interns) would be to get experience in as many kinds of environments as possible.