Вечные студенты: когда программирование — это постоянная «учеба»

в 9:16, , рубрики: Блог компании Университет ИТМО, Программирование, Университет ИТМО


Если вы выбрали для себя профессию программиста, учеба, как правило, становится вашим постоянным спутником, хотите вы этого или нет. В этой области «выучить что-то раз и навсегда» маловероятно — постоянно появляются новые решения, новые фреймворки, в конце концов, новые языки. В сегодняшнем материале расскажем, почему разработчикам важно оставаться «вечными студентами», что говорит об изучении новых языков статистика Stack Overflow и почему программирование постепенно превращается в метод изучения других дисциплин.

Вечные студенты: когда программирование — это постоянная «учеба» - 1Фото hackNY.org CC-BY

Из области очевидного

Привычка цепляться за старое и игнорировать новое (даже если новое для вас — это Java или Python) рано или поздно может сыграть с разработчиком злую шутку. В этом, например, уверен Джон Грэм-Камминг (John Graham-Cumming), CTO Cloudflare. Рассказывая о том, чему его научили годы программирования, он замечает: «Некоторые чрезмерно увлекаются каким-то определенным языком и пишут только на нем. Это ошибка. Не существует одного-единственного языка, идеального для решения всех задач».

Джон рекомендует всем, кто связан с разработкой, изучать как можно больше различных решений, языков, библиотек. Его поддерживает разработчик Джош Брэггер (Josh Braegger) в своей подборке «антирекомендаций» о том, как наиболее быстро и эффективно перегореть за написанием кода.

Стремиться изучать новое — пусть это и очевидный совет, он, тем не менее, важный. И чем более опытным программистом вы становитесь, тем сложнее ему следовать — как справедливо замечает Джон Грэм-Камминг: «Я уже недостаточно молод, чтобы знать [о разработке] все».


Кто и что изучает: немного статистики

Сооснователь Stack Overflow Джефф Этвуд (Jeff Atwood) в своей статье на Coding Horror рисует еще более драматичную картину: «Классные разработчики очень хороши в программировании, можно сказать, фантастически хороши. Если они в чем-то похожи на меня, они проводят почти каждую секунду бодрствования за компьютером — на протяжении практически всей жизни».

Однако, даже если это и так, время, проведенное в работе за компьютером, можно потратить по-разному — кто-то посвящает его только деловым проектам, а кто-то находит время для сторонних задач и учебных упражнений. Первый вариант, по словам уже знакомого нам Джоша Брэггера, запросто может привести к выгоранию: «Вы начали заниматься программированием, потому что вам это нравилось, так почему бы не продолжать в том же духе? Потратьте немного свободного времени на то, чтобы решить задачу, которая вам интересна».



В пользу этого решения говорят не только красивые слова, но и статистика. Аналитики изучили данные с портала Stack Overflow и пришли к любопытным выводам: программисты используют разные языки и технологии в будни и выходные (а также днем и вечером).

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



Так, например, в «рабочую» группу попали тэги, связанные с технологиями Microsoft (C#, ASP.NET, SQL Server, Excel, VBA).

А в «группе по интересам» оказались относительно новые языки (вроде Swift), а также Node.js, C и C++. Кстати Scala и Ruby on Rails, которые несколько лет назад находились в этой группе, сейчас перешли в категорию «рабочих» языков и стали меньше использоваться по выходным. Еще один пример технологий, интерес к которым просыпается по выходным, — решения для разработки мобильных приложений и игровой движок Unity3D.

Кроме того, аналитики выяснили, что среди четырех языков (C#, C, Java, Python) C#-программисты наиболее «корпоративные» и работают «преимущественно с 9 до 5», в то время как C-программисты больше похожи на «вольных художников»: встают позже, работают дольше, часто оставляют задачи на поздний вечер. Java и Python оказались где-то между этими двумя крайностями (в этом приложении можно сравнить графики динамики обращений к разным технологиям на Stack Overflow в рамках суток).

А подробный рассказ о том, как проводилось исследование, можно прочитать здесь и тут.

Кстати, универсальный «задачник» для разработчика (вне зависимости от выбранного языка) составил один из инженеров-программистов в Google. В списке — задачи на основные разделы программирования, от работы с числами до операций с графикой и мультимедиа-файлами. А поскольку это проект на GitHub, он содержит не только сами задачи, но и варианты решений (чаще всего на Java и Python, но попадаются и решения на Swift, Go и даже Befunge).

Когда обучение новому — это боль

Однако, в процессе изучения нового можно столкнуться и с совершенно неожиданными (и даже шокирующими) задачами. Такую историю приводит разработчик Джо Логри (Joe Loughry), написавший текст под названием «Худшая среда программирования в мире». В 1990 году Джо пришел на работу в компанию, где использовался язык BANCStar. Поэтому в первый день работы Джо увидел примерно следующее:

8607,,,1
11547,15475,22002,22002
1316,1629,1,1649
3001,1316,3,30078
11528,22052,22002,22002
9301,0,1528,1528
31568,10001,800,107
8560,,,1568
8550,210,,
3001,,,
3100,1316,3,30089
11547,15475,22002,22002
3001,1316,3,30089
3001,1317,3,10000
8400,,,
8550,700,801,
3001,,,
9301,0,522,522
3000,1284,3,10001
8500,,3,
8500,,5,
1547,,1,-2301

Между прочим, на то, чтобы привыкнуть к языку и начать его активно использовать, у Джо ушло две недели. На помощь Джо приходили любимые инструменты разработчика на BANCStar — матричный принтер, цветные текстовыделители и папка-скоросшиватель, в которой были собраны распечатки десятков табличных значений из системы. Кстати, распечатки в папке «фанатично обновлялись как только кто-то изменял что-либо более-менее существенное» — все это, естественно, вручную.

Как заявил Джо в своей статье об этом языке, впервые опубликованной в 1997 году, — «[Приводя часть исходного кода] я не слишком волнуюсь по поводу распространения внутрикорпоративной информации, так как прочитать этот код смогут от силы десять человек на планете». На самом деле в начале 90-х этим языком действительно пользовались банковские структуры — хотя он и выглядит как эзотерический язык программирования.

Кстати, единственными допустимыми символами в этом языке являются цифры, знак «минус», запятая (а также перенос строки), а комментировать код категорически запрещается. При этом, средняя длина рабочего файла, написанного на BANCStar, достигала, по воспоминаниям Джо, нескольких сотен (в редких случаях — тысяч) строк.


По сравнению с BANCStar большинство популярных сейчас языков явно «человечнее» куда проще в изучении и использовании. Хотя, как справедливо отмечает Джон Грэм-Камминг, «[Языковые войны] — по большей части удел лузеров, потому что это «спор не по делу». Например, когда я пишу на PHP, результат оказывается ужасным, зато другие люди могут с помощью этого языка творить чудеса». Кто знает, может быть, среди 1350 файлов, написанных на BANCStar, тоже есть свои шедевры, правда, мало кто способен сейчас оценить их по достоинству.

Программирование как стиль мышления

Конечно, пример BANCStar — это исключение из правила. Подавляющее большинство современных языков программирования действительно удобны в изучении. Более того, некоторые разработчики и ученые даже полагают, что сам процесс изучения программирования меняет наши подходы к восприятию новых концепций.

Такой позиции придерживается Аллен Доуни (Allen Downey), профессор информатики в колледже Olin College of Engineering в Массачусетсе и автор ряда книг по программированию. Он вспоминает, что раньше для изучения программирования часто использовалась связка «естественный язык—математическая нотация—псевдокод—код».

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

В качестве примера Аллен Доуни приводит обработку сигналов — с одной стороны, этот раздел радиотехники можно изучать «снизу вверх» — то есть сначала разобрать теорию обработки сигналов (мат. методы преобразования аналоговых сигналов), а потом переходить к написанию приложений. Однако современные языки программирования позволяют перевернуть весь процесс — начать с использования библиотек, реализующих наиболее важные алгоритмы, а уже потом детально разобраться в том, как они работают.

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



Может быть, этот формат «погружения в задачу» и не похож на классическое обучение, но его стоит попробовать — есть вероятность, что умение программировать в будущем станет таким же базовым требованием к изучению новых дисциплин, как чтение, письмо и знание основных разделов математики.

И все же программирование — это не главное

Даже успешные программисты заявляют: программирование в их работе — это не главное. Джефф Этвуд приводит в пример Билла Гейтса, который в одном из выступлений заявил, что после 3-4 лет в профессии программист уже не сможет радикально улучшить свои навыки — если за 3-4 года он не стал «звездой», то вряд ли «выстрелит» впоследствии.



Это приводит нас к парадоксу — получается, опыт и знания, которые мы приобретаем с годами, не превратят нас из «крепкого середнячка» в «супер-кодера». Тогда что же определяет такую возможность? Если отбросить врожденную гениальность, Этвуд заявляет следующее: наш уровень во многом определяется тем, как мы воспринимаем все, что не связано напрямую с разработкой — речь идет об изучении пользователей, бизнес-процессов, особенностей индустрии, в которой занят разработчик.

А это, в свою очередь, дополнительно расширяет «горизонты обучения» — выходит, «всесторонне образованный программист» должен не только «кодить в перерывах от работы» (на новом и более интересном для него языке), быть готов использовать навыки разработчика при изучении других дисциплин (например, разделов физики или математики), но и должен обращать пристальное внимание на все процессы, которые протекают «вокруг разработки». Картина, конечно, утопическая, но представьте, каково было бы вам воплощать в жизнь эти советы, если бы в вашем распоряжении был язык BANCStar и папка с таблицами.



Поделитесь в комментариях своим опытом «непрерывного обучения»: какие языки/фреймворки вы изучаете сейчас и для чего? Какие «сторонние дисциплины», не связанные с программированием, на ваш взгляд, помогают вам лучше справляться с написанием кода?

Автор: itmo

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js