You’ve decided you want to be a software engineer. You’re looking at languages, you're thinking about courses and you're excited about you future developer job and amazing career … the salary isn’t bad perk either 🤑
You're wondering, though …
Do I have what it takes to be a developer? 🤔
Learning to code is 100% possible for anyone to do. Millions of developers who don't a have a CS degree prove this. But you also need the right mindset to succeed long term. Here are the top 5 personality traits you need to work on to become a great software engineer.
1. Software Engineer Personality Trait: Curiosity
Curiosity is vital. Not just of technical topics but of the context your code runs in, the people it impacts and how it changes their world
Have a think about how curious are you. Could you be more curious about the work you do and the world around you?
It's pretty important for software developers, because for your whole carer you will be learning new things, solving other people's problems and investigating surprising and infuriating bugs.
Developing your curiosity is going to make the whole process, and your whole career, a lot more fun. Aim to be the most curious person in the room and the universe will pay you back in spades.
Read to the end to find out how I stay curious and learn about areas unrelated to software engineering.
2. Software Engineer Personality Trait: Persistence
Learning to code is hard. Persistence is the only thing that will get you through.
Debugging code is hard. 5 days into a bug hunt that feels like it’s going nowhere, you're going to need to be persistent to get it solved.
Much of your career you will be working on problems that you don’t know the solution to. You will know that you can solve it eventually but when things get hard you don't want to have to rely on motivation. Motivation is a fickle beast, instead persistence is the thing that will carry you.
If you couple this with curiosity, then rather than getting frustrated and annoyed you will simply see each obstacle as an opportunity to sate that curiosity and learn something new.
Are you persistent?
If you’re concerned you aren’t persistent enough to make it as a developer then I want you to take a look back at previous successes you’ve had. Look at the line of where you started to where you are now, see how much you have improved in some area. That improvement doesn’t happen by chance, it takes persistence to make a change and improve.
Improving your persistence
If you want to improve your persistence then take a leaf out of the weird and wonderful world of bodybuilding and weightlifting - two areas I am passionate about. Each session a weightlifter goes to the gym and works slightly harder than last session. They put a tiny amount more weight on the bar. Or they do a couple more repetitions of an exercise. Or even just do their reps a little slower. By doing this they incrementally improve every day and work toward their goals.
This process is called progressive overload and it takes patience and persistence.
You can apply it in your coding. Each day try to stick at a problem just little longer. Make a piece of UI slightly nicer or simply take some more time than usual to actively pursue making something better.
Doing this will improve your persistence and give you a positive feedback loop to keep going and keep growing as a software engineer.
3. Software Engineer Personality Trait: Ability To Learn
The ability to learn is vital for software engineers because once you've learnt to code that's not the end of it. You'll be learning new things for the rest of your career.
That's a good thing though! It means your career will evolve and change without you even needing to try.
Most industries would love for that to be the case.
You'll need to learn new skills every 2 to 5 years and there will be way more things to learn than you can ever learn. This means you get to choose where to take direct your studies.
If you get bored of making mobile apps you can jump into game development.
Bored of games? Get a job at a huge tech company and help solve the biggest scalability problems in the world.
Fed up of working for "the man"? Go freelance and pick and choose your projects.
Needing to keep up in software isn't a bug, it's a feature.
How to make time to learn as a busy software developer
As your life changes and evolves it can be hard to make time to learn. Ideally you would block of time to make things with new technologies but the time investment is large and not always feasible. So, when I don't have time to build I find other ways to stay on top of changes in web development and software.
My favorite way is with podcasts and YouTube videos. I’ll listen while I'm doing chores and running errands and watch whilst I'm eating breakfast or lunch.
Here are my top two of each for you to keep up on developments in software engineering when you’re stuck for time.
- 🎙 Syntax Wes and Scott with the tastiest web development treats
- 🎙 CodingBlocks Michael, Allen and JZ every two weeks deep diving into the most important topics in the software development world ... and keyboards .... and games ... and other fun stuff!
- 🎥 Fireship weekly explainers, tutorials and parodies about the web dev world
- 🎥 CoderCoder tutorials, mindset and explainers with Jessica Chan
And of course my own All The Code Podcast and All The Code YouTube channel 😉.
4. Software Engineer Personality Trait: Focus
Being able to block out distractions and hold complex models in your head is one of the key requirements of software engineering. One of the things you hear a lot about is the damage of context switching and how it causes productivity losses. The reason it’s so damaging to a software engineers productivity is that it takes time to build that mental model of your code work. If you get into a place where that model is stable in your head and you’re writing great code, then loosing focus is the last thing you want.
My ADHD tendencies mean that I’m very good at focussing for short bursts when I really care about a problem or topic. However if longer, sustained focus is needed then I need to start diving into my toolbox of tricks to keep me on task. Here's what works for me:
- Walking on a desk treadmill occupies part of my brain for about 90 minutes of pure focus
- Listening to music I know well can keep me in the zone
- Moving to a new, ideally more comfortable location
- Making the room darker
- Leaving focus work to the end of the day when I’m just a little bit tired
This are what work for me. For you it could be a very different. Maybe you like silence or lots of sunlight. Take the time to find out.
5. Software Engineer Personality Traits: Pragmatism
Every software engineer needs to learn where they fall on the pragmatist vs perfectionist spectrum. Are you a "just solve the problem" type? Or do you want to craft an artisanal solution to every problem factoring in all eventualities?
I lean heavily towards pragmatic solutions. I'd rather ship something that will need to be rewritten in 12 months time that make something perfect that never gets used to its full capabilities. My belief is that we can’t make a perfect system because software is a living thing, it changes and evolves as we learn the problem space. Therefore I don’t aim for perfect, I aim for “good and improvable”.
Others hate the idea of shipping something that can't deal with all eventualities and might need rewriting in the future because something got missed.
We are ultimately paid to solve problems and ship software, so if you lean to the perfectionist end of the spectrum then make sure it's not to the detriment of that goal.
Software engineering pragmatism framework
The spectrum from pure pragmatism to pure perfectionism is large. To keep me on track I use a framework for dealing with the tensions between the two:
1. How consequential is the code?
If something goes wrong in the code could it cause injury or worse? If it's medial equipment then aim for perfect. If it's an app to add emojis to pictures then don't worry so much.
2️. Technical unknowns greater than business unknowns?
If I know that there is market demand for the software then I can take more time to get it right. My technical unknowns are greater that my business ones. If it's a new app in an untested market then my business unknowns are greater then I need to ship early so I can learn what the market wants.
3. Easy to reverse?
If I find myself quibbling over decisions that are easy to change or fix later, then I err to pragmatism. If making a change is months of effort and costly then I grudgingly lean to perfectionism!
4. Lazy factor
Pragmatists often loose out to perfectionists because it sounds like we want to cut corners. So, I always check in with myself: am I making this choice because I've applied the above questions and am happy with the answers, or am I just being lazy?
I won't tell you how often number 4 is the catch in this framework so it’s a good point to have! 🤭
Software Engineer Personality Traits Wrap Up
Don’t worry if you feel like you have a long way to go on really refining these 5 traits. Most software developers do! Those who say they don’t are almost certainly fooling themselves. Take time to focus on improving where you can and remember, software engineering is a journey. We spend our whole careers looking for ways to solve problems and improve systems. Applying the same process to ourselves is perfectly natural.
How I Increase My Curiosity
As promised at the start here are my favorite YouTube channels for increasing my curiosity that have nothing to do with software engineering.
🎥 CGPGrey: If titles like "Hexagons are the bestagons" and "How to be a pirate: Quartermaster Edition" intrigue you then welcome to the Grey Universe.
🎥 Veritasium: Learn about "The Man Who Accidentally Killed More People Than Anyone Else" and how "Most People Don't Know How Bikes Work"
🎥 Real Life Lore: Mainly maps and interesting facts about the work. Like why over 90% of China live in the eastern 50% of the country
🎥 Mark Rober: Ok this one is engineering and he sometimes writes code but he also makes mazes to challenge squirrels and the worlds largest domino mural
🎥 Yes Theory: See some of the most obscure, challenging and interesting places on earth in stories like "Inside the World's Most Luxurious Abandoned City" and "Traveling to the Least Visited Country in the World"
Curiosity is vital as a software engineer so make sure you nurture it 😀