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.
Answer:
Corporate Finance, Intellectual Property Law, Data Mining
If Pandora's box is destined to be opened, *I* want to be the one to open it.
By what you said, I guess I would recommend you to start with HTML 5 and Javascript. Both are growing, well stabishled, not very hard to learn and very usefull (for desktop, mobile and even server-side using node.js).
Learning something about OOP is good too. I love Ruby, so that's my first choice. But java and others are ok too.
Good luck.
Learn to lie and bullshit with a straight face.
These skills can take you everywhere. Even right to the top if you're good enough at them.
Being willing to use people and steal are also good.
Learn Javascript. It's everywhere:
* client-side in browsers as little helper fragments attached to buttons, etc
* used for building rich client applications within browsers
* can be used server-side with things like Node.js
* is embedded as a scripting language into various tools
And it's actually not a bad language. The underlying concepts are simple and elegant, although some features for large-scale programming are lacking (no module system, etc).
It's also fun to learn, because you can achieve interesting/amusing results within a browser with just a few lines of javascript.
With some solid javascript knowledge for both client and server-side style code, a lot of job opportunities will open. Learning something like Python is an alternative, but even then employers who look for Python programmers for web-based apps will usually also want javascript skills...
You got 15 years experiene writing C code, good luck finding a "whiz kid" who can do it better than someone who's been doing it for that long.
You said it yourself, C isn't going away anytime soon. Stick to it as your bread and butter.
If you want to learn to program for Android/iOS, that's great, but do it as a hobby. Employers nowadays want 10 years experience on a tech that's only been available for 5 years (yes, it's that crazy), so by the time you get up to speed, the market will have already moved on to the next shiny thing.
You started with "It's 2014..." What will you do in 2025? Like I said, when it comes to your bread and butter, stick to what you know best.
So we wont have to put up with this horrible slashdot beta crap.
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
... learn C++, Objective C or Java, all of which should cover you for mobile development in one form or another. And if you learn C++ you'll be a bonus to any project that hires you since too many C++ devs these days don't have a clue about low level bit twiddling or memory management - its all frameworks and objects for them without a real appreciation of whats going on under the hood.
If its web you want then HTML5/javascript.
Make sure not to mistake 'technologies' for 'programming languages'. For now, I would say programming on mobile devices. Now that many people have mobile phones with apps and all that, and tablets becoming fairly popular. Learn what has to be taken into account with mobile device architectures, and learn the languages used to program on them.
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!
Oh, and I should have mentioned (and others have already), you also should learn at least the basics of the various protocols. You should be able to recognize the various parts of a HTTP message, and know what most of the verbs (e.g. PUT, POST, GET) and codes (e.g. 200, 404, 408) mean. You should know how HTTPS works (and for bonus points, know at least two major flaws with it). And you should know what TCP/IP means (and if you're really good, how they work), what DNS and DHCP are, and so on.
Good luck.
HELP MY ACCOUNT HAS BEEN HACKED BY AN ILLIBERAL ART STUDENT SET TO DESTROY THE INTERWEBZ!
Antigravity, nuclear fusion, holodeck.
Unless you are simply passionate about web technologies and just really want to work with it, stop trying to chase the latest and greatest here. You will find it remarkably hard to compete for the Javascript/web/whatever jobs as the 20 year old wizz-kids will have more experience than you in web-stuff but will probably need much less money.
Instead focus on improving what you already do, and expand into new areas of the embedded sphere. All that fancy web tech will in the end use and require embedded devices. We will get many more embedded devices, rather than fewer of them. Furthermore, try to expand your embedded domain knowledge. Perhaps there are some really exciting new embedded devices (drones, wireless home management devices, etc) you'd enjoy working on as a hobbyist? Expand into other embedded languages as necessary to work on the range of devices you like (i.e. Objective-C if you want to write iOS apps). You will only really learn properly if you have something concrete you want to do anyway.
The point is; unless you hate what you're doing, you should work on ways to make all those 15 years of embedded experience count. Chasing some Javascript web-stuff will not achieve that.
Check if there's a Free Software project you're interested in, or you have a project of your own that would benefit.
Learning is one thing, practical experience is what matters. So unless you actually use those skills, they are close to worthless. And learning and using something is a lot easier if it is linked to something that matters to you.
Assorted stuff I do sometimes: Lemuria.org
As for C also learn a object oriented one and a functional one
OO syntax in any Turing complete language is just syntactic sugar. If you're a half competent C programmer you will be using OO techniques in any flavour of C. Take another look at K&R, now realise that virtually every code example is also a very good OO design example.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
The question that TFA asked "Which technology should I learn" is in itself, a wrong question.
The author should have asked him/herself "What do I want to do 10 / 20 / 30 years from now?" and then proceed from there.
There will always be technologies - many old technologies will still be around and some new technologies will be discovered / created - and once the author knows what kind of situation he/she wants to be in the future, he/she can start picking which route to go
Many people have chosen the wrong tech and end up in the wrong career, but at the end of the day, it's up to that person to "right the wrongs" and to make the best situation out of the mudane, for its his/her life and he/she should be the master of his/her own life
Take me, for example. Some 40 years ago I ended up in the States and did not know what to do. At that time there wasn't much for me to chose - genetic wasn't available, laser tech wasn't mature, and many fields were closed to me, a person who is not a born American.
So I ended up in computing. I dabbled in both hardware and software ever since.
Would I choose computing if I got the chance to start over ? Perhaps not. But, as I have said, back in the early 70's there wasn't a lot of tech fields opened to a nerdy kid from China.
Muchas Gracias, Señor Edward Snowden !
There is no updated version of CSS. CSS 3 is not actually a thing. Instead, there are what are called modules. CSS 2 is a good starting point, because the basics are all in one place. And it's still all valid.
HTML 5 isn't finalized. Moreover, learning HTML 4.01 (strict) and XHTML 1.1 will (as I pointed out in my post...) teach good habits. (And make a person appreciate the really good parts of HTML 5, like the new form parts.) Oh, and they are still valid...
Unlike with something like PHP 3 and 4, there is no security risk in using the older versions of HTML and CSS. Moreover, unlike older versions of PHP, knowing the older versions of HTML and CSS can directly translate to knowing the newer versions. (A valid HTML 4.01 strict document is also, with a different doctype, basically a valid HTML 5 document.) PHP has deprecated loads of stuff, and has thrown out a lot of the bad ways of doing things in the later versions. Later versions of PHP are much more coherent than older versions. But CSS 2 is still excellent, if that's all you need.
HELP MY ACCOUNT HAS BEEN HACKED BY AN ILLIBERAL ART STUDENT SET TO DESTROY THE INTERWEBZ!
Ok, most of the advice on here seems way off the mark, though some was good. Who am I to say something like that? A self-taught dev making six-figures and having worked 20 years.
First, always be learning a new technology. Ignore the folks that said stop trying to learn new things.
As for what to learn, there are two ways to go.
One way is to track trends. You try to track all the trends and you're head will spin. The major trends though, as I see them, are: HTML/Javascript apps (including mobile apps), functional languages (on JVM learn Clojure, off JVM learn Haskell or Erlang), distributed and parallel computing (which are not the same, here again Erlang is good to learn, Go is another alternative, and Rust will be as well once they stop changing the syntax).
Another way is to track the kinds of problems you want to solve. If you don't have a kind of problem you are passionate about, find one! That is a key way to differentiate yourself, market yourself, and enjoy what you do. Here though you'll need to do the research. Some popular problem areas right now are healthcare, sharing to address resource scarcity or cost (think Uber), and disaster management. A great way to get involved in these areas and learn while doing is to volunteer. You also will make a lot of great connections, learn a lot, and feel great about yourself in the process.
To finish: always be learning something new, do something that you are passionate about, and give your time to others because you will be paid back many fold.
I'm a front end developer with around 15 years experience. I spent half of 2013 during a job transition experimenting with IT Recruiting. During sequestration, I spoke with a lot of C/C++ embedded guys that had been happily siloed at government contractors for the last 10-15 years and were suddenly confronted with a job market focused on web/mobile technologies. At least in the Philadelphia market where I work, I can tell you it was very tough for them.
In my experience these technologies had the highest earning potential and demand in order.
C#/ASP.Net - these developers had the most power and earning potential in the job market. Managers that took too long in their hiring/decision making process found their first, second, and third choice candidates were all snapped up before they could extend an offer.
Java - is tenacious and still commands very high salaries.
Objective C - falls into the category of managers wanting more years experience than the iphone has been in existence, so few developers match the requirements. Very high demand.
HTML5/JavaScript/Jquery
I worked for 17 years as a mostly hardware and low level software person, with just enough MFC/Windows/Qt to make reasonable UI's. At the job I started 6 years ago everything is web based "enterprise" software. I now work on a small engineering team (about 8) in a very large company. I got hired for my expertise in C++ an dLinux to work on a biometrics project but as I finished it I needed to acquire skills more generally useful to the team. I started with PHP - it's very C like but with less type safety :). Modern PHP is much more object oriented, if you are comfortable with C++ it'll be very easy. Javascript is absolutely essential; JQuery and Knockout are nearly as essential (frameworks that clean up javascript and make it more portable). Any web app with more than 2 or 3 users needs to use AJAX rather than postbacks to have reasonable performance. In a windows shop you must learn ASP .Net and C#, Ojective C is useful if you want to target Apple products (phones or computers), but with HTML 5 you can do an awful lot without going native. Our apps use an abstarction framework to let one code base target all the popular phone O/S's with pretty standard web apps. (javascript/HTML front end, windows or linux backend REST service) Some SQL is very useful but you don't need to be an expert - any serious web development team will have a database expert who will do the DB stuff, you just need enough to code up test setups, prototypes and to talk to the DB guy. A Pluralsight subscription is very useful (no I don't work for them) I have learned a lot in a short time form their courses. Finally if you are going to work on "Enterprise" development you should really learn about Kanban and agile development since most of them use it in some form.
The guy just wants to publish a mobile app and get rich... using "the smallest set of 'new technologies" possible.
The answer is obviously the entire iPhone/Pad development environment and the entire android development environment.
No need to worry about blackberry or windows phone so that cuts down the requirements a little bit.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling