6

When I was in university, I participated in a programming contest; the problems turned out to be extremely difficult and boring, and they required previous knowledge about a particular set of problem, e.g. graph theory, algebra.

Our team failed completely at that competition, without solving any problems at all.

After I graduated and got my first job as programmer, my daily tasks have revolved around business logic and have nothing to do with the difficult problems I encountered in university. Most of the calculations involve mathematics and nothing more; besides that we only need some general database and good database design knowledge.

What kinds of job require knowledge about those advanced problems that I encountered in university?

13
  • 8
    Ehm, the interesting jobs, maybe? :)
    – Benjol
    Oct 11, 2011 at 7:28
  • 1
    You've been extremely lucky to find those rare, almost extinct trivial business logic problems that are not heavily based on graph theory.
    – SK-logic
    Oct 11, 2011 at 8:23
  • 2
    @gunbuster363: pretty much all of them. Even such a simple thing as an UI workflow in your average boring CRUD app is a graph. And knowing how to analyse this graph is mandatory for building optimal, usable UIs. And most of the business rules are declarative, with often quite a complex circular dependencies.
    – SK-logic
    Oct 11, 2011 at 8:30
  • 3
    @SK-logic: Even if you may be able to describe UI workflow as a graph, it doesn't mean that it's based on graph theory. I'd be interested in more pointers on how looking at the UI as a graph helps you in building optimal UIs. This is the first time I hear graph theory could even be used for such purpose, let alone it being mandatory. Oct 11, 2011 at 9:03
  • 2
    @SK-logic: although I agree with what you're saying as a practice, but someone needs to know nothing about graph theory to be able to do that
    – FinnNk
    Oct 11, 2011 at 9:09

6 Answers 6

7

Well, I'm writing "scientific" software, so obviously I use lots of +-*/ , often functions from standard math library, and sometimes more advanced math libraries such as LAPACK. Yes, knowing some math is useful.

But: still, 90+ % of the time goes to something else: trying to understand users and their needs, figuring out how to make the user interface and workflow intuitive, working around all sort of bugs and issues that have absolutely nothing to do with scientific algorithms or anything sexy: Why is the firewire adapter randomly corrupting data when we have chipset x and graphics controller (!) y and Windows XP SP II OEM, but now with any other combination? This user says that fonts are too small, this other user says that the fonts are unnecessarily large - well, maybe we should make them adjustable, except that oops, our window layout broke.

To be honest, I've never needed any graph theory. The spirit of the Big O notation is good to know and acknowledging floating point issues is mandatory, but other than that, it's better to just try out (prototype) the algorithm and measure it rather than try some meticulous analysis on paper. Virtually all solvable algebraic problems have been solved in off-the-shelf math library packages, so why should I know how to implement them? All I need to know is that it's a black box, I put something in and get something out, and don't forget that there are limitations, so always check that the output makes sense, and if needed, find the edge cases where it fails. Again, by prototyping. (If you want to sound more scientific, call it "simulation".)

What is essential is the skill to find what has already been made and understand how to make use of it, instead of wasting your time on re-inventing solutions to problems that already have been adequately solved. Stand on the shoulders of giants, think hard and try things out.

Addition: I'm of course biased towards what I do (as we all are), so don't take my word for it. According to user SK-logic in comment below, the following positions require knowing advanced theoretical concepts: game dev., engineering graphics dev. (CAD/CAE/...), compilers, finacial math (high freq. trading and such), database engines, complex business logic (e.g., in logistics), AI and NLP (machine learning, etc.), and many many more.

6
  • Math is not only about the numbers. Algebra is definitely not about the numbers - it is about the languages and transforms. So, you're using quite a lot of it without even noticing. And if you knew what's in there, probably you could have done it better, faster, cleaner. As for the graph theory, I admit I can be somewhat biased, as a compilers developer (when you're holding a hammer, everything looks like a nail).
    – SK-logic
    Oct 11, 2011 at 13:48
  • This is an answer I would like to hear, however, it would be fair to state what kind of roles require knowledge in such advanced topic. Oct 11, 2011 at 16:50
  • @SK-logic: This is similar to, for example, music theory: one could claim that anyone making music is using a lot of music theory without even noticing, because a lot of what he's doing can be described in terms of music theory. I've never understood this kind of argument, but granted, knowledge rarely hurts. Whether it helps is another issue. Oct 12, 2011 at 8:55
  • 1
    @Joonas Pulakka, it should be obvious. Some people learn theories by example, through their applications. Some learn the distilled theories first, and then re-learn to apply them in practice. Result is always the same - understanding. You simply can't program (or play music) without the understanding.
    – SK-logic
    Oct 12, 2011 at 8:57
  • @gunbuster363: I agree, however, I actually don't know what kind of positions require those topics. If anyone can improve the answer, please do. Oct 12, 2011 at 8:57
4

Say hello to enterprise programming, where your day is spent patching together various librarys, classes and pieces of code that already exist. Usually building on top of something that already exists, instead of something new.

2
  • That doesn't obviate a need to understand the underlying algorithms, though. Whether you implement your own algorithm or data structure or use an existing implementation, you should understand what algorithm is being used and what you can expect from it.
    – Caleb
    Oct 11, 2011 at 13:04
  • 1
    Sure, I was merely commenting on the author's apparent surprise at not spending his working days coding cutting edge stuff.
    – AndrewC
    Oct 11, 2011 at 13:07
2

Well, there are plenty of jobs that probably require complex mathematics: Games programming, financial market analysis and scientific research all spring readily to mind. Who knows how complex Google's search algorithms are? But you are correct that you're opening yourself up to a lot more possibilities if you can analyse a basic manufacturing-industry business model and translate that to code.

I don't think the point of a university programming contest is to find the person who's most likely to get a decent-enough job in programming forever. The point of these contests is to have fun out-geeking each other, and possibly to draw other people into programming, and maybe (if you're really lucky) identify someone with special skills.

In that context, modelling purchase orders, contracts, customers, components and products really isn't going to be as effective as modelling the 3D motion of a space shuttle or, better still, Superman.

5
  • 1
    50% of financial programming is making the output look nice for traders.
    – quant_dev
    Oct 11, 2011 at 16:52
  • Why market analysis require such knowledge? Sorry I've never been in a financial company. Oct 11, 2011 at 16:57
  • It is true game and scientific research require such knowledge. However, game industry was severely damaged by piracy and it is not easy to become a scientific research type programmer because the number of jobs is too small. At least, this is the case in my location(Hong Kong). Oct 11, 2011 at 16:59
  • @quant_dev, I specifically said market analysis, which is a very small part of "financial". I am aware what most of it is.
    – pdr
    Oct 11, 2011 at 18:44
  • @gunbuster, I think you'll find the games industry is still going strong, though it has certainly moved away from PCs.
    – pdr
    Oct 11, 2011 at 18:47
1

Actually, you write code using this all the time. Memory allocation, DB, collections, or whatever lib you use probably already does that.

But, as you said, most programmers fails (as you did) miserably on thoses tasks, so system are designed to abstract all thoses stuff.

At some point or another, you'll be imited to crappy software or will have to understand thoses algs. Because abstraction are always leaky at some point.

1

Yes, you are right. Most of the time , it is implementing the business logic rather than implementing some algorithms. We rarely get the opportunity to implement/code an algorithm to solve the business problem as most of the work is already done for in the form of libraries.

There are some jobs which still needs a sharp person in algorithms like real time algorithmic high frequency trading or some start up which do bus route optimization software etc.

0

In my opinion it's sometimes not about how tricky or usefull a problem is while you are in university but rather the way you approach it. It's about trying to find an answer that requires creativity and (sometimes) out of the box thinking. The earlier you get used to this the better. You go to university and study all kinds of things that you will forget almost the day you passed them but what stays is your ability to adapt to a variaty of things and this will ultimately (again in my opinion) make you a better developer.

I like to give myself challanges from time to time just to keep me going...

Not the answer you're looking for? Browse other questions tagged or ask your own question.