mokacoding

unit and acceptance testing, automation, productivity

What software developers can learn from Leonardo da Vinci

Leonardo da Vinci from master biographer Walter Isaacson takes a fresh look at the Renaissance icon through the lens of his many notebooks.

A portrait of Leonardo

Anonymous portrait 1600. Uffizi, Florence. Source: Wikimedia Commons.

Leonardo is one of the greatest minds humanity has ever produced. Yet he was not your usual genius. For example, despite being a great engineer he never excelled at math, as shown by some algebra mistakes in his notebooks.

He reached extraordinary results through constant, relentless, and deliberate practice of his craft. The notebooks prove it. Countless pages in which he painstakingly practiced, studied different subjects, reflected on his experiences.

There is a lot people working in a technical and creative field, like software developers, can to learn from Leonardo.

Cross-pollinate

Leonardo's ability to cross-pollinate between disciplines helped him in his many achievements. He was a perfect example of the Renaissance polymath. Painter and engineer, sculptor and anatomist, geologist and theatrical producer.

He was able to take learnings from one discipline, apply them to another, and vice versa. He studied the human body to become a better painter, and his skills at drawing let him enrich his studies with illustrations of unprecedented realism and detail. His work building machines for special effects in his plays taught him of mechanics and engineering, which in turn helped him understand the motion of muscles in the human body and the flight of birds.

The ability to cross-pollinate is a strategic advantage for software developers. The famous web framework Redux was inspired by the first version of the Elm architecture. Swift the new programming language developed by Apple uses concepts developed in earlier languages such as Scala and Haskell.

As software developers it's easy to get passionate about a language, a framework, or a community. There is so much to learn and to benefit from if you look outside your comfort zone. That's where the magic happens.

Learn by doing. Learn by reading

Leonardo defined himself as a "disciple of experience". He loved to learn by doing. He would observe something in the natural world, develop a theory on the rules governing it, and devise experiments to verify it. Yet he was also an avid reader, collecting hundreds of books on a variety of topics. He also asked questions to every person he met in order to learn something from them.

When learning new things in software development often the best approach is to try and build something, to learn by doing. At the same time you need to admit there is value in theory and the work of academia, like Leonardo did as he matured in his career. Blogs, books, conference talks, they are all ways to get exposure to new ideas and concepts, which you can then cherry pick to get your hands dirty with.

Collaborate

Leonardo started his career in his early teen in the workshop Verrocchio, a famous artist in Florence, who mentored him. Most of the art pieces Leonardo worked on in Verrocchio's workshop, and later in his own, were not solo projects, but collaboration.

It was a common practice at the time for master and students to work together. The master might work on the draft of the piece, letting the students do most of the painting, coming back only for the final touches. Or master and students could work on different subjects of the same painting.

Leonardo collaborated with other Renaissance artists and scientists too. For example, he illustrated his friend Luca Piacioli book on geometry.

Leonardo's illustration of the Rhombicuboctahedron for Pacioli's De Divina Proportione

Leonardo's illustration of the Rhombicuboctahedron for Pacioli's De Divina Proportione. Source: Wikimedia Commons.

Software development is very much the same. We work together, some times on the same piece of code, other times putting together pieces we worked on alone. Learning to collaborate effectively with others is paramount to achieve great results in building software.

Collaboration is also a way to share knowledge. Verrocchio taught Leonardo the art of representing light of curved surfaces like draperies, which Leonardo eventually took to the next level. In the same way senior developer can teach juniors techniques they'll further develop.

Share your work

Leonardo can be an example in how not to do things too. While he's mostly known for his paintings and art in his notebook we find many scientific breakthroughs which he never shared with the world. He loved the act of pursuing knowledge for its own sake. His notebooks are filled with outlines for treaties he never wrote.

The scientific community was hurt by this lack of discipline and procrastination. Leonardo's findings on anatomy, in particular his study of the heart, took 200 to 300 years to be re-discovered by other scientists. Imagine how better off the world would have been had he had the discipline to write those treaties. Where could science be today? We'll never know.

I see many software developers with great ideas and experiences not sharing them with the world. The barrier to entry to write a blog post, share code, give a presentation have never been so low. You've got nothing to lose, worst case scenario no one will notice your post.


Leonardo was endlessly curious, probably more than anyone before or after him. Always hungry for more knowledge he pushed himself to explore and understand. In his notebooks he had many lists of things to research, like explaining why the sky is blue, or describing the tongue of the woodpecker.

We should all try to be more like Leonardo. Always curious and open minded, and deliberate in our efforts to grow. Interested in mastering our craft, but also in learning others. Cross-pollinating between disciplines. Always seeking mentors, knowing everyone has something to teach us.

One last thing, if you like books you might be interested in my monthly email list with book recommendations and lessons they teach. You can checkout past issues here and subscribe here.

Vote on Hacker News