The first thing that comes to most people's minds when they think of software development is programming. This is natural; software is built on code. However, in a increasingly technologized world, software affects and is affected by all sort of human activities. As a developer, you should look for synergies with these fields and understand how they relate to your work.
Cover photo by Erin Wang
The first thing programmers learn is programming languages, algorithms, data structures and math. For a long time this might be the only learning they would do and it entails the risk of forming a bubble around themselves. For what I know it is not uncommon for teams of developers to lack people without technical roles. In fact some developers (usually unexperienced) don't even want a team at all and think they can be a one person army.
I had this kind of tendencies. It took learning the benefits of letting people influence my work or participate directly with them in a common project for my mind to change. Technical knowledge is just one piece of a whole, a single ingredient in the sandwich that any project is.
It is clear that most software applications are integrated within larger scale projects, performed by multidisciplinary teams, like:
- Information systems for administrative management.
- Forecasting systems for financial advisory.
- Public platforms for legal procedures.
- Applications of stylistic analysis to assist in the study of literary works.
- Applications of weather analysis.
- Knowledge bases for medical diagnosis.
- A long etc.
Nonetheless, in all of these cases, software has an auxiliary role, because it helps in processes that belong to other disciplines in a single direction, and that's not the phenomenon of multidisciplinary that I want to address. When I talk about synergies, I refer to a bidirectional enhancement, where your work as a programmer is improved directly or indirectly by new ways of thinking or working.
During the last hackathon I took part in, our team was lucky enough to count with a graphic designer that put a face to our solution. She took care of the user experience, the interface layout and the visual flow of information, with better results that any of us could've achieved.
A less recent case. Some years ago I began working on a university project without any designers in it. When they were added to the team, the change was radical: the interface, the appearance of the avatars... There were no changes in a functional level, but thanks to these modifications it now looks much more professional and has since attracted many more users.
Websites, desktop applications, videogames and all kind of user interfaces take benefit of graphic design. Professional designers know how to transmit information visually and improve the user experience of a product, make it more appealing and intuitive.
My final year dissertation has to do with an online platform for teaching programming (the same university project I mentioned earlier). Relating to programming as something to teach, as the instructor, has taught me new ways to approach to it. The necessity to adapt complex concepts to people without as much previous knowledge challenge your understanding of such concepts and stimulate your creativity. Without a professional teacher, like my tutor, assisting me in such a task, it would be much more difficult to get a really didactic product.
The design of a program, a videogame or a computer system also benefits from knowing the cognitive process behind learning, and when it is intended for children and people with disability, this role is even more important. Learning to use the software is the previous step to making it useful.
Something I try to do, whenever necessary, is to share the documentation of my projects, reports and presentations with people close to me that have a literary background. Even if my style is not the best, their corrections raise the quality of my text in a good measure and make it clearer and more understandable. Without necessarily knowing in depth about the subject I write about, they are able to improve the information flow, the rhythm of the text, etc.
A more isolated case. One of my long term projects, like that of so many people, is to make a videogame. Since I started working on it, I've received support from several people, but the one that gives me better advice for the story is a philology graduate. In spite of not having neither programming nor videogame related knowledge, her understanding of narrative and use of aesthetic resources is much more educated than mine.
Communication skills are not something that all programmers train. Many applications have big components of written communication and language has all kind of influences and subtleties that may be overlooked. Sometimes we don't notice the ambiguities, mistakes, regional uses or jargon words that we employ and confuse the user. Someone who has studied language in depth is capable of revising these texts and giving them much higher quality.
Historically, many advances in computer science have been inspired by other sciences:
- Neural networks, convolutional networks and self-organizing maps are based on different aspects of the brain functioning, studied by biology.
- The chatbot ELIZA, which became an early reference of natural language processing, was inspired by a psicotherapy method.
- Game theory, which was born from the study of the behavior of economy and millitar strategy, led to a lot of artificial intelligence algorithms.
In short, to grow as a developer, it is not enough to learn about programming. The influence of the rest of the world is important too. You never know where the inspiration may come from.
My takeaway is not that you should learn everything about every field. That's exactly what I criticized: wanting to be a one army person.
Often, we believe that we can take care of something we are not specialized in, and it probably would be true to a certain extent, but the result will almost surely require more effort and have a worse quality. Obviously, you also can't hire all kind of specialists for every project. The ideal is to find its key points and make an informed inspection of which human profiles could make it take off.
Get surrounded by all kinds of people, be open to other disciplines and let the influence occur in a bidirectional manner. Software has much to contribute to the world, but it also needs the world to leave its mark on it.