Illustration by Ana Vasquez

A Month of “Hello, World!”

Genki Hagata
Magenta

--

Learning 30 new languages in 30 days.

LLast October, I had a crazy idea: What if I tried to learn 30 new languages in 30 days? I like setting challenging goals for myself; it keeps me motivated. So, at the beginning of November, I set off on a journey to gain more experience in the ever-growing development landscape. I did it mostly because I was curious and always have a backlog of things I’ve been itching to try out. Giving myself some structure helped me stay on track.

“Hello, world!” is a tradition in technology, a program containing the minimum amount of code to render the words “Hello, world!” to a screen. In every programming language imaginable, writing a “Hello, world!” program is part of the first lesson.

For the purposes of this project, I’ll use the phrase “Hello, world!” to refer to any project that represents a basic, functioning setup of a framework, environment, or language, and whatever else I was able to accomplish in the short time allotted to each tool. I was able to produce a range of small applications, from those that did barely more than print “Hello, world!” to more functioning proof of concepts.

Fast-changing technology

Recently, it seems more than usual, the front-end developer community has voiced exhaustion and frustration with an ever-changing, ever-growing front-end development landscape. Not only that, I have seen unnecessary animosity toward frameworks — animosity based on opinions rather than the capabilities of those tools. Not every developer uses the same tools, or even likes the same tools, and that’s OK. I have my preferences as well, but I wanted to keep an open mind and learn new and different ways to work.

As a front-end web developer, I work almost primarily with variations on The Big Three: HTML, CSS, and Javascript, as well as Python. I mostly wanted to explore tools related to the languages I’m most familiar with, but I also needed to get out of my comfort zone. I picked a few topics to work with that I knew nothing about, which, since I don’t have a formal computer science background, were some of the hardest to grasp.

I feel it is important to be well-rounded, particularly when we work with people who have preferences different than our own. By setting aside time to explore tools others use, I’ve started to build a foundation for more productive conversations.

Where to begin?

To choose topics, I did my own research and took suggestions from my peers. The list of topics [captured here on Github] consisted of month-old frameworks to decades-old languages.

For the most part, I chose what to work on every morning by scanning the list and doing what I felt like doing — this was supposed to be an enjoyable experience, after all. The hardest thing about starting a new project every day is shelving the previous day’s project. I’m not hurting for side projects, but forcing myself to come up with an idea and create it each day generated a handful of projects I wanted to continue working on the next day.

I spent anywhere from 2–6 hours on each daily project, depending on my interest in the topic and what I wanted to accomplish that day. Some topics were more conceptually challenging or required more of an up-front learning investment before I started writing code. Those topics were the ones that cost more time or resulted in a simple program.

Gaining perspective

My “aha moment” came around day 16, when I came to the perhaps obvious realization that every Javascript framework is just someone’s organized, opinionated way of writing code. Whether it’s React, Meteor, Next.js, Hapi, or Express, they’re all just plain old code. The level of mechanics each framework hides under the hood varies.

Platforms that document their code best, expose the mechanics, and are extensible tend to be the most widely adopted and developer friendly platforms. Those that abstract away the inner workings and present a surface-level interface tend to be convenient, but less flexible and harder to deviate from the prescribed composition. React or Angular are the former, Next.js is the latter.

Learning new Javascript frameworks is fun and in some ways, more pragmatic than learning a new language (for me). However, I found that working out of my comfort zone with languages like Go, R, and Haskell helped push my understanding of computer science and best practices in general development. When you start working in multiple languages, you start to understand root concepts better and see how different languages implement programming building blocks, e.g., loops, functions, variables.

Yes, there were days where I didn’t feel like I accomplished anything and that my hello world application for the day was too basic. Generally this occurred on days when I spent most of my time reading or watching videos trying and grasp core concepts. I had to remind myself that this was still time well spent, and while I wrote little, I still accomplished the overall goal of learning something new.

At a minimum, I now have experience with 30 additional technologies. I’ll have less overhead when working with them in the future, and have a broader toolbox to choose from when approaching new problems.

In a nutshell

In software development, web development specifically, there are hundreds if not thousands of ways to do the same thing. What frameworks typically do is set up best practices and conveniences. Each one has its pros and cons, and there will always be an ongoing debate of “should I use X or Y?” By experimenting with different tools, a developer can learn new tricks and, most importantly, make more informed decisions.

This experience was both empowering and humbling. While I learned a lot, I’m more aware than ever of how much I still don’t know.

Read more about the process and each technology on Github.

Magenta is a publication of Huge.

--

--