At the risk of sounding like a nitpicker, as a statistician, I'll have to comment on the methodology. I believe the crucial clause in the article is
when the research and analysis firm Forrester recently surveyed our readers about how much time they spend writing in any given language
When the results change over time as indicated by the two charts, that can mean one of two things: either a lot of people who worked in just one language in 2010 now work in several languages, or a lot of people who work in just one language have stopped reading Dr. Dobbs. In order to support the claim that it's mainly the first and not the second possibility, one would have to submit at least some supporting evidence. (Edit: at first I thought that one would want to contact the same people in both surveys, but no, that's not good. It leaves out the effect of new people entering the arena. This doesn't seem to be easy.)
And also, this perhaps being a matter of taste, I find it questionable to have a caption like "Fraction of programmers..." underneath the charts. As much as I respect and admire Dr. Dobbs (I have published there): not every programmer is a Dr. Dobbs reader.
I'm the author of the article. Let me try to address your thoughtful observations.
>This doesn't seem to be easy.
Quite agreed. It's not an easy thing to measure accurately. I believe the explanation for the numbers is indeed the first of the two options you present, as I wrote in the original piece. As the Dr. Dobb's readership has grown vs. 2010, both in terms of unique visitors to the website and subscribers, I don't think the second option is likely.
>not every programmer is a Dr. Dobb's reader
Quite true. This is a problem inherent in all surveys. The survey size for these two questions were 1143 in 2010 and 500 in 2012, which statistically speaking would be fairly representative samples. The real rub is that programmers are not a homogeneous group, so the results will change a lot from one type of programming to another. For example, Dr. Dobb's does not cater much to embedded developers, consequently the effect that they would have on the charts is not captured.
If I assess the 2012 numbers based on what I know anecdotally, they seem acurrate insofar as capturing the broad trend towards polyglot programming. What was counterintuitive, at least to me, was how much the trend accelerated in the last two years.
Do people realize the huge hidden cost of this "polyglot programming" thing? Imho, we have two huge "blackholes" these days that suck resources form everything that matters: the "social everything, center around advertising, give stuff for free" black hole at the business level, and the "uberpolyglot everything", from languages to OSs at the technical level.
> We have had to become polyglots to develop almost any current application.
...in my experience, by working in 2 languages instead of one, the time it takes to deliver something grows 3-4 times (!!), and there's still all the "lost" training time: instead of learning new paradigms, patterns and way to solve problems, people spend inordinate amounts of time learning the details of new languages. I used to love the polyglot way, but now I see language proliferation more as part of the problem than the solution. There was and advantage of all this, but now most paradigms of concurrency and everything are cross-language, and even if some languages like Clojure or Haskell injected new or better refined ideas into the mainstream, these ideas are nor longer tied to a particular language.
I think we should invest as much as we can in unifying languages and technologies, like:
- using one language by making a traditional client side language work server side: the Node way
- cross-compiling: the X to Javascript compilers (like Clojure-script and Python to Js or Ruby to Js techs)
- make languages use libraries from other languages: not to much exciting things happening here yet :( ...but I'd love having a way to, for example, mix C, Python and Ruby libraries inside a Clojure program, regardless of the performance or security issues
...they all seem like "boring plumbing work", I know. They are neither "exciting big problems to solve" nor "amazing business ideas" and you'll most likely neither change the world nor get rich by working on such things, but you can probably make a huge difference by working on such plumbing an let the really smart guys free to invent really new things!
My reply is that you may be able to drive a nail with a brick, but a hammer works much better.
Same for programming. The more you are aware of, the better able you are to chose the better way of proceeding on a project.
I'm probably scarred though, I work with people who believe that c# and sql server can solve all the world's programming problems. (I like c# and sql server, but they aren't always the best solution for a given problem)
>Note the big spike on the left and the mostly sub-2% numbers for programmers coding more than 50% of the time in one language. I expect, after some reflection, that most readers will find this chart unexceptional.
Am I missing something? I find the first graph in the article quite difficult to comprehend in terms of what it signifies. Although the numbers are "sub 2%" after the 50% line, isn't it an aggregation across 5 data points on the x-axis and 7 languages that will still add up to a substantial number of developers who program mostly in a single language?
I am yet to meet someone who vastly switches between languages on a daily basis in given 12 month period. One occurrence is probably working on a python and javascript for a webapp and writing an occasional chef cookbook in ruby.
In the last 12 months I have written Java, Python, C++ and Go for work. I don't switch daily but it's not unusual for the switching be weekly or semi-monthly. That seems pretty polyglot to me. I'm not unusual at work either. Many of us switch among the big 3 of Java, Python, and C++.
It is possible that Google is unique in this though.
Going back around 15 years, I was mostly in VB5-6, some VBScript, some JavaScript and some SQL. 10 years ago that expanded to include C#, VB.Net, ActionScript/Flash... most of those used at least a few hours a week, and often switching between the two... Today, it's about 1/2 .Net web projects C#/HTML/CSS/JS and the other half NodeJS backend code (JS), with more movement towards full-stack Js (NodeJS, MongoDB, web front end).
I like looking at different languages/tools/platforms, and am a bit into different languages. I've actually liked JS for a long time. The nature of web based apps make it a requirement, so it is nice to see decent frameworks take hold server-side that use it.
Just pointing, that for me personally, if you add all the web stuff, more than half my time is in JS these days, and a decade or five years ago, I could not say the same.
Agreed.. I don't recall seeing SQL variants in there either. I do think that HTML/CSS could be removed, or lumped together. There's a lot of growth/movement in server-side JS between NodeJS and MongoDB alone.
I've never met a one language programmer. I have, however, met some who were only proficient in one. That's the big difference these days. You now have to be proficient in various languages in order to build stuff.
If I am mainly proficient in just C++ or Java (for examples), it really isn't true that I can't build stuff. I can build stuff. Whether it's the stuff you want to build is none of my concern.
if you don't consider html a programming language (and it's really a markup language anyway..), i know dozens of single language programmers who only know PHP.
In fact, I think the majority of developers I know fall into that category.
As a data point, I'm strongly proficient in one (Objective-C) but use PHP,HTML,CSS and a small amount of JS to supplement the data handling, web services, and create the web site side of my mobile apps. I can get done what I need to in those other 4, but I can't sit down and hack out a whole project like I can Obj-C.
I'm also strongly proficient in Adobe Illustrator, Photoshop, and InDesign though, so I don't know if that offsets my proficiency in only one language.
Many years ago, I was working with a Perl programmer
and, making conversation over a lunch or coffee break, I asked him what other languages he knew. He replied, "only Perl." I was shocked and persisted in my questioning, even offering up other common languages in the hopes that he was being merely forgetful, but he was quite clear that he knew only a single programming language. This, I find very scary.
This is probably not far from the norm where a programmer "knows" multiple languages but are only expert in one. This is almost as scary to me.
At least for me, there's a refreshingly synergistic effect from knowing and understanding multiple languages well.
In fact, I would go so far as to claim that a good programmer should know and understand a variety of languages and, ideally, use them frequently.
Why should it be scary? If you need someone to write some scripts in Perl, it should be just fine to use someone who mainly just knows Perl. Anyway, they can learn other stuff as they need to, once they know one language well, but you haven't made a case that this is actually necessary.
Which languages makes all the difference. It's more important to know at a language from a broad number of paradigms, rather than knowledge of a bunch of C-syntax-derived object oriented languages (I say this, but I'm just as guilty of it as many others, despite trying to rectify it).
Frequent usage is more difficult, though. I'd like to think I know C++, Java, C and Python all very well, SQL to a reasonable level. However, add the "dabbling" languages: Racket, Haskell, Scala, C#...where exactly would the time for using these frequently come from?
Arguably, languages are only important to an extent - libraries surrounding languages are the truly important part.
Assuming that the article is correct (and perhaps it is not), I think this is bad for software development.
It takes a lot of work to become really proficient in any one language. Multiple languages? For most people, that means only adequate proficiency — or even barely adequate proficiency — in some of them. Don't we already have enough lousy programmers?
I do expect a programmer to be able to handle at least a few languages, let's say C, HTML, CSS, Java, PHP, Emacs LISP. Now throw in SQL, JavaScript, C++, ASP.Net, Python, Ruby, etc... It's not just syntax. How can anyone know most of the ins and outs of all of these, learn best practices, understand the libraries, keep up to date on new versions?
From my (non coder) point of view it's hard to understand what drives the continual expansion in programming languages.
Is there a general principal for creating a whole new language as opposed to adding features.?
Could you have a language where you could have a setting for something like static typing vs dynamic typing? The language would get more complex, but seems like it would still be less complex than a whole new syntax?
Web programmers tend to take this for granted, but there are whole swaths of the software world that aren't web applications. For developers in those areas it may very well be something they haven't considered.
I switch between Javascript, Python and PHP on daily basis. If I have no other choice I use java for the task given or C# ... I think that heterogeneous programming and language interoperability will be the next nuts that we will have to crack - to learn that languages are tools and we should use the proper for the task.
All the currently successful languages became so because of their universal character: you can write server, a GUI app, or code a ML library that implements a neural network in either C or C++ or Java - they all offer the balance of abstraction tools and performance needed to be universal.
The proper tool for the task way is pushing things backwards!
By going this way you're running towards a brick wall, the wall of your limited brainpower: at one point you will not have enough brainpower to keep juggling the increasing number of "proper tools" and you'll have to stop growing, stop learning and enclose yourself in warm niche/bubble. Yeah, this is exactly what your manager wants - you'll become a good but replaceable "programmer specializing in X, Y and Z" instead of the "uncathegorizable freak" that embeds a Scheme interpreter only he understands in his C++ code, can do in a day what the rest of the team does in a month, but that may bring the whole company close to bankruptcy if he's hit by a bus because, well ...nobody can replace him :)
"Universal" tools are always better overall even if they are worse for every particular situation you can imagine because the "problem space" in software is expanding. I an "all is open-ended" world universal tools are the only to avoid being trapped in a "bubble" (yeah, you may have warm and cozy in a "web dev with rails" bubble or "frontend dev in javascript" bubble, but you're still in a bubble!).
Funny conclusion: Java stays roughly the same between the two graphs, if you "join" C and C++ in both graphs, they, too seem rather similar, and JavaScript probably got a bump because the second time, "HTML/CSS" was added as a "programming language". Apart from the other errors mentioned here, this seems very much like "only believe the statistics you have faked yourself"....
If you're looking at how individual languages compare, you're missing the point. If all these languages were folded into a single line, the editorial's main point would be exactly the same.
[+] [-] thebear|13 years ago|reply
when the research and analysis firm Forrester recently surveyed our readers about how much time they spend writing in any given language
When the results change over time as indicated by the two charts, that can mean one of two things: either a lot of people who worked in just one language in 2010 now work in several languages, or a lot of people who work in just one language have stopped reading Dr. Dobbs. In order to support the claim that it's mainly the first and not the second possibility, one would have to submit at least some supporting evidence. (Edit: at first I thought that one would want to contact the same people in both surveys, but no, that's not good. It leaves out the effect of new people entering the arena. This doesn't seem to be easy.)
And also, this perhaps being a matter of taste, I find it questionable to have a caption like "Fraction of programmers..." underneath the charts. As much as I respect and admire Dr. Dobbs (I have published there): not every programmer is a Dr. Dobbs reader.
[+] [-] brownbat|13 years ago|reply
It'd be nice to see a time-lapse of the TIOBE index from 2009 to 2013: http://www.tiobe.com/content/paperinfo/tpci/index.html
Or any of these dozen other measures (including mentions on delicious, or IRC): http://www.langpop.com/
Or employer challenges posted on CodeEval: http://visual.ly/most-popular-programming-languages-2013
That said, the underlying thesis may be true that more projects today require more languages, hard to say.
[+] [-] andrewbinstock|13 years ago|reply
>This doesn't seem to be easy.
Quite agreed. It's not an easy thing to measure accurately. I believe the explanation for the numbers is indeed the first of the two options you present, as I wrote in the original piece. As the Dr. Dobb's readership has grown vs. 2010, both in terms of unique visitors to the website and subscribers, I don't think the second option is likely.
>not every programmer is a Dr. Dobb's reader
Quite true. This is a problem inherent in all surveys. The survey size for these two questions were 1143 in 2010 and 500 in 2012, which statistically speaking would be fairly representative samples. The real rub is that programmers are not a homogeneous group, so the results will change a lot from one type of programming to another. For example, Dr. Dobb's does not cater much to embedded developers, consequently the effect that they would have on the charts is not captured.
If I assess the 2012 numbers based on what I know anecdotally, they seem acurrate insofar as capturing the broad trend towards polyglot programming. What was counterintuitive, at least to me, was how much the trend accelerated in the last two years.
[+] [-] nnq|13 years ago|reply
> We have had to become polyglots to develop almost any current application.
...in my experience, by working in 2 languages instead of one, the time it takes to deliver something grows 3-4 times (!!), and there's still all the "lost" training time: instead of learning new paradigms, patterns and way to solve problems, people spend inordinate amounts of time learning the details of new languages. I used to love the polyglot way, but now I see language proliferation more as part of the problem than the solution. There was and advantage of all this, but now most paradigms of concurrency and everything are cross-language, and even if some languages like Clojure or Haskell injected new or better refined ideas into the mainstream, these ideas are nor longer tied to a particular language.
I think we should invest as much as we can in unifying languages and technologies, like:
- using one language by making a traditional client side language work server side: the Node way
- cross-compiling: the X to Javascript compilers (like Clojure-script and Python to Js or Ruby to Js techs)
- make languages use libraries from other languages: not to much exciting things happening here yet :( ...but I'd love having a way to, for example, mix C, Python and Ruby libraries inside a Clojure program, regardless of the performance or security issues
...they all seem like "boring plumbing work", I know. They are neither "exciting big problems to solve" nor "amazing business ideas" and you'll most likely neither change the world nor get rich by working on such things, but you can probably make a huge difference by working on such plumbing an let the really smart guys free to invent really new things!
[+] [-] thisone|13 years ago|reply
Same for programming. The more you are aware of, the better able you are to chose the better way of proceeding on a project.
I'm probably scarred though, I work with people who believe that c# and sql server can solve all the world's programming problems. (I like c# and sql server, but they aren't always the best solution for a given problem)
[+] [-] ultimoo|13 years ago|reply
Am I missing something? I find the first graph in the article quite difficult to comprehend in terms of what it signifies. Although the numbers are "sub 2%" after the 50% line, isn't it an aggregation across 5 data points on the x-axis and 7 languages that will still add up to a substantial number of developers who program mostly in a single language?
I am yet to meet someone who vastly switches between languages on a daily basis in given 12 month period. One occurrence is probably working on a python and javascript for a webapp and writing an occasional chef cookbook in ruby.
[+] [-] zaphar|13 years ago|reply
It is possible that Google is unique in this though.
[+] [-] tracker1|13 years ago|reply
I like looking at different languages/tools/platforms, and am a bit into different languages. I've actually liked JS for a long time. The nature of web based apps make it a requirement, so it is nice to see decent frameworks take hold server-side that use it.
Just pointing, that for me personally, if you add all the web stuff, more than half my time is in JS these days, and a decade or five years ago, I could not say the same.
[+] [-] lowboy|13 years ago|reply
[+] [-] tracker1|13 years ago|reply
[+] [-] andrewbinstock|13 years ago|reply
[+] [-] orangethirty|13 years ago|reply
[+] [-] pekk|13 years ago|reply
[+] [-] AdrianRossouw|13 years ago|reply
In fact, I think the majority of developers I know fall into that category.
[+] [-] bennyg|13 years ago|reply
I'm also strongly proficient in Adobe Illustrator, Photoshop, and InDesign though, so I don't know if that offsets my proficiency in only one language.
[+] [-] AndrewDucker|13 years ago|reply
Of course, this is probably a lot rarer outside of business apps.
[+] [-] gyepi|13 years ago|reply
This is probably not far from the norm where a programmer "knows" multiple languages but are only expert in one. This is almost as scary to me.
At least for me, there's a refreshingly synergistic effect from knowing and understanding multiple languages well.
In fact, I would go so far as to claim that a good programmer should know and understand a variety of languages and, ideally, use them frequently.
[+] [-] rhizome|13 years ago|reply
How frequently? Can you describe the average week of this programmer?
[+] [-] pekk|13 years ago|reply
[+] [-] yuushi|13 years ago|reply
Frequent usage is more difficult, though. I'd like to think I know C++, Java, C and Python all very well, SQL to a reasonable level. However, add the "dabbling" languages: Racket, Haskell, Scala, C#...where exactly would the time for using these frequently come from?
Arguably, languages are only important to an extent - libraries surrounding languages are the truly important part.
[+] [-] D-Coder|13 years ago|reply
It takes a lot of work to become really proficient in any one language. Multiple languages? For most people, that means only adequate proficiency — or even barely adequate proficiency — in some of them. Don't we already have enough lousy programmers?
I do expect a programmer to be able to handle at least a few languages, let's say C, HTML, CSS, Java, PHP, Emacs LISP. Now throw in SQL, JavaScript, C++, ASP.Net, Python, Ruby, etc... It's not just syntax. How can anyone know most of the ins and outs of all of these, learn best practices, understand the libraries, keep up to date on new versions?
[+] [-] b1daly|13 years ago|reply
Is there a general principal for creating a whole new language as opposed to adding features.? Could you have a language where you could have a setting for something like static typing vs dynamic typing? The language would get more complex, but seems like it would still be less complex than a whole new syntax?
[+] [-] fecak|13 years ago|reply
[+] [-] JunkDNA|13 years ago|reply
[+] [-] venomsnake|13 years ago|reply
[+] [-] nnq|13 years ago|reply
The proper tool for the task way is pushing things backwards! By going this way you're running towards a brick wall, the wall of your limited brainpower: at one point you will not have enough brainpower to keep juggling the increasing number of "proper tools" and you'll have to stop growing, stop learning and enclose yourself in warm niche/bubble. Yeah, this is exactly what your manager wants - you'll become a good but replaceable "programmer specializing in X, Y and Z" instead of the "uncathegorizable freak" that embeds a Scheme interpreter only he understands in his C++ code, can do in a day what the rest of the team does in a month, but that may bring the whole company close to bankruptcy if he's hit by a bus because, well ...nobody can replace him :)
"Universal" tools are always better overall even if they are worse for every particular situation you can imagine because the "problem space" in software is expanding. I an "all is open-ended" world universal tools are the only to avoid being trapped in a "bubble" (yeah, you may have warm and cozy in a "web dev with rails" bubble or "frontend dev in javascript" bubble, but you're still in a bubble!).
[+] [-] fnl|13 years ago|reply
[+] [-] ternaryoperator|13 years ago|reply
[+] [-] jared314|13 years ago|reply
[+] [-] tankm0de|13 years ago|reply
[+] [-] bcoates|13 years ago|reply
[+] [-] jacalata|13 years ago|reply
[+] [-] eswangren|13 years ago|reply
[deleted]