Advice and recommendations for getting started with programming
On Thursday we had a lovely meet-up for PyLadies Vienna. PyLadies is an amazing initiative, and its Austrian community takes it one step further and offers an actual course to those interested in learning Python. The gathering was for this semester’s students - many thanks to Fabian Schindler for organising it, and to Sentry for hosting. We had interesting discussions and the topic of supplementary/follow-up resources came up, so I decided to write down some of my go-to resources and advice.
My favourite resources #
This list is intentionally very short, because if I started adding alternatives, the size of the post would get out of control. Being handed what feels like an endless list of possibilities is not always productive - sometimes, it can be distracting, or lead to ending up overwhelmed instead. That is why I prefer to keep it simple and straightforward.
- The famous course CS50 from Harvard. It deserves all the hype, I myself enjoyed and benefitted from it alongside my studies.
- You can then follow it up with their language specific course, like Introduction to Programming with Python
- Another great course, from MIT - Introduction to Computer Science and Programming Using Python
- book: Grokking Algorithms - beautiful and accessible way to build an intuition for reasoning about technical problems. The skills and tools I gained when learning about algorithms have given me incredible power in terms of decision making, not just when programming, but in day-to-day life
Additionally, I would suggest independently scouting out different tutorials or challenges abundant on the web. I would use them to “take a break” from the courses if the pace is too quick for you, or have some short-term exercises for days when you want programming but don’t feel like dealing with lectures and more elaborate resources.
How to “survive” the journey #
Learning these topics is nowhere close to easy, but I think that the biggest challenges, and largest threats, are less technical, and can be managed if you know the correct approach, and if you position yourself in the right state of mind.
- Don’t spend too long choosing between “alternative” resources. They’re not alternatives, they’re supplementary. You’re not getting married to any course or tutorial - just start, see how it flows and decide if you want to continue.
- Don’t let the word “introduction” in resource titles fool you. It’s not like you complete one of them and now you’re introduced to the topic. You will need at least a few introductions.
- Speaking of being fooled, get very comfortable with feeling stupid. That feeling is an inseparable part of learning and doing something difficult.
- Do not let the feeling of being stupid overtake you. Embrace it, have fun with it.
- How much you struggle is not related to how good you can get. Most of us struggled when learning programming. It sucks.
- These are the crucial techniques for managing the struggle: either take a step back, try looking for an alternative solution, or just black box it - move on and come back later. I hugely favour sustainable and intelligent strategies like this over the “keep pushing” approach. Perseverance does not have to be unbearable, because brute force drains energy.
- Mistakes are not only expected and okay, they are, and I cannot stress this enough, how and when you learn. They give you the knowledge you are looking for.
- The quicker you drop your hopes for closure, the better - you will have to touch topics and problems many times, over different periods, in various ways, until you can actually say that you are comfortable with them
- I will rephrase the previous point, because seriously, do not get confused by semantics - you are not an “intermediate” because you completed a course that had “intermediate” in the title. Falling for that assumption and getting your hopes up that it will “start getting easy soon” will guarantee that you will feel overwhelmed with difficulties and challenges that will cease popping up. Being really confused and frustrated is part of the job. Accept it, love it, learn to be entertained by it.
Next Steps #
I hope this guide will be useful for your learning. After these first steps, you can start orienting yourself better in different areas of programming. A guide for that will come soon! Feel free to drop me an email at bitscomplicated@iyamg.com and I will be happy to send it over when it’s ready. I would also appreciate some thoughts about the post, or what you would be interested to read next.