What to work on when learning a new language
When learning a new language/framework it is best to work on a real project. What project should you choose?
If you just started to learn a programming language and web framework, here is my suggestion about what to work on:
What project to work on
Choose a successful SaaS product that you like (or better) that you use. Take a feature set and create an open-source project that only does those things.
Optimize (or change) in a specific direction. Change something in the flow. Make it yours in a way.
Some examples:
- Performance is a good choice, you can focus on improving the flow for an end-user to obtain a benefit from using that app. Make it work very fast for the end-user.
- Make your product more configurable if the one that inspired you has fewer options
- Make your product more opinionated if the one that inspired you has too many options
- Try to make it work without authentication if the one that inspired you offers features only after being authenticated/signup
- Try to integrate it with some existing services: Notion, Airtable, Zapier ...
- Try to make your product export all the data in a specific format
Do code reviews
Use Github or Gitlab.
Create their MRs/PRs and review them yourself. Then refactor based on your own reviews.
This will make you think about the code you wrote and also make you think about refactoring and improving your own code.
Three tricks about how to make a self-review successful:
- Read existing code, see a pattern that you like or a way of doing things that you want to practice, and then go and review your own code trying to find a way to refactor to use that.
- Before any code review, read one coding guideline, design pattern, or chapter about writing idiomatic code in that language, and then do the review trying to find places where that specific concept can be applied.
- Do these self-reviews first thing when you start working so that you can have a fresh perspective.
Ask for code reviews from other developers. Join communities formed around the language that you are learning and ask people there to give you a code review. Do this only after you reviewed your own code and refactored it.
Consistent small progress is more important than a big rush
Do this not in a big rush, but slowly.
It is more important to work on this every day than to spend a night finishing something.
Read the language/framework documentation every time you are unsure about how something works.
Keep notes where you simply document what you learned. Any note-taking app is good.
Here is how to do this in a simple way:
Every day when you work on this project open a note with the date of that day and keep the note-taking app open.
While writing code every time you have a doubt about how something should be implemented or how a language/framework feature works or even how a method should be called stop and read about that in the documentation.
Then write a short sentence in the daily learning journal. Make sure to add there a piece of code showing what you learned. Can be the code you just wrote in the app.
Keep a blog and document your journey
Write in public about your journey while building this.
Setup a simple technical blog and document every few days a problem and how you think about solving that problem, or your decision process while implementing a solution and the solution you choose and implemented.
You can also write short notes about what you learned. You can take one of your daily learnings and expand it in a blog post.
Write for yourself or imagine someone that is having a similar journey to you and try to explain that concept to that person.
Writing will help you learn better and understand thoroughly the new concepts. Being able to explain something that you learned is the real test if you truly understood that.
Do not invest time to set up your own blog. Use something existing, just focus on writing. You can use a blogging platform that has some syntax support for your programming language. Do not spend time building and maintaining a blog. Your focus should be on learning and now on maintaining a blog. There are a lot of (free or paid) platforms outthere.
One piece of advice I have here if you can: pay to use your own domain. This will make your blog/content remain independent of the blogging platform. Most of them offer export so you can easily transfer between different platforms while keeping your links working.