What was the most interesting task you had to solve as a real-life programmer? originally appeared on Quora - the knowledge sharing network where compelling questions are answered by people with unique insights.
My first job was doing game development for Capcom, and we were working on . If you are not familiar with the game, it's a hack-and-slash type game where you have to kill your way through A LOT of zombies to get to your objectives. I was responsible for the zombie spawning algorithm.
In most serious game development efforts, game designers are separate from programmers. They are usually not programmers, and they design game worlds using game-specific (or engine-specific) tools. My job was to write the code that takes in zombie population descriptions generated by one of the tools, and actually populate the game world with the right types of zombies in the right places.
The file format was something like a list of zones, where a zone is a polygon given as a series of points (in 3D), and how many of each types of zombie (there were something like 10-20 types) the game designer want in that zone.
That doesn't sound very difficult, but the hard part is to do it do it in a way that looks "natural". That means the distribution should be more or less uniform, and zombies cannot be stuck in walls, in tables, in other NPCs, etc. However, they should be in closets, on top of closets, on top of tables, etc. Also, for performance reasons, there is no need to generate zombies if they cannot be seen, or if they were too far away (they are replaced by sprites). It took me a good 2 weeks to figure out, and that was a lot of fun. It involved some algorithm design (the stuff that you thought you wouldn't ever need again when you learned them in school), and also a lot of just trying random %$#$. Unlike scientific computing, in game development, things don't have to be "right". They just have to make sense, and be entertaining.
One of my past projects was to perform 3D MRI segmentation. MRI scans produce 3D images of body parts. In my case, I was working with brain scans.
MRI scans are very useful in diagnosing many brain disorders, but they are very time consuming to interpret, because there's no easy way to visualize 3D density maps on a 2D screen. It would be great if we can have programs that automatically label each voxel (3D pixel) by which anatomical part of the brain they belong to, because that way, the physician can easily see the shape of each of the parts. For example, in the centre of the brain there are 2 seahorse-shaped structures called the hippocampus. Hippocampi are responsible for memory and spatial abilities. Alzheimer's often results in change in shape/size of the hippocampi.
This problem is known as automatic segmentation.
There have been many previous attempts using non-machine-learning techniques, but all state of the art designs now use machine learning. It was interesting for me because it was my first "serious" machine learning project. I used a few state of the art techniques (3D convolutional neural networks), and was able to achieve pretty close to state of the art performance. This is the project that really drew me into machine learning - I was blown away by how powerful and general these techniques are when used correctly. They can be applied to all kinds of different problems, and in many cases, outperform state of the art hand-crafted solutions that were refined over years. For me, that's interesting.
For my MSc dissertation (I don't know what your idea of "real world" is, but for me, academia IS in the real world), I made a chess engine that learns to play chess by playing against itself using neural networks in temporal-difference reinforcement learning. It achieved master level over just a few days of training. It's something that no one could have done even 5 years ago, because the theory wasn't there, and we didn't have enough computational power.
It was interesting for me because machine learning nowadays is getting closer and closer to how humans learn. We know that human brains are made up of many tiny and simple computational units (neurones), and we know that human brains largely learn through temporal-difference reinforcement.
All throughout the history of engineering, we have been looking to mother nature for inspiration--birds for building structures that can fly, fishes for building structures that can swim, and bats for how we can use sound to quickly map out a 3D region. Now we are finally at a point where we have taken inspiration from how human brains learn, and have successfully applied what we figure out from neuroscience to build machine that can learn--not anywhere near as well as humans, yet, but much better than what we could do even just 5 or 10 years ago.
Artificial general intelligence has been the pipe dream in science fiction for at least a century now, but we are finally at a point where we can productively work towards that goal, with all the recent advances in AI/ML. There is still a long way to go, but for the first time in forever, we have a strong lead that we can investigate into, and there is no brick wall in sight.
This is not only happening in academia either. For example, Google DeepMind recently published their results on using deep reinforcement learning to play arcade games (). Using the exact same algorithm, the machine was able to learn to play a bunch of very different arcade games, some of them better than the best humans.
The takeaway from all these? No one should be working on boring problems. If the problem you are working on is boring to you, just find another one. There are plenty of very interesting and exciting problems in the world that still needs to be solved. That includes sexy, science-fictionistic problems.
And yes, it is entirely possible to make a lot of money solving these interesting problems in the "real world".
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+. More questions: