Eureka! If there is one lesson I have learned...
Backstory: The First Five Months of My Computer Science Journey
Focus on what interests you!
Five months ago, I had no idea about software engineering, data science, or programming languages. When a colleague asked me which languages I planned to learn as I embarked on my self-teaching journey, I replied without knowing, "English."
My adventure began with a YouTube video by FreeCodeCamp:
I watched the video twice— first while listening to it at work, I began to wonder why I hadn't taken any computer science courses during college. Later, I went home, sat down, and watched it again. I noted down all the data structures explained in the video on my whiteboard, thinking, "I've just found my new hobby."
I was then introduced to a list of programming languages and advised to choose only one or two, maybe three at most, and become proficient in them. However, I had no clue which one to pick until I stumbled upon this YouTube video by Internet Made Coder:
Feeling inspired and after much contemplation, I chose Python as my focus. Honestly, most people recommend either JavaScript or Python, but since I've never been particularly interested in networking and web development, Python seemed like the most logical choice for me. So, I returned to FreeCodeCamp and began, as you might have guessed, Python for Everybody!
The journey was challenging. I learned the basics from the course, but when I reached the networking section (about 6-8 hours in), I became confused and struggled to follow the explanations, despite the instructor's best efforts (I later realized he was demonstrating web scraping with Beautiful Soup). Object-Oriented Programming (OOP) caught my attention, and I rewatched that section multiple times until I finally understood the cookie mold analogy. Overall, the 14-hour video took me over two weeks to complete as I tried to absorb and apply as much information as possible.
However, I soon found myself lost again, wandering through various topics. I spent a month learning about networking, Linux systems, and bash commands, hoping that cloud engineering might be an easier entry point for someone without a prior related educational background, given the increasing adoption of cloud technologies by businesses.
The topics I encountered during that period were, to me, incredibly dull. As I mentioned earlier, web development isn't my primary interest, and I should have listened to my instincts. The worst part was that during those 4 to 5 weeks, I hardly did any programming, leaving my newly-acquired Python skills to stagnate. To be clear, it's a matter of personal preference; I still learned a few things along the way. However, it's not something I want to focus on the long term. Frustration built up as I felt I was heading in the wrong direction. I even created a plan to become a cloud engineer or AWS/Azure specialist, which turned out to be the worst decision in my journey so far. I forced myself to learn topics I didn't enjoy, leading to burnout and a foggy memory of networking concepts. On the bright side, I did become familiar with using bash commands and typing in the terminal.
After weeks of distraction, I finally learned how to use GitHub, although I didn't push anything remotely meaningful until my third month when I started CS50.
My journey took a turn when I revisited the same video by Internet Made Coder, where he discussed the CS50 course at Harvard University. He emphasized that just about anyone learning to code should take this course (or something along those lines!). With this in mind, I continued on my path.
Paving my way:
It was during this period that I realized my goal of becoming a Python developer. Despite being sidetracked for quite some time, I knew I needed a solid foundation moving forward. That's when I came across CS50:
The course covers nearly everything a beginner needs to know, although I would have preferred more than just a week of specialized Python training. To supplement my learning, I searched for a dedicated Python course and ultimately enrolled in Andrei Neagoie's Zero To Mastery (ZTM) program, which I pursued alongside CS50:
Both his ZTM python course and the CS50 course provide solid materials, just about everything I wanted to learn. And then, it was mid-January 2023, and I found out about chatGPT. A double-edged sword, I started using it as a learning tool extensively not just for learning how to code (especially when coding in C) but also for learning the grammar of colloquial Japanese (I've been learning Japanese on the side before and throughout my coding journey). A powerful tool, for sure but it's almost as if you are learning from a mastermind that has a mental decline.
So far I am 55% into the ZTM python course and in week 3 of CS50, which I must bring up the topic of pricing. CS50 is free so I tend to do it whenever I feel like it, ZTM has a $39 monthly subscription fee that I honestly regret not buying it off for $35 (lifetime access) on Udemy when I still had the first-timer discount.
Imperfect yet incredibly powerful, ChatGPT has led me to reconsider the future of software development. In February, I took a two-week pause to reevaluate my goals and plan my next steps after completing my monthly ZTM Python course.
Many suggest that web development involving HTML, CSS, and JavaScript is the ideal entry point for newcomers, offering the opportunity to learn while earning an income. However, I've been cautioned by stories of junior developers on large teams being relegated to mundane, repetitive tasks with little opportunity for growth after the initial learning period.
Ultimately, I decided to dive into what I believe is the cutting edge of software engineering: Artificial Intelligence and Machine Learning. Imagine an AI tool even more powerful than ChatGPT, acting as a "super high-level programming engine" that can transform ideas into code without any human intervention. I can't help but wonder if coding could be further simplified. While it's true that Python and JavaScript are popular for their simplicity compared to more verbose languages like C, is there an even more straightforward approach to high-level languages? Only time will tell if I'm mistaken.
Despite my enthusiasm, I understand the importance of proceeding with caution in this field. Achieving my goal of a more accessible programming experience may still be decades away, but I believe it's a worthwhile pursuit among my other objectives.
By the way, math has always been a passion of mine since childhood, and I'm thrilled to be revisiting it through an excellent Coursera course!
That's about it.
As I enter my sixth month in the world of software engineering, I'll continue refining my learning process and staying active on this blog. As mentioned in my first post, you can expect three types of blog updates: weekly, monthly, and occasional random posts. I'm also exploring the idea of creating small yet intriguing ML or Python projects that align with my studies, combining theory and practice for a well-rounded learning experience. Here's to achieving greatness together!
Thank you for reading!