Skip to content

Instantly share code, notes, and snippets.

@manpages
Created July 28, 2012 06:12
Show Gist options
  • Save manpages/3192050 to your computer and use it in GitHub Desktop.
Save manpages/3192050 to your computer and use it in GitHub Desktop.
Как перестать беспокоиться и начать программировать

как перестать беспокоиться и начать программировать

Про формат мероприятия. (5мин)

  • Я назвал это воркшопом потому, что это не лекция i.e. будем много общаться с аудиторией. Тем не менее у этого воркшопа есть некий план.

  • Нужно и важно задавать вопросы, но желательно это делать порциями. Я буду останавливаться и проникновенно смотреть в глаза, пытаясь уловить в них тень непонимания. Если есть необходимость в том, чтобы я перестал нести непонятный бред и заговорил на человеческом языке — меня — однако — можно и нужно прервать.

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

  • Это первое мероприятие, на котором я провожу именно этот воркшоп, так что ногами не бить.

  • Все заметки по написанию воркшопа и материалы будут доступны после воркшопа по запросу в твиттер @kruzhki.

  • Не нужно конспектировать. Записывайте только то, что кажется важным записать.


Как перестать беспокоиться... (5мин)

Начнем издалека. Коммуникационный разогрев, my arse.

Разговорная часть

  • Спросить у людей о том, знают ли откуда растут ноги у названия воркшопа.
  • Что они думают про Дейла Карнеги, читал ли кто-нибудь его произведения … Рельсы
  • Мне не нравится творчество мистера Карнеги. Почему я так назвал свой воркшоп? Я прочел одну из его работ из праздного интереса — возможно — он же двигал кем-то из присутствующих, когда они сюда шли. И его книга послужила плодом для размышлений о природе человеческого общения, о том почему одни предпочитают искать способы влиять на ближних и не очень ближних, а другие предпочитают затворничество и угрюмость... В процессе этих размышлений можно прийти к диаметрально противоположным выводам, нежели те, что даны в книге, однако продукт этого размышления дорогого стоит. Я вовсе не призываю читать книгу Карнеги, просто хочу подчеркнуть, что мой воркшоп следует использовать аналогичным образом. Здесь я попробую изложить принципы, которыми следует (на мой взгляд) руководствоваться, чтобы иметь возможность писать хороший код и получать от этого удовольствие, а не трястись в ужасе и раздражении перед монитором компьютера складывая из льдинок слово «Вечность»[a].

… как начать программировать! (20мин)

Разговорная часть

  • Поговорить с людьми о том, где они учатся или учились программированию. Поговорить с теми, кто где-то обучался — что им нравится или не нравится в их обучении.

  • Попробовать вычленить какие-то методологии преподавания программирования из того, что накидали люди. И использовать это в рельсах этой части воркшопа.

Рельсы Основные методики обучения программированию, которые (массово) используются на курсах или в вузах ориентированы на то, чтобы учащийся смог что-то написать на том или ином языке программирования в процессе и по окончанию курса. Формально — это верный «ориентир», иначе вроде как и быть не может. А неизбежность этого понимаешь когда пытаешься написать курс по каким-нибудь плюсам на десять лекций, причём чтобы еще туда практику впихнуть и — по возможности — преферанс и куртизанок. Почему просто посещая курсы (не элитку фортеха) или высшее учебное заведение нельзя начать программировать? На мой вкус дело в том, что никакие курсы не могут дать того, что принято называть непрерывным обучением. Действительно — шести часов предмета «Программирование» в неделю абсолютно недостаточно для того, чтобы каждый отдельно взятый учащийся стал способен написать какой-нибудь свой проектик на изучаемом языке или группе языков. И проблема не в количестве времени проведенном на скамье, а в массовом характере преподавания. Существует некоторый средний учащийся, на которого — хотят того преподаватели и авторы курсов или нет — приходится ориентироваться. Но сферических учащихся в вакууме не бывает.

Сама методология такого рода занятий (если к ней подходят достаточно серьезно) ставит своей целью дать учащемуся обзор понятий, которыми оперирует тот или иной язык программирования, а так же дать возможность ориентироваться в средствах, которые язык предоставляет и наиболее удачно их использовать при написании реального кода. К сожалению, таких выверенных методологически курсов очень мало. Об этом можно долго говорить, искать причины и следствия, но это отдельная тема[b] TODO: «Капитализм и инфляция высшего образования»).

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

Из размышлений и наблюдений как за собственным процессом обучения программированию так и за аналогичным процессом других людей я вижу две методологических концепции начального этапа образования (может рассказать о концепте индивидуального образовательного проекта?) в области программирования —

  1. Изучение области от архитектуры компьютера к низкоуровневым(-ому) языкам(-у), к байт-кодовым языкам, к высокоуровневым языкам, (рассказать про плюсы и минусы подхода, поотвечать на вопросы)

  2. Изучение области от принципов языков программирования (компьютер — чёрный ящик) к классификации языков программирования, к произвольной наиболее привлекательной образовывающемуся группе языков, (рассказать про плюсы и минусы подхода, поотвечать на вопросы).

Суть этих методологий заключается в том, что чтобы чем-либо заниматься нужно иметь в этом чём-то background некий. Можно проиллюстрировать примером школьной геометрии, наращиванием абстракций в математике.[c]

Обучение своей нейронной сети с учителем — это немаловажно. В процессе изучения реальных областей человеческой деятельности каждый из нас сталкивается с трудностями. Ни в коем случае — изучая архитектуру компьютеров или принципы языков программирования (да и в общем-то что угодно) — нельзя становиться принципиальным самоучкой. Если возникают какие-то затыки с фундаментальными вещами, нужно задавать вопросы людям, которые готовы на них отвечать — можно написать мне мейл[d], написать на твиттер @kruzhki, в IRC на memoricide или спросить на freenode (рассказать пару слов про то, что IRC жив и про то, что такое openprojects.net/freenode.net).


Что программировать? (30мин)

(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 даёт замечательный простор для обучения программированию,
  • почему имеет смысл держать линупс и работать в нём

Сноски см. ниже — в комментарии к гисту.

@manpages
Copy link
Author

Комментарии от друзей:
[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:
да, кода мало, в этом вся фишка функциональщины ;). а я в процессе переписывания открывал для себя чудный мир Э-га просто. чего б не пооткрывать, если за это деньги платят?

@2garryn
Copy link

2garryn commented Jul 30, 2012

ух как много я накомментировал)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment