[longrid] 20 years programmer career in a big small town

    <br> we do what for We a must Because <br> we CAN - of GLaDOS

    Izhevsk, our days

    The first of February marks exactly two decades, as I began to officially work as an engineer-programmer:

    Photos of the first turn of the workbook with the date February 1, 1999

    I continue to this day. And for some reason it seems to me that it will be interesting for many people to get acquainted with the history of how you can make quite successful horizontal programming career without leaving your hometown, and doing almost all this time quite interesting, if not insane, tasks.

    Of course, the measure of "success" is different for everyone, but mine is the fact that for the last 15 years I have been working in senior positions in projects mostly tied to large corporate or foreign customers, and almost every new job finds me. And still not tired.

    I want to warn you that my story is a typical longrid in the format of an interview in the first person, sometimes tedious, and almost without pictures, because I am mostly backend. It can be difficult for a reader without a technical background, since it contains a lot of programmer jargon (I tried to explain some of the terms, but not all). And still decently ancient memes, nostalgic details, and local cultural studies.

    But you love autobiographies with autistic jokes, don't you?

    Izhevsk, the mid eighties

    It all started a long time ago. Once, a mother who worked as a programmer in an ordinary Soviet scientific research institute, engaged in reverse engineering of Western computer models, took me to work - to show what to do and let me play. Recently, smuggled personal computers, PC / AT, were launched on which all kinds of diggers and tetrises were launched.

    Before the advent of "personalok", the research institute worked on the Soviet EU (IBM S / 360 clone, occupies a room) and SM (VAX clones, PDP-11, etc., usually a piano-sized cupboard), so at home we had some reels used punched tapes and printouts with assembler listings. My mother occasionally used to go on business trips with packages of “pancakes” - removable drives on magnetic disks weighing 15 kilograms of each, who were afraid of traveling in trolley buses - so I was mentally ready for the excursion. I expected to see something similar to the scenery of the then fantastic films.

    And saw. But the flashing lights and the buzzing fans of the cabinets in which something is spinning were not as impressive as the Digger, even on a monochrome screen. Like the PCB layout software that drew them on the plotter (watch the ink marker fly over the A1 format sheet, it seemed just some kind of magic), and the endless canvases of familiar assembler program listings for CNC machines that I then worked on mother.

    Do I have to say that the decision to become a programmer took shape in the head of the second-hand instantly, and was fixed there firmly? I was seven years old, and I don’t remember whether I ever dreamed of being an astronaut, a fireman, or who children usually want to be there, but as soon as I decided that I would become a programmer (and, well, because what’s the point become bad?), I was not interested in anything else.

    And to become a good programmer, you need to study well. I finished the first three classes of secondary school with excellent grades, and was able to get into a lyceum with a mathematical bias. In general, at that time there were several schools in the city with good quality of education - 29, 30, 41 (lyceums), 56 (gymnasium). Each is a local brand and dynastic breeding ground for technical, humanitarian, or managerial, depending on the profile, elite. Especially the "thirty" - almost all the local factory managers (and Izhevsk has traditionally been the city of the plant) finished it, and, as a rule, the matclass. As, however, and my mother (and she eventually also became the head, but more on that later).

    And if we talk about school, the very fact that in the corridor of the second floor there were chess tables with a full set of figures, which were always in demand at recess, and the lace curtains on the windows were of dazzling whiteness, is it worth wondering at the seventh grade? in which local students participated on a general basis with children from any other schools. At that time, the "thirty" still held the brand (she dropped it after my release, and, unfortunately, completely).

    The culture was high and the competition was very fierce. Of the 30 people who excelled in the fifth grade, there were ten of them left in the mathematical direction, the rest scattered about differently, or were eliminated altogether. In fact, there were two matches, but only pupils from the first who occupied the upper half of the academic performance rating could participate in the Olympiad team, which traditionally occupied places in the republic and Russia (and sometimes in international competitions).

    I hung around somewhere in the sixth place, occasionally climbing higher, so during the preparation periods for the olympiads I often found myself with the rest of the advanced guys in the back row, where instead of independent work we solved tasks +, tasks ° and even tasks **. To tell the truth, I don’t have olympiad thinking - I dig into the essence of the problems well, but I think too slowly and always make several test approaches, so I never advanced above the city stage. Well, at least I participated, and the result can be considered a brain training on non-standard (but reproducible, unlike the decisions of typical olympiadniki, which are usually applicable strictly ad hoc) solutions.

    And indeed, even the last troechnik by the standards of an elite hotbed would have been an excellent student in a regular school, and at the university I was disappointed ... however, in order.

    After many years, assessing my capabilities, I sometimes start to regret that I didn’t choose any metropolitan instead of a local technical university - my classmates successfully graduated from MIPT and MSU (and some eventually work on Google) - but this is regret passes quickly when I remember how I studied in general education semesters up to the “equator”. I did not study at all - school baggage, including additional courses, which were conducted by the same university teachers, was enough to receive "automata" in almost all subjects. However, I did not pass even the entrance ones - I became a student in April, after completing preparatory courses, and gaining the highest score on mock exams. It was, as you know, easy.

    At the end of the entire university program, only the database course was somehow useful to me - in the late nineties, it was obsolete for fifteen years, if not more, and the core teaching staff was the former factory programmers. What they could teach, besides the primitive "waterfall" and procedural programming, is a rhetorical question. From the advantages of such “education” - I can read the assembler, and I understand how the operating system works with hardware. But the actual industrial programming in its modern sense to learn in high school was absolutely impossible.

    Only self-education by combat could save me, and in the second year I found a job. Right there, at the department, as a sysadmin. Work is so-so, but it guaranteed unlimited access to faculty servers and the Internet, and also allowed to hang around in the lab for days and hours - and not only waste time on chattering IRC with girls from the next university, but also code something for all sorts of random customers. The minimum salary in 1999 was 83 rubles 49 kopecks (why would a student pay more?), And a bottle of “Bouquet of Chuvashia” in the “dean's shop” opposite the academic building cost 4.60, so we and other similar student administrators sometimes threw off a couple of boxes cheap beer for fizruk, not to waste time on meaningless circles in the stadium.

    Instead of fizry, time was spent on their own crafts on Perl and tcl ( it is very interesting to program an effective bot talker to entertain girls from a nearby university), as well as to develop an internal system for conducting tournaments according to the ACM rules .

    In Izhevsk, “mehane” also found its own olympiad team, which also at that time occupied far from the last places in international competitions, but it seemed to me much more interesting to provide infrastructure for tournaments than to wrestle with them. Especially since the credit relied, and so, and that way. In addition to the very low-level and scripting languages, I did not shy away from utilities for accounting on a bunch of 1C and Visual Basic, and for the dean's office on FoxPro and Delphi, and for entertainment I wrote applets on Java for my “hamster” on the faculty server.

    Practice is not superfluous, like money. Especially since, being lazy in the first courses, I scored for study and was left without a scholarship, but in the end I went to the academic at all because of a failed session. Although, the untimely swollen flu and the depression that had come down after unhappy love also played a role in this.

    Anyway, I didn’t manage to finish the fourth course from the first time, and I had to spend six months of free time with benefits, while trying not to get into the army.

    Summer 2001, Izhevsk

    Where to go to the undergraduate student with the ability to administer the Nix and the fragmented baggage of practical programming skills of something simple? Without a diploma, they didn’t take it anywhere, except as a sysadmin, but I would take up any work if I could wait out the time until I was restored.

    Fortunately, the desk with the telling name "Virtual Izhevsk" turned up. A microscopic web studio, but then any self-respecting web studio was supposed to - with a catalog of regional resources, a webchat server, and lots of projects of different levels of marginality. How do you, for example, Miss Bikinu-2002 online beauty contest? And if I say that he had a closed section for sponsors, with more interesting photos of “models”?

    He is still a gadyushnik, in short. On the other hand, the director of the desk had the idea of ​​fixing all the studio’s development from the brake Perl to freshly released PHP version 4, because he had read somewhere that he had a future (and it’s also trite faster). In general, the director was not mistaken. I stayed there for only six months, but at least I learned to write tolerably well in PHP - and, because of the specifics of the projects, I had to take care of security. They seriously tried to break them in order to win the votes - sponsorship prizes in the competitions were quite good, such as trips to a company of friends in Turkey, and girls from that very neighboring university gathered whole teams of well-wishers ready to take them to the tops.

    Also interesting was the initiative of the same director to gather a local community of web developers, a forum in which all Izhevsk developers and providers would hang out, and, imagine, it is still alive in some sense, even in the fifth reincarnation. . What city has its own rock festival for one and a half thousand IT people? And in Izhevsk there is RockIzhayti. It all began there, on a samopisny message board, where the developers and managers of a dozen local offices initially at first closed the cultural and cultural projects and experiences, and then began to breed epic srachi, quickly released and offline. The last echoes of those legendary verbal battles and business vendettas of the early 2000s still smolder in the local community.

    At the university I recovered, and to hang around for days and nights in the basement, hiding from the comrade major, there was no longer any reason.

    But fate itself immediately threw the work in the web-studio a couple of floors (and the rank of projects) higher. My mother completed her programming career by that time, but she didn’t leave IT (it’s not so easy to take and leave IT), but got a job as deputy director of one of the infrastructure departments of the neighboring university from which the girls were mentioned a couple of times in this story. The boys, however, also studied there, and even in the specialties “computer science in the field of something”, but the university is not a technical one.

    The division was called the “Multimedia and Internet Technologies Center”, and formally engaged in supporting university websites, distance learning systems, etc., but in reality was a hybrid structure within the university’s business environment, that is, earning money, and not only to maintain the image.

    The multimedia department produced presentation discs for local factories (for example, Izhmash and SEGP ), and the Internet technologies department was the same web studio that regularly won prizes at industry shows. To be honest, the wall in the director's office, hung with floor-to-ceiling diplomas, inspired. Basically, customers who came to the subject to agree on the development of the next representative site.

    But there was just one little nuisance - the team of programmers and designers who won all these awards took, and the whole staff left the building, taking half of the current projects with them. It was hard to fit a constantly growing crowd into a non-rubber university staff list, and in general, they wanted something more.

    I urgently needed a “well, at least someone” to replace, but I was very successfully free. My mother simply dragged me by the scruff of the neck, threw me at the console of the office server, and ordered me to take all the Internet in my hands. The multimedia department in the same way was in the hands of the son of the mother’s girlfriend, and we started to play as much!

    In fact, it is difficult to imagine a more stressful situation: to come to the place of recognized professionals, pick up alien developments and completely unfamiliar developments on the fly, and pretend that you are capable of pulling it all. Yes, and at least not worse. I do not remember very well the next few months - in the morning I had to attend couples (thank God, not all, some of the objects were recounted to me) in my university, then to drag across the entire city to the next one, and there to hang around deep into the night. And the weekend is also hanging around at work. I also wanted to hang out, but how to be a student, and go without drunks ...

    It took about six months to read all the RFCs on technology, all manuals for the languages ​​and platforms used, to disassemble all the clutters of the code inherited from the old team (especially university websites written in a terrible mix of early versions of Java and PHP with self-written extensions), and in parallel developing your own software base - for PHP only. Not only because the new broom has to take revenge in a new way, but at least from hygienic considerations: for ten years of work of the old team in projects that were conducted without any version control, a lot of garbage has accumulated, and at a fresh glance it was very noticeable.

    It is also worth considering that the market at that time did not yet have any developed CMSand in general, it was quite difficult to call the “market” the then state of the art in web development. Each office wrote something original, with its own zoo. Therefore, I overlaid with all the available examples of open-source "- nukes ", and for the following summer, right before the fifth year, I assembled a simple CMS from the spare parts of my forum and competitive "engines", which allowed to solve short-term tasks. In addition, I then proporlo on UX , and, having studied all available at the time the HIG , I somehow imbued maykrosoftovskih Wizards 97, whose ideology and tried as much as possible to realize the interface implemented step by step wizard for all occasions.

    Late version of CMS, site page creation wizard

    Oddly enough, but the prank was a success. I not only managed to successfully complete the emergency hanging projects, already on my own engine, but also accelerated the development several times. Moreover, due to the need to thoroughly document the projects we had, I naturally had a detailed technical task for a typical representative site for some typical factory - as well as a manual for authoring support for municipal sites, since one of the projects was so, and the FZ with the template did not yet exist.

    Many novice developers underestimate the power of documentation, especially the power of manuals, but as I understand it, at this moment, having gone through all user cases, and feeling the pain and needs of the customer, I turned from novice developer to novice system analyst. And if earlier the work of a programmer seemed to me a solution to interesting puzzles, now it has become what it really is - automation of the routine actions of people.

    A programmer is not a creator. A programmer is an engineer who is no worse than a plumber who designs and builds a drainage system for a skyscraper, but we donate custom blood, sweat, and tears, and not to the sewage system, but to information services.
    But let's not be distracted by philosophy. In the multimedia center, sorry, "The Center for Multimedia and Internet Technologies of the Udmurt State University" I worked for almost five years. I made my diploma for Izhevsk State Technical University entirely using the example of implementing the experimental version of my CMS for the municipal site of Glazov (in the future, he will also receive the Runet Prize award in his category; the project is still alive in the fourth version). This was the first in the history of the department a diploma on the subject of something near the Internet, so the topic on the insert is listed as the “Continent Management System [sic!] Site”. Well, in 2003 nobody knew the words “content”, so I did not correct that artifact of the epoch.

    We quickly filled the missing staff list with the same students (well, maybe not as purposeful and stubborn as I) - and turned into a sort of forge of personnel. Many of the guys who started their careers in my department as trainees or graduate students now run their own offices and projects, and are quite respected in the city. Having put the development on stream, I gradually improved the process itself and my CMS (in particular, I invented my own markup compiler for templates, which allowed changing the site design on the fly, not only styles, but also HTML, and script binding).

    The business model chosen at the office did not involve product alienation - we rather offered a subscription to the author's support, but if necessary, customers independently managed their sites, paying us only for hosting and CMS updates, - detailed user guides and step-by-step wizards allowed them to work autonomously, without compromising the overall quality, and many of them remained with us until a decade. For many years after I left, the projects I started continued to live and develop. The last one collected by my hands was replaced literally in the autumn of last year, having worked for 13 years on the same code base. Without a single service gap.

    I had to take part in the negotiations more than once (it was especially difficult to talk with municipalities - and, my God, I was surprised how much when in the Federal Law that appeared over time I found direct quotes from my training manual; most likely it fell into the hands of legislators through one of our municipal customers), resolve conflicts of interest between team members, educate users, and even take on design a couple of times. He did not notice how he became senor.

    Also, the local community with its squabbles has not disappeared, and often had to fight for projects with offices, the payroll of which was many times more than the staffing of the university department, and then also go through the lynch courts according to the results of the conquered much tougher than Tema.

    Once I forgot to reset the CSS server cache after restoring the site from the backup, and someone from the shop colleagues instantly threw a screenshot with a completely dispersed layout on Lynch to Lebedev. For lulz. Bottom line: one famous meme.

    But the technocratic approach was advantageous, and compared to the rest of Izhevsk offices, our projects looked at least as good, and certainly existed many times longer than the vast majority done by their colleagues. And some, such as Izhmoto.ru, even survived the death of the original customer. Or even the second.

    For fun, I once conducted a completely inhuman experiment. There was such a program to improve the skills of rural computer science teachers - when they were driven from different 25 districts of the republic to different Izhevsk universities, and gave them a course on the fundamentals of site building. Naturally, I taught on the example of my engine, and I could not take advantage of such an excellent opportunity to conduct A / B testing of several versions of the interface on hundreds of unfortunates. It was fun, I learned a few completely unexpected things about patterns of behavior and perceptions of users (the Microsoft employees were right when they converted the Office UI to context-sensitive - it is most effective; also, it is absolutely impossible to remove the “Save” button from the diskette from the interfaces).

    But in the end, I still got bored.

    Well, how much can saytik rivet? Well, okay, multisite (this is when a dozen or a half of interconnected sites on different domains, but on a single copy of the engine, and with pass-through authorization). Okay, document portals (document catalogs, hung with metadata that your Christmas tree is, with all parameters search in real time). Well, intranets, video blogs, media sites (just specialized plug-ins for original CMS, which, according to my specifications, were written by graduate students).

    It was obvious that it was time to act, for example, as the previous team, and leave the building. Unfortunately, I do not have enough qualities to be a commercial director. Technical - I can, but why? On the web, the wedge of light did not converge, and progress is not worth it. What was exclusive in 2002, in 2006, the mainstream, and in general, Bitrix brought website building into a craft.

    And not to move in the adjacent area. Why and yes?

    Only in what?

    I went to talk to several different offices. Not everywhere me, terrible troll with Izhayti, greeted with outspread (very few people in general love troll), but the choice was rather rich. It was possible to go to desktop .NET, and to program the pieces of iron (although this is at the factory, so rather no, than yes). But I especially liked the idea of ​​developing large systems for a bloody enterprise - only Java was driving in this world, and I only knew Java at the level of those applets from the university hamster, but the noodle-like Legacy buried in previous work. Also version 1.1.

    Therefore, I accepted the offer from the local telecommunications provider Izhsvyazinvest (it was “multiservice”, that is, provided Internet, telephony, and television; after the 2008 crisis, died in agony and was bought by Beeline, but at that time flourished).

    It requires a small remark about the history of local Internet. It is quite different from the typical for Russia thanks to the Mark company (no matter how it was called for its more than twenty-year history) - since the mid-nineties Izhevsk has been very much ahead of speed and coverage, and at a lower price not only all neighboring regions , but also to Moscow. Moreover, the era of DSL-modems was replaced by the era of copper, and then optics to the house very quickly, and the fast Internet in Izhevsk became widespread, and this provider was an excellent forge of technical and managerial personnel for the local industry. Even local fidosh tusa and that was mostly over Markov Ethernet.

    Immigrants from “Mark” founded not one competing office, including Izhsvyazinvest. They brought with them a billing system - a monstrous system that worked inside a clustered Oracle, moreover, a classic one, on top of Sanov's branded iron and under a solarium. Almost all the business logic of this chthonic monster was sewn into miracle storage, even letters of payment to customers were sent from the asynchronous job. Only a small piece of the admin panel was written in Java (version 1.4), despite the fact that it was generated almost entirely through System.out.println (), and it looked ... it looked bad. It was impossible to look at the user web interface without tears (and not only because it was all in 7.5pt).

    Especially, compared to what by that time the admin panel of my CMS had become. And was she HTA-Application, indistinguishable externally from the native, and even not requiring the presence of a mouse, even though it is written in pure JS / DHTML. The head of the department was so impressed that he immediately took me as a specialist in UX. Intenshen was simple - to pull a beautiful, fast, convenient, and native interface on the chthonic monster of billing, and sell it to other providers. In terms of capabilities, in fact, being developed since the mid-nineties, he tore all the existing analogues like a tuzik, but the competitors had a sane UI, while TELSI did not have it.

    To put lipstick on a pig ... However, it is not so easy to tie the interface to logic if it does not have endpoints for something even remotely similar to AJAX.

    The endpoint layer had to be written, integrated into the existing code. But in 2006, Java 1.4 was already quite a relic, so first of all I rewrote the existing admin germ to the current version with matching combing and tidying up the code (aha, again I had to dig into the inherited substance). Along the way, I studied the J2EE technology stack, but due to the specifics I have so far limited myself to servlets and all the associated strapping, as well as JDBC (you need to pull the same storage), Velocity (as the most similar template to PHP), and core Java.

    Gradually, it came to be understood that all the logic relating to the display to the user in any way, and even more so to the interaction with him, should be pulled out of the store and implemented in the Java services layer, because the requirements to features that change over time The construction of raw calls is stored via JDBC difficult to maintain (everything needs to be changed in two places, and with the code versioning of the databases everything is still bad, let alone the eighth Orakl) and fragile.

    “Okay,” said the head of the department.

    It took me a year to pull the whole thing into the light of day. Year! The amount of code was just monstrous. I can remember about a megabyte of sources at a time, and here the code only stored by five. Half of the unused, the other half recursively call each other, and generally intertwine into such a tangle of noodles, that it was absolutely impossible to unravel it without the help of the boss.

    I had to work six days a week, eleven hours a day — the rest of the programmers sat on the support of the existing monster and could not help me. The result was a microstroke (this is at 26, my ass!) And half a year on tablets. I learned the lesson - I’m not overworking ever since. Work does not run away, but health can.

    After some time, it turned out that part of the billing data is more convenient to store in the form of reference books - that is, not quite ordinary relational tables, but rather documents consisting of key-value sets with often unknown metadata for each record. Natively orakl does not support this, and in general, with NoSQL in those years it was still rotten.

    TELSI, PBX Reference EditorTELSI, Directory View DesignerImages are clickable Damn, but something reminds me of it ... Ah, yes, yes, the document portals are the same. What turns out, all information systems for about one person, when viewed in profile? Well, okay.TELSI, directory entry editor

    Okay, I said. And for several months I implemented a document-oriented storage on top of oraklovyh tables using triggers, storage, create views, and some kind of mother. It turned out not very quickly, but it seemed to work with a half-kick. It was time to gossip into the pilot operation.

    And then the crisis of 2008 came to Izhevsk

    Although he came to all.

    There was no money not only for everyone, but also for the office, especially to keep the programmer working on the future version of the system. The office rushed to recruit new customers, just to survive, and they decided to throw me into the routine maintenance of the existing ancient monster, because the workload had increased, and the new project was laid on the cold. They also cut the salary, because there is no money from the word "in general".

    “Good bye,” I said. “Now I'm an old man,” I said, “and I know kung fu,” I said, “and I am grateful to you that you showed it to me, but I want to practice my kung fu, and not to suffer nonsense.”

    Unfortunately, it was harder to do than to say. In a raging crisis with a bloody enterprise, the situation is much the same as with TELSI (that is, “postponed” for “later”), but in the new economic reality, Western business turned its attention to Russian outsourcers in the new economic reality, and they flooded. I had to postpone the enterprise for several years and do what brought money.

    Very quickly, I found work in a regular studio (more precisely, they found me - yet, fame in the local community, even slightly Troll, sometimes useful stuff). Well, as studios ... They had web development, but to a greater degree this “information and publishing center” positioned itself as an outsourcer. Well, also as a printing house. Such is the next hybrid business.

    The main focus of outsourcing was the development of geographic information systems - that is, systems that do something with map data.

    For example, the current project was something terrible for Danish bikers, on Zend , with some analogue of portlets (do not ask what it is, I only know about applets and cutlets) and in general some extremely strange TK. And I just sat down to carefully read it, as the bikers hid in an unknown direction, along with the technical director of the office, who, as it turned out, lured me to replace myself.

    Well, as a substitute. We needed a lead developer for a new project - also a GIS, just about satellite TV. SatBeams.com - still alive, you can see, but please do not collapse.

    An interesting project. Yes, I again had to go back to PHP, but there was the most cymes in the design of the database. In geostationary orbit, several hundreds of satellites hang over each of its longitude, each of them has several (up to hundreds) antennas - transponders broadcasting in several bands. They broadcast in packages, each of which has several (up to hundreds) of TV channels, each of which has a set of characteristics (again, up to hundreds, because languages).

    The essence of the task: it is necessary not only to draw a coverage for each transponder on the map, but also to generate for them in real time a diff of changes in all the characteristics of all channels received on the plate in some place, and spit it out into RSS. For such information, professional lovers of satellite TV and pay money, and, considerable.

    It would seem that it sounds simple, but wait a minute ... One hundred multiply by several, one multiply by one hundred, multiply by ... oops. The Cartesian product of all possible parameters exceeds one trillion, and we need to build real-time differential . It is an olympiad challenge, by the way.

    This is where my university database course came in handy, as well as all previous experience of working with them, and all the experience in system design that was just there. As a result, all of this resulted in several dozen tables, normalized to 5NF , denormalized tables with history, and a heap of queries of several pages each. With clever joins that take into account the behavior of the optimizer of the selected DBMS. MySQL, I mean. To another customer did not agree.

    Together with the second programmer coped somewhere for a year. Works, - if you have not dropped it with your habraeffect now, - still. I love this project. And not only for the backend, but also for satbar.js - the last interface widget that I happened to write (since then I have not touched user interfaces anymore).

    satbar - satellite switch - on top of the map

    An unexpected obstacle was drawing footprints of transponders on Google Maps - Google generally wanted to put its thick mojo on third-party integrations, and systematically cut out 2.x features for features from each new API card release, as a result of which it acquired an incredible set of crutches, and required constant support from side of the second programmer after putting the project into operation, - and he migrated it to the third version of the API, periodically going into depression. But the customer praised the photo of the PMA Guglokart desktop with the label of our site with the signature “nice polygons” - he secretly made it when he was visiting the headquarters there.

    But cool projects tend to end. And well, if successful.
    The crisis continued to rage. I had to take on not so cool projects, so long as the office paid money.

    I again went on the thumb, and collected a few sites, almost without regaining consciousness. From nothing to do, I updated the CMS with interface implementations dragged from my previous work - including some kind of Ribbon UI from a fresh Office (I did it earlier than Microsoft itself, but, of course, simpler, although the magic single ALT worked there too. I'll show you something, it is worthy of a separate story). I even took on the development of a desktop base on .NET + SQLite for one government customer instead of Legacy solutions for Firebird (or even FoxPro? I don’t remember, but with something quite old), but this project brought with it a new PM on the role of techirc, and we were not able to agree on the terms. So I didn’t manage to dig into the .NET desktop stack.

    And then I suddenly wrote to a former student who once did a diploma in my department (the very same “document-portals”). Over the past five years, he has grown to become the head of his own office, by luck, engaged in the bloodiest enterprise - SAP, and a little more in Java EE.

    That's good luck. He just needed an expert to help with a new project.

    The essence (and in general, the meaning) of this project is difficult to explain. I still have little idea of ​​the motives of a venture capitalist from Tatarstan, who wished to make a sort of SaaS / PaaS / boxed analogue of MS SharePoint + Exchange + Lync + Dynamics, but only with a server part on J2EE, and with a “fat” Java Swing client. At first he called it NewOutlook, and then OfficeSuite. Plus, he was also a Mac driver, which made it necessary to buy poppies at the office - swing components for a fat client behaved under MacOS at times unpredictable. Very, very strange project. But terribly interesting.

    In total, at least three teams were engaged in them - besides us, the guys were sitting in Kazan and somewhere in Minsk, or what? or in Kiev ?, and our team was considered the main one: it was we who had to develop a common architecture for both the server side and the client, a mechanism for synchronizing data between them, and also, for example, implement the personal finance management module. The rest had to be engaged in Unified Communications and all the rest that the investor had imagined (without a specific TK).

    The implementation of the synchronizer seemed to be the most difficult task - none of the existing team knew how to approach it at all. The client, as we remember, is “fat”, that is, it can and should work without a server part at all, and at the same time it should also be able to connect to the server on a schedule or user request in order to update the “objects” (whatever) and here and there .

    I also didn’t know how at first, but the eyes are afraid, and the hands are doing. Behind the clever words “client and server architecture”, in fact, there are only a few well-designed sketches in the form of a structured document. Of course, “any kind of objects” is a so-so requirement, but, fortunately, I have been able to design host-plug-in systems that can describe their types of objects, since the time of the multimedia center, I’m not scared of ORMs after the Izhsvyazinvest monster, but the missing I can learn J-technologies from EE quickly enough.

    "Architect" ... I do not like when this word is applied to the position of a programmer. Curve translation from English System Designer, it would be more correct "engineer-designer". But, in my opinion, the process of creating a prototype of a future product from scratch, which even the customer doesn’t imagine, is much better described by the term “research engineer”.

    After seven months, by the time of the mid-term delivery, of all the three teams, something worthy of the show was only ours ready. Our team wrote quite a workable personal budget management module, the synchronizer synchronized everything in the best possible way, and the core of the server and client parts of the application were ready to connect the remaining plug-ins. For the others, the horse didn’t roll, and the venture capitalist, it seems, understood that he had swung at the senseless task, and disappeared from the horizon.

    The project was immediately closed. I, who toured as an invited expert, was not particularly needed, like the other javista, because the head of the office decided to concentrate on SAP.

    Pancake. Such is he, a venture business. Slightly hate.

    Such a remark: there are no ideal work places. Wherever you are, there will be something good, and something bad, delightful, and disgusting, sensible, and abnormal. It's not a dialectic, and not that life is objectively colored in different colors. The matter is mostly in your own attitude to various aspects of being - as long as the spark of God is glowing in you, you are doomed to experience different emotions about different things. Which, damn it, happen.

    Not always for the better.

    The yard was already 2011. Still in Izhevsk

    During this time, the city has drastically changed the landscape. The ranks of web studios have thinned out, factories and other providers with internal development somehow shrank, but the number of grocery offices has increased markedly, and even large outsourcers have entered the city. Especially, EPAM.

    This is where the true bloody enterprise.

    EPAMs (as well as Luxoft and other such monsters, popularly known as “galleys”) are factories. Giant factories for the production of software to order, and the production procedure there is absolutely conveyor. The processes are the rule for everyone - a written and unwritten set of formal and informal rules for all occasions, from the most insignificant daily routine moments to force majeure and full pc. No matter what level of the system you are built into, you just have to obey them, whether you want to or not. You need to be a cog in the mechanism, and play your role.

    But cogs need different sizes, thread directions, and under different keys. Some even have to be inch, and not metric, it all strongly depends on the specific project.

    The joke here is that the rules for screwing themselves are very, very high quality. They even want to follow - I have never seen such reasonableness and depth of study anywhere else. And the effectiveness is proved by the fact that with a fairly accurate execution of the rules, the personality characteristics of people working in the system become unimportant to a certain limit. But only to some.

    After all, people are always, in a sense, hell. Because of the good formal rules in the EPAM, they can work and successfully work:

    • people with whom I would not only have gone into reconnaissance together, but in general would never even have conversed for anything in the world;
    • people without imagination, people without a sense of beauty;
    • people without a spark of God, but with a cast-iron ass;
    • people without a sense of proportion and tact;
    • people who are psychologically incompatible with each other;
    • freak people.

    They are there, fortunately, not the majority, more normal, but the overall picture of such "honors" (from others) Very! Strong! Spoil!

    Also, in traditional offices, where a person is not a “resource”, but a “specialist”, and there is no concept of a “pool of developers”, but there is a concept of “department”, people are not hired in the general herd, but so that they can work with each other. friend together - that is, like-minded people. In EPAM, the project team is selected on the basis of formal characteristics from the common resource herd.

    How did I even get there?

    They called me, promising to work on the bloodiest enterprise project in the entire history of the office, and promised to immediately give a Signor patch. Do not be fooled. They took the lord with the prospect of lead.

    And the very first project, where I got, turned out to be, in fact, monster. The customer is a bank with a round green logo, a team of about 50 people (this is only in EPAM, there is still the same crowd in other subcontractors), the mission critical system itself. Should be written in Java EE, but there is a plot twist: vendor - IBM. Platform - WebSphere AS and MQ, database - DB2. Even the JVM itself in this bundle is exotic - J9, which was quite different at that time from Sanov's reference, and horribly buggy (but I became aware of this later when I came across a pack of bugs).

    They told me: now you are a key developer (and a member of the architectural committee), so here’s a team for you (don’t look like novices, they are not bad guys) and TK for this module (300 pages brick).

    I said: aha (“architects” had about 15 people, the guys were ... different, and the brick corresponded in the course of the play three times beyond recognition).

    And it started ... In two years, I had to participate in the development of several subsystems. Gateways to the outside world. Internal file storage. Synchronization of payment processing statuses for Big Three operators. The system of deploying modules - there were about 25 of them altogether - on the computing farm (as a result, it did not survive, but applications.xml remained in the product).

    Once I accidentally got into the area of ​​responsibility of another team, and found out that there are 19 unique ways to do a search for a resource in JNDI. I had to put everyone in their ears, pick up the configuration module for themselves, and bring them to a common denominator. Spilled a lot of blood. This is an enterprise!

    After that, there was some kind of delivery failure, and it was decided to roll back the trunk to an earlier version. Version control system - SVN . Well, it should be so necessary. I did it once, and ... then I had until the end to be a “repository keeper” (damn it!) And supervise all subsequent merges, especially before releases.

    In the end, these same bugs, useful from J9 and the DB2 driver at the most inconvenient time ... IBM patched them, but only after six months, and in general even that quest was even known.

    And also - a lot of conflicts in the team because of the very factor of personal incompatibility, including me and PMA ...

    In short, I wanted a bloody enterprise, and I got it, but I didn’t expect that there would be such a cruel tin, and not where I expected it.

    In the end, asked for another project. It was necessary for this to finally get on with PM, because they did not want to let me go. The key developer is not any unnecessary Vasya from the bench. But I left - and it was “on the bench.”

    For some time, relieved. But it was still uncomfortable, because the climate in the office itself, with its undercover games and intrigues, no matter how distant it is, but presses.

    Almost decided to leave at all, - anywhere, just far away from this madhouse, - but then I was unexpectedly thrown by another project. Also an enterprise, but much simpler and more traditional, almost not even bloody. I do not know why I agreed to his lead as a technical lead. It was necessary to throw, but I decided to try the last time in management.

    The only available at that time development team was made up of "honors" from the bench, always sitting there. All those who were not taken to other projects because of toxicity, but passing assessments on formal grounds, and therefore not able to be dismissed. Later I realized that it was such a reward for me for a conflict with the PM of the first project, but it was too late.

    Especially since it started out as not bad, but ... quickly began to slide into the quagmire of technical debt, and almost ended in complete disaster due to sabotage by “honors” who did not want to develop anything, but only wanted to receive a salary in 8 hours in the office on weekdays, and instead of completing tasks, the analyst was flooded with tons of clarifying questions for each task in the tracker, and the code was written only when I was physically hanging over my soul.

    Their position was this: you are the coolest here, so you do everything. And we are small people, here we have a cushy spot, and we are normal.

    As I have already said, according to formal signs , it was impossible to expel these figures from the project - all assessments they passed with good results. In the end, I had to leave my post, and otherwise providedelivery would be impossible, even if I wrote the code for myself and those guys 24 hours a day, besides purely managerial tasks. I would just catch another ischemic attack (no, one was enough) and would die right at the workplace.

    The new technical leader had the right to change the composition of the team - which he immediately did (free normal developers were magically found in the office), and in the end he did manage to bring the project to the winning. But in order to make this possible, we had to use the heavy artillery in the person of the directors of the branches, and it is still indicative of dismissing the most malicious "honors pupil". It was unimaginably hard and disgusting.

    I learned the lesson: I really have nothing to do in a factory. Lesson number two: never go into management again.

    After such a nervous dive into the corporate quagmire, and even with an interval of dives a little less than a year, I escaped from the EPAM - with burning heels, going nowhere, completely demoralized, mentally burned out, and mentally squeezed like a lemon.

    Burnout, speak? What is burnout? I just did not want anything. More precisely, I wanted this world to be burned to hell with pigs, and I disappeared under the hoofs of the horsemen of the apocalypse among the first sinners. For five months I spent on average between coma and homemade vegetable mode. He studied for law, and occasionally chose for some IT gatherings (yet participation in the local community, even in the rank of a half-forgotten legend, is sometimes extremely useful).

    Izhevsk, summer 2014

    One of them, hmmm ... drunk, - what a sin to conceal, namely that IT drunkards, - took place in the office, literally just emerging from nowhere. An American startup with the funny name tinypass (how many jokes the hussars joked, covering the logo with a finger p) decided to open a development center in Izhevsk. The founder and co-owner turned out to be local - and had just returned to his homeland. Immediately I threw the call - dudes, go to an American startup, I did!

    The most adequate colleagues from EPAM (who are as tired as my entire garbage) immediately found themselves there. As well as the most experienced guys from other offices (including several candidates of science). One of my former colleagues (with whom we made friends during the time of the venture capitalist), right at gatherings, held in the new office with access to the roof, where a great view of the city was opened, suggested that I join as well. Well, I said that in two weeks, I would probably come to work.

    I came. I looked at the project. I was sad.

    The project turned out to be raw, low-consuming, disgustingly written. The technical lead - a close friend of the founder hailing from New York - is the most stubborn person in the world who cannot be persuaded of anything, nor dissuaded, nor agreed. But you can outwit. And still the second lead, which one line of code can bring down, nafig, everything (as a result, they got rid of it, but not immediately).

    But in the new cool office with access to the roof an incredibly strong team gathered (the American startup was ready to pay literally any money) - but I have never had the opportunity to work with the best programmers of our small six hundred thousandth town. The threshold of entry was monstrously high (middleware for subscription services of content providers with a bunch of integrations is difficult), and simpler guys would not have pulled. And since I came in the account only the ninth, I had chances to build development processes close to my understanding of the ideal. That is, when it all works.

    The project we gradually, by common efforts, led to a sane state. The bottleneck was the upbringing of the techlids, but they sat in NY. Here they were not there. This is where you can drink beer right in the office every (no exceptions!) Thursday, and have a great time in the company of the best of the best developers of the city. Hashtag # Izhevskigul.

    It was very cool, until the startup first became 15, and then 20 people. Just a club of interests, and in such a club there could not be too many people with different interests. But after the addition of the team, we moved to an even cooler office with a panoramic view of the central part of the city - why epic sunsets in the instagrams of female colleagues became even more.

    It will be difficult to describe exactly what I did in the Piano (after merging with competitors and changing the brand, the Izhevsk office remained the main office of the development), because in a startup, you have to deal with virtually everything. Including English, finally, to learn.

    At first, he wrote a lot to everyone in Java, then made some extremely unsuccessful experimental features in a row (the stubborn New Yorkers didn’t like the negative results, but local colleagues believed in my experience - in the end I was right and I wasn’t fired). Put the process of Continuous Integration - and made possible the appearance of engineers in the QA team. In a healthy team should be girl testers! But seriously, the production of DevOps processes is probably the most useful thing I've done there in a little more than two and a half years.

    Then again he wrote a lot in Java, already in the team with the third New York lead. Here he was a super dude and a cool professional - it’s a pity that he quickly ran away (from the other two, because they almost ate him there), and as a result, a huge job of localizing the system (never try to localize the system, which was not supposed to be localized It is better to rewrite it from scratch) we, having spent a year, didn’t bring it to a final victory the first time. Then, slowly and sadly, they finished it in the background.

    Have you ever tried to merge a branch that affects hundreds of thousands of code in a project with millions of lines of code? Cool feeling, not every roller coaster will give such a feel. According to the results of the merge ... nothing fell and did not deteriorate. We were given a localized cake.

    The author (in orange hoodie) and his colleagues with a cake.  Everything is fine on the cake written in 3 languages

    After that, there was again some very crazy DevOps and poorly formalized, but cool research tasks. It was possible to piss a lot of code on the python under the Google BigQuery, and all the mora there on Node.js (it is very useful for the old javista to change sometimes a horse, and sometimes skis). Well, the cherry on the cake was a task that I refused to take three times because of its ethical questionableness.

    For some reason it seems to me that it is not good to detect, and even more so to try to force the user to turn off the ad blocker in the browser. In fact, the end user of the middleware that Piano offers is the publisher, and the one who sits behind the screen is only a consumer of content. But I, in general, try to keep people behind people, and respect their choice. It's not your business whether my adblock is enabled or not. And even more so it is incorrect to try to find out, because there are a lot of ways to block advertisements, and it is technically difficult to check them all, and a lot of people sitting on a bad channel somewhere in the subway will suffer from false positive.

    Well, as you know. Of course, I am a well-known “research engineer” in narrow circles, but in this case I don’t want to deal with the task (it’s interesting, I don’t argue, but let people be ruined by someone else’s life).

    Honestly, I did not think that I would ever leave the office because of ethical differences. Moreover, the office cool in all other respects. Hashtag # Izhevskigul.

    Izhevsk, forty years is near

    How cool when you can do nothing for several months between jobs. But then it still gets boring, and the eternal question arises - what else would you do? To answer it, I made a checklist.

    [x] Web development was.
    [x] GIS was.
    [x] The bloody enterprise was.
    [x] A cool hipster startup was.
    [x] At the plant, where the iron, I obviously have nothing to do.
    [x] Product development is also not suitable, because it is for a long time, and I already sawed my CMS for 11 (eleven !!! 11) years, and I was very tired. What is left?
    [x] Is that the game with other three-dimensional, but there dofiga matana, this was still full in school.
    [] Oh, wait a minute, Big Data is trendy.

    In Piano, the same candidates of science were engaged in bigdates, and it was difficult to get into their private club. Okay, look if there is anything else in this city.

    Quite by accident found. The absolute majority of the proposals were Moscow, of course, but, fortunately, not all.

    I came to talk to the place where I work now, and PM right from the door declared that the project was hellish. Nichosi Again, GIS, only calculations are all on MapReduce (and you want to on Spark ), maps on ArcGIS, and all this is spinning in the clouds that no one can devapsit. In my opinion, a great option!

    A year and a half has passed, and I still think that the option is excellent. All was useful in everything, than was engaged earlier. Then I’ve got Spark in Java (I’ve not switched to Scala, because I’m not Ph.D.), AWS with devops, web GIS, and a great office with a well-equipped kitchen, where every Thursday (ok, let it be with exceptions) you can arrange meeting of the culinary club.

    I, after all, am a good chef, with such and such experience. I like cooking and I can. Pizza, pasta, cookies, other goodies with the letter P, - like any other letters. And there are many girls in the office. And in the next department sawing HUDWAY. The hashtag is # made by the moor.

    Total, we continue to work on.

    Because we can , and I still can.

    And in conclusion, I will turn to local young programmers, if I may,
    Ижевск — город достаточно комфортный для нашего брата. Контор, где можно набраться разнообразного опыта, около семидесяти, и они очень и очень разные. Конкуренция может показаться высокой, но и кадровый голод из-за столичного пылесоса тоже достаточно велик, так что и за людей иногда разыгрываются битвы. Особенно за целеустремлённых.

    И не надо думать, что для того, чтобы быть ценным кадром, надо было начинать 20 лет назад. Можно просто прийти к таким, как я (а я здесь такой отнюдь не один, много нас), и мы научим всему, что знаем сами, и вы нас ещё сделаете — потому что вы моложе, и мозги у вас быстрее работают.

    Ребята, ну вот серьёзно, что вы забыли в Москве (или в заграницах)? Зарплата там всего вдвое выше, зато здесь можно купить трёхкомнатную квартиру на верхнем этаже новой высотки в центре за те же деньги, что в столице двушку б/у на замкадной окраине (тем более, без mortgage на 25 лет). Тут нет необходимости тратить три часа в день на выматывающей душу комьют (и необходимости водить машину тоже, общественный транспорт хороший по сравнению с).

    Правда, тут нет и аймакса с икеей, и подсветки, как где-нибудь на бульварном кольце, тоже не найти. Но зато и спокойнее (и, в основном, всё по-русски, хотя и американские стартапы, где всё на буржуйском, тоже есть). А если душа движухи требует, то Казань неподалёку, там двихужа бывает. В конце концов, у нас есть РокИжайти — единственный труёвый айтишный рок-фестиваль ever.

    Здесь вполне можно жить, заниматься интересными задачами, и не устать даже через 20 лет.

    Also popular now: