Ask Slashdot: It's 2014 -- Which New Technologies Should I Learn?
An anonymous reader writes "I've been a software engineer for about 15 years, most of which I spent working on embedded systems (small custom systems running Linux), developing in C. However, web and mobile technologies seem to be taking over the world, and while I acknowledge that C isn't going away anytime soon, many job offers (at least those that seem interesting and in small companies) are asking for knowledge on these new technologies (web/mobile). Plus, I'm interested in them anyway. Unfortunately, there are so many of those new technologies that it's difficult to figure out what would be the best use of my time. Which ones would you recommend? What would be the smallest set of 'new technologies' one should know to be employable in web/mobile these days?"
Get intimate with the http protocol first and foremost! I can't tell you how many times I've worked with "web developers" who have no clue what the different HTTP verbs do, or why they're there in the first place.
Secondly, if you want to code backend I''d stick to backend. Find a serverside technology that suits you(ASP.Net, Java or PHP) and start learning. Don't waste to much time learning frontend web technologies, as that's a completely different workflow to what I think you want to do. Most serious web development companies have dedicated frontend developers for a reason :).
Good luck!
Javascript/jquery front ends, php/python/ruby/sql backends.
Objective-C for iOS.
Those will keep you employed for the next 10 years.
In web programming specifically? I'd say, make sure you know the fundamentals first and foremost.
As a previous poster said, knowing the HTTP protocol well (RFC2616 - be familiar with RFCs in general) will be important (more than you'd think - a misused verb led to Google's standard webcrawlers hosing a site because said site didn't implement forms/links properly), I'd recommend also getting intimate with some of the other building blocks such as SMTP, POP, FTP, SSL, ... you get the picture. They'll come in handy when trying to piece together/troubleshoot a larger solution.
On top of that, know the roles and differences between different server apps (app servers like JBoss/WebSphere; web servers like Apache, nginx), know at least 2 popular database engines (I personally favour MariaDB and SQLite but that's up to you; you might want to look at PostgreSQL or CouchDB for something radically different), after learning HTML and XML/DOM fundamentals, know about cookies and AJAX specifically (which are part of your HTTP knowledge, but revisit later) and a take a web security course, or at the very least read far and wide on the matter. Someone suggested focusing only on back-end - fine if that's what you want to do, but at least be aware of how things behave in theory on the front end. Again, fundamentals.
After (all) that (a fortnight's worth of reading, not counting any experimentation?), the choice of languages to work with these building blocks is entirely up to you. Most commonly mentioned are PHP and Ruby in different setups (honourable mention to JSP), Perl and Python for CGI and general scripting, Ruby on Rails as language+framework...
When staring out and for longevity, choose fairly popular languages that run in open source runtimes (they're durable, they're documented, there are plenty of communities), and stay nimble with frameworks - a previous ask.slashdot showed how some of them can easily get canned despite a strong user base, and frameworks are just a flavour of the year... more likely than not, someone else (project lead, customer, policy...) is going to tell you what framework to use, so just make sure you've mastered your chosen language set.
For iOS devel you're not going to escape Objective C. Android I understand is purely Java. But most things you're likely to want to do that are web facing, you might as well do in a web page.
And, in general, stay nimble. But you knew that, right?
-- "Simplicity is prerequisite for reliability." --Dijkstra
Spot on. All those posts advising on what tools to learn are missing the point. The world isn't hiring people with toolboxes, its hiring people who know how to use the toolbox to make stuff. Concentrate on finding the right Stuff to become expert on and you will enjoy your toil and make money doing it.
Sitting in a basement learning how to use a bunch of tools will just see you end up on a production line making dog food. Which is OK if you like the all pervasive smell of dog food I guess, but probably wasn't in your plan for life when you thought that being an Astronaut might be fun.
Facts are history now plebs have politics for religion on social media.
If you are already a programmer, or even if you're not, then there are three technologies that you should attempt to learn (or at least recognize and be able to say "yeah, OK, this makes a sorta sense"). These are HTML, CSS and JavaScript. HTML is the basis for web pages. It is what they are built upon. I suggest starting with HTML 4.01 (strict) and XHTML 1.1 (there are major differences that may not look like being major), and then moving onto HTML 5 (yet to be fully finalized). The older HTML should teach you some good habits, as should the XHTML (and while you're looking at XHTML, learn what XML is, and why XHTML exists). Then you need some style to make your pages look pretty. That means CSS. CSS is broad, and you can just learn the basics and pick up the more complicated stuff as you go along. (That basically means start with CSS 2, and learn "CSS 3" modules as and when you need them.) CSS is capable of doing a lot of stuff that previously required JavaScript.
JavaScript is not an essential. But you should know the basics. And most importantly, you should know two things, when not to use JavaScript, and what progressive enhancement is. (Progressive enhancement might also be called graceful degradation. It's basically the same thing, in the way that Open Source Source and Free Software are basically the same thing. There are philosophical differences, but they still do mostly the same thing.)
---
And that's the web. Finished. You can go home now.
Oh, still with me? Yes, there is still more to learn. Learn PHP. "But I heard it's awful" you cry. And it may well be. But it's also probably the most popular backend web language. It's what major and widespread software is written in. WordPress, MediaWiki, Drupal, and others are all written in PHP. But, like with JavaScript, unless you want a job, you don't need to learn more than the basics. There are great docs that can help you with almost anything.
Similarly, learn SQL if you don't already. If you're learning PHP from scratch, use the PDO functions, then you can easily switch databases (and not be stuck on MySQL). .htaccess file, and especially redirects.
Also, learn how to wrangle an Apache
Next, I hear Ruby is getting a lot of press. Maybe learn some of that, and Ruby on Rails.
---
Finally, and this is more important than Ruby on Rails, make sure you don't get hung up on pages looking the same in every browser. But do learn the fuck out of how to test in different browsers, and on different devices. And test the fuck out of your pages in different browsers. If you're page isn't readable in Lynx, maybe you need to do some reconsidering.
HELP MY ACCOUNT HAS BEEN HACKED BY AN ILLIBERAL ART STUDENT SET TO DESTROY THE INTERWEBZ!