Since 2011, I have taught over 50 people to become web developers. Some of them came with absolutely no knowledge of programming, or even the workings of a webpage. Some were more advanced and had been exposed to programming before. Now, those people have moved on to all sorts of companies, from Boeing to Verizon and countless smaller companies in between.
Here, I outline a few lessons that I learned along the way in hopes that you, and your organizations, will take the time to mentor people that want to learn this valuable skill.
- Be patient — you will be tested to the limit when working with some people. They’ll seem almost unwilling to comprehend or understand what it is that you’re trying to get across. But have patience. They want to learn more than you want to teach, so give them the benefit of the doubt and assume there’s a weakness or error in yourself that you are not properly able to communicate.
- Be specific — when starting from the ground up, don’t worry about explaining data structures, algorithms, recursion and other principles that, at the time, will seem abstract to your pupil. Focus on specific things and goals to help them hit well defined goals.
- Goodbye hello world — try not to have them build projects that can’t live in the real world. If possible, have them work on things that they can deploy and be proud of. We all like to know that we did something, so the work is on you to develop projects for them. They’ll also not feel like children if you hit them up with an actual project day 1.
- Affect change — one of the most important principles to impart upon your students is the concept of affecting change. Rather than trying to solve the whole problem or build the entire project, encourage them to make small changes just to validate that something is happening. For people new to web development, the difference between seemingly simple things, like frontend and backend, is not always apparent. By making small changes and seeing the results, they’ll rapidly learn what parts of code affect what parts of the end result.
- Source control — in the real world, source control is a part of programming. Have them understand why they’re using source control and show them how to use it effectively. Being able to go back in time will help remove any fear that they may have of “screwing up” or “breaking things.”
- Force them to read — there’s a million tutorials for everything. Spend the time to find the good ones and have them go through those when they get stuck. Reading the documentation for various packages and libraries is an important skill that they just have to have. So start that early. Using frameworks (see #3 above) helps with this, since frameworks typically have their own documentation.
- Force them to ask for help — don’t always be a crutch for them. If they have questions, they should become familar with StackOverflow, Google Groups, IRC and so on. Learning how to frame your question is usually 80% of the answer. The problem that most new developers have, in my experience, is that they don’t fully understand the problem they’re trying to solve. If they ask it, they’ll get better at asking. Sometimes they’ll struggle for hours on what will take you two seconds to solve. Let them struggle. Asking for help in the proper channels is a critical skill to develop.
- Code every day — no breaks. No days off. No “taking it easy.” Coding is a skill and like any other skill, it gets better with use and atrophies with absence. They’ll want to take a day off here and there because they are frustrated. Do not allow it. Push past the pain. Push past the agony. Code. Every. Single. Day.
- Be patient — this bears repeating. I cannot stress how important this has been for me in getting people past the humps that are inevitable with web development. They want to learn, so be there for them.
Knowing that you made a difference in a persons life is a great feeling. Knowing that you “taught them to fish,” is even more rewarding. If you have any thoughts or comments, please do share. You can reach me @shamoons on the twitters.