Pull to refresh

Comments 47

> Работа академии

«academia» == «научное сообщество», более устоявшийся термин

> по крайней некоторых

не хватает слова?

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

Я тоже преподаю, но не CS. Зато на работе часто приходится иметь дело с программистами порой имеющими Ph.D в области какой-нибудь теории категорий, которые не способны написать цикл.
И наоборот тоже бывает.
Вот и я оговорю — актуален Бьярнэ, актуален…
UFO just landed and posted this here
Пусть кто-то только попробует поддержать холивор! >_< Надоело уже.
Я очень долго пытался перевести на «литературный русский» выражение:
Производственный менеджер: «Они не могут написать программу, чтобы выбраться из бумажного пакета.»

(В оригинале: Industrial manager: «They can't program their way out of a paper bag.»)
Думаю, что дословный перевод не передает смысл фразы. Может быть его можно передать так: «Они не в состоянии программировать»?
It's referring to the expression 'to fight one's way out of a paper bag'. If you couldn't fight your way out of it, you are very weak indeed.
Они не могут придумать алгоритм, как выбраться из бумажного пакета
В прошлом посте и качество перевода выше, и оформление на должном уровне.
Повторение мать учения :)
Не лишайте человека славы — он старался! :)
Да и предыдущему переводу рекламку сделал :)
как минимум, спасибо автору за еще одну возможность прочесть кучу новых познавательных комментариев )
Как мне кажется, проблема затронута интересная.

Лично я уверен что обучая людей программированию, надо обучать более широко.

Более того, я лично уверен, что в начале, надо обучать именно «быдлокодерству», ибо если человек научится кодить, то он уже сможет начать писать какой нибудь свой собственный проект, или даже работать в какой нибудь студии 3-го сорта (ибо сейчас даже в студиях 2-го сорта всё портят толпы дипломированных специалистов, не умеющих даже сделать сайт-визитку или простенький инсталятор прикладной программы.)

И только после того как человек понял на практике «куда он попал» уже можно ему дать выбор, учиться далее (познавать какие алгоритмы используются для сжатия, интерполяции, проекции, и.т.д. углублять изучение алгебры, геометрии, и.т.д.)

На сегодняшний день ВУЗ-ы выпускают не программистов, а математиков которые потенциально могли бы стать лучшими программистами (далеко не все из них станут, более того только единицы станут) а вот именно простых-программистов (не тех которые будут разрабатывать системы управления ракетами, а тех кто будет клепать р2р клиенты, почтовые серваки, сайты визитки в конце концов) и тем более тестеров, приходится обучать с нуля уже непосредственно на рабочем месте, и это большая проблема на мой взгляд, ибо сделать это в разумные сроки, не в ущерб производительности, мне лично не представляется возможным.

В итоге никто не хочет брать программистов без опыта работы, и возникает моя любимая рекурсия «чтоб быть программистом, надо 5 лет быть программистом.» (и выйти из этой рекурсии можно либо по везению, найдя фирму которая обучит, либо через фриланс и опенсорс, после обучения на частных курсах)
ИМХО, как раз-таки быдлокодерству в этой стране и пытаются учить на CS-ориентированных специальностях: рассказывают, что такое переменные, как писать циклы на бейсике или паскале… В лучшем случае студенты обо всем этом забывают. В худшем — начинают применять на практике, создавая простыни многостраничных статических методов, оперирующих статическими же членами…

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

Другое дело — shareware-софт, но с обязательной долей прибыли студентам. Более подходящего стимула для обучения придумать просто нельзя (сейчас на 8 копеек уже не погуляешь). Правда, в наших реалиях могут быть существенные проблемы с налоговой, бухгалтерией ВУЗа и прочим. Ну и руководство наверняка без доли остаться не захочет, ага. Но тут уж дело такое…
Вы смешиваете управление проектом и правильность написания кода. Те риски, на которые вы ссылаетесь, совершенно нормально и штатным образом учитываются при начальной разработке проекта. Fail — тоже результат, его тоже нужно закладывать.
Если не делать ничего — ничему не научишься. Студенты-хирурги учатся препарировать трупы, чтобы потом хорошо и правильно оперировать людей. Лишая студентов участия в проектах, вы лишаете их опыта.
а кто гарантирует, что выпустившись, бывший студент не наколет аналогичных дров? в данном случае есть хотя бы опыт и страховка препода. тем более, если препод будет выступать в роли архитектора, а студенты сугубо в роли кодеров, то риски можно снизить. так же предлагать сие не всем подряд, а только заинтересованным и/или обязательным. таких немного, но они есть.
а вот касаемо shareware. идея хорошая, но плоха тем, что реализовываться будет только тот минимум функционала, который доступен и понятен студентам, в отличие от четких задач заказчика. плюс важно придумать продаваемую идею, что явно выходит за рамки компетенции разработчика. с другой стороны, апп сторы и андроид маркеты дают достаточно интересную площадку для экспериментов.
+1 насчёт коммерческих проектов. Преподавателю надо очень сильно любить шампанское, чтоб идти на такой риск. Полно opensource проектов, и среди них есть такие, которые возглавляются очень хорошими инженерами — бери и участвуй. Если будет чем гордиться, поставишь потом в резюме ссылку на репозиторий со своим кодом.

Одно время работал в R-style в «Кирилл и Мефодий».
Так вот: они вплотную работают с Брянским Государственным Университетом.
Студенты IT кафедры ( не помню точно название) с 3-4 курса работали над коммерческими проектами, получая неплохие для Брянска деньги и главное учились реальному взаимодействию: системы контроля версий, планирование заданий и т.д. и т. п.
С одной стороны — относительно дешевая раб. сила, с другой стороны — опыт разработки в живом проекте.
Всем этим рулили зав. кафедры и доценты кафедры.
Мне кажется статья не о том учить ли людей сперва писать циклы, или рассказывать им сперва теорию типов? (мое мнение циклы и алгоритмы сперва, это интересная и отдельная тема, но статья не о том).
Страуструп предлагает специализировать КН. Это как сейчас инженер или технолог не может быть просто инженером или технологом, он должен быть инженером или технологом чего-то. Нельзя учить просто инженерии, или технологии, получится бестолково, хотя в инженерии масса методологии зарыта. Но обучение инженеров проходит всегда в какой-то предметной области. Например технолог по производству железо бетонных конструкций, или инженер газо-турбинных установок. Нельзя учить просто инженерии, как бы это интересно не было.
Так и в КН надо учить понимать предметную область и готовить специалиста в этой самой области. Тогда потенциал человека будет на рабочем месте раскрыт максимально, а пока руководители ориентируются на средничка в толпе и готовы работать с безликой массой среднестатистических программистов, которых можно взаимозаменить, ничего толкового не получится, мы подойдем рано или поздно (скорее рано) к той сложности в программах, и к тому кол-ву багов, которые уже не сможем контролировать дополнительными заплатками и увеличением мощности. И все сломается.))
>> а математиков которые потенциально могли бы стать лучшими программистами
С чего бы? Программирование опирается на опыт и творческое мышление, а не на формулы.

>> В итоге никто не хочет брать программистов без опыта работы, и возникает моя любимая рекурсия «чтоб быть программистом, надо 5 лет быть программистом
Не вижу проблемы. Кто-то запрещает просто кодить «в стол»? обязательно свои поделки пытаться продавать?
Когда они будут достаточно качественными, можно их распространять или устроится в нормальную контору.
Готовый продукт стоит на порядок больше чем корочка «программиста-математика».

Видите ли математика это не только формулы, это еще и логика. Я не очень представляю толкового программиста, которому не прочитали хотя бы семестровый курс по формальным языкам, или он сам не прочитал какую-нибудь книжку на смежную тему.
UFO just landed and posted this here
Хороший программист или плохой не зависит от того может ли он доказать теорему Ферма или нет. Это абсолютно ортогонально. Когда можешь крутить голове сложную многопоточную систему и представлять что-где-когда происходит на любом из уровней, достаточно просто знать своё дело и иметь воображение.
Вы удивитесь, но хороший математик или плохой не зависит от того, может ли он доказать теорему Ферма :) Я думаю, Григорий Перельман бы не смог её доказать при всём желании. У него мозг заточен под другую область математики. Так и с программистами.

На самом деле, давно известно, что программа — это суть одна такая большая теория в рамках интуиционистской логики (есть такой изоморфизм Кэрри-Говарда).

Так что, говорить о том, что программист — это не математик не верно. Программист — это вполне нормальный прикладной математик. Он может этого не знать. Но от этого он только теряет, потому что не может применять всякие интересные алгоритмы и методы из математики в своём творчестве.

Уж поверьте, когда человек знает, что такое есть кольцо вычетов по модулю, то и сортировка IP адресов выходит у него гораздо более красивой и эффективной.
А можно текст на абзацы нормально разбить? Интересная статья, но немного некомфортно читать стену текста.
habrahabr.ru/blogs/personal/80623/
Мне кажется, что в статье идет определенная подмена понятий. Слишком много значений пытаются впихнуть в слово «программирование».
Если рассматривать этот термин, как описание процесса создания программных продуктов, то он включает в себя достаточно много различных этапов и специализаций: (1) маркетинг, предшествующий разработке; (2) проектирование взаимодействия, описывающее взаимодействие человека и программного продукта; (3) проработка внутренней архитектуры продукта; (4) проработка дизайна интерфейса; (5) непосредственно создание программного кода; (6) тестирование. Каждый из этих этапов требует чёткой специализации. Кодер не может и не должен заниматься маркетингом или проектированием взаимодействия. Максимум — участвовать в выработке и управлении общей архитектурой приложения. Дизайнер интерфейса никогда не должен заниматься кодингом. Это не его специализация, не его дело. Если он попытается туда влезть — наступит хаос.
Я согласен, что хороший специалист должен иметь правильное понимание всего процесса. Но возлагать на плечи программиста весь процесс — в корне неверный подход. Так можно поступать только на этапе начального стартапа, но чем быстрее произойдет разделение ролей участников проекта — тем будет лучше для продукта в целом.
И очень много проблем с переводом, ибо смысл иногда совершенно теряется.
Да нет, что Страуструп, что перевод(ы) в «программирование» включают не более чем «software engineering». О всём цикле разработки продукта и продвижения его на рынке речи конечно же не идёт.
Дык, в той дисциплине под названием «Software Engineering», что меня лично учили, как раз и входило изучение всего процесса создания продукта от начального Концепта до Сервисного Пака… Поэтому я искренне не понимаю статью…
Если говорить о том, чему именно надо учить кодеров — это совсем друга постановка задачи! Тут уже надо другими критериями думать! Кого мы готовим? Просто Developer или Developer Manager? Это тоже разные профессии, хотя и сравнимые с «солдатом» и «генералом». DM должен уметь читать код, которые пишут его подопечные, уметь понимать его и править. Но все равно, общей архитектурой приложения управляет не DM, это не его задача! И уж тем более, архитектурой приложения не должен заниматься кодер!
Software engineering — не наука тем более и потому вполне возможно, что там где вас учили, в эти слова вкладывали немного большее :)

В статье программирование — это кодирование и некоторые связанные инженерные практики, безо всякого там менеджмента проектов или, упаси боже, маркетинга. Страуструп считает, что значительная часть работы для программистов подразумевает нечто сложнее, чем быдлокодинг, а следовательно требует университетского образования. К сожалению, негодуэ Бьярнэ, программисты получившее такое образование зачастую не могут даже набыдлокодить.
Программная Инженерия — не наука? Вы это только преподавателям Бауманки не говорите…
iu7.bmstu.ru/
Основные направления обучения:

* Программная инженерия. Принципы и методы проектирования и разработки информационных систем.

Преподаватели Бауманки, после того как прочитают статью и найдут в ней слова «CS is not primarily about computers and it is not primarily a science», возмутятся, но со сравнительным утверждением «Software engineering не наука тем более» врядли будут спорить :)

Если вас коробит это утверждение, замените «не наука тем более» на «не является на просторах ex-СССР дисциплиной с устоявшейся программой». Смысл моего первого абзаца от этого не изменится.
Я вообще не понимаю расхожего здесь термина «быдлокодить». Абсолютно нормально, когда инженер, окончивший станкостроительный институт, не может нормальный шар на токарном станке выточить. Его не этому учили.
Составлять нормальный код, в соответствующем инструментарии, соответствующий принятым нормам и требованиям — это отдельная профессия. Этому не нужно учиться 6 лет на высших курсах. Этому должны учить в соотв. техническом Колледже, но не Университете.
Другой вопрос: нужно ли обязательно сперва закончить Колледж прежде чем идти в Университет? Об этом уже можно спорить. У врачей, например, предварительная практика обязательна. Для программеров — не уверен. Хорошему проектировщику взаимодействия навыки кодера будут только мешать, да и во многих других, смежных с программированием, специальностях навыки кодинга совершенно не нужны.
Термин определён здесь.

Чтоб научиться быдлокодить, достаточно окончить ПТУ, вы абсолютно правы. Страуструп не говорит о быдлокодерах. Он говорит о тех, кто пошёл в университет с целью стать инженером-программистом, которому нужно писать хороший код в больших надёжных производительных системах. И говорит о том, что на выходе не получается даже быдлокодера.

К «счастью» в России не учат ни компьютерным наукам (в русском языке такого устоявшегося термина то и нет), ни прикладному программированию. Так что у нас проблем с обучением нет…
Да, это действительно плохо. Как я не искал, но найти в Украине ВУЗ, где изучают ту же теорию категорий мне не удалось. Хотя, возможно, легкий экскурс в предмет где-нибудь, да есть.
Проблема в том, что:
1. В России практически отсутствуют профессиональные преподаватели «компьютерных наук». Теория и философия, стоящие за современными технологиями, неимоверно многообразны, сложны и абстрактны. И, надо сказать, информатика с ними имеет мало общего, особенно те её части, которые у нас любят преподавать.
2. В России практически отсутствуют профессиональные преподаватели прикладного программирования, во всём его многообразии. От аппаратной архитектуры, и до особенностей ЯВУ. Причина проста — в России специалисту намного выгоднее работать, а не преподавать. Поэтому действительно хороших преподавателей очень мало, и держатся они в основном на энтузиазме.
Знаете, есть такая поговорка: п#деть — не мешки ворочать. Она как никак хорошо подходит к КН. Можно изобретать архитектуру, концепты, паттерны, способы реализации, методологию. Но от этого программ больше не становится.
Если бы вы только знали, сколько хороших, полезных вещей появилось на свет в результате того, что кому-то не хотелось мешки ворочать ;)
CS — наука, программирование — ремесло. Причем ремесло, не требующее сверхвысокого интеллекта или понимания абстрактных областей математики. Нужны только пара навыков и много-много практики — так же как и у представителей любых ремесленных профессий (столяры, сварщики и другие). Разве что поле деятельности пошире будет.

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

Я так понимаю, вопли работодателей идут от того, что они любят нанимать студентов за копейки, а потом настает момент, когда студент уходит, а его шедевры некому поддерживать. Нанимая следующих студентов, работодатель все усугубляет состояние продукта, который в конце-концов доходит до состояния перенасыщенности костылями. Тогда заказчик пытается сэкономить на переписывании и запоздало нанимает специалиста, который все-таки разгребает эту кучу говна, после чего уходит в более рыбное место. Довольный работодатель же снова нанимает студентов, чтобы они быстренько добавили нужный функционал. И снова по замкнутому кругу.
Если честно то Страуструп как раз и говорит что КН — это не наука. Об этом же в первой вводной лекции говорят и Харольд Абельсон и Джеральд Сассман в своем курсе SICP. И оно не связано с компьютерами, КН это знание или образ мышления, и его можно применять и в других инженерных областях.
Sign up to leave a comment.

Articles