5 Programming Languages You’ll Need Next Year (and Beyond)

shutterstock_179081537

We’ve reached a bit of a turning point in the world of programming. Ten years ago, programmers were moving into dynamic languages. To many of us, those languages seemed like a bit of a fad, even if they made programming easier. But those languages endured, and today we’re developing software with a combination of old and new tools. That creates the potential for confusion: What languages are best to learn if you want to stay employed?

Before diving into which programming languages will likely prove most popular over the next year or two, let’s look at what makes them so different from one another.

Static vs. Dynamic Languages

When referring to dynamic languages, the term “dynamic” really refers to the variable types in the language. When you write code and declare a variable, dynamic languages let you change the type of data held by the variable when the program is running; those languages that don’t are known as “static” or “strongly typed.” Languages such as C++ and Java are strongly-typed languages, while JavaScript, PHP, and Perl are dynamic languages.

When you declare a variable in C++, you provide the type of data it will hold (such as integer, float, or string). If you try to store a different type in that variable, the compiler will issue an error and won’t compile the program. The same happens with Java.

But JavaScript, for example, allows you to change types anytime you want, while the program is running. In fact, with JavaScript, you don’t even specify a type when you declare a variable: After you declare the variable, you can store an integer in it, and then later a string, which will replace the existing integer.

Although there was a lot of excitement in recent years over dynamic languages, the concept is roughly fifty years old.

Functional Languages

With the excitement over dynamic languages came an increased interest in functional languages. A functional language is one whereby the functions themselves can be stored in variables and passed around as parameters to other languages. Most languages today support some level of functional programming. C++, for example, has always let you pass around pointers to functions. However, other languages such as JavaScript make it much easier to handle functions as objects. As such, people don’t really consider C++ a functional programming language, whereas JavaScript usually is considered one, and Haskell is usually considered the best example of a functional language.

Garbage Collection

In theory, if you write your code correctly, you should never have any bugs. How does that sound for a nice statement? But when you’re working on a huge project with multiple programmers, there’s one bug that seems to creep up a lot: Memory leaks. A memory leak happens when you allocate a variable, finish using the variable, but forget to free up the memory associated with the variable. If a program does this a lot and the program runs for hours, days, weeks, or more, the amount of memory the program uses will continue to grow, until the system crashes. I think most people would agree that that’s bad.

The thing is, in theory, such a thing should never happen: When you’re done with the variable, free the memory. Easy enough, right? Yet people continue to break that rule, partly because it’s not always that easy. When you store data in a list, and that list gets passed to a function written by somebody else, and some members of the list get copied over into another list, and the original caller doesn’t know that that happened, should the original caller delete the memory or not? It’s not always clear-cut. So language developers have come up with an alternative: Just stop using the variable when you’re done, and the system will notice that the memory is no longer used and clean it up for you. That’s called garbage collection, and it’s an important feature in a lot of newer programming languages. And the idea is sound: If it makes your job as a programmer easier, then you can focus your energy elsewhere in the pursuit of creating great software.

Now I should clarify that there are actually a couple different types of garbage collection: one where the system periodically scans through memory, looking for memory no longer in use; and one where the system keeps tabs on each variable, and as soon as the variable is no longer needed, the memory is deleted. Technically the latter isn’t garbage collection; rather, it’s considered “reference counting,” but the end result is similar in that the variables are cleaned up automatically.

Virtual Machine

When Java came along in the mid-1990s, people griped that it wasn’t immediately compiled to assembly language in the same way as C++. Instead, the Java code is compiled down to something called bytecode. Then at runtime, a system called a virtual machine executes the bytecode, sometimes only then compiling it to assembly code. People complained because when it first came out, it was kind of slow—but that isn’t the case anymore. Many languages run with a virtual machine, including Java and C#. Today, these languages pass benchmarks that keep them speedy.

The Languages

So what languages should you be learning? We’ve picked five important languages for the next year, ones that will likely see a lot of demand on the jobs front, and included some coding examples. Most of these aren’t new languages either. In addition, we’ve added a sixth language as an “honorable mention.”

JavaScript, HTML5, and CSS3: Technically, HTML5 isn’t a language. But it is a technology that, along with CSS3 and JavaScript, allows you to build Web-based software applications. And don’t be mistaken: You can create real software applications that run in the Web browser. The great thing is that, when you do so, your apps can run across devices, including mobile ones. A couple years ago, companies such as Facebook took the jump to creating their mobile apps in HTML5. Unfortunately, they were a bit ahead of their time. The technology wasn’t quite ready, and they went back to writing their apps in native code. But in the past two years, browsers have finally started implementing the best HTML5 technologies. The number of jobs listing JavaScript alone is growing. If you want to secure your future in computer programming, this is a technology you must learn. (Also, as a side note, a lot of big companies are using server-side JavaScript as well in the form of Node.js.)

JavaScript Example
This example demonstrates how you can pass a function as a parameter into another function. I’m creating a function, saving it in a variable, and passing that variable into the setTimeout function. There are many resources on JavaScript; for a nice definitive guide, check out the Mozilla Developer Network. For a nice tutorial, take a look at this website.

var myfunc = function() {

alert(‘hi’);

};
setTimeout(myfunc, 2000);

C#: Microsoft created C# about 15 years ago as a new kind of programming language similar to Java; since then, the platform has grown several times over. The language’s syntax looks a lot like Java (which, in turn, bears similarity to C++). The flagship tool for programming in C# is Visual Studio; while there are premium versions of Visual Studio, there are also several free Express versions.

C# is a strongly-typed language, which runs inside a virtual machine. The original version had little support for functional programming, but Microsoft changed that around 2006 when it added several functional programming features. The virtual machine framing C# includes garbage collection.

C# Example
This example is a class called Program that includes a class function called Main. The runtime calls Main when the program begins. The code creates a strongly-typed variable called x of type integer, and prints out its value. To learn more C#, head over to Microsoft’s official site.

using System;
class Program
{

static void Main()

{

int x = 1000;
Console.WriteLine(x);

}
}

Java: Java is approaching its twentieth birthday, and it has continued to grow and mature. In 2004, a coworker of mine referred to it as a “toy language.” While it might have had some growing pains early on, it is certainly not a toy language: it powers large websites and databases, and the Open Office software suite is written in Java. The language is solid, and the future continues to look bright for it.

Java is strongly-typed language, and runs inside a virtual machine that includes garbage collection. It includes functional features, although isn’t a functional language.

Java Example
Java and C# are similar in many ways. Here we’re creating a class that includes a main that gets called when the program starts. Like the C# example, we’re creating a strongly-typed variable of type integer, and printing out its contents. To learn about Java, start at the official documentation.

public class HelloWorld
{

public static void main(String[] args) {

int x = 1000;|
System.out.println(x);

}

}

PHP: PHP is a general-purpose language that is easy to use. The language’s syntax bears some resemblance to Java and C++. On a very simple level, it’s used inside a Web page to embed text that might change. For example, you can have a Web page that includes some PHP code that prints out the current date; the final Web page sent down to the browser will have the date showing the PHP code’s original placement. But PHP is much more than just for printing text on a Web page. It includes a massive library for doing everything from reading and storing data in databases (pretty much any database you can think of), to performing scientific calculations, to processing text. The future remains bright for PHP, as jobs continue to abound.

PHP is a dynamic language and runs inside a virtual machine. (However, thanks to a project spearheaded by Facebook, there are also compilers that convert the PHP code to C++ code, which is then compiled.) Since 2009, PHP has included functional programming support.

PHP Example
This PHP code is embedded inside an HTML document. The PHP code sets the current time zone to Los Angeles, and then prints out the current time. The PHP code itself gets replaced by the output from the PHP code. Thus the final web page will say, “Hello! The current time is” followed by the current time. You can start learning PHP at this website.

<html>
<body>
Hello! The current time is
<?php

date_default_timezone_set(‘America/Los_Angeles’);
echo (strftime(‘%c’));

?>
</body>
</html>

Swift: And now for a brand new language: Swift, from Apple. Normally I wouldn’t pick a brand-new language and suggest people start learning it. But this is Apple we’re talking about, and you can already use this new language to create iOS apps. In fact, there are indications that this is going to be the future of programming for iOS. (Be careful, though; there’s another programming language called Swift that is completely separate.) The syntax looks a lot like JavaScript, but without all the semicolons and parentheses in JavaScript.

Swift is a strongly-typed language, that operates inside a runtime with garbage collection.

Swift Example
This code creates a variable called str that holds a string. Although I’m not providing a type for the variable, the language is strongly typed, and the compiler figures out that I’m storing a string; it does so by looking at the right-side of the equal sign. As such, it assigns a string type to my variable. Then the next line prints out the contents of the string. Learn more about Swift at Apple’s website.

var str = “Hello, World!”
println (str)

Honorable Mention:

Erlang: Erlang is an older language that was invented in 1986 by engineers at Erricson. It was originally intended to be used specifically for telecommunications needs, but has since evolved into a general-purpose language, and found a home in cloud-based, high-performance computing when concurrency is needed. People are using it to write some really powerful software, such as CouchDB and Riak. The language is a bit unusual in that it doesn’t really look like any other language, and it has some strange ways of handling strings, but it’s pretty easy to learn.

Should you learn Erlang? The reason I bring it up here is because it’s in a bit of a unique situation. There aren’t a lot of Erlang jobs out there. However, if you do master it (and I mean master it, not just learn a bit about it), then you’ll probably land a really good job. That’s the trade-off: You’ll have to devote a lot of energy into it. But if you do, the payoffs could be high.

Erlang Example
For an example in Erlang, I’m going to borrow an existing one. This example comes from this blog that explains a complex “hello world” example. Remember, Erlang is a sophisticated language. If you’re bold and want to go forth with it, check out the aforementioned blog as well as this site.

-module(hello).
-export([start/0]).
start() ->

spawn(fun() -> loop() end).

loop() ->

receive

hello ->
io:format(“Hello, World!~n”),
loop();

goodbye ->
ok

Conclusion

Programming positions will continue to grow. There won’t be any shortage of jobs anytime soon. The key is learning the right technology to land you that great job. You can’t go wrong with JavaScript, C#, Java, PHP (and even C++, which I didn’t include on the list). If you want to start learning Swift, you’ll probably see jobs growing in the coming years. And if you really want to get into some high-powered programming, take a look at Erlang, although you probably won’t land an Erlang job immediately. Regardless of which technology you go with, keep studying, keep learning, and master it.

(Editor’s Note: A follow-up to this article, breaking down Objective-C and Python, is now available.)

Additional author’s note

Thanks, everybody, for the thoughtful comments, and I want to address the issue of typing. You’re correct, of course, regarding static typing not being the same thing as strong typing. So to clarify (and feel free to add to the discussion below any further clarifications): In the article above, any time I described a language as “strongly typed,” I really should have said that it has “static typing”, and I should not have said they’re the same ething. And further, I think two of your comments in particular sum up the distinction quite well:

Blingo said: “Basically dynamic language don’t do type checking at compile time; it’s nothing to do with whether the type is changed or not at runtime. The statement seems to be describing casting and even C++ will let you change the type at run time using dynamic_cast and this language is regarded as static.”

And Matthew said: “Dynamic typing implies that a variable may contain data of any type: but strongly typed is not the same as static typed. Strongly typed language systems will prevent automatic casting to other types, which is seen in, for example JavaScript.”

Upload Your ResumeEmployers want candidates like you. Upload your resume. Show them you’re awesome.

Related Articles

Image: jdwfoto/Shutterstock.com

Comments

  1. BY Cicuta says:

    Excellent article! It would be nice that all articles are as good as this one and not garbage, I guess that they forget to clear the variable.

    How about writing a book regarding this topic and have it pdf for download.

  2. BY Wendell Anderson says:

    I have been informed – directly – by senior technologists at Google that a Tier one programming language for the company is Python. Google actually employs Guido van Rossum, the creator of Python.

    This sentiment has also been expressed publicly by Senior Technology managers at several other of the “largest and dominant” technology companies in USA, and was even mentioned in surveys and reports by Market Research firms.

    Dice should therefore clarify the results of this listing with published reports to the contrary.

    • BY Kelly Jones says:

      FYI. Guido van Rossum left Google about 1.5 years ago to work at Dropbox.

    • BY mad.madrasi says:

      Thought van Rossum went over to Dropbox last year. But you are right, I am surprised Python isn’t mentioned.

      • BY Peter Hanley says:

        Given where the article is published, the list makes more sense – Dice seems pretty focused on enterprise computing, where oracle and microsoft are a much bigger deal than in startup/hacker circles.

    • BY FlipperPA says:

      Agreed: leaving Python off the list seems like a big miss of the article. Python, just two weeks ago, surpassed Java as the #1 educational language in the world (most taught). It’s flexibility in everything from statistics to research to web programmed is without parallel.

    • BY Jeff Parker says:

      I agree. I see Python jobs all the time. As a matter of fact I am contacted almost on a daily basis about jobs that at least require a bit of Python, and when I interviewed for Google, Rackspace, and Riverbed a while back, all wanted Python (usually in addition to others) so it is very big and growing.

  3. BY DR says:

    Pretty useless pablum. C#, Java? Of course. You won’t go far in the business if you’re not at least basically proficient in one or both of these. JavaScript? Same thing. But PHP is on the way out, Erlang is a difficult language that is being eclipsed by Go and Scala in the same space. Erlang has its niche, but it’s never going to be the one language you need to use unless you work for someone who is a fan.

    So: Where’s Go? Where’s Scala? Those are certainly more likely to land you a job in the next few years than Erlang is.

    • BY Barry Jones says:

      While I appreciate the idea that people have the PHP is “on the way out” it’s not going anywhere.

      The reason isn’t arbitrary language preference either, it’s cost. PHP scales DOWN better than any other language out there. You can fill up a TB hard drive on a server with 1 GB of RAM and all of the PHP code will still work. That’s why PHP hosting is so dirt cheap. That’s why it’s optimal for blogging platforms, internal company tools, and other web apps that will be low traffic.

      Java, C#, Ruby, Python, Go…all of those languages have to boot up. They preload code, libraries, get their database connections and sit in RAM waiting to process only the request. This is GREAT for framework/object oriented code where you don’t want to reprocess those dependencies on every request but it also means that those languages can’t scale down at all.

      Consequently, this is one of the reasons that PHP is bad at frameworks and it’s the reason so many frameworks have existed in the language for years. Recent updates to the language have allowed much better package management thanks to namespaces as well as the ability to lazy load code only if it’s requested, which will mean major improvements to the framework landscape of PHP in the coming years.

      The slow benchmarks you see for PHP are around frameworks. Raw php is incredibly fast and you need only check out the Techempower benchmarks to see what I mean. It’s Java, Go and PHP at the top. I know, shocker. Early returns on PHP 5.7 are close to a 100% performance improvement over 5.6 too.

      I’m not going to tell you it’s the best way to do everything, because it’s not. But there are things that it does extremely well. Each request is completely encapsulated, so a bad request can’t crash a server and you don’t get memory leaks because when a request ends it all gets torn down. The flip side is that there isn’t a garbage collector that’s tuned for long running processes, which means that PHP tends to be really bad at those. For web requests though, it’s incredibly stable.

      While the whole “on the way out” narrative is a nice idea. Inexpensive hosting, scale up / down capabilities, built in stability, plus raw speed and dramatic language improvements are going to mean that PHP is going to be around for a very, very long time.

      • BY Barry Jones says:

        Java, Go, PHP was overstated. On one of the benchmarks that was the case, but there are several other languages above raw PHP in the others. It does still perform admirably and much faster than people give it credit for but I wanted to clarify that since there isn’t an edit button.

      • BY Peter says:

        Excellent comments on PHP which I am still learning . So nice to learn the how and why a tool should be used rather than simple fan boy assertions. I use PVXPlus a lot because it is multi platform and has millions of users, and does all of the above. Like erlang, It is so obscure I will be surprised if any reader has heard of it. I dropped dot Net right after beta in favor of it. A supportive community and quick free support has great value when dealing with constrained resources. As IT professionals we should stay objective. The best tools frequently do lose the popularity contests as too nerdy, party because no one objectively comments on what makes them great, not to mention the inability to compete with insane marketing budgets.

    • BY Brian says:

      PHP is on its way out? Hilarious daydreaming which can only be based on personal preference/anecdotes and not actual data.

      http://trends.builtwith.com/framework

    • BY Rasmus Schultz says:

      “PHP is on the way out”, ha ha ha, sadly, no – PHP will be around for a long, long time, like it or not.

      JavaScript, in my opinion, is more likely on the way out as a language, and at the same time is about to get a new lease of life as the world’s most available VM and host for other languages, such as Go and Dart, along with HTML5 as the world’s most available platform.

      I agree that Go has a shot, but they need to do something about collection management – the language is too focused on computational performance, and needs more features and high-level constructs (I say again, collection management) to increase developer performance.

      As for Scala – if it had been going to take off big-time, it would have. I think it’s simply too complex, as a language, to achieve mainstream popularity – too many language constructs, too many high-level concepts, sorta the opposite problem of Go. Don’t get me wrong, it’s a wonderful amazing language for language nerds – but for Joe Programmer it’s just going to be too much of a learning curve.

  4. BY J-F Bilodeau says:

    Couple of pointers:
    C++11 allows for lambda functions and expression, moving it closer to functional programming (but still not a true functional language)
    OpenOffice (and LibreOffice) are written (mostly) in C++ and not Java. There are plenty of other applications that are written in 100% Java. Joeffice might be a better example.

    J-F

  5. BY germ says:

    What, no mention of Python? Please…

    • BY John says:

      Totally agree, in terms of web development Python/Django as well as Groovy are making some big strides. Also, semi-shocked that a modern systems programming language isn’t on the list.

  6. BY Mark says:

    > Swift is a strongly-typed language, that operates inside a runtime with garbage collection.

    No. Not garbage collected. It uses ARC in the same way the most recent Objective-C releases do.

  7. BY Gareth says:

    Could you publish the source of data you’re basing the list of languages on?

  8. BY AngelBane says:

    Arggggh … GC is for lazy people and promotes poor programming habits. PEROID.

    Any language that uses it is unnecessarily slow.

    • BY FlipperPA says:

      Not checking your spelling leads to programming issues as well, I’ve heard. :)

  9. BY critic says:

    Slow news day at dice !

  10. BY Divyesh says:

    Don’t forget to mention R which is gaining traction in Analytics. R programmers are in demand.

  11. BY Doc says:

    “SIMPLE

    SIMPLE is an acronym for Sheer Idiot’s Monopurpose Programming Linguistic Environment. This language, developed at the Hanover College for Technical Misfits, was designed to make it impossible to write code with errors in it. The statements are, therefore confined to BEGIN, END, and STOP. No matter how you arrange the statements, you can’t make a syntax error. Programs written in SIMPLE do nothing useful. Thus they achieve the results of programs written in other languages without the tedious, frustrating process of testing and debugging.”

    • BY Mike says:

      LOL.

      Is SIMPLE a compiled language, or interpreted? If it’s compiled, won’t the compiler complain if “STOP” is the first command in the program? It (the compiler) should declare any code after the stop to be unreachable.

  12. BY Kurt says:

    Jeff Cogswell:

    Replace PHP with Python – very little new development is done with PHP.

    • BY Aaron Scherer says:

      Where do you get your information? I’ve seen more developments in the last 2 years with PHP, than I’ve seen in the last decade with Python.

  13. BY Bill says:

    When talking about C# there was no mention of Mono, the Open Source equivalent.
    http://en.wikipedia.org/wiki/Mono_(software)

  14. BY iMitwe says:

    No python ?

    Come on. You’re kiding right ?

  15. BY quamrana says:

    Programming languages can be dynamically or statically typed, but they can also be strongly or weakly typed. The former does not influence the latter. Languages like Smalltalk, javascript and python are dynamically typed and Java, C++ and C# are statically typed. I think that all of those languages are strongly typed.

    • BY IRNÉ says:

      You’re correct! Actually most (if not all) dynamic languages also NEED to be strongly typed. Some static typed languages can be weakly typed, e.g. pointers in C need not “know” what type they’re pointing to. Usually a static language may use weak typing in order to optimize runtime speed, but it becomes nearly impossible to have a dynamic language without knowing what type is stored inside the variable at any specific instant – i.e. it has to also be strong.

      IMO you get 2 other distinctions in typing which is more useful to distinguish dynamic: inferred and explicit are usually static also. In these you can see that languages like F# / Haskell are inferred and also static, while C# / Java are explicit and static.

  16. BY Mark Lawrence says:

    You are plain wrong about the difference between statically and dynamically typed and strongly versus weakly typed. For example C(++) is statically and weakly typed whereas Python is dynamically and strongly typed.

  17. BY M Sheik Uduman Ali says:

    Very biased and half cooked opinion. Strongly typed or dynamic are matters but not as a tenant for new learning. C# has been projected as simple OO language. Missed out few promising languages like Julia, Scala, and Go.

  18. BY name says:

    “static” and “strong” in this context are not the same

    btw, required fields are NOT marked

  19. BY Toni Nikkanen says:

    A great article and mostly something I would agree with, too. Could you consider adding a mention that you’re talking about jobs in the *APP* creation sector of the software industry, though? There’s of course also the device creation sector, which is probably about just as large, and still largely dominated by the venerable C/C++ family of languages.

  20. BY Blingo says:

    I don’t think “dynamic languages let you change the type of data held by the variable when the program is running” is an accurate statement. Basically dynamic language don’t do type checking at compile time; it’s nothing to do with whether the type is changed or not at runtime. The statement seems to be describing casting and even C++ will let you change the type at run time using dynamic_cast and this language is regarded as static.

    Also C++ is usually described as weakly typed, but type strength is not that well defined and it does not usually have the same as static/dynamic typing.

  21. One error/misconception in your article I noticed.

    Your discussion of typing implies strong typing is an antonym of dynamic typing.

    This is misleading. Dynamic typing implies that a variable may contain data of any type: but strongly typed is not the same as static typed.

    Strongly typed language systems will prevent automatic casting to other types, which is seen in, for example JavaScript.

  22. BY IRNÉ says:

    Please revise the section around typing. You mean static where you state strong. Actually nearly every dynamic language requires strong type, else you cannot obtain any run-time type checks. Static sometimes doesn’t require strong typing.

  23. BY Matthew Adams says:

    Surprised at no mention of Scala, and, IMHO, you can’t really do efficient Java development without AspectJ, an AOP-based superset & compliment to Java. Further, like it or not, C++ is still around and should probably be on the list.

    To me, the real need is not so much about languages, but about ecosystems. It’s one thing to know the Java language, but knowing Java’s ecosystem is much more important: Maven, Spring, various Apache subprojects, the standard & optional Java libraries, TDD & BDD testing frameworks, etc. The same is true of all languages; each one is supported by legions of developers all kicking out from terrible to great libraries & frameworks.

  24. BY Matthew Adams says:

    Oh yeah, and don’t forget shell scripting (Bash, etc). Kind of pretty important…

  25. BY Marshall MacTavish says:

    I know for a fact that I’ll be using C++ (and nothing else) for at least the next 5 years, barring an apocalypse of one sort or another.

  26. BY Maytag Metalark says:

    Kind of hard to take this article seriously when you can’t even indent your code.

  27. BY Fernando says:

    A “functional language” is not one in which functions are first-class objects. A functional language is a non-procedural language. As usual, there’s an excellent discussion at http://en.wikipedia.org/wiki/Functional_programming

  28. BY Blinky says:

    I personally think, that the 5th programming languages will be a factors in future, but some of them (Java and C) will be get upper positions thanks to mobile revolution. Believe it or now, it is happening right now. :)

  29. BY ilya says:

    Does the writer know what he is talking about? That is not what a functional language means! See procedural languages.

    • BY yardpenalty says:

      FP is such a broad paradigm so it may be that the author didnt address all of FPs characteristics. FP functions are immutable so they can be considered first class objects

  30. BY Jose F. Medeiros says:

    Good article, very well written. I even learned a few things about programming languages, however you did not mention that although PERL is an interpreted language, it can also be compiled, but with that said I am in no way a programming or PERL expert.

    Regards, Jose F. Medeiros
    The Unemployed IT guy.
    https://www.facebook.com/greatdepression

  31. BY ilya says:

    I am not sure why my earlier comment was deleted, but the writer of the article does not know what a ‘functional language’ means.

  32. BY Gerard says:

    How can you leave PYTHON out of this list? Please do some additional research and try again!!!

  33. BY Azure says:

    Python is the “zen” version of PERL. PHP is based strongly on PERL They share many of the same modules. The Excel reading and writing ones for instance.

    If you really know PERL well, then learning Python or PHP is just a matter of syntax differences and how they function within the server and in relationship with the Web Browser. PHP seems to be designed ONLY for web application.

    If you know an interpreted language like PERL really well and a compiled OOP style program like C++ really well, the rest is all syntax really.

    My complaint is that the new developers are not being taught the base fundamentals of algorithms and data structures. There is more of a focus on the “Pretty” than the “Functional”. HTML5, while powerful and shiny, is not a language. Neither is CSS. I can download Templates and frankenstein them together to get what I need.

    All the new languages are cool and everything, however, as the Baby Boomers retire they will be leaving behind existing, functional, in production applications that are written in languages like PERL and C++. Someone is going to have to be able to support these unless a company is willing to bite the bullet and have it re-written. And they run the risk of not getting the same product unless the existing developer rewrites their code or the new developer can read the old code.

    • BY yardpenalty says:

      I find it to be the opposite. A huge problem is that schools are not preparing students for the real-world applications when it comes to PLs. While PHP is a popular language and it is important to understand how to manage memory and write data structures as you state, it is as equally important to learn the PHP libraries and then even go a step further and learn a platform that adopts PHP including specific architectures. Many desktop apps are going to become web-based as well so the article is on the right track, but make sure that you specialize in one area but are fluent in supporting languages as well. Find a technology that is in demand but not one that is garnering a lot of attention.

    • BY yardpenalty says:

      I also understand where you are coming from because it is very easy to fall into the Frankenstiniens of the world. AHhhhhhh! Cookie cutter yummm!

  34. BY Darrell Judd says:

    Just adding onto the pile. Python. Yeah – better append it to the list. I’ve seen a lot of Python out there and have used it myself implementing REST API’s on enterprise storage and networking devices. Loosely typed, dynamic, object-oriented, interpreted….

  35. BY Jiri Hampl says:

    Nice, good article, I was glad to read it. But the survey includes only today’s “in” languages. Lot of others, mostly legacy (and still often used) languages (COBOL, PL/1, FORTRAN, Assemblers) do not always need dynamic space allocation whenever a variable has to be used and run garbage collectors thereafter . (Well, PL/1 has AUTOMATIC as default, but clever programmer can consider it himself and change it whenever needed to speed up the program. STATIC in PL/1 terminology, or CONTROLED – to behave similarly to Java ). So, as you have all the variable already allocated during all the run time (when the module was loaded), the program runs much faster then any JAVA, C#, etc.. Of course, each method has pros and cons. So, probably the title and table should be extended to: “Static vs. Dynamic Languages and vs. No allocation and memory control , garbage collector needed Languages” .

  36. BY yardpenalty says:

    Honestly, you need to take it a step further and learn a specific technology including platforms and frameworks if you stand to have any chance as an aspiring programmer in this challenging economy. Trust me, you can work your butt off and still not find work right away so your best bet is to try and find a trending technology that is under the radar. If I had to start over I would look towards programming in embedded systems for a specific technology and purchase a micro-controller. Web development is fun don’t get me wrong, but web design is evolving and making it too easy for non-technical users to build sites such as CMS and MVC frameworks hurting the earning potential for freelancers. Don’t be discouraged though if you love web design, just try to be creative when it comes to honing your craft.

  37. BY Robert S says:

    “Technically, HTML5 isn’t a language.”

    Wrong, Hypertext Markup Language.

    • BY Me says:

      Correct. It’s a language. But it is not a Turing-complete language, so it is not considered as a (computer programming) language. So I think here he are talking about programming languages… Turing complete programming languages…

  38. BY Joaquin Menchaca says:

    About Swift, it is a proprietary language only for Apple products. It’s ultimate dream nirvana of vendor lock-in. I don’t see many articles emphasizing this, as it seems everyone is drinking the kool-aid.

  39. BY PV says:

    What about Ruby?

  40. BY Mike says:

    Meanwhile, more than one tech pundit / company laments the lack of programmers/coders/engineers unable to maintain so-called “legacy” code.

    • BY Mike says:

      The above SHOULD have stated “laments the lack … ABLE to ….”

      Never post when tired.

  41. BY Evan Fraser says:

    I admit to reading this article with a measure of concern and even dread. The proglang theory is well explained, but the choice of any best “future” language to learn should be based on some statistical “belief” measure. A topic like this is much like predicting the weather, since trends are often driven by publication of technology benefits and company perception on how many experts there are for any given language to mention but a few constraints

    What bothers me most, is that the article doesn’t even mention TIOBE. (ref: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html). I’m sure there are several more sites.

    As such all of this is nothing more than an opinion. I’m sure many of us have been shot down for unsubstantiated opinion, especially when there IS data available to justify a statement.

    Thank you Mr Cogswell for a well written article, but you also miss out on a number of important aspects that will likely drive software into the future:
    1) Expertise shouldn’t be a barrier to use a tool: Software will become so commonly used across the globe that it’ll need to be easier to use by trained and untrained alike.
    2) Domain Knowledge can change the focus of language: Programming languages are English centric just now but there’s far more Chinese than anyone else. If they work together, don’t be surprised on programming langs based on Mandarin. My point being is language can change considerably with the change in the type, number and focus of participants in the game.

    I’m sure trends will drive us all into new niches (and more Java, Ruby, C# styled revolutions). However, the idiom “smaller, faster and better” will become very important if we want to be more productive (ie less computer input but more computer results). We also need to encourage a perceived need within employers.

    Thus, “Meta-Programming” languages are becoming the flavor of the day. The idea being that the small amounts of “meta” code will expand into bigger code “templates”. More specifically, “Meta-Programming” is code that does more than the strict interpretation of the computer language in use. However, this is only a stepping stone to the overall objective mentioned above.

    Overall, the more a computer can take human (Natural Language) language and translate that into working and useful code the closer we are to a the sort of productivity we’ll actually need in the future.

    As such, I only ask all readers to keep their minds open and look for better ways to get a machine to do more with less effort. That is, the “best” computer language is yet to be invented and it may not be what you expect. eg brain scanning tools are also evolving in the software world. Those tools understand simple nouns like “stress” etc. But they’ll get more advanced over time (more nouns & verbs will be learned, Then the gluing together of those parts into yet another “language”). These rules can be used to request a computer to do something, probably something even more complex.

    Final word: The future is all about the management of “complexity”…

    NB Worthy of further research is “livecode”… which is getting us closer to producing productive code with few lines. You should also look into Haskell and Microsoft’s own “Roslyn” visualizer.

    NB: This too is an opinion, but it mentions aspects that are very new, will need to evolved and expand in the marketplace.

  42. BY opetrenko says:

    I know I am not the only person to grumble about this but C++ is dynamically typed (particularly with regards to the 8-bit/byte variable “char” which acts as a bitstream for I/O functionally. It requires that you point out when you are making switch and explain just how)

    It IS strongly typed for people who barely know how to use it. This is because without having strong type enforcement by default it is easy to create inherently ambiguous code: that is, code that is in principle somewhat incoherent no matter how it is compiled.

    C++ is INTELLIGENTLY typed, meaning it requires you point out when you are treating something differently. When the “bit-by-bit” change is no change at all (i.e. convert from 32 bit int to IEEE float which is what I think is described in this article) you just do a “reinterpret cast” on declaration.

    No to be too much of a naysayer but here but throwing out type enforcement is not something ANY programmer should do lightly. Integers and floats differ amongst themselves and there is absolutely no way get repeatable code when you are dealing with an IEEE float.. no matter what you are trying to do this is already flawed because the code working is now dependent on the hardware if not the compiler as well.

    Getting around type enforcement, while necessary sometimes, has a nasty trend of serving as a means for novice programmers to avoid fixing the conceptual flaws in a program. This is relevant here because conceptual flaws have a bad habit of showing up with a vengeance down the road, and very likely it will make more sense to scrap the entire program and start from scratch. All as a direct result of preventing the compiler from pointing out the very obvious problem.

  43. BY Shawn says:

    Scala is the future. Its blending of FP and OO is brilliant.

  44. BY Marleny says:

    Under the Functional Languages section, “[...] and passed around as parameters to other languages.”, he meant “as parameters to other functions.”

  45. BY Evan Langlois says:

    Static typing basically means that the type is tied to the variable name and the compiler has to make sure that the data type being assigned and the variable’s type agree. Often, you need flexibility that this model makes difficult. Defeating the type checking (blatant casting) leaves you open to crashes.

    In dynamic typing, the data holds the type, not the variable. There is usually a runtime that uses dynamic dispatch to make sure that the correct methods are used on the type. The downside of course is that it doesn’t catch stupid programmer errors when you assign a house to your cat variable and then try to make it walk. Errors are caught at run-time, but at least it gets caught.

    The upside of dynamic typing is that you can make a container that can hold multiple types of objects at once and send them messages without knowing or caring about the types. This is very powerful and allows for code reuse (rather than templates that duplicate code). C++ guys will tell me that you can use virtual functions with a common base class, but that is also known as dynamic dispatch … you are are then using C++ as a dynamic language as someone pointed out earlier.

    Personally, I think C++ is way too cumbersome, Java too convoluted and in many cases just wrong about how it handles OOP. And people that write dynamic languages don’t write languages that people take seriously, just “script languages”. The closest dynamic language people take seriously (or used to) is SmallTalk, and the “world” concept pretty much killed that as a language. Incidently Eclipse was originally an IBM project called VisualAge that was written in SmallTalk.

  46. BY Red Five says:

    PHP does not run inside a virtual machine. It is an interpreted language, like BASIC or Perl.

Post a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>