Which is the best programming language for beginners?

No readers like this yet.
No readers like this yet.
Coders code.

Opensource.com

What is the best language for a budding programmer to get their start with? There are probably as many opinions about which language is best for beginners as there are languages to choose from. And the options change all of the time. When we asked this question two years ago, Python came out on top as the clear winner. But is it still the best choice today?

Obviously we can't list all of the many, many choices available. So pick from the list, or let us know if we missed the one you'd recommend. 

In addition to letting us know which language you'd recommend to an aspiring software developer in your life, let us know why you recommend what you do. Is it because the language has a simple and logical syntax? Are there a large number of resources available to newcomers? Perhaps there's just an especially low barrier to entry of writing your first application? Or perhaps it's because it's language will a lot of practical users?

Whatever your reasoning, let us know in the comments below.


Do you have suggestions for how to start programming? We're looking for articles for an upcoming series, so send your article idea (along with a brief outline) to open@opensource.com. Tell us your tricks for getting started, why your community is most welcoming to new programmers, how to pick a first programming language or open source project to join, share a how-to, walk readers through a handy script you wrote, or round up your favorite online resources for new programmers.

4608 votes tallied
C/C++
17% (766 votes)
Haskell
1% (46 votes)
Java
9% (420 votes)
JavaScript
10% (447 votes)
Python
50% (2291 votes)
Rust
1% (47 votes)
Swift
2% (100 votes)
Other (Let us know in the comments)
11% (491 votes)

Results

Comments

66 Comments

No doubt Python is the best for new users.

I've always wondered if Python is good for starters or not.

I went the whole VB route and when I went to Linux I found VB did not carry over so well.

Meanwhile my PHP & JavaScript moves around the C-based languages so it was easier to migrate.

Is Python it's own silo, and is that significant? I see more and more Python being referenced, but I also remember VB being a popular language (even MS is putting it second to C#).

I respectfully, but strongly disagree. And Python being as popular as it is doesn't make it any more suitable.

I honestly think that the first programming language someone learns should encourage, if not compel to write in a functional programming style.

Not only is a functional program often more readable than an equivalent program in imperative style (for example, compare the Haskell implementation of the Quicksort with the one in Python on rosettacode.org ), the functional style is very suitable for writing concurrent programs.

Yes, Python is accessible and yes, it's everywhere, but I think it only allows you to grow up to a certain point as a developer. It does allow you to write in a functional style, but only up to a point (no enforced immutability, lambda's limited to a single expression), and this isn't general practice, so you're mostly trapped in the imperative paradigm.

Also, I personally think that a strongly typed language is beneficial to beginner programmers, as the compiler will catch more errors at compile time.

Functional, no chance! Python allows a multitude of programming styles, including functional. Rather than cherry picking a particular rosettacode task look at a selection of RC tasks, Python shines!

I admit that Python allows you to write in a functional style, but it's limited. Not being able to enforce immutability or write more complex lambda's, make it unsuitable for this paradigm in practice, I think.

Python follows the cumbersome paradigm of object-oriented programming, which is hard to explain to a beginner. A functional programming language is good for beginners, but professional developers will need to learn imperative langufages like C as well.

Both Java and Python have types, but in Python and Ruby a variable has no type, being a mere pointer, although the value pointed to has a type. This allows Java to have overloaded functions that differ in the types of the arguments and return values.

python is a good start but in my opinion html would be better for beginners, but that is most likely because thats what I was taught.

I'd say golang. Because the language is small and even programs from beginners can be used in production easily.

https://golang.org/

Pascal ;) (no joking). I must admit I thought that was a retarded idea (nobody use it in IT) but it's easier than C, closer from machine than in Python and you don't have to explain concepts like OOP (Java) or functional (Haskell). For a complete beginner this is a good language. Of course after a short while, going to a "true" language is better.
Warning: I speak to learn programming for future IT workers. For programming enthusiast or learning programming in another formation: Python is for me a better choice.

Agree on Pascal. Or Oberon. Or if it really has to be "industry relevant" Go. I would have said Python a few years ago, alas after teaching it to beginners a few times I have to say that the lack of static checking is deadly. Maybe once mypy is really ready?

QBASIC

Agreed. There is no better language to learn programming than one of the old simple basic dialects.
Special so learning the real base of programming. Which other language has a shorter line of saying "Hello World". ex. Print "Hello world"

Go - it's simple, fast and very productive

C and C++ should be separated into different options.

I used to think Pascal, as it was designed for learning. But after spending decades coding in it (from Turbo Pascal, through to recent versions of Delphi) I no longer think so.

Python is good, but I think the semantics and idioms of Ruby are similar, but more forgiving.

Most importantly, the Ruby community is very welcoming and diversity friendly. More so than any other language I've been involved in since the late 80s. Community run events like Rails Girls and Black Girls Code make it very easy for people to get involved.

Dartmouth BASIC. The simple things are best for teaching the rudimentary aspects of a subject.

I recommend Rexx as a great beginner programming language.
It's a "legacy" interpreted language that will pass any command that it does not understand to the host operating system command shell, which makes writing shell/terminal scripts very easy and convenient.
Rexx runs on various flavors of Unix and distros of Linux, DOS/Windows, IBM i (OS/400), and IBM z/OS systems.

I agree with everything you wrote. In addition, Rexx offers very little impedance in learning it.

The syntax is wonderfully simple, and yet the designers picked just the right balance of semantics to give the little language lots of fire power. It can do anything that Python or Perl can do, but is easier to write and read. The result is that a beginner can write reasonably short and easily readable code that can do quite a lot. That combination makes it easy for a beginner to understand an entire program. They can hold a mental model of its functionality in their head. This allows a Rexx beginner to practice writing lots of short programs with little hand holding. This in turn accelerates their ability to stretch their understanding to more complex and longer programs.

There are also open source object oriented versions of Rexx (ex: ooRexx) that allow the beginner to go from the basics of procedural desing to an intermediate level of complexity in their program design and functionality quite naturally.

Another object oriented version (NetRexx) also allows compiling directly to a Java class that runs on the JVM, where they can use the thousands of Java classes and methods, including those for creating GUIs. NetRexx was actually the first non-Java language to run on the JVM.

Long ago, I started programming with Fortran, because that's basically what I was required to use. Later, when PCs came around, I found I could understand BASIC pretty easily since in many ways it was similar to Fortran, and included a number of string operations which Fortran was lacking. Still, there came a time when that wasn't enough, so I learned Perl. Perl is a tightly-structured language, though very powerful. The tight structure can be annoying, but in some ways helps with debugging. Somehow I found the transition to Python not so hard, and in some ways Python seems a little more forgiving. Whatever language one uses, it's highly advisable to use an editor with syntactical highlighting, which means that in many cases you can catch errors as you type. I've fiddled a bit with C and C++, but these take a real commitment to really get into. I find that PHP is structured a lot like Perl, but has a number of handy commands for web pages. Shell scripting is also worth looking at, since you can begin with some single-line commands, then work your way up to an actual shell script.
I didn't vote here because I have a distrust in the outcome, as far as any useful meaning. I think the best approach for some newbie is to sift around from some good references and tutorials. I also think it's time to take "Hello, world" out behind the shed and bury it -- its utility died a long time ago. (there also ought to be a moratorium on foo and bar.)

Agree with "foo", "bar", "foobar", "foobaz", etc. It was always an inside joke, never descriptive and plain nettlesome.

I disagree with you "Hello, world" comment. The issue was never programming, but ensuring one could write a program. After all, if you can't get "Hello, world" working, there isn't much point in proceeding. A null program is just as useful, but not as much fun. (Anyone remember IEFBR14?)

Generally, your comment speaks to tools available which is not without merit. But I find your selection to be based more on the task at hand rather than the more abstract question of programming for its own sake.

For that, I would recommend something interpreted, rather than compiled as immediacy, rather than the development process is favored. Perhaps it's just my upbringing, but I favor imperative over functional as I suspect the beginner will find that paradigm more natural as people as used to reading recipes and instructions, and the nature of programming is to transform abstract tasks to concrete algorithms.

Finally, I favor loosely typed languages for the simple reason that data types aren't necessary to express a program and came into existence to facilitate use of the CPU architecture. It's also important for the programmer to understand, himself, what he is dealing with.

I don't think there is a "best", per se, but PHP and Javascript seem to suit the requirements.

Finally, and this gets religious, a programming language is PRIMARILY a means of communication between programmers (most often, one's self), not to the machine. If one can't read and reason about the code, it can't be validated. If one thinks otherwise, the choice is assembler language or machine code.

You may be somewhat correct about Hello, world, but realistically there are many things it could be other than that and still serve the same purpose.
In some ways, I think the best introduction to programming would be no standard programming language at all. For example, standing at the side of the room, what are the instructions you would give your legs sequentially to get to the other side of the room? (assuming no obstacles) What you get from that is a perspective on breaking down some task into a sequence of steps, or orders, or lines of code. Once you make your list of instructions, you hand them to someone else, with the suggestion to follow them as literally as possible, and see what "bugs" occur. This is really the heart of programming.

Script BASIC is a traditional embeddable scripting engine written in ANSI C with an object based API. Personal computing was born with BASIC as its language. The is no reason to make learning programming more difficult than it needs to be.

In my opinion, any general purpose language at the top 50 in TIOBE index or similar.
I believe It basically depends on 2 factors: objectives and instructions source.
I've seen professionals hate some language and others love the same and in a deeper talk I notice it is common that there is great influence of perception at the time of learning regarding one's objectives, professional or academic, and the quality of the source.
So I believe that the result of a question like the proposed is more like a popularity contest in this particular community as I wouldn't expect that a hater of language xyz would think clearly and actually select that one based on some scientific criteria.
Maybe would be better to ask something more specific like "which is the best language for beginners to start working ASAP in country X"

Pascal makes a reasonably good language for beginners. If you decide to become a professional programmer, you will learn the language your new employer favours.

Pascal is indeed an option, one which ranks good and depending on the country/region there is plenty of solutions running it. I have myself started with it.
I completely agree with the fact that you will learn the language your employer prefers, but that wouldn't go against the approach that you are the master of your destiny, so to have an employer, you must have past some recruiting process first
So if you accept that it is a somewhat fragmented ecosystem of communities and invest a bit of time looking beyond the technical aspects of the languages, you might make the journey much more enjoyable and efficient.

No doubt python is the best and no surprise it's winning the pole. A readable syntax, lack of overhead, easy to get started and use what you learn in mediately. Plus it's got great libraries and you can use it your whole career.

It's also so easy to get started with hundreds of free online resources and ebooks like http://www.brainstemschool.com and http://code.org to name a few.

Golang

x86_64 Assembler. Surprised that it's not in the list.

I'd probably go with Python if for no other reason than it seems to be more or less the default learning language these days. This means that there are a lot of resources (including MOOCs at various levels) that introduce programming using Python.

I think JavaScript is much more simpler for beginners ....

I think JavaScript is much more simpler for beginners ....

Prefer javascript, I wouldn't go for python, I hate snakes.

Go because it is fast, low-level, cross platform, supports concurrency by design and is open source (but pushed by Google). Its a good, readable first language. Garbage collection and package management will only get better.

I think its Pascal, its a old language but easy to learn and close to english natural language.

LOGO is a good language to learn programming. Very easy to draw fractals.

I know I am probably in the minority bringing up Pascal, but as a teaching language it teaches things like structure and planning ahead that many programmers are missing. When you move on to other languages these are good concepts to have already mastered so matter which language you end up developing in it is best to have some basic concepts already well understood like planning ahead, and neither Basic or Phython cares about things like planning since you can just instantly declare a variable then use it. Bad Form in my opinion !@

Ada (www.adaic.org & libre.adacore.com & en.wikibooks.org/wiki/Ada_Programming) -- An excellent readable, scalable, general purpose/systems programming language. Has a mature open source GCC based toolset with formal methods support. Easy for beginners to learn incrementally. If you liked Pascal or Modula-2, this is better.

JavaScript. It isn't the easiest language to learn, but it has a ton of utility. Basically, atwoods law ended up being true, so if your learners know only one language, JS will enable them to write web pages, desktop apps, mobile apps, command line utilities, and even write Google apps scripts.

C programming is best for beginners.

What about processing? It's connection to the arduino language is what led me to it. I've managed to accomplish quite a bit while teaching myself when other languages such as C and even python, stymied me. Prrocessing offered a threshold of simplicity that made the difference for me and seems to me ideal for beginners to start with.

a beginner language should be conceptually and syntactically simple at the start.

elsewhere someone suggested assembly. it fits, because with only learning a few concepts you can start building something.

rosatta code has examples: http://rosettacode.org/wiki/Hello_world/Text

any language here that requires more than a few keywords to be learned fails the test.

in assembly a few simple concepts are needed to be learned: define data, execute instructions, interrupts.

it's not the shortest code, but on the other hand there are not that many more concepts left to learn.

compare java, where you get exposed to class definition, and function definition before you can even start doing anything. and class is a monster of a thing that beginners should not have to be exposed to on their first day of learning. (i have been programming for years before i understood object oriented programming)

a beginner language should also be relatively consistent as that also reduces the need to learn.

after that, i think it is good if a language is applicable to a wide range of problems.

python fits all three requirements quite well.

so does smalltalk, and lisp. those two have the advantage of an extremly simple syntax.

python wins over them only because it enforces indenting, which is something i believe is a must for a beginner to get used to.

javascript is not bad, but the syntax could be simpler. and despite what everyone says about it, i think most difficulties come from javascript doing some things differently than other languages. (prototypical OO, scoping issues, both of which won't bother a beginner much)

greetings, eMBee.

For someone learning their first language, I'd say it would have to be VBA. If your looking for something that's going to be useful in the future, like embedded programming, go for C.

Scratch

C and CPP have been the most significant programming languages since a long time....C being much near to the machine language explains the concepts of computer science more properly..CPP is much similar to c and provides the facility of OOP. Thus a package of C and CPP is indeed the best option available to a budding programmer.

For the Basic programmers using Linux try Gambas. It is fast has its own integrated IDE. You can create applications with little effort. There is a 'Farm' of software written by the community. LCD clock in 3 lines of code and a video player in 6 lines.

I'd say Ada or Gambas3. Ada has the advantage of being very strongly typed, easy to read, and most distributions has a gcc reference implementation which produces code which run at c-like speed. Gambas3... well, it's Basic and therefore very teachable.

I like Python but I think there are serious hindrances to its format as learning language. One of them is a lack of an end statement for structured programming.

Ruby

First, I want to start by saying that I think the answer to this depends on exactly who you are talking about. It depends on their age, their background, and if they have a particular task in mind or want to gain general skills and are learning the first of what will be many languages. For kids, I like Scratch as a starter.

Someone older should probably be started in a text-based language instead of something drag and drop like Scratch. I think that I'm pretty good with Python for the High School crowd, though I also like the Greenfoot environment even if I wish it wasn't tied to Java. The thing about Python is that I don't want them spending too long in it. I want programmers to understand types and type systems. I'd like a language that has block scope. I also think that trying to describe to students why 2 && "hi" is "hi" while 2 || "hi" is 2 early on would be silly. Basically, I think that scripting languages have a tendency to breed bad habits, and I don't want students to spend too much time in them.

I teach at the college level, and for this level I have a very different answer. We only get students for 4 years and a fairly limited number of hours, and the field of CS is large and keeps growing. For that reason, I want a language that is effective for teaching the concepts that I want to teach early, without skipping things because the language doesn't do a good job with them. For me, this means Scala. I know that a lot of people view Scala as a complex language, but after using it for the last 7 years in CS1 and CS2, I feel quite the opposite. Instead of trying to give all the reasons, I'll simply post some links to blog posts I wrote a while back.

http://dynamicsofprogramming.blogspot.com/2013/11/why-scala-for-cs1-and-cs2.html
http://dynamicsofprogramming.blogspot.com/2013/11/benefits-of-scala-in-cs1.html
http://dynamicsofprogramming.blogspot.com/2013/12/more-benefits-of-scala-in-cs1.html

Note that if you try to cover all of the Scala language, it could be a problem, but that is true for any language. In this regard, I'm rather pleased that the Dotty project is aimed at simplifying Scala further. I hope it can remove the few rough edges that exist in the language and make it better for introductory CS.

Speaking of Scratch, my daughter wanted to understand what I do for living so I showed her the sequence of Disney's Frozen themed exercises on code.org and it was a good experience (she was 5).
Then I used Kojo to teach her some Scala also. I don't her breeding the bad habits you mentioned ;)

Ruby could be learned over the weekend.