This question originally appeared on Quora, the knowledge-sharing network where compelling questions are answered by people with unique insights. You can follow Quora on Twitter, Facebook, and Google Plus.
Answer by Pedram Keyani, worked at Google, was an early engineer at Facebook, and now at Uber:
If you are looking to be a great general-purpose software engineer, then the skills for the next five to 10 years are very similar to the skills needed in the past five to 10 years:
- Strong understanding of the fundamentals of computer science, including databases, networking, compilers, data structures, algorithms, and operating systems design
- Highly analytical and able to decompose big problems into smaller problems
- Sequence and prioritize what needs to be done
- Work well in teams (meaningful work is done in the unit of teams)
If you are looking to optimize for trends in the industry or what you think the real world will demand of computer technology, then focus on machine learning, computer vision, mobile development, or distributed systems.
I have one caveat regarding machine learning. Most people think of it as this sexy field (which it is), but most practical applications of machine learning really depend on strong system design focused on effectively using memory, IO, and extracting features that don't reside on the machine making the classification. Most graduate course are focused on the underlying classifiers, but really the magic is in how they are applied to real-world problems.
* * *
I keep waiting for the programming world to undergo a revolution. I've been waiting 30 years now. I'm sure it's coming any day now. It could even be in the next five to 10 years! Barring that, here's what I think people should be focusing on as programmers and designers.
Higher level languages, such as Java and even the latest, greatest C++, which has some very nice features. Get comfortable with these suckers; they've been around for a while, and they're going to stick around. Python is also useful. The jury is out on other very cool but not very broadly adopted languages.
Get comfortable with big data. It's not for everyone, but there's big money in it, and it's incredibly useful for business, digital assistants, and human-computer interfaces. Intelligent agents—software that learns your preferences and finds things on your behalf—will come sometime soon. Big data—processing an Internet’s worth of data to understand what you like and are likely to like—will be a part of it. Get comfortable with SQL and distributed analogs to SQL for querying and transforming data.
Cloud computing. Be familiar with cloud computing. Think of it as a way of being able to easily scale up and scale down solutions, depending on the amount of data and customers you have a given month, week, or even hour. Get comfortable with it, or at least with AWS and possibly Azure. And of course the stuff that'll come out of the team I'm on at Oracle.
Touch and other non-QWERTY interfaces. You don't need to learn how touch is tracked or the mechanics of voice recognition. Instead, try to ensure you're able to incorporate these techniques (and possibly others such as gestures) into your applications.
Build for the universal screen. Microsoft is trying to unify their operating system ecosystem from the very small to the very large, and I think it's brilliant. Become familiar with technologies that span device categories.
Mobile rules. On the client side, mobile is where it's at. There's more smartphones and tablets out there than PCs, laptops, and notebooks. I think this will only continue. Time learning how to write apps and interfaces for mobile devices is time well spent.
Web technologies. I've given up on the Web going away, although it looks like Flash is on its way out. HTML5 and Web protocols both seem like very sound investments, for those who can benefit from them.
Notice I didn't put anything about becoming a mathematical genius or distributed systems expert. There's value in those things, but the reality is that a small set of people will solve the hard problems in these area and adapt them with a nice compromise between power and usability. So don't sweat that stuff.
As a software engineer, what's the best skill set to have for the next 5-10 years? originally appeared on Quora. More questions on Quora: