Forgot your password?
typodupeerror
Education The Internet Technology

Ask Slashdot: It's 2014 -- Which New Technologies Should I Learn? 387

Posted by Soulskill
from the integrated-abacus-solutions dept.
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?"
This discussion has been archived. No new comments can be posted.

Ask Slashdot: It's 2014 -- Which New Technologies Should I Learn?

Comments Filter:
  • Learn the basics (Score:5, Informative)

    by Anonymous Coward on Wednesday January 22, 2014 @06:21AM (#46033923)

    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!

  • Work on the basics (Score:5, Informative)

    by mozumder (178398) on Wednesday January 22, 2014 @06:22AM (#46033927)

    Javascript/jquery front ends, php/python/ruby/sql backends.

    Objective-C for iOS.

    Those will keep you employed for the next 10 years.

  • by Anonymous Coward on Wednesday January 22, 2014 @06:41AM (#46033995)

    And Java, for Android development.

  • Learn the backbone (Score:5, Informative)

    by taikedz (2782065) on Wednesday January 22, 2014 @07:01AM (#46034053) Homepage Journal

    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 [slashdot.org] 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?

  • Re:It's 2014 (Score:5, Informative)

    by coastwalker (307620) <acoastwalker.hotmail@com> on Wednesday January 22, 2014 @07:01AM (#46034055) Homepage

    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.

  • by magic maverick (2615475) on Wednesday January 22, 2014 @07:08AM (#46034095) Homepage Journal

    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).
    Also, learn how to wrangle an Apache .htaccess file, and especially redirects.

    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.

  • by magic maverick (2615475) on Wednesday January 22, 2014 @07:17AM (#46034125) Homepage Journal

    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.

  • C++11 (Score:2, Informative)

    by speps (1108625) on Wednesday January 22, 2014 @07:31AM (#46034163) Homepage
    I think given the momentum C++ has right now (for better or worse, I can't say yet) you should try to learn C++11 and all the new tricks that come with it. It's a pretty different experience from C and C++98 in my opinion. Watch this for a nice roadmap and insights : http://channel9.msdn.com/Event... [msdn.com]
  • by Anonymous Coward on Wednesday January 22, 2014 @08:04AM (#46034293)

    I'd caution you first to take a good look at this article by Jeff Atwood (http://www.codinghorror.com/blog/2008/01/the-magpie-developer.html) discussing what he calls "Magpie Developers" - developers that flock to new shiny things just because they are new and shiny,

    Once you've taken a look over that, here's my take on web and mobile technologies.

    You are going to have to learn JavaScript for the purposes of front end development. You should also learn the principles of responsive web design and graceful degradation to produce web sites that look good on mobile. That obviously means a through understanding of HTML and CSS as well, which although not "programming" per say, are important technologies nonetheless.

    On the back end, Python and Ruby on Rails still have a lot of traction. node.js is rapidly gathering popularity as well, and since you already have to know JavaScript for front end work.it can make sense to use it on the back end also. All three of these have substantial following and demand on the market.

    PHP is on the way out, but still used, and probably not going away. It's main "advantage" is that it's the only thing that works on the numerous "bargain basement" web hosts that people still use for some crazy reason, and therefore, there's still a lot of applications, content management systems, and frameworks written in PHP. WordPress in particular comes to mind - a lot of smaller projects are just slapping some custom application on top of a WordPress CMS, since that's what the organization is familiar with.

    Now. for the subject of Mobile app development. Mobile apps can be important, but not every site should be an app.. Being able to articulate this to an employer is important. They may think their mom and pop online store needs a mobile app. They don't. They need a website that works well on mobile. A mobile app can supplement that, but it can't replace it. Users want apps to do things that are absolutely indispensable to them, not a screen full of icons for 200 different companies. Don't make the mistake of letting "oh, just download our app" be a substitute for poor mobile web design - for something that a user should have been able to easily do or find out in their mobile browser, they are likely to just go elsewhere instead. Similarly, don't make the mistake of thinking good web design = good app design. An app and a site are two different things.

    For iOS development, Objective-C is the way to go (and as far as Apple is concerned, the ONLY way to go). There are other technologies now that can produce iOS apps, but in the past Apple has made a big fuss and big show of banning or breaking other tools, I seem to recall them even going so far as to ban apps because of the environments used to develop them. This has relaxed somewhat lately, but there's no telling if they might do it again. Objective-C should be a smooth enough transition from C for you though.

    For Android, it's more or less a variant of Java, although there are ways to develop in other languages, including C and C++. There's pretty broad selections of tools available for you. Fragmentation is still a very real problem, but it doesn't have to be as big of a problem as it's made out to be - you just have to be aware of it and plan around it - it's not unlike the problems of responsive web design (although progressive enhancement is probably preferable to graceful degradation for apps)

    The other mobile platforms right now lack enough market share for most apps to worry about native development - develop a proper responsive website, and pay attention to make sure that it actually works, and you won't leave the Windows Mobiles and Blackberries of the world out.

  • Re:Learn the basics (Score:5, Informative)

    by Ash Vince (602485) * on Wednesday January 22, 2014 @08:52AM (#46034495) Journal

    Why they are there? They don't even know THAT they are there!

    If your web dev looks at you blankly and asks "Verb? What verb?", you know that you have a long way to go.

    As I a web developer of the past decade or so, I can honestly tell you I have had to dive into the meaning of HTTP verbs exactly once in all that time to do stuff with HTTP PUT.

    The reality is that you can actually be a dam successful web developer without having a clue what an HTTP Verb is even though you use them every time you create form that posts its variables instead of putting them on the querystring. Does it make you a better web developer knowing a bit more about HTTP Verbs? Absolutely, it does but you can use them on a daily basis without knowing how putting Method="POST" on a form is translated into the underlying HTTP protocol since most web technologies abstract this stuff away from you.

    The time when understanding a bit more about HTTP protocols really comes into play is when you need to start creating or utilizing API's.

  • by magic maverick (2615475) on Wednesday January 22, 2014 @09:13AM (#46034591) Homepage Journal

    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.

  • by BillBarnhill (3509219) on Wednesday January 22, 2014 @09:41AM (#46034771)

    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.

  • by Anonymous Coward on Wednesday January 22, 2014 @09:55AM (#46034843)

    Actually, this line of thought was translated into an XKCD strip.

    https://xkcd.com/1318/ [xkcd.com]

  • by Anonymous Coward on Wednesday January 22, 2014 @11:37AM (#46035653)

    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

  • by Ed Johnson (2881561) on Wednesday January 22, 2014 @11:41AM (#46035687)
    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.
  • by Jane Q. Public (1010737) on Wednesday January 22, 2014 @12:01PM (#46035905)
    Both of MY objections to Python I admit are personal preferences only: I don't much care for the syntax, and I don't much care for "significant whitespace".

    Although they're just personal preferences, they're strong personal preferences.
  • by squiggleslash (241428) on Wednesday January 22, 2014 @01:15PM (#46036779) Homepage Journal

    I'm not sure this is a fair answer to the question: it's a little like someone saying "It's 2014: What new stuff should I learn to be a better accountant?" and the answer coming back "Have you tried calculus? IT'S AWESOME!!"

    The right answer, alas, is not something that tickles your fancy, but something you're likely to hate - like the latest tax code.

    What about the original question? Well, they're saying "New technologies" but it's not clear if they mean "New to me" or "New as in 3D printed guns". I'm guessing the latter, this is Slashdot after all.

    The answer to the latter interpretation is, of course, "Who the f--- knows?" It's pretty close to impossible to determine what's a fad technology and what's not. I think node.js shows some potential, but it's the only thing I can think off the top of my head it's worth familiarizing yourself with - and technically, it's not new new, it's just up and coming.

    The answer to the former is... well, something that's going to depress virtually everyone on Slashdot.

    Python? Fuck no. Nobody uses it. Let me clarify that for pedants: yes, you can mention a handful of projects that use it, and many, many, many, GNU/Linux wizards use it to write quick automation scripts for various tasks, but that's not a reason to learn it.

    What do you need to learn that's a back-end language? Well, there are three:

    PHP.
    VB.NET.
    Java.

    At least two, possibly three, of those will send most self respecting programmers gibbering in a corner. However:

    - PHP is the language of LAMP. Yes, P originally meant "Perl", but PHP took over a long time ago. Download a few popular open source projects of scale and popularity equal to or greater than Wordpress (itself a common example), and you'll see what I mean - large numbers, possibly most, of the projects you download will be written in this bullshit, awful, language.

    - VB.NET is one of the two major enterprise core platforms. It really is. Why? Well, back in the 1990s, lots of corporations brought in armies of code monkeys to write their core business applications in the easiest languages available, which meant they were left with a large body of business logic written in VB. As businesses moved to the web, they found the easiest migration path was VB.NET, it meant they could use much of their existing code and simply drop it into a web environment. As a result, most .NET applications are written in VB.NET, and large numbers of enterprises are dependent upon it.

    - Java - the other end of the Enterprise coin. Any corporation who didn't migrate to VB.NET for their data/web backends migrated to Java instead, because of the big Java push in the late 1990s and because Sun put together some moderately good (for the time) web frameworks in the early 2000s.

    And that's it.

    You can start to cry now.

    Python? Nice, but up there with shell scripting as something that's good to have, but you won't actually ever have a boss ask you "We have major problem and we're going to need someone with Python skills to fix it."

    Front end development: HTML5 and jQuery. Worth knowing a little Flash too, because you may have to maintain something in Flash or even write something new in Flash if your employer doesn't want people downloading their multimedia files. That's about it.

    This is the truthful answer. It's up to you to decide now: does this make you want to give up being a programmer? Because if it does, you can always become an accountant! Here's a copy of the 2014 Tax code to get you started...

Never say you know a man until you have divided an inheritance with him.

Working...