How to Pick a Programming Language

in #development5 years ago

I have noticed that when people decide to get into programming, they get stuck at certain points along the way. Sometimes it's because they approach a programming language as if it's a natural language. This can work, but it's not my approach.

Source: Most Popular Programming Languages of 2015

What are the problems you're trying to solve?

Think about that for a little bit. It's important. But if you can't think of anything, don't worry. Just remember to keep that question in mind.

Programming languages are different from natural languages for this reason. They are for solving problems.

Natural languages solve problems too, but the root problem to solve is human communication of ideas. This is not the kind of problem we have to solve with computers. If a programming language is Turing Complete, it solves communication, in a sense (not with humans). But that's too general.

I'm talking about actual problems, not general ones. For example, let's say you want to read a text file and look for keywords. Certain languages make this extremely simple. In fact, that problem is so common, you usually don't need to even write a program.

What is your deployment strategy?

This may sound too technical, but it will become important down the line. We're working backwards to inform us as to which programming language you'll want to learn.

Basically, where do you plan on running your program? Is it something only for yourself? Do you want to roll it out for others to use? If they use it, do they have to install your development tools or can they run a "customer facing" version?

So, assuming you know what the problem is you're trying to solve, how do you want to package up and roll out your solution?

This step might be more of a method of excluding programming languages from your list.

How much support is there?

It's not enough to just learn a programming language syntax. The language must also have useful support packages (libraries). If you want to read a special file format, does the language you've chosen have the ability to read it? Or can you import the appropriate support packages?

Also, are there forums to get your questions answered when you run into problems? This is another key to picking a programming language. It's no good if the language itself is superior but nobody knows how to help you when you encounter problems.

Bringing it all together.

Let's imagine that the problem you want to solve is: How often do my chickens lay eggs?

You have also decided that the deployment is for yourself only. This means you probably want to learn a language that is supported by sensor packages like Arduino. That's likely python.

More important, we've excluded other languages like perl or ruby because support for Arduino is limited in those languages (though supported, you won't find quite as much help if you have any questions).

Recommended Reading


Nice man, Good stuff, I would be curious to hear why you seem to like ruby so much and you are very good with it, but what inspired you to learn ruby specifically?

I got started with rails in 2004 and went from there. Prior to that, I mostly did perl, java, and PHP.

So I learned rails, but at the time I was doing Java/JSP projects. But eventually, I got on some projects that were entirely rails. Now, most of my customers don't care what the technology is as long as it does what they want.

After that, it just made sense to keep learning the underlying language, ruby.

Yea thats absolutely true, the classic "dont tell me about your stack, show me the app." chuckles Well good stuff man. :) As always keep it up.

I once started learning Swift language (for iOS development) but gave up after some time since there was SO much to learn and it was something I didn't pick up easily.

I had a similar experience...several times. It is also frustrating that it moves so fast. Before you can even get your head wrapped around anything they are talking about the next version of the language. Of course, there is also the matter of all the legacy ObjectiveC code and a bunch of other considerations.