Photography is the love-child of art and technology: you need a tasteful eye and skilled hands to get a great shot. Dipping your toes into photography, even without becoming a great photographer, will make you a way better developer. Let's talk about why – I'll share some of my personal experiences with photography and how photography helped me improve as a software developer, then I'll help you out with getting started.
Photography and development have a lot in common. So much so that I find it odd that more developers don't dabble in digital darkrooms. How are photography and programming alike? Good question.
Programming is an inherently creative process – you literally create. As a developer, you take abstract ideas that exist only in your mind and turn them into the living machinery of working software. Photography is also creative, but unlike other creative processes like painting or drawing or writing, it has a very strict technological component.
Like a computer, light behaves in specific, predictable patterns. Photographs are short exposures of light – how you control light defines how a photograph will look. Nothing says "software developer" quite like fiddling with the kinds of esoteric controls found on the back of complicated-looking cameras. Photography fits software developers perfectly – it's creative and involves science and technology – but what value can developers get from pursuing this hobby?
One of the biggest revelations I had when I first learned how to take photos was that what I see and what the camera sees are not necessarily similar at all. A camera's perspective – by which I mean the way it sees the world, not just its focal length – is very different from a human's. While we use our eyes and our brains to interpret a scene, cameras use specific lenses set with specific settings to expose their light sensors. This disparity in perspectives is a lot like how users and developers see the world very differently; it should remind you that not everyone sees the world like you do.
Not only do perspectives other than your own exist, but in fact most people don't see things from your point of view. Being conscious of this fact has really helped me while writing software because it is a reminder that I need to put myself in users' shoes – just like taking a photo, I need to consider things from another perspective. I need to have empathy. How will a user feel about my interface? How will another developer interpret my method name? These are important questions to ask while programming.
Another aspect of learning photography is reflection. Improving your photography, like any creative endeavour, requires you to reflect on your work. In order to improve as a photographer, you need to stand back and objectively evaluate your work. This takes a lot of effort. Taking a digital photo involves having a vision in your mind and trying to create that vision within the camera. You take the photo and reflect on how it realizes, or fails to realize, your original vision. Then you try again. Maybe the exposures you get aren't what you originally intended. Maybe you change your mind about what your goal is. In any case, reflection is a critical component.
When I first started taking photos, I realized that seeing the results of my photography differ from my expectations is no different from seeing a program take an unexpected path of execution. I now see improving as a photographer as just a macro-level run/debug cycle.
Both photography and programming demand a technological understanding of the tools, but to be great at either, you need empathy and reflection. After developing these two habits, I've applied those skills to my code. I noticed that my coding skills had deficiencies. Long-standing ones. Then I fixed them.
These two values exemplify the value I've gotten from photography. In my experience, developers tend to suffer from a somewhat limited perspective – they don't think in terms of their users' goals and their products reflect this.
Studying the principles of photography has also enabled me to learn about composition, colour, and other components of design, even though I lack the ability to draw. After all, a good photograph is designed to elicit some response from the viewer; photography is steeped in design. This competency in design has helped me build more usable applications, which in turn helps my career as a software creator.
I've also found that when a puzzling programming problem has me beat and frustrated, I like to go outside and take photos. Programming doesn't have to be a developer's only creative outlet – I use photography to unwind and relax. Switching gears and getting my creative juices flowing is often exactly what I need to solve a tricky problem.
Alright. Say you're convinced that photography is something that will improve your development skills. You've seen how learning to take photos boosted my programming skills and you want to get in on this horizon-expanding and perspective-broadening action. So what's next?
Getting started is not hard at all. In fact, you can probably already start by taking shots with your smartphone – most smartphones have pretty capable cameras in them. So start shooting!
Download Instagram, Google the "Rule of Thirds", take photos, and reflect on your own shots. Explore Flickr or 500px and contemplate on why you like the photos you do. Is the composition technically compelling? Does the subject matter evoke an emotional reaction? Do you think the photographer used natural light or a flash?
Ask your friends what they think. If any of them have experience with photography, let them know that you want their feedback – tell them not to hold back. It's not easy to hear critiques like this, trust me, but it's a great way to learn. In fact, being able to take critiques is a great skill in general – you'll learn to appreciate it.
Using Instagram is a great way to get started because the app places significant limits on your technical abilities as a photographer, and those limits will inspire your creativity. We all know that constraints breed creativity You'll discover the bounds of those limits really quickly, like when learning a new programming language. And just like when learning a new language, you'll come up with workarounds to circumvent those limitations.
You don't need to spend thousands of dollars on gear to get good at taking photos. You only need a basic camera, like the one in your smartphone, and some patience.
The biggest reason for developers to know to take and appreciate photographs is to grow, to become more well-rounded people. Our industry relies on growth for the rapid pace of progress it's seen in its short existence. If you stop growing, you'll be left behind.