As an industry we still don’t know how to effectively transfer ‘experience’ to new developers

New developers start their careers with a limited grasp of the ‘what’, the basics of how to write code in a given language and tech stack, but the deeper understanding of the ‘why’ and how to evaluate potential solutions and pick the most effective solution given known constraints comes much later with experience.

Experienced developers have knowledge of what they’ve seen work and not work from past development projects and can use this knowledge to make educated decisions. Given any problem, having seen multiple solutions applied on past projects allows you to draw from that knowledge of seeing what has worked and not worked and evaluate what solution is the better option when you see this problem again (or something similar).

Experience and knowledge is hard to pass on from one developer to the next. Programming techniques like iteration and conditional statements can be taught and easily learned, but an appreciation of why solution A is more effective than B is harder to convey, usually because the reasons why one solution is better depends on the context and an understanding of the current constraints that you need to work with. Being able to identify what’s important and what is not is a skill that more experienced developers develop over time, but it’s hard to teach.

Experienced developers add obvious value to any project or team, they provide leadership and the benefit of being able to make informed decisions based on their prior experience that lead to better outcomes for the business with a higher degree of certainty (compared to randomly picking a possible solution without knowing if it’s feasible or the most effective option or not).

The problem we have as an industry is that we still haven’t worked out an effective approach for conveying this experience to other new developers. You can gain experience by putting in the time and effort by working on a variety of different software development projects, but there doesn’t appear to be any easy fasttrack approach to package this information and hand to another developer. Can software development experience be ‘knowledge transferred’ to another developer? Maybe not. Maybe you just have to invest the time to gain experience the hard way.

Misunderstanding or under valuing the experience that an experienced developer brings to a team is a common mistake of someone who does not fully appreciate the complexity of software development. All developers are not equal, and one developer cannot be equally exchanged for another. If we can find an effective approach to easily fastrack the passing of experience from one developer to another, this would massively accelerate the growth of new developers, but maybe the reality is experience just has to be gained the hard way.

Programming Languages are tools. Learning a tool doesn’t make you a developer – more analogies

In Reddit programming subreddits there are never ending questions about how to learn a programming language to get rich, or how to learn language XYZ because ‘I need to get a job next month’. If the people posting these questions did only a few minutes of research by reading previous similar questions (you don’t have to scroll back too far before you’ll find another similar question) they’d realize how unrealistic their expectations are.

Learning a programming language doesn’t make you a developer. The analogy I like to use to answer these questions is that learning to use a hammer by itself does not mean you can build a timber framed house. I summarized this before in this post:

I have another analogy that maybe is more relatable given that some people are attracted to the Gold Rush of software development. Doctors make a lot of money. If you learn how to slice open someone’s chest to do open heart surgery then you’ll be able to get a job as a surgeon right? If course not, that’s not how it works. Similarly, learning a programming language by itself will not help you get a job as a software developer.

As a new developer, when does problem solving start to get easier?

A common question asked by new developers starting out, especially during the first few months of learning, is ‘when does it start to get easier?’

The reality is it never really gets ‘easy’, but with experience it does get easier. When you’ve seen enough similar problems and previously worked out solutions before, that knowledge and experience helps you approach new problems.

A completely new problem that you’ve never seen before obviously takes more time and effort to work out an appropriate solution. A problem that you’ve already seen before takes less time because you’re able to apply the previous knowledge and solution.

The point where things start to get easier is where you’re able to pull from previous similar problems that are different from the current problem you’re working on, but enough knowledge and previous experience helps to find a solution to a completely new problem.

When do you reach this point? It varies for everyone, it depends what you’re working on. If you’re working in an environment where you’re working on very similar problems day after day, you’re not encountering enough variety to grow your experience so will take you longer. If you’re lucky enough to be working in an environment when you’re exposed to a broad range of problem types, then you’ll develop your experience quicker.

The majority of software is not frontend code running websites

The frontend code running in your browser for the web page that you’re looking at right now is immediately visible, so it’s easy to understand why new developers are overly focused on becoming a mobile app or web developer. The go-to skills every new developer wants to learn today are HTML, CSS and JavaScript (plus any frontend specific framework/library like React, Vue or Angular).

We’re lucky in our industry that the majority of tools a developer needs to build a website are freely available right there on your computer already. With a web browser and only a text editor (although realistically you should be using an IDE, but even many IDEs are also free) you can write HTML, CSS and JavaScript and test it in your browser. For free. As long as you can afford even a cheap laptop, there are no other commercial products or tools you need to purchase to get started. It’s no wonder in recent years we’ve been seeing a ‘Gold Rush’ with so many new developers rushing in to get a start in the industry. As with any other Gold Rush in history though, just because others before you have ‘made it rich’ doesn’t mean that you’ll also be successful.

It’s common to see new prospective new developers discussing online and sharing advice on how they are building a website to show in interviews as a portfolio project. Given the ubiquitous nature of websites and the fact that it’s relatively cheap and easy to get started with website development, it’s really no surprise that this is where new developers are focusing their skill development and job searches.

The thing that gets overlooked though, is that the large majority of software developed today is not for websites, and most large software systems don’t even use HTML or CSS (since they don’t have a web frontend). it’s also likely most large systems are not built with JavaScript (although NodeJS is being used more widely for backend processing). If you pause to take a look around you, unless you are standing in the middle of a field, you’re likely surrounded by electronic devices that are dependent on software control systems, almost every electronic device in your home has some sort of system that controls it’s features: TVs, clothes washers/dryers, microwave ovens, regular overs

If you have a car , it has an engine control system that runs 100M lines of code, likely developed in C or C++, systems that have no visible frontend or user interface. Screen based entertainment systems, sat nav, and digital dial displays (replacing analog speedometer and tachometer dials) only add additional systems on top of this with additional millions of lines of code.

It’s easy to see why HTML/CSS/JavaScript gets the attention and focus that is does because of the tools are mostly free (other than the cost of a laptop) and the highly visible nature of the websites we use every day. In terms of volume of code developed for the devices that surround us in our every day lives, websites and frontend tech are still only a fraction of what we interact with in the electronic devices we use every day.