Introduction
Hey, DEV people! 👋 Yes, it's time to talk about what most programmers try to avoid, when asked what language to start with.
I think, you have 100% heard such questions from your acquaintances and friends. They usually start with an awkward listing of languages they have heard anything about. For example, like this:
If I learn Golang now, can I switch to Node.js later?
How to answer such questions so as not to harm and to give a positive vector of movement for the newcomer? OK. Let's figure it out together! 🤗
📝 Table of contents
- A misconception that spoils everything
- Real-life question to make it clear
- What is the reason and what is the consequence?
- More to the point
- What's this all about?
- Tips I'd like to get
A misconception that spoils everything
Many beginners and/or inexperienced programmers mistakenly believe that "a programming language is the foundation of everything" and "you don't need to know anything at all except 1-2 frameworks".
These opinions are raised to the level of a postulate in the IT community. And you can hear this very often in 2021 from developers on React.js (JavaScript) or Django (Python) or similar popular and widespread libraries and frameworks.
But, in fact, programming language (and of course library or framework) it's just a tool with which to achieve the ultimate goal: developing a software product with a maximum programmer's productivity. Having only a knowledge of the language will not be enough.
Real-life question to make it clear
To begin with, you need to break down the reason for such questions in order to understand the nature of the problem of such questions. I suggest that we use a real-life question like this to make it clear to everyone:
If I learn to drive a Porsche, can I then switch to a Tesla?
Let's take a look at these two cars and note their common elements, that enable you to operate the car (their user interface, so to speak):
- A steering wheel with controls for the turn signals and windscreen washer;
- Two pedals (gas and brake);
- Gear lever and handbrake;
- The on-board computer screen;
- Driver's seat;
Now let's look at the differences between these cars (their unique features, so to speak):
- Engine operating principle (electric and internal combustion engine);
- Location and format of the engine;
- The appearance of the vehicle body;
- Software for the on-board computer;
Yes, there are actually a lot more items, I've just pointed out the ones that are 100% in any car and allow you to drive it. Forgive me for saying this... 🤗
And now, we need to determine the most important thing: without what elements would it be impossible for a driver to drive any car? That's right! It's just four elements: steering wheel, pedals, gear lever, and driver's seat.
That is, the answer to the original question is: yes, you can easily switch to a Tesla, if you have learned to drive a Porsche. All the elements will be familiar and intuitive.
Yep. If you've been following along, you've probably guessed my point by now, haven't you? Yes, we can apply the same principle to computer science.
What is the reason and what is the consequence?
Nowadays there is a very wide range of different programming languages on the market. But all of them can be divided into large categories according to paradigms and approaches:
- OOP and procedural;
- compiled and interpreted;
- statically and dynamically typed;
Switching from one OOP language to another, such as from JavaScript to Python, is not too difficult. Of course, you will have to learn the syntax, the standard library and some popular framework. You need to put the right level of effort into it, but it won't take long anyway!
Just like driving almost any car, if you've ever learned how.
On the other hand, switching from Python, let's say, to Haskell will be much harder: there is a different approach and paradigm of the language. You already need to make an effort to rearrange your thinking.
In any case, it is important to understand the main thing, the fundamentals on which modern languages are based:
- variables;
- functions;
- conditional operators;
- loops;
- concurrency;
- ...
If you combine all of these into one, you need to have a basic understanding of Computer Science.
More to the point
For example, take John, who thought for a long time: "which is better – Golang or Node.js?", and settled on Golang. He learned the syntax, understood the principle of building HTTP servers in this language and even tried to make a small microservice on the Fiber web framework.
Will John now be able to develop a fully functional web application, like an Instagram or Amazon analog? Of course not! 🤷
Knowing the language is not enough to develop software products on this scale. You also need to understand the web and its protocols, be able to work with databases, setup the infrastructure, make complex architectural decisions, and many more.
These things don't depend on the programming language you choose!
What's this all about?
When I started in web development (over 12 years ago, wow), I had a really good understanding of the principles of visual composition and I could transfer that to HTML and CSS and then make it dynamic, using PHP on the CMS Drupal.
Even then, in addition to HTML+CSS and PHP, I had a good understanding of:
- how websites are structured;
- what is the process of data exchange between client and server;
- how to configure and run a virtual server;
- how to organize backups for the database;
- how to optimize a virtual server;
- where the web application security bottlenecks can be;
- how to configure error logging;
- and so on...
I was really good at it, honestly! 😉
One day, an acquaintance said: "better to start writing in Ruby on Rails" (a popular framework for Ruby) and even promised to help me get a job. In the end, it didn't work out, I wasn't hired because they needed a middle or senior level specialist... But I realized, that in ~4 weeks of reading documentation and code practice, I can quickly learn a new language and framework!
With the right level of persistence, of course.
A few years later, a very similar situation occurred with Python (namely, the Django framework). In ~2 weeks of intense study and practice, I learned the basics of the new programming language and was able to solve test cases to get a job.
And two years ago my switch from Python to Golang was even faster! 😀
I was able to quickly switch to the new language only because I already had a clear understanding of the fundamentals.
Tips I'd like to get
- Start understanding the fundamentals of software product creation and architecture, and most importantly, practice.
- No need to think long and hard about "which language to choose?", take any language and learn the fundamentals of the technology you choose (web, mobile applications, automation, IoT, or whatever).
- Write code on a daily basis, and then learning a new language or framework will not be a problem and limitation (into which many want to drive themselves).
- And, of course, believe in yourself! Everything will work out for you.
That's it, friends! 🤗
Photos by
- Thought Catalog https://unsplash.com/photos/o0Qqw21-0NI
- Josh Rinard https://unsplash.com/photos/H9mp1P1VUj4
- Joshua Aragon https://unsplash.com/photos/EaB4Ml7C7fE
P.S.
If you want more articles (like this) on this blog, then post a comment below and subscribe to me. Thanks! 😻
❗️ You can support me on Boosty, both on a permanent and on a one-time basis. All proceeds from this way will go to support my OSS projects and will energize me to create new products and articles for the community.
And of course, you can help me make developers' lives even better! Just connect to one of my projects as a contributor. It's easy!
My main projects that need your help (and stars) 👇
- 🔥 gowebly: A next-generation CLI tool that makes it easy to create amazing web applications with Go on the backend, using htmx, hyperscript or Alpine.js and the most popular CSS frameworks on the frontend.
- ✨ create-go-app: Create a new production-ready project with Go backend, frontend and deploy automation by running one CLI command.
Top comments (2)
Nicely written article emphasizing the importance of fundamentals.
Thanks ☺️ You're welcome!