Интервью«Программирование стало инструментом дизайна»
Сергей Сурганов рассказывает о том, как правильно учиться и учить программированию
Текст
Олег Акбаров
Фото
Шестого сентября стартует курс в Moscow Coding School по основам JavaScript от бывшего арт-директора «Стрелки» Сергея Сурганова. Look At Me узнал у него, как правильно преподавать программирование, почему порог входа в профессию снижается и из-за чего функциональная парадигма набирает популярность.
Я занимался кучей разных вещей — от рисования и музыки до написания текстов, и во всём этом очень много случайностей. Журналистика, дизайн и программирование на каком-то глубоком уровне очень похожи. Все они про коммуникацию, передачу информации и знания. И во многом все эти профессии сегодня «цифровые». В них без знания компьютера сегодня очень тяжело, и соответственно, если ты со всем этим хорошо управляешься, это тебе даёт огромный буст.
В поведении дизайнеров есть определённый паттерн. В какой-то момент они пытаются поменять род деятельности и начинают заниматься леттерингом, каллиграфией, программированием, рисованием картин, бегом. Есть куча вещей, которые позволяют отвлечься от того, что ты достиг потолка в своей профессии, как тебе кажется, и ты пытаешься из этого вырваться. Я восхищаюсь чуваками, которые умудряются в своей профессии годами сохранять свою фишку, ничего не меняя, которые могут отвлечься, но не потерять себя.
В моем случае программирование стало просто инструментом дизайна. Когда ты готовишь макет, то рано или поздно сталкиваешься с ограничениями, которые можно преодолеть, только зная устройство среды, её механику. Когда ты профессионально занимаешься каким-то делом, ты являешься ремесленником, и нужно хорошо понимать форму, материал и среду, с которыми ты работаешь. Для современного цифрового человека важно знать то, как устроен цифровой мир. Чем больше понимания, тем меньше страха, больше свободы, да и вообще проще жить. И здесь не важно, чем именно ты занимаешься: разрабатываешь прототип или автоматизируешь типичные рабочие задачи и просто понимаешь, что как устроено. Даже SMM-специалист может спокойно воспользоваться этими навыками, просто понимая, как работает ранжирование и алгоритмы.
Знания о том, как это всё технологически устроено, у меня были, и главное было — найти стимул, которым в моём случае стал Брет Виктор, в своё время взорвавший Сеть своими видео крутых концептов. Мне очень хотелось хоть чуть-чуть приблизиться к его уровню. Знаете, есть такая мечта о человеке да Винчи, который всё умеет. Аналогия этого образа есть в среде разработчиков: full stack developer — чувак, который может сделать всё, от front-end’а до back-end’а.
Чем больше понимания, тем меньше страха, больше свободы, да и вообще проще жить
У меня возникло желание неискушённого выскочки стать дизайнером, который будет разбираться в JavaScript не хуже программиста. Когда ты полностью отдаёшься делу, погружаешься в него со всей любовью, ты понимаешь, что у тебя это выходит лучше, чем у кучи других людей. К тому же я стараюсь подходить к предмету своего интереса максимально эффективно. Мне недостаточно просто изучать JavaScript, мне нужны книги получше, хорошие видеокурсы и самый краткий путь к достижению цели. Это постоянный поиск лайфхаков.
Когда MCS объявили о начале работы, я написал пост в Facebook, в котором раскритиковал их подход. Меня лично смутил акцент на визуальном, внешнем, на атрибутах и признаках моды. Мне не хотелось просто ругать инициативу на самом начальном этапе, я хотел принять посильное участие. В этом и был мой основной стимул.
С одной стороны, хочется дать человеку максимально большой объём знаний и навыков. С другой стороны, мой опыт убеждает меня в том, что за такой короткий срок невозможно обучить человека свободно работать с кодом. Дело в том, что JavaScript очень простой язык, но какие-то из его концептов кажутся людям очень сложными. Основная цель моего курса — дать как можно больше таких вещей, опустив все эти плохие объяснения. После этого у слушателей должна появиться карта знаний. Ну и в целом стоит задача снять страх и показать инструменты, которые помогут учиться дальше. Самообучение — это отличительная особенность программистской культуры.
Когда занимаешься самообразованием, сложнее всего выбрать индивидуальный, подходящий именно тебе путь. У всех своя мотивация: кто-то хочет просто побаловаться, кто-то поглубже узнать, кто-то хочет профессионально заниматься программированием. Люди, которые сегодня получают дополнительное образование на курсах и интенсивах, часто пытаются исправить ошибки, которые привели их к тому, что они окончили тот или иной вуз и тем самым вышли на определённый путь развития. Порой это очень тяжело исправить — отсюда стереотип, что человеку проще считать, что он определённого склада ума. А когда он постепенно понимает, чем он хочет заниматься, и ему надо меняться, то ему на помощь приходят все эти курсы и онлайн-образование.
↑Книги, которые рекомендует Сергей Сурганов
Многие авторы книжек по программированию грешат тем, что забывают, каково это — быть новичком. Они не объясняют сам концепт функции, как «чего-то, что возвращает значение». Для них это давно устоявшиеся аксиомы, а людям это совершенно не очевидно. Пройдя сравнительно небольшой путь, я сам начал забывать, что что-то может казаться неочевидным. Ну и конечно, программирование требует навыков формального мышления и знания логики, которые не у всех одинаково развиты. Кому-то сложнее с этим работать. Здесь и возникает челлендж объяснить очень сложную вещь максимально простым языком.
Программирование — это навык, и без практики здесь ничего не получится. Тем и плохи многие учебники: ты читаешь, смотришь примеры, но ничего не делаешь руками. Это два совершенно разных состояния ума. Очень важно ощутить ступор перед простой задачей. Я постоянно ввожу учеников в это состояние. Они находятся постоянно в стрессе и отвечают на вопросы. Порой человек начинает раздражаться, когда ты требуешь ответы на простые вопросы а-ля 2+2, но зато потом эти вещи отлетают от зубов.
Можно читать очень много полезной литературы, но пока не придёшь к решению реальных задач, программистом не станешь
Когда Цукерберга спросили, почему он любит программирование, он ответил: потому что оно помогает создавать. Можно читать очень много полезной литературы, но пока не придёшь к решению реальных задач, программистом не станешь. Это может быть всё что угодно — от фикса маленького бага до создания игры или приложения. Начинающим могу пожелать лишь как можно скорее выйти на эту прямую. Нет ничего лучше ощущения, что время сливается в безразличный поток, когда перед тобой стоит решение реальной задачи.
Код на JavaScript
Мы все дети цифровой культуры. Я уже не могу представить свою жизнь без компьютера. Всё, чему я научился, невозможно без интернета. Все те, о ком ты говоришь, заходят с разных сторон на одно и то же поле. Аудитории разные, но порой удивляешься, насколько они друг с другом перемешиваются, всё сливается в единую кучу и отличия становятся совершенно не важны.
С каждым годом вход в профессию всё больше упрощается. Ещё 30 лет назад у тебя был выбор учить Ассемблер, C++, Lisp или C. Небольшой выбор. Как и варианты использования этого инструментария: системное программирование, драйвера и простые компьютерные игрушки. А сегодня можно делать всё что угодно.
Есть хорошая лекция Дэвида Хенсена на RubyConf, в которой он говорит, что начал заниматься программированием довольно поздно. Он разделяет Computer Science и программирование. Компьютерная наука, с её эффективными алгоритмами и матаном, — крайне важная область, и в ней осели суперумные люди, которые работают с адронным коллайдером, разрабатывают поисковые алгоритмы и пытаются оптимизировать 3D-графику. А типично программистская задача сводится к вопросам информационной архитектуры. Он про то, чтобы с помощью языка объединить огромное количество разных компонентов, фреймворков, зависимостей и создать работающую информационную систему. Это проектирование информационных систем. Там очень много готового, уже написанного кода. Тебе не приходится писать его полностью самому.
Большинство современных стартапов в области веб-программирования больше напоминают собирание пазла. Linux, фреймворки и куча примочек для браузера уже написаны за тебя. Ты играешь в Lego, но такое, которое позволяет при желании нырнуть в глубь и изменить форму детальки. Если есть желание и интерес работать с исходными вещами, то ты будешь больше цениться, потому что будешь лучше это понимать.
Один из самых мощных трендов последнего времени — возрастающая популярность JavaScript. Он всё время был в наших браузерах, но в 2000 году крутые чуваки из индустрии утверждали, что JavaScript — полное г***. И он действительно был плох. Потом было несколько вспышек, которые усилили его популярность. К примеру, когда «Гугл» активно начал форсить Ajax в 2006-м. Потом, в 2008-м появилась библиотека jQuery, позволившая делать сумасшедшие вещи. Всё, что сегодня мы видим в вебе, родом оттуда. Её используют половина сайтов в мире. Третья вспышка — появление в 2009-м Node.js, когда JavaScript стал серверной платформой. Так получилось, что если сегодня ты хочешь выучить один язык, это должен быть JavaScript, потому что на нём можно писать практически всё.
По закону Мура увеличивающаяся скорость процессоров не даёт пропорционального прироста производительности. Увеличивающееся количество ядер требует нового подхода — распределённых вычислений. Классическая императивная парадигма программирования: C++, Java слабо подходит для него. Если коротко, то там сложнее программировать для нескольких процессов одновременно: появляется ситуация соревнования, когда два процесса пытаются получить доступ к одной ячейке памяти. В функциональном программировании — наоборот. В этой парадигме проще делать «распределённые вещи».
Примерами функциональных языков являются Haskell и Erlang. Второй известен по приложению WhatsApp — на нём написана его серверная часть. Во время пиковых нагрузок сервера обслуживали около 100 млн человек. Особенность функционального программирования состоит в том, что на нескольких машинах можно обслужить огромное количество юзеров. Таким образом, закон Мура обходится за счёт софта, а не железа. Плюс рано или поздно появятся квантовые компьютеры, где на уровне битов и байтов всё устроено по-другому. Для них функциональная логика тоже подходит в большей степени. Можно сказать, что язык типа Haskell — это язык будущего.
Комментарии
Подписаться