Cover image from John Salzarulo on Unsplash
I've been teaching myself to write code for awhile now and like many I often wonder if I am doing it right. Reading blog posts and doing tutorials seems to be the most common approach people take and that is what I have done for the most part. I have used different services, some paid some free, to go through structured content to learn as much as I can. This has definitely helped me learn a lot and I feel it is a great way to get started for many.
But, this approach can only take me so far though. There is a lot of content online for learning to code, but it seems to be geared towards one of two audiences. It is either content for a beginner looking to learn, it has step by step instructions and asides explaining things in more detail to connect different ideas, or it is written for a more advanced reader, someone who doesn't need as much explanation to get the point across. There is this missing piece of the intermediate level. Arguably, this is a really hard ask for someone to create intermediate content. Writing code has so much involved with it that it is really hard to draw the line of what to leave out and what to explain more deeply when creating learning content.
At this point, I think it is on me to find new ways to challenge myself to learn new things. Not only for the sake of increasing my skills, but to also learn to do it faster than I have before. New things are always coming out and it would be good to be able to dive into something and start hacking away with it to learn how it works.
My approach has long been to go through tutorials and follow along with every step building out the example project. This is a good approach as a beginner, but I don't want to rely on someone walking me through step by step in things holding my hand throughout the whole process anymore. Continuing this will just keep me at the beginner level always needing someone to get me started rather than helping me to learn how to think through problems on my own. So, I'm changing up my approach somewhat in how I use these tutorials.
I am still watching some video tutorials, I purchased a few on Udemy for things I am interested in learning, but instead of following along I am simply watching the videos. I am using my commute time on my bus ride to work to watch them. Then, instead of building the example project I am trying to apply this new knowledge in my current projects. This way I am still using what I am learning, but I'm getting my hands dirty by working in something that I'm not being guided through step by step. I am trying to make something function and have to work through the issues I run into. This feels like it will save me time, as I am not trying to find as much time as previously to do tutorials and work on my projects, plus the challenge of making things work is more of a real world scenario for writing code professionally.
Putting this challenge to myself will hopefully help get me to the next level in my skills. What do you think? What are things you are doing to challenge yourself more in learning to write code?
Top comments (18)
That's been my experience too. We have to do our own projects, especially something that'll solve an issue we are currently facing or something that we feel could be helpful to those we interact with (colleagues, juniors, students, etc)
I've also found that I learned a lot while teaching and writing books about topics I'm familiar with. There is a natural incentive in these tasks to deep dive and give it our best shot. And while doing so, we bring out our thoughts in written/vocal form which provides lot more clarity than what we had in our minds alone.
I have some curated links that can help if you are looking for ideas to implement.
Same here. I've stopped following the tutorials and now I'm just getting notes and trying to apply the new concepts to my side projects.
Another thing that is really, really helpful is having pair programming sessions with more senior devs although this might not be possible if you're just learning on your own but still dont have a job.
You can also review the code of libraries you use and try to understand why it's build the way it is :)
Working with a more senior person is a great way to learn more, especially since they can provide personal notes on their experience which helps a lot in hearing how someone made a real world decisions on how to do something. But, as you said it isn't always an option for some. I have seen some sites recently that offer pair programming with someone online to do that kind of mentoring. It is a neat idea.
I have dug into the code of things I have used too. Mostly I have done it with packages on npm to see how they work and if I can implement it myself without having to install the dependency. But, it is a great way to learn how real projects are structured and see how things work.
I have been working towards teaching about code as well. I have given some talks and plan on creating more articles here that are technically focused on something.
Thanks for those links. I will definitely check those out. :)
Exactly, I tell every new programmer: please do NOT copy from the tutorial !
You mentioned both reading and writing code, there is also another great way to learn which is teaching other people code whether in write-ups, videos, in-person, or whatever.
Other folks have mentioned teaching code as a way to learn it more deeply. I think it is a great idea. It gives you the chance to dive more deeply into how something works. I have been working on doing that myself. That is part of why I write posts here to teach others about my experience with coding. As I go I hope to also have more technical focused articles that teach how to use something.
The point where u mentioned that you would copy it on your phone and watch videos to learn and implement. Even I used to do that while I was learning to code. I stopped watching series or some movie while commuting and started binge watching tutorials and doing so we get the gist of what the tech stack ur trying to learn.
I had stopped watching it because it seemed very slow paced. maybe ill reconsider and try out your idea.
I'd be interested to hear how it works for you if you try it again. My intent is basically the same. I want to get exposure to the content, but not following along coding while watching. Then I can take the concepts and apply it to my own projects. Thanks for sharing your approach!
For me, I observed that there are not a ton of difference between the coding skills of an intermediate (SDE II) and advance (SDE III) level engineer at my company. The main difference I see is their ability to solve problems and the impact it has on the team, org, or the whole company.
I would say once you have a pretty good grasp of the fundamentals of the language, framework, or ecosystem where you are trying to get good at, start trying to improve and practicing your problem-solving skills.
One way I do this is by reading research papers and sometimes blogs on my commute.
Here are the reasons why:
Hope this helps and wish you all the best!
I agree, problem solving skills will take someone very far in learning to code. That skill can be more important than knowing the syntax of a language. I like the idea of reading detailed papers on related topics that aren't specific to something you use yourself. Seeing the methods others used to solve their own problems would be really helpful to better your own problem solving skills.
Watching tutorials during your commute then working from it seems like a solid idea, but I'll admit my memory with details isn't always the best... Do you reference back to the video while you work if you have any gaps in what you remember from it, or do you try to force yourself to work completely blind from what you were 'taught'?
I feel like there could be different advantages from either way, so I am curious how you do it.
I had this happen the other day actually. I tried to pull it from memory and after a bit of trying things out I went back and referenced the video. After reviewing a section I was able to continue working. I can see someone trying to test oneself to remember something without referencing anything. But, this doesn't seem very realistic. In the real world people, including very senior engineers, are looking up references to things all the time to know what to do. For myself I'm not trying to be able to pull tons of information from my head. I'd rather know my resources and how to use them to be successful. This combined with a good understanding of the fundamentals of programming will get the job done if you ask me and that's really what matters.
Personally as I've grown more confident (and hopefully also more competent) I have found hello world / build a blog site / simple cars API -type examples to be less useful.
Recently I have started looking at code in open source projects and trying to make sense of what is happening. Seeing how real people write real code that does a real job is ... real useful ;)
My ambition for the next 6 months is to find a project that I am using and understand it well enough that I can make my first open source contribution.
In my work life my team started doing code reviews about 6 months ago. I have learned more from reviewing code and having my code reviewed than in all the books and blogs I read in the 6 months prior. If you can find someone who you trust to look at your work and give you constructive feedback I'd encourage you to go for it!
That's really awesome you are diving into code of projects you use to eventually contribute to them. That seems like a great way to learn more. Like you said, seeing real world code helps a lot.
I agree that having code reviewed can help the learning process a lot. I've had the opportunity to discuss code with others in the past and it has helped tremendously. I'm hopeful to get the chance to do that again.
Great advice.
Thank you. I'm glad you enjoyed it.
Parabéns pela post
Thanks! :)