Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sorrge/bf00b385bb31027673bfa44bd319b57d to your computer and use it in GitHub Desktop.
Save sorrge/bf00b385bb31027673bfa44bd319b57d to your computer and use it in GitHub Desktop.
Ниже приведен набор областей науки и технологии, которые обязан знать каждый программист в 2018 году.
Это только теоретический минимум. Для беспроблемного трудоустройства помимо отличных знаний этих
областей нужно иметь: опыт программирования на трех-четырех языках; свои проекты (минимум два);
дипломную работу с новым исследованием; как минимум три рекомендательных письма.
Подчеркну, что список не упорядочен по "важности". Знать нужно ВСЁ.
C++: стандарт, Comeau, 1TBS, Страустрап/D&E/Джосаттис/Вандервуд, Дьюхэрст/Мейерс/Саттер,
RAII/copy-and-swap/exception-safety, правило пяти, Александреску/Абрахамс-Гуртовой, type erasure,
CRTP, NVI, SFINAE, Koenig lookup, Duff's device, Boost, Сик-Ламсдейн/Карлссон,
TR on C++ performance, тест Степанова, forwarding problem/move semantics, SPECS, умные указатели,
лямбды, constexpr
Компиляторы: особенности реализации стандарта, ограничения реализации, интринсики, отличия
стандартных библиотек (контейнеры, rand), ABI, реализация виртуальных функций, виртуального
наследования, исключений, RTTI, switch, указателей на функции и методы; оптимизации,
copy elision (RVO, NRVO), sizeof на различных платформах, дефайны компилятора и среды,
ключи компилятора, empty-base optimization, статическая и динамическая линковка, манглинг,
распределенная компиляция, precompiled header, single compilation unit, (strict) aliasing/restrict,
inline/_forceinline, volatile
Мультитредность: обедающие философы, deadlock/livelock/race condition/starvation, атомарность,
lock инструкции процессора, memory model/barrier/ordering, CAS или LL/SC,
wait/lock/obstruction-free, ABA problem, написание lock-free контейнеров, spin-lock,
TLS/per-thread data, закон Амдала, OpenMP, MPI, map-reduce,
critical section/mutex/semaphore/condition variable, WaitForSingleObject/WaitForMultipleObjects,
green thread/coroutine, pthreads, future/deferred/promise, модель акторов
Язык ассемблера: Зубков/Хайд/Дреппер/Касперски/Фог/Абраш, x86, FPU/MMX/SSEn/AVX,
AT&T и Intel-синтаксис, masm32, макросы, стек, куча/менеджеры кучи, соглашения вызова, hex-коды,
машинное представление данных, IEEE754, little/big endian, SIMD, аппаратные исключения, прерывания,
виртуальная память, реверсинг, срыв стека и кучи, return oriented programming,
alphanumeric shellcode, L1/L2/RAM/page fault и их тайминг, язык ассемблера ARM
Аппаратное обеспечение: Хоровиц-Хилл/Титце-Шенк/От физики к Си от panchul,
полупроводниковая электроника/спинтроника/фотоника, транзистор, триггер, схемотехника, микрокод,
технология создания процессоров, logic synthesis, static timing analysis, FPGA,
Verilog/VHDL/SystemC, SISAL, Arduino, устройства памяти (ROM → EEPROM, RAM, SSD, HDD, DVD),
RISC/CISC, Flynn's taxonomy ([SM]I[SM]D), принстонский и гарвардский подход,
архитектуры процессоров, архитектуры x86, VID/PID
Процессоры, конвейеризация, hyper-threading, out-of-order execution, спекулятивное исполнение,
static/dynamic branch prediction, префетчинг, множественный ассоциативный кэш,
кэш-линия/кэш-промах, такты, кольца защиты, память в мультипроцессорных системах (SMP/NUMA),
тайминг памяти
Дискретная математика: K2, теорема Поста, схемы, конечные автоматы (ДКА и НДКА), клеточные автоматы
Вычислимость: машина Тьюринга, нормальные алгоритмы Маркова, машина Поста,
диофантовы уравнения Матиясевича, лямбда-функции Черча, частично рекурсивные функции Клини,
комбинаторное программирование Шейнфинкеля, Brainfuck, эквивалентность тьюринговых трясин,
проблема останова и самоприменимости, счетность множества вычислимых функций, RAM-машина,
алгоритм Тарского, SAT/SMT-солверы, теория формальных систем
Языки программирования: грамматики, иерархия Хомского, теорема Майхилла-Нероуда,
лемма о накачке и лемма Огдена, алгебра Клини, НДКА → ДКА, алгоритмически неразрешимые задачи в
формальных языках, Драгонбук, Фридл, регекспы и их сложность, PCRE, БНФ,
Boost.Spirit + Karma + Qi/Ragel, LL, LR/SLR/LALR/GLR, PEG/packrat, yacc/bison/flex/antlr,
статический анализ кода, компиляция/декомпиляция/обфускация/деобфускация,
Clang/LLVM/XMLVM/Emscripten, GCCXML, OpenC++, построение виртуальных машин, JiT/AoT/GC, DSL/DSEL
Алгоритмы и комбинаторная оптимизация: Кормен/Скиена/Седжвик/Кнут/Ахо-Хопкрофт-Ульман/Пападимитриу/
Шрайвер-Голдберг/Препарата-Шеймос/e-maxx.ru, структуры данных, сложность, символика Ландау,
теорема Акра-Баззи, time-space tradeoff, классы сложности, NP-полные задачи, КМП, графы и деревья,
потоки в сетях, матрица Кирхгофа, деревья поиска (особенно RB-дерево и B-дерево),
occlusion detection, куча, хэш-таблицы и идеальный хэш, сети Петри, алгоритм русского крестьянина,
метод Карацубы и матричное умножение Винограда-Штрассена, сортировки, жадные алгоритмы и матроиды,
динамическое программирование, линейное программирование, diff-алгоритмы,
рандомизированные алгоритмы и алгоритмы нечеткого поиска, псевдослучайные числа, нечеткая логика
Численные методы: дихотомия/метод Ньютона, интер- и экстраполяция, сплайны,
метод Гаусса/Якоби/Зейделя, QR и LU-декомпозиция, SVD, МНК, методы Рунге-Кутты, метод Адамса,
формулы Ньютона-Котеса, метод Ритца, метод Бубнова-Галеркина, метод конечных разностей/элементов,
FFT/STFT, сходимость и устойчивость
Классическое машинное обучение: Рассел-Норвиг/Bishop, подходы к моделированию AI,
переобучение/кроссвалидация, байесовские сети, нейросети, сети Кохонена,
Restricted Boltzmann machine, градиентный спуск/hill climbing, стохастическая оптимизация
(метод Монте-Карло, метод отжига, генетические алгоритмы, муравьиные алгоритмы), SVM,
gradient boosting, кластерный анализ, метод главных компонент, LSH, обучение с подкреплением, MDP,
information retrieval/data mining/natural language processing, машинное зрение, Szeliski, OpenCV,
image processing, OCR, фильтры Собеля, каскад Хаара, Viola-Jones framework, SURF,
введение в психофизиологию зрения, IPython/pandas/scikit-learn
Глубокое обучение: Goodfellow-Bengio-Courville, многослойные сети, исчезающий градиент,
претренировка, stacked autoencoders, ReLU и варианты, сверточные сети, highway networks,
residual networks, классические сверточные архитектуры (Neocognitron, LeNet, AlexNet, ResNet),
форматы тренировки (batch, minibatch, stochastic), алгоритмы оптимизации ((S)GD, momentum,
Nesterov accelerated gradient, natural gradient, Adagrad, Adadelta, Adam, Rmsprop, AMSGrad,
evolutionary strategy), регуляризация, dropout, batchnorm, ранний останов, curriculum learning,
настройка гиперпараметров, автоматический поиск архитектур, рекуррентные сети, BPTT, LSTM, GRU,
seq2seq, Hopfield network, echo state network, neural Turing machine,
differentiable neural computer, deep reinforcement learning (DQN, DDPG, TRPO, PPO), AlphaZero,
генеративные модели (GAN, DCGAN, InfoGAN, WGAN, CycleGAN, DiscoGAN, Progressive GAN, VAE),
NLP (word/sentence/thought embeddings, attention, neural machine translation),
метаобучение (few-shot/zero-shot learning, обучение оптимизатора, metric learning,
RNN-based metalearning, MANN, MAML, Reptile), фреймворки (TensorFlow, PyTorch, Mxnet, Caffe,
Chainer, CNTK), параллельные вычисления (multicore, GPU, multi-GPU, distributed)
Теория информации: сжатие, Хаффман, RLE, BWT, LZ, коды коррекции ошибок,
сжатие с потерями (изображения, аудио, видео), информационная энтропия, формула Шеннона,
сложность Колмогорова
Криптография: Шнайер/Ященко, Принцип Керкгоффса, симметричная (DES, AES), асимметричная (RSA),
качество ГПСЧ, алгоритм Диффи-Хеллмана, эллиптические кривые, хэширование (MD5, SHA, CRCn), DHT,
криптостойкость, криптоатаки (атака гроссмейстера), WEP/WPA/WPA2 и атаки на них,
цифровая подпись и сертификаты, PKI, HTTPS/SSL, доказательство с нулевым разглашением,
пороговая схема
Блокчейн: распределенный консенсус, криптовалюты, proof-of-work, proof-of-stake, merkle tree,
отслеживание транзакций/анонимизация, ring signature, распределенные вычисления на блокчейне,
умные контракты
Математика: Кнут-Грэхем-Паташник/Зорич/Винберг, Spivak/Dummit-Foote, матан, линал, комплан, функан,
диффгем, теория чисел, дифуры/интуры/урчпы/вариационное исчисление/оптимальное управление,
производящие функции, ряды, комбинаторика, теорвер/матстат/слупы/теория массового обслуживания,
цепи Маркова, интегральные преобразования (Фурье, Лаплас, вейвлет), NZQRCHOS,
матпакеты (Mathematica, Maple)
Физика: правила Кирхгофа, закон Джоуля-Ленца, комплексное сопротивление, скорость и частота света,
уравнения Максвелла, лагранжиан и гамильтониан, квантовая механика
Химия: стехиометрия, химия кремния, вычислительная химия, симуляция молекулярной динамики,
моделирование свертки белков, предсказание структуры белков, моделирование взаимодействия белков,
рентгеноструктурный анализ
Архитектура и стиль кода: Макконнелл/Фаулер/Лебланк/Гамма/Александреску-Саттер/Буч,
защитное программирование, паттерны, SOLID/GRASP/KISS DRY SPOT/YAGNI, UML, OOP (Smalltalk),
OOD/OOA, метрики кода
Методологии разработки: Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE
Тестирование: юнит-тесты, функциональное, нагрузочное, интеграционное тестирование, тестирование UI
Инструментальные средства разработки: IDE, IntelliSense, отладчики (VS/Olly/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, Agda, Isabelle, Idris), профайлинг, багтрекеры, документирование кода,
системы сборки (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
Сеть: Стивенс, 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/HLSL, stencil/depth/alpha-test, шейдеры,
модели освещения (Фонг), пропускная способность, fillrate, OpenCL/CUDA/AMP, ландшафты, лоды, тени,
deferred shading, текстурирование и фильтрация, антиалиасинг, HDR, tone mapping,
global illumination, 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-строк
Базы данных: Грубер/Дейт, ANSI SQL, T-SQL, ODBC, MySQL/PostgreSQL/MS SQL/BDB/SQLite/Sphinx,
хранимые процедуры, триггеры, алгебра Кодда/А, Tutorial D, нормальные формы, оптимизация и
выполнение запросов, структуры данных индексов, транзакции и ACID, CAP-теорема Брюера, NoSQL,
key-value storage, шардинг, ORM (C++ ODB), ERD, OLAP, семантическая сеть, triplestore,
RDF/Turtle, SPARQL, OWL, Semanticscience Integrated Ontology, reasoner, DBpedia
Прикладное программирование: C#/F#, Шилдт/Троелсен/Рихтер, генерики, yield, linq/plinq, рефлексия,
AST, AOP, фреймворки логгирования, 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 MVC, JavaScript/jQuery/React/Google
Closure/ExtJS/node.js, ООП в JavaScript, HTML5, CSS3/табличная и блочная верстка, RSS, canvas/WebGL,
Ajax/WebSockets, вопросы безопасности (XSS, SQL injection, CSRF), highload, C10k problem, SWIG
Проектирование GUI и представление информации: Раскин/Тафти, юзабилити, основы дизайна и типографики,
закон Фиттса, основы верстки, LaTeX
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment