Disclaimer: this is not PR. At the moment with employment I have no problems.Difficult programmer career or what employers want.
With this article, I want to show how strange and bizarre a programmerâs career can be (or a person who does programming, because I canât consider myself a caste of âprogrammersâ). Who I am, I donât know for sure, just like a rare breed of Cheburashek, who know all the technologies from ASM to Python, and at the same time, they donât know anything seriously, the algorithmic skills of which are mating, like jellyfish in the Black Sea, and knowledge of computer science is near to zero with a frantic length of experience.
I am almost 40, and I am from a generation of programmers-craftsmen and self-taught programmers who received a higher technical education in a Soviet university in the early to mid-90s, when training was different and even such a thing as computer science was still absent in our universities. It was only abroad, and I knew nothing about such a term and the relevant discipline until 2007, when I began to actively go to interviews and position myself on the labor market.
Maybe this story will be useful for young professionals who are feeling for themselves in the IT industry in order to avoid any mistakes and build their careers differently.
IT in my life.
Here are the main milestones of my "glorious" IT biography. The most interesting thing in it, perhaps, was in the period 1990-1995 and 2000-2010.
- 1973-1985. Periodically I found pictures and photos of computers in magazines and books and carefully examined them.
- 1981. I saw the calculator and was struck by its "features". I wanted to do the same on my own, but, naturally, nothing came of this idea.
- 1985. Dreamed of a programmable microcalculator BZ-34. He subscribed to the journal "Science and Life", where programs for him were published (section "Man with a micro calculator", later changed to "Man and Computer"). Later, in the 1990 (?) Year, I bought the MK-52 calculator, with an EPROM and an extended set of commands. I introduced programs to it. I had no idea about any other computers. He knew only that there is an EU computer, but what it is - I did not really know. It seems to have been like this in our school, and I saw her in 4th grade.
- 1987. A scheme of the personal computer âSpecialistâ appeared in the magazine âModel-Designerâ. I started to prepare a board for him, but there were no chips. I saw a friend âMikroshuâ downloaded from a cassette recorder. This is an improved version of "Specialist". Loved it. Games, Tetris, Snake, BASIC. I rented the âMikroshuâ myself. Entered into it all the programs that were. I tried to write something myself on BASIC. I went to my friends, they had a Spectrum computer, and it was loaded from a tape recorder. I played games.
- 1988-1989. Secondary school. 9th grade. Computer science. "Agatha". He wrote programs on âBASICâ according to the school course (geometry - whether the points lie on one straight line, all schools - âCheckersâ, âFoolâ (card game). Physical school at âMIEMâ. KUVT âYamahaâ. 1 year - âBasic "2 year -" Pascal "and instrumental environments (DOS, Norton Commander). They wrote laboratory works and coursework (" MSX Basic "is a program for determining by 4 points, is the figure formed by them, a convex quadrilateral, the program" Tic-tac-toe, Turbo-Pascal - programs for working with files).
- 1988. Palace of Pioneers, a circle on packet radio. I first saw the IBM PC AT.
- 1990. Entered the Moscow State Institute of Electronics and Mathematics.
- 1990-1992 MSX Yamaha. Basic. Pascal. Laboratory works.
- 1991. Finally, with great difficulty, I bought the Mikrosh. I tried to introduce a chess game (from the Model Designer magazine). He dealt with it for a very long time, drew a block diagram for several days and analyzed the algorithm of work. After entering the program did not work. Probably somewhere wrong in the set. The computer crashed and it had to be reset by Reset. All the results of many hours of "stuffing" are gone. It was necessary to write down the tape recorder, but I did not guess. Henceforth was smarter. Recorded using Save.
- 1992. Saw the 286th and Windows 1.0 or 2.0 in the hall for laboratory work at the institute. Loved it.
- 1993. "Personals" from the 3rd course. IBM PC XT. IBM PC AT. Wednesday Turbo C 2.0. Lectures and coursework. The program "Composer" under DOS. "Composes" fugu on the desired number of votes, in the right tone and in the right fret. He wrote several months at work with his father on the IBM PC AT. Large computers. Unix. Simple C programs (finding a character in a string, replacing, etc.)
Of course, we studied Prolog, Turbo Basic, programmed in Pascal and from the 3rd year on C. Even earlier, in 1988-1989, we programmed on MSX Basic, and it was really great! There was also an intensive assembler course and microprocessor architecture (then 80286). There were some disciplines in parallel computing and supercomputers that I never needed in practice later. - 1994. IBM PC AT. Turbo Basic. Turbo Pascal. Turbo C. Laboratory work (program "Solving the Cauchy Equation"). Course "Computer Graphics". Lab. Program to display an elephant three-dimensional shape. Programming of adapters EGA / VGA. Course "Databanks". Dbase 3, 4. Clipper. Laboratory works. I wrote databases at the institute and from my father at Clipper. I saw Windows 3.1 and MS Access 2.0 from a friend at work, I was shocked and I liked it very much (I didnât understand anything there and was surprised how he fumbles about it). A friend was programming Access databases for a travel company.
- 1995. Unix. OOP. Borland C ++. Prolog. Turbo Prolog and ARITY-Prolog. Artificial Intelligence. Laboratory works. Alteration of the program "Composer" in C ++, adding classes, operators.
At the end of the university, all my fellow students dispersed: who went abroad, and who got a job as a programmer to write on âC ++ for Databasesâ. Someone the most "advanced" even began to write software for assembler video cards (then it was still some kind of squalor like S3 Trio and Trident with 256 KB of RAM on board). I just went to pre-diploma practice and a diploma in a certain state organization, where I got my initial work experience, studied Unix and MS Access, and got acquainted with the principles of computer networks. It was the mid-90s. - 1995 - 1997. I decided to become a programmer or, at worst, a sysadmin. Work in a design research institute by someone like a sysadmin programmer. VAX / VMS operating system. DECNet. Thick EtherNet. "Large computers", VAXClusters, terminals VT-220, VT-330, DECServers, DECPrintServer. Backed up, installing new software, administration (user rights, rights to disks, files). Sun SparcStation, 32 MB of RAM (this is some unreal, crazy amount), 2 GB hard drive, Silicon Graphics, Alpha DecServer (DecWindows). For the first time, how to work with Windows, studied it (on 386DX, then Pentium). OS Solaris, Irix, DecWindows.
- 1996. He defended his diploma on the topic âDesigning a cross-platform computer networkâ. Seven-level OSI model. Conjugation of different types of networks using common protocols (TCP / IP). The choice of "hardware" (routers, hubs, repeaters), assessment of their cost, calculation of various characteristics (segment length, distance between repeaters, etc.).
- 1996-1997. At work, I took courses on âSQL for end usersâ, âThe XGL graphic libraryâ, âMotif programmingâ, âOpenGL programmingâ, âXlib programmingâ, âXView programmingâ.
All courses, which were, and for graphs (there are many CAD-ovtsev, under which Silicon Graphics were bought) and for database users (there was Oracle).
Administered Novell Netware 3.11 and 4.0 (in a different building). Large network of ~ 100 personal computers, 2 Novell Netware servers, thin Ethernet.
He connected to the development of the âCatalog of industrial equipment equipment databaseâ, which he later developed independently (when all the experts had already left the work :). So began my own acquaintance with Access.
Exit Windows 95, familiarity with it. - 1996. Connecting the company to the Internet (dialup in the company Elvis Telecom).
- 1996 (?) Purchase of a computer home (486DX2-66). Improved the program "Composer" the possibility of printing notes on the printer. I tried to program under Windows 3.1 (Borland C ++ 3.0, Win 3.1 SDK). Difficult and confusing, but I was able to write a simple program that displays a window (with the basic concepts of programming in multitasking environments I was familiar - the event queue, resources, windows, controls, event handlers - partly through the institute, partly on courses in Motif and OpenGL, but Windows is all this differently). I tried to remake the program "Composer" under Windows using multimedia libraries. Very difficult, could not.
- 1996. The modem, FIDO, Internet appeared. Started looking for a new job. Tried to get a job in a company where there was UNIX, Informix, NT, etc. I was asked what âtemplateâ, âgroup byâ is and what UNIX-shells I know. I did not know anything from this list, and they did not take me.
- 1997, January-February. Tried to write the warehouse program on Access 2.0, to study Excel. I remember that Office 97 just came out, and I tried to get comfortable with it.
- February 1997 - December 2000. A completely unfamiliar person took me to my second job, and without any interview I just had an ad in mo.job (he probably still somehow implicitly checked my adequacy, but I successfully passed this test ). The salary was incredibly high for a young specialist at the beginning of 1997. When asked why he took me and why without an interview, he said: âI just needed an Access-ist. You after all Access-ist? ". I said: "Yes, of course, I am Access-ist." I never asked such stupid questions again. Programmed on Access 2.0. Immediately gave complex tasks. It was hard at first, then settled. I mastered Access 2.0 and Excel 5.0 thoroughly. Then Access'97 and Excel'97. ERWin. "1C-trade" has been released. I did not like it very much. Slightly looked Access'2000 and Powerbuilder 6.0. Powerbuilder really liked, transferred part of the libraries to it. Translated the program from MSA 2.0 to MSA 97. I also worked on anykey, administering Windows NT Server, implementing mail systems on MS Exchange 5.5, implementing Office'97, WINS, DHCP, MS Proxy 2.0, RRas and (the main achievement in this company, as I I consider) transferring the system to MS SQL 7.0 / MSA'97 with data replication to a remote office. I personally installed 3 new Windows NT servers (SQL, Exchange, WINS, IIS, MS Proxy, RRas), implemented Faxmaker for Exchange Server. Wrote scripts under MS Exchange Server on VBScript. Having worked in this company for several years and wrote a lot of software, I began to think about new work.
- Times have changed. It was the 2000th year. In order to avoid stagnation in the upper part of the brain and the domination of 1C, I went to one startup, where we worked on interesting things until 2010. They took me there, too, completely without any interview after performing a simple test task. For 10 years, many dozens of megabytes of source code have been written in various programming languages ââ(C ++, Python, Assembler), a lot of great projects have been made. I perfectly studied Linux, C ++, Python.
- Outside 2007th year. For the first time I began to worry, because the work ceased to satisfy me. It began to seem to me that my work is preparation for something ârealâ, it is just a rehearsal, practicing skills before something important. But time passed, and the "real work" did not begin. This, on which I can be realized completely. It began to seem that it simply does not exist. I thought that my salary and interesting work would grow in direct proportion to time, but this did not happen. The salary trap began to strain me. Having entered the free market in 2007, I, perhaps, for the first time felt my own inertia, lack of competitiveness and hopeless backwardness from technology. Stuck in a startup, I was pretty numb. I started to look for a new job. My out-of-the-markedness bothered me more and more. I visited many companies, including very large players in the software business (Rambler, Yandex, Kaspersky, etc.). But everywhere the result is one - a complete and undoubted failure. At this time, I first asked the question: âWhy?â, To which I still have not received a clear answer. I finally found out that there is computer science, which everyone is asking and about which I first heard. Is it because I don't know computer science? But I wrote a huge amount of high-quality desktop software, I know a lot of technology and industrial development! I started to rush back and forth, grab new innumerable technologies, urgently study this computer science, did not have time to study and was upset that I could not do anything. In the end, without finding a new job, I accepted my sad fate. I was ânot in the streamâ all the time: when everyone used stl and boost, I practically didnât use them, because I didnât need to work; when the Pythonists switched to django all year long in 2008, I stubbornly ignored it, because I used the best framework from my point of view, I edited the files persistently in FAR, although the terms were full of great handy editors, and my performance did not suffer from of this. In the end, I began to use all of these technologies, but only to be adequate to the market.
- But here - about a miracle! - I was invited to one startup again, completely without any interview. And again, diligent work for several years, design, planning and ejayl, mountains of source codes, testing and bug fixes, hopes for the best, the feeling that this is a rehearsal of something important and new, frustration and unsuccessful searches for new work that went exactly the same as in 2007, but in the face of tighter competition, which I felt literally behind my shoulders.
- And now times have changed again. In the yard already 2013th year. I'm still young, but my age is already beginning to take its own. It seemed to me that during this time I had gained tremendous experience, that I could do anything, that I was in a competitive field and I had a fairly high level of competence, that I could work, that I was a âprogrammer.â âNow,â I thought, âfor sure the time has come for my most valuable and important work, for the work of my whole life.â
')
In fact, not so simple. I do not know what kind of job I am looking for. I have no idea what work will be valuable and important to me. We must try everything. High competition. A lot of young people. Yesterdayâs graduates are well aware of computer science and know all these mysterious words, magical passes, and are able to speak clearly. The rules of the game have changed, although Unix, C ++, OOP remained. There were long, informative, multi-stage interviews, grueling interviews. Tougher requirements for applicants. Now no one takes a âstudent without experienceâ even for a ridiculous salary. âStrange,â I thought. âIn the beginning of the 90s, there was a demographic pit into which my potential competitors were supposed to please.â But it is not. My gaps and flaws in knowledge, the consequences of many years of âhandicraft practiceâ and the lack of a system in knowledge are revealed. It turned out that I donât know in detail how any sorting algorithm works (all 20 years sorted with the usual âsortâ in all sorts of variants and in various programming languages, which, in my opinion, sorts very well, but how exactly does it I never cared, because he sorts the best way!), I donât know the principles of OOP (Iâve used it since High School, but apparently wrong, since I donât know the right principles), TCP / IP packet format (and why should I know? knew when he wrote a diploma in high school, and then forgot!), algorithms on graphs and many Gogo another ... But I once worked for the last 20 years and wrote an excellent working software that is still in use and will be used for a long time! How can it be? I am surprised myself.
And the second round of entry into the âfree marketâ went through all in the same âwarm and friendly atmosphereâ as the first.
âKasperskyâ again suggested that I âzabreynbenchitsyaâ with him, as in the good old days (âThank you, chap, but Iâm not playing that game anymore, have already brainbenched all overâ), âYandexâ predicted all my applications all the vacancies, this time in silence, even without an invitation to interview (in 2007, I interviewed and ârejectedâ), and it seems that he turned me on to a life ban, because I was already pretty tired of their HR, since I respond to almost all of their vacancies ; Mail.ru did the same, but Parallels, Mirantis and other âsharksâ of the software market have ârejectedâ me at the interview. It is unpleasant to feel "rejected", but it is more pleasant to understand that we have not mutually approached each other and have not been suitable for many years ď We are too different. For example, I love poetry, literature, music and English. But does Yandex like it? Not sure.
Employers: they can be understood. Their task is to find out the candidateâs knowledge on the widest possible range of topics in the shortest possible time. I myself recruited programmers and I know how nontrivial it is. Ready-made questions mean ready-made sample answers. Like Zhvanetsky: "... here is a list of your questions, here is a list of my answers." Favorite techniques used at the interview, which I gathered for many years of interviews and which make me puzzled, put me in a stupor (I donât know the answers to some of them even now), and I think some of them have little relation to programming and they are simply asked because it is a âproven methodâ and âeveryone asks them.â My answers, which do not suit employers, in brackets:
- Imagine that you are giving a lecture to students. How would you explain the term âXâ to students? (X == "deadlock", "context-free grammar", "state machine", "optimistic and pessimistic locks", "programming paradigms", "data bus"). (From this list, I can clearly explain only the "dead end", he's deadlock, because I often deal with it. I do not deal with other terms, and, accordingly, I cannot explain them).
- Describe in as much detail as possible what happens when you enter an address in the address bar of your browser (option: when you click on a link). (What kind of level of detail is meant? My story can take a whole day, and we have limited time. First, if we are under Windows, a Windows-message WM_CHAR is sent when typing in the control ... no, more precisely, WM_NCHITTEST, ... but if you start from the beginning, then the keystroke enters the keyboard buffer ...).
- Describe how TCP / IP packets are exchanged when an HTTP connection is established. (Unfortunately, I watched TCP / IP traffic many times with ethereal, but I donât remember even the approximate packet format).
- Describe how TCP / IP packets are exchanged when an HTTPS connection is established. (Unfortunately, TCP / IP traffic during an HTTPS connection did not look). Is it true that HTTPS works on top of HTTP or is the opposite true? (I do not know, but I think that HTTPS over HTTP. Or HTTPS over TCP? Who knows ..).
- Describe how packets are delivered using the TCP transport protocol. How do we know which physical computer to deliver the package to? How is guaranteed delivery guaranteed? (The delivery address is determined by the MAC address of the physical computer, packets are delivered via the gateway specified in the system settings, if it is an external host. External or not external - this is calculated from the ip-address and mask).
- What is the algorithmic complexity of the best and worst possible algorithm for sorting an array of N elements? (The worst complexity is O (N ^ 2), because you need to compare each with each, the best - O (N * ln (N)). Why is it the best? I donât remember. I read it in a book. I donât remember which one.)
- Rectangles with arrows are drawn, it is said that rectangles are modules, and arrows are dependencies between them and the question is asked: âHow to load all these modules? And in general, what is it called? â(We take and load recursively first the dependencies of the module, then the module itself. As it is called, I donât know and I donât have a clue. This is calledâ rectangles with arrows â).
- Describe the differences between the demon and the usual process (I was asked this question in 2007, and I still donât know the complete answer to it - the topic is truly inexhaustible, and I donât understand it thoroughly, although I wrote a lot of demons during my work practice this is not completely understanding whether they have a common memory or not, whether there is a common stack or not, and whether there are shared file descriptors or not. It seems, no, not common, or common. I forgot already, in general. Long time ago it was, in 2004 m year.).
- Name the five principles of object-oriented programming. (I do not know, unfortunately, although I have been using the PLO since 1993).
- How to make a queue with two stacks? (I do not know, but you can look on the Internet).
- What methods of process synchronization do you know (option: what synchronization primitives do you know) (mutexs, semaphores, events)?
- What design patterns do you know (option: what programming patterns do you know) (singleton, factory of objects)?
- How to optimize a SQL query (option: what methods of SQL query optimization do you know) (see query plan, remove subqueries if possible, insert missing indexes)?
Employers are absolutely right, of course. I understand why they do that. They select and screen out candidates, asking them the simplest questions to begin with. Then move to more complex, then more and more. The problem is that our approaches with them never coincide. Given that I am sure that in most of the companies I went to for an interview, I could work without any problems, but employers know better, and rightly so.
Ps. Actually, I have no problems with work. This is just an excuse to describe your bizarre career. Finally, an employer was found who âwent to the red lightâ, ignoring all these numerous warning messages and that I donât know, did not ask a single question on computer science and simply offered a job.
UPD. Still, there are problems with work, because the only employer who wanted to, refused to take me in the end. Does anyone have a job? ..