The Software Engineering Generalist

What does it mean to be a generalist and how can you become one?
Today, the world is experiencing a shortage of software engineers. This is not a new thing — I, for one, have been reading about it for years.
Our industry is rapidly changing, with new frameworks replacing old ones, technologies coming in and out of fashion, and new programming languages becoming ‘a thing’ almost every month.
The pace of innovation has greatly accelerated in recent years and will probably continue to do so.
What should a developer focus on?
When thinking about this question, I look at what the most successful tech companies are doing. They mostly hire generalists!
Sure there are a lot of cases where a more specialized engineer is needed (Linux Kernel development, eBPF, etc.), but in most cases an engineer who understands basic programming and Operating System constructs can easily adapt to whatever the employer is using.
If you’re just starting out, choose a programming language and learn it well! Explore its ins and outs, and you’ll find yourself learning a lot about areas you didn’t know existed. Choosing the language is essential though; right now, in 2021, I’d place my bet on one of Golang, Javascript/Typescript, Kotlin, Python, Java, or Rust.
If you master a language, learn another. Build a side-project and go for it, full-stack.
Early in my career, I started with PHP. At the time, there were no Cloud services to which I could deploy, so I also had to learn how to host my sites — so I learned how to administer Apache. Of course, Apache had to be installed somewhere, so I learned Linux. And the data needed to be stored and queryable, so I learned MySQL. This used to be called the LAMP stack; it was “full-stack,” before the term existed.
Today, one can simply build projects and deploy them in Google Cloud or AWS with little knowledge of how it all works — but that’s where the true generalist comes into play. Avoid the “Siren’s Call” and build everything yourself — for fun!
buy a domain
configure its DNS records
set up a VM (or VPS), and then Linux
install and update system dependencies
optionally, use something like Docker to run containers
deploy an App Server
deploy your code
install a Database
tune it
cache data and figure out how to invalidate it
set-up an Observability stack; create alerts
tune your app and database
load-balance traffic
set up a CDN
learn about email (MX-records, SPF, DKIM, DMARC)
integrate with third-party service providers (e.g., ConvertKit)
automate everything (e.g., Terraform, Ansible, a CI/CD pipeline, hooks)
do it all again with other technologies/languages
teach others / write about it — only then will you attain true knowledge!
I hope this post was useful! I will continue updating and developing this post in my digital garden.
If you want to get notified of any changes, *please subscribe to my newsletter! [Join my Newsletter MihaiBojin.com](https://motivated-founder-807.ck.page/db1cf284bf)*
Thanks!




