Which Language To Learn?
LordStormes writes "I've been a Java/C++/PHP developer for about 6 years now. However, I'm seeing the jobs for these languages dry up, and Java in particular is worrisome with all the Oracle nonsense going on. I think it's time to pick up a new language or risk my skills fading into uselessness. I'm looking to do mostly Web-based back-end stuff. I've contemplated Perl, Python, Ruby, Erlang, Go, and several other languages, but I'll put it to you — what language makes the most sense now to get the jobs? I've deliberately omitted .NET — I have no desire to do the Microsoft languages."
I mean, I don't see php or C++ going anywhere anytime soon....
-- www.RoachMcKrackin.com
Still in demand and it will not die.
Industry constantly tells the Universities they need more C/C++ programmers for industrial systems. If all you are looking at is web based development, you are seriously limiting your options. I suggest a less restrictive filter on your search parameters.
Every mans' island needs an ocean; choose your ocean carefully.
"What language makes the most sense now to get the jobs?" What jobs?
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Java (as much as I hate it) - and C++ (as much as I lothe it) aren't going away or drying up - but they have flatlined
You can see the "fast risers" like Ada (WTF?), Objective-C (i.e. iPhone/iPad), etc. - but these are generally very vertical (specfic-purpose) languages.
Have you thought about one of the languages spoken on the Indian sub-continent?
Nate
I would go for Chinese.
Try Finnish, Oracle hasn't bought Finland yet.
Win or lose, either way you'll earn money.
No language is more universal. No language is more direct. It will never die. It transcends trends. It is the only decent language to me, having tried way too damn many in my life and always left wanting until I return to C.
It is the perfect language. People might gripe that it's somehow "obsolete" or missing "modern" features, but to me, that's part of its appeal -- you get to do with it exactly what you need to do, and that is the essence of programming to me. Leaving too much to the language makes me feel powerless and less in control.
I love C. If it was legal, I'd marry it.
Lisp already exists.
As someone who has worked in software development in various capacities for over thirty years, I find your comments puzzling and your concotenation of those three languages even more mysterious. If you are talking about the corporate world then please be aware change comes exceedingly slowly. COBOL and Fortran were king into the nineties. Now Java and C++ have replaced those two and aren't going anywhere- Java for enterprise business applications (with or without a web front end) and C++ for anything where performance is of the essence. Microsoft tried ton replace Java with .net and failed. Nonetheless, it still is the number two platform in the corporate world. So having skills in the enterprise version of Java and/or being a c++ wizard guarantees you a programming job for the next 20 years. I don't know where you have been looking, but jobs haven't fallen off in those two domains and won't.
PHP is a whole different animal and really shouldn't be mentioned in the same breath as the other two languages. PHP was the choice language for web development for mom and pop sites (yea, yea I know, yahoo) and startup quick and dirty websites. Ruby became the platform that "cool" web developers came to prefer, so yes if you aren't interested in the corporate world, learn ruby and rails. Of course, since I pay less attention to that sector, maybe there is something newer and cooler these days.
Python should be in every programmers tool set because it is such a versatile tool. Unfortunately it's not enough in most cases for a guaranteed job.
First, you're limiting yourself far too much. This seems like a 'narrow the parameters down so far that when I fail it's not my fault' question.
A good programmer can pick up any similar language in short order. I won't say it's easy for a C++ programmer to pick up one of the LISP-likes, or vice versa... it's not. But a C++ programmer such as myself has little problem with Java other than the API bloat. I prefer Python to Ruby or Perl but can work in any of those. And PHP is the retarded brother of C, $so $that's $doable $it's $just $syntax $issues.
You want to limit yourself to web backends? Fine, go Ruby and PHP, but what you really should be doing is just picking a language and learning the /algorithms/ and interfaces to actually solve real problems and learn how to work with third party things like PostgreSQL or memcached. And learn JavaScript. You can't do well on the backend if you don't understand what's going on with the frontend. It's all an ecosystem, and the interactions are far harder than the mere syntax of a language and its APIs.
Not to sound assholish, but if I were a PHB why would I want to pay you $40,000 a year to make intranet and internet sites when I can go to Vietnam or India and get the same job done for a few hundred bucks? Go to elance.com? They are filled with people paying $100 for formally $15,000 worth of work and people are dying to take these.
Intuit offers customers a website for only $29.99 and $15 a month. Why hire you or your employer to write it?
Do what is needed here at home which deals with business processes. Go back to school and get a supply chain management endorsement on your computer science degree and specialize in business process programming. This has been outsourced but is coming back because you can not outsource business processes duh. A business or software analysist is nice if you get an MBA. I would aim for that route. This is the new global economy and management positions are the only jobs left that are white collar and safe.
http://saveie6.com/
One interesting point that stuck with me was that the Python evangelist sitting on that panel suggested learning JavaScript, by pointing out that it runs on something like a billion devices. It can even run on the back-end, using node.js -- watch near half-way through to see how it can even provide the same interactivity whether JavaScript is enabled or not, by converting client-side interactivity to server-side POSTs.
I'm a C/C++ developer (mainly C) and I enjoy it. I don't enjoy C++, but I'm paid to use it, so use it I do.
I've been dabbling with scheme for fun. It's very different to C, C++ or any of the other languages you mention, but a couple of hours reading about it and playing with it will really open your mind and be a bit of fun.
By ignoring the .NET languages, you are obviously intelligent and discerning; you don't merely want to follow the heard into a boring, run-of-the-mill job. Good for you. 15 years ago I started to learn Linux when everyone was laughing at it (and me for using it) but I'm in a great position now.
The other language I'm about to try is D which was deliberately designed to address many of the shortcomings of C++. It's a lot simpler and much more pragmatic that C++, by the looks of it. For a start, it doesn't pretend to be backwards-compatible with C, bit it is ABI-compatible. It has a clean syntax, fast compile times and some interesting concepts borrowed from ruby and python.
Ruby is the scripting language I'll be looking at next. I learned PERL a while back for work, and it is a nightmare, but a very useful one. Ruby is much less of a nightmare and much better than PERL at what PERL was intended (notice I didn't say designed) for.
Whatever language you choose next, pick an interesting one... How about creating your own for a challenge?
Stick Men
I intentionally tried to avoid MFC, and learned it anyway. I avoided .NET like the plague, and work moved me right back to the plague.
Since .NET 2.0 it's been a stable API, and if you're going to do web or web/desktop development, it's a good thing to have in your back pocket. And I'm saying this as someone who intentionally avoided it.
I picked up Prosise's MFC book so I'd know what MFC was doing behind my back, and I dropped wxWidgets once it became clear it was an MFC "port" - if you don't believe me read the wx history. I intended to stay classic MFC all the way, and learn something else - anything else (but Java, that's my ideology and just as unfounded). Qt and... whatever the dominant web language was in 2001.
I write .NET for a living. If nothing else, you can be read-only with .NET like I am with Java. I can search for an algorithm and find a public domain or otherwise compatible implementation, and if it's Java I can port it in a few minutes and have what I need - whether it's .NET or C/C++, which is where I prefer to work.
Learn .NET, even if you are working in a full open source shop. There are lots of open source programs available only in .NET, and a free compiler (not the GUI, just command-line).
I don't have mod points, so I'm just backing up dreamchaser (49529). I can write x86 assembly (att or intel), C (K&R, C89, C99), C++, VB5/66, VB.NET/C#, ASP 3, JavaScript, VBScript (cscript and IE), SQL (MS and Oracle) and lots of others less proficiently... so it's not like you can't learn multiple languages. In fact, the more you know the better. I write better .NET code because I think in assembly when performance matters. I write better ASM code because I think in OOP when code clarity matters. Yes, I probably need mental help, but the more you know the better you will be. The more ways you can think about something, the more solutions you can weigh when you have to actually implement something.
Here's the best part. Learn what .NET does *wrong* and avoid implementing that in your apps, or avoid using constructs like that in whatever language you get paid to use. Learning .NET has made me a better C++ programmer, far more than any other experience in my life. Both for the good parts and the parts that could be better.
You'll want to learn to use ILdasm if you go this route, no question. Obviously my vote is .NET.
Search sourceforge for stuff in .NET languages, C# is probably going to be more familiar, download the free compiler from MS, compile, make changes, and start reading.
Seriously. My life is made hell by one stupid microsoft idiocy after another day after day (I manage a server farm of Microsoft VMs). The fact that they treat their development community like crap (Classic VB, f'rinstance) and abandon products with... abandon doesn't help much.
Despite this, that's where the jobs are and all the crabbing of myself and the development community hasn't changed that. I hated MS in 2000. I hate it in 2010. I expect to hate it in 2020. And it's not going anywhere. Profits are up. Like the air, it exists. And I'll still be cranking out C#, ASP.net, or VB.net or whatever is called for.
Please do not read this sig. Thank you.
+1.
Don't learn the languages. Learn the the paradigms.
Once you know a paradigm, picking up a new language under that paradigm will be just "yet another language", and you can learn one in a week (or 7 in 7 weeks). Of course, it will take more time to actually become fluent in language specific idioms, standard libraries etc, but those are not rocket science either.
.NET development is taking off whether you like it or not.
Sure it is, just like it was last year, and the year before. Get back to us when Microsoft actually rely on .Net and related technologies for their own flagship products like Office, so you know they won't declare those technologies obsolete when they want you to upgrade to the Next Big Thing like they did with Visual J++, Visual Basic 6, almost every database access technology they have ever published, almost every GUI API they have ever published, etc. The web technologies are looking like the next victims, given all the recent chatter about Silverlight and the resounding silence from Redmond where the defensive press releases are supposed to be.
There are many languages you could choose to learn today. History teaches us that almost all of the good ones that don't come from Microsoft will still be around tomorrow. In fact, Microsoft are pretty much the only player in the game that does actively kill off popular mainstream technologies that are still in widespread use.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Don't get so emotionally fanboy about it.
You only need one job. Web developers are needed by practically every company. I don't know what percentage of all that is Java vs C# but as a Java programmer I know that Java jobs are trivially easy to come by.
In any case, objecting to C# is likely not an objection to C# itself. I personally think it looks like a great language. It's really objecting to all the stuff that's likely to come along with C# like Windows servers, IIS, VB scripts, IE only sites, Microsoft SQL Server, the attitude that cross platform development doesn't matter and a bunch of other crap that some of us don't want to have to deal with. If you don't have a problem with any of that stuff then that's your business. Don't blame anyone else for your eventual ulcers though.
Cow Cube
Mentioned FORTRAN to a student the other day and he thought I was talking about 4chan.
Definitely Not. The. Same.
"Do you really want people easily de-compiling your code?"
Not!!! That's why I program in Perl, so people can't decompile even my *source* code.
Yea, but saying "Objective-C isn't purpose specific - you can do iPods, iPads, iPhones *and* Macs" - is sort of like saying "We play *all* kinds of music - Country *and* Western!"
Get back to us when Microsoft actually rely on .Net and related technologies for their own flagship products like Office
Nice little straw man you've built there. Sun never built Open Office or Solaris in Java, but you can''t be foolish to think that that was a vote of no-confidence in the future of Java. I'll judge .NET's success on two factors - employment opportunities and continued innovation and development from Microsoft. And let's face it - while a lot of copying and catch-up was done for the first few iterations of .NET, that was over and done with after the 2.0 release and ever since then MS has been blowing past everyone else out there. Visual Studio is arguably the best IDE out there, Linq was a total game changer, and ASP.NET MVC fixed the travesty that was the past decade of Webforms. The future looks really bright for .NET, and not so much for Java. But, things change quickly and I'm hoping that the Java community can pull itself together because MS does better when they are forced to compete.
The thing this recession taught me more than anything is that corporations have no morals, no ethics, and really, no just claim to fair treatment. They are not humans, and not deserving of anything more than that for which they pay. Not a dime.
Corporations - particularly large, publicly traded ones - routinely use "the recession" as an excuse to treat their employees like dirt. Get off your high horse - bowing down to your corporate masters so you can "have a job" only screws yourself and your fellow employees. Do us all a favor and stop working - or at least demand the respect that you, a human being, deserve.
The fact that the economy is in the toilet doesn't change the fact that you're a human being and deserving of the respect due a human being. If you think otherwise, well, you're just as much a part of the problem as the companies which exploit the poor economic situation.
The society for a thought-free internet welcomes you.
I think it's typically assumed that if you know how to program, you ought to be able to interact with a standard relational database. There's almost no prospects out there for someone who does SQL and nothing else...
They actually have titles and everything. They are called DBA around my shop. The good ones are like old-school unix guys who wax poetic about their favorite shell script and kernel optimizations.
If you are a PHP or other front end developer who creates SQL to power it, you are very, very likely not a SQL master. A good programmer with experience can create SQL databases and queries that work well. His code will be amateurish and inefficient to a good DBA. They do the same thing OS programmers do, delving into the deep inner-workings of the database engine to find all the little tricks, optimizations and security gotchas.
Good DBAs tend to be more math oriented personalities than the larger developer population. Probably because they have to live in a world dominated by set theory and complex logic.
BTW, if your experience with DBAs is a bunch of Microsoft Certified Professionals who are proud that they can create a stored procedure to fill a ticket - then you haven't been working with a good DBA. Those guys are the equivalent of the "web developer" who can use the GUI development environment to put a couple of forms together. A good DBA will take that query that you spent two days optimizing to get from 15 minute run times to 2 minute run times and get your results in milliseconds. Often the optimizations they make won't even seem logical to the untrained - until you watch how much faster they run. They are able to do this because they've spent years focusing on one platform.
Still don't buy it? Ok, a quick example. One of my analysts was faced with a set of tasks that was taking too long and causing application timeouts. These tasks involved importing and parsing millions of rows and then joining to many tables of tens or hundreds of millions of rows in a highly transactional environment. After banging his head against the limitations of the database engine for a week or so, he finally decided that he needed to expand the functionality of the engine. So he added a couple of customization DLL's to the engine (written in C#) to add two new commands with the features he needed. He was able to get an already well-optimized run time of two minutes down to about 35 milliseconds. Oh, and my team is already finding lots of other places to use the new features he added, knocking a few percent off of the CPU load on the server and improving response times.