Anatomy of a Software Engineer: Specialist of Generalism

It has been about 5500 years since the wheel, one of the most genuine engineering wonders, was invented. The paper is about 2200 years old. The electricity is about 140, transistors reflect 100 years. Only 60 years have passed since the years when software engineering in its own form was known as engineering. Computer scientist and engineer Margaret Hamilton used the term “Software Engineering” for the first time while building navigation systems for Apollo missions. First master’s degree program in computer engineering at Seattle University took place in 1979 and the ADA Programming Language first appeared in 1980. The Rochester Institute of Technology opened its first bachelor’s degree programme in software development in 1996. The IEEE version of “Software Engineering Body of Knowledge (SWEBOK)” was published in the same year, 1996.

When compared to other engineering branches of human culture, computer engineering is a very young discipline. Yet, in history, no other engineering division has evolved so rapidly including the subjects it affected. Engineering devices like sonar, magnetic navigation, photoreceptors have benefited positively from this discipline. The predictability of the world of the other branches was what distinguished software engineering from other engineering branches. Software engineering continued to evolve as a discipline that has to be applied to a world where the laws of physics have changed weekly.

The only resource I had for the integration of a security dongle for a distribution business was the dongle manufacturer’s user manual at my desk and an email address to contact them when needed. It was a great experience for me to develop this application, because I would be able to transfer this knowledge that I have learned to my colleagues, or to share with other engineers that need it. And that information was of great importance. But now, the platforms like Google and StackOverflow etc simplified things with copy and paste which we do a lot. Now we don’t need to explicitly code algorithms that include calculus, trigonometry, and differential equations. We ought to be more relaxed, maybe. We couldn’t relax, though. Because the challenges faced by current software engineers have become more complicated and demands have risen for an average software engineer. They need to know the topics such as “Cross Platform”, “Asynchronous method”, “Security”, “DevOps”, “Distributed Systems”, “Asynchronous Process”, “Data Processing”, “Microservice Architectures”, “Domain Driven Development”, “Reactive Programming”, “Test Driven Development”, “Test/Data-intensive Development Environments”, “Containers”, “Orchestration Tools” and even more. Products can now be built to be open to millions, not as before, to a small number of consumers. An engineer who has no knowledge of TCP/IP literally writes a back-end service that runs on the Microservice Architecture on a DevOps-supported project without being aware of the cloud systems, is now a market-wide non-preferred engineer. They can save the day, but it won’t take long.

Years ago, I recall when using Kylix in an ERP development team for a company, I wrote an updater to get the final version of the executable file for the client from the internal network each time the application is started. It was so unusual and exceptional even for an engineer to be online all the time. The offline use of software and offline individuals are extraordinary and exceptional today.

Developing a new programming language, having knowledge about PL paradigms, writing a compiler or an interpreter were very idealist and romantic endeavours. The people who did these were the heroes of the academic world and they were the people of distinction. However, now, this situation can sometimes even be a weekend hobby of a young developer. There are dozens of new programming languages coming to the market every year, and some have set themselves up for learning a new programming language every year. Things are changing constantly, often unpredictably.

Each computer engineer has his/her own reason to choose this career. Some have made this decision according to the blowing wind, others have lost themselves in the magic of computers from a very young age, and some have believed they were just going to earn some money or status. There are also those who choose this career, either with the pressure or encouragement from their families, or temptation to choose the most difficult departments of college to join.

Nevertheless, if you have taken steps in this engineering discipline in some way, and you want to make yourself someone people always want to cooperate with, you have to be aware that it is critical to react quickly to uncertainty. And I strongly believe that you have to feel the pressure first in order to succeed.

In order to remain valuable in the industry for a long time, without compromising, it is important to aim at grasping certain engineering concepts. Here are some highlights from these engineering notions which can make you important today:

Time Optimisation

Deep Focus

Soft Skills

Knowledge of Upcoming Technologies

Things Still Valid and Important

Continuous and Fast Learning

In every software engineer’s reading list, these books should also be included: Code Complete, Pragmatic Programmer, Clean Code, Design Patterns, Refactoring, Peopleware, Mythical Man Month, Algorithm Design Manual, Programming Pearls, Structure and Interpretation of Computer Programs

Behind the Scenes

Fundamental Principles and Contexts

Failure

Traditionally, engineering means constructing, operating or predicting behaviour under certain working conditions using scientific principles to design or create any process, instrument or structure, and all that is done is intended for a specific function. For software engineers who are currently trying to shape their career, under the conditions available, all the things I mention are about choosing the most suitable solution. Engineers who want to remain valuable should analyse the existing constraints well and apply engineering to their own lives in order to maximise the objective function for their career.

When I applied the engineering principles to my own life based on what I have learned from past to present, I arrived at these conclusions which I have mentioned in this article. And I hope these conclusions will help those who really care about this issue, in their analysis.

software engineer living in london with a strong affection for technology and music. https://erkut.me

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