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.
80% or so of all web-backend postings I see are PHP/Java/.NET or the like. The other 20% are all Python (usually Django, though I prefer Pylons myself) and Ruby. If you want to pick up another language just so you can be future-proof, go with Ruby. I haven't learned it yet (I do javascript myself, and use PHP or Python when I do backend), it seems to be a more common request than any of the others you listed.
I am become
"What language makes the most sense now to get the jobs?" What jobs?
Have you thought about one of the languages spoken on the Indian sub-continent?
Nate
I would go for Chinese.
I've deliberately omitted .NET — I have no desire to do the Microsoft languages.
Poster obviously has no desire to be employed either. Love it or Hate it C# is pretty much the only langauge in demand by big business these days in the UK unless he's perfectly happy doing small freelance jobs etc which PHP is fine. Other languages he's mentioned are all pretty much unused apart from in the domain of nerds but certainly not by the majority of the companies recruiting. Ironically enough I reskilled from C# and other .NET oddities to PHP a few years ago purely out of personal preference.
Last I checked, being able to create apps with native hooks on the Mac platform is the hottest shit steaming right now.
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.
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.
If you want to be another common fish in a huge ocean, learn C# and sharepoint development. If you want to be hip and cool, but are willing to compete with low price coders from developing countries, go with LAMP development. If you want to be a big fish in a small pond and can self promote and communicate well enough to pull it off, pick something painful but useful to corporations ( Rational / Websphere / Oracle / Siebel / SAP development ).
I do most of my client based work using Lotus Domino as a back end server and data platform. The development IDE is freaking horrible compared to visual studio or pure eclipse. The documentation is poor at best. There are a lot of workarounds you have to know. In many respects, it's a terrible thing to have to learn. HOWEVER, I've been doing it for a long time and am very very good at it. I'm never short of work, and I can accomplish things with it for my clients in less time and at less cost than any other platform I've ever found. I also use visual studio to build desktop applications, c++ to write custom modules for my Asterisk servers, javascript for web front end stuff, bash shell scripts for linux back end stuff, etc etc etc.... Right tool for the job and all that.
I know by writing that I'll draw a bunch of crap from cool kids that hate the platform I use to make a living, but I'm willing to bet most of them would trade annual incomes with me in a heartbeat if I gave them the chance. I've managed to have my own business for close to 18 years by focusing on what works rather than what's cool -- and by never letting myself be just another commodity programmer among a giant pool of people with similar (and frankly better) skills.
The problem with quotes on the internet, is that nobody bothers to check their veracity. -- Abraham Lincoln
Most of Microsoft's own software is NOT written in .NET. There is a reason for that.
Is it because most of Microsoft's own software was written before .NET was released?
I don't care if it's 90,000 hectares. That lake was not my doing.
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.
Where I work, I currently do one interview a week. I only said "hire" twice in the last year or so. Truth is, 95% of people I have interviewed so far couldn't write decent code on the whiteboard if their life depended on it, in _any_ language. Your fear is misdirected. No decent employer gives a shit about languages in a job interview. They care about whether you can write the fucking code, in the laguage of your choosing, and whether you have experience in the areas you're applying for. I.e. if you bill yourself as a backend dude, they'll want to see if you know e.g. distributed systems, and have the backend mindset. If you're a frontend guy, that's another set of skills entirely, but still very little (if anything) depends on the language. You can learn the syntax in two days. You can learn the libraries and language-specific idioms / patterns in 2-3 months (if you're proficient in at least a couple other languages). It's not that hard.
And if the employer makes the assumption right away that you _can't_ learn e.g. Ruby on Rails, to hell with them. You wouldn't like working there anyway.
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.
> 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.
I know people who take the same approach to natural language. After all, Spanish and Italian are very very similar, aren't they? The reality with natural languages is that "all languages are the same" thinking enables you to abuse several cultures without actually understanding any of them.
And I think that to a large extent the same thing goes for programming languages. For example, if one of your "paradigms" is "object-oriented", does learning Smalltalk really prepare you for making best use of OO in Java or C++? Or vice versa? The inventor of Smalltalk and OO certainly doesn't think so.
I spent some time a while back trying to explain Scala to a Java programmer. His response was "It's just like Java." Well, Scala *is* just like Java, as long as you ignore the huge and central features that are not like Java. When I started to show him those features, generally in a "replace a page of code with one line" sense, his response was "I don't like it", and that was the end of the conversation. That, in practice, is what "learn 7 languages in 7 weeks" looks like.
My defining experience in this context was observing a government contractor whose preferred language was FORTRAN, who was told he had to code in Lisp. I would not previously have believed that it was possible to write Lisp as if it was FORTRAN, but that contractor proved me wrong. And, to be fair, I find that I have to make a conscious effort not to write C++ as if it is Lisp, eg "everything on the stack and screw the efficiency".
"7 languages in 7 weeks" only works if you stick to programming with the features that can be found or kludged in just about every language. Nowadays that's going to mean procedural code with loads of variables and a bit of OO for accessing libraries. It works, but it's a recipe for terrible, terrible code. But, hey, it will be equally terrible in 7 different languages!
Virtually serving coffee
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.