Computer Science
Computer Science is an area of mathematics, as is the name of a college course.
In the faculty of Computer Science (sometimes referred to as Computer Sciences), You study the basics of programming so that you can enter computer science itself. Concepts related to the creation of systems and software, such as requirements survey, project cycles, etc, are also studied.
Among the sub-areas of computer science (except engineering), I highlight the following:
- algorithms
- algorithm complexity
- automata theory
- formal languages
- data structure
- databases
- artificial intelligence
Those who practice computer science are called computer scientist.
Computer engineering
The area Computer engineering studies the life of software creation. It is a very broad area of study, ranging from analysis of existing systems, communication between people who will use the system, communication of people within the system assembly, communication between systems, project management techniques etc.
One of the areas of software engineering has a large overlap with the area of Project management of Administration, but it has very specific peculiarities. For example, the Agile manifesto emerged to meet specific demands of the software market, which then these concepts were leveraged for other design schemes.
Opinion: by what I (Jefferson Quesado) read about the origin of the term Software Engineer, this term was coined by a kind of gourmetization of the market, for marketing reasons to provide the customer a greater confidence, because when it is said that a engineer is working has the precept that it is someone extremely capable, formed by fire and suffering for five or six years of intense studies in college.
One of the aspects addressed by software engineering, which I use a lot at work, is to reduce costs and increase relative productivity of each employee (whatever the productivity measure: sloc, customer value delivery, management satisfaction, product saleability etc).
Who practices Software Engineering is called Software Engineer.
Architecture...
Architecture deals with the general, functional and behavioral design of a particular piece of software. After drawing and determining what should/should be achieved, it is up to the engineers to make this architecture viable.
... solution
I will put here the words __, written in the article paragraph The Role of the Solution Architect, for they are better than I would be able to write:
A solution architect works primarily in the construction of solutions based on the needs of the business, making use of the services and technological resources already existing in the company. Another objective is to align new solutions to architectural principles already defined, respecting the standards and integrations of the company.
Where I work, we had to devise a new architecture for the timing of the app the company sells. Before beginning to encode, it was discussed at length about what this new communication would look like. For this, a coalition of 3 people was made to figure out what the solution would be and, if possible, to test a prototype:
- our database wizard and sql to determine what information should arrive on the device (200 tables with information that should arrive on the device)
- the server and communication application/bank part specialist
- i, as a transmission specialist and Parsing information and also legacy timing.
Our problem has been detected as impossible to circumvent about 20/October, the solution was designed on 25/October and the first prototype of the idea was ready on 28/October. On November 4th, we put the solution in the field (beta). Finally a stable and aesthetically beautiful version for the user was ready on December 19th/19th.
In the above example, the work of solution architecture took place from the days 20 to 25 October, then it passed by the architecture of software and, moreover, it was written and construction of software (therefore, sotware engineering work).
Who practices Solution Architecture is called solution architect.
... software
Software architecture is concerned with the higher levels of software abstraction. She cares about the software elements, their components and their relationships.
In the example of synchronization, which we had in the company, the solution architecture defined that the data would be navigated from the point of origin (identification of the user of the mobile device), going through the relationships until arriving in a certain table; if there was something new (new lines, relationship created that gave access to unreached lines, updated relationship that gave access to new lines in the table), this information would be sent. Sending would take the form of a mapping where each table was a field in JSON and its value a vector of JSON objects with column mapping -- value (null values in column were omitted) [in note: yes, we know that there are more efficient ways of transmitting data and we are working on an evolution of this synchronism]. This new timing system should be applied immediately in the tables with greater weight in the system, and the others should still be kept in the legacy system. So we were able to logically separate the components and work on them independently. Our software architecture went something like this:
- functions in MSSQL for navigating
- function on the bank transforming a
SELECT
in a JSON object
- server using Spring Boot that captures the JSON provided by the database and fits it for serialization (placing the other JSON components provided by the solution, such as the table name followed by two-points, the commas to separate the JSON lines/objects within the same vector)
- HTTP receiving in Totalcross (gave rise to this class: Httpconn)
- JSON’s SAX compilation in Totalcross (the reference DOM model org.json cost a lot of memory for our case)
- insertion in Sqlite
Who practices Software Architecture is called software architect.
Analyzing...
... and development of systems
... algorithm
Design
There is the Algorithm Design, Solution, Interface, each with its peculiarities...
Algorithm Design I only heard integrated with Solution Architecture, usually as a point to be improved. For example, an algorithm may have a rescue design on N + 1
of information in the bank, so it is suggested to change the design of this algorithm to make this rescue on a trip to the bank.
Solution Design has a wide intersection with Solution Architecture, so large that I particularly don’t know how to differentiate (if there is any distinction).
Interface Design is closely related to UX (User Experience/user experience) that you want to pass to the system user. A webdesigner works Javascript and CSS to provide a pleasant user experience.
Who works with Interface Design is called Interface Designer.
Coding
Etymology:gather standards in code form.
Coding is basically turning into code.
In the book Shell Script Profissional of Aurelio Verde, he talks about the differentiation between scripteurs and programmers; about this differentiation, paraphrasing the site:
Chapter 1 - Programs yes, scripts no
This book teaches how to make programs, not scripts. Its goal is to transform "scripters" into programmers, giving the necessary foundation and teaching the good practices of programming. This will improve the quality of the code, greatly facilitating future maintenance work. No more rewriting scripts because the original code was incomprehensible, no more headaches from lack of cleanliness and organization. Learn to make programs in shell, the right way.
The difference between a scripter and a programmer is related to the quality of the code produced, reusability and maintenance cost. In the specific case of shell script, coding is... shall we say... scriptar.
So, according to Aurelio Verde, coding is not the same thing as programming.
Those who practice Codification are known informally as codadores (at least at the level of programming marathon, we referred to ourselves thus =]).
Programming
It is the part of creating programs. A program is differentiated from a tangle of codes because it is cheaper to maintain and expand.
Coding is a necessary part of programming, but it is not only done through code creation/transcription. Programming requires greater discipline and thinking about the next one that will pick up on the system you are leaving behind... From personal experience, I can say that many times the next one is yours me from the future, so try to leave a good job for him.
Who practices Programming is called programmer.
Who practices Programming and is gourmetized is called software engineer.
If no one gives a good answer I’ll answer later.
– Maniero
About architecture in the title, it was not very clear whether you were referring to software architecture or solution architecture... The text also did not make clear which aspect is being dealt with. Perhaps the ambiguity was purposeful? , for there to be a two-way response?
– Jefferson Quesado
@Jeffersonquesado yes, the doubt is generalized even, it applies for both. It’s all very confusing to where everything goes, including what you mentioned, so you spoke of both. Ambiguity was purposeful.
– Maniero
I have filled in the main gaps that I have something to add (with the exception of Algorithm Analysis) in the answer https://answall.com/a/206988/64969
– Jefferson Quesado
Just for the record, I put in the description of the reward that it will go to the answer accepted by the author of the question, but in case it does not occur will go to the answer with more votes at the end of the period.
– gustavox