Hello guys 👋, a few months ago I decided to try something new and start attending an academic drawing class. I was always impressed by stunning artworks, but I never tried to do something by myself.
My last drawing attempt was back in the school days and I never thought I will do it again 😃.
For me, it all started from reading classical Hackers and Painters book by Paul Graham. In one of the chapters, the author drew a clear parallel between art and "hacking", and bring solid statements that developer work in most cases is closer to art than science field.
I decided to check it on my own and after all that time communicating with artists and exploring this field I found that mostly mindset of a creative person not much different from a techie. Even more, we share lots of common ways on how we think about a problem and solve it. So here are some key notes I made so far.
This may seem obvious on first place but think about all these new shiny technologies and tools coming every month or even weeks. It is easy to get lost in the hype, but mostly, they all share common underlying concepts.
Any good artist firstly starts by exploring simple shapes, to form a solid foundation and only after that progress to make some harder objects as the most complex ones are just well-formed groups of simple primitives.
This is truly relevant to programming, instead of learning new trendy framework etc. try to think about what concept it implement and what underlying research was made.
When you try to draw some shape, it is easy to forget about the whole object while you focus on a single thing. My teacher always tells that well-formed object even with some nuances lost, will always look better that one that has lots of details but not solid grouped form.
Now think about making software project, adding details (unnecessary dependencies, pre-mature optimization, complex abstractions) on first phases will add danger to it. Instead, try to come with some "just working" solution, even if it is not too pretty yet.
"Premature optimization is the root of all evil (or at least most of it) in programming." (c) Donald Knuth
Strive for progress, not perfection. A project will become more complex over time, so adding unnecessary stuff on first steps can potentially make it not scalable. That why in my opinion KISS is the most important concept to follow.
For example, look at this drawing, it is a pretty classical diaper fold. From the first look, it may be hard for a novice to understand where to start from, but if we look closer we can see that mostly this complex shape consists of simple primitives like cones, with smooth transitions between them. Identifying these patterns is very important for an artist.
This is a great visual demonstration of why studying design patterns is crucial for a good engineer. Knowledge and, even more important, ability to correctly detect and apply them on your project, will make your code robust and easier to follow.
After my short "experiment" I can confidently say that it is very useful to explore new fields and look on known things from different angles. Studying new skills, even that are not directly relevant to your profession, could make you a better problem solver and give you a fresh view on common problems.
Thanks for your attention 🙏
PS. What are some fields besides software development, you are currently exploring 🤔? Share in comments. 👇