Reflecting the first 20 days of 100DaysOfCode
Tags: 100daysofcode, javascript, regex, github
Published: 2020-09-11 20:14:10

Hi!

I decided that hitting the 20-day mark would be a good point to reflect on what I have learned on this journey. 

I'm a big stats guy. I like measuring things and that's probably why one of the first things I did when starting this challenge was my [TaskTimer script](#TaskTimer). 

![show-me-the-stats-meme](https://dev-to-uploads.s3.amazonaws.com/i/atamg08zbpn8gdxaf04n.jpeg) 

So, here are some stats about the challenge so far:

**Total time: 25 h 32 min 14 s**

**Average per day: 1 h 16 min**

**Time spent actually coding: 19 h 1 min**

**Times per task:**
* FCC challenges: **7 h 59 min 49 s**
* EJS Exercises: **7 h 16 min 16 s**
* Twitter bot: **3 h 47 min 17 s**
* Reading EJS: **3 h 3 min 40 s**
* Learning GitHub: **2 h 0 min 24 s**
* FCC Responsive Web Projects: **39 min 11 s**
* Exercism: **34 min 33 s**
* Edabit: **11 min 4 s**

**3066** Tweets retweeted by the Twitter bot. 
**125** GitHub contributions made.
**187** FreeCodeCamp challenges completed.
**16 401** words of Eloquent JavaScript read.

### What I have done
#### TaskTimer <a name="TaskTimer"></a>
I had built a version of this script earlier. The purpose then was to measure how much housework I did so that I could prove to my girlfriend that I also did something. It wasn't a success. I decided that it would fit the purpose of timing my coding times. 

At first, it only saved the task name and time to .txt-file and that was it. Now I have also added another text file that works as a base for a dictionary that helps to collect data on the total time spent on a particular task. 

You can see the code on [my website](https://www.arttupyykonen.com/tasktimer/). 

#### HappyDogTweetBot - Twitter bot for #dogsoftwitter
The bot retweets all tweets that have the hashtag #dogsoftwitter. It also replies to mentions with quotes, tells its job, or tells the answer to the ultimate question of life the universe, and everything.

This has probably been my favorite project so far! The reason is that I can see people using and enjoying it. I have gotten multiple direct messages from people who like the bot and it's also gaining followers. 

It was also really educational. For the project, I had to sign up for a Twitter developer account and learn more about APIs. To keep the bot running at all times I needed a server to host my script. I'm using [PythonAnywhere](https://www.pythonanywhere.com/) and can truly recommend them. I got the idea and made the first version using this [tutorial by Code Wizard](https://www.youtube.com/watch?v=ewq-91-e2fw).

I also found this more thorough [guide from Real Python](https://realpython.com/twitter-bot-python-tweepy/#how-to-make-a-twitter-bot-in-python-with-tweepy) which I recommend.

The bot uses the [Tweepy library](https://www.tweepy.org/) which makes it super easy to make your own Twitter bot! It was actually fun reading the documentation and figuring things out. 

To summarize, this project had it all:
* Engaging and getting feedback from users 
* Learning to use the API
* Working with a new library
* Finding a server to host my code

{% twitter 1302211460089679872 %}

#### FreeCodeCamp - Challenges and continuing the projects
So far I have completed four sections of the JavaScript challenges. They are Basic JavaScript, ES6, Regular expressions, and Debugging. 

The challenges are good for learning the basics. I can't wait to have enough knowledge to be able to build some projects and improve my skills. 

These interactive challenges are great for beginners. If you are new and want to start learning or know someone who is eager to start, I recommend these challenges. They are quick and simple and therefore motivate to keep learning. 

I also continued working on the Responsive Web Development projects and will be sharing them shortly. I started them way before this challenge in December of last year but they kind of fell off. Hoping to finish them soon to have some nice visual things to share. 

### What I have learned

**General**
* Problem-solving
* Making my own functions
* Learned about proper directory format and file naming 
* Loops and recursion
* What are higher-order functions
* Introduction to abstraction
* Introduction to composability
* Introduction to encapsulation
* Introduced to inheritance
* What is polymorphism
* The difference between methods and functions
* Introduction to object-oriented programming
* Working with APIs and libraries
* Reading documentation
* Debugging
* Why debugging is an important skill
* Error types: syntax, semantic, logical
* Reading and understanding other people's code
* Using a server to host my programs

![recursive-infinite-loop-meme](https://dev-to-uploads.s3.amazonaws.com/i/3tgi5bg42v20ed7m1you.jpg)
 

**Regular Expressions**
* What are regular expressions
* Using lookahead
* What are capture groups
* Negated character sets
* Difference between greedy and lazy match
* Learned about shorthand character classes
* Learned about the literal match, wildcard char, and matching ranges or classes
* Learned about different flags such as the i and g

![regex-improvise-adapt-meme](https://dev-to-uploads.s3.amazonaws.com/i/hakdjc7615ong89ya2i2.jpeg)
 

**Git and GitHub**
* Learned about issues, pull requests, and what a repository is
* Learned about branching and creating commits
* Created an open-source repository
* Started and managed a new branch
* Changed a file and committed those changes to GitHub
* Opened and merged a Pull Request

![good-guy-git-meme](https://dev-to-uploads.s3.amazonaws.com/i/7mxl7sihi5wna1tab36x.jpeg)
 

**JavaScript**
* Using functions in JavaScript
* What are switch statements and where to use them
* What are arrays and objects and the difference between them
* Working with objects
* Accessing properties of objects using dot and bracket notation
* Updating property values
* The difference with JavaScript list and array
* What is JSON
* Working with arrays on JavaScript
* Array methods: filter, map, reduce, some
* Three dot notation to pass individual items from arrays to function arguments.
* Manipulating and creating complex objects
* Got more familiar with the differences of let and var
* Got introduced to const and Object.freeze()
* Worked with arrow functions
* What are prototypes and classes
* Got introduced to promises
* Got introduced to modules, import, and export
* What are symbols
* Type conversion

![js-type-conversion-meme](https://dev-to-uploads.s3.amazonaws.com/i/44ra3jdt2l52ekz58x5l.png)
 

### What I recommend doing
The first thing I recommend for beginners is just starting. It doesn't really matter what you do as longs as you get started. I'll link some resources below which I have found useful/read positive things about. 

After getting started I recommend making a plan.

**My study plan**
I decided to make a more robust schedule for coding. My base plan right now is:
1. Read a chapter of EJS in two days. Then do the exercises on the third day. 
2. Do at least ten challenges at FCC every day.
3. Watch a programming related YouTube video or listen to a podcast

This is just the base plan and I'm adding some "spice" to the mix. The spice can be anything that I want to do on that particular day. 

You'll find an updated version of this plan at the beginning of my daily posts. 

### What I'm doing next
Next on my list is to finish the projects of the Responsive Web Design certificate at FCC. I'm also going to follow the schedule introduced above.

Earning the first certificate is a motivation factor. It gives the feeling of actually completing something. 

### Further reading

#### Eloquent JavaScript - My favorite programming book
The book that really teaches you JavaScript. This has been a great read so far! The way the author explains things is both easy to understand and compelling. 

The learning environment which comes with the book makes the experience ten times better. Using the word "book" is in fact a bit misleading. There are lots of code examples that the reader can run in the browser and there are plenty of exercises at the end of chapters. 

And the best part? The book is totally free! Check it out from [here](https://eloquentjavascript.net/).

####Exercism
A platform for coding challenges. I enjoyed trying it and have read some really positive things about Exercism. I liked the way the problems are solved. It requires using your own IDE and the terminal which felt like I was really programming like the big boys. 

#### The Odin Project
A great open-source resource for becoming a full-stack developer. It starts with the very basics and gets going after that. Really enjoyed it and look forward to doing more of the lessons. 

### Outro

In my opinion, slow learning is the most efficient. This means taking the time to go through and revising what you have learned and how to use these concepts. 

I'll probably do more of this reflection type posts as the journey continues. 

This was a fun one to write! See you all in my next post. :)