In 2011, the website edge.org asked the question, 'What scientific concept would improve everybody's cognitive toolkit?'. There were answers from renowned intellectuals. I have listed some of the concepts which are relevant to software development.
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
How to think smarter about software development
1. How to Think Smarter
about Software
Development
Nilanjan Bhattacharya
Counterfactuals
2. What scientific concept
would improve our
cognitive toolkit?Edge.org is a website where some of the most renowned
intellectuals discuss ideas and express opinions.
Every year, the Edge, asks a question which is answered
by a large number of leaders in various scientific fields.
The question in 2011 was - What scientific concept would
improve everybody‘s cognitive toolkit?
There were 166 responses from eminent thinkers.
All the responses are available online as well as in a
printed book
In this presentation I have listed the concepts which are
most relevant to software development.
3. Presentation format
I have included a link to the concepts, followed by
brief commentary on the relevance to software
development.
You must read each link before my commentary.
I recommend you take printouts of the web pages
and highlight relevant portions.
Some of these articles are heavy reading. If you wish
you can read one or more every day.
When reading the links, try to put aside any
preconceptions you might have about software
development.
5. Wicked Problems
Creating software can be challenging.
Software development is definitely a wicked
problem.
Developers and testers are good at solving
difficult problems.
Wicked problems require a different mindset. I
like to think that a smart developer has already
tried to solve a wicked problem. This makes
testing even more wicked.
7. The Name Game
The best example of the ‘Name Game’ is the word
‘test’ (related to software).
There is no one in the world (including grandma) who
would admit to not knowing the meaning of the word
‘test’.
In reality the word ‘test’ is highly misunderstood (in
the context of software).
It is important to understand what ‘test’ really means.
Another word which is a victim of the ‘Name Game’ is
‘agile’.
9. Experimentation
As in real life, when you are trying to determine what works
(or may not work), you need to experiment.
The agile movement has created practices which make
software increments available in a few days.
There is no reason not to start experimenting immediately
and all the time.
We would be better off if we realized that ‘user stories’ (as
used in agile) are experiments.
Many incorrectly view experiments as synonymous with
‘frivolous’ as opposed to deliberate. Later concepts dispel
that idea.
11. Gedankenexperiment
In the case of software, unlike physics, you can
conduct physical experiments (on the software).
However, the gedankenexperiment is a great
concept to stimulate thinking and can be an
alternative or precursor to physical experiments.
It‘s another alternative to the heinous word ‘test’.
13. Double-blind control
experiments
It‘s worth understanding double-blind control
experiments from Wikipedia
A control experiment is much more specific and
rigorous compared to the previous two concepts
Many online companies conduct A/B testing which is
a controlled experiment
It’s more powerful to understand software
development as a series of experiments
Instead of solely relying on customers you can use
customer support, developers, testers or other
proxies
15. Cummulative Error
Software development itself is an elaborate
game of ‘postman’
With agile practices, the importance of verbal
communication is emphasized as opposed to
‘messages’ inscribed on paper.
Many engineers still struggle with this cognitive
fallacy
“The illusion of Platonic information is
confounding because it can easily defeat our
natural skeptical impulses”
17. The virtues of negative
results
Agile retrospectives result in learning from failure
We can go a step further and intentionally make
software fail in order to understand flaws in
design
18. You can show something is
definitely dangerous, but
not definitely safe
19. You can show something is
definitely dangerous….
Since you cannot prove that the software being
developed will cause no harm (to users), you
continue to find ways in which it can cause harm
(defects).
Tester redeemed
21. Uncertainty
Uncertainty is a virtue when dealing with
complex systems, as long as it is quantified
With complex systems there is limited value in
pursuing precision as a goal in itself.
It is more valuable to qualify uncertainty.
When testing software you can qualify
uncertainty by describing what has been done
and how you measure coverage
23. The uselessness of
certainty
We don’t need ‘scientifically proven’
We need enough information which will allow us
to make decisions and act.
Instead of Tayloresque management adopted a
personal, direct approach based on valuing
people and their skills and personal needs
In traditional testing, quality and management,
the word ‘scientific’ still shows up as the
preferred approach
24. The uselessness of
certainty
‘Scientific’ implies well documented and detailed,
and engineers who follow instructions
Even though we don’t demand following
instructions, the bigger point is that there is no
value in certainty
Even if the software doesn’t crash when
connected to eight servers, you could be proven
wrong when the environment changes
The key challenge in software development is to
correctly qualify your level of uncertainty.
26. Science’s methods aren’t
just for science
Science is not about hard truths
‘Science is a way of thinking, of making better
approximations of how things are.’
Software testers can use scientific methods such
as A/B testing
Of course, this isn’t about ensuring that
customers see value – it’s more about
quantifying the uncertainty about risks to that
value
27. Science’s methods aren’t
just for science
Scientific methods don‘t need to include
conducting experiments.
They could be activities like a ‘journal club’ or
applying different ways of thinking such as
vertical, horizontal, or learning to take meaningful
notes when observing software behavior.
29. Q.E.D. Moments
You need to experience the divine moment of
proving a logical or mathematical problem
When developing and testing software, i.e.,
determining value and what might go wrong, you
can conduct investigations to validate your
hypothesis.