44
- Architecture of software
- Engineering of software
Apparently these two concepts are related, but what is the difference between them?
44
Apparently these two concepts are related, but what is the difference between them?
62
Have you heard that Architecture of software is a concept used by Engineering of software?
Well, basically that is, the software architecture is nothing more than a concept used by Engineering software to cover the definitions of software, its external properties, and its relationships with others software.
The architecture of software a system consists of the definition of the components of software, its external properties, and its relationships with others software. The term also refers to the documentation of the software system. Documentation of the software facilitates: communication between the stakeholders, records initial decisions about high-level design, and allows reuse of component design and standards between projects.
The position of "Architect of Software"as employed today in the industry of software is more a bad legacy of the comparison between development of software and construction. In the latter, the architect does the project but, in general, does not dirty his hands in the cement.
An interesting fact is that only large companies, with loose budgets (which, in general, waste time and money with futility and dead ends) usually offer the position of architect of software. They usually stay in architectural teams, away from teams that "dirty" their hands in the code on a day-to-day basis. Now, this, by itself, creates the "Ivory Towers" and a certain latent animosity between the different teams - which should work together every day.
It makes no sense (and is not efficient) to have separate architecture teams, without direct and constant contact with development teams. Nor does it make sense to employ architects of software who only plan and do not participate in the daily execution.
Using the already-beat metaphor of the development of software how gardening is easy to realize that we are far from the process used, for example, in construction or in the automobile industry. It is not possible to design the whole software in advance, like a building or a car, buy the raw material, hire the workers and implement it practically without deviations. The project is the software and the software is the project.
Engineering of software is an area of computing focused on the specification, development and maintenance of software, with application of technologies and project management practices and other disciplines, aiming at organization, productivity and quality
Friedrich Ludwig Bauer was the first to say:
"Engineering of Software is the creation and utilization of solid engineering principles in order to obtain software in an economical way, that is reliable and that works on real machines".
The very meaning of engineering already brings the concepts of creation, construction, analysis, development and maintenance.
The term was coined in the 1960s and was officially used in 1968 NATO Science Committee. Its creation arose in an attempt to circumvent the crisis of software and give an engineering treatment (more systematic and controlled) to the development of software complex. A system of software complex is characterized by a set of abstract components of software (data structures and algorithms) encapsulated in the form of procedures, functions, modules, objects or agents and interconnected among themselves, composing the architecture of the software, to be implemented in computer systems.
Sources: Wikipedia, Wikipedia 2, Keep Learning, Outer Space Forum
12
When it says about the Architecture of Software, it is said about which technologies and the modeling of the software.
The role of the architect in a development team (that yes, there are architects who also dirty hands) is to help prevent technical debt, performance drops, lack of scalability, which can be caused by developers.
Architects of Software are professionals who have a good knowledge of solutions at a high level. They know Patterns design, concepts such as SOLID, DRY, YAGNI and try to apply them where appropriate and possible.
Architects model the system every day because, as our colleague @Rodrigoborth said:
The project is the software and the software is the project.
Projects change every day, whether by new technologies, impossibility of executing the predicted, change of specifications, etc.
A Engineer of Software is a leader of development teams. This professional knows agile development techniques, team leadership.
The function of an engineer of software is to keep the team, with their best possible production rate, experiencing problems of the development process of software.
Architects are the ones who model and design the system and engineers are the ones who control the process to completion.
-1 "A Software Engineer is a leader of development teams." Wrong, ideally all programmers in a company should be Eng. Software. And when I say Eng. software I don’t mean any Bachelor’s degree, but the fact that I "engineer" software.
I agree @Jorgeb. but considered how it happens here where I work. Senior developers with better knowledge of engineering are leaders of their teams of 3 to 5 people. All programmers should know. But knowledge is an evolutionary process and, new developers still do not know the process and get to know over time. Ideally everyone should have solid knowledge of engineering and architecture, but in reality some just want to keep their schedule and others specialize.
Caputo being a connoisseur or not, a programmer is usually an Eng. of Software, if it is good Eng or bad this is already another story.
I agree with @Jorgeb. I am reading a lot about the definitions and I intend to improve the response soon. Thank you!
Excellent answer, my friend...
This definition of Software Engineer is totally mistaken. In fact, it doesn’t explain what it is Engineering software
@Jorgeb. Totally disagree. A Software Engineer is a Programmer but a Programmer may not be a Software Engineer. Programmer is one who knows how to write code - pass an algorithm to a language, almost like a translator. A Software Engineer is able to do the same as a Programmer but he does it endowed with skills and technical knowledge in order to do it systematically and following standards and good practices. (I went through both sides and this response is based on my personal experience.)
-6
Between knowing and actually knowing is that separating professionals, it’s not that simple. Therefore, the industry has to stop using the wrong names to attract professionals. A software engineer is a person usually very experienced, years of profession, as it has gone through all possible scenarios and can in fact take such a great responsibility. When I see in vacancies offered with the title of Software Engineer, where they ask for technical knowledge as programming language, I see how immature we are in the area.
A software engineer is a person usually very experienced, years of profession, as it has gone through all possible scenarios and can in fact take such a great responsibility . No, Software Engineer is the person who completed the course of Software Engineering. It is a formal and recognized academic career. I don’t think there’s much room for personal interpretation.
Browser other questions tagged software-architecture software-engineering
You are not signed in. Login or sign up in order to post.
+1 excellent response
– Jorge B.
@Jorgeb. Thank you :D
– RodrigoBorth
When I was younger, I always wanted to be one Software Architect. But after I gained knowledge I saw that this title was more a freshness than something real. Just be a Software Engineer, the rest is shown with work.
– utluiz
I loved very detailed
– ScrapBench