Ask HN: Where are the hard programming challenges/jobs?

55 points by nielmalhotra ↗ HN
I got started programming a couple of years ago because I like problem solving. The harder, the better. I know I'm not alone in feeling that way. I've gotten a bachelor's degree and learned a bit of ruby, rails, and other frameworks/languages, but I'm running into a problem. It seems like all jobs are just simple CRUD apps. I look at 99 percent of the software out there and know that I could do it if I had the time.

My question is how do you get to work on the hard/fun stuff? A quintessential example for me would be self driving cars. It's challenging and would have a real impact on the world.

I'm looking into becoming a data scientist because it's newer and seems to have more challenges. I also have a theory that any challenging computer science problem requires a lot of math. Do you need a PhD to work on these hard problems? Can anyone give advice on how to avoid a career of working on simple CRUD apps? (CRUD is a metaphor for simple problems in this case)

70 comments

[ 2.7 ms ] story [ 138 ms ] thread
try Google, if you are really good and have passion to develop tough stuff like machine learning languages, dealing with large data. By the way have you tried any problem given in http://www.topcoder.com/, if you like that stuff and also can do, Google is worth trying.
I think employers will be interested in hiring you for such projects only if you have demonstrated knowledge and experience in the field. If your work experience primarily consists of RoR web development, most employers will pass. It's not that it's implied that if you do RoR, you won't know about algorithms and AI, but there is a high correlation, and sorting through a ton of RoR resumes to find a worthwhile candidate is too much work.

You can work on hard projects on your own. Once you have made substantial contributions, you will have credentials to interest the employers. Most of the open, hard projects have very few full time developers. PyPy has only 3 I believe. If you have something to contribute, people will be more than happy to have you on-board.

Im channeling Peter Thiel here: there is little connection between hard and valuable. The goal of most companies is to create value, and do it without expanding too much effort.

If you really want to challenge yourself give yourself a goal like:

1. Decode the genome 2. Find the correlation between all aspects of someones lifestyle, diet, and their health. 3. Solve poverty - maybe there is an economic solution.

The world is full of hard problems, but you have to take the lead if you want to work on them.

Try looking for bioinformatics jobs. It involves big data where the amount of data to be analyzed is growing exponentially every year, a lack of knowledge on what to research to provide meaningful results, and huge benefit when people come up with novel ways to interpret data successfully.

It will involve acquiring some domain specific knowledge to be truly successful (what hard problem doesn't?), but you will be able to dive in straight away and make huge contributions just by making current analysis more efficient!

I'm slightly hijacking the thread here, but does HN have any recommendations on CS-heavy bioinformatics grad programs (not just US based)?
Threadjacking? This question should be a front page discussion, instead of gossipy crap.

I would love to know as well.

I second this. In computational biology we work on hard problems with real outcomes which potentially change or save lives. Some of the problems are probing at the fundamental mechanisms of life. We need more programmers who aren't afraid of hard problems.
+1 for bioinformatics - adding to that are the issues surrounding the complexity of the data (look up HL7 or CDISC to see how complex) and also the legal standards and ramifications (HIPPA, 21 CFR Part 11) of working with clinical research.

In short, getting domain knowledge in the above are essential to solve the tough problems at the big-pharma or national-bio-labs level.

(PS to the other poster looking for bioinformatics programs: I suggest you look in Boston - Tufts, MIT, Harvard etc)

Lets consider Maths, as an example to answer that. Well, up till college, we are taught to solve problems that are already solved, towards our PhD, we come across problems that haven't been solved, they are hard, but they are not the end of it, beyond that lies a sanctum, where you must find a problem and fix it. Thats what entrepreneurs do, it may sound easy, but do not be fooled by it, because being an entrepreneur it seems easy when you have found a problem and its solution, or as Steve Jobs said " looking back, the dots connect but 20 years ago, looking forward, they did not"

Billions of people around the globe haven't even noticed many a problems, yet a handful of entrepreneurs did, wasn't that the first part of problem solving, and if you haven't probably noticed, you are here after all, so you might unconsciously know the answer lays somewhere around here.

So from my eyes, whether its programming or maths, the hardest problems that exist are the problems no one has noticed yet.

For your case, you might want to find a problem of programming, if you have programmed for that many years, you will surely run into one, that no one has noticed. If you haven't, as Steve Jobs also said "Keep Looking"

It sounds like going to a Disney Land and complaining that all rides are easy. If you want tough and challenging rides go to SixFlags.

If you want to tackle tough challenges may be ruby/rails is not the ideal place. Perhaps learn C,C++ and implement faster ruby or javascript interpreter or implement a distributed filesystem in ruby or java. You can also contribute to the rails framework.

I've learned that ruby/rails is not the place to go for tough challenges. Agreed. My question now is where do I go from here?
If you like computer graphics, there are also tons of interesting problems in that field.
It's not the only way but a PhD will certainly open a lot more doors at the "high end" research end of things. That said, even Microsoft Research will hire "Research Software Development Engineers" who work with researchers to implement cutting edge stuff as well as migrate it into regular Microsoft products, and only a bachelor's is required: http://research.microsoft.com/en-us/jobs/fulltime/technical.... .. these sort of roles can blossom into more challenging and more research oriented work over long periods of time.

This is a rather crude generalization, but PhDs are often demanded at high end research positions not to prove you know your stuff, but to guarantee you have the mettle to do research and bounce back from failure after failure.. a must if you're working on someone else's dime. Of course, if you can find another way to support yourself, you can do (almost) any research you like in your own time without strings attached ;-)

If I had money and free time, then I'd love to do research on my own. Thing is, I need a job to pay the bills :( I'm thinking of getting into freelancing and using that to float me as I get to do more and more research.
This is the strategy I'm currently implementing. I've been doing freelance work while working on research with physiological sensors as computer input.

You'll need two things to get started doing this sort of thing: standing out as a member of your community so people come to you, and an understanding of business needs.

If you really want to make the switch, shoot me an email. I'll give you some tips on making the transition.

can i? i'm on the same lines as the OP.
So, I can't find your email. I checked your profile and your blog. I can follow you on twitter or whatever you like, but your advice would be extremely valuable.
Sounds like you could write publicly about this, it sounds fascinating :-)
Tweeted at you. Please respond when you get the time. Thanks.
This is confusing to me, what is taking up your time?

The way I see it people choose what they want to spend their time doing. Sometimes they choose research, sometimes they choose game playing, sometimes they choose reading Hacker News :-) but there is generally enough time for folks to do what they want to do.

Research is especially easy if you know what you want to research. But it's not a simple matter of "Hey I'm in research, lets blue sky something!" People in research have some passion that they are following, like parsers, or graph theory, or AI, or network coherence, or something. Some area where they have lots of questions and no answers.

Keep a notebook. One for each topic if you want, they can be the cheap composition ones that go on sale during 'back to school week' or really nice lab notebooks. But they are like pitons and rope to a climber, they anchor where you have been and where you are going. Write the questions you investigating into the first few pages after the index. Start writing down what you know, what you can prove, and what you don't know. Invent experiments or ways to discover the answers to the questions you don't know.

I've got a notebook with a couple hundred pages devoted to making carbon nanotubes. I know lots of ways you can't make them and several ways you can. Sometimes you can scrounge equipment for stuff, sometimes you have to invent (did you know that you could use a bottle of propane and a chunk of copper pipe as a way to do vapor deposition of carbon? You can! And if that copper tube rolls off the stand onto your wooden deck when its hot it leaves a big black mark? :-)

"Research" doesn't need a government funded lab, it needs good laboratory technique. Careful note taking, documentation, exposition and analysis. Software research is even easier these days because of how cheap computers have become.

In general, having a job doesn't prevent you from asking questions or doing experiments (aka "research") but if you're tired after working all day and just don't want to think any more, that is a different problem. Some folks I know get under demanding jobs just so they can do it easily without straining too hard during the 'day.'

One of the things I did as a kid that drove my Mom nuts was read every scientist biography I could, I tried to re-create their experiments because anything an adult could build in the 1800's I figured I could build as a kid in the 1900's. But what it really taught me was how these people pursued the questions they had.

Bottom line, "money and free time" isn't an excuse, its a rationalization. Why are you denying yourself your own research?

Follow the advice in http://steve-yegge.blogspot.com/2006/03/math-for-programmers... and learn math. Once you have the skills to do the interesting stuff, you start to see opportunities to do it in the oddest of places. For instance I've been paid to do things like statistics and machine learning on "simple CRUD apps".

Maybe you won't be that lucky. But if you don't have the required skills, then you definitely won't be that lucky.

Incidentally a fun place to test the intersection between math and programming is http://projecteuler.net/. Besides, it is fun.

Most machine learning work is the CRUD of math. It is plug-and-chug in standard toolkits.
Writing a distributed database is pretty challenging. That's part of the reason I started a NoSQL company some time ago. Unfortunately it failed due to lack of funding, but if you're interested, here's a technical write-up:

http://arxiv.org/abs/1302.3860

I got lucky and transitioned (in the same company) to a search project from CRUD - which I find vastly more interesting.

But my advice is to pick hard problems yourself and try to solve them. You need to start somewhere! Sure its expensive to get your hands on driving car hardware, but there are plenty of hard problems out there that need solving and can be done using opensource and your personal computer.

If you are able to get yourself through a really tough problem, you will come out better on the other side - even if it takes you years to solve.

Game engines are hard. Working on CryEngine, UnrealEngine, idTech7, or something equivalent sounds very challenging. Games involve AI, physics simulation, concurrency, high performance, and more. The salaries is not that great in the game industry though.
Get into digital signal processing / digital communications. They are awesome fields that are challenging and rewarding.
"CRUD" is hard. That's why there are so many bad CRUD applications out there. Write a good "CRUD" application and I take my hat off to you.
Have you been in a "CRUD" job for at least a year? I can assure you, what often seems like a "CRUD" will teach you a lot about architecture, design, requirements analysis, etc. It's actually a good way to teach yourself skills that cannot be obtain via university schooling. Spend a year mastering a framework or two (in a paid project), face some support issues, etc. When the job is boring and you complete your tasks very well, ask for a raise and/or start looking for a new job.
Here are a couple of CS-y but not too math-y suggestions.

Consumer-facing interactive native apps are typically low on CRUD and some of them require non-obvious solutions. You could try to get a job (or just create a product on your own) on mobile or in games.

Another option is working on tools instead of apps. If you manage to get some non-trivial gcc/clang/kernel patches accepted you can try to find a company that works on those.

(I've worked on Google Maps for Mobile and am now building a robotic waste recycler - no CRUD for me since 2002 unless I've decided to build some for my own needs).

Certainly I'm biased, but I think working at a place like http://istrategylabs.com is a place to do this.

We have to invent new things everyday, and due to our focus on hacking the digital and physical worlds there's so many possibilities.

Try systems companies (e.g. storage, networking) - you get to build products that leverage core CS concepts - algorithms, distributed systems etc. You also get a chance to use your investigative skills to debug problems like race conditions, memory leaks etc.
I don't know how you feel about working for the military-industrial-tech-surveillance-state but companies or universities that get DARPA or IARPA money work on stuff like flying and/or self driving cars, autonomous systems etc (Lockheed, Honeywell, Carnegie-Mellon, Raytheon, for examples). Of course these things will ultimately be used to crush humanity's soul, but they're interesting software and technical challenges.
I work in this industry, and have spent a number of years in R&D. In my experience, the vast majority of software R&D projects are not weapons/military related, and include things such as cyber security, healthcare, big data, cloud computing, etc. A lot of it is aimed at developing innovative approaches to reduce costs in various government/military processes both through automation and doing things more smartly and efficiently.
Sorry, but I don't think there's a distinction to be made, other than one of degree unless the implication is that improving government/military processes is not aligned with the long term goals of the military.
Good point, but I think the average person who has reservations about some military functions isn't necessarily wholesale opposed to all functions of the military.
I was in this business for a while too and did some really cool stuff. But in the end this system transfers public money to enrich these companies; and the DOD basically pays these companies to learn how to develop technology that the company can then make huge profits on. It's a racket. I'm torn about it; philosophically, morally, politically I'm opposed to war and using technology to control people. But the skills I got and the smart people in the industry were great. Plus the projects are cool from like a 13 year old boy perspective, but if you stop to think that big data, autonomous vehicles etc will be used for death and increasing the powerful people's ability to control us, it's might not be worth it.
Hard problems are everywhere. Every company, every app, every product has unique and difficult problems to solve.

Sometimes those problems are with product design and UX. Sometimes those problems are mathematical. If you are successful, often they have to do with scalability and reliability. If you work with great people there are always hard problems in enabling productivity and building great tools. Many companies have serious and significant challenges around security and may not even know it. If most companies are solving simple problems, then why aren't most companies automatically successful?

If you broaden your definitions of "hard" you might find that there are many things that qualify. If what you mean is "hard mathematical problems" then yes, you will have to learn some math.

Try the games industry!

The pay sucks compared to other development, and work hours are crap, but you will be able to work on AI, gameplay, Graphics, physics (whatever your experience is).

But in all honesty, if you started programming a couple years ago, and learned a bit of rails/ruby, you have a lot to learn in various languages and systems (try C, embedded, iOS/Android, learn Haskell, big data, etc)

It depends on what kind of "hard" you're looking for. I've worked on games (Crash Bandicoot), search (ITA Software), and email (http://inky.com) and all have been hard, though in different ways.

Games are hard in that you're always trying to squeeze more into severely constrained resources, so you end up having to produce convincing but fake approximations of algorithms that would be far too expensive to run in their "real" forms.

Travel search was algorithmically very hard (see the few papers by de Marcken about this for a glimpse into this world).

Email is hard because it combines many disparate skills (design, UX, back-end scaling, protocol details) and because the MVP is incredibly complex.

All involved tremendous amounts of slogging.

This sounds like a variant of the meme "I could build stackoverflow in a weekend".

If you think you can build 99% of the apps out there, go out and try to build a moderately complex app. Make it better. You'll see there are all types of challenges from the technical, to the social to the political in small and large companies. Being a software developer is about solving all sorts of challenges, and not all of them are technical.

I don't think thats its a variant of the meme "I could build stackoverflow in a weekend." It doesn't have the in a weekend part.

The OP seems to consider getting a PhD an acceptable route. He's asking for directions, not a shortcut.

Twitter, Facebook, Stackoverflow are all really just CRUD apps. They face social and scaling challenges everyday among other technical challenges. I don't think he's giving CRUD apps enough credit. There's also security challenges, etc.
One place to find hard open problems is at the end of technical papers (e.g. in math, science or engineering). Many of them will have a section talking about issues, future work, ideas remaining to explore, etc.

There are infinitely many hard problems out there. If you want to stay motivated, work on stuff that matters.

http://radar.oreilly.com/2009/01/work-on-stuff-that-matters-...