Pull to refresh
10
0
Send message

Однако ваше высказывание как бы намекает, что олимпиадники не справляются с обычной работой

Я имею в виду, что прохождение алгоритмической секции для олимпиадника не является маркером сопутствующих навыков разработчика.

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

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

Естественно, это лучше, чем кандидат, которому придётся объяснять про стиль, про тесты, про системы контроля версий, про цену поддержки кода и про программирование в целом. Олимпиадник без опыта работы - это джун с хорошим потенциалом, как бы звёздно он ни проходил алгоритмические секции.

Это как тяжелоатлет сможет работать грузчиком.

Конечно сможет, но я бы не доверил переезд свой переезд группе тяжелоатлетов выбранных по их рабочим весам. Обычно грузчики работают в команде и в их работе есть какое-то количество практик, позволяющих не повредить мебель/технику при перевозке. Подозреваю, что тяжелоатлет без опыта работы грузчиком об этом даже не задумается (пока не набьёт шишки).

При этом они вполне справляются с решением задач в виде написания приложения, тестов и документации

Так это же хорошо! Олимпиадников - сотни, а разработчиков/тестировщиков и прочая-прочая - нужны десятки тысяч.

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

Так каков же вывод? Книга для школьников (пусть и олимпиадников) и взрослому человеку читать её стыдно или поздно?

Я такого не писал и не подразумевал - учиться никогда не поздно :)

Моя позиция в том, что книжка написана очень доступным языком и, несмотря на пассаж в посте про "очень особенных детей", её вполне можно читать вместе с заинтересованным и освоившим программирование (или это уже делает его очень особенным?) ребёнком лет 11-16. Наравне с тем, чтобы дать ребёнку поиграть в Human Resource Machine.

Для подготовки к алгоритмической секции её недостаточно (там выше был пассаж про О-нотацию), но для погружения в алгоритмы - книжка очень хорошая, потому что даёт достаточное количество практики, чтобы их "прочувствовать".

Немного оффтоп - вообще в области программирования вещи "для школьников" часто оказываются хорошей точкой входа. Например, есть отличный курс Кириенко по основам программирования (на примере python) с довольно обширным набором задач для практической отработки навыков.

Да, наверное есть другие книги, где нет доказательства корректности и
задач без решений и они будут более эффективны в плане затрат времени и
полученного результата. Например, классический учебник MIT "Алгоритмы" Кормена, Лейзерсона, Ривеста, Штайна

Книжка Кормена как раз более фундаментальная и её ощутимо сложнее читать, если изначально не иметь какого-то представления о теме (которое как раз можно получить пройдя книжку Шеня).

Какие задачи на каких олимпиадах требуют этих знаний и в какой школе их дают?

В случае с алгоритмом Кнута-Морриса-Пратта, например:

  1. Задачи, сводящиеся к "эффективно найти все вхождения подстроки P в строку T".

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

  3. В той самой Летней Компьютерной Школе из соседнего комменатрия.

Конкретно формальные грамматики не пользуются на олимпиадах популярностью из-за того, что это задачки "на реализацию", которые нужно не столько решать, сколько аккуратно писать для них код.

пособие для школьного олимпиадного кружка по информатике

Аналогичного кружкам мехмата МГУ, упомянутым в тексте, только не по математике, а по информатике. Можно вспомнить, например, ЛКШ - это, конечно, не кружок, а летняя школа, но работают там со школьниками.

А что именно там из школьной программы?

Но ведь автор не утверждает, что книжка по школьной программе. В ней много задачек и не очень много теории, а изложение материала в основном идёт в виде разбора задач. Лишний формализм пропущен там, где его можно пропустить (книжка не вводит O-нотацию, например). Сравните с книжкой Кормена, написанной для студентов.

далеко не каждый соискатель на место разработчика расскажет, как хеш
таблицы работают, а вы утверждаете, что сжатие данных в школе проходят

Первое издание книжки вышло в 1995 - школьникам в те времена приходилось писать на олимпиадах контейнеры, включая хеш-таблицы и различные вариации самобалансирующихся деревьев.

То, о чём вы говорите - Abstract Data Type. То, о чём говорит автор - Data Structure.

The data structure implements the physical form of the data type

Ваши рассуждения верны (или как минимум применимы) в отношении ADT (типов и классов).

В оригинале там "Most data structures exist because of speed" и по ощущениям это уже сбывшееся пророчество. В 2022 (почти 20 лет спустя) программисты на python не думают о том, нужно ли им красно-чёрное дерево или хеш, они просто используют встроенный тип данных.

В том же абзаце, правда, странное:

Semantically, strings are more or less a subset of lists in which the elements are characters. So why do you need a separate data type? You don't, really. Strings only exist for efficiency. But it's lame to clutter up the semantics of the language with hacks to make programs run faster. Having strings in a language seems to be a case of premature optimization.

Но по-моему это просто не очень хороший пример - в python строки всё-таки семантически отличаются от произвольного массива чисел, да и в целом юникодные строки это очень нетривиальный объект.

Нейросети умеют придумывать новые слова. Об этом есть хорошая статья.

В свою очередь приставка «re» часто означает означает «пере» (например «replay» это «переиграть»), а «dux» это «вождь». Вот нейросеть и решает, что «redux» это «перевождь».

К слову, «to redux» автоматические переводчики переводят более достойно :)
Добавил примечание про ширину разделяющей полосы. Спасибо!

Information

Rating
Does not participate
Registered
Activity