Coder vs. Developer vs. Engineer - what job title do you have,% username%?

    Computer Scientist, Software Engineer and Coder enter the bar.
    - Oh, and here are the programmers! - calls out their bartender ...


    I know people who have been programming for more than a dozen years, but are offended when they are called " programmers ." And at the request of Coder vs Developer vs Software Engineer in Google there are 113 million links: 1 2 3 4 5 6 7 8 9  ... 113 000 000 . Interestingly, you can find completely opposite opinions about the same thing. With something I agree, but with something fundamentally not.

    The last few years, they’ve been constantly adding fuel to the fire, some completely strange programmers appear who call themselvesCreative Technologist , Creative Coder, and Interactive Developer .

    Let's try to figure it out.

    And what is your Job Title,% username%?


    So, relax, if we talk about Russia, then here we are actually all Software Engineers (or generally just Programmers). All these strange titles were invented somewhere there, but here they sound cool and are written unusually. I generally introduce myself as Lead Interactive Architect , which does not say anything about what I'm doing here.

    Throughout my short career, I'm a programmer, I managed to work with a lot of different people. And all of them magically can be fairly accurately divided into several categories. Of course, there will be those who are somewhere between these categories, but they can be completely discarded as a statistical error.

    This classification does not imply any absolute order and nesting of some categories in others. It will be about the following groups of people one way or another related to programming:
    • Scripter
    • Coder
    • Hacker
    • Software Developer
    • Software engineer
    • Computer scientist
    • Creative coder

    Scripter


    Initially, small programs in simple languages ​​were called scripts. Recall Shell scripts, Batch files, AppleScript, JavaScript, ActionScript, VBScript. Their main application is to automate repetitive tasks of the same type .

    It is now possible to write a Flash IDE in JavaScript in a browser, but "then" its use was limited mainly to scrolling stupid text in the status bar. This is now ActionScript 3 is a full-fledged OOP language that enterprise applications write in, but “then” the very first one didn’t even have a textual representation, the actions had to be selected from the list, one per key frame.

    But the meaning, however, remained. Now, even a designer can, with a certain desire, write scripts for himself to automate anything in his daily work. Which, by the way, I highly welcome. It's pretty sad to watch a designer, for example, draw 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 is easier to give game designers small tools with which they can make the functionality they need themselves, than constantly manually change some numbers that are not clear where they came from to others (they are such game designers). Again, as in the previous example, there is no need to be a programmer to compose any script from the available commands.

    Sometimes you can hear a fundamentally incorrect definition of scripting - write instructions that are parsed and executed by another program. But this is the code. Instructions that execute something else.

    Coder


    An encoder is a person who translates from one language to another. Simply put, the instructions in the "Russian obscene" translates into instructions in some programming language, whether Java, PHP, C # or some other, thousands of them . Of course, observing the rules and requirements of the platform and environment, where this code is then executed.

    I myself do not like this term. When someone says “coder”, I imagine a person who thoughtlessly writes code whose main and only property is that it compiles ; and this person is not able to do anything more due to a lack of knowledge, experience or desire; Instead of turning on the brain and sorting out the problem, coming up with a solution, he is maximum able to connect pieces of code from Google, which he does not even understand how they work.

    Often, it does not have any special education, and therefore the code y is obtained with a stock.

    Yes, it is an open secret fact which Software Companies won't say / accept - that Software Professionals specially in India are not programmers but mere coders, they are the assembly line workers. [ via ]

    From here comes the association with monkeys - Code Monkey .



    Hacker


    By hackers, I mean not the audience of the Hacker magazine at all , I just can’t think of a suitable name. In English there is the word Tinkerer , perhaps it fits more.

    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: non-communicative, with night sitting in front of a poor vision monitor, have physical or mathematical education, they know C, they use Linux, they like to dig into the sources and reassemble everything for themselves, often one write code by hand, and in the other they hold a soldering iron, have extensive knowledge of the intricacies of the work of iron and software, are well versed in low-level programming. You can meet them at the Olympics, they write software fordemoscenes , reverse engineering a variety of devices, and generally extremely intelligent 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 ascribes to itself its name. For instance,
    • Flash developer
    • Java developer
    • .NET Developer
    • ...

    It is customary to divide into categories 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 an encoder in that coding itself 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 believe Junior Developer is a Coder that is eager to learn and grow. He is still not allowed to the important stages of software design and is forced to perform the most tedious and / or simple tasks. But, if there is a desire and a brain, a person will gain knowledge and experience and gradually move up.

    There is a myth that some developers are N times more productive than others . I highly recommend spending an hour and watching the video Greg Wilson - What We Actually Know About Software Development, and Why We Believe It's True . If you feel sorry for the time, then specifically on this occasion, he speaks 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 in my time they did not teach). Therefore, everyone has to learn from books, from smart people, or from their mistakes.

    The necessary knowledge differs from region to region. It’s wrong to say that Vasya is a bad developer because he doesn’t 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 Leadmost often moves away directly from programming and becomes a manager, so we are not interested. There are many cases when Senior Developer grew up not in Lead Developer , but in Super Mega Senior Developer , turning into a walking encyclopedia on the platform / language / frameworks - this is a fallacy that everyone wants to grow into managers and lead.

    In small offices / start-ups, there may generally be 1-2 programmers who cling to themselves the title Lead Flash Developer, and what, the coolest developer here and controls all the other 0 people. And then they take him to the normal office as a 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 quite abstract and quite similar. Salaries are also + - the same, although they told me that people with the title Software Engineer get more.

    Regarding the meaning of the word Engineer in the name of a profession, holivists are still being conducted on the Internet to this day. Wikipedia says the following:

    Software engineering (SE) is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

    In general, engineering is a setworking 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 guys have to be simple Software Developers.

    Nevertheless, I clearly distinguish a separate group of Software Engineer and I think that the word engineer in relation to software development is very suitable. The engineer is responsible for ensuring that what he builds does not stupidly 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 by force. After all, who cares if a poorly designed service falls from the load? But when it comes to aircraft and nuclear power plants, for sure, they have their own certifications and licenses. And in the future, I hope to be called Software Engineer, you will need to take exams and get crusts.

    Software Engineer must have extensive experience and a wealth of theoretical knowledge not only from Math, Computer Science and Software Engineering. Knowledge of different languages ​​is secondary. In the end, the principles of OOP and O (n ^ 2) in all languages ​​have the same meaning. A developer from this category usually has a very broad outlook; Americans have an excellent saying: when you have only a hammer, everything looks like a nail .

    Therefore, positions with names like Java Engineer or Ruby Engineer annoy me . An engineer cannot be attached to the language. And damn it, somewhere there was an article exactly about this, but I can’t find it to quote.

    So no, most often Senior / Lead Developer is not a Software Engineer, although they overlap with 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, reading 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 lackeys, because that pay more. That is yes.

    Software architect

    I do not place architects in a separate category, because either they do not exist, or I did not see them and I do not understand who they are. All who ascribe themselves to the title Architect, either follow the fashion, or banter on the fashion, or clinical idiots.

    It is actually pretty sad that in this industry you pretty much have to tack-on architect at the end of your title after a certain number of years in the industry, otherwise you lose a level of credibility and earning potential. I believe the word architect should die as applied to software, it is not necessary and often harmful. [from comments on the article ]

    Analogies with construction do not work here. The knowledge needed to create architecturesystems must have Software Engineer or Senior Developer. It depends on whether the architecture is being done within the framework of some platform, or whether something complex is to be developed cross-platform.

    In their work, programmers constantly have to make certain architectural decisions. More experienced and advanced are trusted to put their hands on the architecture of large projects. That's all.

    In general, architecture is a clinical disease. Constantly have to deal with people who write their engine with their super architecture . Over the years. An ideal engine in a vacuum of thousands of abstractions, which has never encountered practical application, because it will crash into the real world like a glass ball on a stone floor. They were there ...

    Computer scientist


    Unlike engineers who are concerned about the application of specific knowledge, CS scientists study their theoretical foundations. Similar 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 one or another field, for example: constructing and proving the correctness of algorithms (in a heap of fields), computability theory, functional programming, machine learning, computer vision, etc.

    Recently, the masses know about scientists only because of functional programming. For example, having gained some growth, Scala stumbled on her own complexity (still,The type system in Scala is Turing complete ), but in Haskell no one understands what Monad is.

    Although, it would seem, “A monad is just a monoid in the category of endofunctors, 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). Interesting publications skip from time to time. Here, just recently there was a shortlist for 2011, which again I can’t find now.

    Creative coder


    Recently, with the development of technologies and tools, a completely different and very interesting class of programmers has begun to grow from scripters. In many ways, Flash, Processing, Max / MSP, vvvv, JavaScript, OpenFrameworks, Cinder contributed to this.

    It is from the scripts, because the goal is initially different - to use the code to draw something, animate, portray, play. Arriving from artists, VJs and other non-technical fields, they quickly absorbed the surface features of programming and the environment in which they have to work.

    The person asks the question, “How can I do this?”. Google prompts the code and how to connect different components together. Components are not necessarily software, from time to time it becomes necessary to use different hardware, for example, sensors via Arduino. Therefore , Creative Coder basically has an extensive supply of superficial knowledge . But, without sufficient 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.

    Nevertheless, Creative Coders show an amazing ability to quickly assemble prototypes with external parameters. Using various technologies and the bundles 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 and assemble a working program. Which, of course, is intended for further support in any way, but who cares?

    Often, creativity is expressed precisely in fitting the values ​​of these external parameters - “what will happen if you put 0.1 here, and then 42? .. Class!” . Therefore, in narrow circles there is a meme “engage in creative coding”, which means by eye to adjust some parameters in the code to achieve general joy or somehow have a piece in the code that is not clear how it works, but it reaches its goal.

    Creative Coders on the one hand are similar to Coders: the quality of the code, copy-paste, the lack of desire to understand the theoretical foundations of this code; on the other hand, they have a desire to develop, do something cool, experiment, try new things.

    Also, they could simply be called Junior Developers and put an end to it, but, as I said, they have a different initial goal, and the code is used, because it can be used to do creative things. If Junior Developer goes deeper into the basics of programming and grows further in Developer, then Creative Coder is not interested in such a growth process. He wants to grow due to small interesting (research, one-time) projects.

    And here I honestly do not understand how Creative Coder works in a team with other developers, because in terms of the team he is Junior Developer, nothing else. No one will give him independent interesting projects until he learns to properly design programs and write code. It turns out that they all work either alone or with like-minded non-programmers?

    Nevertheless, there are examples of Creative Coders that did not ignore the theory and have the right mindset for designing reasonable algorithms and sane software. Not limited by the platform, they approached Software Engineer from the opposite side from Software Developer and at the same time show qualities from the Hacker category.

    Creative technologist

    Recently, you can see announcements describing the profession as a Creative Technologist . The requirements are different everywhere: from a semi-designer / semi-js encoder without programming experience (sic!), To C ++ and OpenGL wizards.

    This position has grown out of the need for digital agencies to translate creative into code. Accordingly, it would seem that a person with design thinking and coding would be an ideal candidate for this position. But, as practice shows, mainly people with design thinking are poor developers (namely developers) . Somehow it is connected with the hemispheres of the brain, I am not a physician and not a psychologist - I do not care.

    It is much more correct to hire a good developer, who at the same time is not without communication skills and good taste. Of course, it will take him several months to get rid of the various addictions of the big Software Development. But in the end, you will have a code base that you can rely on, and not a set of patches on a straw house.

    Therefore, I do not have a special Creative Technologist category. So calls itself either Creative Coder, or Software Developer / Engineer, which works in the world of digital agencies.

    Interactive Developer


    The person wants to emphasize that he writes software that interacts with the user. In addition to software for interactive installations, Interactive has recently been credited with Flash developers and JS developers who are experimenting with WebGL, Canvas, and all sorts of other HTML5.

    Conclusion


    People tend to classify observed objects into groups, often with great nesting — remember, for example, biology. Later, having determined which group a particular object may belong to, it is easy to extrapolate the properties of that group onto it.

    Keeping 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 training, understand his goals and way of thinking. This avoids many problems associated with establishing working communication.

    Of course, this division into categories is purely my subjective opinion (which may change at any time). Someone completely or partially agrees with me, but if you think that I am fundamentally wrong, I invite you to the discussion in the comments.

    And, if you still do not have such a list, try to make your own, or take this one. In the future, come in handy.

    Also popular now: