So you want to be a software engineer? (Part 1 of 4)

Know where you’re going and how to get there: the importance of clear goals and well-defined paths

So you want to be a software engineer. You’ve made a decision, and now you’re working out the next steps. You’re diligent. You’re doing your research. You’ve already read a whole bunch of articles and blog posts with titles like ‘12 Steps to Becoming a Developer’ or ‘15 Things Every Coder Needs to Know’. Isn’t this just another one of those articles? Why read this one?

Well, we’re going to do something a little different. We’re going to tackle one of the current conundrums within the tech jobs market.

Tech is a growth industry and there’s currently a high demand for developers, but there’s also lots of bootcamp grads who can’t get jobs as software engineers. Why is that?

The fact is that there is employer demand for developers, but it’s at a specific level of competence. Hiring managers, especially at high-end tech companies, are finding that many bootcamp grads have a general awareness of programming topics and knowledge of specific frameworks, but lack the deeper fundamental understanding and problem-solving skills that they’re looking for in their engineering roles.

That’s not to say it’s impossible to get a software engineering job after a coding bootcamp, but the graduates who do well tend to already work in the industry or have several years of programming experience behind them. It’s also not to say that those other bootcamp grads don’t get jobs; they do, they just might not be the kind of high-end developer jobs they were imagining when they started out. The kind of “zero to hero software engineer in 12 weeks” marketing pushed by a lot of bootcamps is not a result that’s possible for most.

So if you have minimal programming knowledge and no industry experience, how exactly do you launch a long-lasting career as a software engineer at a top company? The answer is that you do it by acquiring the fundamental knowledge and developing the problem-solving skills that the best employers are really looking for. This series of articles will offer concrete and actionable advice on doing exactly that.

We’ll spend time to talk about:

  • The importance of setting a clear goal, mapping a path to that goal, and understanding what the path involves.
  • The influence of solid study habits on your learning journey, and how to develop them.
  • How good communication is key, not only to learning but to working as a professional developer.
  • How to approach writing code like a professional developer instead of a hobbyist programmer.

You might be thinking: “that all sounds great, but what makes this advice worth following?”. This advice comes from years of experience in teaching software development. At Launch School we’ve taught hundreds of students over half a decade. We’ve seen what works and what doesn’t. These pieces of advice are born out of working with and observing some amazing students, and witnessing them achieving incredible outcomes. Don’t believe us? See the results for yourself.

About Launch School

Launch School is an online school for software engineers. We believe that advanced concepts are best taught with first a solid understanding of the fundamentals in place. We also believe that how you study depends on which of those things you’re learning. Our Pedagogy is built on these beliefs, and our Core Curriculum and Capstone Program are structured around that pedagogy. We describe this as ‘The Slow Path for Studious Beginners to a Career in Software Development’; for more context on exactly what we mean by that description, check out this article.

A lot of code schools and bootcamps don’t spend much time on fundamentals, or they briefly cover them simultaneously with higher level concerns. Launch School takes the opposite approach. In our Core Curriculum, you don’t just learn the fundamentals of software development, you learn them to mastery.

Mastery-Based Learning is different from most structured learning you’ll have encountered. Instead of studying topic ‘a’ for a week then moving on to topic ‘b’, you learn topic ‘a’ until you’ve mastered it and then you move onto the next topic. This mastery-based approach takes persistence, commitment, and time, but it pays off handsomely in the long-run. Once you’ve mastered the fundamentals, you can quickly level-up your knowledge by learning a new language, tool, or framework.

This is just marketing for your program, right?

Yes and no. Of course we think that our program is great, and naturally we want to shout about that, but the advice in these articles is free. You can choose to apply this advice however you want, though we think studying at Launch School is the best way to do that.

We also know that our program isn’t for everyone. We have a very specific aim at Launch School: to push people to launch long-lasting careers as software engineers at the best companies possible. If your aims don’t necessarily align with that, then you can check if Launch School is a good fit for you.


Know Where You’re Going and How to Get There

Now that you know who we are and where this advice is coming from, let’s look at one of the most important things you need to do in order to become a software engineer: planning your learning journey.

The excitement of starting a new venture can make you want to skip the planning and jump straight in; this over-eagerness is nearly always counter-productive. The goal-setting and planning you do at the outset will define your entire journey, so it’s important to take sufficient time to map out your path.

Failing to properly prepare your journey has the potential to stop you in your tracks. You can learn things in the wrong order, waste time learning the wrong things, or experience so much pressure that you’re not able to study effectively.

Have a clear, specific goal

If someone asked you why you want to be a software engineer, what would you say? If your answer is something like ‘because it’s fun’, or ‘I think I’d be good at it’, you need to think again. These might be reasons why you first got interested in programming, but they won’t sustain you through a long and challenging learning journey. What happens when it stops being just ‘fun’ or it turns out that your aptitude can only get you so far? Do you simply stop learning? In order to keep going you need a clear end-point or goal.

Set out a clear, specified goal. This will focus your journey and get you through bumps in the road.

What do we mean by a specific goal? Even “getting a job as a developer” is not specific enough. It’s like saying that you want to become “a writer”. It’s too vague of a goal to drive action. Alternatively, saying that you want to become “an investigative journalist for the New York Times” is much more specific, and with specificity comes the ability to plan towards it. Aim for that. Even if you end up being a political journalist for the Washington Post instead, having had that specific goal will have helped you get there. A vague goal won’t lead to specific action.

Map a defined path to your goal

Setting a destination is important. Knowing how to get there is even more so. Software development is a hugely broad subject area. It’s also very deep. Learning every single aspect of it in a vast amount of detail impossible. You need to work out what you need to know and how well you need to know it.

Know which topics to focus on, and to what depth. This is the key to mapping out your journey.

Here’s how you map that path:

  • Ensure material is at the right level for where you are in your learning journey; one of the biggest mistakes early beginners make is jumping to advanced topics too early is counter-productive.
  • Don’t take on too much complexity at once; use material that explores individual concepts one at a time to gradually build towards more complex topics.
  • Check your understanding along the way. Just reading about a concept doesn’t mean you’ve understood it, you need to test your knowledge as you progress.

Focus on fundamentals first

The world of software engineering seems to be constantly changing at an ever increasing pace. There’s a proliferation of tools, libraries, and frameworks. Don’t just dive straight in to that ever changing complexity. Build a solid foundation of knowledge before tackling higher level concerns and abstractions.

Focus on fundamentals first and learn the things that don’t change

HTTP, HTML, and SQL have been around since the start of the web, or even longer. CSS, JavaScript, and Ruby for almost as long. Sure, these languages and technologies have evolved over the years, but the core, underlying principles that govern them remain the same. Understanding these things at a fundamental level lets you make more sense of abstractions built on top of them, such as frameworks like React or Rails.

Learn the fundamentals to mastery

There’s a huge difference between an awareness or general understanding of a concept and having the deeper understanding that comes with real proficiency or mastery.

When studying a fundamental concept, make sure you clearly and fully understand it before moving forward.

These fundamental principles are the building blocks of your software engineering knowledge. They form the foundation for everything that comes after. Build strong foundations, and more advanced concepts will be much easier to grasp.

Don’t set arbitrary deadlines

Learning to mastery is difficult to do in a traditional classroom environment, where you follow a strict schedule. You learn concept ‘a’ for a week. If you don’t fully understand it by the end of the week, that’s too bad; you move onto concept ‘b’. Working to a strict time-line creates constant pressure and worry about ‘falling behind’.

Avoid artificial deadlines. They set you up for failure, and are one of the main sources of anxiety.

Most people never learn to depth not because they can’t, but because they never allowed themselves the room to absorb the material. This deprives them the foundational skills required for deep mastery.

Give yourself a chance to learn to depth by removing arbitrary deadlines.

Learn to solve problems, not just acquire knowledge

Becoming a professional software engineer isn’t really about learning a whole bunch of languages and frameworks. It’s about solving problems. Those languages, frameworks, libraries and so on are just the tools you use to help solve the problems. Those tools are only as good as the person using them.

Work on developing your problem solving skills, this will set you up for a long career.

The highest salaries in our field go to people who have a skill, not necessarily to the people who have a piece of knowledge. Knowledge can be acquired quickly. Skills take time and practice to develop. We’ll talk some more about this in a later article, but don’t shy away from difficult problems and learn how to develop a problem solving mindset.

Stay focused. Stay on the path

As we’ve already mentioned, the pace of change in the tech industry is rapid. There’s also an incredible amount of noise about that change in the form of blog posts and articles discussing the latest tools or frameworks.

Block out the noise, and don’t get distracted or side-tracked by all the new developments in tech.

Remember that you’re studying the fundamental things that don’t change. 99% of that noise is about concepts that are beyond what you’re trying to learn.

The plateau of the “study phase” can seem like an uphill slog at times and it can be tempting to try and jump ahead too soon. Stay focused on your goal and stick to the path. Keep putting one foot in front of the other and you’ll make it to the end.

Use strong fundamentals to change gear and level up quickly

Once you’ve mastered the fundamentals, use that knowledge and layer more advanced and integrated concepts on top. Advanced concepts are far more accessible when you have a clear understanding of how all the individual pieces work and fit together.

Use your strong grasp of fundamental concepts to quickly and easily learn whatever new tool, framework, methodology, or language you need.

Change your learning approach at this stage. Learn these topics in a top-down way rather than the bottom-up approach required for the fundamentals. Leverage your solid understanding of the fundamentals to take a broad, high-level view and then drill in to the topic as far as you need to understand it.

It’s this approach that our students follow during our Capstone Program. Their strong fundamentals enable them to quickly level up and produce outstanding projects way beyond the level that you’d produce at a coding bootcamp, and to achieve salaries significantly higher than even the top bootcamps.

Don’t underestimate what it takes to be a professional

There’s a massive difference between being a hobbyist programmer in the ‘discovery’ phase learning and professional software engineer at a high-end tech company. Be aware of the gap between where you are now and where you want to be.

Treat your learning journey with the level of seriousness and dedication it deserves, and put in what’s required to bridge that gap.

Part of what’s required is the solid understanding of fundamental concepts with advanced knowledge built on top. At Launch School that’s our Core Curriculum + Capstone. Don’t ignore the other things it takes to get there though. Attributes like good communication, a strong work ethic, an ability to learn, attention to detail, and being a good team member all make a huge difference. We’ll look at some of these attributes in the next three articles.

Summing it Up

In this article we’ve looked at the importance of setting a clear goal, mapping a path to that goal, and understanding what’s involved in following that path. If you don’t have clarity around these things, then you risk plenty of confusion, anxiety, and a lot of wasted time. Just to recap, our advice here is as follows:

  • Set a clear, specified goal
  • Map a defined learning path to that goal
  • Focus on fundamentals first
  • Learn the fundamentals to mastery
  • Don’t set artificial deadlines
  • Hone your problem-solving skills
  • Stay focused on the path; don’t get distracted
  • Layer advanced knowledge on top of strong fundamentals
  • Don’t underestimate what it takes to become a professional

Mapping out your path is just the first step. Once you’re on the path you need to ensure that you make the most of it. In the next article we’ll look at the importance of strong study habits in maximizing your learning potential. You can read Part 2 here:

So you want to be a software engineer? (Part 2 of 4)