Things to check while learning a new Programming Language

Even though we programmers try to keep working in one or two favorite programming languages, it is not that easy. Depending on the problem domain, client’s requirements or team decisions we need to work on new programming languages, now and then.

Starting out a new Programming Language can be scary and doubtful. After-all you are leaving all your favorite constructs and tooling behind. Who knows what's ahead? And a demon of extreme skepticism possess you. You start to dislike everything on first try. And most importantly you lose your productivity.

Programming and Programming Language are two different things #

When I started out with PHP (my first programming language in production), I thought I was learning PHP. Now I realize I was mostly learning how to program rather than PHP. It is like writing a Cook Book. What matters is, can I cook or not. If I can cook, I can write how to cook, in Bengali or English (or any other languages with the help of translators).

Similarly, the fundamental skill of Programming is interchangeable between most forms of Programming (System, Web, Mobile App etc). And language is just a way to express what I want to achieve.

Philosophy of Programming Languages #

One of the best ways to starting out a new Programming Language, by understanding why it has been developed in the first place. Reading one or two articles about the reason behind that Programming Language or why it is good, doesn’t hurt. But it will save lots of time from cursing a weird feature that you hate on that language.
All Programming Languages do not have same reason to exist. Try to feel the need of that Programming Language from the creator’s perspective, so that one little weird thing will not look as weird as before. It will start to make sense.

Paradigms of Programming Languages #

If you see the word “Paradigm” in the description of the Programming Language you want to learn, and do not have a clue what that Paradigm means, stop touching that language. First read one or two articles, even some YouTube videos about that Paradigm before starting out. Cause depending on Programming Paradigm, your concept of variable or function or objects might be very different thing there.

Similar goes with words like “Architecture” or “Model”. I used to feel tired seeing those words, now I feel very enthusiastic, as those keep opening new doors of possibilities.

Better Software Design Practices #

Evolving as a Programmer means learning better ways to solve problems, writing maintainable code, communicating with other developers. While working on a stack, you will constantly face terms like MVC, Adapters, Factories, MVVM etc. As soon as you learn these patterns, you will see they will come up in other stacks too. May be differently, but this knowledge is also interchangeable.

To write good code, you will hear terms like Naming Conventions, Comment Blocks etc. Guess what, just a Google search like “Best practices in X programming language” or “X style guide” will show you industry standard based on that programming language. You will notice that, other than some minor difference due to structure of the code or the programming philosophy, most things are the same.

Dependency Managers #

No Programming Language will suggest you to write everything yourself. You need some kind of mechanism to use other peoples code, may be an open-source library, in your project. That’s where Dependency Manager comes in handy. Most of the modern Programming Language ships with very good dependency manager along with it. If not, there must be a community project to do that. If you are familiar with concepts of versioning, third party libraries and multiple release flavors, then you don’t need to worry here. Just simple help command will describe what you need to do.
Though some dependency managers are also build tools, so that they have some more functionality with them, ex — Gradle in Java, Cargo in Rust etc.

Finding Good Resources #

Nowadays, most Programming Languages have good official documentation and tutorials. Other than that the community builds its own resources too. To find that checkout current trends like — “Awesome X” (replace X with your language) where you will find curated list of articles, libraries, open source projects etc.
Also, if you are like me, who likes to see gist of full language features in one place then visit — sites like learnxinyminutes.com. If you like to learn by writing code then you can find exercism.io, hackerrank.com etc helpful. If you are lucky, you will find koans by searching “X Koans”, where you will learn it by doing TDD (Test Driven Development) exercises. I love what those brilliant people did in this learning area. You just need to find right stuff, you are in good company.

Also, if you get stuck somewhere, Stack Overflow or community IRC / Slack channels are there to ask for help.

Conclusion #

Every Programming Languages I have encountered so far, I liked some aspect of those, disliked some and most importantly, I have learned something new in Programming in general. The more abstract concepts (Paradigms, Patterns, Architectures, Models etc) I am learning, as much it is becoming fun to write programs. So stop worrying about learning a new Programming Language, enjoy the ride.