What an ideal C++ programmer should know, in a vacuum

Many companies often have unreasonable requirements for programmers.

Here's what an ideal C++ programmer job posting might look like:

1. C++, the standard, Stroustrup/D&E/Josuttis, Dewhurst/Meyers/Sutter, RAII, the rule of three, exception safety, Alexandrescu/Abrahams-Gurtovoy, type erasure, CRTP, NVI, SFINAE, Koenig lookup, Duff's device, Boost, Czarnecki-Eisenecker, TR1, TR on C++ performance, the Stepanov test, the forwarding problem, SPECS, C++0x

2. Compilers, standard implementation quirks, implementation limits, intrinsics, differences between standard libraries (containers, rand), ABI, implementation of virtual functions, virtual inheritance, exceptions, RTTI, switch statements, function and member pointers; optimizations, copy elision (RVO, NRVO), sizeof on different platforms, compiler and environment defines, __declspec, compiler flags, empty-base optimization, static and dynamic linking, name mangling, distributed compilation, precompiled headers, single compilation unit, (strict) aliasing/restrict, inline/_forceinline, volatile

3. Multithreading, the dining philosophers, deadlock/race condition/starvation, atomicity, processor lock instructions, CAS or LL/SC, wait/lock/obstruction-free, the ABA problem, writing lock-free containers, spin-locks, TLS/per-thread data, OpenMP, MPI, map-reduce, critical section/mutex/semaphore/condition variable, WaitForSingleObject/WaitForMultipleObjects, green threads/coroutines, pthreads

4. x86 assembly language, Zubkov/Hyde/Drepper/Kaspersky/Fog/Abrash, AT&T and Intel syntax, masm32, macros, the stack, the heap/heap managers, calling conventions, hex codes, machine data representation, IEEE754, little/big endian, SIMD, hardware exceptions, interrupts, virtual memory, reverse engineering, stack and heap overflow, return-oriented programming, alphanumeric shellcode, L1/L2/RAM/page fault and their timing

5. Hardware, Horowitz-Hill, semiconductor electronics/spintronics/photonics, transistors, circuit design, microcode, processor manufacturing technology, VID/PID, Verilog/VHDL/SystemC, Arduino, memory devices (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC/CISC, Flynn's taxonomy ([SM]I[SM]D), the Princeton and Harvard architectures, processor architectures, x86 architectures

6. Processors, pipelining, hyper-threading, out-of-order execution, speculative execution, branch prediction, prefetching, set-associative cache, cache line/cache miss, clock cycles, protection rings, memory in multiprocessor systems, memory timing

7. Discrete mathematics, K2, Post's theorem, circuits, finite automata, cellular automata, DFA and NFA

8. Computability, the Turing machine, Markov's normal algorithms, Post's machine, Matiyasevich's Diophantine equations, Church's lambda calculus, Kleene's partial recursive functions, Schönfinkel's combinatory logic, Brainfuck, equivalence of Turing tarpits, the halting and self-applicability problem, countability of the set of computable functions, the RAM machine, Tarski's algorithm, SAT/SMT solvers, the theory of formal systems

9. Programming languages, grammars, the Chomsky hierarchy, the Myhill-Nerode theorem, the pumping lemma and Ogden's lemma, Kleene algebra, NFA → DFA, algorithmically undecidable problems in formal languages, the Dragon Book, Friedl, regular expressions and their complexity, PCRE/POSIX RE, 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, GCCXML, OpenC++, building virtual machines, JIT/AOT/GC, DSL/DSEL

10. Algorithms and combinatorial optimization, Cormen/Skiena/Sedgewick/Knuth/Aho-Hopcroft-Ullman/Papadimitriou/Schrijver-Golberg/Preparata-Shamos, data structures, algorithms, complexity and Landau notation, complexity classes, NP-complete problems, graphs and trees, network flows, the Kirchhoff matrix, search trees (especially red-black trees and B-trees), occlusion detection, heaps, hash tables and perfect hashing, Petri nets, the peasant multiplication algorithm, Karatsuba's method and Strassen-Winograd matrix multiplication, sorting algorithms, greedy algorithms and matroids, dynamic programming, linear programming, diff algorithms, randomized algorithms and fuzzy search algorithms, pseudorandom numbers, fuzzy logic

11. Machine learning, computer vision, OpenCV, image processing, OCR, Sobel filters, the Viola-Jones (Haar) cascade, an introduction to the psychophysiology of vision, TreeNet, neural networks, Kohonen networks, genetic algorithms, ant colony algorithms, information retrieval/data mining/natural language processing, optimization algorithms, SVM, gradient boosting, simulated annealing, hill climbing, approaches to AI modeling

12. Numerical methods, the Gauss method, interpolation and extrapolation, splines, least squares, Euler's and Runge-Kutta methods, bisection/Newton's method, Simpson's method, the Monte Carlo method, the Galerkin method, QR and LU decomposition, FFT/STFT, convergence and stability

13. Information theory, compression, Huffman coding, RLE, LZ, error-correcting codes, information entropy, Shannon's formula, Kolmogorov complexity

14. Cryptography, Yashchenko, symmetric, asymmetric, Diffie-Hellman, RSA, DES, AES, elliptic curves, hashing (MD5, SHA, CRCn), DHT, cryptographic strength, cryptanalytic attacks, WEP/WPA/WPA2 and attacks on them, digital signatures and certificates, HTTPS/SSL, zero-knowledge proofs

15. Mathematics, Knuth-Graham-Patashnik/Zorich/Vinberg, calculus, linear algebra, complex analysis, functional analysis, differential geometry, number theory, differential equations/integral equations/PDEs/calculus of variations/optimal control, generating functions, series, combinatorics, probability theory/mathematical statistics/random processes/queueing theory, Markov chains, integral transforms (Fourier, Laplace, wavelet), NZQRCHOS (number sets), math software packages (Mathematica, Maple)

16. Architecture and coding style, McConnell/Fowler/LeBlanc/Gamma/Alexandrescu-Sutter, defensive programming, design patterns, GRASP, UML, OOP/OOD/OOA, the Liskov substitution principle, code metrics

17. Testing: unit testing, functional, load, integration testing, UI testing

18. Development tools: IDEs, IntelliSense, debuggers (VS/OllyDbg/WinDbg/kdb/gdb) and tracers (strace/ltrace), Valgrind, version control systems (SVN, Git), merge/branch/trunk, file and branch naming conventions, continuous integration, Ant, code coverage, static analysis, profiling, lint, bug trackers, code documentation, build systems like CMake

19. Frameworks: Qt, moc and metadata, the signal-slot concept, Summerfield-Blanchette/Schlee, POCO, industrial libraries: GMP, i18n, LAPACK, FFTW, PCRE

20. Operating systems, Richter/Solomon-Russinovich/Robachevsky/Vahalia/Stevens/Linux Kernel Internals, memory managers, heap managers and their internals (LAL/LFH/slab), process managers, context switching, real and protected mode, executable file formats (PE/ELF/Mach), kernel objects, debugging mechanisms (strace/ptrace/dtrace/pydbg, the Debug API) and minidumps, bash, the network stack and high-performance servers, netgraph, CR0, IPC, the windowing subsystem, security systems: ACE/ACL and access rights, virtualization technologies, RTOS (QNX), driver programming, IRQL, IRP, file systems, BigTable, NDIS/miniport/FS drivers/filter drivers, Mm-, Io-, Ldr- functions, DKOM and rootkits, GDT/IDT/SDT, the Windows/Linux/BSD kernels, POSIX

21. COM, OLE/ActiveX/COM+, ATL, Rogerson/Tavares, apartments, monikers, additional VC++ keywords, DCOM RPC, CORBA, TAO

22. Networking: OSI, Ethernet, TCP/IP, the TCP window, Nagle's algorithm, sockets, Protocol Buffers/Thrift/Avro/ASN.1, AMQP, ICMP, routing, ARP, the Mitnick attack, SYN flood, HTTP/FTP, P2P, DHCP, SMB/NBNS, IRC/XMPP, POP3/SMTP/ESMTP/IMAP, DNS, WiFi/WiMAX/GSM/CDMA/EDGE/Bluetooth, ACE, Wireshark

23. Graphics: Bresenham's algorithm, color models, ray tracing vs. polygonal graphics, OpenGL/GLSL/Open Inventor, DirectX/DirectShow/DirectAudio/HLSL, stencil/depth/alpha-test, the DirectX 11 graphics pipeline, shaders, lighting models (Phong), throughput, fill rate, OpenCL/CUDA, terrain, LODs, shadows, texturing and filtering, anti-aliasing, HDR, tone mapping

24. Databases, Gruber, ANSI SQL, T-SQL, ODBC, MySQL/PostgreSQL/MS SQL/BDB/SQLite/Sphinx, stored procedures, triggers, Codd's relational algebra, Tutorial D, normal forms, query optimization and execution, index data structures, transactions and ACID, Brewer's CAP theorem, NoSQL, key-value storage, sharding, ORM (C++ ODB), ERD, OLAP

25. Applied programming: C#/F#/Nemerle, Schildt/Troelsen/Richter, generics, yield, LINQ/PLINQ, reflection, AST, WCF, WinForms/WPF/Silverlight, AOP, logging frameworks, .NET assemblies

26. Functional programming: Haskell/OCaml/Scheme/Alice or Oz, SICP/TaPL/YAHT/Purely Functional Data Structures/Harrison-Field, HOFs (map/fold/filter), monads, type classes, ADTs, the Hindley-Milner type system, laziness/eagerness, logic programming (Prolog or Mercury), concurrent programming (Erlang or Oz)

27. GUI design: Raskin, usability, the basics of design and typography, Fitts's law, layout fundamentals, LaTeX


Comments
Write your comment
Nickname:
Nickname*:
There are no comments yet.