vissi
|
|
|
|
|
Рег.: 30.09.2007
|
Сообщений: 9275
|
|
Рейтинг: 8222
|
|
Теоретический минимум для программиста
25.03.2011 14:24
|
|
|
Это копипаста из ЖЖ
Многие начинающие программисты, особенно обучающиеся в провинциальных вузах, часто не знают, в какую сторону им развиваться, и что они должны знать для того, чтобы эффективно работать по специальности. Удивительно, но каждый день используя продукты и технологии, созданные другими программистами на основании развитых областей знания, они даже не догадываются о том, как они устроены.
Построенные на теории массового обслуживания и протоколе 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, доказательство с нулевым разглашением
Математика, Кнут-Грэхем-Паташник/Зорич/Винберг, матан, линал, комплан, функан, диффгем, теория чисел, дифуры/интуры/урчпы/вариационное исчисление/оптимальное управление, производящие функции, ряды, комбинаторика, теорвер/матстат/слупы/теория массового обслуживания, цепи Маркова, интегральные преобразования (Фурье, Лаплас, вейвлет), NZQRCHOS, матпакеты (Mathematica, Maple)
Физика, правила Кирхгофа, комплексное сопротивление, скорость и частота света, лагранжиан
Химия, стехиометрия, химия кремния 
Архитектура и стиль кода, Макконнелл/Фаулер/Лебланк/Гамма/Александреску-Саттер, защитное программирование, паттерны, GRASP, UML, OOP/OOD/OOA, правило Лисков, метрики кода
Методологии разработки, Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE
Тестирование, юнит-тесты, функциональное, нагрузочное, интеграционное тестирование, тестирование UI
Инструментальные средства разработки, IDE, IntelliSense, отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace), valgrind, системы контроля версий (SVN, GIT), merge/branch/trunk, системы именования файлов и бранчей, continuous integration, ant, code coverage, статический анализ, профайлинг, lint, багтрекеры, документирование кода, сборщики кода типа cmake
Фреймворки, Qt, moc и метаинформация, концепция слот-сигнал, Саммерфилд-Бланшет/Шлее, PoCo, промышленные библиотеки: GMP, i18n, lapack, fftw, pcre
Операционные системы, Рихтер/Соломон-Руссинович/Робачевский/Вахалия/Стивенс/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, файловые системы, NDIS/miniport/FS drivers/filter driver, Mm-, Io-, Ldr-функции, DKOM и руткиты, GDT/IDT/SDT, ядра Windows/Linux/BSD, POSIX
COM, OLE/ActiveX/COM+, ATL, Роджерсон/Таварес, апартменты, моникеры, дополнительные ключевые слова VC++
Сеть, OSI, Ethernet, TCP/IP, TCP window, алгоритм Нейгла, сокеты, Protocol buffers/Thrift/ASN.1, ICMP, роутинг, ARP, атака Митника, syn flood, HTTP/FTP, P2P, DHCP, SMB/NBNS, IRC/XMPP, POP3/SMTP/ESMTP/IMAP, DNS, WiFi/WiMax/GSM/CDMA/EDGE/Bluetooth
Графика, алгоритм Брезенхема, цветовые модели, трассировка лучей vs полигональная графика, OpenGL/GLSL, DirectX/DirectShow/DirectAudio/HLSL, stencil/depth/alpha-test, графический конвейер в DirectX 11, шейдеры, модели освещения (Фонг), пропускная способность, fillrate, OpenCL/CUDA, ландшафты, лоды, тени, текстурирование и фильтрация, антиалиасинг, HDR, tone mapping
Форматы, XML/XSLT/XPath/DOM/SAX, RTF/ODF, JSON/BSON, torrent, YAML, JPEG/PNG/WebP, AVI/MPEG/RIFF/WAV/MP3/OGG/WebM, SVG, Unicode, кодировки однобайтные/UTF-8/UTF-16/UCS-2/UTF-32
Базы данных, Грубер, ANSI SQL, T-SQL, MySQL/PostgreSQL/MS SQL/BDB/Sphinx, хранимые процедуры, триггеры, алгебра Кодда/А, Tutorial D, нормальные формы, оптимизация и выполнение запросов, структуры данных индексов, транзакции и ACID, CAP-теорема Брюера, NoSQL, key-value storage, шардинг, ORM (C++ ODB), ERD, OLAP
Прикладное программирование, C#/F#/Nemerle, Шилдт/Троелсен/Рихтер, генерики, yield, linq/plinq, рефлексия, AST, WCF, WinForms/WPF/Silverlight, AOP, фреймворки логгирования, .NET assembly
Квантовые вычисления, алгоритм Шора, квантовая криптография
Функциональное программирование, Haskell/Ocaml/Scheme/Alice или Oz, SICP/TaPL/YAHT/Purely Functional Data Structures/Харрисон-Филд, HOF (map/fold/filter), монады, тайпклассы, АТД, система типов Хиндли-Милнера, ленивость/энергичность, логическое программирование (Prolog или Mercury), конкурентное программирование (Erlang или Oz)
Веб-программирование и скриптовые языки, Фланаган/Zend PHP5 Certification Course + Study Guide, Apache/nginx, CGI/FastCGI, PHP/Zend Framework/phpDaemon/Zend Engine/Doctrine или Propel/CodeIgniter или Symphony или Yii, Python/Django/Twisted, Ruby/RoR, ASP.NET MVC, JavaScript/jQuery/ExtJS/node.js, ООП в JavaScript, HTML5/XHTML/doctype/табличная и блочная верстка/CSS3, RSS, canvas/WebGL, Ajax/Comet/WebSockets, вопросы безопасности: XSS, SQL injection, CSRF, highload, SWIG
Проектирование GUI, Раскин, юзабилити, основы дизайна и типографики, закон Фиттса, основы верстки, LaTeX
http://sharpc.livejournal.com/67583.html - От себя отмечу, что не раскрыта тема верификации/валидации ПО, а COM можно оставить в истории.
Пора посыпать голову пеплом?
Редактировал vissi (25.03.2011 14:40)
|
|
|
nafig_batat
|
looking for you
|
|
|
|
Рег.: 25.10.2005
|
Сообщений: 11580
|
Из: улица Ленина
|
Рейтинг: 8535
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 14:35
|
|
|
почему не упомянута книга "asp.net для чайников за 2 недели"?
|
слава роботам!!! |
|
JUnit
|
|
|
|
|
Рег.: 08.03.2005
|
Сообщений: 3812
|
Из: Беляево
|
Рейтинг: 1621
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 14:39
|
|
|
// Квантовые вычисления, алгоритм Шора, квантовая криптография
И Гровера, Гровера не забываем - как же в наше время искать в неупорядоченном списке из N элементов медленнее, чем за время "квадратный корень из N"?
---
Надо прежде всего интересоваться своей областью, а уж дальше - методом куста. В списке много полезного, но подавляющее большинство, ИМХО, можно освоить на ходу, вместо того, чтобы забивать бошку всякой модной сегодня хренью.
|
|
KOT3
|
|
|
|
|
Рег.: 31.12.2010
|
Сообщений: 151
|
|
Рейтинг: 207
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 14:45
|
|
|
В ответ на:
теоретический минимум для программиста
самый ебический теоретический минимум который я видел
|
|
unkulunkulu
|
unkulunkulunkulu
|
|
|
|
Рег.: 12.11.2006
|
Сообщений: 18453
|
Из: 13000
|
Рейтинг: 11759
|
|
Re: Теоретический минимум для программиста
[re: KOT3]
25.03.2011 14:48
|
|
|
Ну а хули вы хотели? 
|
|
nelapsi
|
the wumbologist
|
|
|
|
Рег.: 10.11.2003
|
Сообщений: 10763
|
Из: Orbis Tertius
|
Рейтинг: 10648
|
|
Re: Теоретический минимум для программиста
[re: unkulunkulu]
25.03.2011 15:27
|
|
|
1) представил резюме с таким списком 2) я знаю кунфу, карате, джиуджитсу и много других страшных слов
|
Your touch will set me free |
|
Partizan
|
везунок
|
|
|
|
Рег.: 17.11.2003
|
Сообщений: 1923
|
|
Рейтинг: 502
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 15:36
|
|
|
А есть человек на Земле, который все это знает?
|
Где картинки? Как можно делать такие серьезные утверждения без картинок? |
|
vissi
|
|
|
|
|
Рег.: 30.09.2007
|
Сообщений: 9275
|
|
Рейтинг: 8222
|
|
Re: Теоретический минимум для программиста
[re: Partizan]
25.03.2011 15:42
|
|
|
Видимо, сам sharpc имеет понятие о большинстве вещей из этого списка )
|
|
|
Rott
|
|
|
|
|
Рег.: 07.09.2005
|
Сообщений: 4403
|
|
Рейтинг: 2885
|
|
Re: Теоретический минимум для программиста
[re: KOT3]
25.03.2011 16:00
|
|
|
В ответ на:
самый ебический теоретический минимум который я видел
Какие все сурьезные... Это же всего лишь мануал для ЭйчЭров  Радует то, что Явы и Перла в почетном списке нет. Никогда их не любил.
|
|
ayvango
|
ушастый
|
|
|
|
Рег.: 10.01.2006
|
Сообщений: 27732
|
Из: Воронеж
|
Рейтинг: 11832
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 16:13
|
|
|
Во-первых, автомат калашинкова - лишний. Во-вторых, не хватает модели акторов хотя бы на примере эрланговской виртуальной машины. В-третьих, непозволительно забыть про сжатие с потерями. Психоакустическая модель и сжатие звука, сжатие изображений: jpeg, jpeg2000, фрактальное сжатие. Сжатие видео, компенсация движения, I/B фреймы, интерлейс и прочее. В-четвертых, где теория автоматики? В-пятых, забыли про стрелки и звезду клейсли в функциональном программировании, для сетевых p2p технологий неплохо бы знать теорию перколяции.
|
Сеть темна и полна ужасов |
|
nelapsi
|
the wumbologist
|
|
|
|
Рег.: 10.11.2003
|
Сообщений: 10763
|
Из: Orbis Tertius
|
Рейтинг: 10648
|
|
Re: Теоретический минимум для программиста
[re: ayvango]
25.03.2011 17:07
|
|
|
в-шестых, не написано, что делать одинокому 40-летнему программисту с минимумом знаний и без опыта работы
|
Your touch will set me free |
|
patnic
|
baron
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: -666
|
|
Рейтинг: 1183
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 18:37
|
|
|
я обязательно прочитаю этот твой пост до самого конца
|
|
|
nop
|
nop
|
|
|
|
Рег.: 12.10.2004
|
Сообщений: 2676
|
Из: nop
|
Рейтинг: 3439
|
|
Re: Теоретический минимум для программиста
[re: vissi]
25.03.2011 18:52
|
|
|
хорошо, что собрали воедино, надо бы взботнуть... Однако, название у этого добра совершенно некорректное. Это не теоретический минимум, это теоретический максимум, я бы сказал. Потому что, скажем, квантовые алгоритмы прочувствовать без квантовой механики просто нельзя. А ее не заботать просто так.
|
nop |
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31421
|
|
Рейтинг: 8956
|
|
Re: Теоретический минимум для программиста
[re: nop]
26.03.2011 00:28
|
|
|
Quote:
Это не теоретический минимум, это теоретический максимум, я бы сказал
скорее сумма всех теор. минимумов из каждой программистской области
а каждый разработчик "тусуется" в 1-5(изредка больше) указанных областей
|
|
DeeMon
|
|
|
|
|
Рег.: 28.03.2004
|
Сообщений: 1746
|
Из: Siam gulf
|
Рейтинг: 3029
|
|
Re: Теоретический минимум для программиста
[re: vissi]
26.03.2011 07:54
|
|
|
Quote:
COM можно оставить в истории.
Таки нельзя. Офис и DirectX его обессмертили.
|
|
Vilfred_Sagen
|
спать хочу
|
|
|
|
Рег.: 29.10.2004
|
Сообщений: 22313
|
Из: moscow
|
Рейтинг: 7124
|
|
Re: Теоретический минимум для программиста
[re: vissi]
26.03.2011 11:40
|
|
|
ну, к этому надо стремится, а ваще конешно феерический бред
|
|
xandr
|
|
|
|
|
Рег.: 26.11.2004
|
Сообщений: 6547
|
|
Рейтинг: 1779
|
|
Re: Теоретический минимум для программиста
[re: vissi]
27.03.2011 10:51
|
|
|
Quote:
Математика, Кнут-Грэхем-Паташник/Зорич/Винберг, матан, линал, комплан, функан, диффгем, теория чисел, дифуры/интуры/урчпы/вариационное исчисление/оптимальное управление, производящие функции, ряды, комбинаторика, теорвер/матстат/слупы/теория массового обслуживания, цепи Маркова, интегральные преобразования (Фурье, Лаплас, вейвлет), NZQRCHOS, матпакеты (Mathematica, Maple)
Вот это порадовало. Некоторые одним только матаном всю жизнь занимаются, а для других это теоретический минимум
|
|
Kraft
|
Carpal Tunnel
|
|
|
|
Рег.: 09.12.2002
|
Сообщений: 3704
|
|
Рейтинг: 1427
|
|
Re: Теоретический минимум для программиста
[re: xandr]
27.03.2011 22:03
|
|
|
Quote:
Математика
Мне от одного этого уже поплохело. - А математику вы умеете? - Конечно.
|
Пароль, чтобы не забыть (без кавычек): 'lEujoDUp3xoq' |
|
Nine17
|
Furia Roja
|
|
|
|
Рег.: 26.06.2003
|
Сообщений: 25557
|
|
Рейтинг: 13160
|
|
Re: Теоретический минимум для программиста
[re: xandr]
28.03.2011 00:31
|
|
|
Quote:
Некоторые одним только матаном всю жизнь занимаются, а для других это теоретический минимум
Самое главное как это поможет клепать вебформы.
|
Entre flores fandanguillos y alegria nació España mi tierra de amor! |
|
ayvango
|
ушастый
|
|
|
|
Рег.: 10.01.2006
|
Сообщений: 27732
|
Из: Воронеж
|
Рейтинг: 11832
|
|
Re: Теоретический минимум для программиста
[re: Nine17]
28.03.2011 01:10
|
|
|
Quote:
Самое главное как это поможет клепать вебформы.
ты сможешь придумать клевую матановую капчу, не?
|
Сеть темна и полна ужасов |
|
|
|