I remember my first attempts at learning HTML and CSS (that is 15+ years ago). It always started with me buzzing with motivation and excitement about what I want to build and how pretty it will be. I would have my notebook, books, highlighters and computer ready. First bits (you get the genuine joke here, right?) were great - going through the basics, noting down the important stuff with additional exclamation marks in cases of utmost importance, firing up new .html files and building their structure. That always felt good - starting something fresh and feeling that I’m learning new skills. The problematic part however started every time I had an error. I would browse through the books, attempt to use search engines to find a solution (the art of googling is a whole separate skill I was yet to acquire 10 years after that), start messing up my code until late hours to then let the frustration bring out the I AM DONE mood. I had no idea where to find a solution or who to ask for help, I was tired, I was losing my self confidence and the entire coding did not seem as much fun anymore. Sometimes I would come back to the code a few days later but the powerlessness and irritation drained my motivation supplies at the speed of light.
This is what I mean by trying to go the self-taught route. Alone, without a support network and the help of experienced peers.
Why not learn by yourself?
If you think about my teenage-self, I was doomed from the moment I decided to teach myself coding. Motivation and good resources are a good start but they do not guarantee that you will succeed. In most cases the learning process becomes too overwhelming for us to handle it alone and even if we manage it takes us so much more time to achieve the initial goal than it would with a peer or community support. Before I go into the advantages of community based learning, let’s have a look at where self learning under delivers.
Lack of empathy and mutual support
I have been teaching coding for several years now and after working with hundreds of students I can say without hesitation that you can have the best tools and resources but without emotional support and the ability to share both your excitements and frustrations you will not go far. We are social creatures by design and our successes or failures don’t mean much if we don’t have anyone to share them with (think social media and how everyone seeks approval, support or understanding). Same applies to the learning process. The exercise explains clearly what to do, yet you cannot overcome the first step. What do you feel? Maybe anger, maybe disappointment at yourself, annoyance, but above all that your feeling of self worth drops greatly. You can only see your own situation and the fact that you cannot even make a first step. You do not see all the other people who struggle with this tutorial. Here starts the self criticism - I’m not good enough for it. If I can’t even go through the first task I will never become a programmer. This is so irritating! I’m worthless.
When learning by yourself you don’t have anyone to listen, or maybe even nod their head in understanding, to you speaking about that annoying bug you cannot overcome. There is no one to comfort you and encourage you to try again, no one to sympathise and say that they have been through that as well and they understand how difficult it feels. There is no one to suggest taking a deep breath, taking a break and trying again in a bit. Everything you feel or say under your nose, or maybe shout at the screen, goes into the ethers. And they don’t care much about that. I don’t even think they know what coding is.
Lack of experience and confusing resources
If you are a beginner there is no way for you to know the right and wrong ways of doing something. Even if you go into the rabbit hole of the Internet it is really tough to figure out which article is worth reading, which advice from the online forums is the one to follow, which tutorial will be the most effective for learning. There is simply too much information floating all around.
If you manage to fix a bug thanks to online advice then probably you wouldn’t be able to explain what just happened. It worked, great. But how? What are the indications of what you just did? Truth is, following the Stack Overflow advice and copy pasting code (especially the chmod commands) without thinking may quickly erase the contents of your computer or block your access to it. Been there, done that, I’m not trying to be smart here. Actually I have even done that to someone else’s laptop.
Moreover the beauty of coding allows you to do the same thing in a hundred different ways. You will notice that when browsing different discussions suggesting various solutions to the simplest of problems. This however can be super confusing, especially in the early stages of learning. Instead of going for the quality, we focus on the quantity. It’s exciting, I know. Now I can split a string in 10 different ways! But do you know which one is the least computationally expensive? Do you know which one is the easiest to understand for other people reading your code? Do you even know why you are splitting that poor string?
Time, time, time
I would like to ask you to imagine a boat with you in it. There are two paddles but the boat is so wide that you cannot use both at once. You can only paddle on one side at a time. Sounds like fun, right? In order not to go in circles you have to switch paddles with every swing. When you change sides the boat starts swaying and you have to put a lot of effort into not falling overboard (hope you don’t have sea sickness as well). If you finally manage to find your rhythm, the speed is probably far from what you desire. In fact, you’d rather just sit in the middle of the boat and wait for another boat to pass by and help you out.
This is how self learning looks like. It’s incredibly difficult, requires a lot of energetic resources to navigate between the paddles, mental resources to keep going and not to give up, and something none of us have - plenty of time.
Now, let’s imagine that we have a paddling partner. Or actually - we have additional 98 paddles and a person for each.
The power of community
Coding has always amazed me in terms of acting as a magnet for people involved in it. It has the ability to encourage students, teachers and developers to collaborate, exchange knowledge and support each other. You can experience those interactions on the Internet, by joining a learning group, attending a bootcamp or going to meetups. The possibilities are many and have a lot to offer in your learning journey.
Support and understanding
This is where your coding loneliness ends. You will get to share your problems and realize that you are not the only person to struggle. You will get to share your wins and receive genuine appreciation for your work. When your motivation will drop, the others will pick you up. If you need an accountability buddy, you will find entire group of people who will be happy to support you. Community is at the base of the learning process and make the adventure so much more enjoyable, effective and... human.
Apart from the empathetic and social aspect I described a couple of paragraphs back, the learning community of any sort will always have members with varying levels of experience. Surrounding ourselves with people who are better than us in the field we are interested to explore is the quickest way to grow. Why? Well, same as you they were beginners at some point and went through the pain of taking first steps in that space. They made mistakes, they hit the walls, they learned time saving shortcuts. By interacting with those people, asking them questions (do not ever be afraid of asking a stupid question!), listening to their advice or simply watching them work you gain the time they have spent learning - it's almost like a time machine which saves you time!
When I think about it now I actually enjoy being a rookie. I feel entitled to harass others with tons of questions which are probably super basic from their perspective. And of course - I will take the time before asking those to do my own research and at least have something to show or discuss together in case solutions I found are cryptic to me. I swear I’m doing that 95% of the time!
Ok. Maybe 90%. Sometimes I just want to squeeze as much as I can from the devs I admire and I just snow them under with my question marks.
Learning through teaching
After mastering the art of asking questions you will be surprised how quickly you will become the person who others are coming to with their questions. You don’t have to have years of experience or have a senior label on your LinkedIn. It’s enough if you managed to fix a bug someone else cannot tackle. They will look up to you to help them find a solution and more importantly - understand it. This is your chance not only to give back after receiving help from others (karma exists, don't argue that please) but also to grow further as a developer. How come?
The fact that you fixed something yourself is great, however the real fun begins when you have to explain it to someone. First you try to explain your way of thinking, however the eyes looking at you seem to be even more lost than before coming to you. You try again, this time changing a couple of words hoping that this time it will be clearer. Not much luck. So you start to get creative, use metaphors, break the problem down into tiny pieces, you try to make something that is so basic for you even simpler. And then it clicks! Your young padawan understands what needs to be fixed and how to approach it and you have not only widened your vocabulary but also realized that your way of thinking might have been too complicated for the problem you were working on. Or maybe that you didn’t even understand it fully before yourself. Maybe that encounter forced you to dive deep into Google, recheck documentation and watch Youtube videos about a similar issue.
There you go, you just got more experience through helping someone else.
To stay serious though, I can’t stress enough how important teaching and peer programming are regardless of your level. Same as with always having someone better than you around, there is always someone who is not as good as you are. Using the opportunity to share your knowledge, speak in someone else’s language when it comes to understanding code, to let go of my way is the only way is a beautiful and effective way to grow further as a developer.
Access to verified resources
As mentioned before, some people in the community have already been through the route you are taking and went through the trouble of figuring out which resources are the ones to use, who to follow on Twitter, how to read documentation, how to participate in Github discussions, how to get your knowledge as a dev. The learning communities will always have a solid list of resources for you to use either listed directly or mentioned somewhere in Slack or Discord conversations, mentioned during meetups or peer programming calls. Look out for them, bookmark, spend the time reading and digesting.
If someone answers your question with a link, don’t treat it as being ignored or dismissed. Usually someone already has had your problem, the explanations have been already written and those people are kind enough to give you the exact reference where you can read it.
Inspiration, network and cooperation
Last but not least the communities allow you to build new relations in the coding world which will reach much further than learning.
You will meet plenty of incredible people of all different backgrounds who, same as you, decided to take on a new challenge. Through following other people’s careers you will have an idea how to approach yours. There will be developers interested in building a project together. There will be founders willing to make a difference. There will be people sharing the same values. There will be people who you can engage in interesting discussions with. There will be people who want to join hackathons together with you. There will be people [fill in the gap].
And of course, there will be people who can help you find a job. Either through personal recommendations, posting offers from their own companies, suggesting great job posting platforms or hiring you for their own company.
How do I find a community for myself?
If you’re still reading this then I hope that I managed to convince you that taking a solo route is not the best idea. So, where can you find those amazing groups of people that support each other in learning? There are a couple of options, depending on what you want to get from it.
If you are not sure about changing jobs and want to play around, I would suggest looking for online communities which communicate on Slack or Discord and have regular online meetups or peer programming culture. Quick Google search will lead you to this blogpost
where you can find specific communities in Web2 and here for Web3
A great way to connect with people more would be to attend events in person. You can use Meetup to look for workshops, talks and meet & greets around your location.
For those who are keen on changing their careers and becoming a programmer the best choice is a coding bootcamp. They provide their own curated content, have a team of teachers available during office hours, help you translate your knowledge into practical applications and usually support you after you graduate to find a job. This option however is time consuming and expensive. Depending on your situation you can attend a full-time bootcamp or a part-time one which can be combined with a full-time job. Moreover in some countries you can receive financial support from a job centre to help you gain new qualifications - definitely worth looking into.
Don’t be a stranger
So what are you waiting for? Start researching and looking for your perfect community. Being a part of a couple of them myself I cannot recommend this learning way more. If you have already been a member of a community before and can relate to my post, feel free to drop me a message and tell me about your experience!
Lots of love.