Young developers are different. They were taught to have Stack Overflow up all the time, to have a working environment set up in minutes and the firewall turned on by default. Taking this last example in consideration, I can attest that’s right. Until the Networks course, Windows Firewall and Uncomplicated Firewall on Linux was the furthest I have ever explored the system.

And that was enough for me, and that is probably enough for most people. Why would you bother learning how to do something, when you don’t need to? Especially when talking about one of these tedious jobs that have already been implemented for you so well. In the end, humanity evolved because we did not have to reinvent the wheel every day. Yet it seems that there are important skills graduates don’t have, and the technological advancements might be the root issue.

It’s not the Computer Science degrees that lack good material, and it’s not the industry that wants professionals in one framework or another, but rather it’s the way the technology has evolved that kills off the curiosity of students and their motivation to discover new things. For example, I have not given too much notice to Computer Security until Google invited me to use two-factor authentication for Gmail. My experience in HTML was basic until I decided to host my website. And daemons in operating systems were completely off-topic until I had to execute a script every three hours or so.

Just to make it clear, this post is not a tutorial on how to become better. This is a pure observation on the differences between the old generation and the new generation of software engineers, between the old and the new way of mastering the art of computers. The internet has simplified programmers’ lives a lot, and this is definitely for the good. Nevertheless, having apps that do literally anything on your behalf, how do you grasp some of the fundamental concepts involved in whatever it is that you are using?

******

I would argue that until a couple of years ago, running a personal server was not something the average Computer Science student would do, because it seemed too technical and — being a bit blunt — too complicated. Projects like Raspberry Pi made that more approachable, and now the average student can get their servers online more easily. That is what young generations need at once: a way to understand the basics in a simple and modern fashion. Going a bit further, they need a way to get engaged in digging up technologies and figuring out their applicability.

As a personal anecdote, only recently I have managed to recognise how I got to my current level of knowledge: it is not before I gained interest in a topic that I spent time working on it. This is true for the books I read, the shows I watch and the code I write. Gaining that interest is the hard part. Information is available all over the place and choosing what you consume can be difficult. We are put in a situation where our minds are continuously bombarded by flashy topics, and without knowing too much about any of them, we are forced to choose one over the other.

Perhaps that is why software engineers have evolved from understanding every part of a computer to spending their whole careers in one field exclusively. No one has to know how to do everything, and thus they can focus on their priorities more. The industry has taken this to the extreme, and programmers — the ones supposed to produce the software people consume — have become consumers themselves. Developers need to know only how to open up the IDE and upload the code to their remote branch. Everything else is managed automatically.

For the minds out there that want to go beyond this level, one solution is to surround yourself with interesting people. Form a community that fosters good knowledge and stay as active as you can in its development. Another solution that worked for me on an indescribable level is to look up past Capture the Flag challenges and solve them. I found that CTFs cover so many topics and present the information in such a simple and challenging manner that I can’t stop enjoying them. Ultimately, you need to find a reason for yourself to be constantly engaged.

I would like to know what other ‘old’ pieces of technology you feel the industry has forgotten about. In the same way I discovered firewalls, I would be thrilled to learn about something else that I may have just turned on by default. It’s hard to escape the bubble if you don’t even know you are inside it. If you feel like I missed anything or you want to continue the discussion, leave a comment on HackerNews, Facebook or Twitter or send a direct email at [email protected].

References:

  1. https://crawshaw.io/blog/remembering-the-lan
    – On reminiscing about the past
  2. https://arxiv.org/pdf/1805.02742.pdf
    – On how “software engineering” came to be
  3. https://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1305.html
    – On understanding software engineering (some of Dijkstra’s ideas)
  4. https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html
    – On teaching CS (more of Dijkstra’s ideas)
  5. http://lambda-the-ultimate.org/node/264
    – 2004 discussion on some of Dijkstra’s ideas presented in the two links above
  6. https://news.ycombinator.com/item?id=22649291
    – 2020 discussion on how to learn Linux
  7. https://missing.csail.mit.edu/
    – 2020 course on the practical skills degrees do not teach
  8. https://www.florio.dev/20200328-letter-to-myself/
    – Some tips to consider before going into your first job
  9. https://news.ycombinator.com/item?id=7372997
    – 2014 discussion on old developers, might be nice to get an insight into what you might expect
  10. https://news.ycombinator.com/item?id=13658637
    – 2017 discussion on the age at which people started software engineering
  11. https://web.mit.edu/humor/Computers/real.programmers
    – 1982 article on the different types of programmers