Software engineers

Introduction

I’m a software engineer. I’m proud of my occupation and its influence on the modern dynamic world. An ordinary man of 21st century encounters with results of our work almost everywhere, even not realizing that. However, it’s surprising, that our occupation is surrounded with myths and wrong ideas as if we’re sorcerers. In this short essay I would like to break the myths and tell about the joys and sorrows of the job.

Who are we?

Software engineers as it follows from words construct and develop software or, more simply, programs. I haven’t used the term “write” deliberately, because it simplifies activity behind it. Software constructing is an engineering discipline which is like building houses, roads, bridges or cars. Although it has one essential difference – during constructing software we don’t deal with material objects. Engineering software, a developer operates absolute abstractions that he can juggle around as he wants. If a builder can’t overcome the law of universal gravitation even if he wants, a software engineer can create an environment inside a digital computer where it is possible. We will discuss it futher. Since digital computers have been mentioned, it is necessary to explain that nowadays the term “digital computer” can be applied to almost any electronic device that you use on a regular basis: a cell phone for talking to your friends; an electronic watch you wear on your hand; an iPod for listening music; a TV for watching news and movies; microwave for preparing delicious food; washing machine for looking neat -- anything that has a display and buttons can be called a digital computer. And, certainly, computers themselves -- from small palm-handled PCs to big workstations, servers and supercomputers. Why can we call all of those devices digital computers? Well, roughly speaking, because in all of them a central processor, performing logical functions, some kind of memory and a kind of input-output system can be found.

The matter is that in all of those devices that we call “hardware”, there must be a mechanism to control them. That is, when you turn a washing machine on, and command to soak the clothes, wash it under temperature of 60 deg. of C, wring it out, dry it out and finally get turned off – the machine must know what to do. Software is the mechanism. Software is simply a set of instructions invented by software engineers and stored inside a machine for different situations. Those instructions can be rather simple, as in case of a washing machine, or extremely complex as in cases of self-guidance systems of military rockets, plane autopilots or operating systems for personal computers like Microsoft Windows Vista – so complex that a single person isn't able to master them completely. Sure, all of that software is very different. Very small, working in a single type of devices, or very huge, performing general functions. The most significant common part of all types of software is that it is made by human beings or, to be more exactly, by software engineers -- by us.

Where are we made? :))

We are trained in different educational institutions. Training a software developer is a complex, serious and expensive business. A lot depends on the university as only university with a good technical and science base, and well-developed connections with the industry are able to produce skilled engineers. For sure, these universities may produce specialists unable to create something actually working, but getting education without a computer and awareness about modern industry needs -- is a hopeless affair. The leading universities in our specialty -- probably as well as in all other specialties -- are situated in the United States. California Institute of Technology, Massachusetts Institute of Technology, Stanford University (Larry Page and Sergey Brin, the inventers and founders of Google carried out scientific projects there, for instance) -- these are the universities from where were produced geniune diamonds, true modern gods of the industry.

“Why changing something you are always breaking something down?!” or joys and sorrows of the occupation

As I have mentioned above, I don’t like the term “writing programs”. Its origin might be concealed in those dark and wild times :)) when there were few computers, they were huge, there was little memory, computers cost a whole lot of money, machine time was very expensive and programs were rather small. Actually, making software is a successive, multistage process that strongly resembles construction of some kind of a device.

Usually we have a customer -- the one who directly or indirectly pays the money. In my case it might be a company owner, a chief executive office, a chief information officer and so on. The customer sets a task. Before we begin creating something there must be a task -- a problem that needs to be solve and there must be customer’s decision that for solving problem there must be software. At this stage it is necessary to define clear what the software must do -- and, not less necessary, -- where it will be work: in a specific model of a cell phone, in billions of personal computers around the world or in a single nuclear power station. Then we define technical requirements -- detailed and rigorous description of functions and features that the software must have and perform. Next, we design -- define general structure of the software system and essential operational units. Then it goes making up a program itself. At the next stage we test software, i.e. we check workability of what we made. Then it goes release and running, but it isn’t the end. Then we support and maintain the system. To support and maintain is to fix errors that will be found by users during running software in real conditions. And then, if engineered software appears successful and really needed (and might be not!), it goes creating of a new version. The whole process starts from the very beginning.

It looks like constructing a new model of car, doesn’t it? But, indeed, there are some differences. That has the joys as well as the sorrows.

First and foremost -- we don’t work with cement, metal or with something like that. Software during development process is a thoroughly mental structures. Thereby, the source material for work is very flexible and very pliant. That material doesn’t have any constraints -- neither chemical properties nor physical laws. There are no constraints at all. On the contrary, interconnections between mental abstractions and ideas might be very complex, they might be in a great number and they often might be very unobvious. And, if a taken approach to developing a software system lacks intelligence, care, accuracy and a good taste, one day some innocent change may cause that something falls off in another place. We saw it not once :))

The immateriality of our subject of work sometimes effects that customers behaves rather strange. Not all customers realize that a software system is a construction like a house, for instance. It occurs to no one to change foundations under a built house because a sad destiny of that house after changing is obvious. It occurs to no one to carry windows in a built house from one place to another; it occurs to no one to shorten a built house by a couple of floors; in occurs to no one to turn a built house over. In our job it happens pretty often; a customer usually doesn’t understand or doesn’t want to understand that a program system has foundations and withdrawal or changing them causes total crash of a system.

But, as a general rule, a customer pays money, so we have to deal with those issues. Usually after such changes something breaks down in another place. Though it may happen because an engineer didn’t take into consideration (or didn’t take the trouble to do) some unobvious interconnections between components. As a result, users form the opinion that any change is always leading to some kind of a breakdown… or to a total crash, if engineers don’t have luck :)). And we have to listen users complaints when they call to technical support.

Software development involves a much of creative work; an elegant, original solution of a complex nontrivial problem can bring aesthetic pleasure and joy of creation. But it involves a lot of routine and exhausting work that claims to take an attention to many details. It involves fixing errors and dealing with users and it is not necessary pleasant, especially when the errors aren’t made by you and the user feels annoyance or angry.

1 коммент. :: Software engineers

  1. so this way I can comment???ahhaaaa!!!

Отправить комментарий