However, I am battling in my mind to logically arrive at difficulty rating for my profession.
There is no single difficulty rating for software development - the scope is way to wide. Brick layers, carpenters, engineers and architects all build skyscrapers.
a) How difficult can development be in terms of problem solving? Bring out the really big guns here such as high scalability infrastructures, building frameworks and middle-ware for the masses to taking the lead on technologies and where they go.
There are extremely challenging problems out there. Off the top of my head:
- computer vision to query for people or objects, from images or videos, possibly with real-time constraints
- generating 3D models from sets of images or videos
- algorithms to predict and/or trade on the stock markets (complex algorithms/maths and a mistake can cost hundreds of millions of $)
- simulation of physical processes for designing anything from radios to engines
- massive data processing and/or visualization
- automated data mining, feature extraction, machine learning, prediction, etc.
- robust OS kernel and driver development (imagine if a single NULL dereference can cause 100 million machines to crash 10 times each)
- system software for exotic architectures
- improving on state of the art ray tracing techniques for more realistic movies, or real time rendering
- porting algorithms to new hardware
- working with hardware designers to build hybrid software-hardware solutions to computational problems
- developing scalable distributed versions of existing algorithms
- developing new algorithms (or modifying old ones) for new hardware architectures (Xeon Phi, GPUs, custom (FPGAs), Cell, etc.)
- improved compilers (dynamic profiling, on the fly recompilation, auto-vectorization, etc.)
- performance tuning in general (massive topic, with a crazy amount of complexity involved when taken to extremes)
- algorithms in general: optimization (in the "function minimization" sense) under general constraints, computational geometry, graphics, graphs, sorting, number theory, numerical integration, search, etc.)
- etc, etc, etc.
b) What differentiates a mediocre developer from a great developer? Rather, what would make a developer unique or invaluable?
Obviously those who are the top of the fields I listed in (a) would be great. If you are a world leader in any of these, or are highly competent in a rare subset of these, it would make you relatively unique.
As for "invaluable" what's really important to understand, is that this is a demand and supply issue. Ideally (for you), the demand would be "from everyone", and the supply would be "just you" - in general, the harder a field is to understand, and the more education that is required to master it, the more likely there is to be a smaller supply. This doesn't guarantee demand though. It's also important to realize that the way a lot of people attain value isn't by having some elite absolute level of skill relative to the rest of the world (sure, this would help a lot, but is far less common), but rather by developing unique domain knowledge within their business.
c) Do you think, in terms of pure problem solving skill and talent, that a developer could be to technology what a doctor can be to a patient? Do you think the problem solving levels are on par?
I am fairly certain that there are many software developers and engineers that far outshine doctors in problem solving skills. Not ever doctor is House (from the show, not myBB) - many follow a very simple diagnostic flow chart, and have a relatively superficial grasp of the underlying concepts (same can be said for many developers). I am both a developer and a doctor (no, not the kind that helps people...
So in essence, is there a limit to the problems IT has at a given time? In my mind, it seems everything can be solved with software and
logical design. Granted there is the limit of hardware (processing and memory), but that's more a resource limit (when solving developmental challenges). If you throw enough money at it (resources), it will be possible.
That's a bit like saying that any problem involving numbers can be solved with mathematics.
So what is impossible? What are the 'mysteries' of technology (development wise)?
Trying to get 'make' to behave correctly on large projects.
Last edited: