Programming Languages You'll Need Next Year (and Beyond)
Nerval's Lobster writes: Over at Dice, there's a breakdown of the programming languages that could prove most popular over the next year or two, including Apple's Swift, JavaScript, CSS3, and PHP. But perhaps the most interesting entry on the list is Erlang, an older language invented in 1986 by engineers at Ericsson. 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. "There aren't a lot of Erlang jobs out there," writes developer Jeff Cogswell. "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." And while the rest of the featured languages are no-brainers with regard to popularity, it's an open question how long it might take Swift to become popular, given how hard Apple will push it as the language for developing on iOS.
Over at Dice
But we are at Dice, sir:
Pros: Today's article has more content than the usual Dice front page linkage. Great article if you're not a programmer but feel stymied by the wide assortment of languages out there. Although instead of hemming and hawing before making your first project you're better off listening to Winston Churchill and sticking your feet in the mud: "The maxim 'Nothing avails but perfection' may be spelt shorter -- 'Paralysis."
...
Cons: It barely scratches the surface of an incredibly deep topic with unlimited facets. And when one is considering investing potential technical debt into a technology, this probably wouldn't even suffice as an introduction let alone table of contents. Words spent on anecdotes ("In 2004, a coworker of mine referred to it as a 'toy language.'" like, lol no way bro!) could have been better spent on things like Lambdas in Java 8. Most interesting on the list is Erlang? Seems to be more of a random addition that could just as easily been Scala, Ruby, Groovy, Clojure, Dart -- whatever the cool hip thing it is we're playing with today but doesn't seem to quite pan out on a massive scale
My work here is dung.
CSS3 is not a programming language. No more then HTML is.
Visit the Arcade Restoration Workshop @ http://www.arcaderestoration.com
C#, Java, PHP and JS will continue to dominate, C# and Java being mutually exclusive in a web app. Swift? Maybe. It's a shot in the dark. Apple is apple but the iOS development market is dried up for most developers, unless you can get a job at some company that wants an iOS app. It really depends on how well the Apple/IBM partnership works out in dislodging Microsoft from business apps. It's a long uphill battle that I suspect will take a lot longer than 2 years.
Erlang? Fuck off, Dice. How much did the one company that wants it pay you to write this garbage article?
I am surprised that Scala isn't mentioned.
It is strongly typed, object-functional and compatible with java.
Swift syntax is basically a cut and paste from Scala, which benefits from being more mature (and having access to all the Java libraries)
Scala is also much faster than erlang, while also supporting the actor based model.
http://www.scala-lang.org/
Learn C++, Java or C# and get yourself a job at a big corporate.
But hey, if you want to be a hipster coder and dick about all day doing "groovy" websites at some here today gone tommorow startup and earning fuck all by all means go down the web development route along with every other 14 year old school kid.
Erlang? Nice language but too niche. Never really got momentum outside telecoms and its probably too late for it now.
Who cares about a fucking language. I know more that 20 different programming languages, I don't care about one more or less. What can it do, that I can't do already ? Can I program faster, or better? Or is it just an other syntax, for some obscure system ?
And I'm surprised C isn't a language I'll need next year.
Just from what I've seen (not a user yet) Swift seems like an intelligently put together language. But I'd like it a lot better if somebody ported it so it can be useful across multiple platforms. I'm a C# developer who uses Xamarin's platforms, and compiling my code for all the major mobile and desktop platforms is a really good feeling. (Paying Xamarin's licensing fees isn't, but you know how that goes.)
Please, no more Erlang world domination news.
I went through that 3 years ago already. We had a project that a fanatic asked us to rewrite in Erlang.
it took 9 months with 2.5 people.
Tons of issues, mostly with very lacking library support, tooling. Obnoxious stuck up community too.
In one case, I had a guy tell me online "hire me as an Erlang consultant and then I will help you".
In the end we set screw it (once the Erlang fanatic left).
We rewrote this 9 months of Erlang development in 3 weeks (!) using one senior Java developer.
it worked like a charm and still runs flawlessly in production today.
Erlang = HYPE
Everything is immutable is beautiful for fairy tales, but not for real-life software (trying building a DOM in a language which is 100% immutable).
All modern languages have learned from Erlang's mistake. They do immutable by default, but allow mutable if there is a need for it (e.g. Ceylon, Rust, etc)
Next year, the languages you'll need will still be C, C++ and Java. Maybe some C#, Python or Bash. The year after that, you'll still be using C, C++, and Java. Maybe some C#, Python or Bash.
By 2020, the main difference is that you'll be working with machine-learning DSLs and libraries to program/train memristor based devices. But you'll still be using C, C++, and Java. Maybe some C#, Python or Bash.
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.
"Staticness" and "strongness" are orthogonal properties. Python, for instance, has strongly typed values (you can't convince an int that it's a str), but dynamic variables (a=123;a='foo' is valid). And while C++ is statically typed, I'd be hard pressed to describe something with void* and unions as strongly typed.
TL;DR: Words have meaning. It's OK to disagree about whether a particular language is strongly or weakly typed, but it's not OK to claim that two different concepts are the same thing. When you make a fundamental mistake in the third paragraph, I'm likely to ignore anything else you have to say in the rest of the article.
Dewey, what part of this looks like authorities should be involved?
Or how about learn about the fundamentals of computer science. Actually learn what pointers are, pass by reference, multi-threading, type safety, and all of the things that implies. Then express those in whatever language you want. If you truly understand how computers and languages work, and what an enterprise system is composed of, you will likely have future proofed your career. If your language doesn't support many of those ( I am looking at you, JavaScript), then perhaps consider how much those jobs are likely to pay in the long run....
Swift is a strongly-typed language, that operates inside a runtime with garbage collection.
There is no GC in iOS. Also the GC in OS X is deprecated. Swift uses Automatic Reference Counting which is something... completely different.
Need? No. You can still use Objective C if you want to code iOS/OS X. Want? Yes.
And while the rest of the featured languages are no-brainers with regard to popularity, it's an open question how long it might take Swift to become popular, given how hard Apple will push it as the language for developing on iOS.
Apple does not have to push very hard. After looking at it and Objective C, it doesn't take a genius to see why programmers would prefer it over Objective C.
Well, there's spam egg sausage and spam, that's not got much spam in it.
Scala is interesting and clearly will be somewhere. Swift has the backing of a major platform vendor with a long history of being able to move their platform.
date_default_timezone_set(‘America/Los_Angeles’);
Since when is ‘America/Los_Angeles’ a time zone?
When our name is on the back of your car, we're behind you all the way!
How do we even know it's going to be popular in the first place? Does it solve any problem I can't do with C# or Python and/or on more platforms?
Considering that you can't really use C# or Python for iOS or OS X development, I would say that's one major thing you can't do.
It'll be a language for little hipsters who hope to be the next Steve Jobs by releasing yet another crappy useless iOS app. I don't know anyone who still bothers with iOS apps.
Then you must not know anyone who uses an iPhone meaning you live in a rather small world.
Well, there's spam egg sausage and spam, that's not got much spam in it.
Next year, unless you are at the bottom of the skill and payment pyramid, you will need C and derivatives (C++, Objective C) and maybe Python or Perl.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
CSS/JavaScript/HTML5 is plainly obvious. Everything from Microsoft to mobile hybrid development relies on this these days.
C# is the standard language of the Microsoft stack --- in fact, the bulk of MS-stack training is in C#, with only a smattering in VB.NET.
Java is the COBOL of the early 21st Century. It isn't sexy anymore but it will always be around.
PHP is used in a lot of web applications. I wish it weren't. In fact, I'd really rather see Ruby on Rails take over this space.
If you're going to program native code, you could learn Swift, sure. You could also learn Rust (Mozilla's systems-level language with significant buy-in from Samsung) for device programming. If your goal is to write native apps, your best bet for Android is actually Java. By the way, one can also design native apps in Java (the code is Swing-like) and compile them to native apps for iOS or Android using Codename One, and I imagine a few shops will pick up that practice.
I like Erlang as an honorable mention. I'd also add two others: Python (especially for data analysis) and PowerShell (which will set the grown-up Microsoft sysadmins from the point-and-click kids).
Finding God in a Dog
C. Plain old C.
Entire Operating Systems are written in it. Userland tools for those operating systems are usually written in it. Any self-respecting developer knows at least C. The rest is just like fashion tips: next year they're outdated.
Although, as much as I hate to admit it, the same could be said for Java...
And on the Eighth Day, Man created God.
It is not. Strong typing can be implemented by attaching types to data. Static typing always attaches types to variables and they are fixed. But strong typing can also mean type-less variables, but no implicit conversion of values. For example, Perl is weakly typed, but that is because it will, for example, happily convert a string to a number all on its own. Python, on the other hand, is strongly typed, despite its variables not having types just like in Perl. The values assigned to the variables in Python have types and all type conversions have to be explicitly requested by the programmer.
With such a stupid article, it is really no surprise the author gets basic things wrong.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
You're correct. The terms "strong" and "weak" do not have formal definitions and really aren't related to static or dynamic (which do have specific definitions). The definitions used by the article for functional programming and dynamic type systems aren't accurate/complete either. Furthermore, C/C++ wouldn't be considered a "strongly-typed" language since the type system can be freely ignored by the programmer. In any event, this article is poorly written and can probably be safely ignored.
Scala is too advanced for most of the mediocre crowd calling itself "programmers" these days.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
PHP is forecast to be very popular going forward. That means your employment prospects are good!
#DeleteChrome
With Flash you can make: Destop/Web/Android phone+tablet/ios phone+tablet all in the same code!
Flash is a lot like C/C++ and Java, except it allows you to a couple things easier.
I think of all the languages though, Java has to be the winner. It has about the power of C/C++, except you don't need to dot the is and cross the ts. Java is superior to C/C++ in strings, garbage collection and arrays. For most projects you'd take code that has less bugs in it and develops faster than code that executes a slight % faster.
God spoke to me
The only time I've seen Erlang was back when I used eJabberd (which at the time was better than the regular jabberd).
Depending on one's industry, I'd say that GLSL would also be a useful (and interesting) thing to learn.
I spent over two years working every day with Erlang on a project, and I still don't consider myself to be anywhere near an "expert" at the language. It's just too weird and special case for a lot of the functionality I was trying to code, so while certain tasks were easier than they would have been in Java or another procedural-object language, others were damned near impossible and took obscene amounts of time to get working at all -- never mind working efficiently.
Personally I'd avoid it like the plague unless you have some special case need for it's features. Even with regards to concurrency, it's not really any better than any other language's concurrency features. They aren't really baked into the language as the summary suggests, but provided by frameworks in the API libraries, much as they are by other languages.
The main difference with Erlang concurrency is that the concurrent models are the "normal" way to program Erlang, so you're likely to find a lot of good examples of how to do it. I've found the documentation for other language's concurrency features to be somewhat limited in comparison, and less "real world" in their examples.
The main thing that I found neat about the Erlang framework was the ability to specify auto-restarts of failed threads. It takes all of about 4 lines of configuration to get a thread to be persistent/self-starting. That's the densest code I've ever seen for achieving such a task.
The big downside to Erlang is that it's almost as bad as LISP -- everything is a list. Even "structures" are just lists of objects with tags that identify the list indices for accessing the members. Be prepared for a nightmare of tail recursion if you get into this field of programming.
That said, it can be a fun and entertaining language to work with. For the things it is good at, it can be a joy to use. Much as with any language.
I do not fail; I succeed at finding out what does not work.
I wish it were Pascal. Or at least some decent extensions, and some *real* macros, updating C. And maybe a little learning from history: I could do things in IBM Assembler macros in the 1970s that you still can't do in C++ templates. We spent too much time being cool and iconoclastic and "new" that we threw out the good with the bad - except C, which has hung around forever and you STILL don't know how big your values are.
As long as we are hyping Erlang, the Erlang community is getting some disruption from a language developed by a prominent Rubyist called Elixir. Clojure-inspired metaprogramming, a Ruby-ish syntax, and it all compiles down to the same VM code that Erlang compiles into.
While there is a need for strongly typed languages, that doesn't imply that all languages should be strongly typed. More to the point, however, Scala appears to be staticly typed (I'm believing documentation here, I've no experience). Many problems are addressed only with difficulty via a staticly typed language.
Compatible with Java. OK. So is Jython, so is JRuby. Object-functional? Not quite sure what you mean, but I would guess that so are Jython and JRuby. Also Groovy.
This isn't really a response to the article, but rather to your comment. Unless you are in love with the Scala syntax, you don't seem to justify your point. Even Clojure would meet all the benefits that you list. (As well as several other languages.)
Personally, I dislike intensely Java's 16-bit char system. I much prefer either utf-8 or utf-32. Perfferable either chosen as needed. Alternatively the Python3 opaque string type with conversions to the desired representation also has its benefits. (My real preference is uft-8, but then most of what I work with is ASCII, and I only need occasional double or triple byte characters. But for that to work the language MUST have appropriate library support. As Python, Vala, D, etc. have. Ruby has it via an add-in gem. Java doesn't seem to really have it, and as a result neither do any of the languages that are symbiotes. C and C++ are, admittedly, as bad as Java. You need a large and clumsy external library. Racket Scheme has this aspect handled well, but there are other reasons that it's less than desireable.)
So. Which languages will you need in 10 years? It's one that isn't popular yet. Vala is a possibility. So is D. And prehaps there will be applications for which Swift is desireable. I'm really dubious about Java. C will probably still be necessary, but I'm not sure about C++. Some successor of the current Scheme versions would be desireable, but it MUST implement IPC much better than any current Scheme does. Some dataflow language would be highly desireable, but I don't know of any decent conderes. (The one's I'm aware of are too specialized...though one of them could grow out of that.)
The language really needed hasn't yet been written. It will be designed to be easy to write multi-process programs in. And it will be easy for processes to submit messages to each other's read queues. Erlang is almost right, but it concentrates too much on immutability, which works quite well for a certain subset of problems, and is terrible for many others. The reall concept needed is isolated mutability, where mutability is all "thread confined" (except that I mean process confined). I don't think that it should be possible to pass pointers between processes, but perhaps it could be done if the pointer only pointed to totally immutable data and it's recursive equivalents.
As I said, this language doesn't seem to exist yet, but various languages have implemented pieces of it, so I don't see any intrinsic difficulty in creating the language.
I think we've pushed this "anyone can grow up to be president" thing too far.
If JIT compilation is your definition of "does not run in a virtual machine", then modern Java doesn't run in a VM, either.
I do not fail; I succeed at finding out what does not work.
That sounds nice.
If your code doesn't use any strings.
Scala is too advanced for most of the mediocre crowd calling itself "programmers" these days.
Yeah, but so is Erlang...
Scala lacks the webby web-web street cred that this list is laden with. Haskell is mentioned briefly in the article, but not considered worthy of Knowing. Meanwhile, Erlang is popular in certain buzzword compliance requirements considered key to trends in web development as of a year or two ago.
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
Strong/weak is related to checking the type of variable passed as a parameter vs. the formal type of function parameter. For example, old C compilers had weak typing since they had no function prototype requirement, so you could pass a "char *" variable where a function wanted to work with an "int" type variable. Pascal compilers, on the other hand, had very strict typing where you couldn't pass an Integer variable where the function parameter type was Percent (subrange 0..100).
Static languages require the variable passed to functions be checked against the function parameter type at compile time whereas dynamic languages don't do the type checking at compile time; they do it at run time when the function parameter is used.
A functional language is one whereby the functions themselves can be stored in variables and passed around as parameters to other languages.
What in the actual fuck. That may be the worst definition of a functional language I've ever heard. Even if I try to interpret it as something that could make any sort of sense, I just get that storing functions in variables makes a language functional, which the author goes on to debunk by pointing out that C++ isn't a functional language. Why bother even trying to describe them if you have no idea what the hell they are?
Entire operating systems are written in C -- as they should be.
But C is a low level language. Not the best tool for writing applications.
Higher level languages and managed runtime systems have gained so much traction for a reason. They are very productive to use. They protect you from simple mistakes. The relieve the burden of memory management. GC simplifies library APIs by making the question of who should dispose of what become irrelevant. We could still be programming in assembly language instead of C. Why aren't we? Why aren't OSes written in assembly? Because C is more productive and higher level. Similarly, there are higher level languages than C, and they have their place. C is not the end all of abstraction.
I'll see your senator, and I'll raise you two judges.
There are python development environments/libraries to write 'native' iOS Apps. ...
Easy to google for
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
You're wrong. For one, it's clear from the docs that Swift will be adding overhead to C calls that Obj-C doesn't have. This is extremely important to me and many other developers, since C is what most real-time/high-performance apps out there (think audio/visual) and it. For two, Swift doesn't have any particular purpose behind its design -- it's just a collection of trendy features that they then shoe-horned into becoming a general purpose application language. Whatever Obj-C's faults, it clearly was designed with a purpose.
Swift looks fine for most app developers, but for anyone doing high-performance work it looks like a step backwards.
Well a quick stat on indeed.com suggests that I am right in mentioning scala over what you suggest:
http://www.indeed.com/jobtrend...
Take a look at Akka. It mostly fits your description for the "language" you want. Scala is pretty extendable, so the libraries often end up looking more like language extensions than libraries.
Scala allows both mutable and immutable objects, but it favours immutable.
In Akka you have mutable state within your actors and pass immutable messages.
Well, it can be. But don't try to be too smart and chain everything into one big statement and you'll be ok.
Listen to Odersky here:
http://www.parleys.com/play/53...
I don't know about that. Scala is getting more and more popular in "Big Data", and it doesn't get more hip than that?
Apache Spark which seems destined to replace Hadoop is written in Scala:
https://spark.apache.org/
Multiprocess means lots of threads and IPC, which are both horrible for scaling unless you're doing heavy work. Death by via thread scheduling.
it's a semantic argument, IMHO...but you totally missed the joke
if the defining criteria is your code language can do something another cannot, then have C++ render a hypertext document with linked photos & text into a browser
still it's *semantics*...it's all machines following code pounded by a monkey
Thank you Dave Raggett
Thank you for helping to reinforce our Android-first meme.
We are still a long way off, but with your continued effort we can shape the thoughts of developers to our advantage.
$0.10 has been deposited into your Google Wallet.
Thank you,
Google.
we can get pedantic about the difference between "coding" and "programming" languages...but others have gone down that road & it's never-ending
we need a consistent paradigm
HTML & CSS are coding languages...they are a defined set of symbols that contain commands run on a computer (specifically by a browser)...yes they are not "original gangster" coding languages that you can brag about..but they are a unique set of code that commands a machine...it's "code"
not all people who use HTML/CSS are "coders"
it's like back before facebook.com came online, one of the only options was Myspace...kids would get into the HTML & CSS via an interface and just randomly change color numbers and hack it up
**that's not coding**
whoever made the CSS for a site like...well facebook.com....is surely a coder
keep your bragging rights, bro...you're more of a 'real' coder...but it's reductive and pedantic to say "CSS is not a programming language"
Thank you Dave Raggett
http://en.wikipedia.org/wiki/E...
it's a relevant language to the conversation
Thank you Dave Raggett
Erlang's becoming at least slightly trendy because it's used in several sets of Cloud Stuff, and Cloud Stuff is heavily enough management-buzzwordy that HR departments have figured out they need to hire some Erlang programmers.
It's especially useful for some of the orchestration tools out there, and it's useful if your management likes Cloud Stuff Buzzwords that don't start with "v" or "V".
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
Especially when "Pacific Time" may mean different things in different countries on different sides of the Pacific Ocean.
So would free Swift rely on free Cocoa?
Xamarin allows for iPhone and Android development using C#.
I'm waiting for the day that Microsoft buys them so I can get the premium Visual Studio integration via my MSDN subscription...
BlameBillCosby.com
Clearly if someone considers that CSS is essential for a programmer then they have limited exposure to situations where it is not (ie. anything other than applications to generate web pages). The only sad thing is trying to force that attitude on programmers who have nothing to do with web based applications.
Yes, this joker probably meant "has a more complex type system".
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
You will get no argument from me on that.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
One great thing about C is that if you don't like, you can use it to program a compiler for a new language that you prefer.
As if that was somehow not true for languages other than C...
CLI paste? paste.pr0.tips!
Chances are, if you need fucking Dice to tell you what languages to learn, you probably aren't a very good programmer.
Using erlang i always end up solving my stuffs recursively,i love the language :D. Way to go Erlang :p.
And trying to write anything non-trivial will have you cursing Apple 7 ways 'til Sunday. It's a still-evolving language with lots of warts and weird behaviors. It has a few cool ideas (for what is intended to be a common language), but very poor execution on many.
Try creating an immutable array, for one.
Like this?
http://stackoverflow.com/a/24090842/3273651
Basing one's choice of language to learn on its current popularity - though this may be economically prudent - retards progress in programming languages almost as much as new languages' emphasis on backwards compatibility and ease of learning for novices.
"Backward compatibility" gives us the backward languages that predominate today. Making things easy for beginners gives us languages mostly only suitable for newbies.
Contrast this novice-oriented, backward-looking orientation with the little-understood idea that a language can be a tool of thought, that it can provide us with useful conceptual building blocks for thinking about computation at a high level.
A pretty trivial non-problem. Make a mutable one and just don't change anything in it.
I still have more fans than freaks. WTF is wrong with you people?
Then you're dong it wrong. For the class of problems I'm interested in each process needs an input queue, and the ability to detect (somehow...there are several plausible means so I'm not choosing) what other processes are around and how to write to their input queues. And you need to be able to examine your input queue to tell whether there's a waiting message without blocking. All fairly straightforwards. You don't synchronize the processes, each one runs as far as it can with the inputs it has available and then waits for additional input. What is queued should be messages as short as possible, but that's true whenever you copy an array. And the queue should hold either a deep-copy of whatever is being exchanged or a reference to an immutable instance. No scheduling, per se, except that you might want to be able to adjust the priority at which the processes execute.
FWIW, I'm currently implementing something that operates in this way, and most of the tools I'm using to do this are excessively slow BECAUSE they are capable of a lot more than I'm asking them to do. I'm only planning on having around 8-16 processes because I've only got about 8 processors. I expect that most of the processes will keep busy all the time without needing new inputs. The messages that I'm planning on passing all have the form (action, key, value), and for my purposes key will always be either a string or an integer, and value will be an array of stuff. The kind of stuff will vary depending on what kind of process is receiving the input and what action is to be preformed. (Which is why I really don't want a static type.) Generally, however, it will begin with a few numbers, then a few (usually 4) arrays of structures(without internal pointers) and then possibly a string. This kind of thing is quite simple to handle in a language with dynamic types, and a real pain in languages with static types.
Do note that this means that most of the messages will be longer than is optimal, and that the length will not be consistent. It's the kind of thing that marshall, pickel, yaml, or json and handle trivially. No class serialization needed.
This means that each process totally controlls it's internal synchronization without external conflicts. Thread synchronization is not a problem. Scaling is trivial. Efficiency...well, I'm not so sure of that. I need to set things up so that most processing happens without IPC, and I'm not sure how possible that will be. I may need to go all out and find or build an even simpler IPC mechanism. (I think what I'm currently planning on has TCP/IP sockets burried within the implementation. I'm using localhost, so that probably gets translated into UNIX domain sockets, but even that may not be as fast as possible. OTOH, I don't want the input queues to be bounded by a pre-determined amount of RAM unless I must.)
I think we've pushed this "anyone can grow up to be president" thing too far.