Which computer programming language should I learn? What is trending?
This I often get from the freshers. Usually from engineering graduates who want to get into tech industry.
Their real question is how to get a job quickly by learning a language which is in demand. Many of these guys rush to learn a language in few days. Then rush to interviews.
When they fail in interviews, they are advised to practice more.
They go to interviews again and again but somehow fail. Then they practice more but still fail. They get frustrated and curse their bad luck.
It is the same interview failure pattern for many
When I got into programming decades back, I made this one mistake. I could not get through interviews. I did not realize it for years. No one told to watch this out.
After many years, I know it better.
If I have to get into new learning new programming language, I know how to approach it now.
First look at what is the scope of a programming language
Most ‘basic books’ cover the following:
- Main Syntax : How program starts, essential syntax
- Control Structure : if-else, while , for etc.
- Data types
- Functions and basic examples
Then they also have ‘advanced’ topics. They add concepts like data structures under advanced concepts. Most candidates I know consider it as too advanced and do not practice enough.
Equipped with this, they face the interview. Then comes the rejection.
Then candidates realize they don’t have enough knowledge and learn more. Still continue to fail in interviews.
Here is the problem
Think about the interviewing panel. They usually have many years of the domain/organization knowledge. The panel is usually from the project team. They are desperate to hire.
But what hiring team considers basic and what candidates consider basic could seriously be out of sync.
Programming languages and their suitability to specific domains
C is the preferred language in embedded system development. It is also the language in kernel and device driver development. everyone knows this. But they do not think further and check what it means to them.
Moving on to C++ – When there is large scale scale system development, the organizations prefer C++ in stead of C.
Python is preferred language in AI, Dev Ops and test automation. It has less programming headache and you can directly get into your problem domain and solve it. This has lot less time to learn and apply. But would you use it for programming a low end sensor project? May be not.
Now consider implementing AI inside embedded project. Some of the cases require AI to be implemented in C++.
Understand why a language is more suitable for a particular application
In embedded systems, there is no external programmer who will come and re-program the software. The biggest challenge is to have maximum control over the system resources like memory, peripherals etc.
In contrast, consider the .Net or java application. You do not have much features to control memory. Because the main reason you would use such language is for the libraries it provides to do higher level applications like web services, UI application etc. The primary challenge is not about running out of memory.
Hence, the vendors of the tools like compilers, libraries associated with it are primarily to support the needs of the specific domains. You will find memory manager library for C++, may not be for R language which is for data science visualization. Also on top of C#.Net, you will not find display driver. It is usually available at C++, which C#.Net or Java would use inside.
Python also has specializations. After the basic programming, they take you to totally different domains.
Hence, all programming languages should be seen in the context of respective application domains and industries.
This impacts the skill demand for languages big time
When you hear that there is lot of demand for .Net, please understand that Microsoft’s business is going up. Hence the reverse also is true. If Microsoft starts making news for better business, you can safely assume that the demand for their technologies will go up.
If there are lot of new consumer devices, IoT devices getting released, there should be good demand for embedded systems development. That means, there will be demand for C language skills.
This is a broad way to gauge the skill demand.
Now getting into interviews…
How would the application domain influence the programming language interview? You do not have experience and the domain should not matter?
Biggest impact is that there is no formal boundary for the programming language interview and the domain-specific questions in programming.
The interviewers who probably are experts in domain specific application of the language, will ask about what brings results. It could include both so-called basic and advanced questions.
During C language interview, the micro-controllers or the device driver architecture would be in the back of the mind of the interviewer.
If there is python interview, it is equally interesting.
These days (2018), agile development push has increased the need for Dev Ops. Python, which is quite old language turned out to be a very good fit for the programming needs. Hence many libraries emerged in python related to Dev Ops.
At the same time, data science as a specialization also became important.
Thirdly the test automation.
For the delight of python developers, all three application domains are critical for all kinds of industries. Hence the demand is shooting up.
Python developers are hard to find. I get too many python resumes. I reject the most. Main reason is the same – not enough skilled.
They do not know how the language is being used. They do not know that the code they write should solve real life problems in one of the domains. Without this big picture, they can not gauge what is basic and what is advanced in a given language skill.
Here is that secret. Programming language is mainly about which domains it is applied.
If you do not know how the language is used to solve some real life problem, you can never be confident. Even when you do not have experience in the language, if you have an idea of real world applications are made using the language, then you will be confident.
Here is what you should do.
- Pick a domain of interest. The domain where you want to make long term career.
- The pick the language, most suited for the application domain
- Then pick a book that teaches the basics
Giving some recommendations for few languages.
- C Basics: C in Depth and also book on applying it to embedded systems. Also look at this embdded ARM board.
- Python : Python Book
- C# Book by Wrox
If you are slow with books, these days there are good online courses for the most.
Then learn about the domain you have picked. For example within python, do one of the (not all of them) online courses
Likewise if you are into mobile applications, the logical step after java is android development. or iOS development
Practice the language in the context of that application domain. Nothing will help if there is no practice and the insights that come out of mastery.
Take one of the paths above and get started without delay. And stay on course without self doubt.
In case you are looking to buy a developer laptop, check the factors to look for in developer laptop. It also has the recommendations.
I had offered to a python candidate for Dev Ops. He did a no show on joining day. Then I looked for Dev Ops people with some other language skills. Even that did not work. Then I looked at the adjacent domains (as in the picture above on python skills). I looked for test automation space. Found ‘perl scripting’ candidates with test automation. Though I did not have hands-on background in both the languages, I could decide that perl guy could fit for python needs. It worked out.
Knowing the language and its relation with domains of application is very useful.