It’s no secret that the tech job market is hot, but what is it exactly that software engineering professionals do and how do they impact our daily lives? ‘Programmer’, ‘developer’ and ‘software engineer’ are three terms that are commonly thrown around when referring to the tech industry, so let’s learn a bit more about what these people actually do.
What Do Software Professionals Do?
Programmer and developer both refer to positions that use programming languages to create computer applications and solve problems. These two terms are typically considered to be synonymous, with developer being perhaps somewhat more broad. Software engineering refers to the application of engineering principles to software production, and although related is a bit different from the aforementioned roles.
There are many tenets of software engineering philosophy, but the three most important are re-usability, modularity and abstraction. Software engineers are programmers and developers, but programmers and developers aren’t necessarily software engineers. Software engineers approach writing code in a deliberate, methodical way. Code that software engineers write should be reusable. Code that solves a problem now should be able to solve future problems with minimal modification. Code should be modular. An application should not cease to function completely if one module of its code is removed. Finally, code should be abstracted. Unnecessary complexity or verbosity should be hidden so that future programmers or developers that read the code can easily understand what the code does and how to use it, without fully understanding how it works.
How Do Software Professionals Impact Our Lives?
Programmers and developers create applications that we rely on for many tasks. Technology creep causes us to often take for granted the conveniences offered by modern software. One example of this is asynchronous programming. The best example of this is a single-page web application. Not too long ago, the common web application paradigm was to send entire page requests to a server and the server would then serve the page based on the request. This worked, but it required a page refresh every-time the state of the page changed. Most contemporary web applications can asynchronously request data from the server without reloading the page. This results in much more responsive web applications that can utilize the user’s computer to compute increasingly more programming logic. A great example of asynchronous programming in action is a messaging app utilizing a message queue.
Structured logging is another example of a programming principle that impacts our daily life, and can offer users lots of power when in the right hands. Structured logging refers to the standardized compilation of log data in a structured data format; typically JSON or XML are used. The structured logging of computer application processes allows for advanced features such as searching and indexing. These features allow programmers to more easily develop and debug applications. These features also allow users and technical support professionals to more easily troubleshoot applications displaying error codes.
The Responsibility Of Programmers
A common joke that a programmer might tell is: “It’s a feature not a bug”. The complexity of large software projects lends themselves to the introduction of bugs and other unintended behaviors. Additionally, event driven programming and the unpredictable nature of human users many times allows for bugs to run rampantly.
With that said, many applications require a huge amount of consideration. Applications must fail gracefully yet assertively. It may be annoying or perhaps even funny to experience a bug in a computer game, but it is no laughing matter when a bug causes a financial institution to lose money or healthcare software to report inaccurate information. Even with the push towards online gaming and daily fantasy-type sites, these mistakes and bugs can be incredibly costly for companies if not handled properly. Software engineers have a tremendous amount responsibility. They have a public duty to ensure that software is as robust as it can possibly be, as the consequences of failure are dire.