Entry No. 10

Dealing with change in the IT industry

When I first told my parents that I wanted to study computer science, my father took me aside and asked me: “Are you sure? The computer industry changes very quickly. Are you willing to keep learning new things, and throwing old things out, for the rest of your life?”

I told him I was sure I could take it; I couldn’t imagine a world in which I wasn’t learning new things.

I realise now that I was naive. When you grow older, you grow to have additional responsibilities. Some of us grow to take care of one’s family, and many of us grow to have additional interests and obligations.

This growth doesn’t hide the fact that it is true that in my father’s career, he did not experience as much volatile skills change as I have already experienced in the comparatively short career that I’ve had. It is also true that if you’re a programmer in this industry, you will need to keep up with technological change.

Wisdom from Older Programmers

The good news is that our industry has seen a bit, and we’ve got leaders who are willing to share their experiences online. (I don’t think the same can be said of many other industries - law or teaching or banking, for instance).

See Tim Bray, the co-creator of XML, in his reflection of his long career in software:

Should you stay tech­ni­cal? The bad news that it’s a lot of work. We’re a young pro­fes­sion and we’re still work­ing out our best prac­tices, so the ground keeps chang­ing un­der you; it doesn’t get eas­i­er as the decades go by.

The good news is that it doesn’t get hard­er ei­ther. Once you learn to stop ex­pect­ing your knowl­edge to stay fresh, the pace of in­no­va­tion doesn’t feel to me like it’s much faster (or slow­er) now than it was in 1987 or 1997 or 2007. More good news: The tech­nol­o­gy gets bet­ter. Se­ri­ous­ly, we are so much bet­ter at build­ing soft­ware now than we used to be in any of those oth­er years end­ing in 7.

And an­oth­er thing that may not be ob­vi­ous: It’s not a one-way door. I stepped off the tech­nol­o­gy train, spent years in start­up man­age­ment and tech­nol­o­gy evan­ge­lis­m, and climbed back in­to en­gi­neer­ing life with­out too much pain.

It’s worth it to read the rest of the article, as it’s got some really good arguments for going into management, VC, startups or big companies; Bray’s been in most of them, and has thoughtful comments on the rest.

Ideas not frameworks

If you accept the idea that learning compounds (as we’ve discussed in the second essay in this series), and that the more you learn when you’re young, the easier it is to learn new things when you’re older, then you must also accept the corollary: that the ideas you learn are more important than the specific technologies that are used to implement them.

Or, to use a stupid example: once you learn for loops in one language, then you will automatically understand for loops in every language that has them! The idea is more important than the language.

Similarly, this idea applies to systems as well. It has been said that “Those who do not understand Unix are condemned to reinvent it, poorly”.

There is truth in the pithy saying. While technologies emerge, are hyped, and are seen to replace those that are older, in reality, very little is truly new in Computer Science. Long before React’s idea of the virtual DOM was popularised by Facebook, game programmers accepted as standard the idea of updating models and having the equivalent sprites redrawn, automatically, in a render loop.

Witness, too this essay by programming language researcher (and Aspect Programming co-creator) Crista Lopes. She laments that nothing truly new has emerged in programming languages since the 90s.

Whether this is true is not the point (Jean Yang’s work on enforcing information flow policies at the language level may be truly novel, for instance) – the point is that there aren’t many languages today with completely alien ideas in them.

All this implies that there is a set of ideas that one can learn, and if one learns a large enough set, one becomes more resistant to the winds of change. With this in mind, software engineering becomes less like ‘throwing everything out and learning everything all over again’ (as my father argued), but more like learning new iterations of old, proven ideas.

And that, hopefully, shouldn’t seem very scary to you.

This post is part of the FCS Career Playbook for Software Engineers in Vietnam. Check the guide for more software engineering career advice.