Two of the hardest challenges in software development are building the right thing and building the thing right. The first problem comes from a lack of understanding of what users want. The second comes from the fact that the complexities of software make it challenging to build high-quality applications.
It might not surprise you that humility increases empathy for users, which helps us make sure we're building the right thing. However, did you know that Dijkstra once said humility was also a key to producing high-quality software?
We will look at practical ways intellectual humility can help you be a better software developer. I'll show you how humility drives you to use abstraction to manage complexity. I'll show you have it enables you to find alternative solutions to problems. And I'll show you how it helps you focus on the needs of the user.
In the modern software landscape, humility is a tool that can level you up as a developer. It deserves a place in your toolbox.
4. “ “The analysis of the influence that programming
languages have on the thinking habits of its users,
and the recognition that, by now, brainpower is by
far our scarcest resource, they together give us a
new collection of yardsticks for comparing the
relative merits of various programming languages.
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.”
4
7. “ “The analysis of the influence that programming
languages have on the thinking habits of its users,
and the recognition that, by now, brainpower is by
far our scarcest resource, they together give us a
new collection of yardsticks for comparing the
relative merits of various programming languages.
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.”
7
10. “ “The analysis of the influence that programming
languages have on the thinking habits of its users,
and the recognition that, by now, brainpower is by
far our scarcest resource, they together give us a
new collection of yardsticks for comparing the
relative merits of various programming languages.
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.”
10
11. “ “The analysis of the influence that programming
languages have on the thinking habits of its users,
and the recognition that, by now, brainpower is by
far our scarcest resource, they together give us a
new collection of yardsticks for comparing the
relative merits of various programming languages.
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.”
11
12. “ “The analysis of the influence that programming
languages have on the thinking habits of its users,
and the recognition that, by now, brainpower is by
far our scarcest resource, they together give us a
new collection of yardsticks for comparing the
relative merits of various programming languages.
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.”
12
13. “ “The best way to learn to live with our
limitations is to know them. By the time
that we are sufficiently modest to try
factored solutions only, because the other
efforts escape our intellectual grip, we shall
do our utmost best to avoid all those
interfaces impairing our ability to factor the
system in a helpful way.”
13
17. Admitting the possibility of error
leads to:
● Better testing
● Better code reviews
● Asking for help appropriately
● Better naming and documentation
17
18. Admitting others may know more
leads to:
● Use of better solutions
● Use of better methods
● Use of better architectures
18
19. Admitting that we need to learn
leads to:
● Lifelong learning
● Asking better questions
19
24. “Cognitive load represents the
limit of what the working
memory can process. When you
experience too much cognitive
load, you cannot properly process
code.”
To alleviate cognitive load, we can:
● Refactor the code
● Create visualizations
24
26. Miller proposed as a law of human
cognition and information
processing that humans can
effectively process no more than
seven units, or chunks, of
information, plus or minus two
pieces of information, at any given
time.
26
27. Miller stressed the importance of
recoding—the reorganization of
information into fewer units
with more bits of information per
unit—as a central feature of human
thought processes. Recoding
increases the quantity of data that
one can process effectively and
can help to overcome the seven-
item information-processing limit.
27
29. “…the volume and complexity of
what we know has exceeded our
individual ability to deliver its
benefits correctly, safely, or
reliably.”
“Under conditions of complexity,
not only are checklists a help, they
are required for success.”
29
31. “Humility is a mindset about
oneself that is open-minded,
self-accurate, and not all about
me, that enables one to embrace
the world as it is in the pursuit of
human excellence.”
31
32. 32
The Psychology of Intellectual Humility
Mark R. Leary,Ph.D.
Department of Psychology and
Neuroscience
Duke University
33. “Having accurate knowledge
requires that people consider the
evidence on which their beliefs are
based, remain vigilant to the
possibility of being incorrect,
solicit and consider the
perspectives of other informed
people (especially those whose
viewpoints differ from theirs), and
revise their views when evidence
warrants.”
33
34. “As noted, people high in IH are
more curious, distinguish strong
from weak arguments more
clearly, are more accurate in
recalling whether they have been
exposed to certain information,
and think more about information
that contradicts their views.”
34
36. “Confident Humility: Having
faith in our capability, while
appreciating that we may not have
the right solution, or even be
addressing the right problem. That
gives us enough doubt to
reexamine our old knowledge and
enough confidence to pursue new
insights.
36
41. “Humility is not thinking less of
yourself, but thinking of yourself
less”
- not quite C. S. Lewis
42
42. “Do not imagine that if you meet a
really humble man he will be what
most people call ‘humble’
nowadays: he will…not be thinking
about humility: he will not be
thinking about himself at all.”
- C. S. Lewis
43
46. “A toolmaker succeeds as, and only as, the
users of his tool succeed with his aid.
- Fred Brooks
47. “However shining the blade, however jeweled
the hilt, however perfect the heft, a sword is
tested only by cutting. That swordsmith is
successful whose clients die of old age.
- Fred Brooks
48. As software developers,
we build tools.
The tools that we build can only help our users do these two
things:
1. Work Faster
2. Know More
49
50. “
“We must not forget that it is not our business
to make programs, it is our business to design
classes of computations that will display a
desired behaviour.”
52. Resources
Blog Post (shameless plug)
○ http://humbletoolsmith.com/2020/08/10/the-importance-
of-humility-in-software-development/
Further Reading
○ https://www.manning.com/books/the-programmers-brain
53
53. “
“We shall do a much better programming job,
provided that we approach the task with a full
appreciation of its tremendous difficulty,
provided that we stick to modest and elegant
programming languages, provided that we
respect the intrinsic limitations of the
human mind and approach the task as Very
Humble Programmers.”
TODO: Admitting your wrong
TODO: More content about imposter syndrome
TODO: better applications
TODO: Add a reference slide for Dijkstra’s paper
Was addressing the software quality crisis in the 1960s.
I’m not advocating for imposter syndrome or some kind of gate keeping
Impostor syndrome is a psychological pattern in which an individual doubts their skills, talents or accomplishments and has a persistent internalized fear of being exposed as a "fraud".
Despite external evidence of their competence, those experiencing this phenomenon remain convinced that they are frauds, and do not deserve all they have achieved.
I’m not advocating for imposter syndrome or some kind of gate keeping
He said this at a time when pong was state of the art
Was addressing the software quality crisis in the 1960s.
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?
— Brian W. Kernighan
1956
Sounds like abstracting a method to me
Emotional Intelligence is a key part of intelligence
----
Having humility enables data-driven decision-making and the empathy needed for strong collaborations.
Emotional Intelligence is a key part of intelligence
----
Having humility enables data-driven decision-making and the empathy needed for strong collaborations.
Emotional Intelligence is a key part of intelligence
----
Having humility enables data-driven decision-making and the empathy needed for strong collaborations.
IH involves recognizing that one’s beliefs and opinions might be incorrect
Knowledge is just increasing, it is increasing at an increasing rate. … The accelerating pace of change means we need to question our beliefs more readily than before.
In contrast with many engineers who make houses,
cars, medicines, and clothing for human need and enjoyment, we make things that do not themselves directly satisfy human needs, but which others use in making things that enrich human living. In a word, the computer scientist is a toolsmith—no more, but no less. It is an honorable calling.
If we perceive our role aright, we then see more clearly the proper criterion for success: a toolmaker succeeds as, and only as, the users of his tool succeed with his aid.
Was addressing the software quality crisis in the 1960s.