An obvious concept that can so easily be forgotten at times.
An obvious concept that can so easily be forgotten at times.
The first is that it confuses programmer (as in "coder") and developer (as in "designer"). But maybe that distinction didn't exist yet. To me, a programmer/coder is actually a translator - they translate the solution expressed in the specification of a program into a computer language (which is typically itself translated to machine code by a compiler). In reality, gaps in the specification or impedance mismatches between the specification language and the computer language can "force" a programmer to become a designer. In a way, one can still see this as a translator having to translate an idiomatic expression.
The second problem with this statement is the same as with "readability": it is very subjective. That's why another claim in this text, that incomprehensible code written by bad programmers dies early, has been proven false in practice. Readability and viability are in practice separate concerns. For instance, highly optimized code is often less comprehensible than naive code yet it is more viable because the extra efficiency is required. Furthermore, human to human communication using a computer language is more or less efficient depending on the distance between then computer language and natural language; as an extreme example, it would be terrible to communicate using assembly language. So the H2H communication problem is better solved with documentation. That is, comments if we speak strictly about computer code.
Now the question is: if comments solves the human to human communication problem, why would one has to write more comprehensible/readable code? To me the answer is: you don't write comprehensible code in order to better communicate with your fellow programmers, you write comprehensible code because you write the simplest possible code. It is comprehensible because it is simple, not because of the additional requirement that it has to be understood by someone else.
Of course, that's in larger orgs. Smaller places will typically have an engineer doing everything.
[1] http://www.joelonsoftware.com/articles/fog0000000018.html
If the problem is inherently complex enough, particularly if it is multidisciplined, than it is the correct approach.
http://sdg.csail.mit.edu/6.894/dnjPapers/hall-correctness-by...
Software architects do the macro design, but they need to do that from an understanding of how it will be implemented, and the various lower level tradeoffs like consideration of the memory constraints of the target platforms.
In order to implement that design the non-architect programmers need to micro-design their bits that they build, too. And those smaller bits also often need abstractions/mini-architectures that aren't part of the macro architecture.
In fact, we even have software called an assembler :)
Of course, it all depends on what level you're doing design at, and what level your language(s) work at. But the point is that those 3 roles aren't necessarily are fulfilled by humans when working with software.
That does not mean that there can't or shouldn't be a distinction between the engineer and the technician on sufficiently complex projects. That is, they don't need to be filled by people who could perform either role, as the original comment I was replying to implied. That point was either miscommunicated in my original post or rubbed some people the wrong way.
That's exactly what a coder does.
There are some fields (draftsman, typist, others?) of people who created fine documents based on vague documents from engineers, architects etc. So in principle you could have a similar distinction between software archtects and coders. But it is exactly those document-gruntwork fields which have been transformed most by computers.
This is covered in the essay.
> It would appear all good programmers attempt to do this, whether they recognize it or not.
By writing the simplest code possible you are working on communicating with other programmers (including your future self).
Yes, the computer really doesn't care if your code is simple.
I strongly disagree with that statement. coders spend more time reading code than coding it. being fast & bug free is important, but its not the only reason to write readable code, and simple is only one proxy for readable code. also important is following standards, easy to follow flow, choosing good variable names, etc.
sometimes a day for me is spending 6 hours reading code, and then maybe adding or changing one line.
No, simple isn't a proxy for readable code. One can write in a readable manner a complex solution to a problem, but it isn't always right (using other "proxies" isn't, either).
It isn't always right because it's "a complex solution to a problem", not "a complex solution to a complex problem". What you made readable might even be "an overly complex solution to an actually simple problem"; meaning - to put it bluntly - that you have inadvertently spent your precious time on putting lipstick on a pig.