Про формат мероприятия. (5мин)
-
Я назвал это воркшопом потому, что это не лекция i.e. будем много общаться с аудиторией. Тем не менее у этого воркшопа есть некий план.
-
Нужно и важно задавать вопросы, но желательно это делать порциями. Я буду останавливаться и проникновенно смотреть в глаза, пытаясь уловить в них тень непонимания. Если есть необходимость в том, чтобы я перестал нести непонятный бред и заговорил на человеческом языке — меня — однако — можно и нужно прервать.
-
Все здесь имеют разный опыт программирования, поэтому я попытался сделать воркшоп как можно более фундаментальным, понятным любому, кто хочет понять.
-
Это первое мероприятие, на котором я провожу именно этот воркшоп, так что ногами не бить.
-
Все заметки по написанию воркшопа и материалы будут доступны после воркшопа по запросу в твиттер @kruzhki.
-
Не нужно конспектировать. Записывайте только то, что кажется важным записать.
Начнем издалека. Коммуникационный разогрев, my arse.
Разговорная часть
- Спросить у людей о том, знают ли откуда растут ноги у названия воркшопа.
- Что они думают про Дейла Карнеги, читал ли кто-нибудь его произведения … Рельсы
- Мне не нравится творчество мистера Карнеги. Почему я так назвал свой воркшоп? Я прочел одну из его работ из праздного интереса — возможно — он же двигал кем-то из присутствующих, когда они сюда шли. И его книга послужила плодом для размышлений о природе человеческого общения, о том почему одни предпочитают искать способы влиять на ближних и не очень ближних, а другие предпочитают затворничество и угрюмость... В процессе этих размышлений можно прийти к диаметрально противоположным выводам, нежели те, что даны в книге, однако продукт этого размышления дорогого стоит. Я вовсе не призываю читать книгу Карнеги, просто хочу подчеркнуть, что мой воркшоп следует использовать аналогичным образом. Здесь я попробую изложить принципы, которыми следует (на мой взгляд) руководствоваться, чтобы иметь возможность писать хороший код и получать от этого удовольствие, а не трястись в ужасе и раздражении перед монитором компьютера складывая из льдинок слово «Вечность»[a].
Разговорная часть
-
Поговорить с людьми о том, где они учатся или учились программированию. Поговорить с теми, кто где-то обучался — что им нравится или не нравится в их обучении.
-
Попробовать вычленить какие-то методологии преподавания программирования из того, что накидали люди. И использовать это в рельсах этой части воркшопа.
Рельсы Основные методики обучения программированию, которые (массово) используются на курсах или в вузах ориентированы на то, чтобы учащийся смог что-то написать на том или ином языке программирования в процессе и по окончанию курса. Формально — это верный «ориентир», иначе вроде как и быть не может. А неизбежность этого понимаешь когда пытаешься написать курс по каким-нибудь плюсам на десять лекций, причём чтобы еще туда практику впихнуть и — по возможности — преферанс и куртизанок. Почему просто посещая курсы (не элитку фортеха) или высшее учебное заведение нельзя начать программировать? На мой вкус дело в том, что никакие курсы не могут дать того, что принято называть непрерывным обучением. Действительно — шести часов предмета «Программирование» в неделю абсолютно недостаточно для того, чтобы каждый отдельно взятый учащийся стал способен написать какой-нибудь свой проектик на изучаемом языке или группе языков. И проблема не в количестве времени проведенном на скамье, а в массовом характере преподавания. Существует некоторый средний учащийся, на которого — хотят того преподаватели и авторы курсов или нет — приходится ориентироваться. Но сферических учащихся в вакууме не бывает.
Сама методология такого рода занятий (если к ней подходят достаточно серьезно) ставит своей целью дать учащемуся обзор понятий, которыми оперирует тот или иной язык программирования, а так же дать возможность ориентироваться в средствах, которые язык предоставляет и наиболее удачно их использовать при написании реального кода. К сожалению, таких выверенных методологически курсов очень мало. Об этом можно долго говорить, искать причины и следствия, но это отдельная тема[b] TODO: «Капитализм и инфляция высшего образования»).
Таким образом, становится более-менее ясно, что помимо изучения программирования на курсах или в учебном заведении чтобы начать программировать и получать при этом от этого положительные эмоции при понимании того, что делаешь нужно что-то еще.
Из размышлений и наблюдений как за собственным процессом обучения программированию так и за аналогичным процессом других людей я вижу две методологических концепции начального этапа образования (может рассказать о концепте индивидуального образовательного проекта?) в области программирования —
-
Изучение области от архитектуры компьютера к низкоуровневым(-ому) языкам(-у), к байт-кодовым языкам, к высокоуровневым языкам, (рассказать про плюсы и минусы подхода, поотвечать на вопросы)
-
Изучение области от принципов языков программирования (компьютер — чёрный ящик) к классификации языков программирования, к произвольной наиболее привлекательной образовывающемуся группе языков, (рассказать про плюсы и минусы подхода, поотвечать на вопросы).
Суть этих методологий заключается в том, что чтобы чем-либо заниматься нужно иметь в этом чём-то background некий. Можно проиллюстрировать примером школьной геометрии, наращиванием абстракций в математике.[c]
Обучение своей нейронной сети с учителем — это немаловажно. В процессе изучения реальных областей человеческой деятельности каждый из нас сталкивается с трудностями. Ни в коем случае — изучая архитектуру компьютеров или принципы языков программирования (да и в общем-то что угодно) — нельзя становиться принципиальным самоучкой. Если возникают какие-то затыки с фундаментальными вещами, нужно задавать вопросы людям, которые готовы на них отвечать — можно написать мне мейл[d], написать на твиттер @kruzhki, в IRC на memoricide или спросить на freenode (рассказать пару слов про то, что IRC жив и про то, что такое openprojects.net/freenode.net).
(TODO: расписать подробнее. Хотя большого смысла нет, у меня это в голове. Посмотрим на рецензии ;) )
Ля-ля-ля кто чего писал, кто каким ide пользовался, кто какими прогами пользуется, кому чего не хватает.
Рельсы Собственно ядро и главная часть воркшопа. Надо рассказать про
- личные проекты
- надо начинать писать код
- рассказать про то как я писал стол для мтг на Java, проиллюстрировать необходимость и первостепенность практики. По логике Learn -> Think -> Create.[e]
- project euler
- code jam’ы
- не стеснятся проиграть, не боятся выполнения задач
- командное программирование и основы DRCS (git’a, mercurial’a),
- личные проекты в контексте github, не бояться коммитить бред.
- доводить проекты до пруф оф концепта хотя бы
- не бояться[f] полностью переписать проект[g]
- не стирать репозитории
- затронуть вопрос ремесло vs искусство vs наука
- ремесло - энтерпрайз-говно, рассказать про свой опыт
- искусство - от брейнфака до java, всюду есть место хоршему коду.
- наука - академичность 63го года применительно к базовым понятиям программирования недопустима. Нелепо говорить, что программа - это имплементация алгоритма, нелепо говорить, что итератор — это интегер в цикле фор (реальные истории из универской жизни) и т.д. Эта псевдонаучность никому не нужна. Реальное место академичности в сложных алгоритмически областях или областях смежных наук — теория сложности, алгебра отношений, квантовые МТ, биоинформатика... Остальное — либо ремесло, либо искусство, tertium non datur.
- почему F/OSS даёт замечательный простор для обучения программированию,
- почему имеет смысл держать линупс и работать в нём
Сноски см. ниже — в комментарии к гисту.
Комментарии от друзей:
[a]Artem Golovinsky:
Другое слово выбери:) Например "жопа"
Manuel Pages:
в этом и прикол. у современной молодежи сюжет выкладывания из льдинок слова «вечность» из «Снежной Королевы» будет ассоциироваться с этим анекдотом.
[b]Aleksejs Popovs:
Чем жеж она отдельная-то? То есть всё ок, проблему ты поставил, описал весьма подробно, остается один вопрос — а делать-то с ней что?
Я бы попытался рассказать о том, как вообще можно «иметь возможность писать хороший код и получать от этого удовольствие», о том, чем программирование может быть бесконечно круто.
Как-то так.
Jonns Mostovoys:
Сорри, я заснул. Сейчас продолжаю писать текст...
[c]Jonns Mostovoys:
Пометка — нормальными словами это всё говорить.)
[d]Jonns Mostovoys:
примечание для заграничных коллег — у рсмк очень маленькая аудитория, это вам не спбсмк, где предложение писать по любым фундаментальным вопросам на мейл завалит ящик :)
[e]Artem Golovinsky:
Learn->think->create->re-think->re-learn->recreate
Manuel Pages:
Don't over-learn and don't over-think, use more time to create.
Artem Golovinsky:
use more time to create bad-designed and dirty and unsufficiently code //fixed
[f]Artem Golovinsky:
ться
Manuel Pages:
1:1
[g]Artem Golovinsky:
Сильнозависимая тема.
Manuel Pages:
Речь тут пойдет о том говнокоде, который ребята будут писать поначалу. Ясно что они будут делать архитектурные ошибки.
Я вот например свою одну проприетарную тему на Э-ге переписывал с нуля шесть раз за последние полгода, в итоге сдал весьма няшный код. :)
Artem Golovinsky:
видимо у тебя просто много времени и мало кода. Этот коммент слегка противоречит предыдущему комментарию. Я считаю что все-таки нужно больше времени уделять дизайну системы
Manuel Pages:
да, кода мало, в этом вся фишка функциональщины ;). а я в процессе переписывания открывал для себя чудный мир Э-га просто. чего б не пооткрывать, если за это деньги платят?