Составить набор IT знаний для расширения своего профессионального кругозора
Однажды я наткнулся на статью "Теоретический минимум для программиста", в которой есть перечисление знаний, которыми должен обладать программист. Но там перечислена куча знаний для программистов. Считаю, что абсолютно всё мне оттуда не нужно, но есть что взять в набор изучения. Я выбрал лишь те пункты, которые, по моему мнению, мне действительно нужны для того, чтобы считаться профессионалом в своей области. Не всё в этих пунктах на самом деле мне надо, слишком много там всего всего. Кое-что из того, что мне видится не надобным, будет убираться по мере разбора списка, кое-что оставлено для беглого ознакомления, кое-что изучено. Если что-то отсутствует, будет добавлено.
Отобранные пункты:
- Веб-программирование и скриптовые языки, Фланаган/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
- Методологии разработки, Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE
- Архитектура и стиль кода, Макконнелл/Фаулер/Лебланк/Гамма/Александреску-Саттер/Буч, защитное программирование, паттерны, SOLID/GRASP/KISS DRY SPOT/YAGNI, UML, OOP (Smalltalk), OOD/OOA, метрики кода.
- Форматы, 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
- Базы данных, Грубер/Дейт, 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
- Тестирование, юнит-тесты, функциональное, нагрузочное, интеграционное тестирование, тестирование UI
- Инструментальные средства разработки, IDE, IntelliSense, отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace), DWARF2 debug information format, дизассемблеры и декомпиляторы (IDA/HexRays/Reflector), системы контроля версий (SVN, GIT), merge/branch/trunk, системы именования файлов и бранчей, continuous integration, ant, code coverage, статический анализ (lint), динамический анализ (valgrind, фаззинг), верификация и валидация ПО (Frama-C, RAISE (RSL), Coq), профайлинг, багтрекеры, документирование кода, системы сборки (CMake)
- Криптография, Шнайер/Ященко, Принцип Керкгоффса, симметричная (DES, AES), асимметричная (RSA), качество ГПСЧ, алгоритм Диффи-Хеллмана, эллиптические кривые, хэширование (MD5, SHA, CRCn), DHT, криптостойкость, криптоатаки, WEP/WPA/WPA2 и атаки на них, цифровая подпись и сертификаты, PKI, HTTPS/SSL, доказательство с нулевым разглашением.
- Операционные системы, 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
Итак. Необходимый набор знаний, обозначенный в описании цели, излишен. Необходимо пересмотреть все его пункты, разделить их на необходимые для изучения, достаточные для ознакомления и ненужные.
- Необходимые для изучения будут выделены и запланированы для изучения. Учитывая, что список слишком большой, все эти знания в одну цель не засунуть. Для этих знаний или групп знаний будут создаваться соответствующие цели.
- Достаточные для ознакомления будут поверхностно законспектированы здесь или в соответствующих целях (и в моем будущем блоге, когда он будет). Подробного их изучения не будет.
- Ненужные будут отброшены.
Каждый пункт будет отдельным этапом. Итогом каждого этапа будет отобранный список изучаемого пункта, а так же комментарии по планам изучения знаний из списка.
Критерий завершения
Весь список переработан. Необходимые мне знания из списка выписаны.
-
Отобрать список знаний из пункта "Веб-программирование и скриптовые языки"
-
Отобрать список знаний из пункта "Методологии разработки"
-
Отобрать список знаний из пункта "Архитектура и стиль кода"
-
Отобрать список знаний из пункта "Форматы"
-
Отобрать список знаний из пункта "Базы данных"
-
Отобрать список знаний из пункта "Тестирование"
-
Отобрать список знаний из пункта "Инструментальные средства разработки"
-
Отобрать список знаний из пункта "Криптография"
-
Отобрать список знаний из пункта "Операционные системы"
-
Отобрать список знаний из пункта "Сеть"
- 6601
- 05 июня 2014, 13:30
Не пропустите новые записи!
Подпишитесь на цель и следите за ее достижением