- Working with real-life problems you will need the following:
scientific and/or engineering knowledge;
- numerical analysis and programming;
- knowledge of modern computer architecture;
- source code (to have full power for optimization and tuning);
- experiment with different algorithms and implementations.
- Analyse critically what you read or hear.
The complexity of modern machines and compilers is so great that
theoretical estimations of algorithm complexity (bread and
butter of computer scientists) may be misleading. There are too
many layers of transformation from source code to hardware,
so small changes in in the source code may change performance greatly.
The speed of innovation in hardware and compilers is so high that
well known and tuned algorithm may already become obsolete
or at least suboptimal.
- See big picture!
- Your customers may have only vague understanding of
computing but they are professionals in their field.
Talk to them, be sure that you understand the problem,
get as much information as possible concerning ranges
of variables, relative probability of different scenarios and all that.
- Use the right instrument for the job!
- More complicated instruments are not necessary better.
In many cases it is less work to write few tens of lines
in C than to install large library and tune it properly.
- Don’t copy code!
- It may be illegal.
- It may be dangerous.
- Even code written by a Great Master may be
suboptimal for your specific case.
Study the code, understand it and write your own.
- Don’t leave loose ends!
- Fix any problem as you find it. Small bug may be a symptom
of serious flaw in algorithm design or understanding of the problem.
Don’t make quick and dirty workarounds.
Find the reason and fix the problem properly.
- Don’t be overprotective!
- Remember that a crash may be annoying but a wrong answer is disaster.
- Don’t be a slave to the rules!
- Including those above.