In my home town Rio de Janeiro, and in Brazil, in general, is very common to see messy electric cable infrastructure like the one above. It looks ugly, but it works, so why fix it?
This is the same question that some companies that have legacy spaghetti code ask themselves as well, they wonder what are the benefits of refactoring messy code and tidying up the codebase.
This is the answer that software engineers are trained to answer.
Imagine if for some reason one of the buildings in that picture has a problem with their electricity or wanted to install a new system, whoever is the poor person who will have to deal with the electric circuit will have such a hard time and will jeopardise their lives and the others around. It would be much easier, faster and safer if all the cables were nice and tidy.
The art of Software Engineering
I’m currently enrolled in my last year of the course of Master Degree in Software Engineering provided by two universities in partnership, the University of Tartu and TalTech in Tallinn.
My specialization is embedded and real-time systems.
And I will share my experience about how I used to think about software development and how I have evolved the way I think about software.
I am very fortunate that besides the course, I also have the opportunity to work as a software engineer for a startup for almost four years now.
I love my job, I love being a software engineer, I’m very grateful because I find so much joy in my daily work.
I would like to share a bit of my passion with you now.
What does the word Engineer mean?
The origin comes from the Latin ingenium and from later use from French ingénieur or Italian ingegnere, also based on Latin ingenium, meaning “cleverness” and ingeniare, meaning “to contrive, devise, orchestrate, conceive”.
Engineers in many fields have after studying the craft have invented or conceived many wonders that shaped our lives and the world itself.
The ancient Greeks, the Romans, the Egyptians, and many other previous civilizations have conceived incredible magnificent pieces of engineering that enabled life in society, they created clever bridges, tunnels, cranes, buildings, and still to this day, engineering keeps evolving on top of previous generations.
Software engineering
The first time these words were used together officially was in 1968 at a conference held to discuss what was then called the software crisis, Margaret H. Hamilton is the person who came up with the idea of naming the discipline, software engineering.
The need for the development of the discipline came from a crisis in software development in the initial years when many problems arise, and these problems are still affecting the software industry:
- Projects run over the budget
- Projects go over time
- Inability to hire enough qualified programmers
- Building something nobody wants
- Property damage
- Loss of life
In the most tragic level, failures in software can cause the loss of life, for instance, failures in the software of an aeroplane, or a car, or the system that sends ambulances to people, if such software system fails, then the risks are dramatic.
A software engineer comes to the rescue to establish processes and practices that guide the software development lifecycle, and increase the chances of success while reducing or eliminating the odds of failures.
And it’s those practices and processes that this post, and blog, are all about.
The following notes are based on a book from Ian Sommerville, Software Engineering, which has been around for over 30 years.
The book is certainly a reference in the field, and it is divided into four parts:
Introduction to Software Engineering, Systems Dependability and Security, Advanced Software Engineering and Software Management.
Introduction to Software Engineering
Software Engineering is essential for the entire society, and it runs the world. Yes, you can write computer programs without using software engineering methods and techniques, but such software will often be more expensive and less reliable than it should be.
While it can be used by anyone who is building software, software engineering practices make more sense to support professional software development, including program specification, design and evolution.
There is a subtle difference between software and program, a program runs and perform a task but for software engineering software means besides the program, the documentation, testing, infrastructure, libraries, everything that is necessary to make the program useful, reliable, scalable, maintainable and secure.
A software engineer is concerned with aspects involving creating trustworthy software from the initial conception to operation and maintenance. The main fundamental areas are software, known as software processes, which include specification, software development, software validation and software evolution.
Software Engineering Code of Ethics and Professional Practice
-
PUBLIC – Software engineers shall act consistently with the public interest.
-
CLIENT AND EMPLOYER – Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.
-
PRODUCT – Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
-
JUDGMENT – Software engineers shall maintain integrity and independence in their professional judgment.
-
MANAGEMENT – Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
-
PROFESSION – Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
-
COLLEAGUES – Software engineers shall be fair to and supportive of their colleagues.
-
SELF – Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.