Теоретический минимум для программиста

okis

Это копипаста из ЖЖ
Многие начинающие программисты, особенно обучающиеся в провинциальных вузах, часто не знают, в какую сторону им развиваться, и что они должны знать для того, чтобы эффективно работать по специальности. Удивительно, но каждый день используя продукты и технологии, созданные другими программистами на основании развитых областей знания, они даже не догадываются о том, как они устроены.
Построенные на теории массового обслуживания и протоколе GSM сети мобильной связи; PHP-скрипты, исполняющиеся на удаленных серверах и передающие свою выдачу через Ethernet по TCP/IP на компьютеры с NDIS-драйверами; процессоры, переупорядочивающие и спекулятивно исполняющие наборы инструкций для того, чтобы скомпенсировать вызванную ограничениями полупроводниковой электроники и скоростью света остановку роста тактовой частоты; рассчитанные на ЭВМ корпуса самолетов и автомобилей, лекарства и структуры ДНК; компьютерные игры, ради крохотного блика в которых пишутся мегабайты заполненных интегралами Френеля статей; электронные фильмы и книги; алгоритмы NLP и TreeNet, вызывающие нам из огромных баз данных поисковую выдачу — вот то, что окружает нас каждый день благодаря программистам, благодаря оригинальным подходам и фундаментальным знаниям, благодаря продуманной и отточенной десятилетиями методологии разработки и управления сложностью ПО.
Я и мои единомышленники взяли на себя труд составить теоретический минимум для программиста на основании наиболее ярких отраслей IT, вошедших даже в программы нормальных университетов, на основании собеседований и постоянно пригождающихся на практике знаний. Часть из пунктов этого минимума можно изучить за 5 минут по википедии, часть же потребует серьезного труда на протяжении нескольких месяцев, но это именно то, что обязательно следует знать и чем следует свободно владеть. В комментариях приветствуются исправления и дополнения.
C++, стандарт, Comeau, 1TBS, Страустрап/D&E/Джосаттис/Вандервуд, Дьюхэрст/Мейерс/Саттер, RAII, правило трех, exception-safety, Александреску/Абрахамс-Гуртовой, type erasure, CRTP, NVI, SFINAE, Koenig lookup, Duff's device, Boost, Сик-Ламсдейн/Карлссон, TR1, TR on C++ performance, тест Степанова, forwarding problem, SPECS, C++0x
Компиляторы, особенности реализации стандарта, ограничения реализации, интринсики, отличия стандартных библиотек (контейнеры, rand ABI, реализация виртуальных функций, виртуального наследования, исключений, RTTI, switch, указателей на функции и методы; оптимизации, copy elision (RVO, NRVO sizeof на различных платформах, дефайны компилятора и среды, __declspec, ключи компилятора, empty-base optimization, статическая и динамическая линковка, манглинг, распределенная компиляция, precompiled header, single compilation unit, (strict) aliasing/restrict, inline/_forceinline, volatile
Мультитредность, обедающие философы, deadlock/race condition/starvation, атомарность, lock инструкции процессора, 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
Язык ассемблера x86, Зубков/Хайд/Дреппер/Касперски/Фог/Абраш, AT&T и Intel-синтаксис, masm32, макросы, стек, куча/менеджеры кучи, соглашения вызова, hex-коды, машинное представление данных, IEEE754, little/big endian, SIMD, аппаратные исключения, прерывания, виртуальная память, реверсинг, срыв стека и кучи, return oriented programming, alphanumeric shellcode, L1/L2/RAM/page fault и их тайминг
Аппаратное обеспечение, полупроводниковая электроника/спинтроника/фотоника, NOR/NAND, транзистор, схемотехника, микрокод, технология создания процессоров, VID/PID, Verilog/VHDL/SystemC, Arduino, устройство HDD/SSD/DVD, RISC/CISC, Flynn's taxonomy ([SM]I[SM]D принстонский и гарвардский подход, архитектуры процессоров, архитектуры x86
Процессоры, конвейеризация, hyper-threading, out-of-order execution, спекулятивное исполнение, branch predict, префетчинг, u-pipe/v-pipe, множественный ассоциативный кэш, кэш-линия/кэш-промах, такты, тайминг памяти, кольца защиты
Дискретная математика, K2, теорема Поста, схемы, конечные автоматы, клеточные автоматы, автомат Калашникова, ДКА и НДКА
Вычислимость, машина Тьюринга, нормальные алгоритмы Маркова, машина Поста, диофантовы уравнения Матиясевича, лямбда-функции Черча, частично рекурсивные функции Клини, комбинаторное программирование Шейнфинкеля, Brainfuck, эквивалентность тьюринговых трясин, проблема останова и самоприменимости, счетность множества вычислимых функций, RAM-машина, алгоритм Тарского, SAT/SMT-солверы, теория формальных систем
Языки программирования, грамматики, иерархия Хомского, теорема Майхилла-Нероуда, лемма о накачке и лемма Огдена, алгебра Клини, НДКА -> ДКА, алгоритмически неразрешимые задачи в формальных языках, Драгонбук, Фридл, регекспы и их сложность, PCRE/POSIX RE, БНФ, Boost.Spirit + Karma + Qi/Ragel, LL, LR/SLR/LALR/GLR, PEG/packrat, yacc/bison/flex/antlr, статический анализ кода, компиляция/декомпиляция/обфускация/деобфускация, Clang/LLVM/XMLVM, GCCXML, OpenC++, построение виртуальных машин, JiT/AoT/GC, DSL/DSEL
Алгоритмы и комбинаторная оптимизация, Кормен/Скиена/Седжвик/Кнут/Ахо-Хопкрофт-Ульман/Пападимитриу/Шрайвер-Голдберг/Препарата-Шеймос, структуры данных, алгоритмы, сложность и символы Ландау, классы сложности, NP-полные задачи, графы и деревья, потоки в сетях, матрица Кирхгофа, деревья поиска (особенно RB-дерево и B-дерево куча, хэш-таблицы и идеальный хэш, сети Петри, алгоритм русского крестьянина, метод Карацубы и матричное умножение Винограда-Штрассена, сортировки, жадные алгоритмы и матроиды, динамическое программирование, линейное программирование, diff-алгоритмы, рандомизированные алгоритмы и алгоритмы нечеткого поиска, псевдослучайные числа, нечеткая логика
Машинное обучение, машинное зрение, OpenCV, image processing, OCR, фильтры Собеля, каскад Хоара, введение в психофизиологию зрения, TreeNet, нейросети, сети Кохонена, генетические алгоритмы, муравьиные алгоритмы, information retrieval/data mining/natural language processing, алгоритмы оптимизации, SVM, gradient boosting, метод отжига, hill climbing, подходы к моделированию AI
Численные методы, метод Гаусса, интер- и экстраполяция, сплайны, МНК, метод Эйлера и Рунге-Кутты, дихотомия/метод Ньютона, метод Симпсона, метод Монте-Карло, метод Галеркина, QR и LU-декомпозиция, FFT/STFT, сходимость и устойчивость
Теория информации, сжатие, Хаффман, RLE, LZ, коды коррекции ошибок, информационная энтропия, формула Шеннона, сложность Колмогорова
Криптография, Ященко, симметричная, асимметричная, Диффи-Хеллман, RSA, DES, AES, эллиптические кривые, хэширование (MD5, SHA, CRCn DHT, криптостойкость, криптоатаки, WEP/WPA/WPA2 и атаки на них, цифровая подпись и сертификаты, HTTPS/SSL, доказательство с нулевым разглашением
Математика, Кнут-Грэхем-Паташник/Зорич/Винберг, матан, линал, комплан, функан, диффгем, теория чисел,

Alexander08

почему не упомянута книга "asp.net для чайников за 2 недели"?

enochka1145

// Квантовые вычисления, алгоритм Шора, квантовая криптография
И Гровера, Гровера не забываем - как же в наше время искать в неупорядоченном списке из N элементов медленнее, чем за время "квадратный корень из N"?
---
Надо прежде всего интересоваться своей областью, а уж дальше - методом куста. В списке много полезного, но подавляющее большинство, ИМХО, можно освоить на ходу, вместо того, чтобы забивать бошку всякой модной сегодня хренью.

Full

теоретический минимум для программиста

самый ебический теоретический минимум который я видел

Serab

Ну а хули вы хотели? :cool:

zya369

1) представил резюме с таким списком
2) я знаю кунфу, карате, джиуджитсу и много других страшных слов
:grin:

Yulka-MOl

А есть человек на Земле, который всё это знает?

okis

Видимо, сам sharpc имеет понятие о большинстве вещей из этого списка )

alexkravchuk

самый ебический теоретический минимум который я видел
Какие все сурьёзные... Это же всего лишь мануал для ЭйчЭров :)
Радует то, что Явы и Перла в почётном списке нет. Никогда их не любил.

yroslavasako

Во-первых, автомат калашинкова - лишний.
Во-вторых, не хватает модели акторов хотя бы на примере эрланговской виртуальной машины.
В-третьих, непозволительно забыть про сжатие с потерями. Психоакустическая модель и сжатие звука, сжатие изображений: jpeg, jpeg2000, фрактальное сжатие. Сжатие видео, компенсация движения, I/B фреймы, интерлейс и прочее.
В-четвёртых, где теория автоматики?
В-пятых, забыли про стрелки и звезду клейсли в функциональном программировании, для сетевых p2p технологий неплохо бы знать теорию перколяции.

zya369

в-шестых, не написано, что делать одинокому 40-летнему программисту с минимумом знаний и без опыта работы :o

state7401281

я обязательно прочитаю этот твой пост до самого конца

NataNata

хорошо, что собрали воедино, надо бы взботнуть...
Однако, название у этого добра совершенно некорректное. Это не теоретический минимум, это теоретический максимум, я бы сказал. Потому что, скажем, квантовые алгоритмы прочувствовать без квантовой механики просто нельзя. А ее не заботать просто так.

Dasar

Это не теоретический минимум, это теоретический максимум, я бы сказал
скорее сумма всех теор. минимумов из каждой программистской области
а каждый разработчик "тусуется" в 1-5(изредка больше) указанных областей

karkar

COM можно оставить в истории.
Таки нельзя. Офис и DirectX его обессмертили.

Barbie29

ну, к этому надо стремится, а ваще конешно феерический бред

Alena727

Математика, Кнут-Грэхем-Паташник/Зорич/Винберг, матан, линал, комплан, функан, диффгем, теория чисел, дифуры/интуры/урчпы/вариационное исчисление/оптимальное управление, производящие функции, ряды, комбинаторика, теорвер/матстат/слупы/теория массового обслуживания, цепи Маркова, интегральные преобразования (Фурье, Лаплас, вейвлет NZQRCHOS, матпакеты (Mathematica, Maple)
Вот это порадовало.
Некоторые одним только матаном всю жизнь занимаются, а для других это теоретический минимум

al70

Математика
Мне от одного этого уже поплохело.
— А математику вы умеете?
— Конечно.

Papazyan

Некоторые одним только матаном всю жизнь занимаются, а для других это теоретический минимум
Самое главное как это поможет клепать вебформы.

yroslavasako

Самое главное как это поможет клепать вебформы.
ты сможешь придумать клёвую матановую капчу, не?
Оставить комментарий
Имя или ник:
Комментарий: