5 ms·
Good read! That said, I don't know about self-mockery. A good line from the linked lecture transcript: > The competent programmer is fully aware of the stric
by _Nat_ 6y ago
Good read!
That said, I don't know about self-mockery. A good line from the linked lecture transcript:
> The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.
He seems to be addressing the issue of inflated egos influencing people to be "real programmers". For example, do you use a simple GUI interface? -- HA! I can type an arcane string into a command line with my TOES! Clearly, I art teh superior to thou. Which is stupid, because a proper GUI that shows the full scope of the API is awesome, while memorizing arcane strings is a silly practice. But, some folks let feelings of intellectual superiority cloud their judgement and beliefs, which Dijkstra was speaking out against.
He repeats this theme several times, with the overall lecture being a tad repetitive and redundant as it states the same thing over and over in a repetitive series of repetitions, but for a specific example:
> Finally, although the subject is not a pleasant one, I must mention PL/1, a programming language for which the defining documentation is of a frightening size and complexity. Using PL/1 must be like flying a plane with 7000 buttons, switches and handles to manipulate in the cockpit. I absolutely fail to see how we can keep our growing programs firmly within our intellectual grip when by its sheer baroqueness the programming language —our basic tool, mind you!— already escapes our intellectual control. And if I have to describe the influence PL/1 can have on its users, the closest metaphor that comes to my mind is that of a drug.
In short, Dijkstra strongly advocates intellectual minimalism. The "humility" he advocates is fortitude against ego-driven peacockery in decision-making; taking the simplest possible approach, that's the easiest to do, even when doing so doesn't show off one's intellect.
- galaxyLogic 6y agoThat is good stuff (well he was Dijkstra). I think we've all seen such hubris play out. When you want to prove that you are intellectually superior you will demonstrate that you can master the most difficult tools (say category theory?) without understanding that your real goal should be to find simple solutions to difficult problems. A simple solution does not look like much because it is so simple, but it can take a genius to come up with it. Whereas complicated solutions are easier to come by and do demonstrate your intellectual skills.
- User23 6y agoBear in mind though that spending hours upon hours to find a simple solution to a hard problem will tank your professional career. Why? Because your manager will look at your simple solution that you took such pains to derive and then ask why it took you so long to produce such a small amount of such obvious code.
- galaxyLogic 6y agoThat is the case no doubt in most organizations. And I can see their point if it works it works even if it may be very difficult to maintain it. But that should be a conscious decision, not a point of pride how complicated the code is to understand. Just because a person can write code that only they can understand does not mean they are more intelligent than others, nor that the quality of such code would be "good". :-)
- edejong 6y agoAlthough I’ve seen numerous examples of hubris by creating accidental complexity, I actually think category theory is an exercise in minimalism. But the realization only happens when understanding the complexity of ‘normal’ imperative and object oriented programming. The problem with category theory, as I see it, happens due to a mismatch with our mode of creating. We tend to converge in our solutions from chaos to order. Formal systems don’t provide space to be chaotic in. We need to be right the first time. We need languages and IDEs that will help us find abstractions. Static analysis saying: “this thing here is like all those other things if only you see it like so. Perhaps you want to structure it like those other things as well?”
- User23 6y agoDijkstra strongly advocates not making a mess of things. He then elaborates this means the primary challenge the programmer faces is keeping his programs intellectually manageable, which among other things means not burying himself in needless complexity.