Alternatively, consider being an idealistic programmer!
- Fall in love with a single topic, regardless of how trendy.
- Learn as much as you can about it.
- Keep learning about it.
- Learn about it some more.
- Spend years of your life doing nothing but breathing and thinking about this one topic.
- Let fads and fashion pass you by.
- Don't settle for good enough. Try to build the best version possible.
- Choose where you work based on your ability to reach staggering new heights with this one topic, and disregard whether it seems like an amazing CV line item.
- Fail to even notice fads and fashions passing you by.
- Become a master.
I have read many books. If you can only read one book about how to program in your life , I would say that it is this book: A philosophy of software design: John Ousterhout. It is 10 times better than the next best book.
Yup. There is certainly an element of strategy that enters into it. Doubling down on a single programming language or piece of tech is probably not a good idea. Maybe doubling down on a niche field or subject is...
What I'm describing is actually the exact opposite of being a hipster. From the dictionary, a "hipster" is "a person who is unusually aware of and interested in new and unconventional patterns (as in jazz or fashion)".
And, for what it's worth, following my own advice (I wouldn't give it otherwise), I haven't had major problems finding work. I live a comfortable life: own a house, have a wife and a kid, with another on the way...
Actually, knowing what it's like out there for a generalist programmer, I feel maybe more recession-proof with my highly specialized skill set (knock on wood). There are fewer jobs out there for me, but when I apply to the ones that are available, people tend to be interested in talking to me.
Of course, one thing that helps that I didn't mention in my original list: aggressively network with the other people who do the same thing that you do...
It is? I often find that I work really well with people who are highly adaptable generalists. They help me get random things done that I'm slow at, I help them get highly specialized things done that they're slow at.
Not only are they not mutually exclusive, but if we're being honest, only idealistic programmers care enough to read Pragmatic Programmer, and they read it in the process of becoming a master.