The software industry is relatively young. Let’s take as a starting point the publication in 1939 of Alan Turing’s On computable numbers, with an application to the entscheidungsproblem, in which he described an imaginary computer turing machine and the program it runs. There were mechanical calculating machines, there was Charles Babbage’s analytical machine, but still, the Turing machine was the first thing that today’s programmers could describe as a computer and a program.
In the 1950s, Fortran came along. The language was optimized for punch card input. Even though the code was written on paper by the programmers, then the operators would prepare it for input in the form of holes in the punch cards, and then later on, for example after a day, the programmer would get the result of the program in the form of a teletype tape. It was already like a programmer’s job.
By the way, the size of punched card is the reason why we still have 80-character limit per line somewhere.
In the early 60s, John McCarthy created Lisp, which laid the foundation for functional programming. In the late 60s, Simula-67 and Smalltalk appeared, which laid the foundation for object oriented programming, and Edsger W. Dijkstra proposed structural programming. In 20 years we went from Turing’s imaginary computer, to the creation of computers and programs, and forming all basic concepts in programming that we have today.
For the next twenty years, the industry put these ideas into practical tools. In 1972 Dennis Ritchie creates C and Unix. In 1983, Björn Straustrup creates C++, and almost simultaneously, in 1984 Brad Cox creates Objective-C. From that moment programming is no longer the domain of mathematicians for solving problems of the location of elements in a plutonium bomb, or numerical weather forecasts. Programming is becoming widely available, and over the next 20 years millions of young people will be pouring into it.
For the next 20 years, we applied programming to every area we could get our hands on. As a result, today we are surrounded by programs in telephones, elevators, microwave ovens, refrigerators, watches, cars, credit cards, and pacemakers. Every day it becomes more and more difficult to find a device that doesn’t have programs in it. Programs have rapidly penetrated all areas of human activity – controlling power plants, production lines, trains and airplanes. People have become enormously dependent on the work of programmers, and that is a huge responsibility. But programmers seemed unprepared for this responsibility. Doctor or lawyer can lose the license to work in his profession by making a serious mistake. For a mistake, they can go to jail or pay a significant fine. For programmers, there are still no such regulations. Where is the line between unprofessional and negligence leading to casualties or losses and unintentional error? What kind of mistakes in programming can we define as a crime?
Teachers, builders, scientists have formed a vision of their place and role in society, but we programmers have not answered the question – what is our task before society? It is no coincidence that I touched on the topic of goals and global challenges facing us, because without a definition of reference points to which we need to move, any movement is doomed to be chaotic. Unfortunately, I have not found any work that explores this problem, so I will offer my own formulation, on the basis of which we can judge what is good and what is bad. So, the main goal that we have to pursue to survive in the market, to survive as a species, is to create innovations that allow us to produce much better products than existing, using much less resources than we are currently spending. And first of all, to achieve it, we must take responsibility for the consequences of the products we create, and for the price that we have to pay to create them.
I am not writing this because I am appealing to morality or trying to impose my point of view. The main idea is that, whether we like it or not, we live in a world with limited resources, and we can’t endlessly “reinvent the wheel” in search of better, more efficient or more elegant solutions. Products on the market compete according to the laws of natural selection and those who create the best product, present it better, support it better and develop it faster will survive. Those who solve the problem that makes sense to someone. Whether we realize it or not, today we are shaping how tomorrow will look like for us and our descendants.
Undoubtedly, there are a lot of people with different competencies involved in working on products. Many would say, how can we be responsible for someone else realizing their failed ideas with our own hands? However, let’s keep in mind that everything our users see and use is created by programmers. I think if we were not building programs but ships on which we would then have to go on a long voyage, and on whose reliability our lives depended, we would have a different attitude to our work.
I see that many in our industry perceive work as a game that you can always start over, not realizing that the interesting projects that each of us would like to be a part of are built at the cost of huge efforts, time, overcoming crises and gained experience that cannot be obtained at the beginning of the journey. Following such a short-sighted strategy, a ten-year experience turns into a one-year experience repeated ten times. Hence such a colossal variation in the experience and maturity of specialists on the market.
Often I see how not understanding or not accepting this idea leads programmers into depression. Programmers, feeling that they have hit the limit of their own development, see that every new day is a “groundhog day” from which it is impossible to get out. They begin to blame the world around, colleagues, work, technologies, products on which they work. Sometimes a change of project, work, and most importantly the environment is the best thing to do in such a situation, since there is always a possibility that in a new environment the culture of awareness and responsibility for the result of one’s work may be higher, or along with awareness of responsibility there will be more freedom and the ability to influence the result.
I would like to conclude with the analogy of building ships – let’s build such ships on which we would confidently go on the most daring journeys, which will be legendary and remembered for generations. There are enough such heroes in our young industry. Some of them I mentioned above, some are making history right now. I’ll be glad if now you are feeling the courage to be one of them.