“The programmer of today shares many of these attributes of a craftsman.
He learns his craft by apprenticeship in an existing team of programmers –
but his apprenticeship is highly paid and usually very short. He develops
his skill by trial; but mostly by error. He does not study theory, or even
read books on Computer Science. He knows nothing of the logical and
mathematical foundations of his profession; and he hates to explain or
justify, or even to document what he has done. ”
I find the “craft versus profession” division in programming fascinating. One interesting aspect is that the programmer in industry tend to both create the largest programs and to be closest to the craft side of the discipline. Oppositely, computer science might be idealized to involve scientists specifying algorithms and then sending them to the crafts people to implement (similarly to how physics or architecture might be idealized).
I think it’s reasonable to say, however, that this runs up against the problem that all aspects of programming actually tend to have a nearly equal intellectual challenge, that “implementation details” can really be as important as original conceptions and that many of the scheduling and so-forth problems of programming in ways come out of this.
Read this while listening to the best of Hans Zimmer for a truly inspirational read: https://www.youtube.com/watch?v=AAaUoOOUFA4