My Journey Of Learning Programming
Written by Harry Le on 30 November 2018
Background & Motivation
Since I was a little kid, I always found technology (computer in particular) very intriguing. I could spend hours just
cheerfully playing around with the old, big-headed computer of 2000 era of my family. However, just like any kids growing up in a poor, developing and heavily-stereotyped country (Vietnam), I was expected to study hard and become a doctor, teacher or banker which are considered noble and well-paid professions. Besides, career orientation at high schools didn't help much either. Honestly, I had no clues what field I should study at that time (programming wasn't even an option), so I went to university and study Business English (I just thought that I'd rather be good at English at least).
Like it was not messed up enough, I took another course in Finance & Banking and worked as an English teaching assistant at the same time. So I went through university studying and working in a variety of totally different majors and graduated with two Bachelor's degrees, worked at an English learning center and did my internship at a bank without any passion in any of those fields. That was the moment I knew I couldn't go on like that anymore, I had to find a career that I could enjoy working on for the rest of my life and programming came to my mind just like that. I knew first hand that a job in computer field would fit me perfectly but I was also aware that the learning path to become a programmer is not easy at all. So I spent a few weeks trying to grasp some basic concepts and fortunately, it didn't take me long to realized it was the right thing for me. Solving challenging problems and turning ideas into useful applications - there's simply no better job than that.
Foundation Programming Concepts With C
In first several weeks, I did a research on which language I should learn first (just like every beginner). It turned out to be more confusing as I had known nothing about programming before that and each article or post I read recommended a different language for newbies. I knew that learning a programming language takes tons of time and effort (yes I don't believe in that "learning X in 60 minutes" crap). So I was very afraid that I would pick a wrong one because I didn't have much time to waste since I was already late in joining in the programming bandwagon. However, I noticed this same argument in those articles - it's no matter which language you learn first as long as it helps you understand programming concepts; after that you can pick up any languages or skills easily. So I chose C, one of the most difficult languages to learn because I wanted to challenge myself at the beginning and if I couldn't get through it, I would know soon that programming wasn't right for me.
To be honest, some of my first self-learning weeks were not as exciting as I had imagined. Too many new concepts to learn on my own and because it was C, first programs were just console output, which demotivated me even more. One of the reasons that kept me going was the book that I chose, which is truly a great C guide for beginners.
It was C Programming Absolute Beginner's Guide (3rd Edition) by Gred Perry and Dean Miller. It explains basic programming concepts of C in a simple and practical way with a handful of example code snippets. I would definitely recommend this book for anyone who picks C as their first programming language.
So after 2 months studying the C book, I had grasped my first programming knowledge such as data types, variables, functions, scope, operators, conditional statements, loops,... and even some features of C like pointers. As I was finishing the book, the whole programming thing just got more and more interesting.
First grasp of HTML & CSS
I had to admit that I felt a bit lost after finishing the C book mostly because I was obscure about what kind of software or application I could create with C. That was when I started to think about web development. The first tutorial I came across was HTML & CSS by Shay Howe. It was a pretty good blog-based tutorial, which covers pretty much everything a newbie needs to know about HTML & CSS. I had a good time learning HTML & CSS, it was obviously much more satisfying than C programs. But honestly I still knew nothing about web architecture, no clue about how front-end, back-end or full-stack differ from one to another. All I knew was just some mark-up syntax to display and style data like text, images, videos. But it was a good start, at least enough for me to know that having a career as web developer sounds pretty awesome.
A 120-hour Java course
During this time (early-2017), I started to have an intention to go to university again to study computer science in a formal and complete way. I did a lot of research and knew that there are unlimited resources and tutorials in the internet, that I could learn web development by myself and save tons of college tuition fee. However, I was also aware that there're many things a university course can offer over self-learning and a formal degree would definitely be a huge advantage for my long-term career. So I decided to enrol in the 2-year Master of IT course offered by RMIT (Australia) which can potentially gives me 2 more years to find my chance of employment and even permanent residency in Australia.
During preparation for the enrolment, I was asked to provide proofs of programming-related study (because my Bachelor's is not relevant) so I took a 120-hour on-site Java course provided by a local computer learning center. I decided to learn Java instead of a web development course because RMIT mainly uses Java in the course and I think web development self-learning is way more effective. The Java course was not really great. It went way too fast because they had to cover everything in only 10 weeks, from Java fundamentals to OOP, MVC, frameworks like Spring, MySQL database to web technologies like JSP, Sevlet. I was glad that I had learnt C before so it was less stressful to keep up with all the concepts. My final project was a web app that use MVC framework to display data stored in MySQL database. I didn't fully understand web architecture at that time but my self-learning of HTML & CSS did actually help me a lot in the project.
Full focus on web development (CSS, JavaScript, React.js, Node.js)
After finishing the Java course and hence successfully enrolled in the RMIT Master's course, I had around 6 months to spare before moving to Melbourne. I realized that I enjoyed learning web development more than C or Java so I decided to put my full focus on it. I did a lot of research, read as many articles and guides as I could and ultimately ended up buying a variety of online courses of Udemy as below.
During this time, I made a typical mistake of a newbie when I tried to walk through the learning path as fast as possible such as following a MEAN stack project-based tutorial when I hadn't known a thing about Node.js or Angular, or learning Bootstrap and JQuery without understanding vanilla CSS and JavaScript comprehensively. So I decided to learn everything from the beginning by taking these courses from Udemy: Brad Traversy's Modern JavaScript From The Beginning and Jonas Schmedtmann's Advanced CSS and Sass. Both courses were amazing, which helped me a lot in learning from fundamental to intermediary and even some advanced knowledge. I highly recommend this pathway for those who really want to learn programming properly.
After quite a long period of learning and practicing using pure JS and CSS (check out my portfolio to view some practicing projects), I started my interest in Node.js and React.js. I bought and took a variety of courses from Udemy (I even took some courses multiple times): Andrew Mead's The Complete Node.js Developer Course (2nd Edition), Brad Traversy's Node.js. Express & MongoDB Dev To Development Course, Andrew Mead's The Complete React Web Developer Course (with Redux), Brad Traversy's React Front To Back, which are all best-selling courses on Udemy. Brad Traversy and Andrew Mead are my favorite tutors in Udemy who can teach and explain complicated concepts in a simple and practical way. One great thing about them is that they don't just let you code along and build sample apps, they also hand you great tools, boilerplate projects or frameworks which you can freely twist and tailor to your needs. Especially, Brad's youtube channel is one of the most popular online tutorials channel to learn web development. During this time, I spent tons of effort and full focus on learning the MERN (MongoDB, Express.js, React.js, Node.js) stack and finished a few full-stack apps such as Tasks Planner.
Get to know PHP and some frameworks
As I was trying to find out what was missing in my skills set after getting a decent grasp of CSS and JS technologies, PHP came along as a old-school but must-know language. Most of experienced developers recommend to learn PHP even though we may not use them because it is used in the majority of websites in the internet and it's still a thing in at least next 5-10 years. So I took the PHP Front To Back Series by Brad Traversy on Youtube. Honestly, I didn't like PHP at all at first because it's very easy to end up writing "spaghetti code" with it no matter how good you are. But I had to admit that PHP is really good for developing website since it combines perfectly with JS and HTML so that I felt the need to take more PHP courses such as Brad Traversy's Object Oriented PHP & MVC and Laravel From Scratch Series, both also by Brad Traversy. Having finished all those courses, I ended up developing a custom MVC framework which I built this personal website on top of. I even managed to build an admin system for this website to post and manage my blog and portfolio, which is something that I can feel proud of in my early stage of career.
Take IT course at RMIT University
By the time I finished this blog, I had already done my first year in RMIT. It's not easy to balance things in university because I was also taking online web development courses, practicing pet apps, building this website and doing some part-time jobs to support my living during this time. Luckily, the course turned out to be really great. I got to learn IT from the bottom and different aspects, not just building websites. Some great units I had learnt were IT Infrastructure, Usability Engineering, Software Engineering and Advanced Programming which were all interesting, challenging and required tons of time and efforts to earn good marks. But in return, I had learnt a great deal of core IT knowledge which would be definitely important for my future path. I really enjoyed this term as it's always a good feeling to learn and do what you love.
Looking back, I wish I could have learnt programming earlier and hadn't waste my early 20s on other fields. However, everything is on track and I am still young, still may have 30-40 years or even more in the IT world and the most important thing is that now I can live, learn and earn a living doing what I love and don't have to regret my career choice anymore.