2. 2
Developer Advocate Voltron Data
Vice Chair ACM practitioner board
Previous Vice Chair and Director
for the Python Software
Foundation
@marlene_zw
marlene.bsky.social
marlenemhangami.com
Marlene Mhangami
4. 4
Why Creativity?
Non-cognitive Abilities of
Exceptional Software
Engineers: A Delphi Study
36 experts from 11 different countries
identified and ranked skills
ACM Technical Symposium 2020
5. 5
02.
03.
01.
Systematically verify assumptions and
validate results
Be curious by wondering why and how
something works
Be creative by approaching a problem
from different angles
Systematically
verify
assumptions
and validate
results
6. 6
02.
03.
01.
Systematically verify assumptions and
validate results
Be curious by wondering why and how
something works
Be creative by approaching a problem
from different angles
Be curious by
wondering why
and how
something
works
7. 7
02.
03.
01.
Systematically verify assumptions and
validate results
Be curious by wondering why and how
something works
Be creative by approaching a problem
from different angles
Be creative by
approaching a
problem from
different angles
11. 11
Creativity is the production of novel
and useful ideas by an individual or
group of individuals
‘‘
- ‘A Model of Creativity and Innovation in
Organisations’ Teresa M Amabile, 1988
12. 12
7 Dimensions of Creative Problem Solving
Mind Map
‘Exploring the Role of Creativity in Software
Engineering’ (Groeneveld et al, 2021)
17. 17
Dimensions
▶ Creative Techniques
▶ Technical Knowledge
▶ Communication
▶ Constraints
▶ Critical Thinking
7 Dimensions of Creative Problem Solving
5. Critical Thinking
18. 18
Dimensions
▶ Creative Techniques
▶ Technical Knowledge
▶ Communication
▶ Constraints
▶ Critical Thinking
▶ Curiosity
7 Dimensions of Creative Problem Solving
6. Curiosity
19. 19
Dimensions
▶ Creative Techniques
▶ Technical Knowledge
▶ Communication
▶ Constraints
▶ Critical Thinking
▶ Curiosity
▶ Creative State of Mind
7 Dimensions of Creative Problem Solving
7. Creative State of Mind
20. 20
Being self-driven , excited by the work itself , have a sense of working on something
important
difference between what one can do vs what they will do
Styles of working, styles of thinking, styles of approaching the world
Without these the individual is likely to produce appropriate but not novel ideas
Raw materials available for creativity in a given domain, domain relevant skills
talent, acquired knowledge and technical skills
MOTIVATION
TECHNIQUES
Technical
Knowledge
THE CREATIVITY INTERSECTION
THE AREA OF OVERLAP BETWEEN THESE THREE COMPONENTS IS THE AREA OF HIGHEST CREATIVITY
23. 23
The results suggest fans empathize with
the competitors to such a degree that
they mentally project themselves into
the game and experience the same
hormonal surges the athletes do
‘‘
- Dr James Dabbs
Georgia State University
27. 27
FEEDBACK
Seeking out input, whether external or self-
reflective
2
ANALOGIES
Mapping solutions from another domain to
your problem field
1
Tools and Techniques
From ‘Exploring the Role of Creativity in Software Engineering’ (Groeneveld et al, 2021)
28. 28
Analogies
Pat Hanrahan
- Founded Tableau Software
(sold to Salesforce for nearly $16
billion)
- Won 3 Academy Awards for his
work on rendering technology
for Pixar
- Stanford Professor
first let me start out by explaining why I decided to talk to you today about creativity and how this relates to us all specifically as a software engineers and developers
So in 2020, of course our favorite year, the year of our lord 2020, a group of researchers presented a paper at the ACM’s Technical Symposium.
The paper was titled…
In their study the researchers invited 36 experts from 11 different countries world-wide, these were people that worked for some of the top institutions in the world, and asked them to identify and rank the top skills needed to be an exceptional software engineer.
From their answers, the technical experts ranked these 3 skills as the top 3 needed to be exceptional.
The first skill is to be able to systematically verify…
Earlier today we had Samuel Colvin from PyDantic speak and Pydantic is a great way to validate that your data is what you expect it to be. Great software engineers do this more broadly, not just by type checking, but in almost everything they do, so they tend to be detail oriented.
The second skill needed to be an exceptional software engineer is to be curious, wondering why and how things work. I remember going to a talk by a very prominent engineer that leads software teams at an animation company and he shared that when he interviews candidates, in order to see if they’re naturally curious, he asks them how a toilet works.
I don’t how many of you in this room…let’s have a show of hands, how many of you would know how to answer that question? I know when I heard the talk, but then I went to look it up. In the talk he said not many people knew the answer, but for exceptional engineers they are often trying to understand how things work, even the most boring mundane things.
The 3rd skill the experts identified as being needed to be exceptional is creativity. Creativity was mentioned several times by these experts and specifically creatively approaching how to solve a problem.
And so today we’ll be looking at creativity as an important tool we need to solve the problems we face in software development.
Before we go any further, it’s important that we have a reasonable understanding of what creativity is…
A few weeks ago, I went to Disney world, and I really love disney, of course i just went for the sake of my niece and nephew but I really enjoyed it.
I felt very creative, I felt like the people around me were creative, and generally you know when you start floating around, not sure if any of you can relate.
-colors
- sparkes
- magic
So what does this mean for us as software developers?
Does this mean that the only way we can be creative is to have a colorful code editor?
Well the answer to that is no or you know this talk would just be 5 mins long
So how do we define creativity?
One of the most popular definitions of creativity comes from a study done in 1988 about creativity and innovation…
Generative AI
we’re not going to go into that today
A more recent study done in 2021 that focused specifically on Software Engineering, took a more detail approach and defined 7 dimensions of creativity.
Let’s take a quick look at each of these dimensions and see how they would apply to the world of software development.
The first dimension is creative techniques, and in the study they pointed out concreted techniques developers seem to be using, for example mapping ideas from one domain to another, taking a solution that was created in Rust and then applying that same solution in Python is one example of this.
The second dimension is technical knowledge. Creativity is a brew of different inputs, if you don’t have any inputs, you can’t mix and match them to come up with new solutions. An example of inputs would be different frameworks.
The 3rd domains is communication, so not to you have to be technically competent but being able to effectively communicate it in a clear way, for example in order to be more creative you need to work with other people and if you aren’t great at communicating
Communicate in a way that will allow other people to understand your ideas and then collectively be more creative
Constraints are another dimension, sometimes constraints actually help up s be more creative than less creative. For example if you’re thinking about making your python code more performant that might help you think more creatively about how to write and structure your code.
The 5th dimension is critical thinking, so being able to look at one way of doing something, lets say you find an answer to a problem on stack overflow. Not just copying and pasting that solution but being able to think critically and coming up with alternative solutions.
Curiosity is the 6th dimension. Like I mentioned earlier this is an important skill for software engineers to have. A big part of curiosity relates to having motivation to get out of our comfort zones. Often times if you don’t feel motivated to be creative and curious, like we saw with the toilet example, if you don’t know someone’s going to ask you how a toilet works it’s unlikely you’ll be curious enough to find out about it
Then finally, for most software engineers to be creative we need to enter a creative state of mind. Some people call this flow state, and it’s often the time you’re most focused, but this can also be things like shower thoughts or aha moments when you’ve just woken up from a nap.
So since we don’t have all the time in the world I wanted to look at some of these dimensions in more detail. I’d like to share some examples of how you can connect to these different dimensions of creativity. So this afternoon we’ll be looking at Motivation, Techniques and Resources.
So lets start with motivation, and when i talk about motivation, I like to think about the idea of transcendence.
To show what i mean by this video clip
So I’m not a really big fan of football. But this is a scene that I’ve observed on the television set multiple times. This particular scene is in the UK but this happens here in Zimbabwe too. And my question is what exactly is going on here?
A few years ago the New York Times published an article titled ‘SPORTS PSYCHOLOGY; It Isn't Just a Game.’
Researchers from the article found that many fans can become so tied to their teams that they experience hormonal surges and other physiological changes WATCHING the games, just as much as the athletes playing in them do. one researcher…james dabbs from…
I love this idea that we as humans can actually transcend space and time by intentionally watching someone we feel inspired by to the extent where our body actually thinks its in the game. For me when I think of times when I felt this feeling of transcendence, I think of…
Growing up my dad was very into tennis and I remember quite a few days when my whole family would come together to watch a big game. One of my favorite people to watch was Serena Williams. I can clearly remember this one game where I think she was playing at Wimbledon and she had made it to the finals and my whole family was gathered around the television watching.
For us as pythonistas where can we find inspiring people?
I want to share a few places I go to find inspiring Pythonistas that motivate me to be more creative
So now that we feel motivated to be creative, let’s talk a bit more in detail about practical techniques to bring out our creativity
There are two categories that the study I mentioned earlier on groups tools and techniques into. Analogies, which is mapping…
and feedback which is…
One of my favorite examples of someone in the software engineering using the engineering using the mapping technique is…
Pat Hanrahan. For context Pat is the founder of Tableau Software
When I was at Nvidia, Pat came and gave a talk about innovation and creativity and how they’ve played a role in his career.
In the talk he shared that some years ago when he was working on the rendering software for Pixar he was trying to figure out how to represent light reflecting on skin. At the time he had a lot of friends who were into art and his own curiosity for art led him to study a dutch artist called Rembrandt.
It was when he was studying Rembrandt and the painters of that time, that he discovered that they used a technique in oil painting called impasto.
Studying this technique gave him a deeper understanding of how light interacts with translucent surfaces
I’ll quote him, directly, he said “Artists, they sort of instinctively figured it out. They don’t know about the physics of light transport. Inspired by this whole idea of Rembrandt’s, I came up with a mathematical model.” And from this model he went on to create this rendering technique that was then used in pixar films like Toy Story and Finding Nemo.
And finally lets how do we grow our technical knowledge. Like I mentioned before creativity is a brew of different inputs. We want to make sure that we have enough technical knowledge and experience to use to be creative.
One way we can grow our technical knowledge and experience is through getting involved in open source
Hopefully in this room most of us have used Python or know what it is. What you may not know is that Python is completely open source, so if you wanted to read the code and learn how to build your own version of Python you could go on Github and do that. Or if you’re frustrated by something in Python again you can go on github and create a pull request to change it.
More recently, i’ve been super interested in Machine learning and AI. One way I’ve used open source is to clone the code for the projects I’m interested in and experiment with the project on my machine. On the screen is an example of a machine learning project I used to create a cartoon video version of myself. I also updated the code to make it work how I wanted
If you want to play around with this I upload all my code to github and you can find it on my page…
For anyone interested in getting started with open source
https://marlenemhangami.com/how-i-made-my-first-pr-to-apache-arrow