📜 ⬆️ ⬇️

What is your profession? The difference between Programmer, Software Engineer and Computer Scientist

Once today, no programmers are called, especially in the foreign media. Yes, and we, in particular, when looking for work, you can find completely different job descriptions.

Does this change the essence of the work? In 1cloud, we tried to figure out what kind of work such specializations as “Programmer”, “Software Engineer” and “Computer Scientist” imply.


/ photo hackNY.org CC
')

Terminology


Studying the essence of the question is logical to start with an understanding of the terms. The most understandable is the “Programmer”, which in the Oxford Dictionary is defined as the person responsible for writing the program. And the translation is simple: a programmer is also a programmer in Africa. And even in Russia. Difficulties begin further.

Software Engineer (SE) (according to an article in webopedia) is a certified professional engineer who has enough knowledge and skills to apply engineering disciplines when creating software. The main difference is that SE deals with development, project management, and the programmer implements them by writing code. The Russian job title is translated as “software engineer” or simply “programmer”.

Now let's deal with who the “Computer Scientist” (CS) is. If you believe the dictionary , then we are talking about work in the field of the theory of computing and designing computers. Different dictionaries give a different translation into Russian: “a scientist working in the field of the theory of computers and systems (in the field of computer technology, in the field of computer science)” or “programmer”.

So, we have three very different definitions in English and three “programmers” in Russian.

How do programmers themselves understand this difference


The western approach quite clearly delineates all three posts. But we often have confusion, and all three concepts are used interchangeably. Therefore, it is better to consult the opinion of the programmers themselves and see how they describe their activities.

To ensure the full development of software / code, the programmer should be focused on his work and ensure the subsequent use and integration of software components with each other. Anthony Scherba, president and founder of the Yeti development studio, compares this process to solving a complex algebraic problem.

So, according to the expert, it is the responsibility of the programmer to create, simplify, document the code and write tests. Since he is engaged in the practical implementation of the tasks, the programmer must understand the features of the programming language (s) with which he works, as well as the theory of algorithms.

Non-binding competencies: mathematical analysis, communication skills, and teamwork - see Alan Skorkin's blog for more details.

The work of “Software Engineer” implies an integrated approach and sometimes it can be compared even with the process of creating a work of art, which the programmer tries to constantly improve. So says Daniel Kaplan (Daniel Kaplan), an experienced programmer and employee of Pivotal Labs.

The engineer must see the whole picture from two sides: the project in accordance with the general plan and the individual tasks necessary for its implementation. He should be able to find the right complex solutions, understand the requirements of clients, predict possible consequences and distribute programming tasks (as a team).

His work is especially important during the development of new versions or functionality of the product or, for example, when a customer changes his requirements. Thus, a software engineer is responsible not just for writing code, but for the entire project.

Computer Scientist is a mathematician and technical specialist equally. He has mathematical knowledge and explains how and why a particular tool, solution or algorithm works. His work is of great importance for the development of programming in general. CS is also characterized by specialization in one or several areas - AI, neural networks, the theory of programming languages, databases.

Representations of professionals, in principle, correlate with dictionary entries, which is natural: they are professionals to understand their work. Failure in communication and the substitution of concepts obviously occurs on some other level, but on what level?

What difference do schools and employers see?


Let's start again with the " programmer ". Another important difference from all the others: as a rule, after studying at a specialized university, yesterday's student becomes not just a "programmer", but an "engineer / bachelor / master in specialty / direction ...".

For the western educational system, this is also typical - take a look , for example, at the variety of specialties in the “Software Development and Programming” direction of the Sydney University of Technology. None of them contains the words "programmer" or "programming" in its name.

No, of course, many universities offer programming courses (even free ones), but rarely is a diploma written just a “programmer”. And what do employers want to see?

In addition to knowledge of different languages ​​and / or experience on different mobile platforms / experience of web programming / administration, the programmer can not do without communication skills (examples here and here ). In the given examples of vacancies, the skill of working in a team is required, communication with vendors, cooperation with other departments of the company and technical director is assumed. Well, organizational and managerial skills will be superfluous. And in some cases we also need fairly deep knowledge of mathematics.

Requirements in the Russian market are not very different and include project development, teamwork, understanding of information security principles (and all the same skills noted in the paragraph above). Thus, employers want to see in the programmer a universal (and creatively minded) specialist, and not just a person who writes and tests the code in a certain language, solving someone's task. It turns out that the employer (both in the West and in our country) very often understands by the term “programmer” that dictionaries are designated at least as “Software Engineer”.

Educational programs in the “ Software Engineering ” profile imply an approach to software development from a scientific and engineering point of view, the development of your own projects, analytical and management activities. Remember, in the previous section, experts said that the SE should be able to respond to changing requirements? In addition to this, the master's program explains how to fit into the budget and deadlines.

The University of Glasgow is taught to define specifications, design, build and verify large software systems. In this case, the list of subjects includes programming in different languages, designing databases, studying algorithms, that is, all the knowledge that is necessary for the work of the "classical programmer."

As for the employers' point of view, in their opinion, the responsibilities of the software engineer include writing code, checking the technical implementation of UI / UX, optimizing the operation of applications, developing internal methodology and standards, monitoring and managing requirements. In addition, the applicant must have leadership qualities. Technical requirements are not very different from the requirements for "ordinary" programmers: examples of them can be found here: 1 , 2 and 3 .

University programs in Computer Science include more mathematical subjects, the study of the theory of algorithms, as well as topics such as machine learning, neural networks, and cloud computing. Students learn more theory, but must successfully put into practice the obtained mathematical knowledge, identify, formulate and solve engineering problems. Thus, this type of specialists has the greatest “breadth of views” - in theory, it can work as a programmer, and SE, and directly in the specialty.

This does not mean that the knowledge gained “behind the eyes” is enough for a successful start of a career in any of the areas and there is no need to learn anything more. For example, in order to build a successful developer career, such a graduate will obviously need to “pull up” practical skills in writing code — but you will not have to learn programming from scratch.

The ideal job seeker for Computer Scientist should have knowledge of theoretical computer science, theory of algorithms, database design, computer modeling, if necessary, perform analytics tasks and conduct research, know the whole process from design to software implementation ... The list goes on (read here and here ).

Employers want to see a professional who is not limited to applying skills in a purely scientific field. By the way, Russian-speaking employers are also looking for such specialists and offer their profession names: a leading algorithmic engineer and a research engineer . These examples show the very specialization that we mentioned in the last section.

What is the result


Yes, indeed, programmers, SE and CS are specialties that are close, but not the same, and they train such professionals in different university specialties. The greatest confusion in the interpretation of the terms is brought by employers - for them, for example, the difference between the “programmer” and the Software Engineer may be completely unclear.

Judging by the requirements of employers, “just a programmer” is expected to have a creative approach, universal knowledge and soft skills, and a “computer scientist” can solve important, but especially applied, narrowly focused tasks - to say that one specialty “by default” is better or "stronger" the other is not necessary here.

What else do we write in the 1cloud blog on Habré:

Source: https://habr.com/ru/post/315230/


All Articles