I decided to learn programming 10 months ago (on 10th July 2016). I was successful... kind of.
This wasn't my first attempt at learning to code. I'd made dozens of previous attempts to learn programming from books, YouTube, Codecademy, and many other places. I never managed to stick with it for more than a few days (or hours, in some cases).
Looking back at my past attempts, they failed due to my incorrect assumption that programming was only about learning the syntax of a language.
This time, I didn't start with a clear end goal. My only aim was to put in one hour of coding per day, every day. It became clear I had to have a rest day at least once a week, so I dropped Fridays. I don't think I would've made it this far if I had a ridiculously high goal (such as mastering a certain language).
My first learning resource was CS50.
This course teaches you basic programming concepts (loops, if/else statements, data structures, etc) using C. It also gives you a really good understanding how things work the way they do. The material dives deep into how a computer processed and stores data.
I made it to the 6th week of CS50s material before moving to FreeCodeCamp (FCC). CS50 was changing format in January 2017, and I had just finished the week 6 material in December 2016.
The course was moving from PHP to Python, and I was about to start the PHP section. I plan on finishing CS50 in the future (it's an amazing course).
I'm still working through FCC.
What Are The Results So Far?
I can write code that will complete a task.
One of the main things I've gained from programming is persistence. I used to think I was a persistent person. I wasn't.
Or at least not as persistent as I thought.
When you're writing code, you fail a lot. No matter how frustrated you are, or how much you want to throw your laptop in a lake and never open another text editor, you have to keep pushing at the problem — it can be solved.
What Went Well?
I Stuck With It
I successfully stuck to my original goal of putting in an hour each day.
There were a fair few days missed, but I managed to make coding a top priority.
Learning Material Selection
I was on the fence deciding between CS50 or FreeCodeCamp as my starting point. I made the right choice.
If I started FreeCodeCamp without the foundation provided by CS50, I doubt I would’ve made the same progress (or kept going).
CS50 teaches you how to push through the frustration of not getting something straight away. The course is structured to push you just outside your current ability level. You have to put in continuous focused effort to complete the projects.
I didn’t truly understand how to break problems down before working through the CS50 problem sets. This helped a lot with the FCC challenges and projects.
What Went Wrong?
Not increasing my daily time goal
It was a mistake to keep my daily time target at one hour.
I didn't push myself enough. If I could go back in time, I would've gradually increased my time commitment (after the first or second month) by half an hour per day each week.
I’m confident I could've handled putting in more time per day. It would've taken some adjusting, but it was doable. Two hours seems to be my max for weekdays — this should have became my goal.
Not Writing About My Experience
I wish I could go through and read about the things I was stuck on 10 months ago. It would be motivating to see how far I’ve come.
It would make it easier to find the areas I need to spend more time focusing on.
I wrote notes about the different concepts I was learning, but they don’t compare to a deep dive from my brain on the things I was struggling with.
And writing about specific FreeCodeCamp tasks could've helped other people stuck on the same sections (niche articles helped me a lot).
I understand why so many people recommend starting a blog while you're learning to code.
Not Connecting With Other Programmers/Learners Sooner
I don’t think I’ve ever spoken to someone in real life about programming. At least, not someone who understands what I’m talking about.
I'm not sure what the exact benefits of reaching out to other programmers would be, but I’m sure it would’ve made learning easier (or more enjoyable).
I'm still putting in an hour each day. I'll be increasing this to 1.5 then 2 hours per day.
I'm about to start the advanced front-end projects on FreeCodeCamp. Once I finish these four projects, I'll be finished the front-end section of FCC.
I don't know if I'm going to continue spending the bulk of my time working through FCC. There are a few other options I'm considering (one being a CS degree).
It was a good 10 months. I'd do it again if I could go back in time.