- you already 45? But our team is very young. Are you sure you would like to work with us?
- Yes of course! I have heard a lot about your company. This is the dream of my life!
- Okay. Here is a simple question for you. What does the letter L in the abbreviation SOLID mean?
- Liskov Substitution Principle.
- Not. I have written that this is Liskov Substitutability Principle.
- But ...!
- No “but”! They answered incorrectly, because it is clear that they did not prepare for the interview, just say so, and even argue! Are you a general conflict person? Okay, give you one more chance. How to expand a single linked list?
- Expand a single-linked list in a single pass? Yes please. We go through each node, memorize its next, insert into it the next pointer to the previous one, then go along the memorized next-y and so on. Yes, in the first node in next we insert, of course, nullptr. Unclear explain? Well, let me write better.
“Hmm ... good enough.” And recursively can?
- Yes, I can recursively too.
- And how many gas stations in Moscow?
- O -) ???? !!! 1127!
- How do you know???
- And my dad worked in Lukoil.
“Okay ... Do you know the worst case of quicksort?” There is such a worst case. I have it written down on a piece of paper ...
- Yes I know.
- But young professionals also know this. Why do we have to pay you 15% more?
- But I have a family, children, a mortgage ... Yes, I know English.
- Everyone knows him. This is now no surprise anyone.
- But I know him very well and I can speak well too. Some questions in English, you are welcome.
- Huh! .. This is not important for us. Why does a programmer speak English?
“But I also know French.” Si vous voulez parler francais ...
- Enough !!! To whom did your French surrender to a bathhouse in programming ???
- What should I do then?
- Shoot yourself! That is ... what is written there? .. we will call you back. If we have such a need.almost fictional conversation dialogue
I grow year. I will be 120.
Where do I work then? What to do?relevant in light of raising the retirement age
When I started my career in the distant 1996, I could not imagine how my professional career would develop for decades to come and what I would do, say, in 2017. I was sure that it would be connected with computers, and specifically - had no idea. I was not even sure who I would become: a programmer or a sysadmin.
Young specialists were around me all the time, and the older I am, the younger they are ... 2000th year ... young specialists .... 2010 year ... young professionals .... 2017 year - other young professionals. Surprisingly, you have been working for 20 years - and only young specialists around you ... and specialists. Yes, there have recently been many female programmers. Earlier, about 15 years ago, in percentage terms among my colleagues there were from 0 to 5%, and now everything is 20%.
')
And the more I worked, the more young specialists were around. Surprisingly, the least of them were at my very first job, when I myself was a green young specialist, whom no one wanted to take anywhere, just ... to the company to "middle-aged specialists." I grew, got stronger, transferred to other companies, but could not explain this strange phenomenon. Where do all the new and new young specialists come from and where do the old ones go? They seem to have to grow up and cease to be "young"? But they are constantly present and appear more and more!
The time has come, I was moving “from apprentice to master” and finally, in my own skin, I found out where the programmers go after 40! They ... shoot! Joke! In fact, all my former colleagues who were once “young professionals” either settled abroad or disappeared into the grail of Yandex’s domestic IT technologies (I don’t want to offend alternative grails - Kaspersky, Abbyy, Parallels, and hundreds of smaller in scale, but perhaps more beautiful in spirit grailchik). No one left! This is where the "sediment" of young specialists comes. Why did none of them become a “big boss,” a senior manager or other manager? Well, this is programmers, they love to write code and will not betray their profession. So at the end of a career, such “older” specialists are concentrated in the best companies (and where else can you work?).
I caught myself thinking that the 20th year is the only thing that I do, that I transfer data from one place to another ... Almost like an orange sorter from a famous anecdote. Well, just no algorithms, the usual shifting back and forth, back and forth. And so 15 years. Well, the maximum, we had a merge sort of large files about 10 years ago. And that's all. Sorted and waking.
In general, our profession is working. Hands we love to work. Well, the brain, of course, is also necessary, not without it. Not for nothing, Andrei Aksyonov (the author of the Sphinx search engine) compared programmers, more precisely, low-level optimizer programmers, to “plumbers who tinker in the guts, knights of the city and the pair” (HighLoad 2010 report on low-level C / C ++ optimization).
My grandfather, by the way, was a shoemaker. And not an ordinary shoemaker, but a model one. He worked in the theater and shoe actors for performances. He was not a manager. Why shoemakers managers boots? So, I think that the manager is a completely different profession. The shoemaker sews the boots, as does the programmer, produces a real product, and the manager controls the process of manufacturing the boots. But in the theater there is no mass production of boots, as well as in a small startup there is no mass production of software.
Not all programmers go to managers, just as not all managers are good programmers. But for a manager, oddly enough, this is not the most important thing. The main thing is to have on hand a competent professional with whom you can always consult.
When about ten years ago I had the opportunity to “advance” into managers, I doubted the expediency of this. Because it would mean dequalification. After all, for any master it is very important to daily hone your technique. The main thing for the violinist is daily practice. For an athlete that the main thing? Daily workout. If I became a full-fledged manager, I would lose the opportunity of the main and most pleasant thing - to program. I would have to deal with organizational issues, take part in meetings, criticize and praise the notorious "young professionals", and generally lead, that is, lead by the hand this green youth, yesterday's students. Not! No cost to me. Let me do better to where I am best self-fulfilling.
Regarding yourself with age in the profession, you do not become worse. But is there an opportunity to develop indefinitely within the framework of the profession of a programmer, without changing it? Of course, you are not hijacking all the trends and technologies in Computer Science.
If, in the 80s and 90s, an IT specialist could, in principle, possess an exhaustive amount of knowledge related to Computer Science, now the only way for an IT specialist, I think, is to specialize. The number of areas of Computer Science is growing exponentially, and the time to study them is limited, so specialize and choose your specialization more carefully!
Somehow I received a message in the linkedin from one recruiter or ... recruiters (there are a lot of them now, but they didn’t exist before. I myself, everything myself ... even through FIDO I had to look for a job). She wrote:
“Good day :) To restore justice in the universe, the Order of the Jedi is recruiting Jedi C ++ Great Warriors into its ranks. Actions take place on a well-protected and comfortable Yandex Planet in the center of the Moscow Galaxy!
... (vacancy description omitted) ...
So, if you are a Great Warrior or are ready to become one, wait for the Secret Manuscript (summary). In our galaxy, you are not afraid of the star of despondency and longing !! ”The letter, apparently, is not for the great Jedi, but for those who are going to become them, since the addressee doubts the addressee's ability to guess what the "Secret Manuscript" is.
I immediately answered in the spirit of a Jedi warrior, without giving any indication that I myself would not have guessed about the “manuscript” without a hint:
"Hello. Thank you very much for the humorous message. I smiled. Jedi, Great Warrior, Guru and Sensei, I'm definitely going to become. Even more thanks for recommending a specific Yandex job. I like the aphorism, which says that all programmers are divided into those who are already working in Yandex and those who dream about it. I am from the last category, but my many former colleagues are already “there”: they have tasted the beauty of working in the best technology company in the country. I also need 2-3 years of intensive training to grow to the minimum “pass-through” level of Yandex (I soberly assess my knowledge). It is necessary to recall the institute course of the server, solve logic and ingenuity puzzles, study in detail what is “under the hood” of modern libraries, study the latest fashion sketches in C ++ standards, algorithms on graphs and much, much more (list of references and lectures includes approximately 50 titles). And to go "on the ball" to an interview in a _takuyu_ company (maybe I’ll pass) my conscience will not allow. I can not take time from Yandex. The last time I was at an interview in Yandex was approximately in 2007. I got great pleasure (they taught me for free :) Since then, of course, I have raised my level, but I am still far from the necessary minimum of knowledge. According to the stories of "knowledgeable people", the interview lasts more than 14 hours. Candidates are given tasks from different areas, interviewers from various areas will be interviewed to form a balanced opinion about the candidate. It used to be easier: not so intense. I have friends who look at the interview as a kind of hobby that allows you to improve your level, communicate with colleagues in the shop, have a good time at last. I take this seriously, so I’m doing the preparation accordingly. I will not detain your attention for a long time. I say goodbye to this, but I propose to maintain contact. ”
That ended the conversation with the wonderful nymph of the Holy Grail. About Yandex! Grail dreams! Only your people do not just shift the data, but do something meaningful with them. For example, they are passed through a wonderful, self-written, superoptimized and conceptually written intricate algorithm.
Professional burnout? What are you talking about? It came to me already a dozen years ago, and burned so that I gave birth to an article on Habré and began to read books with terrible force. Books on programming in English. By the way, I prefer them to Russian translations, because ours can sometimes distort the meaning beyond recognition, so guess later what the author meant, filtered through their rubbish. Better to take the original.
I was shocked somehow by the "list of knowledge and skills of any self-respecting" programmer from
miram.livejournal.com/630972.html and
sharpc.livejournal.com/67583.html . Do not be lazy to cite a full quote:
All that a programmer should know, so that after 40 years he will not be thrown into the Dustbin, Where Homeless people are.
... At the age of about 45 years, the degradation of the brain begins to manifest itself, leading to significant problems in understanding and the ability to operate with a code with normal cyclomatic complexity. The loss of the ability to write code in combination with the inability due to the lack of training for analysis / synthesis is a guaranteed way to go there. Some people retain the ability to operate with normal cyclomatic complexity and in old age, but only at the expense of indicators exceeding the norm in their youth. Check whether you are in a risk zone, you can on TopCoder.
Adding on my own. TopCoder is a really good place to keep yourself in good shape. We solve puzzles from there and maintain a tone (or even participate in challenges, compete with others and earn money). So, what do you need to know so that you will not be thrown into the dustbin?
• C ++, standard, Comeau, 1TBS, Straustrap / D & E / Josattis / Vanderwood, Dewhurst / Meyers / Sutter, RAII / copy-and-swap / exception-safety, rule five, Alexandrescu / Abrahams-Gurtovoy, type erasure, CRTP, NVI , SFINAE, Koenig lookup, Duff's device, Boost, Sik-Lamsdane / Karlsson, TR on C ++ performance, Stepanova test, forwarding problem / move semantics, SPECS, GotW, Meyer's singleton, cppgm
• C ++ compilers, features of the standard implementation, implementation restrictions, intrinsics, differences between standard libraries (containers, rand), ABI, implementation of virtual functions, virtual inheritance, exceptions, RTTI, switch, pointers to functions and methods; optimization, copy elision (RVO, NRVO), sizeof on various platforms, compiler and environment defaults, __ declspec, compiler keys, empty-base optimization, static and dynamic linking, mangling, single compilation unit, (strict) aliasing / restrict, inline / _forceinline, volatile, quick calculation of math functions via bithacks, linkers & loaders by Levine
• Multithreading, dining philosophers, deadlock / livelock / race condition / starvation, atomicity, processor lock instructions, memory model / barrier / ordering, CAS or LL / SC, wait / lock / obstruction-free, ABA problem, writing lock-free containers , spin-lock, TLS / per-thread data, Amdal's law, OpenMP, MPI, map-reduce, critical section / mutex / semaphore / condition variable, WaitForSingleObject / WaitForMultipleObjects, green thread / coroutine, pthreads, future / deferred / promise, model of actors, parameter server, RDD (as seen in sparks), SGD downpour, wait-free, stackful vs stackless
• Assembly language, Zubkov / Hyde / Drapper / Kaspersky / Fogh / Abrash, x86, FPU / MMX / SSEn / AVX, AT & T and Intel syntax, masm32, macros, stack, heap / heap managers, calling conventions, hex-codes, machine data representation, IEEE754, little / big endian, SIMD, hardware exceptions, interrupts, virtual memory, reversing, stack and heap stall, return oriented programming, alphanumeric shellcode, L1 / L2 / RAM / page fault and their timing, ARM assembler language
• Hardware, Horowitz-Hill / Titze-Schenk / From physics to C from panchul, semiconductor electronics / spintronics / photonics, transistor, trigger, circuit design, microcode, technology for creating processors, logic synthesis, static analysis, FPGA, Verilog / VHDL / SystemC, SISAL, Arduino, memory devices (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC / CISC, Flynn's taxonomy ([SM] I [SM] D), Princeton and Harvard, processor architectures, x86 architectures VID / PID
• Processors, pipelining, hyper-threading, tomasulo algorithm, speculative execution, static / dynamic branch prediction, prefetching, multiple associative cache, cache line / cache miss, clock cycles, protection rings, memory in multiprocessor systems (SMP / NUMA), memory timing, intellect manuals, performance counters
• Discrete Mathematics, K2, Post's theorem, schemes, finite automata (DFA and NDKA), Kalashnikov automaton, cellular automata
• Computability, Turing machine, Markov normal algorithms, Post machine, Matiyasevich’s equation, Matyasevich’s lambda functions, Partially recursive Clini functions, Scheinfinkkel combinatorial programming, Brainfuck, Tiger bog count equivalence, stopping number set counts, countability, set number matching, countability, set number matching. , Tarski's algorithm, SAT / SMT-solvers, formal systems theory, interactive proofs, Levin-Cook theorem, 3SAT, PSPACE = NPSPACE, #P
• Programming languages, grammar, Chomsky hierarchy, Mayhill-Neroud theorem, pumping lemma and Ogden's lemma, Kleene algebra, NDKA → DKA, algorithmically unsolvable problems in formal languages, Dragonbook, Friedl, regexp and their complexity, PCRE, BNF, Boost. Spirit + Karma + Qi / Ragel, LL, LR / SLR / LALR / GLR, PEG / packrat, yacc / bison / flex / antlr, static code analysis, compilation / decompilation / obfuscation / deobfuscation, Clang / LLVM / XMLVM / Emscripten, GCCXML, OpenC ++, building virtual machines, JiT / AoT / GC, DSL / DSEL, on-stack replacement, type checking / type inference algorithms, CYK parser, Muchnick advanced compiler
• Algorithms and combinatorial optimization, Kormen / Skien / Sedgwick / Knut / Aho-Hopkroft-Ullman / Papadimitriou / Shriver-Goldberg / Preparata-Sheimos / e-maxx.ru, data structures, algorithms, complexity, Landau symbolism, Akra-Bazzy theorem , time-space tradeoff, complexity classes, NP-complete problems, CMP, graphs and trees, flows in networks, Kirchhoff matrix, search trees (especially RB-tree and B-tree), occlusion detection, heap, hash tables and perfect hash, Petri nets, Russian peasant algorithm, Karatsuba method and Vinograd-Strassen matrix multiplication, sorting, greedy algorithms and m atroids, dynamic programming, linear programming, diff-algorithms, randomized algorithms and fuzzy search algorithms, pseudo-random numbers, fuzzy logic, gusfield, string alignment, motif search, scanning line, cache oblivious, funnel, VEB-layout, root optimization, algorithms for dynamic graphs,
calculation models (RAM-machine / pointer machine / decision trees, etc.), algorithms in memory hierarchies / streaming algorithms, time forward processing, LSM-trees, buffered trees, toku trees, persistent structures, succint-structures, lossy-struktura (bloom / bloomier filter, hash-tables with false positives), locality sensitive hashing, space-time tradeoff in hash tables, scheduling strategies
• Numerical methods, Newton's dichotomy / method, inter- and extrapolation, splines, Gauss / Jacobi / Seidel method, QR and LU decomposition, SVD, OLS, Runge-Kutta methods, Adams method, Newton-Cotes formula, Ritz method, method Bubnova-Galerkina, finite difference method / elements, FFT / STFT, convergence and stability, l-bfgs and other quasi-Newton methods, adagrad, PARAFAC, cassowary, interior point methods, variation methods for Bayesian inference, nesterov, automatic differentiation, alternating least squares , computer scientist by Goldberg, Nocedal & Wright / Boyd & Vandenberghe
• Machine learning, Tibshirani / Bishop, AI modeling approaches, retraining / cross-training, Bayesian networks, neural networks, Kohonen networks, Restricted Boltzmann machine, gradient descent / hill climbing, stochastic optimization (Monte Carlo method, annealing method, genetic algorithms, formic algorithms), SVM, gradient boosting, cluster analysis, principal component method, LSH, reinforcement training, MDP, information retrieval / data mining / natural language processing, machine vision, Szeliski, OpenCV, image processing, OCR, Sobel filters, Haar cascade , Viola-Jones framework, SURF, introduction to the psychophysiology of vision, IPython / pandas / scikit-lear n, (ME) HMM, CRF, label bias problem, stacked NN, LeToR, factorization machines, autoencoders, RNN / CNN, instead of NLP, individual problems are better (language modeling, co-reference detection, text chunking, POS-tagging, probabilistic parsing , statistical resolution, NER, collocation detection, textualization, speech extraction, sentiment analysis), efficient softmax calculation, feature engineering / selection, quality estimation, Manning / Jurafsky / McCallum / Koehn, latent topics (LDA, chineese restaurant, pLSI), parallel coordinates, vowpal wabbit, NLTK, structured learning, EM-algorithm, contrastive divergence, optimal brain surgery, belief propagation, semi-supervised learning, inductive vs transductive learning, kernel trick, discriminative / generative pairs (as seen by Ng & Jordan), sequence to sequence learning, bagging, analysis of social graphs, p proposal systems / collaborative filtering, multimodal learning
• Information theory, compression, Huffman, RLE, BWT, LZ, error correction codes, lossy compression (images, audio, video), information entropy, Shannon formula, Kolmogorov complexity, maximum entropy problem, kullback-leibler divergence, elias / shannon -elias encoding
• Cryptography Schneier / Yaschenko, Kerckhoffs's Principle symmetric (DES, AES), asymmetric (RSA), the quality of the PRNG, Diffie-Hellman, elliptic curves, hashing (MD5, SHA, CRCn), DHT, cryptographic, kriptoataki (GM attack ), WEP / WPA / WPA2 and attacks on them, digital signature and certificates, PKI, HTTPS / SSL, zero disclosure proof, threshold scheme, murmurhash / cityhash, DKIM
• Mathematics, Knut-Graham-Patashnik / Zorich / Vinberg, Spivak / Dummit-Foote, matan, linal, complan, function, diffgem, number theory, difur / intur / uurch / variational calculus / optimal control, generating functions, series, combinatorics , theorever / matstat / slop / queuing theory, Markov chains, integral transforms (Fourier, Laplace, wavelet), NZQRCHOS, mathematica (Mathematica, Maple), category theory
• Physics, Kirchhoff rules, Joule-Lenz law, impedance, speed and frequency of light, Maxwell equations, Lagrangian and Hamiltonian,
quantum tunnelling / hot electron injection :)
• Chemistry, stoichiometry, chemistry of silicon :)
• , ////-/, , , SOLID/GRASP/KISS DRY SPOT/YAGNI, UML, OOP (Smalltalk), OOD/OOA, , uncle Bob
• , Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE
• , -, , , , UI, mocks/stubs/spies, fixture, (Osherove/Meszaros)
• , IDE, IntelliSense, (VS/Olly/WinDbg/kdb/gdb) (strace/ltrace), DWARF debug information format, (IDA/HexRays/Reflector), (SVN, GIT), merge/branch/trunk, , continuous integration, ant, code coverage, (lint, cppcheck), (valgrind, ), (Frama-C, RAISE (RSL), Coq), , , , (CMake), (NuGet)
• , Qt, moc , -, -/, PoCo, : GMP, i18n, lapack, fftw, pcre
• , Silberschatz//-/////Love/Linux Kernel Internals, , (LAL/LFH/slab), , , context switch, , (PE/ELF/Mach), , (strace/ptrace/dtrace/pydbg, Debug API) , bash, , netgraph, CR0, IPC, , : ACE/ACL , , RTOS (QNX), , IRQL, IRP, , BigTable, NDIS/miniport/FS drivers/filter driver, Mm-, Io-, Ldr-, DKOM , GDT/IDT/SDT, Windows/Linux/BSD, POSIX, TRIM
• - , /, COM/OLE/ActiveX/COM+/DCOM RPC, ATL, , , MIDL, XPCOM, CORBA, TAO, D-Bus
• , , OSI model/Internet model, Ethernet, TCP/IP, TCP window, , , Protocol buffers/Thrift/Avro/ASN.1, AMQP, ICMP, /BGP/OSPF, ARP, , syn flood, HTTP/FTP, P2P/DHT, DHCP, SMB/NBNS, IRC/XMPP, POP3/SMTP/ESMTP/IMAP, DNS, WiFi/WiMax/GSM/CDMA/EDGE/Bluetooth/GPS, ACE, Wireshark
• GPGPU, , , vs , OpenGL/GLSL/Open Inventor, DirectX/DirectShow/DirectAudio/HLSL, stencil/depth/alpha-test, DirectX 11, , (), , fillrate, OpenCL/CUDA/AMP, , , , deferred shading, , , HDR, tone mapping, virtual/augmented reality
• , XML/XSLT/XPath/XMLStarlet/DOM/SAX, RTF/ODF, JSON/BSON/bencode, YAML, JPEG/PNG/WebP, AVI/MPEG/RIFF/WAV/MP3/OGG/WebM, SVG, Unicode, /UTF-8/UTF-16/UCS-2/UTF-32, Unicode-, base64, markdown
• / , /, ANSI SQL, T-SQL, ODBC, MySQL/PostgreSQL/MS SQL/BDB/SQLite/Sphinx, , , /, Tutorial D, , , , ACID, CAP- , graph DB, document store, wide column store, key-value storage, , CRDT, net split , , /, ORM (C++ ODB), ERD, OLAP, , triplestore, RDF/Turtle, SPARQL, OWL, Semanticscience Integrated Ontology, reasoner, DBpedia, big table/hbase vs. dynamodb/cassandra/riak, 2/3PC, chubby/zoo keeper, leader election (paxos/raft), hdfs/gfs/glusterfs, deduplication problem, causality detection (vector clock/stamps), R/W quorum, load balancing, , event sourcing, CRDT, , , , , (API)
• , C#/F#, //, , yield, linq/plinq, , AST, WCF, WinForms/WPF/Silverlight, AOP, , .NET assembly, Scala, /, pattern matching, /
• , ,
• , Haskell/Ocaml/Scheme/Alice Oz, SICP/TaPL/YAHT/Purely Functional Data Structures/-, HOF (map/fold/filter), -, , , , dependent types, /, (Prolog Mercury), (Erlang Oz)
• - , /Zend PHP5 Certification Course + Study Guide, Apache/nginx, CGI/FastCGI, PHP/Zend Framework/ReactPHP/Zend Engine/Doctrine Propel/CodeIgniter Symphony Yii, Python/Django/Twisted, Ruby/RoR, ASP.NET MV*, JavaScript/jQuery/React/Google Closure/ExtJS/node.js, JavaScript, HTML5, CSS3/ , RSS, canvas/WebGL, Ajax/WebSockets, (XSS, SQL injection, CSRF), highload, C10k problem, SWIG, CDN, shadow DOM, , real time bidding/trading, anomaly detection, single page apps, -, web/social graph random walk, asm.js js, v8/spidermonkey internals, PaaS/IaaS, SPDY
• GUI , /, , , , , LaTeX, (as seen in d3), subpixel rendering
40 , ? , ? , , ? ? . . . , , , , . .
40 – . , , ? , ? , , , – ( + 15%). . Amen.