A Few Thoughts on Ben Northrop's "Reflections of an 'Old' Programmer"

It's always interesting to see what older people have to say about things. Their opinions are based on many experiences, rather than feelings.They have seen what works, and what doesn't work. "Reflections of an 'Old' Programmer" is an article written by 40 year old Ben. My expectations before reading were:

1. He will mention how "things change the most in our field".
2. Learn a technology that will be around for awhile.
3. The fundamentals are the most important.
4. There will be something new and insightful to learn from Ben that I haven't heard yet.

I was disappointed to be right, and for point 4 not coming through. Now I realize it doesn't take experience to learn these things. It takes being pragmatic and wanting to survive in the real world. The issue of "keeping up" is only an issue if you want to be a master of all things. That's OK to want to master something, but everything in the software world? The only thing to be said for those trying to do just that is: good luck.


We are knowledgeable and productive, yes, but we also understand that we may actually know fewer (useful) things than we did at a prior point in our career. A non-trivial amount of our knowledge has decayed, and we may not have had the time to accumulate enough new knowledge to compensate.

-- Ben Northrop


It's relevant to mention my age. At 22, I think of myself as "doing well". I don't like using the word "successful", because it implies I've accomplished everything I'll ever need to. I'll call myself successful when I'm living on my own private island or estate, eating amazing dishes day in and out, with a steady stream of money flowing in.

Ultimately my goal is to have strong knowledge (not just "I have a lot of broad knowledge") in Computer Science (what I studied in college and university), Software Architecture, and if I get a chance before I die, Mathematics (not sure which branch yet). It's too bad...If I could do it over again, I would start with Math. It is in everything. I could write and write and write about how amazing of a tool it is, and why everyone should strive to know everything  they can about it, but I won't. Let's talk about what I do know already.

I know that when I was around 20, there was a big problem for me. I had been using too many languages. C, PHP, Haskell, Swift, C#, Visual BASIC, Ruby, Python, Java, JavaScript, BrainFuck and a few others. The issue is a lot of these languages offer different advantages, and some are too fricking similar.

One thing they have in common is they're "general purpose" across the board. Great! So that means anything is possible in one or the other. Some offer object-oriented ways of doing things, some imperative, some declarative, and so on. That is the first issue. This alone is a show stopper, because you are forced to re-remember how to a specific thing in a language you know you knew how to use 2 weeks ago. A great example is string splitting. If you can remember how to split a string off the top of your head, in the entire list of languages I listed...Better save it as a bar trick, because that's amazing.

The second problem is getting things done. In the real world, businesses don't want to waste time experimenting, unless they've got the cash which is uncommon in most cases. When you've been using 10 languages on and off, the first problem above starts to really hurt. You know the theory, you know how to traverse a tree many different ways, or know how 7 different sorts work. The trouble appears when you're asked to implement. Now imagine this in an interview setting, where the big wig in front of you is cringing because you have to use Google to remember how to split a string.

Ben describes his "knowledge issues" appearing around Expert level. Every 5 years he's no longer an expert.


Ben's experience with his career.

I think the reality is a lot of us see this problem earlier in our careers. Below is what I've personally encountered.


My experience. That dip in the middle is a paradigm shift.

2 years ago I was in the danger zone. I knew a decision had to be made or I would end up running the rat race forever. Work smart, not hard. What will my "get things done" language be? This was basically my criteria, after a lot of thinking.

1. It must be proven. Something that has been used over many years and still around.
2. It must be future-proof. A language that is being worked on constantly.
3. It must encourage remote work.
4. It must be "easy to port".
5. No need for a special environment.

Later on I use this list to choose specific libraries or frameworks as well.

Now lets take the list of languages I've used and see what applies. Anything in parenthesis means "possibly".

C - 1, 4, 5
PHP - 1, 2, 3, 4, 5
Haskell - 1, 2, (3), 4, 5
Swift - 2
C# - 1, 2, (3), (4), (5)
Visual BASIC - 1, 2 (?)
Ruby - 1, 2, 3, 4, 5
Python - 1, 2, 3, 4, 5
Java - 1, 2, (3), 4, (5)
JavaScript - 1, 2, 3, 4, 5
BrainFuck (lol) - 4, 5

That leaves me with PHP, Ruby, Python, and JavaScript. I included C# and Java in my decision because they are very in-demand not just in my area, but in the entire world. They were ruled out because it is rare to hear about remote C# or Java developers. I didn't want Ruby or Python because I knew they're mostly used in a scientific or web setting. Python is also not very in demand around here. That leaves us with PHP and JavaScript. I went with JavaScript, because PHP closes you off from the one platform that connects us all: the browser.

Maybe you foresaw this. If you did, and you're not using JavaScript because "it's a terrible language", stop thinking that. A terrible language wouldn't try to improve itself. Every release of ECMAScript has brought great change to the language. Lets not get distracted with sweet language war conversation though.

This has been the best decision of my software creation (lets make this a thing; a term to recognize programmer/software developer/software engineers' wear 3 or more hats at once in the real world) career. 2 years of using only JavaScript has allowed me to actually focus on what I want. I get things done. I've been working remotely for 4 years. From terminal applications to front-end web apps to pure server-side applications, and the sweeter things, like theory, architecture and Math. This is my life now and forever. And it only gets better.

What about all those frameworks, you might say? Again, apply the same principles. React is not proven. It's popular, and once it reaches 5-7 years of life, I will consider learning it. But until then, just like Ben, I have chosen Angular 1. Yes! You read that right, Angular 1. It supports component based development, just like React and Angular 2. It is super fast, as fast as React. It is still being worked on. The release of 1.6 has further increased performance by removing extraneous features. Best of all, since Angular 1 is at the age of 7, there will at least 7 years of legacy code to maintain. I don't expect Angular 1 to be phased out any time soon in the next 3 years. And once that does go "out of style", I'm not worried. If React is dominant, I'll have no problems. I can use the same component-based development principles I learned from Angular. The best part really is they all use the same language underneath. All in all this will keep the money flowing, and what we all strive to be: relevant.


But on this particular morning, at the cusp of 40, I have to admit I feel a little drained. I know this is part of the job - if I want to stay relevant (and well paid), I know that every so often I need to cast out some of the knowledge that I've so dutifully absorbed, and gear up up for the next journey. It's just how it is.

-- Ben Northrop


It's a good thing I'm acting now than in another 20 years. Maybe you should too. Eventually you become the guy who creates these new methods and technologies, because you've had time to develop ideas in a stable environment. Then it's your turn to spread the news about your new fantastic design patterns and frameworks!



Here are some good quotes from people who had comments for Ben:


Yes, there are algorithms and design principles, and they stay, only in the era of off-the-shelf libraries and duct tape used to bring them together they don\'t matter. Many (most?) algorithms and principles in use today were designed in 60s-70s-80s.

-- Victor

It is so true. That is why I would also like to pick up a book that is a collection of these principles and papers that has commentary and other useful material. I think we are in desperate need for this "Software Creation Bible".


I am in embedded software. Here the chips that i need to know quite well go obsolete quickly. Each new assembly language is similar enough that the learning curve is short, but the learning continues on at a fast rate.

-- Eric


I've taken the pleasure of doing Game Boy assembly to start touching embedded software. I have learned a lot. If I had been hopping between devices that use similar assembly (z80, NES), I think I would have been further behind than where I am now. Since I've established a somewhat solid foundation, I've been able to dive into z80 and NES assembly no problem. The learning continues as Eric says, but the learning curve is short.


The real secret is simpler: I like what I do.


-- Elf M. Sternberg


He's right you know.

Comments

  1. I am (50) years old and I am still happily programming within such a small part of the IT space that you wouldn't believe it if I told you where my mastery lies....

    The bottom line is that programming requires a concerted effort to learn to master the language - not just know it but to MASTER it including the nuances of the language. I've done that. The language I know I feel like I know it better than just about anyone on the planet - why? Because I've spent the last (17) years mastering it - ONE language.

    So, now I'm an expert with the tool and the language I've chosen. NO ONE can out perform what I can do in my field of expertise.

    All of the concerns the author of the article outlines do NOT apply to me. I can develop a proof of concept for just about any kind of application you can imagine within a week. I can solve just about any problem you lay out for me because I understand the language I've mastered at a very nuanced level.

    Forget learning (20) languages because if you do that, you can MASTER NONE OF THEM - way too many details to have to remember.....if you don't use it you lost it....turn your outcome into income....I've done that over an entire career....by the way, the language I've mastered - VBA.

    ReplyDelete

Post a Comment

Popular Posts