Computer Scientist, Software Engineer and Coder enter the bar.
- Oh, and here are the programmers! - barman calls them ...I know people who have been programming for more than a dozen years, but they are offended when they are called "
programmers ." And at the request of Coder vs Developer vs Software Engineer in Google there are 113,000,000 links:
1 2 3 4 5 6 7 8 9 ...
113,000,000 . What is interesting, you can find completely opposite opinions about the same thing. With something I agree, but with something fundamentally not.
The last few years, they have been constantly adding fuel to the fire in general, some very strange programmers appear who call themselves
Creative Technologist ,
Creative Coder and
Interactive Developer .
')
Let's try to figure it out.
What is your Job Title,% username%?
So, relax, if we talk about Russia, then we are in fact all
Programming Engineers (or even Programmers at all). All these incomprehensible titles came up somewhere out there, but here they sound cool and are written in an unusual way. I generally introduce myself as
Lead Interactive Architect , which says nothing about what I'm doing here.
For all my short career, I'm sorry, a programmer, I managed to work with a lot of different people. And all of them magically can be quite accurately divided into several categories. Of course, there will be those who will be somewhere between these categories, but they may well be discarded as a statistical error.
This classification does not imply any absolute order and nesting of some categories into others. We will talk about the following groups of people somehow related to programming:
- Scripter
- Coder
- Hacker
- Software developer
- Software engineer
- Computer scientist
- Creative coder
Scripter
Initially, scripts called small programs in simple languages. Recall Shell scripts, Batch files, AppleScript, JavaScript, ActionScript, VBScript. Their main use is to
automate repetitive tasks of the same type .
This is now in JavaScript, you can write a Flash IDE in the browser, but "then" its use was limited mainly to scrolling stupid text in the status line. It is now ActionScript 3 is a full-fledged OOP language in which enterprise applications are written, but “then” the very first did not even have a textual representation, the actions had to be chosen from the list, one per key frame.
But the meaning, however, remained. Now even a designer can, with a certain desire, write scripts to automate anything in his daily work. Which I, by the way, highly welcome. It is rather sad to watch as a designer, for example, draws 100 “random” elements with his hands. And even sadder when he has to redraw them all.
Still often scripting is mentioned in the context of game development. Smart programmers have long realized that it’s easier to give game designers small tools that they can use to do the functionality they need themselves than to constantly manually change some numbers from where they came from to others (they are game designers). Again, as in the previous example, there is no need to be a programmer to make up any script from the available commands.
Sometimes you can hear in the root of the wrong definition of scripting -
write instructions that are parsed and executed by another program. But this is the code. Instructions that do something else.
Coder
A coder is a person who translates from one language to another. Simply put, the instructions in the "Russian material" translates into instructions in some programming language, be it Java, PHP, C #, or some other,
thousands of them . Of course, observing the rules and requirements of the pra-form and the environment where this code is then executed.
I myself do not like this term. When someone says “coder”, I imagine a
person who is thoughtlessly writing code, the main and only feature of which is that it is compiled ; and this person is not able to do more because of a lack of knowledge, experience or desire; instead of turning on the brain and finding out the problem, coming up with a solution, he is able to connect the maximum pieces of code with Google, which he doesn’t even understand how they work.
Often, it does not have any special education, and therefore the code is obtained with the smell.
If you are a programmer, they are not a programmer. [ via ]From here comes the association with monkeys -
Code Monkey .

Hacker
By hackers, I mean not a
hacker magazine audience at all, I just can't think of a suitable name. In English there is the word
Tinkerer , perhaps it is more appropriate.
Here I include people who can be called "
geeks ". Of course, this stereotype is still the same, but many at least partially correspond to it: uncommunicative, with night vision sitting in front of poor monitor, have physical or mathematical education, know C, use Linux, like to dig into the source and rebuild everything for themselves, often hand write code, and in the other they hold a soldering iron, have extensive knowledge of the intricacies of the work of hardware and software, are well versed in low-level programming. They can be found at competitions, they write software for the
demoscene , they are engaged in reverse engineering of various devices, and in general extremely clever and educated people.
But it is impossible to work with them in a team. For various reasons, and yes, there are exceptions.
Software developer
The average programmer working in a team. Often glued to the language / platform, therefore, assigns to itself its name. For example,
- Flash developer
- Java Developer
- .NET Developer
- ...
It is customary to categorize by knowledge / experience:
- Junior Developer
- Developer
- Senior Developer
- Lead developer
Taking the Cartesian product of these two lists, we get
more or less well-established subcategories : Junior Flash Developer, Lead Java Developer, Senior .NET Developer, and so on.
Developer differs from the encoder in that
directly encoding is just one of its responsibilities . Most often, the responsibilities of the developer include: subject analysis, specification, design,
coding , debugging, unit tests, documentation, optimization.
I think Junior Developer is a Coder who is eager to learn and grow. He is still not allowed to the important stages of software design and forced to perform the most tedious and / or simple task. But, if there is a desire and a brain, a person will gain knowledge and experience and gradually move upwards.
There is a myth
that some developers are N times more productive than others . I highly recommend spending an hour and watching a video of
Greg Wilson - It's True . If you feel sorry for the time, then he speaks specifically about this from the 18th minute.
Of course, the “older” the developer, the more he needs to know. Unfortunately, in our institutes they do not teach the design of enterprise systems (at least they did not teach in my time). Therefore, everything has to learn from books, from smart people or from their mistakes.
The necessary knowledge differs from region to region. It is wrong to say that Vasya is a bad developer, because he does not know something. Most likely, he should not, because he has a completely different area. What can be said is, for example, that Flash developers generally have a lower level of general algorithmic training than C ++ developers.
Lead Developer / Team Lead often moves away directly from programming and becomes a manager, so we are not interested. There are many cases in which Senior Developer grew up not in
Lead Developer , but in
Super Mega Senior Developer , turning into a walking encyclopedia on platform / language / frameworks -
it is
a delusion that everyone wants to grow into managers and lead.In small offices / startups, there may be generally 1-2 programmers who cling to a Lead Flash Developer title, and that the coolest developer here controls all the other 0 people. And then he is taken to a normal office by junior. So this again does not mean anything.
Software engineer
In colloquial speech it is usually used with the same meaning as Software Developer. The descriptions of
Software Developer and
Software Engineer taken from
salary.com are very abstract and quite similar. Salaries are also + - the same, although I was told that people with the title Software Engineer get more.
Regarding the meaning of the word Engineer in the name of the profession on the Internet, holivory continues to this day.
Wikipedia says the following:
Software engineering (SE) is a systematic, disciplined, quantifiable approach to software development; that is, the application of engineering to software.In general, engineering is a set of
working methods and practices that allow you to build / do something with some reliability and confidence. So,
Software Engineering does not work -
Real Software Engineering - Glenn Vanderburg .
And in many countries, to call yourself an engineer,
you need to have a license . Poor people, you have to be simple software developers.
But nevertheless, I clearly single out a separate group of
Software Engineer and I think that the word
engineer is very appropriate in relation to the development of software. The engineer is responsible for ensuring that what he built stupidly does not fall apart. The main thing is not to compare with the construction of bridges. People have been building bridges for thousands of years, and software has been written for 30 years from strength. After all, who cares if a poorly designed service drops from a load? But when it comes to airplanes and nuclear power plants, for sure, there are their own certifications and licenses. And in the future, I hope to be called
Software Engineer , you will need to pass exams and get crusts.
Software Engineer must have extensive experience and a bunch of theoretical knowledge not only from Math, Computer Science and Software Engineering. Knowledge of different languages ​​is secondary. After all, the principles of OOP and O (n ^ 2) in all languages ​​have the same meaning. A developer in this category usually has a very big outlook, Americans have a great saying:
when you have only a hammer, everything looks like a nail .
Therefore, I am annoyed by positions with names like
Java Engineer or
Ruby Engineer . Engineer can not be tied to the language.
And, damn it, somewhere there was an article exactly about this, but I can not find it to quote.So no, most often Senior / Lead Developer is not a Software Engineer, although they overlap in many of their properties and responsibilities. Another thing is that a person can be an engineer, in his spare time doing something on one platform, read smart books, and
(almost said during the day) at work be driven into the framework of another platform by Lead, and sit to edit the code for bezdyrami, because that pay more. This is yes.
Software architect
I don’t put architects in a separate category, because either they don’t exist or I didn’t see them and don’t understand who they are. Anyone who ascribes himself to the Architect title is either following the fashion, or is hobbling over the fashion, or clinical idiots.
It’s actually a pretty damnable day for you. It is not necessary and often harmful. [from comments to the article ]Analogies with the construction do not work here. The knowledge that is needed to create a system
architecture should be possessed by Software Engineer or Senior Developer. It depends on whether the architecture is being made within a certain platform, or if something complex is to be developed cross platform.
Programmers in their work constantly have to make certain architectural decisions. More experienced and advanced people trust to attach hands to the architecture of large projects. That's all.
In general,
architecture is a clinical disease. Constantly have to deal with people who write
their own engine with its super architecture . For years. An ideal engine in a vacuum of thousands of abstractions that has never encountered practical use, because of the real world it will break up like a glass ball on a stone floor.
They were there themselves ...Computer scientist
Unlike engineers who are concerned with the application of specific knowledge, scientists from CS study their theoretical foundations. Similarly to theoretical mathematicians who prove why certain formulas and algorithms work in abstract models, Computer Science takes its roots from Mathematics and inherits from it the methods of reasoning and proof of theorems. As in other sciences, scientists specialize in a particular area, for example: building and proving the correctness of algorithms (in a bunch of areas), computational theory, functional programming, machine learning, computer vision, and so on.
About scientists in recent times in the mass is known only because of functional programming. For example, having scored some growth, Scala stumbled over its own complexity (of course,
The type system in Scala is Turing complete ), and in Haskell no one understands what Monad is.
Although, it would seem,
“what’s the problem?” [ Via ]I personally am not familiar with any person who is engaged only in science, but at least I am sure that such people exist (not in our country, perhaps). From time to time interesting publications skip.
Here, recently there was a shortlist for 2011, which I again cannot find now.Creative coder
Recently, with the development of technologies and tools, a completely different and very interesting class of programmers began to grow out of scripters. In many ways, this was facilitated by Flash, Processing, Max / MSP, vvvv, JavaScript, OpenFrameworks, Cinder.
It is from the scripters, because the
goal is initially different - to use the code to draw something, animate, portray, play. Coming from artists, VJ'ev and other non-technical areas, they quickly began to absorb the surface features of the programming and the environment in which to work.
The person asks the question
"How can I do this?" . Google suggests the code and how to connect different components together. The components are not necessarily soft, from time to time there is a need to use different hardware, for example, sensors via Arduino. Therefore
, Creative Coder basically has an extensive stock of superficial knowledge . But, not having enough training, experience, and often the necessary mentality, he is not able to make a little more than a simple product. Because the code is made of copy-paste and patches between them.
But nevertheless, Creative Coders show an amazing ability to quickly assemble prototypes with parameters made to the outside. Using different technologies and links between them. While Engineer will delve into the theory, and Developer will write a framework (which will be needed only once, for a specific task), Creative Coder will google it and assemble a working program. Which, of course, is intended for further support exactly the way, but who cares?
Often,
creativity is expressed just in fitting the values ​​of these external parameters -
“but what will happen if you put 0.1 here, and then 42? .. Class!” . Therefore, in narrow circles there is a meme
“to engage in creative coding,” which means by eye to adjust some parameters in the code to achieve universal joy or to have a piece in your code in some way that does not understand how it works, but the goal is achieved .
On the one hand, Creative Coders are similar to Coders: code quality, copy-pasting, lack of desire to understand the theoretical foundations of this code; on the other hand, they have a desire to develop, to do something cool, to experiment, to try new things.
Also, they could just be called Junior Developer and put an end to it, but, as I said, they have a different original goal, and the code is used, because with it you can do
creative things . If Junior Developer goes deeper into the basics of programming and grows into Developer and beyond, then Creative Coder doesn’t find this growth process interesting. He wants to grow at the expense of small interesting (research, one-time) projects.
And here I, frankly, do not understand how Creative Coder works in a team with other developers, because in terms of the team it is Junior Developer, nothing else. No one will give him independent interesting projects, until he learns how to properly design programs and write code.
So they all work either alone or with like-minded non-programmers?Nevertheless, there are examples of Creative Coders, which did not ignore the theory and have the necessary mindset for designing sound algorithms and sane software. Not limited to the platform, they approached Software Engineer from the opposite side of Software Developer and at the same time show qualities from the Hacker category.
Creative technologist
Recently, you can see ads where the profession is described as a
Creative Technologist . The requirements are different everywhere: from the half-designer / half-js-coder without programming experience (sic!) To the C ++ and OpenGL masters.
This position has grown out of the need for digital agencies to translate creative into code. Accordingly, it would seem that a person with a design mindset and able to code would be an ideal candidate for this position. But, as practice shows, basically, people with design thinking are bad developers
(developers) . Somehow it is connected with the hemispheres of the brain, I am not a doctor or a psychologist - I do not care.
It is much more correct to hire a good developer, who is also not without communication skills and good taste. Of course, it will take him several months to get rid of various destructive habits of a large Software Development. But in the end, you will have a code base on which you can rely, and not a set of patches on a straw house.
Therefore, I do not have a special category Creative Technologist. So calls himself either Creative Coder, or Software Developer / Engineer, which works in the world of digital agencies.
Interactive Developer
The person wants to emphasize that he is writing software that interacts with the user. In addition to software for interactive installations, Interactive has recently attributed to itself Flash developers and JS developers who are experimenting with WebGL, Canvas and any other HTML5.
Conclusion
People tend to classify the observed objects into groups, often with great nesting - remember, for example, biology. Later, determining which group a particular object may belong to, it is easy to extrapolate the properties of this group onto it.
Keeping the categories in mind, and trying to mentally place a person in one of them, it becomes easier to make some assumptions about him, evaluate his knowledge and preparation, understand his goals and way of thinking. This avoids many problems associated with the establishment of working communication.
Of course, this division into categories is purely my subjective opinion (which may change at any time). Someone will fully or partially agree with me, but if you think that I am fundamentally wrong, I invite you to the discussion in comments.
And, if you still do not have such a list, try to make your own, or take this one. In the future, it will come in handy.