Being a Software Developer Is a Wonderful Job, But…

Being a good software engineer takes work

Dick Dowdell
Apr 16 · 3 min read
Courtesy of https://exaud.com/skills-software-developer/

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.

Nerd For Tech

Nerd For Tech

NFT is an Educational Media House. Our mission is to bring the invaluable knowledge and experiences of experts from all over the world to the novice. To know more about us, visit https://www.nerdfortech.org/. Don’t forget to check out Ask-NFT, a mentorship ecosystem we’ve started

Dick Dowdell

Written by

I’m a US Army veteran of the Vietnam War, have a wonderful wife and family, am a working software engineer, and a committed citizen.

Nerd For Tech

NFT is an Educational Media House. Our mission is to bring the invaluable knowledge and experiences of experts from all over the world to the novice. To know more about us, visit https://www.nerdfortech.org/. Don’t forget to check out Ask-NFT, a mentorship ecosystem we’ve started

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store