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?
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.
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.
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?"
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.
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.
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.
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)
I'd look at the Math Software companies, algorithms are their bread and butter.
"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.
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.
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.
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.
Well, algorithms are used in lot of fields. Some key areas which might attract you are-
- Financial firms where in algorithms for financial markets are made use of.
- 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
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.)
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)
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.
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
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.
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).
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.
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
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.
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 !!
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.
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.
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?
- Be a U.S. citizen
- Obtain an advanced degree (M.S., Ph.D.) in Math or Computer Science
- Take part in algorithm development & publish your findings in reputable journals
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.
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.
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?
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.
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 :)
Come join the sloppy "prototype programmer" dark side: scientific computing.
There are a number of scientific companies, such as ones that develop scientific analysis software and/or scientific instruments that hire algorithim specialists.
You may try careers such as Statistian, or a teacher of mathematics in the institutions.
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.
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:)