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
Same as above.
Palm trees and 8
"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.
.NET development is taking off whether you like it or not. With oracle serving up a shitstorm over Java it's only going to gain more traction. Omitting an entire language and framework simply because it's developed by Microsoft is a pretty poor reason especially when it's gaining use in the very type of work you're looking for (web-based back end stuff). Honestly if you're looking for a job, consider learning C# and familiarizing yourself with the .NET framework
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.
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.
If you want to learn something new without throwing away all your java experience, you might try Scala. I've heard good things about it (though I have no personal experience with it myself). As functional languages go, I prefer Haskell [1] as my default problem-solving language. You might have trouble finding a Haskell job, but it will teach you things that will be relevant in other languages.
Erlang is an interesting language. I view it as kind of a one-trick pony, but for distributed systems I've not seen anything better.
[1] Learn you a Haskell for great good
The fastest growing, hottest languages on GitHub right now are Ruby and Javascript. Partly that's due to the amazing Node.js server-side platform that runs on Google's V8.
".NET languages"
.NET. There is a reason for that.
Do you really want to be a monkey for Microsoft? Most of Microsoft's own software is NOT written in
"Tying one's career to ideology isn't always a smart thing to do."
Tying one's career to careful thinking is always smart. Do you really want people easily de-compiling your code? Microsoft is the British Petroleum of software. Eventually there will be impossible problems.
A full, complete version of Microsoft's operating system, Windows 7, costs $300, about half the cost of some laptops. Eventually Microsoft's abusiveness will cause an Enron-style breakdown, in my opinion.
Lisp already exists.
You need to drop the Microsoft hate if you actually want to be employable.
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.
You're asking the wrong question.
Here is part of the right answer.
http://pragprog.com/titles/btlang/seven-languages-in-seven-weeks
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...
Then you have just limited your career. But don't let me stop you, the rest of us want jobs too.
---- Booth was a patriot ----
You mean Haskell right?
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.
If you knew .NET I'd have a job for you right now. Love it or hate it, MSSQL is still the fastest kid on the block, and its .NET reporting tools aren't going anywhere anytime soon.
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/
You should learn Chinese.
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.
You might want to spend some time on jQuery and other tools for building more interactive web UI's. While there are promising newer languages for the backend, it's not yet clear that they're going to take over from Java, PHP, and .NET. But the Javascript, client-based side of things is definitely growing and new tools are being developed.
If all you care about is being the most employable, PHP/Java/.NET and JavaScript are your best options.
As for something which has a future, I like Ruby. The mainstream implementations are all open source and (so far as we know) patent-free. I'd seriously consider deploying to JRuby these days, but it's reasonably compatible, so you certainly wouldn't be locked into Java.
Python would be another good choice, but I think Ruby has it better in terms of the number of entirely distinct implementations. If Oracle sues JRuby out of existence, there's still the mainstream C implementation (MRI) with multiple interesting branches, MacRuby is looking interesting, and IronRuby strikes me as at about the stage Jython is.
Don't thank God, thank a doctor!
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.
So, don't bother with lisp. .NET is popular, but not enough to get over the M$ factor. And unix at 666 W.T.F.??? Looks like C and SQL, same as last decade!
Red to red, black to black. Switch it on, but stand well back.
I've always been puzzled about the focus on languages. A language is just a tool or a palette. The important thing is being able to design software in a clear and efficient manner. Languages can typically be picked up in a very short period of time. I understand that the people who only understand buzzwords are blindly seeking a particular match, but if they were smart, they would look instead for a person who was a skilled designer of software, rather than a person who knew a particular language.
In my career so far (I'm sure that many others have a much broader list), I've had to write software in: assembler (IBM mainframe, 6052, 8085, Z-80, 8051, Z-8, 68K, X86), BASIC, FORTH, FORTRAN (4, 66, 77), RATFOR, lisp, C, C++, PASCAL, PROTEL, perl, tcl, python. Java I've written a couple of example programs in, but have never written in it professionally. But I presume it is no harder to become proficient at than all the others. ADA is a good language; people are starting to realize the value of the rigorous protections it applies. But yeah, we were writing ADA code back in 1995, and it didn't seem widespread outside the military at the time.
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
Mandarin
Mentioned FORTRAN to a student the other day and he thought I was talking about 4chan.
Definitely Not. The. Same.
...if you work so much indoors: http://www.vitamindcouncil.org/treatment.shtml
Adequate vitamin D may help prevent the flu, too.
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
I don't know about the market for developers with/without SQL but there's definitively room for people on the reporting/BI/data warehousing side that know pretty much only SQL and the procedural variants like T-SQL, PL/SQL and so on. If you have a proper OLAP server then MDX is a must but it'll translate from SQL quickly. Throw in integration services or business objects too and you got plenty in that area, just look out so you don't become the one fixing up the layout on the TPS report.
Live today, because you never know what tomorrow brings
Lots of jobs doing Android work, so Java will still be around for a while.
And if Java does go away, those already in the Android industry will just learn whatever it replaces it (Go or who knows). The language syntax would change for them, but the overall system architecture wouldn't be much different.
And there are a fair number of Android C programming jobs, if you get in on the device side working for one of the phone manufacturers (I think everyone but Nokia) or a mobile chips vendor (TI, Qualcomm, Freescale, NVIDIA or possibly Marvell). Those companies have a presence on the west coast (California and Oregon mostly), Texas and a few of them on the east coast as well. And there are areas for Android development outside of the US too, too many to name.
“Common sense is not so common.” — Voltaire
Of course.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
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!"
I don't see why you should worry about Java given that Apple and Oracle have both committed to the OpenJDK initiative.
http://www.apple.com/pr/library/2010/11/12openjdk.html
So this means that both cross-platform java desktop apps and web services are safe.
I have to ask though, why the avoidance of .NET? If you are "working" for a living then you should be willing to work with whatever tools/languages are required. Leave zealotry at home and don't bring it into the workplace.
Jesus was a compassionate social conservative who called individuals to sin no more.
This is what happens when I omit the tags. Sorry. No, I'm not interested in Miguel de Icaza's attempts to get Microsoft's patent-encumbered technologies into Linux - always one generation behind. That's not cross platform, it's just porting the chew-your-leg off environment to Linux so you can have that fun experience over there too. I'm starting to believe that stupid is contagious. No wonder why he doesn't want to learn the Microsoft stack. He doesn't want to catch it.
Help stamp out iliturcy.
Great post, and I'd like to add a couple of other points.
Instead of just downloading the compiler, download Visual C# Express. It's a great way to get introduced to Visual Studio and it has a lot of tools and features that make it better than hand typing it into Notepad. I'd still recommend learning what's going on under the covers (use ILdasm, Reflector, and check out the x.Designer.cs files), but if you're going to do any .NET programming in the enterprise setting Visual Studio is going to be used.
It's good to be a jack of all languages, but you also need to master at least one. I've learned assembly, C, C++, Java, VB 6, VB.NET, C#, ASP.NET (WebForms and MVC), SQL, Ruby, Perl, Python, and PHP, but I still picked my favorite (C#) and mastered it and it has given me most of my paid jobs.
Whatever you decide to do, don't tie yourself down. Learn as much as you can about different languages and what's going on behind the abstractions. Pick your favorites and any that you need for work and master them, but don't get too hung up on a particular language.
Hydraulic pizza oven!! Guided missile! Herring sandwich! Styrofoam! Jayne Mansfield! Aluminum siding! Borax!
You are thinking like a 20-something techie. Start thinking like a 40-something with kids. Learn how to be a leader, how to manage projects & customers and how the business operates. Look around your office and find the 45 year old developer grinding away in the corner - then ask yourself: "Do I want to be that guy in 20 years?"
If you want to assure your future, learn SQL, PL/SQL, Oracle Forms, and the Oracle report writers. And if you are so inclined become an Oracle DBA. Best is to learn all of it. You may not like the Microsoft products, but there's demand for it, so pickup .NET. Forget
your anti-microsoft prejudices, they aren't helping your pocketbook one bit. Good luck.
Scala looks nice, but it runs on top of a JVM. If Oracle manages to destroy the Java platform (which is a real possibility), then Scala programmers are fucked. Remember, this is one of the reasons why the guy said he wants to get away from Java.
I'm a Ruby developer in New Orleans, LA and I wouldn't want it any other way here in this city. My skills are in high demand, but that is the state of things here in New Orleans. There is demand for other language developers, mostly PHP, but not nearly the quality of jobs as what is available for a Ruby developer. I suspect that the right answer to this question is highly contingent on the place where one wants to live and work. In San Francisco I know the situation is even more exaggerated than it is in New Orleans with Ruby developers being even more highly in demand.
The answer to this question is always to look around and see what is needed where you are. If you want to move then look at what is in demand where you'd like to move to. In either case, answer the market by adapting your skills. And why choose one language when you could choose multiple. Be a polyglot and pick up Python, Ruby and Erlang. Paired with a knowledge of C/C++ and Java those five languages should keep you in demand in most major markets. PHP developers are a dime a dozen, and the pay reflects that. Only the best PHP developers make good money, and even then I've found it more lucrative to know Perl, than PHP.
But that is just what I know.
Even if I knew that tomorrow the world would go to pieces, I would still plant my apple tree. -Martin Luther
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.
"but you'll need to learn python"
What's to learn? You can teach yourself to be functional in it in no time.
Languages have gotten so boring, these days. I know, the languages are the same, it's just the fact that we've learned all the new concepts and the only thing really novel in most of these languages is syntax. Know some lisp, some fortran, some pascal, some java, some groovy, some ruby, and what's left? Anything new under the sun? Any real new concepts? (Not just ranting here -- anyone with some suggestions?)
We should be telling this guy to learn ARM assembler. At least that'll challenge him.
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.
Lisp already exists.
If Lisp did not exist, it would be necessary to invent it.
ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
Since .NET 2.0 it's been a stable API
Not really. I mean, it is stable in a sense that things don't go away - kinda like AWT is still there in Java. But .NET moves on faster than Java, and every new major release adds brand new APIs, sometimes for the same thing.
To be more specific: .NET 2.0 -> .NET 3.0: added WPF (supersedes WinForms), WCF (supercedes ASP.NET Web Services), and WWF. .NET 3.0 -> .NET 3.5: added LINQ as a feature; and boy it's a big one for someone not familiar with the concept from other languages! Added LINQ to SQL (partially supersedes ADO.NET). .NET 3.5 -> .NET 3.5 SP1: added Entity Framework, which supersedes LINQ to SQL; and WCF Data Services. .NET 3.5 -> .NET 4.0: added DLR (and "dynamic" keyword in C#/VB). Major updates to Entity Framework.
That's without even mentioning ASP.NET MVC (because it's a separate product, not part of .NET) and Silverlight...
You can keep using WinForms into 2011 if you want... but most new .NET projects I've seen use the new stuff, which is not surprising. This has both good and bad parts.
The obvious good part is that the new stuff is usually better - often not right away (WPF was kinda meh when it was first released, though you could clearly see the potential), but eventually it matures. Due to .NET's faster feature cycle, you end up routinely using stuff which Java guys don't even dream of. It's literally 10 lines of C# code for the equivalent 100 lines of Java.
The bad part is that you have to be able to keep up. If you fall behind the technology curve, you end up maintaining some legacy .NET 1.x project somewhere - which will pay the checks, but is usually quite boring as far as work goes. But then this isn't something that your average /. reading nerd would be worrying about, right?
Anyway, it seems that the original question had an explicit "no .NET" request not because the guy has an ax to grind on the technical side, but because he does not want to support Microsoft; i.e. it's purely an ethical issue. And he is certainly fully entitled to that.
That's a queer way to spell Erlang.
Yes, a LOT of web programmers highly overestimate their SQL skill. I've worked at a couple of companies who place a lot of importance on it. At my last workplace, if an interviewee couldn't make sense of (for example) a 50 line T-SQL query with, 5 inner joins, 5 left joins, a sub query, some case statements, grouping, ordering and a COALESCE() function here or there, they wouldn't even be considered. Almost all web programmers are able to "interact with a standard relational database" at a basic level. But they're completely unskilled at the more advanced stuff. I've seen this time and time again at work, and on irc & forums - even people who are very smart/efficient with their language of choice, can be really poor with SQL, and they don't even know it. The reason they don't know it is because you can "get by" with minimal sql knowledge, by writing inefficient round-about, bad code to deal with the data and achieve the same end result (but just with far uglier, less efficient code)
From Wikipedia: "Objective-C is a reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Today, it is used primarily on Apple's Mac OS X and iOS: two environments based on the OpenStep standard, though not compliant with it.[2] Objective-C is the primary language used for Apple's Cocoa API, and it was originally the main language on NeXT's NeXTSTEP OS. Generic Objective-C programs that do not utilize these libraries can also be compiled for any system supported by gcc or Clang."
http://www.rootstrikers.org/
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.
Pick a direction.
If you like web dev, don't look at a language, look at a path. If you want to stay relevant in the front-end coding, Javascript, getting good with HTML5, and one or more of the various things that feeds both (Python, Ruby) is good. Do it via learning some widely used package of functionality. Write something missing, and release it (Django tagging system, with a Canvas tag cloud?) Having released code makes you much more employable. On the back end, well, Python or Ruby + knowing the oddities of one of the NoSQL tools is nice. (And by "knowing", I don't mean read the O'Reilly book, I mean put them under pressure and see how they fail.)
If you want to become a better programmer, learn Lisp. Really, no shit. It changes how you look at things.
If you want to become a better programmer, but don't want to invest in Lisp, pick pick up a functional language, like Haskell or ML. But do Lisp first.
If you hate the idea of either of the above, get better with your current language of choice. Write an ORM, or a templating language. Nobody will care, but you'll learn why everyone hates but still uses the ones we have.
Learn Objective C, or the Android API, and write something for a phone. We're just past the "here's my todo list, here's my Tetris clone" phase, and it is new territory, and one of the few genuinely interesting things to come about since the mid-90s. If you show some initiative, you can land a safe spot doing this. By about '15, I expect most folks to have a smart phone and be sorted as to expectations, so that's about three years to get good at things and maybe do something interesting to set yourself apart, at the most.
If all you care about is shooting for the center of mass, learn either Microsoft or get good with PLSQL + the weird crap Oracle makes you do to bundle Java up for database deployment. I don't know what Microsofties do, but if you get good with server-side Oracle code, know your shit with performance issues, memorize various oerr codes, and can parrot back whatever whitepapers Oracle released recently about X And The Enterprise (you know, Private Enterprise Cloud Computing, or whatever), you're very employable. Bonus if you've lived a clean enough life to get a security clearance. Check your ego with the receptionist and pee in this cup, please.
I forget what 8 was for.
And syntax isn't everything.
Recently I had to look at some Java - I can deal with the syntax, but I was absolutely sure that there's something that already does what I needed to do. The Java library is huge, so it's not just a case of "how to write a loop". If I want to connect to a database, I need to read what's the common way to do it. Of course there will be 3-5 different ways, with proponents claiming that each way is the right way. So you have to start reading articles and blogs, play a little with the code, and form an educated guess (and after a day of looking at the language, it's almost certain that you can't even tell if the examples you're looking at are sane or not).
I could read a Java book and pass an exam about the syntax, but I would not pass a (reasonable) job interview without a few years of learning the libraries and the idioms.
I'm puzzled by what you mean by "drying up". I'm constantly seeing Java and PHP jobs. Granted I'm in a tech hub (Austin), but there are tons of unfilled jobs. The fact that Android runs a java variant puts Java even more in my demand. I'd suggest adding Objective-C and Javascript and you'd have pretty much every current desirable tech skill.
Have you considered that the problem isn't your technological skills, but where you live?
You cringe? Interesting... It is ONE char and only one.
When I am coding I there are times when I just drop a quick test into the left hand margin because it is visually a "sore thumb" that sticks out and is unmistakable as something that should not be there and if it IS there then it requires immediate attention.
While Python is a very nice C Clone they really fucked it up with this bit of stupidity.
Hey KID! Yeah you, get the fuck off my lawn!
...despite not strictly needing to!
Hit the nail right on the head my friend.
All the dogma about dynamic languages giving the programmer the freedom to build like their imagination wants to goes right down the drain when the language designer imposes their layout style on the people who would use the language.
I wonder how many lines of cruft could be removed from the parser if it did not have to manage indentation?
Python is no more nor no less elegant then C since it is just a C clone. I like you have been doing this shit for too damn long but I gotta say I have never really had a problem returning to well written and well commented C code.
Hey KID! Yeah you, get the fuck off my lawn!
Agreed (from what I've read about Python). Perl is a bit more prevalent and has a longer history, meaning there may be more people/places using it and there's more code out there (not just CPAN).
From a functional point, if you know one you don't need the other, but if you don't know either, I'd suggest Perl. I know there's a little religious waw between the two, but it seems silly. That said, I think the white-space delimited block syntax in Python (and other languages) is really stupid. I know you Python people will chomp at the bit about that, but I'm right about this, Guido is a snob about this, and you know it - let it go. Anyone who's had their Makefile blown because of a lost tab, or bitched because X converted tabs to spaces in a copy/paste knows what I mean - and yes, get off my lawn :-)
It must have been something you assimilated. . . .
I'd still rather go back to that than compromise my principles by supporting a closed language.
First of all, there are no closed languages. I don't like C# because (a) I think it's under a potential patent cloud from Microsoft, and (b) I think they stole ten years from the computer industry by competing with Java in parallel, instead of working with the JCP to make Java, and Java tools, stronger. But even C# is not a closed language - it is an ECMA standard, however much the direction is obviously driven by Microsoft.
All that said, even if for some reason you have to compromise principals to work with a language - well the practical reality is you will never have to, it's a false choice. There will always be enough variety of languages and work in them that it's easy to make a statement like that, because you'll never have to face it.
Lastly though, even if for some reason only a "closed" language was left, I would still work against my principals in that language, keeping strong in it so that I could turn support to something that I did agree with when it came along and show a clear migration path from the old to the new. There's a lot to be said for being a mole, at the right place at the right time.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It's like saying I will only buy a car made in America by American labor, I'll buy a GM. You'd have been better off buying a Toyota. First mistake was saying American, that includes Canada, Mexico... hell the entire North and South American continents. But if you're looking for a car made in the U.S. by U.S. citizens, then you'd buy a Toyota, though if you wanted to play it real safe, you'd actually research it first and find out there are a handful for U.S. brands actually producing IN the U.S.. Otherwise you might end up with a car which is 95% manufactured in canada, mexico or china and the assembled in the U.S. by machines.
:)) programming experience, I can say that as a language C# is wonderful, I'd love to have a job programming in it if I could just find a company that isn't scared of it being a "microsoft language". .NET is another beast. It's big, it's nice, it's beautiful. I have written high bandwidth real-time video packetizers and even an H.261 CODEC in it using C#. I LOVE IT. It's fast as hell, it's efficient and it's just overall, a well written system.
.NET programmer" when in fact, they couldn't tell the difference between a linked list and a john deere tractor. There's a terrible reputation that builds when there's a programming language which anyone can use.
.NET is a very pleasing experience, but it's Microsoft. There's just no ideal solution.
C# is a programming language. From a programmer with nearly 20 years of system level (meaning real code, none of this database and web stuff
There are of course two major problems with it.
1) It's made by Microsoft.
I can live with this, there's mono and other environments.
2) Any piss-prick who can move a mouse and type their name can use it to pretend they're a programmer. Then they can go out and say "Hi I'm a
The fact is, a programmer doesn't need to know a specific language. He/She should find a job working for a good company with good people and a nice environment. The language shouldn't make much of a difference.
As for learning how to do programming for web back-ends on a specific platform, well that's a different story. It takes time and experience to learn how to do these things. You need to understand how the web works. But it's not rocket science. It's more important that he knows how to write good stored procedures, triggers, etc... glue languages (possible with the exception of Perl) are all the same. PHP is good language with the worst set of libraries ever. Perl is... bah... Python is just another language with a gazillion features... Ruby is well, it's a religion as opposed to a language, but it's ok for most things, C# and
The important thing though, is that ideals are great if you're looking to get a job like "Let's try and work at Red Cross so I can help suffering people around the world.", it's just sad and lame when it's like "I don't want to program for this bank because I'd be falling into a Microsoft trap".
Get real. Get a life.