Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Веб-разработчик, геймер, специалист по этике  · 19 февр 2023

О "программистах" и "кодерах"

На днях наткнулся на совершенно восхитительный памфлет заблуждений от паблика "Журнал Код" ВКонтакте и чё-то прям очень огорчился за тех молодых энтузиастов программирования, кто его прочитает.
Я не буду подробно разбирать этот тупорылый фейк и тем более "читать подробнее у Коли Митина", я устал метать бисер. Понятно, что никто никогда не читает Code Complete Макконела, Clean Coder Мартина или хотя бы The Pragmatic Programmer Ханта. Я просто хотел пример привести.
Читаю тут в последнее время чудесную книгу под названием Designing Data-Intensive Applications. 613 страниц концентрированных знаний, накопленных по теме разработки бизнес-приложений. Ага, она написана специально для тех, кого современные черепомеры называют  теперь "сборщиками" (раньше я слышал "кодерами"). Вышла книга в 2017 году, она, фактически, завершает эпоху, когда в разработке ещё ценились и можно было найти квалифицированные знания, а не домыслы.
Вот два абзаца оттуда, из главы Column-Oriented Storage, страница 99:
Во-первых, "олимпиадники", успехов вам объяснить мне, почему векторизованные вычисления это один из ключевых факторов того, почему хранить данные в базах данных по колонкам выгоднее, чем по строкам. Уверен, где-то у Кнута или Вирта это написано. ;)
А во-вторых, я, прочитав до этого места, задумался о том, как разработчики ПО вообще пришли к такому интересному оптимизационному решению, как выглядел этот процесс.
С уверенностью предположу, что выглядел он вот как.
В особо крупных приложениях, с миллиардами строк в каждой из тысяч таблиц БД, инженеры задумались о том, как им поднять производительность (в очередной раз). Они подняли литературу по компьютерным наукам, провели анализ данных, которые хранят, что-то вспомнили из головы и по опыту, спроектировали новый алгоритм хранения (возможно, на этом этапе они нашли алгоритмистов, специализирующихся на сжатии данных), и реализовали его. Провели два года за постепенной миграцией своего приложения на новый метод. Собрали пост-мортем, выступили на конференциях — сообщество разработки пополнило свои знания новым инструментом.
Перефразирую для тех, кто не понял мораль моей истории сразу. 
Люди, которые "просто делают и поддерживают софт", когда перед ними встают новые задачи, идут в имеющийся корпус знаний о компьютерных науках, находят там нужные решения и реализуют их. Поднимая уровень своей квалификации в процессе. Говорить, что они "меньше думают о быстродействии и архитектуре" это такая наглая ложь и передёргивание фактов, что от одной только этой фразы весь этот разворот памфлета и вся эта концепция "программистов и кодеров" разваливается на части.
А людям, которые "могут написать алгоритм, запрограммировать робота, решить какую-то сложную вычислительную задачу на простом оборудовании", для того, чтобы разработать хоть сколько-то сложное ПО, а тем более — в составе команды, нужно, как ни странно, научиться разрабатывать программное обеспечение. Ага, вот так вот. То, что ты можешь решить все упражнения в SICP или у Вирта или у CRLS'ов, абсолютно ничего не говорит о том, что тебя "можно сравнить с автомеханиками, которые могут разобрать ваш автомобиль и собрать его заново". Ни хера ты ещё не можешь это сделать.
Когда я учил себя разрабатывать ПО, в районе 2010 года, было совершенно очевидным несколько другое разделение программистов, гораздо более обоснованное. Это разделение на Computer Science и на Software Engineering, на академию и инженерию. И смысл этого разделения в том, что ты можешь быть хоть семи пядей во лбу, дышать лямбда-исчислением и в уме решать уравнения логики предикатов второго порядка, оптимизировать фильтр Блума по памяти на салфетке и рассказывать внукам как устроено красно-чёрное дерево. Но в реальности, в настоящей жизни, на аппаратуре компьютерной работает программное обеспечение — цельная сущность, которая оперирует данными на устройствах хранения и обменивается сигналами с другими устройствами.
И абсолютно любой алгоритм и любая структура данных может в компьютере существовать только как часть собственно программы, и собрать эту программу и запустить — абсолютно нетривиальная задача, которой нужно учиться отдельно. В языке программирования Haskell первоначально не было вообще ввода-вывода. Это очень смешной ироничный факт, профессиональным разработчикам удивительный, но понятный, ведь хаскелл — изначально был придуман как игрушка для академии. 
Вы такие умные теперь все, учитесь программировать в интерактивных курсах на сайтах прямо в браузере — а вы задумывались, сколько кода было написано, который поддерживает эту интерактивную среду, в которой вы набиваете ваш код очередного бинарного поиска или quicksort для упражнения? Вы серьёзно думаете, что люди, которые вот всё это написали, ниже по квалификации чем вы, которые учат "настоящее программирование"?
Если вы хотите научиться разработке программного обеспечения, вам нужно учиться разработке программного обеспечения. Для этого есть профильная литература, своя, отдельная от очередных "Алгоритмов и структур данных" и "The С Programming Language".
Вам не нужно считать себя загнанным в угол какими-то требованиями, которые вам предъявляют элитисты в интернете. Специальные знания, например, математические, или, скажем, астрономические, или, допустим, социологические, вам понадобятся тогда, когда вы будете решать соответствующие задачи. Конечно же, безусловно, вы получаете преимущество, если к моменту появления такой задачи вы уже знаете её решение. Но это просто экономит вам время. И всё.
Программирование+2
1 эксперт согласен
Поддерживаю полностью. Ибо вне процесса собственных размышлений именно внутри, а не вне целеполагания - любые разгл... Читать дальше