March 18th, 2020
Everyone seems to be stuck home. The virus leaves you no option for outdoor activities and you start getting bored after several afternoons of binge-watching Netflix and playing videogames. Why not profit from the situation to learn things that will make you life as a developer easier? Maybe you plan to leave your current job and the next opportunity requires a skill you don't possess yet?
Here is a list of things you can do when you have no other choice but to stay at home!
Keeping yourself informed is crucial! For example, Chrome has recently changed his default behavior regarding third party cookies. That means potential breaking changes for your application if you don't pay attention!
To do that, you should set everything right for your learning routine.
Here are the sources I use to keep me informed:
With all that setup, you should be ready to take a moment periodically to stay up to date in your field!
Languages have their domain. For example, COBOL is for banks, Swift is for iOS development... Maybe you don't want to keep working where you are? Maybe you'd rather wake up every day and make mobile games for kids than accounting software for corporations? Maybe you just want to play with a functional language and learn a different paradigm? Then quarantine might be a good occasion to acquire some new skills!
Functional programming is great. If you are used to Object-Oriented Programming you might want to check functional programming out. If you are doing frontend development, why not try ReasonML or Elm? It's not wildly adopted yet but it might in the future.
The important question is: what do you want to do? What's your next career move? Let that guide your learning. Make sure to ask questions in online communities if you are not that you are going in the right direction.
If you want to learn a new programming language or become better at the one you are already using, you can always do katas. Katas are a good exercise to perfect practices like TDD, DDD, refactoring, etc.
Here are some ideas if you want to do some katas:
TDD (Test Driven Development) is the practice of writing a failing automatic test before writing production code. It's constraint programming, you write how you want your code to behave first. Programming with TDD makes you think of what you want before rushing for a solution. It makes you write down the result you want to achieve as an executable test. It also helps you refactor your code. It goes like this: write a failing test (red), write the minimum amount of code to pass it to green then refactor (rewrite your code so that it keeps being green but is more maintainable).
TDD is definitely a skill you want to add to your skillset. Sometimes people feel it's "too slow" but in my experience, I'd rather relaunch a test suite than having to recreate the setup in your browser and check the result is correct. Also, having a safety net helps you develop faster when your application reaches a consequent size (avoid accidentally breaking features).
There is probably a unit testing framework for your language. Check it out.
Either do some katas in TDD to get familiar with the practice or start progressively adding tests to an existing project!
I recently discovered GatsbyJS. It's a static site generator that uses React. Using React makes it easy to reuse components and create a clean website. As Jordan Walke tells it in this video: people are having fun coding with React. It just feels right. I've had the same feeling.
Here is an idea to start learning React and its ecosystem: start a blog using GatsbyJS. It will only cost you a domain name (something like 12€ a year) and that's it. You can always deploy it for free on a CDN like Netlify. That's the beauty of static sites: you don't need a database so it reduces your hosting fees by a great deal.
By starting a blog with Gatsby, you can play around with React and get familiar with it and at the same time customize your personal website. If you really want your blog to stand out, take some time to write blog articles. Don't get stuck tweaking a website that has no content!
Writing code is fun. Deploy your code to production can be a bit daunting and intimidating when you have to configure things like Apache or Nginx or make your code run in production conditions (be monitored, restart automatically on failure, handle things like the number of workers, etc.) In my experience, that's the hardest part of doing backend development.
It's great for starting projects: everything is already setup for you. You just have to write your code, type a command and that's it, the code is running live!
Give it a try if you are starting a project and want to focus on the actual product instead of how to deploy it.
SEO (Search Engine Optimization) is a set of practices that you can adopt if you want to rank higher on search engines. People doing SEO will claim they know lots of technics that work (even some Black Hat SEO sometimes). But in the end, just know this one thing: Google tries to answer people's questions. If you are answering their question better than others, you will rank well. Shady tactics might work for some time but it won't last and Google will eventually punish people doing them.
I found this short serie to be especially useful for starting with SEO.
Knowing the basics of SEO on the technical side and how to audit a website with Lighthouse can be a great skill for a developer!
DDD (Domain Driven Design) is a way of doing software development that focuses on creating code as close as possible to the domain it represents. It relies on talking to domain experts (the people who have the domain knowledge), using the same language in the code as everyone else in the domain (ubiquitous language) and keeping non-domain code to the boundaries of your app (for example, no notion of a HTTPServer should appear in a domain code modeling billing).
You don't have to apply DDD by the book! Start thinking about these things: are you using the same words as your users to speak about the domain you are in? Is your code containing meaningful domain name or just generic CRUD names like "updateThing" or "deleteThing"? Start thinking about it...
You are a developer and maybe you want to become an entrepreneur? Lots of engineers want to start their own venture for multiple reasons. Whether you feel like you deserve more money for what you are doing or just want a "lifestyle business" for more free time, here is a list of books I think you should read before getting started.
Lean means getting rid of the waste. If you start a business you want to focus on the next thing that will bring you value, not the thing you fancy doing at the moment. Running Lean makes you realize that you should talk to people before you start coding (what most developers are not comfortable doing). "Get out of the building" is the main takeaway from the book. The other one is: fill in your Lean Canvas and check the riskiest parts of your business before it's too late! You don't want to spend one year coding something that no one wants.
This book covers most entrepreneurs' mistakes. There are three jobs you have to do when becoming an entrepreneur: the manager's job, the entrepreneur's job and the technician job. Most people focus on the last one and end up buying themself a job. This book is recommended a lot over the internet.
In The Personal MBA, you can read whatever you need at any time. It's very well organized and everything goes straight to the point. I would recommend reading every chapter when you need it.
Quarantine is boring. I hope this list gave you ideas for things you want to start learning. If you feel like something belongs in this article, feel free to tell me on social media!