Instead of a brief introduction, one pattern can be called immediately: the longer and larger the project, the older the technology. If you want to master new technologies in practice, participate in start-up projects 3-6 months long.
Firms working for the Ministry of Defense and similar structures.
Secrecy, uses a relatively narrow set of technologies - which are certified by the FSB. For example, Java 1.6 and Tomcat are certified, but EJB containers are not certified, instead of them a handwritten under-parody can be used. What is good in self-written parodies - the developer, which is usually close and available for communication, what is bad - some small function, which is, but it has not been used for (almost a year), but which you suddenly needed - maybe just stupid not work (but you can get the developer to fix it quickly).
Firms developing a product on their own, old and custom platforms.
There are EJB 2.0 without annotations and its own under-ORM 1999 release ( * ) and other self-written under-parodies and “systems managed by metadata”. The worst thing about these platforms, from the point of view of a person who is used to evaluating platforms and languages, is largely the ease of refactoring (writing in PHP, Python, Ruby and NodeJS may show dissatisfaction, but I’m writing primarily about Java) is the lack of support these inventions of normal IDE plug-ins for editing these control metadata are not in raw text form and insufficient level of debugging and diagnostics tools of these systems. On the last point - well, it’s as if the Java virtual machine, instead of throwing an NPE with a stack dump, would simply fall because of an error in its very binary, caused by an attempt to still get something there from an object that would be on this uninitialized pointer “Nowhere” or “somewhere” or “incomprehensible where” (once in a new place) (of course, you can forget about security, of course), not much informing about this interpreter error caused by the input data - so even search for the answer to the question “where in the metadata (in In this case, the metadata is a program in the language interpreted by the given interpreter; there is an error ”may by itself prove to be a difficult task. A separate question is the quality of the code with methods of 2000 lines and intensive reuse of variables. The reason is usually simple: these systems (more precisely, their first versions) were written before the concept “quality of the code” became popular in Russia (and also the concept of “ORM” and the idea of ​​how to adequately build a system for persisting objects).
')
Firms, working on orders from state and municipal structures.
Different combinations of project duration and new technologies. It is almost inevitable, at a certain stage, integration through SOAP with the servers of state authorities with hemorrhoids on what to do with the integration section at the debugging and testing stage. Sometimes a strict dress code with a jacket and tie. Often you need to write in languages ​​other than Java.
Near-billing software firms.
Cunning troubles with security such as encapsulating access to, in general, foreign database through server procedures and several authorization layers. Some emphasis on speed. Great emphasis on correctness, data integrity and accuracy of working with memory. For example, a tariff plan can be implemented by a class implementing a special interface, and after the plan becomes outdated and the last user leaves it, this class is unloaded by the container.
Firms developing software (in Java) to work in financial markets.
The key requirements for software are speed (in particular, in terms of optimization for garbage collection) and multithreading. It may be necessary to develop a built-in meta-language for either re-setting or under-programming.
Offshore developers.
The main requirement is to integrate into the customer’s business processes. To do this, one should not differ from the customer in the opinion of the customer’s management, i.e. at least not differ from the customer more than some of its units differ from other units.
The quality of the code is a special point. To write code you need better quality than the programmers of the customer himself. The main requirement for quality is that there is nothing in the code that you can find fault with, basically just: so that none of the customer’s full-time employees could just walk around, stick in some place in the code and with full authority say “what the hell are they writing here”. Sometimes it comes to the requirements to write comments to getters and setters. Another point: we need over-communication - so that the customer is (y) calm. Somewhat reminiscent of the treatment of a “VIP patient in an asylum”, but it is this “VIP patient” that pays the money.
In some special cases, a not very clear statement of the problem is possible, where it can lead to the creation of an additional quarter of the system’s volume and architecture, but this is rare and when the author of the statement from the customer is a completely non-technical person.
This is an experience worth having. The “production culture” is usually higher here than in Russian companies, because accounting and reporting are much stronger: the one who pays money wants to know what they spent on. Technologies are also newer: focusing on short projects increases the formalization and “freshness” of the technologies used.
Subdivisions of foreign companies.
Mostly similar to domestic “Firms that develop a product on their own, old and custom platforms,” only slightly better with formalization, well-developed solutions, technological discipline and other production culture. The technologies used are also not new. But usually pay well.
“IT companies” serving online sweepstakes.
“Sly” work with the database - without domain-objects, with domain-methods and “bare” identifiers, but quickly. “Exotic” and uncommon web frameworks. A big “routine for newbies” (about half of the recruits are on probation) and some orientation of the work process towards this big “newcomers routine”.
“Programming” departments of non-IT companies.
It happens different. The worst thing is that you will obey the daily routine of the enterprise, and not the one that is convenient for the work of the programmer. Especially the situation with the relevant departments of the companies holding client bases and other sensitive information in the company's internal network (a single enterprise for all) is “amusing” because of security problems. There "security" they rule. From their point of view, there is no concept “developer”, but only the concept “employee”. The views from security guards are as follows: The working environment is configured once and on request updated by helpdesk staff ... Everyone should do their own thing - programmer to program on the provided tool, technical support - maintain the current state of the software and solve technical issues of users, system administrators - administer the infrastructure, and department employee IB - monitor compliance with the conditions of safe operation of IT-services of the enterprise . Note: "programming on the provided tool." Those. so that the programmer doesn’t have a “weight on his feet”, the notorious helpdesk should be no worse than programmers in understanding the “provided tool” —development environments, virtual machines, means of working with databases such as SQL Developer and other tools. After all, the same picture with the level of knowledge of software is available in relation to other “employees” such as secretaries, engineers, lawyers, salespeople and suppliers. Further, the question: why work with such skills in technical support, if a programmer can earn more with them? Therefore, a normal, in general, "technical support" for a normal, in general, programmer will certainly be a "dubinogolovym watchman", constantly interfering with the work.
Because of this, such companies gradually come to a reasonable conclusion that it is better not to develop anything “inside”, to give the development “outside”, and “inside” only to set tasks for the contractor, interact with him and prepare specially impersonal “playing” data for him for debugging.
But for the sake of the line in the resume (although who else from those who know the real deal will “lead” to it?), You can work ...
Firms that outsource their staff to outsourcing (outstaffed, in the first edition, not exactly named “outsourced firms”).
They can deal not only with the delivery of personnel for rent, but also develop something themselves. Well, here you are lucky (on the project where you are “outsourced”). Of the minuses - almost no career prospects (and in terms of professional growth prospects are weak) and not so good with stability. Of the possible advantages - they can “outsource” abroad, you can look at the IT culture of different nations, in this version, while waiting for a visa or project start - you can not appear at work at all, just stay “within reach”.
Instead of a conclusion.
I would like to express the hope that the number of those who find this article useful will not be very small.
UPD . Categories of employers, missed by the author, as well as small, unique and other unclassified.
Android developers.
"Also Java, although not quite Java." Growing sector of the labor market. The author has not yet come into contact with this sector, although he is a little bit familiar with the technical side of Android programming.
Odnoklassniki, other social networks and other high-loaded systems.
NoSQL-databases, map-reduce-systems like Hadoop, multistage interviews to select the “best of the best” ( * ). A part of the online gaming sector also belongs to this sphere - there, through Hadoop with handlers, “events” occur in the game in real time (each separate game server generates its own flow of events).
Hosters site builders site owners with CMS.
No matter how strange it might seem at first glance, Java CMS does exist. Both foreign licensed (with source), and completely domestic - in particular, on the basis of the very "under-ORM" 1999 release. Accordingly, Java programmer services are also needed there, at least for the development and modernization of the CMS.