Support us

Давайте называть вещи своими именами. Академическое образование — это не «программирование»

Оставить комментарий
Давайте называть вещи своими именами. Академическое образование — это не «программирование»

По следам недавно опубликованного поста о проектировании спецификаций и домов я решил перевести и их «ответ Чемберлену» от Джейсона Гормана. Ниже — только его текст.

Если мне не изменяет память, раньше я уже затрагивал эту тему, но сейчас хотелось бы подробно изложить, что я думаю об академическом преподавании «информатики» (далее в тексте  computer science).

Первое, о чем хочется спросить поборников академического подхода: «Господа, вы сейчас и правда говорите о computer science? Давайте признаем: многие люди, принимающиеся рассуждать о computer science и развитии, не вполне понимают, что это такое. Они любят рассказывать о том, как бум персональных компьютеров, случившийся в 80-е, зажег в душах моих сверстников страсть к computer science. Да ничего подобного. Это была страсть к программированию. Разумеется, computer science и программирование взаимосвязаны. Но это далеко не одно и то же. Программирование можно сравнить с сочинением и исполнением музыки, а computer science — с сольфеджио.

Итак, музыка или дома?  Добро пожаловать под кат

Если вы пишете музыку и играете на каком-то инструменте, знания сольфеджио не помешают, но у многих выдающихся бардов и исполнителей эти знания минимальны. Некоторые поразительно одаренные и искусные музыканты создают превосходные произведения, просто играя на слух и интуитивно различая, какая нота хороша, а какая — нет. Некоторые из них не умеют читать ноты или часто не знают, что классный джазовый аккорд, который они исполняют, называется «большой мажорный септаккорд до-ми-соль-си». А мелодия на фоне аккомпанемента может звучать в лидийском звукоряде от ноты «до». Но музыкант просто знает, как это сыграть, и уверен, что получится красиво.

Разумеется, на каком-то этапе музыкального образования уже не обойтись без теоретических знаний (например, дилетант вряд ли разберется с оркестровой партитурой), но большинство ныне популярной музыки не требует никаких консерваторских знаний. Требуется талант. Если взглянуть на эту ситуацию с коммерческой точки зрения — то берусь утверждать, что большинство меломанов слушает музыку (и платит за нее деньги), которая написана умелыми самоучками. Таким исполнителям требуется минимум теории музыки, чтобы донести до аудитории некий «месседж». 

Программирование в некоторых аспектах удивительно напоминает музыку. Вы даже не представляете, как много людей с музыкальным образованием среди великолепных разработчиков. То поколение программистов, которое начало формироваться в 80-е, в эпоху бума персоналок, — это, повторюсь, поколение самоучек, которые и сегодня в основном творят «по наитию». Некоторые, конечно, собрались и освоили computer science, но большинство без этого обошлось (лень-матушка  прим. переводчика).

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

Я очень обеспокоен тем, что мы рискуем отбить интерес к профессии у нового поколения разработчиков, если будем:

а) вдалбливать материал, который может им ни разу в жизни не пригодиться;

б) из-за этой ботвы отказываться от изучения действительно полезных вещей.

Предположим, что компьютерная отрасль — это пирамида. В основании ее располагаются обычные юзеры, которые, вероятно, составляют 99% всего этого сообщества. На следующем уровне будут специалисты, которые пишут программы (не будем здесь учитывать тех, кто занимается изготовлением аппаратного обеспечения — это уже электроника, знание computer science в ней — дело десятое). Допустим, такие разработчики занимают 0,9% пирамиды. Наконец, на самой верхушке этой пирамиды гордо восседают ученые — люди, которые развивают новые концепции, разрабатывают новые языки программирования и «расширяют горизонты» для тех 0,9%, кто зарабатывает программированием себе на жизнь.

Каждый год я имею дело с тысячами программистов. Большинство из них — самоучки. Но на деле порой бывает сложно отличить самоучку от обладателя диплома. Мне кажется, что академические знания computer science практически бесполезны, если от вас требуется написать транзакционный движок для банка или разработать физику для компьютерной игры (вот физическое образование здесь будет весьма кстати). А большинство студентов, поступающих на computer science, мечтают быть именно программистами, а не учеными. Что характерно, большинство из них ими и становится.

Учитывая, какие отзывы я получаю от дипломированных специалистов по computer science, которые работают в сфере программирования (а также от их работодателей), напрашивается обескураживающий вывод: академическое образование совершенно не готовит человека к разработке софта. Для большинства молодых специалистов время, ушедшее на изучение мета-мета-модели UML или концепции объекта Z, — это время, потраченное впустую. Гораздо разумнее было бы научиться писать хорошие автоматизированные тесты или эффективные и надежные сборочные скрипты.

«Действительно, — можете возразить вы, — computer science не сводится к программированию, эта отрасль знаний касается написания модульных тестов или автоматизации сборок». Соглашусь с вами. Но я не утверждаю, что факультет computer science — факультет ненужных вещей. Я лишь считаю, что там не место большинству студентов, которые желают стать программистами.

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

Выпускник должен уметь писать программы… но для чего? Без базового математического образования и знания алгоритмов умение программировать бесполезно, так как вы попросту не поймете, какой должна быть программа для решения конкретной проблемы! Вы также не будете иметь представления о языках программирования, машинном обучении, семантике, теории категорий. Да вообще у вас не будет никакого систематического образования. Много ли пользы в умении программировать, если вы совершенно не представляете, как решать проблемы?»

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

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

Помню, как на одном собеседовании на должность типичнейшего техлида меня спросили, как бы я реализовал хеш-таблицу. Я сказал, что, скорее всего, сделал бы что-то с применением хешей, ассоциативных массивов и сегментов памяти, но честно признал, что с ходу не сформулирую точный алгоритм. А потом поинтересовался: «В проекте не предполагается использовать коллекции в Java-фреймворке»? И поспрашивал их немного о тонкостях кода, знаете, всякие детали — насколько он удобочитаемый, насколько модульный, есть ли там автоматизированные тесты компонентов. Но оказалось, что мои собеседники слишком заняты реализацией собственной версии java.util, чтобы размениваться на такие «идиотские» мелочи.

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

Я читал книги о структурах данных и об алгоритмах, языках и компиляторах и о других очень высоких материях computer science именно потому, что хочу совершенствоваться как программист. Если мне вдруг и вправду понадобится написать на заказ новый язык программирования, я найму тех, кто сумеет его создать. В большинстве случаев мне достаточно просто иметь представление о концепции и знать, что «есть люди, которые это умеют».

Итак, к чему я клоню.

Возвращаясь к нашей компьютерной пирамиде, следует признать, что 99% людей, для которых мы работаем, — обычные пользователи. И поэтому я полагаю, что нам нужно не просто «приобретать навыки работы с компьютером», а учиться думать более «логически» и «вычислительно». Думаю, именно эти знания и умения нужно преподавать в университетском курсе математики (изучать логику, теорию множеств, структуры данных, алгоритмы). А вот различные приемы работы с компьютером следует прививать с ранних лет, чтобы уже маленькие дети пользовались компьютерными программами для выполнения школьных заданий и собственных проектов.

Для 0,9% специалистов компьютер — орудие труда, и их интересует программирование, программирование и еще раз программирование с выборочным изучением теории в тех случаях, когда она помогает улучшить или ускорить процесс работы. Программирование как ремесло — что-то мастеришь, что-то производишь — вот на чем выросло мое поколение профессиональных разработчиков. Мы были в основном самоучками, работали по наитию, и нам очень, очень нравилось этим заниматься. Именно поэтому многие из нас разбираются в теории лучше, чем дипломированные специалисты. Вышло так, что мы изучили наиболее полезную часть теорию, так как учились лишь тому, что нам действительно требовалось. Если человек работает с упоением, у него быстро развивается потребность работать как можно лучше, и он начинает работать и развиваться по собственному творческому пути. Его так просто не остановишь!

Для оставшегося 0,1% — ученых, которых интересуют именно математические аспекты вычислений, кому нравится совершать открытия и развивать теорию, а не мастерить и создавать — и существует computer science. Но держу пари, что и многие такие исследователи начинали свой путь в академическую науку как программисты-самоучки.

Я думаю, что 99% пользователей нуждаются в гораздо более всестороннем компьютерном образовании. Информационные технологии должны незаметно и постоянно «просачиваться» как в обычные уроки, так и в повседневную жизнь. Такие уроки следует дополнять сжатым, но содержательным курсом математики, который поможет детям развивать «вычислительные» способы мышления. Честно говоря, школьная математика уже состоит из одной «воды», так что этот предмет можно и нужно концентрировать.

Для оставшегося 1% молодых людей, некоторые из которых станут разработчиками софта, нужно преподавать программирование в школах (и вне школ). И это должно быть интересно. Веселые, интересные проекты, которые позволят проявить себя, которые будут становиться все более «взрослыми» по мере того, как дети приобретают опыт и уверенность в работе. И так нужно работать до 18 лет, пока некоторые из этих вчерашних детей не начнут заниматься настоящей «разработкой программ». Нужно найти удобный и интересный способ изучения теории, такой теории, которая нужна для выращивания более умелых программистов, а впоследствии — практикующих разработчиков.

Также хотелось бы отметить, что разработчикам программ требуется достаточно широкое общее образование, без которого, в известной степени, может обойтись ученый. Умение общаться — и не только на языке программирования — а также умение рассуждать и быстро учиться, чтобы ориентироваться в самых разнообразных предметных областях — это, конечно же, не только и не столько навыки программирования. Вполне можно быть замечательным ученым и ничуть не представлять, как работает рынок фьючерсов, как течет газ по трубам или какое налоговое законодательство регулирует международные онлайновые продажи. Пока я трудился фрилансером, мне доводилось выполнять проекты во всевозможных областях — от инженерного дела до корпоративного права. Доводилось иметь дело и с розничной торговлей, и с телевидением, и с банковским делом. Полагаю, без хорошего общего «классического» образования некоторые из этих тем запросто могли бы вынести мне мозг. В некоторые из таких областей приходилось буквально «десантироваться», не имея времени даже на самую краткую подготовку.

Немногие из нас намерены серьезно заниматься математикой, но эти немногие нуждаются в особой поддержке: нельзя отказывать в доступном образовании тем людям, которым математика нужна и которые хотят в ней разбираться. 

Поймите меня правильно, я совсем не пытаюсь сказать, что computer science — бесполезная штука. Если бы не достижения computer science, вы банально не смогли бы прочитать этот текст. Но я считаю, что мы несколько небрежны в наших формулировках (когда говорим computer science, а имеем в виду «программирование») и несколько зациклены на проблеме совершенствования академических курсов computer science, забывая о том, что нужно нашему брату, кроме «голой» computer science. И это «кроме» объединяет в основном совершенно другие вещи.

Что же касается тех ребят, которые просто любят возиться с компьютером, но не собираются после школы становиться учеными — мне очень хочется верить, что они смогут стать программистами, получив лишь профессиональное техническое образование. Разработка программ — это такое дело, которому можно научиться только на практике, и практики у программиста должно быть в избытке.

Разработчикам необходимо изучать и известный объем теории. К сожалению, мне не понаслышке известно, каким снобизмом отличаются в этом отношении многие работодатели. Итак, на мой взгляд, для обучения computer science необходим примерно пятилетний курс практического профессионального образования, совмещаемый с небольшим академическим курсом. То есть один день в неделю тратишь на академические занятия, а еще четыре — на работу над реальными проектами, возможно, в офисе.  

Итак, спасибо за внимание. Можете начинать ломать стулья.


Источник

Место солидарности беларусского ИТ-комьюнити

Далучайся!

Читайте также
10 курсов для Project Manager, чтобы прокачать скиллы и обновить резюме (июнь 2023 г.)
10 курсов для Project Manager, чтобы прокачать скиллы и обновить резюме (июнь 2023 г.)
10 курсов для Project Manager, чтобы прокачать скиллы и обновить резюме (июнь 2023 г.)
Собрали курсы на различных платформах, которые подойдут как начинающим, так и опытным Рroject Мanager. Стоимость: от бесплатных уроков до продвинутых университетских программ за тысячи долларов. Но даже это — сущие гроши за новые знаний и крутой сертификат, которым можно похвастаться на LinkedIn и добавить в свое резюме.
1 комментарий
Онлайн и офлайн курсы от беларуских школ на dev.Курсы
Онлайн и офлайн курсы от беларуских школ на dev.Курсы
Онлайн и офлайн курсы от беларуских школ на dev.Курсы
Популярные онлайн и офлайн курсы от беларуских школ на dev.Курсы
Популярные онлайн и офлайн курсы от беларуских школ на dev.Курсы
Популярные онлайн и офлайн курсы от беларуских школ на dev.Курсы
Как выбрать курс по ML. На примере
Как выбрать курс по ML. На примере
Как выбрать курс по ML. На примере
Сегодня в свободном доступе в сети можно найти массу материалов по машинному обучению (МО), но подобрать наиболее оптимальный ресурс может быть довольно сложно. Программист и разработчик Логан Спирс прошёл курс по машинному обучению на Coursera и краткосрочную программу для разработчиков алгоритмов МО от Udacity. Для тех, у кого нет времени изучить оба, Спирс сделал сравнение двух программ, которое поможет определиться с выбором.
2 комментария

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.