What programming language/technology should I master to make a living?
February 26, 2015 12:10 AM   Subscribe

I have a solid foundation in computer programming (and theory) but have been mostly out of this field for several years, and not developing my skills. Assume I'm putting in the time and focus to really master something new. What language or technology (or area of application?) in programming could I master that would give me the best shot at becoming a valuable freelance contractor and making a living? Something rare and valuable (or which there's high demand for regardless) which works with being freelance. Your guidance would be appreciated Internets.
posted by Kirn to Work & Money (17 answers total) 32 users marked this as a favorite
Something rare and valuable (or which there's high demand for regardless) which works with being freelance.

Security auditing, forensic code analysis, hardening.
posted by holgate at 12:30 AM on February 26, 2015 [1 favorite]

According to the consultants I work with, a developer who knows Scala/Akka can pretty much write their ticket. And AngularJS is a big plus.
posted by neushoorn at 1:01 AM on February 26, 2015 [1 favorite]

i work in a large, global, conglomerate and we use a lot of Sharepoint (on premises)/O365 consultants. So, O365, Azure, Sharepoint and integration to/from these are very interesting right now.
posted by alchemist at 1:40 AM on February 26, 2015

Plenty of people have data that their business runs on but that they can't manipulate easily. You can improve their business by making that easier. To that end:

- Relational databases. SQL best practices, normalization, optimization, backup and recovery.

- REST interfaces. When you need to move data around, stick to standards and develop transferable skills. Enterprise or proprietary protocols might be good for job security, but they don't help you deliver what the client needs.

- Some declarative UI language such as ReactJS. Time you spend manipulating a view is time you don't get to spend working on the problem domain.
posted by Phssthpok at 2:30 AM on February 26, 2015 [1 favorite]

Best answer: I think most freelance jobs these days will fall into one of 3 categories. Mobile, web, and misc. other. Focusing on mobile means getting up to speed with iOS and/or Android native app development as well as establishing at least a passing familiarity with HTML-based semi-native toolkits such as Cordova and Titanium. Native mobile apps are basically today's desktop app and while the hardware revs constantly and the OS design guidelines seem like they change every 6 months, the underlying toolkits are relatively static. For web development, the opposite is true. You can ask the same person two days in a row and get two totally different recommendations for how to build a given app. The one constant here is change. You can pick up something like Angular and it won't be a waste of time, but if you want to be rare and valuable you have to get to the point where your general comfort level with HTML, Javascript, and CSS allows you to pick up libraries, hit the ground running, and use them productively until something better comes along at which point you start the process again. A lot of freelance positions want "full stack" web developers these days, so you'd likely want to pair this with a server side technology or focus on that altogether, but that focus seems rare these days. The last category is sort of a catch all, because people get hired to build all kinds of software, but unless you have specialized skills you're likely best off focusing on one of the first two.

I'd probably pick one of the mobile stacks if I was in your position because they represent a much narrower focus with broader appeal (by which I mean that everyone who wants an Android app wants an Android app, but some people who want websites want a Rails app and some want a PHP app and so on) to more potential clients than web development, which entails either a substantial breadth of knowledge or a specialization in a particular set of technologies which would limit the scope of potential clients. As far as which one, it's almost a political decision these days, but I would start with whichever you personally prefer and once you're conversant with that, start figuring out the other one.
posted by feloniousmonk at 2:56 AM on February 26, 2015 [1 favorite]

Better to ask what domain you're interested in. "I want to earn loadsamoney" gets you answers about what's hot right now, but what will be hot in five years is a crapshoot.

Mobile, web, finance, systems, games, desktop, devops, hardware, they'll all get you different answers.

But if you're going anywhere near web, Javascript is becoming what Java promised to be - runs in the browser, on the server, and it's starting to turn up on microcontrollers. If I was starting out (I'm a web monkey), I'd jump straight to Node.

You'll also get different answers from people who work in open source shops vs Microsoft shops, and ne'er the twain shall meet.
posted by Leon at 3:09 AM on February 26, 2015 [2 favorites]

iOS. When I was finishing my CS degree, I knew a ton of math and theory but almost no practical skills. I took a few months to teach myself iOS development (which was pretty easy with the programming background I had) and build a simple app which I put in the App Store. A month later, I got a job at Google based pretty much entirely on my iOS experience, and while I havent gone the freelance route I get approached by people who are looking for freelance ios folks all the time. This probably also applies to Android, but that's not my experience.

Data science/machine learning type work is also in huge demand right now, but I dunno how much of that is freelance vs in-house, and it requires some pretty serious math chops.
posted by Itaxpica at 6:07 AM on February 26, 2015 [1 favorite]

I second feloniousmonk's recommendation of mobile. I constantly look at job postings, and I routinely find entry-level, 'we expect to train you' mobile development jobs posted at the same rate as seniors in other languages. This tells me there's a real need on the market for mobile developers.

Secondly, I think mobile development lends itself well to freelancing right now. A lot of businesses don't want to focus on mobile, they just want their one app. You see it a lot on AskMefi even, people asking how they can get this one app made.
posted by tofu_crouton at 6:18 AM on February 26, 2015 [2 favorites]

If you're interested in web stuff, Ruby on Rails is hot these days, and practitioners are scarce enough that I have even gotten a few "learn-while-you-earn" offers.
posted by ubiquity at 8:00 AM on February 26, 2015 [1 favorite]

Instead of rare and valuable, I'd recommend enduring and applicable as your base, with rare and valuable as a specialty. That way, you can have a steady list of meat and potatoes work while developing a rep for your specialty.

Meat and potatoes examples: Java, Python, or maybe C plus MySQL.

Garnish examples: Node.js, Scala, Hadoop.
posted by zippy at 9:23 AM on February 26, 2015 [3 favorites]

Mobile, yes; RESTful API integration between apps and the server side, yes.

The "rare and valuable... and freelance" thing... if you're imagining a career where you have the rare/valuable skills that allow you to work on a two-month project and charge enough to pay your bills for the year... that's a bit of a gamble. If you throw yourself into things like (say) Scala or Clojure you'll want to do so in a public way, and you'll also want to be in a location where higher-end development's actively going on, or have gained sufficient of a reputation to be hired remotely.

There'll always be work for PHP/LAMP developers (as "meat and potatoes" as it gets) because there's a very long tail of people who just want a no-hassle CMS-driven site with a few customisations. There'll always be work for people who have big-picture understanding of how to spec and implement tech projects, or who can look at a spec and suggest/implement improvements, though that skillset is more amorphous. There'll always be work for people with the capacity for firefighting, whether it's security or scaling bottlenecks or some other clusterflange that the in-house team can't fix. Most of it won't be glamorous, won't fetch the best day rates, won't give you ample time to work on side projects, but it's a living.
posted by holgate at 9:42 AM on February 26, 2015 [1 favorite]

Be careful about "rare and valuable", particularly where technology platforms are concerned. On the one hand, yes, if you master an obscure platform then there are some people who might be prepared to pay a lot of money for your skills; on the other hand, those people themselves might be rare or hard to find. You also risk being locked in, with few other potential customers/employers, or little time to brush up on other skills because of the amount of work people dump on you when you're the Only Person Who Can Do Thing X. (Full disclosure: I was an APL programmer for several years, which, while it was a blast, looked a lot like this at times.)

A solid grounding in CS theory is a transferrable skill, and should be (mostly) independent of language. Nthing "better ask what domain you're interested in".
posted by doop at 10:49 AM on February 26, 2015 [1 favorite]

I think you should start with the industries and job roles that you like and/or suit your personality, then focus on the tools. There is plenty of opportunity all over.
posted by SemiSalt at 1:02 PM on February 26, 2015

I know this sounds odd, but: COBOL. There have been numerous stories in the past couple years about how in-demand seasoned COBOL programmers are. While the shiny Web 2.0 Mobile Big Data Whizzygig world is great, there are still big industries (banking, health care, airlines) that have legacy COBOL-based systems that do the job fine and are not practical to replace. As the old COBOL hands are retiring, it's getting hard to replace them, and there's a real shadow market for the skill now.

It's not sexy, or glamorous, but it defintely fits the bill for rare and (from what I've read) lucrative. I could pull up some references, but I need to run soon. However, I'd suggest you check that out. I think COBOL is going to be a language that slowly goes away, but given the size of the systems that still use it; the cost and difficulty of replacing them; and the general risk-averseness of the industries that use them I wouldn't be too concerned about it being a sustainable career for a good while longer.
posted by jammer at 1:33 PM on February 26, 2015

OK, so I didn't have to run after all.

Here are a couple links that are bullish on the COBOL market:

Looking for a job? How's your COBOL?
COBOL will outlive us all.

And, for balance, a slightly more skeptical take:

All the rich kids are into COBOL -- but why?
posted by jammer at 1:40 PM on February 26, 2015

As the old COBOL hands are retiring, it's getting hard to replace them, and there's a real shadow market for the skill now.

I wonder how much of the COBOL premium is tied to the experience those programmers have of working with big iron and the systems that depend upon it. Knowing the language isn't enough: it's knowing (or getting up to speed) on technological and institutional history that goes back decades, with quirks that reflect long-gone hardware limitations and dependencies, compliance needs and system-specific workarounds. For those jobs, you pretty much need an in-house apprenticeship model to pass down accrued wisdom before all the old programmers retire. It's not particularly amenable to freelance work.
posted by holgate at 2:41 PM on February 26, 2015 [3 favorites]

Response by poster: Thanks everybody! Lots to chew over here, appreciate all your responses.
posted by Kirn at 3:43 AM on March 9, 2015

« Older shoring up the digital ramparts against hate mobs   |   Help me make a living out of making life better... Newer »
This thread is closed to new comments.