Advice for someone looking to get into software engineering
A friend recently asked for what advice I would have for her son who is considering going to university to study computer science.
Here's my advice.
Being a good software engineer requires grit and self directed learning
This post is going to assume that person wants to become a good software engineer.
Certainly it's possible to have a successful career in software without being a good software engineer - having the right showmanship or gift-of-the-gab for example - but I don't feel qualified to advise on that strategy.
Being a good software engineer involves working things out yourself - that might be:
- Googling
- Asking LLMs
- Reading documentation
- Asking questions on Stack Overflow
- Asking questions in GitHub discussions
- Creating minimal reproductions
Somebody can't teach you to be a good software engineer. In my opinion a good software engineer isn't just having the right collection of knowledge, it's having the right attitude. (But accumulating that collection of knowledge is also a necessary part of what makes a good software engineer.)
The point here, is that you can't just go to university, do the courses, and come out as a software engineer. You need to develop those engineering practices - and those are things you can develop without being at university, just by the act of coding.
Even if you do go to university, you'll still be learning on the job anyway - the job of being a software engineer is learning how to be a software engineer. This isn't a pithy joke - it genuinely is what the job is.
Granted - having the right mentor, being exposed to the right ideas is going to greatly accelerate your progress - you still need to have that self directed learning - you can't wait for someone to teach you - they won't have the time and people are going to be more inclined to help people they can see helping themselves.
You don't know what you don't know
Where structured learning, like university or other courses can help, is in providing a syllabus of content that might not have occurred to you.
Say you were to learn purely from google, you might search:
- "How to become a software engineer"
- "How to write JavaScript"
- "How to deploy a web server"
And you would encounter tutorials etc, and you would get pretty far with this.
But there's a whole lot of content that you're not going to think to search - this is where an external source of direction can be helpful.
The value of university is not teaching you software engineering - it's in teaching you computer science
When I was at university I remember chomping at the bit to be writing real applications.
You have your whole career to do this. Things like code architecture, writing testable code etc, in my opinion, universities are not particularly good at teaching anyway - because chances are the lecturer's do not have extensive industry experience!
Instead what universities are good for, is teaching the more theoretical/academic aspects of computing - algorithmic complexity, computer architecture etc.
This kind of thing is perhaps not so useful when you're trying to learn a JavaScript framework, and just getting the code to work but becomes more relevant several years down the track when you're trying to eek out every bit of performance you can.
As it relates to university - I think the ideal thing would be to be working as a software developer for several years before going to university. I think having already been working as a software engineer is likely to give you a greater appreciation of what you're learning at university - and it's also going to make the university work a lot easier - as you're not struggling with basic syntax.
With that said - the practical reality for a lot of people is that no place is going to hire them as a software engineer straight out of high school - and so going to university is simply the practical step forward.
Experience matters
While it's fair to say that the right attitude and some level of genius is going to mean that somebody with one year of experience might be a more effective software engineer than someone with ten years experience, there definitely is a whole class of programming gotchas that you just need to spend enough time coding to encounter and learn that lesson.
Practical advice
- Don't wait for someone to give you permission to start coding, start now.
- Create a GitHub account and start coding there.
- If you go to university, save your assignments there. They'll be interesting to look at when you've left university, because chances are you won't be working on anything similar 'in the real world'.
- Your mileage may vary, but I've personally found that the best way to learn is to have some project I'm working on/have some problem to solve. I've found I struggle with motivation to 'learn for the sake of learning'.
- For example, an early project that I got hooked on was a geometric art generator website. This had me learning how to deploy an application, how to do social integrations, how to use cloud services, etc.
- The hard part is in finding that project.
Questions? Comments? Criticisms? Get in the comments! 👇
Spotted an error? Edit this page with Github