Все относящееся к узкой специализации. Тонкости внутренностей процессора, оккультные знания С++, редкоиспользуемые теории. Это все нужно только если заведомо работать в области, имеющей к этому отношение, а большая часть программистов этого мало того что не знает, так и знать не должна - чтобы им это работать не мешало.
Что именно вы считаете тонкостями внутренностей процессора? C++ это тот язык, который я выбрал в качестве основного для теормина, поэтому в списке то, что считается "знать C++". То, что в C++ надо знать много тонкостей, увы, проблема, но пока ее никто не решил. Какие именно редкоиспользуемые теории? Я заведомо выкинул domain-specific вещи, например, Java, которая остро необходима 40% всех программистов (если верить TIOBE). Укажите, где, по вашему мнению, они еще остались.
В общем, там в списке полностью отсутствует внятная иерархия "от общего к частному", в одной строке упоминаются и частные реализации чего либо и обще-теоретические вопросы.
Я бы в теорминимум поставил только то, что заведомо нужно знать каждому программисту. В том смысле, что без этого он будет даже не ремесленником, а вообще заниматься карго-культом, имитируя непонятные ему действия. Вот к примеру, понимать работу железа и физические процессы - очень полезно, но если не заниматься научными вычислениями - тонкости знать не обязательно.
А дальше нужно сделать несколько отдельных списков для разных специализаций, причем хорошему программисту желательно знать не одну, а две смежные специализации.
Насчет же зарабатывания денег vs улучшение мира - это вечная тема для срачей. В общем, наилучшие результаты получаются у тех, кто эти два пункта совмещает, т.к. требование "это нужно продать" позволяет не витать в облаках, а стремление не делать говнокод спасает от деградации.
Чем знание Java помогает программисту под QNX? Гейдевелоперу? Вебдеву? Общее понимание методов и принципов разработки прикладного ПО, на мой взгляд, знакомство с дотнетом и его экосистемой вполне обеспечивает. C# полезнее Java в образовании, имхо, поскольку новее.
Да, потому что это список ориентиров, а не логическая последовательная программа для изучения, я вынес это в апдейт поста.
Я не могу смириться с тем, что можно добровольно отказаться от хотя бы популярного понимания всех уровней, на которых строятся вычислительные системы, достаточно одного транзистора, который без понимания квантовой механики выглядит, как черный ящик.
Ну так ради дискуссии этот список и был выложен :)
QNX, игры, веб - это узкая специализация, это даже более предметная область, чем определенный язык программирования.
Квантовую механику и отдельные транзисторы сразу в лес - у меня специальность электроника, и то я с этим сталкивался последний раз 15 лет назад. Если придется микросхемы с нуля разрабатывать - то да, придется в памяти воскрешать это все, а для прикладного программирования - в лес. Вот логические элементы - оно нужно, потому что булева алгебра до сих пор живее всех живых, и лучше ее изучать на том, с чего она началась :)
А вот на чем учить разработке прикладного ПО я даже с ходу не скажу - наверно лучше всего сначала дать чистый C, а затем С++, жабу и дотнет одновременно - чтобы ни к чему из этого не привыкали, и чтобы можно было на сравнении языков тонкости всякие показывать.
Это утомление после некоторых особо остроумных комментаторов :) Основное предположение "теормина" в том, что существуют штуки, которые хоть как-то пересекаются со всеми областями, в то время как остальные штуки в разных областях с другими областями пересекаются очень слабо. Скажем, никак не пересекаться хотя бы как пользователь с базами данных невозможно, а вот с какими-нибудь хитрыми собственническими технологиями МОП-транзисторов можно. C++, на мой взгляд, полностью перекрывает Си, поэтому Си не нужен. Между Java и C# я не вижу столь значительной разницы, что Java-программистам непременно следует изучить C# и наоборот, чтобы не потерять важный и широко используемый подход.
Между С# и Java есть кардинальная разница - это подходы к инфраструктуре, типа всяких там серверов приложений, систем сборки и деплоймента и прочего. В C# это все как-то намного проще, без излишеств, в Java-проекте можно даже до программирования не добраться, угорев на полдороги во всех этих xml-конфигах, war-jar-ear-архивах и прочем.
Си желателен, поскольку является средством объединения всех этих разнородных языков и платформ, в итоге там весь низкоуровневый API на нем описан.
Это аргумент в пользу того, чтобы не изучать Java для общего образования, а только если припрет :) Изучая C++, мимо низкоуровневого API сложно пройти, хотя да, ABI я в списке указать забыл.
Имхо хороший английский, навыки менеджмента, основы финансов и инвестиций, а особенно хорошая доля здравого смысла дадут на порядок больше отдачи, чем все вышеперечисленное.
Page 5 of 5