views:

2975

answers:

42

I've been doing programming for a few years and I am passionate about algorithms. I read books on it and develop them for programming contests. But on the interviews they ask me more and more non-algorithmic questions, the ones that you have to read a thick book on .NET and remember most of it by memory like the Bible. Does it mean that society values hard to remember knowledge more and therefore I should force myself to read those books, or is there a way to find a job that concentrates more on algorithm development?

+16  A: 

How about working for a search company?

I've heard that Google likes algorithms... Maybe BING over at Microsoft especially that they are sharing stuff with Yahoo.

RSolberg
why is Google 'GOOGLE'?
amdfan
@amdfan: Why is "Why is "Google" "GOOGLE"?" "why is Google 'GOOGLE'?"?
Jason
Because they are trying to take over the world. Its a big deal!
RSolberg
trying to? I almost never even open Office anymore thanks to Google, and now they're making an OS...
Hardryv
@Hardyv: How long will that be in BETA? A OS that will only run on Chrome (at least fully)? Hopefully the EU gives them the business. They are a search company who make other software. Microsoft is a software company who wants to be in the search business...
RSolberg
How EU going to give them business? Their OS is FREE!
Fajar
So is IE. What the heck is the difference? Nothing. If theudont go after Google, Microsoftsjould quit paying fines.
RSolberg
+10  A: 

Database jobs and scientific jobs come readily to mind. Really, you'll just want to watch out for the non-intuitive jobs, where most of the things coded aren't much different than what you worked on previously, but you'll want a job where new things are coded in every new project. It's pretty subjective, something I think you'd have to judge on your own... BUT You'll never get to exercise your skills if you don't get the opportunity.

Zachery Delafosse
+71  A: 

University Professor

Pyrolistical
Why is this down-voted? We do need more good professors!
Chetan Sastry
Why the downvote? This is pretty realistic.
womp
+1, but it needs to be more explicit
jcollum
This is not the job for someone who wants to spend most of their time programming.
Rafe
+1 for the right idea, -1 for the flippant execution.
WCWedin
Or know it all software development manager.
Michael McCloskey
@Rafe: he never really said that he wants to be a programmer, just that a) he wants a job and b) he wants to work with algorithms primarily
jcollum
I don't know if the stereotype is appropriate though... "Those who can, can, those who can't, teach"...
RSolberg
I believe you mean "Those who can, do, those who can't, teach".
Hooked
"And those who can't teach, teach gym." -- Woody Allen
Joe Blow
+20  A: 

Algorithms is only one part of software development. If you're attempting to get a job in the software industry, you will be required to understanding many more concepts other than algorithms. I'm not saying that algorithms aren't important, because indeed they are. However, there are a lot of other concepts that are equally important. You should take the time to learn those concepts as well if you plan on succeeding.

If you saw someone who was trying to be a modern physicist who focused in quantum mechanics, you would never hear them saying, "I don't want to learn Newtonian physics, it doesn't apply to me!" or "I refuse to learn Calculus, I'm not a mathematician!" or "What does a physicist need Chemistry for?"

Joseph
I would flip the physics analogy around; algorithms are an older, more fundamental discipline than the use of modern OO languages with fancy IDE's. That said, what mechanical engineering is to Newtonian physics, driver and OS design might be to algorithmic programming.
WCWedin
You get plenty of people who learn say quantum mechanics but have no clue about solid state physics or quantum electrodynamics.
Callum Rogers
+8  A: 

Certainly you can look into helping to develop cryptographic algorithms, although a lot of those opportunities will probably be as part of the government and/or government contracting work.

AlbertoPL
+5  A: 

If a company tells you that you need to memorize a .Net book, leave the interview... NOW!

Though I think it is more likely that they are just testing programming concepts, which come with practice. Memorizing a programming book is not going to help you one single bit in terms of being a good programmer.

As for the algorithms... I think they would be very well applied if you had the programming abilities to go ahead and implement those. I am sure others will point out places that value your algorithmic abilities.

Mostlyharmless
If your company tells you that you need to memoize a netbook, then you're at the right place.
Ryan Guest
+27  A: 

Look at research related jobs. You have options in academia, large software companies (MSFT, IBM, etc), and other companies looking to competitive advantages through in-house software (Financial industry, stock trading, etc).

The issue with "working with algorithms" is that there is a vast library of good enough algorithms that serve most companies needs. There's little value in re-doing them -- so you have to find an employer who sees value in creating new ones. That's not the average consultancy / software company, because they get very little business value from it.

Consider employers who derive business value from algorithms, and you'll see what your options are.

Nader Shirazie
+4  A: 

As general rule, I'd say gravitate toward jobs that require as little interface work as possible. They're the ones where you'll use algorithms more. Avoid HTML, CSS, MVC frameworks, JavaScript (for the most part), Java Swing, whatever the Windows GUI stuff* is called, and everything else. Ideally you'll work for a company that's building compilers, network hardware, quantitative stock trading software, and things like that.

Everybody who builds anything of some complexity does some work with algorithms, but if you want to spend lots of time on it, avoid jobs with tasks that take up a lot of time and don't involve algorithmic work. Most of the time, that's GUI or Web front end work.

I'd also say that big companies can be better than small ones because there's more room for specialization.

[*] WPF, Winforms (jcollum)

Rafe
+25  A: 

I'd look at the Math Software companies, algorithms are their bread and butter.

Wolfram

Mathworks

Maple

Lance Roberts
+4  A: 

"Back-end" development requires more algorithms than "front-end" development. For example, working for a database company that needs to develop new distributed algorithms for their databases, compilers, operating systems, software development frameworks, data visualization, data mining, robotics, security/encryption, ... there are lots of areas where algorithms are important.

Larry Watanabe
A: 

the trend in software is to use frameworks and existing code, most jobs will be for code monkeys banging out screens, with very little of what you are after. don't be upset or surprised if you never find a job like this.

KM
-1, someone has to code that framework
jcollum
And, implementing a framework is not done without algorithms either...
nik
I'm bet that the algorithms that excite the OP are quite different than implementing frameworks
KM
Its BS anyway. 20 years ago when I graduated they were telling us all how 4GL's were gonna make all us programmers obsolete. Same crap, different decade.
T.E.D.
@T.E.D., I didn't say anything about how you wouldn't code anymore, just that most jobs will not be doing exciting algorithms, but boring repetitive coding.
KM
I think you are right for the most part. The type of job he's looking for will be hard to find and harder to "land." It'll also likely force you to relocate. But... that's not to say he shouldn't try.
Steve Wortham
never say never.
Troggy
@jcollum: read the post
Hooked
+6  A: 

Algorithms are required everywhere to fit solutions into constraints.

  • graphics solutions of efficiency and space constraints
  • signal processing (efficiency, detail)
  • search and classification (handling data in volume, hopefully fast)
  • pure physics and mathematics (development of software for special requirements)
  • modeling (lots of complex parameters to manage)
  • number crunching and statistical analysis solutions

The list is endless.

If you are good with algorithms,
move over a bit towards design and
work with people who are good at writing code in the required languages.
You will probably have to maintain good communication skills to communicate your work.

nik
+2  A: 

http://en.wikipedia.org/wiki/Researcher

tr3
+5  A: 

Meh, in my opinion most programming jobs aren't exactly calling for very innovative thought. It's just more of the same business logic that's been done before, maybe slightly repackaged, and in new mediums.

However, if a company wants to do something innovative, THEY NEED algorithm guys. So look for start-ups doing something big and fresh. Also, look for companies that do a lot of research.

Junier
+2  A: 

Well, algorithms are used in lot of fields. Some key areas which might attract you are-

  1. Financial firms where in algorithms for financial markets are made use of.
  2. Search engines - Different algorithms like linear search, sorting, swarm intelligence, graph search, list search, string searching algorithms and many more are used depending on the needs.

In a nutshell, algorithms are sequence of steps used to solve a particular problem and are very handy in research.

cheers

Andriyev
+50  A: 

If you "like algorithms", then I'd suggest looking for a place where the stuff they're working on really needs high performance. You're probably not going to find as much of a focus on algorithms where people are just writing typical end user apps, because the fact is that today's machines are overpowered when it comes to that sort of thing. When machines are so overpowered for the task, it might not be a big deal to just brute-force everything.

Companies that develop the following types of software will probably have more of a focus on algorithms than your typical software shop:

  • search engines and other very large scale web sites
  • database engines and data mining
  • games
  • media editing/processing software (video, audio, photos)
  • compilers
  • physics simulators
  • mathematics tools (eg: Maple, Matlab, Mathematica)
  • computational biology and chemistry
  • computational finance
  • realtime systems (eg: fly-by-wire systems, medical systems, etc.)
  • scheduling systems (or anything where you need to [approximately] solve NP complete problems)

(I'm sure there are some others I'm missing.)

Laurence Gonsalves
Computational Chemistry and Computational Biology are 2 more areas to consider.
David Glass
Computational Finance?
Frank V
Scheduling stuff like planes, people, material etc.
Jonathan Parker
I have a friend that works on the software on Fighter Jets. How cool is that? Turns out the algorithm to throttle the rate of a turn is O(n*log(n))
Michael Deardeuff
I've incorporated ideas from the comments in the answer. I knew I was missing some. :-)
Laurence Gonsalves
grignaak: What's the 'n' in this case?
caf
The machines are not overpowered at all. "Small" change in the asymptotic characteristic of the algorithm can mean a huge change in actual time/memory consumption.
Zoli
@Zoli: I'm not by any means trying to say that people shouldn't pay attention to the complexity of their algorithms. I'm just saying that places that that write typical end-user applications tend to not care as much because the amount of data their code deals with is so small, and today's machines are so fast. Even if you make something 1000 times faster in the typical case, if the fast version takes 1ms then the slow version still takes only 1s, which might be okay if you're talking about an operation where a human being is in the loop (since the human will still be the bottleneck).
Laurence Gonsalves
Obviously, if we're taking about algorithms with different time complexities then the difference won't be a constant factor. For larger n, that difference may change from a factor of 1000 to a factor of 1000000, in which case the less efficient algorithm isn't feasible, which is why a number of the suggestions I made were for things that deal with large volumes of data (eg: search engines, data mining).
Laurence Gonsalves
weather prediction
Matt H
+ geographical information science, see: http://gis.stackexchange.com/
julien
+5  A: 

Few areas you could look into:

  • Search engines
  • Game development
  • Social media sites like Facebook, Linkedin
  • OS Kernel/Compiler design (there are application of algorithms, but more of bit twiddling)
  • Financial companies (the ones in Wall st that develop complex simulation models)
Chetan Sastry
+4  A: 

I work for a transporation company and we optimize routes using such algorithms as TSP (Travelling Salesman Problem). The work we do saves the company millions of dollars and algorithms are at the heart of it.

Tony D
+8  A: 

You didn't mention your background, but there are several paths you could follow, and they are not necessarily exclusive (i.e. you could follow multiple paths).

First, if you have your degree in IT, seriously consider getting a Master's degree. This is the KEY to being able to teach later in your career if you choose. Teaching is a great way to pass your enthusiasm on to a new generation of programmers. Don't just think "University Professor" (you pretty much need a Ph.D. for that), but other teaching positions are great as well - i.e. College Instructor (often needing that Masters degree), Continuing Education Instructor / Teacher (great way to get your feet wet).

Also, much of the scientific programming will often involve algorithms and code tuning. Great careers in scientific programming.

Game houses use algorithms and (again) code tuning).

ALSO - seriously consider giving some time to an Open Source project. There are thousands of open source projects out there, and they are usually welcoming of programming help. Algorithms and code tuning are a great way to get involved, as these are sometimes not considered as "sexy" as other aspects of the project, and don't get as many folks helping out.

But most important - KEEP YOUR EYES OPEN and continue to follow your passion. We NEED passionate programmers.

Cheers,

-Richard

Huntrods
+5  A: 

One area to consider is academia. One person mentioned a professor, but there can be much more to that. This is at the masters and PHD levels, but research is very active in certain universities that require the best of the best when it comes to algorithms. You would want to make certain it is a research univerisity. I have seen some professors that spend most of their time on research and not teaching. If they have a TA, they teach even less. You would have to have a little interest in teaching, but universities have some of the coolest research and development.

Troggy
This was gonna be my answer too. Tough to beat that approach, if studying algorithims is really your primary interest.
T.E.D.
+3  A: 

It might be a little harder to find that kind of work, but it does exist in numerous industries. Many pieces of software still have a need for clever & efficient algorithms to make them work well and work fast.

What immediately comes to mind is pretty much everything involving media (graphics & sound processing). Adobe, for example, might be looking for software engineers to further optimize some of their real-time effects in Adobe Premiere by better leveraging the GPU. That kind of work requires insane levels of optimization. But those types of programs are broken into a large collection of algorithms, so it'd be like heaven for someone like yourself.

The same could be said for games as well, if you're interested in that kind of thing. I used to do OpenGL programming as a hobby and I loved it. It's far more interesting to me than what I'm doing now (web development).

Steve Wortham
+2  A: 

Maybe you can start your own software company, specializing in a niche market where you can get an edge with your skills. E.g. signal processing, movie digital postprocessing etc.

In the beginning you can spend about 1/3 of your time with the things you love, the rest will be spent with marketing and other necessary stuff. But 1/3 is still a lot more than the average IT job can offer you.

+18  A: 

I've been moving from the industry to academia and back in the last 11 years. I've been in two companies (and several universities - but that's a different story) so far, both of them with the title of algorithms developer (senior in the current company). Here is my experience:

  • Nobody will consider you for the job with less than an MSc in EE/CS/Math/Phys from a good school.

  • There aren't that many jobs around. However, there are even fewer people who can actually do the job, and the paycheck is reasonably nice.

  • You have nothing to do in a company whose main innovation is the user interface, or one whose kernel (of their product) is not in c/c++/c#/fortran/matlab. Regarding the point you raised above: I only know c and c++ - the job of on algorithms developer is to code things that run fast, not to know the latest .NET/Java fashion.

  • Generally speaking, (and from my experience), there are four big sub-communities of "applied" algorithms development (i.e out of the academia): data mining (which includes search), financial, signal processing (both voice and image, and this includes sensing), and simulations. While the techniques overlap, there is a huge amount of base knowledge unique to each of these communities. Big companies would care only about how smart you are, but small companies in need for an algorithms developer usually like to hire somebody with extensive knowledge in their area. So it's not easy to move from one community to another.

  • You almost always code your own ideas (which IMHO is very good), and in small companies you will need to help with other stuff too.

  • Keep in mind that in a small company you job is temporary: they'll want to have a working product, and then either you become a standard developer, or look for a new job.

HTH

David Lehavi
Your 3rd point is not entirely accurate. First of all, only part of the job of an algorithms developer is to code things that "run fast"...sometimes "running better" is just as if not more important (for instance in a new machine learning algorithm). Also, there are "algorithm-centric" projects that use languages besides C/C++/C#/Fortran/Matlab. The complicated machine-learning algorithms in Weka, for instance, are all done in Java.
Michael McGowan
The only specific and useful answer here, thanks!
Joe Blow
+1  A: 

Any industry with vast amounts of data. You can get away with simple algorithms and brute force approaches with small data sets, but when the data grows you have to get a lot smarter.

David Plumpton
A: 

radical exteremest

martin
Is that what we call hackers now?he's looking for a future, man. This is not even "haha" worthy.
AndreasT
+2  A: 

It has been suggested by others on the sidelane, but I will reiterate it here : consider Game Programming

Game development spans a wide range of challenging areas like:

  • Game concepts and algorithms in general, on the lines of a Sudoku field generator
  • basic stuff like path finding etc.
  • 3D Graphics algorithms for new stunning effects
  • AI < you might be really really happy there
  • and you do it literally for fun (well, almost :))
  • The stuff has to run hellish fast, so you'll never be bothered with bulky frameworks

There's a big but to it, and it is called the gaming industry I haven't been there, but I have heard and read that it can be a really tough place. Both in pressure and money. Gaming is now a Billion Dollar market with deadlines and big budgets and also, yes, big frameworks. But there are sure as hell a few companies out there who produce innovative games "when they are finished" and provide a fun environment. I think you would fit well there.

Well, just what I dream of :) Good luck to you in any case !!

AndreasT
+1  A: 

If you live somewhere around financial district, you might consider working for exchange (i.e. stock or options exchange), hedge fund or other financial organization that cares about performance, low latency, high troughput and real-time computing.

Otherwise, you may consider embedded software development where target systems are usually very limited by CPU and memory amount.

Also, there are lots of other industries where algorithms are widely used. For example, data processing (search engines, relational database management systems, market data collection and processing (see financial software)), high quality 3D games, scientific researchs, cluster computing and so on.

From what I know, financial developers makes more money then any other developers because this industry includes everything from the above. But you need to have good mathematical, financial skills and at least one of the low-level programming language like C, C++ or Ocaml to make your dreams come true.

JetSnaiL
+2  A: 

Work for a shipping company.

Do you know how complex the math and logic behind shipping routes gets? Millions of variables to account for. Bad weather, inefficient drivers, etc. The guys behind the networking of a shipping company make total bank.

Then you have to work out efficient ways around the old problems, like the traveling salesman problem (I'm sure that is huge at FedEx and UPS).

Best of all, from the sound of it, you'd love it. Taking input, analyzing, determining correct output..that seems right up your ballpark.

Hooked
+1  A: 

In the United States, plenty of NSF, DOE and DOD National Laboratories have plenty of mathematicians & computer scientists who work primarily on algorithms.

What's the best way to work at national laboratories like these?

  1. Be a U.S. citizen
  2. Obtain an advanced degree (M.S., Ph.D.) in Math or Computer Science
  3. Take part in algorithm development & publish your findings in reputable journals
Pete
+2  A: 

If Algorithms are your thing, you don't necessarily need to go into academia. And you're probably not going to be happy working in a typical Fortune 500 IT Shop, where most of the work is CRUD programming to a database ... what I call "paperwork automation".

Look to more software-centric companies - the obvious examples being Google, Amazon, or Microsoft. I'm sure you could add Adobe, Facebook, Twitter ... and a ton of other Web 2.0 companies that are doing things that nobody else is doing, or operating on very large scales. A lot of big websites' reason for existing is a library of carefully designed, clever algorithms. Netflix just wrapped up a million-dollar contest, looking for a new algorithm to improve their DVD rental suggestions based on social data. Do a little Googling (no pun intended) and find some accounts of what an Amazon or a Google phone screen interview is like. They ask a LOT of algorithm and data structure questions that would make most programmers' heads spin around like Linda Blair.

The good news for you is, there's a LOT of need for people who are good with algorithms.

Peter B
+1  A: 

Some often overlooked but can be highly fun algorithm heavy jobs (from actual offers I've seen over the years) :

  • Public utilities, especially transport. I've seen job posting for Montréal's Transport System (STM). They wanted to optimize whole bunch of things to reduce costs so heavy use of graphs, simulations, workflow optimisations etc. looked like fun
  • Same goes for electric companies, especially the transport part. Many simulations ans such on the power distribution, failover, grid balancing etc
  • Meteorology and other earth simulation. Here though it will mostly be academic but there are a few privates and there are also public services that will need programmers for their systems.

the rest I have in mind has pretty much been given already by others.

This being said... game AI is ripe with algorithmic and game are in dire need of more challenging opponents. However positions are few and game studio tend to shun large swath of the possible options, they like the comfort of what has been done already, the unbeaten paths usually leave a chill on their spine. Smaller studios will tend to be bolder.

Newtopian
A: 

We're hiring :)

+2  A: 

Rocket Guidance Systems ... Even if the mmilitary does not hire you you can always build your own rocket and guide it :)

+2  A: 

First of all if you are just finishing your under grad, chances of you getting a R&D job as in google or microsoft where you need extensive use of apt algorithms are very low. However it doesn't mean the entry level jobs may make you algorithm ignorant. Many of the times you may be asked to do a sort and it helps to know when merge sort is better than bubble sort. So don't worry.

However if you are so keen, the gaming industry is so different than conventioanl software development and most of the times they use extensively tweaked algorithms. Why don't you try your chances there?

Christy John
A: 

Programmers can be sorted into 2 main categories: software developer and algorithm developer. Aside from the very basic general programming concepts, these 2 are separate professions.

I see that algorithm development is more and more demanded, it is going to have as big increase in demand as software development have had in the previous decades.

Mainly because of increasing industrial use of data mining, image/sound/natural_language processing/recognition, 3d technologies (visualization, scene reconstruction), encryption, compression, physical and chemical research/optimization, logistics, and so many more topics.

Algorithm-development is going to be the next best-payed profession.

So I think that you should feel lucky to like this profession. I advice you to stick with it, and reject any software developer job.

Zoli
A: 

Years ago, I had the same objective in mind, Helping(working) Research projects to innovate and prespere. From place to other seeking those competent ghost people to hire me and give such an opportunitiy to evaluate my imagination and maths logic. Unfortunately it didn't go so far, found myself most likely in the flow, lending money from familly and mates in order to help with the month's expenses.. Until recently I made myself another goal, use my available C/C++, GUI, Databases, skills to get a kinda (respectable job), pay my math master degree, study the night, go from time to time assist the exams and maintain my ambition and dream grow up.

There are a bunch of ways to make your path flirt back with your ambitions (ShakeSpear :)

ZeroCool
+2  A: 

Come join the sloppy "prototype programmer" dark side: scientific computing.

temp2290
+1  A: 

There are a number of scientific companies, such as ones that develop scientific analysis software and/or scientific instruments that hire algorithim specialists.

Bill W
+1  A: 

Robotics is another area hat might interest you.

Junx
A: 

You may try careers such as Statistian, or a teacher of mathematics in the institutions.

Emmanuel
A: 

Easy.

(1) Games industry. (Half of the games industry is just interface, which is the opposite of what you're looking for, so not that half.)

Note that the computer game industry is pretty much the largest entertainment industry on Earth (now bigger than the movies), so you won't have a problem.

(2) Machine vision.

There are many other specific niches, already mentioned, such as logistics. Do not take a government job.

Joe Blow
UI programming is arguably one of the most important aspects of coding, especially in good game design.
Randy
Interface programming is extremely important, in fact critical, for the business success of a product, but somewhat boring. The guy was asking about algorithm design, which is a universe away from programming interface. Algorithm design is essentially "being an inventor," scientific research if you will.
Joe Blow
A: 

Search engines (Google,Yahoo) Operating systems a small optimization in their algorithms will mean an enormous change in their huge systems, so these companies are bound to stress on good algorithms

Do remember to drop into Linux development and other open source projects where you can express your love for algorithms:)

ShyamLovesToCode