DEV Community

Lakshit Singh
Lakshit Singh

Posted on

Learning 10 Languages: My Polyglot Journey

The first thing an individual learns on their Programming Journey, is a language. Languages are a way for us programmers to communicate with the CPU and execute tasks, But languages are way more than that, they hold a much larger part in the bigger picture.


Personally, I have always felt a deep passion towards languages, and what they allow me to do, and thus, I have been always been learning and experimenting with languages, granting me a great sense of Adaptability. The greater purpose they served was that they allowed me to understand that languages, at the end, are tools.


You do not do the perfect job for the tool, but instead use the perfect tool for the job.


Why I Chose To Learn Multiple Languages



Although my journey to learning new languages started off as a way to better equip myself for the job market in my early days, it grew to something much more deeper. When I started to learn JavaScript as my second language, it was a different experience altogether from python, my first language.
JavaScript, although similar to python in dynamics, was something entirely new. Since it was made for the browser to interact with HTML and the DOM, the new functionalities it held, was the largest factor in me deciding to always keep learning new languages.

The main 'wow' effect I had was with C/C++. It was something entirely different, getting into the basics of OOP (I did not do much OOP in Python at first.), and also the introduction to my favorite topic of CS, Data Structures.

This gave me the realization that I can learn a lot from languages, especially languages that are not at all similar, or that have different purposes altogether.


Languages I Explored and Why



My languages in chronological order are:

  • Python: Was the language that ignited the passion and love for programming that I now adore. It remains as a nostalgic experience for me, but I use it little to nowhere.
  • JavaScript: Remains one of my most used languages still, but oftentimes, its not because its best for the job, but because people I want to contribute with, oftentimes don't know the best tool for the job. The only problem I have with JavaScript, aside from the fact that it is used everywhere, is that it does not have a type system, and although Typescript exists, "A leopard cant change its spots".
  • C++: Laid my fundamental foundation, this along with C, was my learning language as I like to call it. I do not create applications in C++ much, but whenever I want to learn a new low-level aspect, C++ or C is the go-to.
  • C: As I mentioned in C++, C was the go-to language for learning new concepts, especially for non-OOP related concepts. Since I get to make stuff from, pretty much scratch and understand better.
  • Go: Is the perfect tool for me. Since I mostly work with Backend, cli's, or tui's, Go is the perfect mixture of minimalism and low-level control, allowing direct access to syscall's etc. without the need of porting libraries from another language. *cough* Python *cough*.
  • Typescript: Is my second most used language, it solves the issue I had with JavaScript, which is it being dynamic-typed instead of static-typed, and perfect for large people working on a project. But, I still abhor using it for Backend development, since it does not align with my idea of using the perfect tool for the job.
  • Bash: My third most used language. Since I have started learning a little about DevOps, I have begun to write more and more bash files, may that be for configurations, ease of use or deployment.
  • Rust: Is something that blew my mind, it operates on a different paradigm than any other language I have learnt, to put it simply, its strict, intriguing and fast. I can definitely see the use-case of Rust, but for me, it sacrifices Developer Experience for a better and safer end product. I have yet to utilize Rust in a large project, and I am almost certain that my opinion will change, but I cannot guarantee whether it will be for the better or worse.
  • C#: Although I learnt it mainly for my internship, and I cant actually decipher if it was the internship experience, or the language, but, since I began using C# I've had multiple experiences with System Design patterns, that I did not previously. This has helped me in not only creating better software but also to understand it.
  • Zig: Similar to Rust, was something I learnt simply because it felt different, and... it was. In my opinion, Zig and Rust are similar, not in basis of how they work, or what they do, but in the ideology of providing a better alternative to low-level programming. Where Rust solves it through strict compilation errors, Zig solves it by giving the freedom into the developers hands'.

These thoughts, may appear opinionated to some, but I am proud of the fact that I created these opinions myself from my experience, they were not seeded into me.


How Languages Shape a Project



As one can guess, Languages can affect the performance of a program (Rust being blazingly fast, vs Python), Developer Experience (Python being easier to write, vs Rust) and Maintainability (Typescript's type system, vs JavaScript's).

But there are much more lesser known advantages, that are:

  • Ecosystem: A languages' ecosystem can severely affect how it works in a development environment, the fact that I would not have to write recurring parts of an application. For me though, more so than that, what matters is that I do not have to be overly reliant on dependencies to make a good project.
  • System Design: The design and architecture of a system is highly reliant on the language itself, we all know of the functional, procedural and object oriented languages, and as guessed they can affect how the program is structured, such as the abstract classes and virtual functions in object-oriented, the Model-View-Controller method in procedural (not exclusive), and pure functions or separation of concern in functional languages. Building upon this, a languages internal features, such as goroutines and channels in Go, also make it more distinct from other languages.

Languages I Moved Away From



Throughout my journey, there are languages that I no longer use in my daily life, some of these are:

  • C/C++: Although C/C++ are one of the greatest languages made, and shaped the way for modern language, in my opinion, age has caught up to them. C/C++ are still relevant, and I use them whenever there's a task that requires learning and working closely with systems, the reason I do not make app's in it tho, is that firstly, I prefer a procedural system over an object-oriented or functional system, and secondly, the current build system is a complex (I mean cmake etc) to the modern counterparts, and hence for me, it has become obsolete for anything other than learning stuff.
  • C#: I have spent a lot of time developing in C#, whether that be a side project or on my internship, the reason I have decided to not pursue it is because it is tied to Microsoft, you cannot access the full features without using Visual Studio (Windows locked). I am a person that likes my freedom, hence using Linux full-time (I use arch btw!), making other counterparts often overshadow C#.
  • Python: In my opinion, python is a great language, being easy to use even for beginners and also having fast libraries. The reason I left behind python is because, the more you write python the slower a program becomes. Python is heavily reliant on 3rd party libraries written in C or C++ for being able to compare to modern languages. More so a personal reason, is that I often don't like to rely on libraries at all, since they are dependencies.
  • JavaScript: Since discovering Typescript and utilizing it more and more, I now almost never resort to JavaScript for any task I have, I tend to use the better more type-safe alternative, Typescript.

The Advantages and Challenges



Being a polyglot has various advantages, some of them being

  1. Versatility: By understanding, and using a lot of languages, I am able to understand and read properly most of the code I'm shown. Specially large projects with several sections, this makes it easy to navigate and understand multiple parts of a project and how they communicate with each other
  1. Adaptability: By learning such complex and diverse systems, I believe to have gained the skill to be able to easily understand how some architectures or systems may work.
  1. Community Engagement: Since I have learnt a lot of languages and systems, I am able to easily assimilate myself in a large number of communities and talks, finding common grounds and sharing opinions.

But like to any power, it also has its disadvantages, which are

  1. Cognitive Overload: It oftentimes is hard to make projects or write code in new languages or my less used languages, since I keep repeating syntax or features of the one I used previously.
  1. Context Switching: When switching between languages, such as the backend or frontend, it becomes hard to write code, especially more so in languages with a different syntax structures.
  1. High Standards: By understanding the good and the bad parts of most languages I use, I have found myself sometimes wishing for a 'perfect' language, that has all the good features of all and none of the bad stuff. This also makes it hard to keep at new languages, that may do things differently, something that I think to be worse than other languages.

My Go-To Stack Today



By being a polyglot, and having accepted the "right tool for the job" mentality, my tech stack depends highly on the nature of the project. To give a rough Idea though,

  • Backend: I oftentimes find myself going for either Go, or Typescript. I use Go more personally since it is the superior choice, but Typescript is more widely recognized and thus is my choice when working with people.''
  • Frontend: I mean, is this even a question? What would you use for frontend if not JavaScript. As for UI Frameworks, I have worked with all major frameworks except Vuejs, but oftentimes I try to utilize Svelte.
  • Scripting: Similar to frontend, this is not even a debate, nothing comes close to bash for scripting purposes.
  • CLI's or TUI's: Normally, I would use Go and leverage the standard flags library or the Cobra library for CLI. And the bubbletea library and the charm.sh collection for TUI's. But I am interested in trying out some CLI's in Rust or Zig.
  • Systems Development: have not delved much in systems development, and have only recently started learning its basics, but I have plans to use either Rust or Zig for it. More so Zig because of the development experience and the freedom.

My Advice on Learning Languages



My advice heavily relies on at what stage an individual is, for a beginner, there is no better place than a course, or a series of videos to learn a language. They explain thoroughly from the most basic to the most complex parts.

For an experience individual though, they give too much information, since most courses explain from absolute basics, I myself oftentimes skipped multiple sections on syntax etc that were of no use to me. And for these I prefer the docs, since they go into much more detail, and also I can skip whatever parts necessary easily.

There is a clear plan I follow for the road to actually mastering a language after learning its features and syntax.

FlowChart

One thing to keep in mind is that the projects should always align with the usability of the language. Do not use Go for the frontend, and Javascript for Systems etc.

Top comments (3)

Collapse
 
sanyam_sonkar_e27399dcc8c profile image
Sanyam Sonkar

Thankyou for sharing this brother!!. It will help me alot for starting any new coding languages.

Collapse
 
sumitguptagit profile image
Sumit Gupta

Nicely explained 🙌!!
It will surely guide those unguided beginners regarding their next step(learning new language)
Kudos !

Collapse
 
nucleofusion profile image
Lakshit Singh

Thanks!