Introduction
I’m Nhan Pham, currently 17 years old (with my 18th birthday just around the corner on March 6th) - at the time of writing, which is January 21, 2024 - and I was born and still live in Germany (it’s somewhat ironic that my blogs are - at the time of speaking - exclusively in English despite German being my mother tongue; I'm aware that my English may not be flawless).
I'm still in school and I get my Abitur
this year (kinda like a high-school diploma). One of my hobbies is creating software, mainly websites (my other hobby is playing the piano). I also like playing with different things, like developer tools. Lately, I've been spending a bunch of time tweaking the tools I use for coding every day, like my custom Neovim setup. Thinking of sharing more about that in a separate blog post soon.
I'm still pretty young (for now, at least 😅) and there's a ton I want to learn. Making software my job in the near future is the goal. I'm eager to explore different areas in the programming world and see how AI will change things. But let's rewind and start from the beginning of how I got into coding.
Early Coding Journey
In October 2020, amidst the global spread of the Corona virus that had been ongoing for nearly a year, I embarked on my coding journey using JavaScript on a Windows laptop. Taking a bit of an unconventional route, I decided to dive into the world of Discord bot development, mainly because I was heavily engaged with Discord at that point in time. The idea of creating my own bot intrigued me, so I watched numerous YouTube tutorials to learn how to build bots (shoutout to CodeLyon and Worn Off Keys for their helpful content). Back then, coding was just an experiment and a productive way to spend my time.
Short after learning JavaScript, I got into TypeScript. It was quite a learning curve for me, as I wasn’t experienced enough with JavaScript, but I got around it. Now I use it in my daily coding and I can’t imagine going back to JavaScript for complex applications. JSDoc exists, but I rather have that one compilation step and use proper type markup instead.
So, I had this big Discord project called Galaxy Alpha, and I put a ton of time into it. I was learning TypeScript and figuring out how to use databases like MongoDB. Now, when I look back, I kinda wish I had gone with a relational database instead of a document-based one.
One thing I noticed is that setting up a bot just using Discord commands can be a bit of a hassle. The process often involves a considerable amount of manual effort and can be somewhat tedious. So, I stumbled upon this video where a guy adds a web interface to his bot. Got all excited and did the classic copy-paste move without really knowing what I was doing. Turns out he was using a HTML template language called pug
(Jade in the past). A bit of an unconventional choice – I probably should've started with plain old HTML and CSS. Anyway, that's how I ended up doing JavaScript in the browser.
The project kept growing, and I found myself diving into all sorts of stuff (like jQuery, express, you name it). But come April 2021, I decided to abandon the project. I deprecated the repo. It was a hard decision for me, because I investested a lot of time into it (it has about 18k LOC). The reason? Well, my interest in building bots just faded away. Sure, my friends used it here and there, but let's face it, there are way cooler bots out there. I felt like I needed a change, and that's when I stumbled into Next.js
.
If you are interested in going into web-development, start with HTML and CSS. With that tech stack, you could build whole static websites already. For interactivity, learn JavaScript for the browser, get familiar with the DOM
, do basic DOM manipulation. The vanilla JS stack can lead you through small web applications, but as soon as they grow, you can potentially learn a web framework like React. I chose to stick with React because it’s heavely needed in the job market. It’s not wrong to learn TypeScript on the way, so that your apps scale better when they get complex. And to this point, you can still learn server-side JavaScript with Node.js.
Transition to Next.js and React
You are probably asking: why should you start with Next.js and not learn React first. Well, I was just a 15 years old and I didn’t have someone leading me through web. It was utter chaos just figuring out what React is, why people use it and why I need Next.js. I still remember the day I wanted to integrate jQuery into React applications. People were confused on why I need jQuery in React and looking back at it, I can only laugh at me.
The project that marked the beginning of my React and Next.js journey was an upgrade tracker for Clash of Clans
. While I was building the dashboard for my Discord bot, I got into building an upgrade tracker for that game, but I went with PUG initially. Well, the code was an utter mess, so I decided to re-write it in Next.js (as a matter of fact, I rewrote that exact app multiple times again: night-clash
, night-clash-v2
and nite-clash
). Because React is a whole new ecosystem I have to work in, I learned very much at once. GraphQL, TailwindCSS, Firebase, Prisma, … - and trust me, looking back at the code base now, I can't help but appreciate just how much I've learned over the years.
Aside from this big project, I build some side projects, like classic-games-web
(a website to play multiplayer card games like Uno online) or played around with Solid.js
. I also got into mobile cross-platform development with Flutter
(and abonded it short after, again). I’ve got burnt out of these big projects, because I couldn’t finish many of those (none of my big public projects are live). That’s why attempted coding challenges and just build little mini projects (you can still visit them, they are suffixed with -solid
in my GitHub repo). This was around October 2022.
Evolving Skills and Lessons Learned
With nite-clash, my final project in the Clash of Clans upgrade tracker series, I put into practice all the knowledge I had accumulated from around April 2021 to May 2023. I abandoned it.
Yes, I abandon many projects, that’s a problem I had for a long time. But now, I have private projects that I successfully launched into production.
In September 2023, I started to grow interest into my developer tools. Ever since I started coding, I always used VSCode
. However, it has its downsides, being quite heavyweight and consuming a significant chunk of RAM due to its Electron base. It got the job done, but one day, I stumbled upon Neovim
, a community-driven fork of Vim
with added functionalities. I'll save the details of my switch to Neovim for a future blog post.
Fast-forward to the present, I have learned much from my past. Although, I began with many mistakes, it's a natural part of being human to learn from those mistakes and consistently evolve as we age.
What I’ve learned in those 3 years of coding:
-
Don’t get into tutorial hell: just watching tutorials isn’t enough to be proficient in programming. The best way to learn something: build projects, experiment around, read docs,…
-
Don’t rush it with your journey: just rushing through tools doesn’t give you any value. Take your time and go through the tools one by one to create a deep understanding of the tools you are using
-
Finish projects: it just feels better to have projects finished better than abandoned (and for a junior job application, it’s not bad to have a portfolio with different projects)
-
Don’t be afraid to make mistakes: mistakes always happen, we just have to learn how to react and adapt to them
Goals for 2024
What my goals for 2024 are:
-
Build more projects (and also finish them) and learn new aspects of programming
-
Extend my personal website
-
Play more around with developer tools
-
Learn more about Linux
-
Blog everything I discover and share it with you
Conclusion
This article is now coming to an end. I don’t know, how my first attempt to a blog post was, but I felt pretty good writing it. Sorry, if it was too long for you (I really tried to keep it short, I left many details out 😂), but I hope you enjoyed it. See you next time, to my next blog post. Cheers!