I don't have a technical background.
I used to work in Market Research, and before that I was doing a degree in Modern Languages. In 2017, I took a coding course with Code First: Girls. This is how I got into tech and what led me to start a new job as a Partner Engineer at Twitter.
A few months into my new job, I felt like I wasn't improving my coding skills fast enough. I needed to find the motivation to code outside of work and force myself outside of my comfort zone to learn new things. This is what led me to take on this challenge.
This post is based on a talk I recently gave about my experience of the #100DaysOfCode challenge.
The #100DaysOfCode challenge was created by Alexander Kallaway when he became frustrated at the "slow speed of [his] progress in learning to code" (you can read more here). Alexander wrote an article about this and, as others read about the challenge, many decided to join in. Since 2017, thousands of people have taken up the challenge.
There are two rules:
Commit to coding for minimum 1 hour every day for the next 100 days.
Publicly commit to the challenge and Tweet your progress every day with the #100DaysOfCode hashtag.
You can add any other rule that will help you reach your goals and fit your schedule. For example, I added the following rule: "In order for the hour to count, I have to be working on something new." This meant that the regular day-to-day coding I did as part of my job didn't count.
The community is very active on Twitter and Slack, for example, and the support I got from others during the challenge was very motivating.
I was surprised at how many people (both at work and outside of work) who follow me on Twitter approached me to ask how the challenge was going. I had conversations that I would probably never have had without this challenge.
Every beginner will one day have to shift away from copying other people's code and following tutorials to start writing their own code. It's a difficult shift to make. The nature of the #100DaysOfCode challenge, and the fact that it spans a long period of time, will help you make this shift.
I'd been wanting to code more for a while. This challenge forced me to not just think about it, but actually do it.
You can clearly see how active my GitHub profile became when I started taking the challenge in January. It's also clear that I needed a bit of a break at the end of the challenge in April. But after that I kept on coding. The #100DaysOfCode challenge is a great way to build a new habit and consistency.
It's easy to not realise how far you've come. Being able to look back at the Tweet thread that tracks what I did every day during these 100 days helps me see how much I learnt and achieved in that period of time.
This was one of the hardest aspects for me. Work takes up a lot of my time, and I'm always busy when I'm not at work. I had to cut down the exercising and socialising to find an extra hour every day to code.
The diversity of technologies and programming languages that exist is one of the most exciting aspects of tech. And yet, as a beginner, it can also be daunting and it can be hard to know what technologies to focus on.
The Internet is brimming with available resources (both free or for a fee). As much as this is amazing, it can also be overwhelming. How do I know which resources are good and trustworthy? How do I know what formats work well for me? Etc.
100 days is a long time and there will naturally be some days that feel more difficult. It's normal to feel discouraged at times. On days like that, it's important to take a step back and appreciate how much you've done so far.
Tweeting about your progress daily can make you feel vulnerable. "What if people think I'm too slow or that what I'm learning is too easy?" "What if I'm not good enough?" It can be hard at times, but it's important to learn to block out these thoughts and ignore them.
This was really important for me. Knowing that my colleagues, my managers, my friends were following my progress is what ensured that I didn't give up in the harder moments.
You don't need a specific plan, but I would suggest having a list of things you want to do or learn about. My list included items such as using my Raspberry Pi or refactoring a Python project to be object-oriented. As I made my way through the challenge, I found out about new technologies and concepts and added these to my list. This meant that, when I was stuck for what to do next, I could simply revert back to my list and get started on the next item.
You will have bad days. Embrace them and Tweet about it. You will likely get support from the community. Having a bad day is part of the journey. Talking about it will also help others feel less lonely when they have a bad day.
Similarly, it's important to take a few days off if you need to. Midway through the challenge I took 3 days off, to enjoy some time with my family. I was feeling particularly tired then, because of a busy period at work and in my personal life. Taking a short break enabled me to feel energised and motivated enough to take on the second half of the challenge.
Consistency is what will help you develop a habit.
It took me ~70 days before I started feeling the benefits of the challenge, before I started drawing connections, and before I started feeling that this challenge was worth it! Learning takes time. If I'd given up any earlier, I would never have realised how much I could learn during this period of time.
I was lucky to do some code pairing sessions throughout this challenge. Sometimes, you just need someone to sit down with you and explain a concept or help you debug. Don't be afraid to ask for help: there will always be someone out there who is willing to help you.
The community is very active and there are many resources to help get you started and support you along the way. For example:
- The #100DaysOfCode official website
- The community on Twitter
- The #100DaysOfCode Slack workspace
- Podcast episodes: CodeNewbie and Learn To Code With Me
I chose to get a broad exposure to different technologies, concepts and languages rather than focus on one big project during the 100 days. Here are some examples: