Привет, Хабр!

У нас возможен предзаказ долгожданного второго издания книги "Простой Python". Перевод первого издания вышел в 2016 году и по сей день остается в числе бестселлеров.



Поскольку мы убеждены, что Python — лучший язык программирования для начинающих, а также для работы с data science и машинным обучением, сегодня предлагаем вам перевод несколько мировоззренческого поста с сайта Dropbox, где завершил свою карьеру Гвидо ван Россум — о смысле и незаменимости языка Python.

Ничто так ярко не характеризует XXI век, как всепроникающее влияние программирования. Почти все, чем мы занимаемся, в особенности, на работе, делается через монитор, на котором выводятся результаты колоссальной вычислительной работы, что мы сегодня принимаем как данность. Для тех 99,7% представителей человеческого рода, кто не занимается программированием, все это происходит как будто по волшебству. Как отметил великий писатель-фантаст Артур Кларк, «Любая достаточно развитая технология неотличима от магии».

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

Быть программистом — это не только генерировать идеи, и вы не продержитесь в этой профессии долго, если не умеете с хирургической точностью описывать в коде ваши идеи. «Я немного скептически отношусь к мнению, что важнее всего в данном случае системное мышление, поскольку гораздо проще обрисовать идею системы, чем взять эту идею и превратить ее в рабочий код», — говорит Гвидо ван Россум, создатель и отставной Великодушный Пожизненный Диктатор языка Python. Веб по-прежнему остается за JavaScript, а на Java работает 2,5 миллиарда телефонов под Android, но в программировании широкого профиля и в образовании Python де-факто стал стандартом.

Тот, кто сделал больше всего, чтобы облегчить множеству людей реализацию их идей в коде – это Гвидо ван Россум, отдавший 30 лет жизни языку Python. Причем, он сделал это с непритязательным изяществом и приглушенным юмором. Язык назван в честь гротескного юмористического шоу «Монти Пайтон», а не в честь бирманской змеи. Без лишнего шума язык программирования Python позволил упростить некоторые вещи в программировании, особенно для осмысления.

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

Столь простая идея «машина для человека, а не для человек для машины» — суть всей философии языка Python. Определенно, тот факт, что это интерпретируемый, а не компилируемый язык, подразумевает, что программист видит эффект от написанного кода сразу же, как написал его, без необходимости перекомпилировать его после каждого изменения. Сегодня такая практика весьма распространена, но многие годы назад она воспринималась неоднозначно, так как казалось несомненным, что чем быстрее компьютер — тем лучше. Пересмотр этого убеждения произвел значительный положительный эффект на продуктивность программистов.

«Существует целая куча распространенных задач программирования, которые на Python решаются проще», — говорит ван Россум. — «Для тех, кто пока не программист, а только хочет им стать, порог вхождения в Python особенно невысок». Действительно, на многих курсах по программированию начинают отказываться от Java в пользу Python, поскольку он гораздо понятнее для начинающих. Причины, лежащие в основе такого перехода, сложны, в них много факторов, каждый из которых позволил устранить немного шероховатостей. Суть философии в основе всех улучшений: у всего обязательно должно быть назначение. Когда избыточного кода нет, проще сосредоточиться на том, на чем действительно нужно сфокусироваться. «В Python важен каждый символ, который вы вводите», — говорит ван Россум.

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

Благодаря столь спокойному и простому дизайну языка, проще понять, что происходит в коде. «Python кажется мне невероятно наглядным», — говорит ван Россум. — «Читая Python, я определенно воспринимаю его структуру как двухуровневую, а не как одноуровневую. Вероятно, это потому, что в Python важны отступы, а, возможно, и потому, что мне просто нравится мыслить визуально».

Разумеется, не ему одному свойственно визуальное мышление. Все мы в какой-то степени мыслим именно так. Но он особенно акцентирует роль визуального компонента в познавательной деятельности. «Если текст плохо отформатирован, меня это может привести в бешенство. Тогда у меня в голове сбивается разбор текстового потока, и в таком смысле действительно можно утверждать, что я мыслю на Python», — признает ван Россум. – «Я гораздо лучше усваиваю код, если он хорошо отформатирован». Если отступы в коде расставлены произвольно, то требуется больше информации, чтобы распутать смысл кода, чем если у каждого отступа четкое назначение, как в Python. Поэтому с Python и удобно работать: вам приходится переварить меньше информации, чтобы понять, что происходит.

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

Клайв Томпсон, автор книги «CODERS», рассказывает, что «готовясь к созданию книги, разговаривал со множеством разработчиков, которые совершенно влюблены в Python. Практически все без исключения говорили что-то вроде «Python красив»». Им нравилась удобочитаемость, они находили, что не составляет труда мельком взглянуть на код Python и понять его назначение. Этот язык, лишенный фигурных скобок, со строками, уложенными как аккуратные полочки, в самом деле напоминает современную поэзию». Также они считают, что на Python интересно писать, а это гораздо важнее, чем может показаться на первый взгляд. Томпсон пишет, что, «знакомясь с кодером, вы видите перед собой человека, чья основная повседневная работа полна бесконечных неудач и гнетущей фрустрации».

Когда уважение к времени программиста встроено в язык, это интересным образом отражается на сообществе специалистов по этому языку. Существует социальная философия, проистекающая из Python: программист отвечает за свой код, зная, что пишет его для других людей. Существует негласный тезис, который в своих текстах и лекциях активно продвигает сам ван Россум: потратьте немного больше времени и добейтесь, чтобы человеку, который станет читать ваш код в будущем, было немного легче. Выражать собственное уважение коллегам и показывать, что вы цените их время – это этика, которую ван Россум без лишнего шума продвигает во всем мире. «Вы пишете код, прежде всего, для общения с другими программистами и в меньшей степени – для навязывания своей воли компьютеру», — говорит он.
Универсальность культуры, распространяющейся вокруг Python, позволила в некоторой степени воплотить замысел, появившийся у ван Россума еще около двадцати лет назад, когда он запустил недолговечный проект CP4E (Компьютерное Программирование Для Каждого). «Обычно я не могу похвастаться провидческим талантом. Меня спрашивают, какое будущее ждет Python, а я и не знаю. Но своим важнейшим пророчеством я считаю тезис о том, что наступит время, когда изучить программирование станет целесообразно для каждого». На тот момент персональные компьютеры существовали уже около 20 лет, но большинство из них представляли собой распиаренные пишущие машинки и калькуляторы. Тогда ван Россум задался вопросом: «не безумие ли это, что у такого множества людей есть компьютеры, но настолько мало тех, кто учится программировать»?

С тех пор он занимался постоянным упрощением программирования, и эту работу легко проследить по развитию Python, который ныне достиг версии 3.7. Вам Россум продолжает считать, что программирование прививает общеполезные навыки, в частности, умение решать задачи, аккуратно следовать в том или ином направлении и понимать, в чем смысл данного направления. Но он также обнаружил, что «существуют варианты введения в программирование, которые интересны детям, правда, не всем; поэтому не думаю, что программирование нужно включать в школьный курс в качестве обязательного предмета».

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

Тем не менее, сейчас все больше людей, использующих Python в различных дисциплинах. «Сегодня господствует одна теория, объясняющая неожиданный успех Python», — говорит ван Россум, — «согласно которой, ему повезло закрепиться в сфере data science и машинного обучения, а также обработки научных данных в целом. Как только вы наработаете критическую массу умений, связанных с Python, вам станет проще работать с той же системой, что и ваши коллеги, и ваши конкуренты, чем изучать что-то новое». Причем, по мнению ван Россума, хотя Python и начинался как обычный инструмент для программистов, сегодня это, в том числе, язык для любителей, и, по мнению ван Россума, это наилучшее применение для Python.

Успешный опенсорсный программный проект, подобный Python, был бы прост в изучении для новичков, но также находил бы практическое применение при решении реальных задач, что потребовалось бы более продвинутым пользователям. Точно, как при работе с начинающими мы стремимся не усложнять язык, чтобы они могли бросить все умственные силы на изучение сложностей, присущих среде разработки, так и при работе с продвинутыми пользователями простота языка оказывается кстати, поскольку так человеку становится проще усвоить конкурирующие абстракции. Стремление сделать реализацию Python максимально простой отчасти связано с тем, чтобы при работе с этим языком было легко менять мнение, учиться, повторять. «Написать на Python прототип и пустить его в работу зачастую не так сложно», — говорит ван Россум, — «а затем можно себе позволить выбросить этот прототип и реализовать то же самое на основе уже изученного. Вторая версия также может быть написана на Python, но она будет уже гораздо лучше первой».

Неослабевающая привлекательность Python отчасти связана с оптимизмом этого языка и с тем, как легко на нем начать все сначала. «Если вы уделили массу времени написанию и отладке кода, то вам совсем не захочется отбросить его и начать все сначала». Сооснователь и генеральный директор Drpopbox Дрю Хьюстон написал на Python первый прототип этого сервиса во время пятичасового автобусного рейса из Бостона в Нью-Йорк. «Первые прототипы Dropbox в основном были отбракованы, неоднократно», — говорит ван Россум.

Чему можно научиться у Python по поводу того, как создавать качественные инструменты для умственной работы? Тим Питерс, один из крупнейших контрибьюторов Python, дает несколько подсказок на эту тему в афористично написанном «Дзен Python», где поясняет принципы, которыми руководствовался ван Россум. В контексте этой статьи наиболее важны следующие два: «Простое лучше сложного. Сложное лучше переусложненного». Это практически рецепт, по которому мозг приоритезирует собственные функции ради эффективного расхода энергии.

С точки зрения ван Россума не менее важен социальный аспект мышления и создания инструментов. Что он извлек из своей тридцатилетней одиссеи с Python? «Я узнал, что в одиночку с таким делом не справиться, и это был сложный урок для меня. Узнал, что не всегда достигаешь того результата, к которому стремился, но, возможно, результат не хуже или даже лучше того, что ты ожидал».