Being a Software Developer Is a Wonderful Job, But…
Software is a magical thing. With it you can build anything your imagination can conceive. Just like a sculptor, a painter, a boatbuilder, a cabinet maker, or the people who built the the Brooklyn Bridge— to make real the thing of your your imagination you have to understand and have a feel for the material with which you are working. For the professional artist, boatbuilder, cabinet maker and civil engineer that takes training, discipline, and experience. The software developer should be no different.
My father graduated as a mechanical engineer from Brown University. When I began my civilian career (after a stint as an Army officer), he told me that a degree did not make one an engineer, it merely enables one to learn how to become an engineer. In America, very few Computer Science programs even prepare one to learn how to be a software engineer. They mostly teach coding with a smattering of platitudes about engineering and design. In my experience, Carnegie Mellon, in Pittsburg, and Northeastern, in Boston, are rare exceptions. It’s like teaching French without teaching the culture and history necessary to really understand it.
I’ve hired well over a hundred programmers over the past 47 years. I’ve never given one of them a coding test. When GE corporate measured the productivity of my team at GE Software International, we were 4-times more productive than the corporate average. I look for a logical mind and an ability and hunger to learn. I look for people who take pride in results and strive for the simplest solutions that can meet the requirements. I look for communicators who love sharing ideas and learning from their peers.
Software engineering is the application of a systematic, disciplined, quantifiable approach to the design, development, operation, and maintenance of software. It is a discipline like other disciplines such as mechanical, aeronautical, electrical, and civil engineering. It is built upon a body of knowledge and practices that extend back more than half a century and most of its fundamental principles are now well understood and quantifiable. The knowledge and application of those principles and practices is one of the ways that software engineering differs from just programming.
In America, software technologies and techniques are often dominated by fads, popularized by the trade press and vendor marketing teams. Everyone is looking for the silver bullet that will enable anyone to build software. Most real software engineering principles have mathematical proofs. None of these fad techniques do.
For example. skills like testing have little to do with coding. But testing is a critical part of software development and should be built into applications. Apparently, very few people even know how to calculate the enormous number of data permutations, both valid and invalid, even a small data application can have. Most agile methodologies favor unit tests, which can be useful, but are rarely complete and are too dependent on assumptions. Sound engineering has a tried and proven way to address the issue:
Software testing can be a complex, difficult, time-consuming, exercise under the best of circumstances. How does one test hundreds (or even thousands) of executable components (microservices or actors) that interact across multiple cloud clusters? The Cloud Actor Model has an answer — preconditions and postconditions enforced by Intelligent Streams.
Stream handlers can validate the data in the messages that actors receive and send. They can assert preconditions for incoming messages and postconditions for outgoing messages. When an invalid state is detected, the the stream posts an error message — which can be directed to a distributed logger, which in turn can invoke an error handler if so specified for the error message type. If invoked, the specified error handler orchestrates any cleanup or remedial actions required. Stream handlers are created by declaring the valid states of each data item and the valid relationships among data items in a message.
I cannot think of an occupation more fun and more rewarding than developing software — especially if one puts in the effort to be really good at it. Being proficient with programming languages is only a part of the job. It’s even more fun when one becomes a real professional and can do the whole job.