I was invited to speak to an auditorium of young high school students not so long ago. A few hundred teens, full of energy and enthusiasm and with a plan to become software engineers. Well. A few of them had a plan. Some were there as they had some time to spare before imminent time for lunch.
Without further ado, I took upon the challenge of giving them an overview of what it takes to become a software engineer and what traits they should develop to be successful players in the industry, given that it’s now more than 25 years since my first lines of code. I thought about my experience and the world I was in when I started building and learning about stuff and things.
There was no point in explaining how the internet was a new and shiny (+shitty) yet magical thing back then and how there was no StackOverflow, no GitHub, no Torrents, no broadband and phones were all wired up and only for calling. I only focused on a few key competencies, traits and findings that I would consider consistent and most valuable throughout my career. Also, I wanted to identify traits I cherish when looking for new colleagues or team members.
This one is the most obvious and likely also the most overlooked. Especially in the early days, be curious! Explore. Don’t be afraid to try many different things. When you master something, don’t just stay there. Learn the tools that surround you; learn the tools that you use. Learn about the tools that your friends use. However, some might say that that’s not the right path to specialisation. I agree - regardless, especially early in your career, you need to broaden your understanding of the ecosystem. Start with basics, continue with frameworks and systems, toolsets and networking.
I would also argue that you need to embrace and understand that everybody was at the point in their career where they didn’t know much about anything. Not knowing what you don’t know can be considered a considerable challenge. To battle that - be brave. Be brave to ask questions, no matter how silly they might be. Put effort into doing your research and practice formulating your questions in a way that people can help you navigate. Don’t ask to ask. Just ask!
Find the pleasure in discovering new things, and don’t stop there. Go deeper and never stop! Try to understand how things work. And if you can’t. Try to break them. Figure out what those black boxes do. Don’t be afraid to open them up and blow them into pieces. Have you ever crashed a Linux kernel by loading your own custom faulty kernel module? I have. Do you know what happens when you do that? I do. How do you build a Roblox game? I have no idea. Yet.
Oh, and modern education has this beautiful way of overloading you with a bunch of stuff that might be complete garbage. Don’t allow that to put you off or temper your curiosity.
Although this one might be a bit contradictory to the curiosity. I believe that focus is one of the toughest ones to master today. The world we live in now is skewed, so everybody is racing for your attention, time and peace of mind. If you remove all distractions that bombard you daily and hourly, you might get that precious, calm time to be curious and do the legwork. Leg work is needed to achieve anything. I advise you to set goals in your life and for your projects. Long-term, short term and something in between. Then evaluate yourself against them. Be critical and try to be objective about your ability to achieve the goals that you’ve set for yourself.
One good piece of advice to focus more on yourself is to separate time so that you have time for consuming and reacting to stuff and then another part. Time to produce, create, build. Establish clear separation. Good division of these two is usually physical.
There are a lot of techniques, tools and ways that you can use to learn how to be more focused. One that helps me is introducing some routine with physical activity in your life. Running, cycling, walking, MMA, playing the drums, whatever… and make sure it’s fun! Nothing sucks more than doing sports that aren’t fun.
Software engineering, or engineering in general, is all about solving problems. Yes. Building things means you will have to solve problems, a lot of them. Your long-term value will be determined by your ability and experience when solving problems effectively and if you are lucky with technology. But there is also math, physics, philosophy, art and sometimes silly things such as paper, pencil or hours of Zoom calls with people who don’t speak your language.
You will fail! A lot! Most of the time, you will fail. Do not allow yourself to be crushed by the emotions that come from that. It is part of the job. Embrace it. The only way you can become a good problem solver is to solve many problems; that means you’ll have to expose yourself to many of them.
Hey, you’ll start looking for problems to entertain yourself and learn new technologies at some point. The industry calls these “side projects” and “toy projects”; some might even go as far as saying that they are “side hustles”. One thing is also sure about these. Your next boss and your colleagues will appreciate them, especially as it will allow them to look into your interests, skills and ability to solve challenges.
The world is a vast place, and it has a lot of people in it. They don’t often speak your language, share your values or live near you. However, technology has connected all those people. Think of the world as this giant connected network of beings. Then imagine that these connections are tools for creating teams, groups, communities, and tribes. You can belong to multiple tribes. You can find tribes. You can even create your tribes.
When you hit on a problem, when you need support or when you need inspiration. Look into these tribes. There are millions of people who are just as eager as you to learn things, master things and explore things you. You are not alone. Talk to them.
If it’s a good community, they will accept you. They will help you, and they will welcome you. Being a good and respectful tribe member will pay off. I promise.
This one is often oversold, and especially if you are a young person, it can be very frustrating and soul-cruising to be burdened with a quest to find your passion. If you find your passion, your calling, especially early on. Good for you!
However, I would consider that to be a very rare thing. I believe that to value something and become good in something or even master something, you need to spend time and effort on it. You will need to evolve discipline and do the shitty things repeatedly before you become good and before things are fun. I would advise you to combine the abovementioned things and create a feedback loop that will give you a sense of accomplishment, satisfaction and progress. Rather than doing tremendous long and huge things. Do a few smaller ones repeatedly. Find excitement and joy in accomplishing smaller tasks. Completed tasks accumulate and lead to immense success.
This is internet advice. Written by an old guy. I wouldn’t have read it when I was young.
However - I sure would like someone to have told me… now. Sometimes you need to discover things for yourself. Hopefully, you’ll have a lovely journey and fun along the way. I sure did.
P.s.: If you’ve liked this thing, please share it and let me know what I’ve missed in the comments section below.
This article was also published on my LinkedIn profile as an “Becoming S/W Engineer”