The best way of making sure you never become a useful programmer is to strive to become one.
What even is "usefulness"? Lets roughly define it as maximising the area of the curve where you have two dimensions. The number of people reached and impact on each person. The naive way to be useful is by focusing on learning what is popular today.
Patrick Shyu aka "The Tech Lead" in a recent video makes the following point. 'If you take up photography you might end up taking amazing photos like the pros. You think to yourself. Wow ... this is an amazing photo. Actually wait, it is even better that one on this month's cover of National Geographic'.
Here is the brutal truth. Being on the front cover gives that photo impact. Without reach your photo is just that - your photo. You can write the most elegant code you like from your bedroom but if it isn't somehow having an effect on others then it isn't impacting the world.
You might think to yourself that your list of programming skills should be a direct reflection of what is popular right now. This is the equivalent to buying a camera and framing your photo according to what you think National Geographic wants on the front cover next month.
Unless you can you can predict the future you don't know what National Geographic will want next month. Likewise what future landscape of the programming world is unknown today.
Whilst at college Steve Jobs dropped out and enrolled only in the classes that interested him. He took calligraphy classes and learned about typography. Something he thought would never be useful indeed was. Macintosh computers gleaned beautiful fonts from this seemingly impractical diversion during Job's youth.
“You can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever." - Steve Jobs
Whilst roadmaps are great. Following them too strictly leaves no room for serendipitous encounters with things that whilst esoteric today are commonplace tomorrow.
Striving solely to be useful today will undermine you impact tommorrow.
I concede that having a shallow knowledge of the topics which favours depth over breadth in the standard topics like HTML or SQL is worthwhile.
However this knowledge won't distinguish you from the crowd unless it is ridiculously deep.
Think of yourself as a product in a saturated marketplace. People like to see weird things sprinkled in CVs. People want to see a unique story.
Have a curiosity for Rust or ReasonML. Great. Add a bit of time for your more esoteric interests.By all means use learning roadmaps as rough guides. Don't fall into the trap of trying to connect the dots ahead of time. Stray off the beaten path and come back to it. You will not only be a more useful developer but you will have way more fun.
Top comments (2)
Thank you for your insightful article. It helped me look at the things in a broader sense.
I just wanted to know your thoughts about my 'curiosity' as a non-CS person, I am trying to understand basics of Smalltalk (Pharo actually), and want to do small things with it.
I think it will worth it to try, but what do you think about it?
Thanks! I would recommend giving it a try. If you can dip your toe in to a seemingly esoteric topic you are often exposed to new ideas which change how you think about programming.
I also don't have a CS degree so I know what is like to worry about wasting your time when you may not understand some fundamental things. Learning isn't a linear process. Go and explore. Then you can come back with even greater motivation to understand the fundamentals.