By picking the brains of Web developers and IT recruiters, eWEEK selected 10 programming languages that are a bonus for developers to add to their resumes. Even better, they’re great jumping-off points, with loads of job opportunities for younger recruits.
This is the title of an article? You might as well write an article called “10 Ph.D.’s You Should Have Today,” or “10 Companies You Should be the CEO of.” (I know, I shouldn’t end a sentence with a preposition)
Sorry…I just think it’s a sorry idea for an article, or at least a sorry title. The article should be titled, “10 Programming Languages that Could Push Your Career to the Next Level,” or something like that.
Edited 2006-09-15 23:06
“10 Ph.D.’s You Should Have Today,” or “10 Companies You Should be the CEO of.”
ROFL!
My god .. you got me on laughing myself to tears !
“10 Ph.D.’s You Should Have Today,” or “10 Companies You Should be the CEO of.”
ROFL!
My god .. you got me on laughing myself to tears !
I’m glad I could make you laugh. Did this person must have having a writers block the day the wrote it.
You know…I was thinking the same thing. LOL!
I was like…”Yeah, I’ll jump right on that. Thanks for the tip!”
If only it was that easy…
LOL
A Ph.D isn’t something you can earn in a week. A programming language is something you can learn in a week. I remember learning TCL while preparing to give a tutorial on it
That said, this article is more like “5 languages you should learn right now”. You’ve got {C# Java}, {Python Ruby}, {Javascript PHP}, Perl, and C. Once you know Java or C#, the other is trivial. The languages inside each set of brackets behave pretty much the same way, differing only slightly in syntax and APIs.
“A programming language is something you can learn in a week”
I actually learned C# in two days (having a good Java base), but doing good things and do them well in certain language, takes a lot of time; months, maybe years. I just have read my first applications written in C# and they are soo crappy….
A programming language is something you can learn in a week.
The correct statement is that you can learn the syntax in a week, but it takes years to master how to use the language. Then add years for every API you interface with (ie. just because you are a guru in Win32 API, it means jack shit if you move to Carbon). Add a decade before you become a master a handfull of API’s. A decade per handful, and there are thousands of API’s for a single language out there.
It is not uncommon to find C level kernel/driver guru’s who do not know something simple like HTML. People who have spent years mastering HTML, yet do not know Java etc etc, you get my drift.
This article is a waste of time. It’s like saying “10 languages you should speak”. Yeah, right.
Most of the languages listed do not really differ in semantics enough to require learning that much more than the syntax. Skills transfer quite readily between similar languages. The same is true of APIs. Win32 and Carbon, for example, share a great number of similarities, to the extent that if you’re a Win32 guru, you can probably program Carbon quite efficiently within a week or two.
In any case, it doesn’t make sense from my point of view to spend all that much time mastering APIs. APIs are tremendously fluid, and if you spend years learning an API, the next big thing will come out by the time you’re done. Given the limited time a programmer has available for learning, that time is almost always better spent mastering programming itself, instead of learning specific tools. Someone who has mastered network theory can learn what (usually small amount) of BSD sockets he needs to program a particular network app as he needs it. Meanwhile, a person who has spent an inordinate amount of time mastering the sockets API will probably never have to put all that knowledge to use at once, and will be hopeless when it comes time to actually design and implement complex networking algorithms.
The world is full of half-assed crap made by half-assed people that learn things half-assed and then spread their half-assed understandings to others. This “learn a programming language in a week” thing is really just an example of this. There is more conceptual effort involved in learning initial concepts than learning the particulars of various implementations (so learning Java from scratch might be considerably harder than the transition to C# which is mostly similar), but a superficial understanding of anything is just that and results in errors and lost productivity. It makes considerable sense to obtain a level of expertise in the APIs and languages that you will actually be using. It makes sense to obtain a level of expertise in whatever future APIs and languages that you will be using. This is because APIs do not change anywhere near as much as is implied by you here, and because you will be tasked with writing software that uses these APIs and your productivity is your task master’s productivity. You will find the time to learn what you are doing or your software will suck hard. I also like how you’ve naturally associated expertise with APIs with not having any time to have gone to college and obtained theoretical appreciations for subjects. Raise your hand if you studied computer networks in class as an undergraduate.
Honestly attending a tutorial session by you when you’re just reading someone else’s tutorial is pretty useless. I could eliminate you and read the documentation myself–in the end I would learn more, because I am no longer limited by your understanding of the material. That is why InformIT and all of those Sams books are so utterly useless: you’re obtaining the most basic, superficial information that can possibly be communicated to you by someone that probably only has half of an idea what he’s even talking about to begin with and it shows in the work.
This “learn a programming language in a week” thing is really just an example of this… but a superficial understanding of anything is just that and results in errors and lost productivity.
The effort required to learn a language is the efford required to map from universal concepts of programming, to specific concepts within a language. Many commonly-used languages are so similar, that there is not more than a week worths of new content for those who know a similar language to begin with.
I assert that a Java programmer can program productively and efficiently in C# (and vice versa) after not more than a weeks worth of learning. There is simply not enough of a semantic barrier between the two languages to require a greater period of adaptation than that.
It makes considerable sense to obtain a level of expertise in the APIs and languages that you will actually be using. It makes sense to obtain a level of expertise in whatever future APIs and languages that you will be using.
Sure, if you’re going to spend five years doing a project in C++, it makes sense to learn C++ to a high level of expertise. However, that’s not what this article is talking about. It’s talking about learning languages for the sake of putting things on your resume. It doesn’t make sense mastering all these languages just in the hopes you may get a job using one of them.
This is because APIs do not change anywhere near as much as is implied by you here, and because you will be tasked with writing software that uses these APIs and your productivity is your task master’s productivity.
Please. Look at the APIs listed in the article. Ruby on Rails. AJAX? Do you think these will still be in vogue four or five years from now? Microsoft ships a new API every few years. Just in the last decade and change, we’ve gone through MFC, ATL, WTL, iterations of .NET, and now WinFX. There is no point in intensely studying each of these APIs, just in the hopes that putting them on your resume will land you a job from a buzzword-infatuated PHB.
I also like how you’ve naturally associated expertise with APIs with not having any time to have gone to college and obtained theoretical appreciations for subjects.
I didn’t say anything about college. What I’m talking about is good old opportunity cost. Any time you spend learning one thing is time you could’ve spent learning something else. My point is that you’re a more productive asset if you spend months studying the theory, instead of spending that same time studying the nuances of the APIs.
Raise your hand if you studied computer networks in class as an undergraduate.
Actually, I write network code only because I know the API. I’ve never taken a network theory course in my life. However, I’m completely aware of the fact that finding a guy who knows BSD sockets is trivial, while finding a guy who can write a network formation algorithm that converges quickly is not. Moreover, I realize that the network theory PHD can easily learn enough BSD sockets to implement his algorithm, while it’d take me a long time to learn enough network theory to design the same algorithm.
Honestly attending a tutorial session by you when you’re just reading someone else’s tutorial is pretty useless.
You’re assuming that both parties have an equal level of experience. A person with more experience gains more knowledge from the same tutorial, because he is able to connect it with his general knowledge of programming. The content of the tutorial consists of that augmented understanding of the material, not just the bare understanding a person with no experience would glean.
In practice, the level of expertise necessary is dependent on the nature of the tutorial. A decent programmer who’d never used Matlab could easily come in and TA a “Intro to Computing in Matlab” course with little study. In fact, that’s precisely what happens in some cases, as Matlab classes are often administered by the CS department for engineering majors, but CS majors aren’t required to take those classes.
Please. Look at the APIs listed in the article. Ruby on Rails. AJAX? Do you think these will still be in vogue four or five years from now?
Rails might be quite relevant to Rails developers in five years, but as far as I’m concerned Rails doesn’t exist. AJAX isn’t an API. Determining the fashion of web frameworks is a different matter.
Microsoft ships a new API every few years. Just in the last decade and change, we’ve gone through MFC, ATL, WTL, iterations of .NET, and now WinFX.
Prior to the push for .NET the largest change in the Windows API was the development of Win32 like 12 years ago. MFC is mostly wrapper classes around the Win16 and later Win32 APIs. The WTL is an unsupported template library that wraps a few of the same Win32 APIs that MFC does without providing the same document interface, serialization, and so forth. The domain of the ATL is entirely different. Microsoft adapts its APIs incrementally regularly. That is not some wild upheaval. In these cases you are essentially contending with the Win32 API. You see more upheaval in the transition from DDE -> OLE -> COM. The NET 3.0 push will be the real next big change, with so much of the current .NET framework being interfaces for currently extant Windows APIs.
There is no point in intensely studying each of these APIs, just in the hopes that putting them on your resume will land you a job from a buzzword-infatuated PHB.
You study them because having expertise is valuable. Anyone that does anything poorly so as to tantalize a HR drone is a fool.
My point is that you’re a more productive asset if you spend months studying the theory, instead of spending that same time studying the nuances of the APIs.
This is hardly ever the case, since studying the theory outside of any basic requirements will have limited application to an employer in practice. Having the prerequisite theoretical understanding to obtain expertise in the framework will benefit more from experience using the framework than continued theoretical study for the purposes of producing usable code. It is not an either-or choice, but someone that is only steeped in theory will quickly earn the derision of his coworkers when they cannot do anything of use. The point is to learn both, because that is what is necessary to construct software that isn’t garbage.
You’re assuming that both parties have an equal level of experience
No, I’m assuming that anyone that professes to educate me on a topic who has less than or equal to seven days of casual experience with it is more useless to me than the documentation. I will invariably ask you questions that you do not know the answer to, and you will tell me things that are incorrect. I can avoid both problems by eliminating you from the equation. Anything that you can teach me with that experience is of marginal value, like an InformIT except from a Sams book.
Rails might be quite relevant to Rails developers in five years, but as far as I’m concerned Rails doesn’t exist. AJAX isn’t an API. Determining the fashion of web frameworks is a different matter.
Ah, so fashionable web frameworks are a different matter than fashionable APIs? So where does Java Beans, J2EE, etc, fit into all this? Beans were huge a few years ago, and you barely hear about them anymore.
MFC is mostly wrapper classes around the Win16 and later Win32 APIs.
That’s an implementation detail. From a programmer’s standpoint, MFC is a completely different API. And MFC experience is something PHBs used to ask for.
The WTL is an unsupported template library that wraps a few of the same Win32 APIs that MFC does without providing the same document interface, serialization, and so forth.
Again, implementation detail. WTL is a completely different API from Win32 or MFC. Each of the above APIs was created based on what was fashionable at the time. Win32 was created wen C was big, MFC was created when classic C++ was big, WTL was created to harness the new template-based C++, etc. Many of these are wrappers, but the interface provided to the programmer is very different, and just knowing Win32 isn’t going to help you maintain a big MFC-based codebase.
This is hardly ever the case, since studying the theory outside of any basic requirements will have limited application to an employer in practice.
It depends on the job in question, but its a general consideration too. Most programmers I know, including myself much of the time, create ad-hoc solutions to problems. The very best programmers I know use theory to create closed-form solutions to problems, at least for the most important algorithms. The latter is far preferable, and its a skill that only comes from a good understanding of the theory.
Let me give you an example of what I mean. If you ask your average programmer to write a control loop for a thermostat, he’ll likely write a little loop that turns on the AC when the temp is over the set-point, and turns on the heater when its under. If he’s clever, he might realize that this algorithm is unstable, and include a dead-zone feature. A real engineer would approach it completely differently. He’d write out the differential equations involved, then use control theory to create a PID controller, choosing the proper gains based on the response characteristics he desires. He’d not only be able to tell you whether the algorithm is stable, but its frequency response, etc. This might not matter for a house thermostat, but it definitely does for something controlling a chemical reaction. Heck, it even matters for brewing coffee:
http://www.murphyslawonline.com/silvia/
No, I’m assuming that anyone that professes to educate me on a topic who has less than or equal to seven days of casual experience with it is more useless to me than the documentation.
We’re not talking about you Back to my Matlab example, most engineering students, when you throw the Matlab manual at them, won’t know what to do with it. Descriptions like “this is how Matlab does a loop” are lost of them, because they don’t know what a loop is. That’s why even someone who has a basic knowledge of programming can digest the material and present it in a much more understandable manner.
Ah, so fashionable web frameworks are a different matter than fashionable APIs?
Web frameworks and web development in general is a special case of poor product development: of generation after generation of re-inventing the wheel in crappy ways that quite honestly disgusts my mind.
And of course fashion is an entirely different matter from the change of core APIs. The “fashion” has no substance. Ruby and Rails are “fashionable” from the Internet buzz perspective, but also have little demand. This might change or it might fade from the fashion-crazy web developer’s mind like Zope did.
So where does Java Beans, J2EE, etc, fit into all this?
J2EE is a platform that is used to deploy an enormous amount of software. It isn’t any less popular today than it was when O’Reilly was churning out a dozen new books about it. Java is one of the most popular (by quantity) platforms, that has evolved but not radically changed since its adoption. Your Java skills are simply transferable with time rather than an obsoleted fashion that you discard in favor of some new thing. “Welp, I never should have learned the Java platform because it’s all obsoleted every six months. I should just consult the online help every five seconds to figure out how to draw pixels so I can use my knowledge of Hermite polynomials to draw some curved lines.”
Beans were huge a few years ago, and you barely hear about them anymore.
Java Beans is largely just a set of conventions and some classes for component developement. That is to say that it is as prevalent as ever, being the convention used by every popular Java toolkit. Insofar as people use Java IDEs and develop GUI programs in Java, they use Beans. If you “barely hear about Beans” it’s because you aren’t a Java programmer and hear about things from the Interweb.
That’s an implementation detail. From a programmer’s standpoint, MFC is a completely different API.
No, it is not just an “implementation detail.” The Win32 API is the entire basis of the class library, with many of the methods of instances being nothing but type-safe wrappers around C functions in the global namespace with the exact same name and parameters (after accounting for the receiver, and wrapper types). You can even look at the code for MFC (it’s included) and see what little is done in many of the classes. MFC is a different API, but it is not completely different. It puts the API into a class hierarchy, adds classes that provide a document-view model, adds some collection classes, and serialization. It provides more abstraction over the C API, and fails to provide abstractions for many aspects of it. You still SetWindowLong, SetThreadPriority, CreateCompatibleDC, GetObject, GetDlgItem, SetWindowText, and all the rest only now some of them are members of instances.
And MFC experience is something PHBs used to ask for.
If I want to hire someone to write GUI programs on Windows in C++, then MFC experience is rather important. Do you think I’m going to pay you to consult the help documents incessantly because you’ve had some experience with Gtk+ and think that qualifies you for the position? If you have C Win32 API skills you still need the additional MFC knowledge because that’s what we’re using, however the acquisition of that experience is evolutionary.
Again, implementation detail. WTL is a completely different API from Win32 or MFC.
That’s not even wrong. The WTL is actually designed to be similar in many aspects to the MFC API without the same fixation on providing numerous wrapper classes for every C type in the Win32 API, making the prevalence of global namespace C API calls even higher. It in actuality provides much less total abstraction over the Win32 API than even MFC provides. In much the same way that knowing the IWebBrowser2 interface well doesn’t confer expert knowledge of every aspect of CWebView, Win32 C API knowledge does not confer expert knowledge of every aspect of MFC: it however confers a great deal and the latter builds on the former.
Win32 was created wen C was big, MFC was created when classic C++ was big,
Apparently C was big after MFC was big, because MFC is older than the Win32 API.
WTL was created to harness the new template-based C++, etc.
The WTL was created to make controls without the dependencies of MFC. It is very small, was never supported, and was largely of no consequence to Microsoft. It was included undocumented for a long time. Much unlike the sort of implication here that Microsoft releasing all of these APIs to support the assertion that learning them is a waste of time, the Win32 and MFC APIs are well over a decade old with of course new additions for new functionality integrated into them naturally so as to leverage previous expertise. Rather than throwing everything out (which would of course sacrifice most of the reason Microsoft’s grip on the market is as strong as it is, I might add).
Many of these are wrappers, but the interface provided to the programmer is very different, and just knowing Win32 isn’t going to help you maintain a big MFC-based codebase.
Actually yes it would help you considerably, but you will of course need to learn the usage particulars of the utility classes in MFC. There is more knowledge to learn than there is in a trivial wrapper like Tao.OpenGL, however it is supplementary knowledge for the most part.
The very best programmers I know use theory to create closed-form solutions to problems, at least for the most important algorithms. The latter is far preferable, and its a skill that only comes from a good understanding of the theory.
There is very little of interesting theory in the vast majority of software constructed on this planet. As an academic this fact does not necessarily sit well with my interests, however I have very many skills that are unnecessary for constructing software that people that frequent this site write. I can prove very many things that are of little consequence to most applications, and do nothing to make me adept at making actual software using the various available frameworks.
This isn’t to sell my educational experiences short, it’s to point out that it only has as much value as I have capability to realize solutions using it, and this realization requires various levels of expertise with platform frameworks. It is not an either-or proposition, it’s a matter of obtaining the level of practical and abstract knowledge that is necessary to do work, and since my knowledge of OpenGL isn’t going to become obsolete in the next three years I do not feel that the time I spent obtaining knowledge of it was a waste. A very large number of the APIs that we use to construct software do not change radically, and become the basis of why we find employment. I’ve become adept at many APIs over the years, and they have been instrumental in my employment successes prior to deciding to obtain a Ph.D.
That’s why even someone who has a basic knowledge of programming can digest the material and present it in a much more understandable manner.
Someone that has less superficial knowledge of Matlab can do the job better because they will not rely on faulty incomplete knowledge of a topic. In any particular case it may not have a bad result, but as a formula of behavior it is just going to be a waste of time. I’m not going to be asked to tutor a subject I’ve only had seven days exposure to simply because it rests near something I have some expertise in, or at the very least I shouldn’t be unless the information I’m expected to provide is equally superficial. In general someone has already done the tutorial better.
Let me focus the argument a bit, because its scope is rapidly spiraling out of control.
Regarding Win32, MFC, and WTL. I’ll concede the fact that they are a poor example of API churn. I’ve always found them rather drastically different in principle, if not implementation, but I don’t think its worthwhile to argue it.
Let’s go back to the post that precipitated this thread. The orignal poster to which I replied talked about all the thousands of APIs there are to learn, and how it can take months or years to master each one. My point simply is that I don’t think all those thousands of APIs are worth spending months learning. Indeed, I think very few APIs warrent that kind of study, especially on the context of the resume issue this article refers to. We’ve got a data acquisition program at work that uses DirectX for display. The typical PHB description for the job requirements for someone maintaining this would be “must be experienced with Windows sockets, DirectX, and driver programming”. In reality, a superficial understanding of the first two is all that is needed, because frankly, the program only makes superficial use of these APIs. In considering how many APIs to learn, and how much of each API to learn, it can’t be forgotten that most apps use only a small portion of each API. Competency, not mastery, is usually the more important thing with regards to APIs.
To address some specific statements:
If I want to hire someone to write GUI programs on Windows in C++, then MFC experience is rather important. Do you think I’m going to pay you to consult the help documents incessantly because you’ve had some experience with Gtk+ and think that qualifies you for the position?
I’m not advocating applying for jobs in which you have no experience in the primary API being used. However, I think its fair to say that in choosing between two canidates, one who is competent in the API and one who knows it in and out, each person’s additional skills become much more important.
To put it another way, I’d rather have a guy who knows most of the API, and understands the theory behind it, than someone who knows every detail of the API, and doesn’t. Because that’s the trade-off that’s got to be made. You can learn as much as you’ll likely ever need to know about an API in a relatively short amount of time. It takes far more time to really master the ins and outs of the API. Most of the time, its better to use that extra time learning something more important. Someone who knows BSD sockets in and out, but doesn’t know networking theory is going to write crappier code than somebody who might need to look about the exact semantics of an ioctl, but actually knows what TCP/IP is doing.
There is very little of interesting theory in the vast majority of software constructed on this planet.
There is a lot of software that requires a theoretical basis. Moreover, there is a lot of software that should be rooted in theory, but are not, because programmers in general pay insufficient respect to the importance of theory. Recalling my thermostat example, I’m sure there are a huge number of programs controlling various parameters that are not rooted properly in control theory, even though they could be and should be. The same is true for networking software and network theory (BitTorrent is a refreshing example of software that is rooted in at least some level of theory), etc. Consider something like an OS kernel. Outside the domain of security, very few algorithms in OS kernels are rooted in theory. Yet, its clear that you can apply theoretical analyses to algorithms like those for scheduling, paging, etc.
Someone that has less superficial knowledge of Matlab can do the job better because they will not rely on faulty incomplete knowledge of a topic.
Sure. A Matlab expert is a much better person to give a tutorial than a CS student. No doubt about that. However, for all practical purposes, in many cases, the CS student is a perfectly adequate (and cheaper!) substitute. The additional expertise would largely be wasted on an audience learning the material at a low level. Which is why Universities work the way they do, with introductory students learning much material from TAs that have barely a better grasp on it than themselves, because in practice, you often don’t need any better.
Yes…I have friends that can pick up a language very quickly… I am not that type. It took me forever to pick up PHP, and now trying to learn Ruby.
I just think it is funny that the article says “Right Now.” As if you should start learning all 10 at once.
Picking up programming languages is usually pretty easy when you’re dealing with similar conceptual models to languages that you already know. Learning them in a week is a gross overestimation of one’s abilities or a testament to how much of that week is obviously being spent to learning the idiosyncracies and variations from that which you know. Especially with absurdly complicated languages like C++, anyone that says that they’ve learned the language in a week should prepare themselves for some serious quizzing by me. I know very many programming languages, and not one of them did I obtain any meaningful expertise in within one week’s time. Recognizing similar constructs and picking up syntax is trivial, but actually knowing a language well is usually a bit more involved. It probably shouldn’t take that long, though, unless it’s one of those ridiculously complicated languages with so many corner cases you question the existence of justice in the world.
As of a few years back, it’s now okay to end a sentence with a preposition, according to the Oxford English Dictionary. The preposition thing was based on Latin grammar, and modern English only borrows elements from Latin; a lot of its grammar still derives from Anglo-Saxon (like the little connector words), which has more in common with Icelandic than with Latin.
You can be the CEO of anything you want to be the CEO of.
No Object Pascal?
No C++?
bad article.
No Object Pascal?
I don’t see many job opportunities for Object Pascal. Most of the listings I see are for exactly the languages listed in the article.
No C++?
That is a good one to know but I don’t think it is going to get any more popular at this point. There are a ton of better object oriented languages out there that don’t have all the problems that C++ has today. I don’t see many people starting projects with C++ anymore, mostly just maintenance.
Well im sure Qt/KDE developers won’t aggree with you.
and btw, I make a living making programs with Delphi aka Object Pascal.
and btw, I make a living making programs with Delphi aka Object Pascal.
The problem with Delphi is that if Borland ever tanks or decides to end support for it, you’re up shit creek without a paddle. What else are you going to do with your Pascal knowledge? Are there many jobs available for Freepascal programmers?
At the moment, I’m learning C#, and that (with the .NET framework underpinnings) is quite a task, so I’ll be on this one for awhile. I’m sure I’ll get around to the other 9 eventually
Ummm ever heard of lazarus?
Well im sure Qt/KDE developers won’t aggree with you.
I can say with 100% certainty that I have never seen a job listing for “KDE developer”. What I can say is that I have seen listings for C++ maintenance programmers, a lot of them. Maybe things are different where you live but here the list is perfectly sensible.
And I program an operating system kernel in Object Pascal. People may not want to admit a Pascal into Cori Celesti, but it’s still a Real Language.
Delphi user here, too. Object Pascal is a brilliant learning language. No beginner should be without it. BASIC is a crappy learning language.
I agree with you on Basic, and would go so far to say it is a crappy language for anything.
I think Object Pascal is a good language to learn on, but I think other languages, like Python for instance, are better.
I don’t see many people starting projects with C++ anymore
I wonder what the gaming industry would say about that ..
oh, haven’t you heard? Quake 5 is going to be written in Java.
rofl, again !!!
that’s exactly what I thought !!
It’d be funnier if the lead developer at Id hadn’t been experimenting with Java for mobile games recently. Although since they sold the rights to Quake I doubt there will be a Quake 5…
Hell, any industry. C++ is still the language people start from, outside of the web-development or business applications community.
That C and C++ are the development languages of choice. Unless you’re one of those mobile Java developers working on games for cell phones. I have absolutely no experience with that, however.
Hmm…What do you have to say for complex system software. Are they going to be written in Java,PHP, Perl or C#.
I used to work for a networking company who implemented all their network protocols in C++. I was also intern at research institute who had all their testbed code in C++.
I don’t think C++ is loosing ground.
Tejas Kokje
Edited 2006-09-16 00:04
Someone mentioned C++? Quick, to the fudmobile!
No one has actually provided any proof to the contrary. From where I’m standing, and from what I’ve heard from friends living elsewhere, C++ jobs are easy to find but consist of mostly maintenance coding. Most new projects use Java. Posts about individual usage of C++ aren’t an argument at all. Just look up programming jobs in Careerbuilder or check your local newspaper. We’re talking job prospects here, not the popularity of the language itself, and personally I wouldn’t want to end up like all those COBOL programmers.
yeah it wasn’t too great.
fact is at least half of those are just the current buzz words in the industry. a year from now they’ll be replaced with new buzz words and continue the vicious cycle.
and not that i really think their “job availabilities” number is accurate, but how could someone say you should run out and learn ruby/rails as fast as you can if there are only 210/54 jobs available compared do the 6,000+ C positions. sure ruby is getting alot of press lately because of rails, but “learn right now”? c’mon.
Stop living in the past, I guess.
No Objective-C?
No tcl, no jython, no lua ? Bad article!!!
Jython is invaluable for very rapid Java scripting.
TCL is the temple of scripting.
Lua for embedded scripting in C,C++.
ObjectiveC -> I think there is an OS called MacOSX.
FPC (Pascal) -> I think Delphi migrates to .$H1T
If C# is on the list, would that mean that Mono would a language worth learning?
Not sure, but to be honest, and as far as I’m concerned, if C# is on the list, it only means that you should stop reading the article and do something better with your time ..
I did that …
Agreed. I skimmed it over and saw C#, VB.Net, and Java. No need to keep reading in my opinion.
The article was talking about job availability, and Java is a very popular language.
Java: 14,408
C: 6,164
AJAX + Javascript: 5,512
C#: 5,111
Perl: 4,810
VB.Net: 2,090
PHP: 1,152
Python: 811
Ruby+Rails: 264
Yeah, why the hell is C# on the list?!
Oh, yeah, because knowing it makes you much more attractive to a large number of employers. That is pretty much the point of the list, not which languages are cooler, or which languages YOU like.
Mono isn’t a language, it’s a framework…you would still need to learn C#, VB, python, etc…but yeah Mono is a great way to learn the basics of the .NET framework.
answer to quake 5 in java
lol it would be insanly slow if it was true
dynamic languages are terrible for aplications that are performance dependable, games are such, and by the way, gaming industry at the moment, profits more that films industry
BTW, if you know the basics of programing ways, you can easily learn any kind of language, will it be imperative, logical, functional or object oriented, dynamic whatever language, leanr the basics and you can program anything.
Edited 2006-09-15 23:46
dynamic languages are terrible for aplications that are performance dependable, games are such, and by the way, gaming industry at the moment, profits more that films industry
First of all, Java is far from a “dynamic” language. Secondly, there’s no reason a “dynamic” language can’t be fast, see: common lisp.
Edited 2006-09-15 23:58
Common Lisp will usually get you 80-90% the performance of C, but game developers want that last 10-20%. On the other hand, these days, the GPU does so much of the work, that it might not even make a difference.
In general game developers desire predictability and the ability to optimize critical sections. This motivated Naughty Dog’s design choices with respect to GOAL, which any true Lisp zealot will drag out for all to see that Lisp can be used to develop games that people will actually play. However the one thing not even writing your own Lisp dialect will do is provide you with programmers that are experienced at writing games in Lisp. You have to see some serious productivity gains from the language to makeup training developers, limiting your dev tools, and possibly incurring all of the R&D expenses.
In non-critical areas it isn’t entirely uncommon to see various DSLs or general purpose scripting languages used in games that are many times slower than any Common Lisp compiler’s output.
That’s by default. It’s not impossible to create a compiler for a dynamically typed language that can be completely overrided by the programmer at a cost of flexibility. Basically, C/C++ force you to care about performance from the start, whereas dynamic languages default to flexibility but can be overrided. The only reason you don’t see a lot of the latter is that programmers tend to be a lazy lot, and apparently compiler writers don’t mind shoving complexity onto the user (programmer) rather than doing it themselves.
Why not Q5 in Java?
http://www.bytonic.de/html/jake2.html
This is far from insanely slow, it’s just showing decent performance, I tried it out myself.
Microsoft even wants to replace DirectX with a managed environment.
I think that you are mischaracterizing Microsoft’s intentions with respect to DirectX and .NET. MDX and XNA do not replace DirectX–they are essentially wrappers for it. Those wrappers are not at least currently intended to replace the development of applications with C++.
Well, according to this list, if you want to develop a non-Windows, non-web-based app without using Java, you’re stuffed.
I’d say there’s plenty of money to be made with Cocoa for a start. And, there’s plenty of opportunities available on the Linux side.
I guess the point of this article is to tell people which programming languages are the most popular (and therefore will get you the most jobs). However, if you ask other, perhaps more enlightened, hackers out there, the list would most likely be very different. I imagine Smalltalk, Lisp, Haskell, and other less mainstream languages would be on the list. Instead of just getting jobs for you, these languages would teach you different ways of programming, making you a better programmer.
The languages in the list, for the most part, don’t really offer new ways of programming, but simply different syntax for the same way. PHP5, Java, C#, VB.net, and Ruby are all object oriented (though PHP programmers probably don’t do must OOP considering PHP4’s object system). Wouldn’t be better to learn Smalltalk, the language all of these other languages got their goodies from? Who wants bad copies when you can have the original? Lisp has no equal in this list.
If you want to be a mediocre-decent programmer, then these languages are fine. If you want to be a good programmer, an excellent programmer, then you need to expand you horizons a bit and check out more interesting, yet unpopular, languages. You probably won’t get a job programming in them any time soon, but you’ll be able to carry the knowledge learned from them to other languages.
I wholeheartedly agree. I think a good programmer is one who seeks to broaden his views, learn new ways of solving problems, new perspectives. Learning languages that vary greatly in syntax and “way of thinking” will make a programmer improve even if she/he never uses those anymore after having learned them. Curiosity is very important there, I think.
Learning a wide range of languages that all look and work alike without needing to is probably a waste of time. I think the article is more about “Languages you should know to get a job right now” rather than “Languages you should learn”. In any case, most of those can’t really work as “bonus” to add to a resume.
Edited 2006-09-16 10:52
#1 C++
#2 Java
#3 C# (or VB.Net essentialy the same)
#4 Delphi
#5 Perl
#6 PHP
#7 Python
#8 COBOL (I know this is furious pain in the arse, but $$$)
#9 ASM
#10 Javascript
Seriously… I named 10 langage here, and with those 10 I can almost program on any plateform existing (especialy ASM) and get a nice job with it. I didn’t put Ruby here because I find it overhyped for the moment, even if it DO the job perfectly well. Also note that the 4 first will get you through almost 80% of programming job offer, if it’s not more.
And as I always say, keep in mind that once you learn a programming paradigm, you can learn any langage using this same paradigm, i.e. C use procedural, so is PASCAL and BASIC; once you’ve learn object oriented, C# and Java is a breeze… you all know the catch. This is why usualy procedural programmer tend to have hard time to learn object langage (as I did when I switched from C to OO C++).
I’m still wondering what will future programming paradigm…
The problem with learning COBOL is you also need to learn the mainframe environment (and JCLs if you are on an IBM mainframe). To get good with them takes years, AND you have to have access to a mainframe environment.
I worked as a consultant for Merrill Lynch for four years, with a large group of mainframe programmers (COBOL and JCLs on an IBM mainframe) (I was on of the few “PC” programmers on the floor), and I can say with certainty that you won’t pick up COBOL, JCLs OR the mainframe environment in a week. Or a month. Or a year. That is going to take a lot of time and effort.
Probably the best bet would be to go to a community (junior) college that still offers mainframe courses. At least then you’d have a shot.
I would prefer to focus on this eight languages instead.
Python
JavaScript
Perl
C
C++
PHP
LISP
XML
Nice list, though mine would be slightly shorter.
Python
Perl
C
PHP
XML
When I get a new project I program what the stakeholders in the project require, or what I suggest, if I can. Different tools for different jobs. Part of computing I like is new challenges to be honest.
I see no functionnal programming languages in their top10. I thought everyone knew by now that knowing Lisp or ML or Scheme or … makes you a better programmer.
Seriously, learning PHP or JavaScript or Perl or … to get a job is like asking for a boring job with a low salary. Learn concepts, not languages.
I think learning C then Java or C# then Lisp or ML is the way to go. It’s all your need: you will learn the 3 big paradigms. If you have some more time in your hands, don’t learn more languages, learn more concepts. GUI programming, multi-thread programming, network programming, distributed stuff, etc. Printing “Hello World!” in 50 languages won’t give you a job. However, if you know many concepts, you will be a better candidate.
Too bad most people don’t know that. But the truth is that making an multi-thread application with a GUI that also operates on a network is much harder to do than learning 50 more programming languages.
My 0.02$
In other words focus more time learning Operating system concepts then many languages
Edited 2006-09-16 03:20
Focus more at being able to make things, and make them well–preferably in topic areas where people are willing to exchange money for your work. Ignore random websites professing to tell you how to succeed with formulaic gimmicks.
I skimmed the article and am not in the CS job market so I may have missed something, but I wonder where they found their job availability numbers, they seem suspect. Also I have to wonder how many people would get a job programming in e.g. just Perl anyway as opposed to using it in conjunction with other languages. This seems like a pointless article.
“One of my mentors once told me that a programming language is just a programming language. It doesn’t matter if you’re a good programmer, it’s the syntax that matters…”
Actually, I knew some very talented programmers using VB. I knew a guy who wrote a sophisticated algebraic expression evaluater in maybe 50-100 lines of code. Another guy wrote a Sonic the Hedgehog/Mario type scolling game in very concise and simple code. I’ve known some very awful programmers using C. I once tested a C program that used a data structure a library implemented. The memory usage jumped from 100k to 5mb easily. The guy who wrote the library was awful at checking for memory leaks. Personally, I’ll never stop enjoying the simplicity of C. But again, syntax doesn’t really matter when it comes to procedural languages in determining how good of an engineer you are.
I’ve had to “re-train” programmers so many times who think they know Java (or Delphi etc), but don’t really understand MVC concepts for instance or even OO etc… Any programmer worth their pay can pick up syntax very quickly, but picking up concepts is another matter…
I would prefer someone understood the concepts needed for a project over the language (if I had to make a choice – of course if they knew both, then that’s a bonus :-).
If I was to suggest to someone starting out or to design a programming course this would be what I would suggest
1. Python or Ruby – Start with an easy to learn langauge to pick up the basics ( control structures, functions, classes etc) with little programming overhead
2. C – So many fundamental concepts you pick up learning this language eg understanding of low level mechanics, typing and memory management
3. Haskell or Lisp – Functional programming concepts
4. Java or C# – For OO programming – data hiding, interfaces, abstract classes etc
Edited 2006-09-16 03:17
Here is the way I’d do it, in chronological order:
1) Scheme or ML. Start pure, don’t get the important CS concepts mixed up with hardware-stuff better left to the computer enginering guys.
2) Lisp. Not from the functional angle, which would’ve been introduced adequately in the previous class, but from a “practical programming” angle. Even though Common Lisp is not commonly used, tremendous amounts of real world things (design patterns, OOP, design of APIs, etc) can be expressed very conveniently in Lisp.
3) Smalltalk or Java or C# (in that order of preference). For OO programming, etc.
4) C or C++. I put this here because learning C/C++ will ruin somebody who doesn’t know Lisp, Scheme, or ML first. A computer scientist should be thinking in terms of functions, values, and types, not pointers, blocks of memory, and word sizes. I always wish I’d started with something like Scheme first, because to this day I have to fight the urge to think about pointers and blocks of memory.
I’d also throw in some special topics for a vector programming language (eg: APL), a logic programming language (eg: PROLOG), and a concurrent programming language (eg: ERLANG).
I wonder why on earth the author feels the need to push languages as though it is best to learn “x” language for an easy in or better paying job.
My foolish advice stick with what interests you and learn everything around that language as well as patterns — can’t stress that enough. Writing code is one thing but actually knowing how to design in a widely accepted structure will be good for not only you but the people you work with, plus you will definetly stand-out from the crowd.
No one mentioned assembly. I believe no programmer should be without it. If you cannot produce a reasonable description of how your Java or Ruby or Lisp program actually executes on the CPU, then you’re not a real programmer in my book.
You’ll never be able to work with embedded systems, kernels, drivers, or write a really good audio/video codec or high performance video game without it.
Thats not really true anymore. These days, “embedded” systems can be quite powerful. I worked on some code that targetted the JTRS spec for military radios. It had to be fully portable, using an OS-agnostic and language-agnostic CORBA-based framework. We’re talking about everything down to handheld radios here, running a full CORBA ORB. No ASM in there!
Most kernels these days have minute amounts of ASM hidden behind a few macros, and that doesn’t require the ability to program in ASM so much as it requires a rudimentary understanding of it, and the ability to use a manual.
As for games — even as of Quake III, the assembly code was limited to a few functions, and only then because they needed to leverage MMX and SSE. These days, the GPU does so much work, they may not have even that.
Edited 2006-09-16 04:58
I am a Java programmer and I always spend my time on Java programming from design pattern to API exploration because I always think that even I can use Java to make a good application, learning a language needs endless time to create second-to-best applications because I believe there is always a better way to do things so there is no best way. However, when I need other programming language to help, such as J2EE web app + AJAX(or simple javascript), I just use them. Being a programmer for some time now, I would say:
1. Master(program without thinking on API usage) a language and some most common design pattern
2. Learn other languages that can fill out the holes of the language you master
Like Java, I can do almost all business applications using Java but when I do game programming, even I can code the rendering part in Java in few minutes, I would still rather choose C++ to do event handling because Java event handler has too many overhead; I program web applications in Java but with Javascript’s help as well. I think the article is a bit misleading, it should be: 10 important modern programming languages and you should learn at least one of them.
just my $0.02
C++ was my favourite language for sometime before i got to know more about it. Here’s why i hate C++
1. templates…really they are so hard to read and once you have nested templates the brain needs to be a compiler to understand it.
2. polymorphism, virtual functions and compiler dependent implementations…no fun
3. exception handling…i know some people love exception handling but for me it makes the code so difficult to debug specially if the exceptions are handled in an outer function. As soon as you hit exception you can jump out of several functions unwinding their stack and doing so much that probably was important for you to debug…
there are many more things like this which make C++ hugely complex actually to the point that i now equate it to Perl.
It is a good language but because of all the things it can end up being so complex….just look at boost libraries if you don’t know what i mean.
Visual Basic made the cut… I mean seriously, anyone who tries to make a serious commercial application in Visual Basic needs to be taken around back of the woodshed with a 30-06. It’s a cutesy learning tool for creating horribly bloated crapplets (the infamous one meg ‘hello world’ comes to mind), NOT a serious development platform.
VB is still popular and so it “made the cut.” If you should be surprised by something, it should probably be the presence of Ruby and maybe Python. Further the version of VB selected is the .NET incarnation, which has the same overhead as C#.
Come to think of it, I think UnrealEd was orginally written in VB. Better load up your boomstick and take out Epic for its previous crimes against humanity.
And people who are ignorant about languages should be shot too.
very important and also really different from the other languages.
and how about xslt?And English 😉
If something who didn’t do any coding at all reads this and starts to learn 10 languages – ouch.
I would tell him to pick one language or two and lern those well. The rest are a lot easier then.
I think Euphoria would a good language to teach people how to program and establish that foothold needed to migrate to the more complex mainstream languages.
No, I’m not kidding. If you’re wanting to do anything in scientific computing then you’ll need Fortran90 and C.
Okay, so I admit it’s fairly specialised, but I’d be surprised if there weren’t more jobs available than for Ruby on Rails. And probably better paid, too
The list is cool in a trendy kind of way, but hardly reflects trends in the real world now.
I’d say (keep in mind I’m talking about my country, which will probably differ from yours):
– If what you want is a job, learn either COBOL or Java. This will get you a job. Probably not a very interesting or high-paid one, but a job nonetheless. If you go the Java way, back it up with some Spring, Hibernate, Struts, JUnit knowledge and you’re all set.
– If you want a web job, which also won’t have a very good salary, learn very very well HTML, Javascript (and those trendy AJAX concepts), CSS and at least some basic design concepts.
You could go for some middle ground complementing that HTML+Javascript with something like PHP or Java.
– Instead of Java, go for C#. Not so many job offers right now, but with some ASP.NET you can find some.
– If you want something better paid, but harder to find, try C++ or C. Delphi may get you a job at a smaller, more traditional software company, but I don’t know about salary.
– Languages which may not get you a job but will probably be a nice complement and increase chances: SQL, XML, XSLT, Perl, Python.
– Languages which you should learn for your own good: Lisp, Assembler. I’m tempted to put Ruby here too, but maybe it’s just because it’s what I’m learning now. It does look fairly interesting, beyond all that hype, and it does give you a good insight into languages in general.
Just my 0.02€
IMHO, a good combination of languages would be:
– Smalltalk, to learn OOP. This might be a good starting point. Get some experience.
– Haskell, to learn functional programming. Also understand why it’s inherently slow, and how this is treated by modeling side effects again.
– Lisp / Scheme, to learn the power of domain-specific language extensions. Understand why it’s not a functional programming language. Also learn to deal with an ugly syntax and understand why it is useful.
– Assembler, to understand how computers work. It helps a lot to understand performance issues, as well as technical terms such as “memory leak”. Don’t learn this too early. Understand how other languages are compiled to ASM.
– Java / C#, because it’s still one of the best tools to get real work done. Apply the experience from the previous steps here.
No XSLT? Everybody who thinks AJAX is a language raise their hands. The section on php made me laugh til I cried.
Scheme/lisp would really help learning the rest a bit more trivial, plus, knowing lisp would really help out a lot with those using emacs (most developers use this tool).
Also, a dash of assembly for any modern CPU would help a bit too. Too much detachment from the fundamentals of CS leady to bulky inefficinent code.
This list is very industry-guided. It takes a look at what is really popular *right now*, and to some extent I guess it hits the nail right on the head. I don’t know if the list was made in any particular order, but I think some languages are currently losing their ‘hotness’ (perl and php) and some are still gaining (javascript/ajax.. this really should not have been two entries).
Something that gives me hope is that a few of the languages on there came from very programmer-centric pushes. In particular, Ruby is admired for it’s elegance by experienced programmers and Python’s syntax is admired for it’s elegance by experienced programmers and computer scientists. It makes me feel as though we’re finally getting out of that age where everything has to be written in (X) language because everything else is written in (X) language.
There’s much more of a consensus these days that you chose the right tool for the job, which I would imagine is going to lead to a few very positive results. New programmers will start to learn more complex but useful high level semantics as they learn their trade, and they’ll learn how to “think” better because of it. New programmers won’t trip up as much, and won’t be caught in horrible (or complex, or you could argue they are equivalent) languages because of some pre-existing cargo cult.
As time passes I think, if you hold your ear to the ground in the OSS circles and see stuff like RoR or Django start to steamroll into popularity, you will be able to make up a list like this 3 years before someone like eWEEK does. This is particularly excellent for the future of software and programming, because OSS programmers are those who love to program and who love to make good programs in beautiful ways.
There are 7 languages I feel are worth learning.
Python – In a utopia, we’d use Python for everything
C – libraries and drivers (you just need to know it)
Haskell – programming without side effects (functional programming)
Scheme – cleanest syntax ever (functional programming part 2)
Erlang – concurrency and scalability (All languages need to bow down to the language that solved the concurrency problem)
Eiffel – superior OO techniques (design by contract)
These languages are worth learning not because they are hyped, but because they introduce you to different important programming and design paradigms. Exposing yourself to different paradigms stretch your problem solving prowess and experience.
Then again, these days a language is almost irrelevant if it doesn’t have good libraries. So I understand the choice of languages in the article.
Edited 2006-09-16 20:19
1. vb script
2. basica
3. foxpro
4. batch language
5. html
6. turbo pascal
7. powerbuilder
As far as I am concern Delphi is better than VB .Net, Delphi handle Client/Server application more efficiently than VB. The codes are flexible and provides a straight forward coding without any standard dependancy, the syntax are even cross-platform, running even on unix or windows. With the Intraweb components of delphi you can already manage a server type application, programmers know that.
It’s also Memory efficient and code are organized to provide an easy execution.