Advice for a Beginner Coder
Last week was PyCon UK 2017. It was perhaps the best PyCon yet and, as usual, I met many old friends and made plenty of new ones. Many thanks to Peter Inglesby (chair) and the other volunteers who put so much work into making this such a wonderful space for bringing together a community.
A highlight of the conference for me was the number of young people who were not part of the young coders' day but who were attending the conference as regular attendees (and accompanied by ever-supportive parents). I got chatting to one such combination of young person and accompanying parent and they asked for advice on how to develop as a beginner programmer in the Python community.
What follows is based upon my response:
What you get out of the Python community is directly related to how much you put in. The Python community has a huge number of interesting projects with which you could engage and learn from.
Put simply, look for a project that you find interesting and start to contribute.
Don't dive in and submit thousands of lines of code - rather, do something small, easy and/or trivial. It'll introduce you to the current maintainers of the project and demonstrate you're competent while allowing you to get used to their modus operandi. Be polite and ask questions that demonstrate you've read their documentation.
Don't be afraid to ask questions - good developers are always asking questions. Knowing how to ask and what the right questions are is an essential skill to develop. Asking questions is NOT a sign you don't know what you're doing. To good developers it's evidence that you're exploring the problem and a signal that you're engaged and interested.
To be clear, it takes time to get involved in a project and the quickest way is often to take small (but secure) steps. Your collaborators, if they're any good, will provide advice about your contributions. This is invaluable mentorship and it also means you'll get to know people in the community. When you go to conferences, you'll have allies and colleagues!
Be careful to separate criticism of your code from criticism of you. The very best developers are humble, listen to advice and understand that code can always be improved. Sometimes it's hard to hear that your code is not very good, but this also helps us to appreciate how to give good (constructive) advice.
Nevertheless, if you don't get support, if people are rude or there's a bad smell around the project, just leave. Life is too short to have to deal with idiots, and if you have no choice, find experienced, thoughtful and conscientious allies to help support you (you'll find plenty of them in the Python community).
A good project will have a code of conduct that sets expectations of how collaborators are to interact. This is far more important than you may at first realise and, happily, many in the Python community take this aspect of programming very seriously.
In a similar vein, one of the best activities to help you learn new things is to teach. Being able to explain things indicates you know the craft of programming at a deep level. For example, you appreciate what to leave in or how much to leave out of an explanation. You have clear enough mental models of the concepts of programming that you can accurately analogize and summarise. Furthermore, to explain yourself in simple and easy-to-understand language demonstrates your own clarity of thought. Perhaps most importantly, finding the opportunities to practice the skill of teaching is a sign of moral and professional value: you're putting something back into the wider community and you have shown initiative.
Our community is at its best when people take the time to create a space where others, no matter their background or differences, can flourish together. You should endeavour to follow this example. Why? Because inclusion that celebrates difference and diversity exercises our capacity for empathy and understanding of others' lives, problems and interests. As a developer, how can you be sure what people need from your software? Only by listening to others, reflecting, evaluating and experimenting is such valuable knowledge revealed. Only then will you know what important problems to solve. This is (also) far more important than you may at first realise.
Finally, make sure you're having fun. Writing code is often a very frustrating activity, but when you make something work, the elation at seeing something you've created solve a problem makes all the hours of frustration worth it.