
E.W. Dijkstra Archive: The Humble Programmer - mrzool
https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html
======
kevindeasis
It's interesting to imagine what Djikstra would've accomplished if he instead
decided to focus on theoretical physics. Conversely, imagine what we would've
lost if we didn't have Djikstra as a programmer.

I'd like to point out that Dijkstra's writing might arguably the best writing
I've seen from a programmer. English is not my first language and his writing
is inspiring; if possible I'd like to request if anyone can point me to a
resource (apps, software, etc) so I can learn to write, speak, and converse
like Dijkstra in this lecture?

~~~
gizmo
Dijkstra writes directly and with and air of authority, but his writing is not
great. His style is pretentious and obfuscatory. Even worse, he uses his
authoritative style to get away with tons of unsubstantiated assertions. Let's
look at a passage from the linked lecture:

 _Those who want really reliable software will discover [authority!] that they
must find means of avoiding the majority of bugs to start with
[unsubstantiated!], and as a result the programming process will become
cheaper [unsubstantiated!]. If you want more effective programmers, you will
discover [authority!] that they should not waste their time debugging
[repeated assertion!], they should not introduce the bugs to start with
[repeated assertion!]._

He could just say:

 _When creating reliable software debugging takes up much time. If we develop
techniques that prevent these bugs from being introduced in the first place
then programmers will become much more effective._

Good writing is terse and easy to understand. It should lead the reader from
the premises to the conclusions. Good writing shouldn't contain pretentious
detours. I don't think you should emulate Dijkstra.

~~~
tel
I doubt Djikstra would have been Djikstra is he communicated in such a sterile
way. His writing achieved the ends he sought. He's memorable and endlessly
quoted which gives life to his ideas beyond what is immediately provable.

You might argue this is improper, but I think that's a bit morose. I dread the
day when all people write like that second sentence.

That's not to say someone should emulate him, though. It's not that it's
wrong, it's that they're bound to fail and produce something tinny and
derivative. That's the thing your revised sentence has going for it: it's as
cheap as it is limp.

~~~
gizmo
That's the thing with blowhards. When you take away their rhetoric and
literary flourishes they've got nothing left.

If something becomes boring and derivative when stated plainly then there was
nothing of substance to start with.

------
isseu
> I married and Dutch marriage rites require you to state your profession and
> I stated that I was a programmer. But the municipal authorities of the town
> of Amsterdam did not accept it on the grounds that there was no such
> profession.

wow

~~~
throwaway676565
Shocking in his case as he was a true programmer (computer scientist).

Today, people say they're "software engineers" with a straight face, which is
a disservice to real engineers. I know because I get paid to code.

If bridges were built like software is...

~~~
Xophmeister
There's more to engineering than building bridges. Would you discredit
electrical engineers, for example, because PCBs aren't hydroelectric dams?
While I generally agree with your rhetoric that software engineering is
perhaps not _as_ disciplined, it is still a legitimate engineering discipline,
imo.

~~~
throwaway676565
Right, I wouldn't discredit electrical engineers. I can reasonably expect my
house not to burn to the ground due to an electrical fire, and my washing
machine/fridge will probably fail safe as well. Hardware engineers mostly get
a pass in my book, too (when was the last time your CPU hung?).

Meanwhile, Toyota is allowed to ship buggy, untested, unauditable ECUs[0]. How
can SE be considered a legitimate engineering discipline when such examples
abound?

The "Software engineer" title ought to be reserved for those doing formal
verification or at least aiming for high code coverage and otherwise employing
proper design and testing methods. Think programmers of NASA shuttle avionics
or airplane autopilots.

It's not for your run-of-the-mill startup coder (which includes me).

[0]:
[https://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_...](https://users.ece.cmu.edu/~koopman/pubs/koopman14_toyota_ua_slides.pdf)

~~~
fratlas
I find this interesting - I changed degrees halfway through electrical
engineering to computer science (which is still under the engineering school
at my university). You're right, EE is _much_ more disciplined, however,
computer science/SE still requires an extremely logical thought process, and
is applying science/maths to solve real problems. For these reasons, I believe
it is engineering (even if somewhat softer than other strands).

------
dang
Many previous submissions:
[https://hn.algolia.com/?query=Humble%20Programmer&sort=byDat...](https://hn.algolia.com/?query=Humble%20Programmer&sort=byDate&dateRange=all&type=story&storyText=false&prefix&page=0).

Reposts are ok unless the story has had major attention in the last year or so
([https://news.ycombinator.com/newsfaq.html](https://news.ycombinator.com/newsfaq.html)).
In this case there has:
[https://news.ycombinator.com/item?id=10014530](https://news.ycombinator.com/item?id=10014530).

------
euske
"I don't need to waste my time with a computer just because I am a computer
scientist."

\-
[http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EW...](http://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1305.html)

------
samfisher83
Here is the last line in his essay:

intrinsic limitations of the human mind and approach the task as Very Humble
Programmers.

The ironic thing was he was not very humble. He was pretty mean to a lot of
people. He had a pretty massive ego.

~~~
Joeri
He was not humble towards people, he was humble towards programming.
Recognizing that you can never be more than an apprentice at programming is
essential to becoming good at it.

------
charlieflowers
My quick summary -- The main limitation in programming complex solutions is
the limit of complexity each individual can hold in his/her head. So if we
shape our tools, processes and disciplines to acknowledge that, the software
development industry can become an order of magnitude.

~~~
charlieflowers
... more effective.

------
majewsky
Favorite quotes:

> I pray daily that more of my fellow-programmers may find the means of
> freeing themselves from the curse of compatibility.

> Society is getting dissatisfied with the performance of programmers and of
> their products.

> [Program] testing can be a very effective way to show the presence of bugs,
> but is hopelessly inadequate for showing their absence.

> The purpose of abstracting is _not_ to be vague, but to create a new
> semantic level in which one can be absolutely precise.

> 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.

It's fascinating to see what he expected to be the biggest problems in
programming. His discussion of more efficient programming techniques focuses
on theorem provers, automated checking of loop invariants and the like,
whereas today, the biggest problems typically occur during integration of
software components with each other.

But maybe he actually did foresee that:

> I now suggest that we confine ourselves to the design and implementation of
> intellectually manageable programs.

Regarding provably correct programs: I'm torn here. On the one hand, if we
required all programs to carry proofs of their correctness, that would exclude
a huge number of current programmers who lack the formal education etc. to
carry out these proofs. On the other hand, if all programs that we need would
have proofs of their correctness (and thus carry a bunch of helpful invariants
and formal specifications), it might be easier to combine all these programs,
hence obliterating the need for most programming tasks that are just concerned
with integrating multiple programs with each other.

I'll close with the most insightful paragraph from this whole piece:

> There may also be political impediments. Even if we know how to educate
> tomorrow’s professional programmer, it is not certain that the society we
> are living in will allow us to do so. The first effect of teaching a
> methodology —rather than disseminating knowledge— is that of enhancing the
> capacities of the already capable, thus magnifying the difference in
> intelligence. In a society in which the educational system is used as an
> instrument for the establishment of a homogenized culture, in which the
> cream is prevented from rising to the top, the education of competent
> programmers could be politically impalatable.

This is fascinating because right now, a lot of people lament that our
students are only being stuffed with facts, but not equipped with the
methodological knowledge required for their professions.

------
peter303
Computer Science is still an early disciple. I am more jealous of what
capabilities people will have 50 years from now than 50 years ago.

