As a software engineer you have to learn to wear many hats. The question has been posed to me many times before; what do you do?
As a software engineer I have to learn to see things differently, because my job requires that I solve problems. Though not only is it important that I come up with a solution, but equally important that I can express the solution in code. Confined to the abode of a machine that operates on the fragile premise of finite state it proves exceedingly difficult to do this job well, when the problem is complex enough. Break down the problem into simpler, more manageable problems, given enough machines, and you can tackle even the most complex of problems in time. The question is always that of cost. Whether fiscal, technical, or acquisitional. All things bear a cost and not all problems have feasible solutions. Though, they may have solutions none-the-less.
It is equally important to recognize that not all problems have technical solutions. Some problems are better solved by social solutions. As a matter of fact, technology should only be seen as a catalyst to typical human behavior. It drives needs more quickly, not exclusively. Technology brings us to the solution more rapidly, but it does not offer us the solution.
Without facebook we’d still have social interactions. Without Google we’d still have access to information. Without Spotify we’d still enjoy listening to music. Without Amazon we’d still purchase books. These technologies we throw in the mix are a mere convenience to mankind. They do not solve all of our problems, just the subset of them we have become entrenched by in modern times. Our need to attain things more quickly drives the very technologies that help us solve this problem. It is our need to be heard that drives instant and asynchronous interactions spanning the globe.
With that said, providing the means to engage and connect through technological solutions is not the same as resolving the social conflict that exists within humanity. We can build better tools to allow our children to engage with hundreds of their friends at a time. We can speed up social interaction by making it possible to tag and share photos and comment on social behaviors in real time from remote locations. Though we can’t prevent common school bullying. A problem that exists long before the technology available today.
My job as a software engineer is clear.
- See things differently
- Understand the problem well
- Express the solution in a clear and practical set of code
- Ensure you’re solving the right problem
This is not to say that it is not within a software engineer’s expertise to solve problems without a computer. Or that all solutions offered by an engineer can strictly be expressed in code. On the contrary, software engineers solve problems through non-technical solutions all the time. They are in fact, in a better position to asses which problems have good technical solutions and which do not. Apple solved many of its App store security problems through human interaction (as opposed to autonomous systems). StackOverflow solved its spam and signal-to-noise problem through community and self-policing. Youtube didn’t solve its piracy and copyright problems through technology (contrary to Google’s PR on the matter), but through the understanding and cooperation of people. Sure, they have built great tools which make the process easier and less tedious for humans, but the real problem remains a social one. One that cannot be solved well by computers.
The engineer must figure out which problems are worth solving through technology, in order to save people time and money, and defer those which do not to more social means.
Let humans do what they do best and computers do what they do best.