Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

If I understand correctly, there was a huge birth of programming languages during the early decades of computing, but then things have stabilized.

Basically, why are many universities and industries still using languages such as C and C++ (which were created decades ago), when there have been plenty of decades since then to improve upon and create more effective (and human-friendly) languages?

share|improve this question

closed as not constructive by Walter, Tom Squires, StuperUser, Jonas, Jeremy Oct 28 '11 at 18:28

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

4  
Hey Jacob, your question is off topic for programmers.stackexchange, you should only ask practical, answerable questions based on actual problems, as its stated on the faq. As for your question, C and C++ keep evolving and are still extremely efficient if used correctly, although many seem to think that they are not so friendly. But human friendliness is not always what you look for in a programming language. –  Yannis Rizos Oct 28 '11 at 2:18
23  
I think the premise is entirely incorrect. My impression is that there are a lot more new programming languages these days than at any time before. –  Kyralessa Oct 28 '11 at 2:26
3  
I wish more universities would use C++ for teaching programming. –  sbi Oct 28 '11 at 8:06
1  
@sbi - I wish more universities would use anything but C++ for teaching programming. Pen&paper if possible, but will settle for anything else. –  ldigas Oct 28 '11 at 17:22
1  
@sbi - No, you see that is exactly what I don't agree with: "in order to learn concepts, you need tools that support those concepts". I believe concepts should be learned without the tools, so once "one gets the tools" one already knows the concepts. I'm of the school that it is terrible to go learning the concept of pointers by programming in C++. You should understand both pointers, memory management and ... before writing your first line of code. You don't go learning drawing by working in Autocad, you learn to draw and then you learn ACAD. One has not much to do with another. –  ldigas Oct 28 '11 at 23:22
show 8 more comments

8 Answers

up vote 11 down vote accepted

One can extend this question to many things: why has the progress of chess slowed down? Why has the progress of aviation slowed down? Why was I learning math so fast in grade school but in grad school and thereafter I am publishing papers VERY SLOWLY. Why was Facebook progressing so fast as start-up, and now with 1200+ employees it does not really change all that much?

The progress has not stopped; it goes on, but, as George Carlin put it, "Now you've got shit all over the world. The supply lines are getting harder to maintain".

The success of languages depends partly on having very large API base and user base, and the success of airplanes depends on being able to provide a million of conveniences to the customer. And the work of an academic is more complicated than that of a student.

So, having to deal with backwards compatibility, having to test a new language feature in conjunction with all of the existing ones, having to worry about breaking libraries that worked with Python 2.7 (for instance), just concentrating on improving the API, dealing with new computer architectures that need to be supported, dealing with inter-operability with some other popular technologies, being invited to conferences as the father of a language, having to deal with lots of fan/hate mail, general time waste due to the inreased size of code base / organization, finding time to write a book about the language you have just made ... the responsibilities can suddenly pile up exponentially, but the time ticks away at the same speed. So, as complexity of things grows, the progress appears to slow down. The only way to deal with that is to throw more people at the problem, but not every organization can afford to do that. They would have to be benefiting financially from the product at least proportionally to its complexity. The for-profit model could work better in this case, although Sun & Oracle had cash but have/are not making revolutionary changes to Java now days.

These are just some things that I thought of ...

share|improve this answer
    
Does this also explain why there are fewer successful start-ups these days than decades ago? –  Dark Templar Oct 28 '11 at 3:32
    
@Jacob Hayden, maybe. One can find holes in my answer for sure. On one hand you have better tools; on the other customers are expecting more. When it comes to "winner takes all situation", such as Facebook, it has grown like crazy when social media was a new thing. It is becoming a commodity now. I predict the next big thing will be widespread genetic testing. Today people are willing to pay to find out how black / Asian / white they are. In the future they might settle for nothing less than a thorough 10-page report. First start-ups in new space can have good margins while having ok products. –  Job Oct 28 '11 at 3:36
    
Thanks. Do you know what "commodity" is supposed to mean in this context? –  Dark Templar Oct 28 '11 at 3:53
    
I don't know about aviation, but the progress of chess has definitely not slowed down in recent decades; quite the contrary. –  Konrad Morawski Oct 28 '11 at 8:54
    
@Morawski, I think there is also a perceived component to this. Chess is a well-studied problem, and ever since Kasparov lost to the computer, the software and algorithms are getting better, but they do not generate buzz anymore. We take for granted that a computer can beat a person, just as we take for granted that one can get a modern cell phone that weighs less than a wallet and can call anyone for under $100 per month. This kind of stuff used to generate headlines; now it is does not because non-sensation is non-news. I should have written about the 'perception is reality' aspect of this. –  Job Oct 28 '11 at 15:14
add comment

A lot of "modern" programming languages aren't so different to C++.

Java has classes and function calls. So does C++. Java has block structures such as if and for - which are copied from C.

A major thing that Java has, but which C++ doesn't, is garbage collection. That's no so modern - it was invented for Lisp in the 1950s. The resource management system used in C++ (based on RAII and timely reliable destructors) is actually much newer than GC.

Functional languages like Haskell and the ML family are much more interestingly modern - and have mostly been considered academic because you're likely to find them in universities, but not so much in industry - though even that is changing. Even if you don't end up using Haskell in industry, Microsofts F# is a variant of Objective CAML - ie in the ML family - and C# and Python steal quite a few ideas from functional languages.

From what I've seen, the best universities cover quite a few languages, making sure students get a good idea of the various different paradigms that go with them. Take a look at some of the Stanford University courses with freely downloadable materials (inc. lecture videos), for example...

http://see.stanford.edu/see/courses.aspx

To the extent that there's a real problem, though, the answer is simple enough...

  1. The new languages mostly don't include that many new ideas.
  2. The new ideas that do exist tend to be controversial - a lot of people familiar with older ways of working are resistant to them. The greater the paradigm shift, the bigger this problem gets - though circumstances sometimes force change, as the increasing need for concurrency is doing right now.
  3. You don't understand the new ideas (like GC) unless you know how to build them yourself, or at least work without them.
  4. A lot of the benefit in a lot of modern languages come from the "batteries included" standard libraries. But in some ways, it doesn't matter if a library is included as official standards or not - there are plenty of de-facto standard libraries out there, and once you've set up your build environment, it's a bit of a non-issue. This is particularly the case on Linux, where your repository manager can pretty much set up your build environment for you.

If you really believe that old languages never get discarded, give some thought to COBOL, Fortran and Algol. OK, they're still out there, but mostly for maintenance of old code - and the "living death" of old code in mostly forgotten languages is another reason to not jump on the latest programming language bandwagon. It takes a long time to become a true expert in any particular language. A jack of all programming languages is easily replaced, and isn't all that valuable.

share|improve this answer
    
C++ and Java are extremely different. The need for a VM, enforced reference and GC semantics in Java, performance, etc. C++ has GC too - it's called Boehm. –  DeadMG Oct 28 '11 at 16:23
1  
@DeadMG - I know about Boehm - it's not standard, and it's not compatible with reliable destructors so it violates a key rule of the C++ language - the circular references issue. As for Java being extremely different to C++ - the idioms are mainly different because the libraries are different, but the languages are mostly very similar give or take a tweak here and there. C++ templates are quite different to Java generics, Java has no member pointers but C++ needs a library to provide delegates yada yada, but considering how different two languages can be that's not a big deal. –  Steve314 Oct 28 '11 at 17:39
add comment

Languages such as C/C++ are far closer to what the metal actually executes. This means they can teach you what the machine is really doing in tandem with teaching you the fundamentals of algorithms and data structures.

Don't forget, even though C & C++ were "created decades ago", they are still fundamental to a lot of new development (see: Linux Kernel).

Also, don't forget that it actually takes time to create, review, polish and get approved new course content. The academic world is on general, more conservative in vetting changes than the non-academic world.

Having said this, while I studied Computer Science, I still had classes on .NET, Java, PHP and more.

I direct your eyes to this study of Australian University introductory programming courses and the languages they used. You will note that the highest was Java at almost 44% and the second highest was VB at almost 19%.

share|improve this answer
    
So how much farther from the "metal" is C++ compared with C? –  Dark Templar Oct 28 '11 at 2:39
    
@Jacob - basically, as far as you need it to be. Libraries can do pretty much everything for you - due to templates and overloading, they're a fair bit more flexible than in C. Even memory (and other resources) can have automatic cleanup, though (normally) via smart pointers and RAII rather than the more popular garbage collection. But when you need to do low level stuff, you can do anything that you could in C. –  Steve314 Oct 28 '11 at 4:21
3  
@Jacob: C++ isn't any farther from the metal than C. It's main difference is that it also reaches further upwards. –  sbi Oct 28 '11 at 8:08
add comment

Wikipedia has a chronological list of important programming languages. It's not a complete list of every language ever invented, but I'm not sure that would help. Counting by hand, I see the following:

  • 1950's: 47 languages
  • 1960's: 46 languages
  • 1970's: 45 languages
  • 1980's: 50 languages
  • 1990's: 57 languages
  • 2000's: 36 languages

So there may have been a bit of a drop-off in "important" languages (although some of the languages invented in the last few years may yet prove important enough to be added later). Other than that, the rate of language creation has been remarkably flat.

Do you have any alternative data that supports your assertion?

As for universities: Do you know that they also still teach Latin? Nobody speaks Latin anymore, but you'll find plenty of people who will tell you that it's important. Learning Latin helps you understand a lot about modern languages, and Latin is also the source of a great deal of great literature. C is similar (although people still "speak" it): it's the root of many more modern programming languages, and a great deal of useful code is written in C.

share|improve this answer
    
People still use Latin. How would you name newly discovered species without it? –  SK-logic Oct 28 '11 at 7:53
    
Copy-paste, of course, just like you maintain COBOL ;) –  MSalters Oct 28 '11 at 10:12
    
@SK-logic Of course people still use Latin -- they still teach Latin because it's so useful. Virtually nobody speaks Latin, though -- modern languages are more convenient. –  Caleb Oct 28 '11 at 12:25
    
These lists look pretty laughable, at least to me. Somebody may think all these languages are "important", but there's a pretty fair number there I've never heard of before. At least half of which I was previously aware, I'd still say were more "obscure" than "important". –  Jerry Coffin Oct 28 '11 at 14:57
    
@JerryCoffin, I feel the same way, but I figure that a community-reviewed list is a better source than the entirely subjective list of languages that any one person considers "important." Perhaps I should use quotes instead of italics for that word above. Nevertheless, the languages on the list are at least important or well-known enough that somebody bothered to add them to the list, and I think that speaks to the premise that "rate of language popularization has slowed down in recent decades." –  Caleb Oct 28 '11 at 15:36
add comment

Why do Universities still teach old languages? Because those old languages got it right. Sure they have rough edges, C's strings could be better and C++ could certainly be decrufted a bit. But they work. And there's no denying that. What counts more than anything else isn't efficacy of language, it's environment.

A million years ago when Mainframes were hot stuff and Dr. Knuth still had hair, we had the likes of Cobol, APL and FORTRAN (then spelled in all caps because we hadn't figured out that it wasn't cool to do that). Lisp was there too and so was Algol and so forth (FORTH wasn't quite there yet though, we're still in the 60s). However, most of these languages were fairly limited unless they were supported by the Government (FORTRAN) or Business (COBOL). Remember that the Internet was 4 computers in 1968 so getting information on a language would involve hearing about it from a colleague or some such and then going to a library, looking through a card catalog (a literal file system) and seeing if they had it. If you were lucky you could go to the source directly at whatever university or company was working on it. So knowledge ecosystems were limited.

Now let's talk about hardware. I'm just old enough to have been raised on a 386. A 386 was a God Machine compared to what they had back then. We're talking about transistors the size of cockroaches and wired collections of magnetic cores (Giving us the term "core dump") that held kilobytes of memory. These computers cost hundreds of thousands or millions of dollars. With machines being so expensive and with relatively few users, you had a lot of variation. Word and bit collection sizes that would make most of us go insane with frustration if we had to deal with them today. Bytes have spoiled us all. So what did you program these things in? Assembly on Punched cards. Sometimes you might have a machine specific higher level language to work with like PL/I or similar.

By the end of the decade, integrated circuits had started to come down in price and had begun to displace large scale transistors while memory also got cheaper. You still ran into the issue of all kinds of architectures but things were progressing. Then some bored programmer wanted to play Space War. And it changed the world. While languages like COBOL and Lisp were portable, C was the first language that was portable at a low level. Combined with UNIX (Like a really nerdy Voltron), it battled Pascal for dominion.

By this time, computers at universities were fairly common and Hacker culture was beginning to form. This led to the formation of things like the GNU project and other such initiatives as well as jokes like INTERCAL but I'm getting ahead of myself. There was a parallel stream here, the screaming birth of Software Engineering. Object Oriented Programming was not new in the early 80s but by then computers were common enough that large scale code bases were becoming hard to manage due to greater demand so it spurred development there.

Other developments ensued: the widespread use of home computers, the spread of the internet, the rise of windowing operating systems, the rise of the video game as a popular art form, and the rise of the parallel core machine amongst others.

The most important of these developments for the proliferation of languages are the introduction of the x86 and its various competitors that were folded into the IBM PC and its competitors and then the rise of the internet to facilitate language spread. So you've solved the problem of architecture portability and 90% of the market uses the same operating system. What does this do to the need for languages? It flattens them.

Why? Fundamentally language development and propagation are driven by need to solve problems. If you've got a language that works, you don't need to change it. Perhaps you add a framework here or there to streamline development or a library for task automation or the methodology of the month but ultimately you're crufting onto the language. This cruft though, it's important because there's where you get the environment from. You get culture that way and propagation follows the waves of culture.

Languages adapt and C family languages are incredibly adaptable due to being both widely deployed and extremely powerful. They also have something else, tremendous momentum. Say what you like about COBOL, there is a lot of wrapped COBOL running around out there; some of that is mutating into Java and other things but it will still being going along none the less. Some languages never really take off because they weren't designed to solve a widely scoped problem. C and C++ are widely scoped problem solvers. APL is not, at all. APL was designed to use as few keystrokes as possible in an era when that really mattered. It took it too far compared to other languages at the time and thus balance was not achieved, momentum was not gained and culture rampancy didn't take hold.

Rampancy is another key. The very best languages have something viral about them. They get inside your head and they stay there. That something viral might be monetary like a company saying "This language is win" and giving out T Shirts but I think it's more than that. Java may be a funky, crufty language but it solves a problem (several actually) and has a very powerful, meme-plague ridden ecosystem. So it keeps on propagating. And Propagation really is the key, your professors teach you old languages because they know there languages and these languages are still used out there. C is so close to the metal and so flexible that it is useful conceptually even if you never really use it. C++ is a thornier sell perhaps but I'd argue that as a much "harder" Object Oriented language than most, it serves as an excellent teaching tool.

Computer Science departments are out to teach concepts, not memetic fads. So they pick the best tool that solves that problem. That's why MIT used Scheme for so long. The modern language pantheon offers a lot of choice and therein perhaps lies the final answer. The internet has made it very easy to design, build and market a language. It can provide an ecosystem for you but it also provide a host of competitors. Which do you choose if you are teaching CS? The new hotness that may burn out soon? Which one? Why or why not? Most "fixer" languages are aimed at programmer productivity, not academic learning. And even with industrial usage, would you rather spend 6 months retraining your guys to Newfangled? I'd suspect you'd rather spend 6 months using the C++ you already have a team for and make money. Because that's the problem set in business. How do I make money faster than my rivals? I use proven technology run by smart people. So I can hired more smart people versed in proven technologies to write more code that makes me more money so I can hire even more smart people and pretty soon I have an R&D budget so I can indulge in things like exotic paradigms in Newfangled. But I'm still running in an "old" ecosystem. Because it works.

It just works.

share|improve this answer
add comment

Yes, but now a days most them are using open source programming languages like PHP, Ruby on rails etc. Past days they are used Visual basic for stand lone application. Now days that was changed into VB.Net. And machine languages like c and C++ are replaced with Java for machine level coding..........!!

share|improve this answer
add comment

You've got the wrong impression. There's a lot of "new" languages out there. Google alone has released Dart and Go within little more than a year.

As for what is used at the university. If you take MIT, they went from LISP to Scala to Python within the last 2 decades or so. Some universities try hard to pick the right languages for their courses and some just use whatever they think is established and stick to that.

share|improve this answer
add comment

Simply put, because there are no new successful languages in similar problem spaces. There are no languages which perform the same job as C++, but better enough to justify throwing away all of the experience, tools, existing codebases, etc. The only language that I can name that's even made a half-assed attempt is D, and it resembles C# more closely.

Unlike C. C exists for two reasons: C++ is an impractical language to implement, so there are some (very small) problem spaces in which C++ won't fit, and because people are too ignorant to understand how incredibly poor it is. C is not suitable for teaching as a general-purpose language any more.

One of the reasons that there are fewer new languages is because successful languages are much larger and more complex to implement competitive toolchains.

I would suggest that another reason is because people hardly know the languages they have. Especially a language like C++. You find many more people with incredible misconceptions than you do people who actually know how to use the language. People who were only taught "C with Classes". You're asking people who can't grasp that std::vector<T> is better than malloc and free to learn something? Good luck.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.