I have always loved science. I was intrigued early in my life by the possibilities that science brought to reality. From flight to space travel. I am still at awe every day with the technology I get to use that all came out of a science field at some point. Literally the clothes we wear and the cell phones we carry all came from some field of science.
I personally work in the world of computer science. I hold a bachelor degree in computer science for that matter. Somewhere along the way though it seems we have forgotten the science portion in our discipline. The word science comes from the Latin word “scientia” meaning “knowledge”. The goal of a scientist is to gain knowledge. In other scientific fields that most people associate science with from their grade school days is based around use of the scientific method or scientific theory. In this process the goal is to start with a theory which in the end could be proven or even falsified. Quite honestly most people who have a computer science background end up being computer programmers or possibly network engineers. Once these titles take over it seems that the “science” portion vanishes.
What happened to good old failures?
Quite often in a software engineer/computer programmer position your goal is to solve some business problem through the use of computer technology. It easily becomes mostly routine work. Read data from a database, expose it through a service possibly, consume it by a user interface, and display it to the user. This is followed by CRUD (Create, Read, Update, Delete) operations over the data. In some cases it may actually require some computation of some kind. (NOTE this is where the science comes back possibly).
It seems that most software engineers at some point fall into a fear of failure. We have created many mechanisms to even protect us. Concepts from agile development like TDD (Test Driven Development) work to provide a safety net and increase the quality of our software. There is nothing wrong with this in principle. The challenge I have is if all work is done with a guaranteed outcome we lose the exploratory side of our profession. We end up just writing the same code over and over and over and over. If this then that, while this do that, goto 10. (Yes I through in a goto 10).
In other fields of science it is very common that a failure in one case becomes a success in another. If we do not practice the science portion more often in our day to day and actually allow ourselves to fail and then document them, how many other opportunities are going to be lost. Majority of the devices and technologies we use day in and day out actually came out of scientific failures that were repurposed. Sometimes the result of an experience quite honestly is more exciting when they fail and give us unexpected results.
I personally think we need to start experimenting more. Yes we have to still meet our business needs but we need to have some time to fail often and fail fast. We should actually document our failures and share those experiences so that others can use or adapt them to their use. Reality is that when we were very little we learned how to walk by falling. We learned how to talk by making mistakes and seeing the outcomes on the faces of others. We learned what was right and wrong more often from doing wrong. I personally want the science back in my computer science. I want to play and explore more. This can be in the form of playing with different technologies to see if they fit a problem better or even sometimes worse, or just seeing how far you can push some computation till you see negative returns.
Be an explorer, a scientist, and even a child again. I can only imagine what will all create and improve if we again accept failure like we did as a child, but with the intellect of a scientist.