о преподавании программирования
Apr. 23rd, 2012 03:01 pmВ реддите обсуждают закрытие факультета CS (Computer Science) во Флориде и один обмен мнениями там заставил меня задуматься. Один из участников написал, что в Америке на факультеты CS поступает очень мало абитуриентов в сравнении с другими факультетами, после которых реально найти работу. Более того, даже это сравнительно малое число абитуриентов завышено, если учесть два обстоятельства. Во-первых, студенты в CS чаще других переходят на другие факультеты или бросают учебу (30-50% drop rate). Во-вторых, из тех, кто остается и заканчивает степень большинство и так уже умели программировать к тому времени, как они записались. Из чего следует вывод, что мы не умеем на самом деле преподавать программирование. Либо человек сам научился, и только дополняет свое умение формальным образованием, математикой, алгоритмами итд., либо не научился, и тогда университет его (чаще всего) не научит.
А другой собеседник ему возражает и говорит: нет, это совсем не так. Да, многие студенты CS приходят уже умея программировать на одном или даже нескольких языках, но далеко не все, и нет корреляции между умением до учебы и успехом впоследствии.
Вот я и думаю, кто прав, и как это чаще бывает? Большинство знакомых мне программистов занимались этим в детстве или школе еще до высшего образования. Очень мало я знаю людей, которые пришли в университет с нулевым знанием программирования. Из таких еще меньше - тех, кто закончили учебу и работают по специальности; есть такие, но выборка крохотная, не знаю, насколько это нормально и обычно.
Как вы думаете? Может, вы знаете много людей, которые учили программирование с нуля в университете, или сами такой человек, и поделитесь мнением/опытом? Может ли университет научить программированию?
А другой собеседник ему возражает и говорит: нет, это совсем не так. Да, многие студенты CS приходят уже умея программировать на одном или даже нескольких языках, но далеко не все, и нет корреляции между умением до учебы и успехом впоследствии.
Вот я и думаю, кто прав, и как это чаще бывает? Большинство знакомых мне программистов занимались этим в детстве или школе еще до высшего образования. Очень мало я знаю людей, которые пришли в университет с нулевым знанием программирования. Из таких еще меньше - тех, кто закончили учебу и работают по специальности; есть такие, но выборка крохотная, не знаю, насколько это нормально и обычно.
Как вы думаете? Может, вы знаете много людей, которые учили программирование с нуля в университете, или сами такой человек, и поделитесь мнением/опытом? Может ли университет научить программированию?
no subject
Date: 2012-04-23 12:41 pm (UTC)много позже стал учиться на питоне, тоже сначала в универе, теперь самостоятельно продолжаю. тем не менее, уровень слабый, и в вашем понимании я программировать не умею.
no subject
Date: 2012-04-23 12:46 pm (UTC)С другой стороны, преподавание программирования на этом же первом курсе представляло собой какой-то ад. Полностью "нулевый" человек после таких лекций/лабораторных ничему не научился бы.
Всё же дело в тусовке. Частенько бывало такое, что после дискуссии в столовке азартно бежали в компьютерный класс, или к кому-нибудь домой на всю ночь и фигачили какие-то программы в 6-8 рук.
Подобно урагану распространялись по домашним компьютерам сокурсников (на дискетах) какие-нибудь крутые исходники на ассемблере, написанные старшекурсниками, модифицировались и разлетались дальше.
Так что университет учит программированию нормально. Рецепт таков:
1. Выдергиваем человека подальше от родителей, которые "знают что нужно делать их ребенку.
2. Помещаем человека в среду таких же полуфанатиков.
3. Параллельно читаем лекции по математике и околоматематическим дисциплинам (это уже хорошо тем, что ум в порядок приводит).
%)
no subject
Date: 2012-04-23 01:08 pm (UTC)no subject
Date: 2012-04-23 12:50 pm (UTC)Вообще если посмотреть на мой поток, программистами стали единицы. Есть тестировщики, менеджеры продуктов, сетевые инженеры. В общем глядя на мой и соседние годы выпуска, грубо говоря из 50 человек окончивших в каждом потоке, где-то так -- 1 человек в науке (профессор или исследователь в коммерческой лаборатории), 5 программисты, остальные кто куда. Университет средний, т.е. в топ 50 (но не по CS).
Другая сторона этого вопроса -- люди без образования в CS, работающие программистами. Например мой нынешний начальник пошел в liberal arts college делать English major. CS его тоже интересовал, но качество там было такое. что он не стал его доделывать. Человек при этом безусловно высшего класса.
no subject
Date: 2012-04-23 12:51 pm (UTC)no subject
Date: 2012-04-23 12:52 pm (UTC)С другой стороны, некоторым эти начальные знания мешают. От меня один "продвинутый" студент требовал особого отношения по причине того, что знал в начале семестра больше остальных. В итоге он договорился со старшим преподавателем, делал альтернативное задание, на пары не ходил и не собрал всех граблей, на которые наступили его одногруппники. Вряд ли это хорошо сказалось на его опыте.
no subject
Date: 2012-04-23 12:53 pm (UTC)конкретно профессиональных навыков университет много не даст, да и не в этом его задача.
сам проучился в МФТИ, где физики было гораздо больше, чем CS, да и CS была тогда в зачаточном состоянии. Потраченных сотен часов на физику не жалею, всё пошло в прок.
no subject
Date: 2012-04-23 12:55 pm (UTC)(no subject)
From:no subject
Date: 2012-04-23 01:03 pm (UTC)По моей личной статистике, действительно талантливые программисты получились из людей, которые этим увлекались, не так важно, когда они начали, но большинство - до ВУЗа. Просто средние кодеры вполне могли начать с нуля в ВУЗе или научиться на каких-то курсах.
А если душа совсем не лежит - то знания не ложатся, и даже если запихать - быстро забываются. Большинство таких людей работает в IT на смежных специальностях.
no subject
Date: 2012-04-23 01:33 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2012-04-23 01:09 pm (UTC)no subject
Date: 2012-04-23 01:14 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-04-23 01:12 pm (UTC)Взять, скажем, ПТУшный учебник "Заточку режущего инструмента" Попова. Вот там действительно есть, чему учить. Очень много информации, которую нужно держать в голове, чтобы быть хорошим точильщиком. Углы заточки, твердости сталей, соотношение класса чистоты поверхности и допустимых высот неровностей. Если человек освоил эту науку, он может пойти работать на завод работать с режущим инструментом без страха загубить резец-другой на ровном месте. А если нет - то нет.
С программированием так не получается. Можно любого студента посадить за машину и заставить программировать. С гуглом, хелпом, референсами и матом дело пойдет. Так что собственно учить программировать с тем, чтобы отправить "на завод" джуниором, и не приходится. Но университет - это все-таки пять-шесть относительно спокойных лет, которые жалко тратить в пустоту. При этом есть колоссальная масса интереснейших идей и вещей, которые делают наш мир таким, как он есть. Их не то что бы совершенно необходимо знать, конечно, но они-то как раз и отличают хорошего программиста от вечного джуниора, который не может себе позволить выйти за рамки привычной технологии.
Мой курс, ориентированный вроде как на обучение основам шарпа, включает в себя и немного низкоуровнего программирования, немного проективной геометрии с линейной алгеброй, немного хороших практик обработки исключений, чуть-чуть про сериализацию, чуть-чуть про память и кеш, чуть-чуть про системы контроля версий, а в этом году еще и немного функциональщины, введение в XNA и обзор популярных форматов данных. Он таким за три года вырос. Я прекрасно понимаю, что курс в итоге больше напоминает свалку, чем склад. И да, я не готовлю в итоге си-шарпистов, которых можно посадить за машину и потребовать писать хороший код. В общем-то, от них этого пока и не требуется. Но по крайней мере, они вспомнят, что я им рассказывал, перед тем, как писать код плохой. А возможно даже и вместо того.
То есть я про то, что в айтишном мире очень много всего интересного, чему можно учиться. Кроме собственно умения заставлять компьютер делать то, что от него хочется путем написания правильной последовательности букв. И если программированию как умению университет научить не может, то всему сопутствующему - легко.
no subject
Date: 2012-04-24 06:18 am (UTC)Если речь заходит о каких-то инженерных делах, тогда - да, тут человек сталкивается с предметной областью, и ему приходится каждый раз решать уникальные задачи, но это и делает профессию интересной. И конечно инженеров в ПТУ научить невозможно, но и в вузе тоже не все просто, можно дать навыки и сформировать правильное мышление, научить человека ориентироваться в информации, а дальше только самообразование.
no subject
Date: 2012-04-23 01:26 pm (UTC)no subject
Date: 2012-04-23 01:38 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-04-23 01:26 pm (UTC)no subject
Date: 2012-04-23 01:35 pm (UTC)Думаю, что это как с любой около-инженерной специальностью уже лет 100. Настоящий профи получал образование как добавку (я бы даже сказал - небольшую добавку) к собственным умениям.
Большая часть работы - грязная и малоквалифицированная, в смысле программирования - кодерство, в смысле инженерии 20-30 лет назад - черчение на кульмане и выискивание правильной толщины профиля по справочнику. Для такой работы формальное образование очень полезно.
Те люди, которые раньше могли спроектировать нестандартный мост, а сейчас - операционную систему, скорее всего могли обойтись и без полного курса соответствующего института. Кодеры и чертежники - думаю, нет.
no subject
Date: 2012-04-23 01:42 pm (UTC)В мое время это было -- анализ проблемы, синтез решения, запись на тарабарском языке.
А теперь каждый умеющий что-то калякать на тараборском языке -- крутой программист.
no subject
Date: 2012-04-23 02:17 pm (UTC)И не пудрить потом людям мозги, называя их выпускников программистами.
no subject
Date: 2012-04-23 01:43 pm (UTC)no subject
Date: 2012-04-23 02:13 pm (UTC)no subject
Date: 2012-04-23 02:41 pm (UTC)Вообще, в устных спорах всегда говорю, что трудно найти более противоестественный вид деятельности для человека, чем программирование. Смысл в том, что настоящим программистом может стать только очень специальный вид человека и он не может существовать в рамках социума.
Те, кто живут социальной жизнью и называют себя программистами, таковыми не являются, они - лишь вызывальщики функций. Или имеют IQ настолько высокий, чтобы имитировать социальные функции :)
no subject
Date: 2012-04-23 02:42 pm (UTC)no subject
Date: 2012-04-23 02:55 pm (UTC)no subject
Date: 2012-04-23 03:04 pm (UTC)2. Я не встречал людей, которые научились тому программированию, которое преподают в вузах, в вузе без какой-либо подготовки (тот же паскаль или бейсик в школе был у многих). Если и не было, то застревали на уровне if/for.
3. Обычно человек, который идёт учиться на программиста, уже умеет класть руби на рельсы или кодить на ПХП, что не имеет ничего общего с тем, что преподаётся в вузе.
4. Если ему не повезло, то в вузе будут унылые циклы на паскале, а потом выкладывание кнопок на форму в дельфах в качестве ООП.
5. Если ему повезло, то ему вынесут мозг теориями алгоритмов, структур данных, реляционных БД, ООП, ФП, обильно смешанными с соответствующей математикой.
6. Если ему очень повезло, то ему ещё и смогут объяснить, как это сочетается с укладкой руби на рельсы.
7. Навыкам цеховым, типа аккуратного комментирования, тестирования, совместной реализации его в вузе не научат. Научат его уже на работе или в опен-сорсном проекте, если не забанят по привычке.
8. Невезучему студенту придётся изучать всю теорию программирования самостоятельно, на той же работе.
no subject
Date: 2012-04-23 03:11 pm (UTC)Потому как если говорить о кодировщике, то и впрямь можно самоучкой, наверное. Когда речь идет о дизайнере, то тут уже нужен другой образ мышления и другой кругозор, что ли.
Сама я из "мамонтов": заканчивала вуз в начале 80-х, "автоматизированные системы управления" это тогда называлось, чисто программированию в те годы не учили. И Понятно, что училась в институте "с нуля": никакой вычислительной техники в "домашнем обиходе" тогда не было ни у кого.
Работаю программистом с самого начала и посейчас, уже 30 лет: начиная с PL/1(советские ЕС-ки), через Ассемблер (VAX), ну и персоналки потом когда появились, начиная с MS Dos и C# сейчас + большинство типов БД какие были (Adabas, DB2, FoxPro, Access, Sql Server, Oracle). Россия, Украина, Израиль, Канада.
Из того, чему учили в институте пригодилась практически вся математика, теория информации (алгоритмы и структуры данных) и теория вероятностей (у нас ее отдельно как курс давали).
Понятно, что просто "учить языкам" и tools в универе - бесполезно. С их-то нынешним разнообразием и скоростью появления нового.
no subject
Date: 2012-04-23 03:26 pm (UTC)Почему с нуля? Ни математику, ни физику с нуля не учат.
no subject
Date: 2012-04-23 04:01 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2012-04-23 03:35 pm (UTC)Поэтому, как мне кажется, программа любого технического факультета должна быть нацелена не на освоение какой-то конкретной технологии, а на то, чтобы студент привык смотреть на проблему в целом. Например, чтобы на вопрос как отсортировать массив студент умел не только отвечать java.util.Collection.sort(), list.sorted(), #include ; std::sort() ну и т.д. , а знал, что в худшем случае это займет квадратичное время от количества элементов, что алгоритмы сортировки можно неплохо распараллелить, ну и, что немаловажно, конкретное название функции всегда можно найти в интернете.
no subject
Date: 2012-04-23 04:39 pm (UTC)Когда я преподавал введение в программирование (в североамериканском университете), на группу из 100 человек было обычно несколько студентов, которые начинали с нуля, которым было учень интересно, и у которых все получалось, они просто раньше никогда не пробовали программировать. Непропорционально многие из них были студентки. Не все способные школьники начнут самопроизвольно программировать, если их не заставить и не показать им, что программирование вообще бывает и может быть интересным. (Я полагаю, что хороших студенток, начинающих с нуля было больше потому, что школьницам с меньшей вероятностью покажут программирование/заставят научиться программировать в школе. Девочки это понятно только пример).
Понятно, что по-настоящему научиться можно только программируя, и университетского образования тут недостаточно.
no subject
Date: 2012-04-23 04:52 pm (UTC)no subject
Date: 2012-04-24 12:51 am (UTC)в 93м, после первого курса матмеха, я отрабатывал в приемке, документы принять и все такое..
легендой стало: мальчик приходит и целенаправленно сует документы на механику
у народа шок: к нам и завкаф шнейдер захаживал поинтересоваться, как к нему народ идет, и сын его, женька, вроде 4й курс тогда механики, поагитировать.. ну не понимал народ что такое механика, подавали на математику
а тут сразу и конкретно
паренек ничтоже сумняшеся: ну, у меня папа механик, и мама механический заканчивала..
PS жена у меня механик))))