You mentioned design, but not it's handmaiden: analysis.
I design small systems, sometimes from the ground and composted paper records, all the way up to a self-contained application with its own database. More often, I find the job is fitting a new business requirement - some report, or some new type of data structure - into an existing web of badly-designed databases, interfaces and legacy constraints. A good example would be adding syndicated loans into a system that has been built on the assumption that a 'lender' is a fundamental and 'atomic' data entity.
Sometimes I find that some co-workers can be given a part of the problem and left to come back with ideas, then left to build a working solution that fits the rest of the solution; and sometimes I find that they cannot. Any of it: not the thinking parts anyway. All too often they are 'coders' who will never make the leap to 'Analyst Programmer', never understand when to normalise and when to flex, never see the business logic, never see how their work affects other people and the system as a whole, never escape from the need to be given detailed specifications and hard numerical constraints.
I think it's a kind of autism. But these coders are often superficially brilliant at the elegant little word-puzzles that the C++ boards parade as cleverness and kudos. As if elaboration and obscurity are better than simplicity and clarity. And yes, a clever algorithm is indeed a mark of intelligence: but my first real job in the City was building interfaces for a vast library of clever quantitative analysis functions that none of the traders were using. Some of those algorithms were works of genius, but it took a mediocre VBA developer with design skills to build them into usable tools for the traders. Really, all I had to do was get the traders to explain what they needed - the analysis required was minimal - and apply the most elementary workflow design to the visual layout skills of a one-time graphic designer and amateur cartoonist.
I doubt that I'm especially good at analysis and design. But it seems that I am regarded some kind of rare genius for doing it at all. How does that square with your ideas on what is needed to be a programmer? Somehow I think I measure up, all of about ten percent of the way, to what Don Knuth would say is needed to master the art of compter programming. But it's a start.
Maybe I should blog this in my own space, and see what happens. But I suspect I'll get more interesting answers here.
I agree entirely that analysis is missing. I often stop a project at the analysis stage, simply because it becomes very obvious to me that the amount of time it will take it is going to be HUGE, and that even then there's no reason to believe that my analysis will produce something that actually works. Or, at the very least, that I'd be happy with.
Analysis and perfectionism have killed more great ideas than any other combination of qualities, I think.
Me, I'm lazy. I can do the analysis thing (at least I like to think so), but sometimes the elegant little word-puzzles and the microoptimisation are easier and more soothing, precisely because you can do them without having to think very hard...
You mentioned design, but not it's handmaiden: analysis.
I design small systems, sometimes from the ground and composted paper records, all the way up to a self-contained application with its own database. More often, I find the job is fitting a new business requirement - some report, or some new type of data structure - into an existing web of badly-designed databases, interfaces and legacy constraints. A good example would be adding syndicated loans into a system that has been built on the assumption that a 'lender' is a fundamental and 'atomic' data entity.
Sometimes I find that some co-workers can be given a part of the problem and left to come back with ideas, then left to build a working solution that fits the rest of the solution; and sometimes I find that they cannot. Any of it: not the thinking parts anyway. All too often they are 'coders' who will never make the leap to 'Analyst Programmer', never understand when to normalise and when to flex, never see the business logic, never see how their work affects other people and the system as a whole, never escape from the need to be given detailed specifications and hard numerical constraints.
I think it's a kind of autism. But these coders are often superficially brilliant at the elegant little word-puzzles that the C++ boards parade as cleverness and kudos. As if elaboration and obscurity are better than simplicity and clarity. And yes, a clever algorithm is indeed a mark of intelligence: but my first real job in the City was building interfaces for a vast library of clever quantitative analysis functions that none of the traders were using. Some of those algorithms were works of genius, but it took a mediocre VBA developer with design skills to build them into usable tools for the traders. Really, all I had to do was get the traders to explain what they needed - the analysis required was minimal - and apply the most elementary workflow design to the visual layout skills of a one-time graphic designer and amateur cartoonist.
I doubt that I'm especially good at analysis and design. But it seems that I am regarded some kind of rare genius for doing it at all. How does that square with your ideas on what is needed to be a programmer? Somehow I think I measure up, all of about ten percent of the way, to what Don Knuth would say is needed to master the art of compter programming. But it's a start.
Maybe I should blog this in my own space, and see what happens. But I suspect I'll get more interesting answers here.
I agree entirely that analysis is missing. I often stop a project at the analysis stage, simply because it becomes very obvious to me that the amount of time it will take it is going to be HUGE, and that even then there's no reason to believe that my analysis will produce something that actually works. Or, at the very least, that I'd be happy with.
Analysis and perfectionism have killed more great ideas than any other combination of qualities, I think.
Me, I'm lazy. I can do the analysis thing (at least I like to think so), but sometimes the elegant little word-puzzles and the microoptimisation are easier and more soothing, precisely because you can do them without having to think very hard...