If you are engineering curious but don’t know where to start, I recommend reading the following first:
TL;DR
Be curious. Lean into discomfort. Gain visibility into problems. Find a mentor. Aim at where you want to go. Focus and prioritise. Immerse yourself.
Be curious
The sheer number of hours required to learn a skill like coding is huge. Without the right motivation, it is unlikely that you’ll put in 6-12 hours per day for 3-6 months in order to land your first job as a junior developer. It helps, and is probably necessary, to be insatiably curious, have fascination with the subject, and to have some wonder and excitement about what you might be able to achieve with this new skill. Do you want to build a mobile app side-project? Perhaps you just want a job that pays well, gives you great intellectual stimulation and gives you flexibility to build the life you want? To get there, you need a growth mindset as you inhabit the role of the apprentice (read the whole apprenticeship series!).
Lean into discomfort
Be comfortable with discomfort and not knowing. Being a software engineer is ultimately being a problem solver. You don’t start out knowing the answer, but you have some faith that you can find a solution. The fear of the unknown can be crippling at times, like being in the dark. But often you just need to illuminate the single step in front of you on the path to progress. Then repeat. Even with many years of engineering experience under my belt, I still often feel like an imposter. This is good: it keeps you humble and prevents complacency, and is a sign that you’re in a position that challenges you. In the zone of 4% challenge to help get you into flow state. Be brave and have faith. This is the first step to gaining visibility into a problem.
Gain visibility
A common trope is that a software engineer is a glorified google searcher. While there is obviously a whole lot more to engineering than google searching, most of your answers as an engineer will come from google and then StackOverflow. This is the single most important lesson I learnt on my coding bootcamp: how to debug a problem. When you’re stuck, you need to gain visibility. If your code isn’t working, is there an error? Read the error, it will give you more visibility into the problem. Then use your reasoning. Can you solve the error using your reasoning and the error message alone? If not, gain more visibility! Maybe you need visibility into the error message: google it. Perhaps you need more visibility into where the problem is happening: add logging statements and re-run the code. Follow the loop of reasoning-gaining visibility-reasoning until you get to the answer. Don’t sit there in despair if you can’t see. Gain visibility.
Find a mentor
Mentoring is the most valuable resource to help you develop and progress in your career. A direct boss is a good option, someone who’s invested in your growth, and with whom you have frequent contact, ideally in a position that you’d like to be in some day. Additional mentoring from members of your wider team is a bonus. A mentor at your job can guide you on many aspects of your working life, including code reviews, architectural thinking, leadership, and navigating your career and company dynamics. When interviewing for jobs, identify the potential for mentorship. Ask your interviewer how you will be mentored. It not only looks good to the interviewer, showing yourself to be a directional and committed engineer, but is also vital to avoiding time wasted in a role with little to no guidance. If you are in a role with no obvious mentor, get creative in finding one. MentorCruise is a great option. You can also look to your network, meet-ups, slack groups, or finding another job.
Illuminate the path ahead
Identify a path that appeals to you, then find out which skills someone 5 years ahead on that same path would need to have and begin to acquire them. I’ve wasted a lot of time in my career learning the wrong thing, partly due to situation (doing what my job told me rather than what I wanted to do) but partly due to lack of focus. Looking back, I should have spoken to at least one, probably a handful of Senior Data Engineers and asked them about the tools they use and what they would recommend to learn. You hit what you aim at. Take aim as far as you can, and then plan a curriculum. Learn to focus, create a personal curriculum, and ruthlessly prioritise your personal development time in order to follow that curriculum (block out 1-5pm on a weekday afternoon, if your job allows), and do what you need to do to pick up those skills. Watch some video courses, read some books and build some side projects.
Focus
Procrastination is time wasted. No one has perfect focus but it can be optimised. Focus and prioritisation go hand in hand. Prioritise the 1-2 most important tasks of the day, and do them when your brain is in peak performance mode. For me that is 7.30. AM - 1.30 PM. You can scale up your focus and prioritisation. Start at the hour level, then scale up through the day, weeks, months and years. There are many tools to help with focus and prioritisation. For me, the most powerful are daily meditation and a note-taking and todo app. Find ones that work for you. I find my meditation is most effective first thing in the morning. And even more so when I haven’t yet polluted my thoughts by switching on my phone before the session. Remember: your email (and much of the rest of your phone) is a way of other people adding to your todo list.
Total immersion
Read books, listen to podcasts, subscribe to newsletters, go to meet-ups. Identify a problem, think of a solution, and go about trying to build it! I sometimes say in interviews that I’m a Data Engineer by day, and a full-stack web and mobile developer by night, because since I started coding I have been “scratching my ideas itch” by building apps during the evenings and weekends using ReactNative.js.
So, be curious, lean into discomfort, gain visibility into problems, find a mentor, aim at where you want to go, focus and prioritise, immerse yourself. I believe in you!