Python: язык программирования, созданный сообществом

Автор оригинала: Guido Van Rossum
  • Перевод

Это перевод доклада с голландского TED Talks, прочитанного Гвидо Ван Россумом, "великодушным пожизненным диктатором" языка программирования Python. Много автобиографии и немного про значение языков программирования и основную идею Python.


Позвольте представиться — я нерд, гик. И я постоянно медлю. Я закончил университет в 26, мне было 45, когда я женился, сейчас мне 60, и у меня четырнадцатилетний сын. Может, мне просто трудно даются решения: я прожил в США больше 20 лет, но всё ещё имею вид на жительство.


Я не Стив Джобс или Марк Цукерберг. Но в возрасте 35 лет я создал язык программирования, который нашёл своих последователей. То, что произошло после этого, невероятно. Но об этом позже.


В 10 лет родители подарили мне образовательный набор электроники, выпущенный Philips, и он был крут. По началу я просто следовал инструкциям, и всё работало. Позже я начал пробовать создавать собственные цепи: в наборе было целых три транзистора!


Я взял одну из моих моделей, мигающую лампочку, в школу. Но в моём пятом классе всем было всё равно, никто не осознал важности этой конструкции. Я думаю, тогда я впервые понял, что я гик: до этого я просто был умным тихоней.


В старшей школе я всё больше становился нердом — я тусовался с несколькими детьми, также интересовавшимися электроникой, и на уроках физики мы сидели сзади и обсуждали штрих Шеффера, пока все остальные разбирались с законом Ома.


К счастью, наш учитель физики заметил нас, и занял созданием цифрового таймера, который он использовал для объяснения законов гравитации остальному классу. Это был замечательный проект, который показал, что наши умения полезны. Остальные дети всё ещё считали нас странными: в семидесятых многие были бунтарями или курителями "дудки"; остальные уже готовились к успешной карьере докторов, или адвокатов, или менеджеров. Но они меня не трогали, я не трогал их тоже, и в итоге выпустился одним из лучших учеников.


После старшей школы я поступил в Амстердамский университет: он был близко от дома, и для подростка, выросшего в Нидерландах в семидесятых, Амстердам был единственным крутым городом (да, студенческие протесты 1968-го слегка меня зацепили). К большому удивлению моего школьного учителя физики я выбрал математику, но, оглядываясь назад, я не думаю, что была какая-нибудь разница.


В подвале научного корпуса был мейнфрейм, и я полюбил его с первого взгляда. Карточные перфораторы! Построчные принтеры! Пакетная обработка! Я быстро научился программировать на языках вроде Алгола, Фортрана и Паскаля. Сейчас эти названия почти забыты, но они имели большое влияние тогда. Вскоре я снова сидел в конце аудитории, игнорируя лекции и исправляя свои компьютерные программы. А почему?


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


Но главный урок, который я усвоил, был про обмен знаниями: хотя большинство трюков, которые я выучил тогда, умерли вместе с эрой больших компьютеров, идея о ПО, которым необходимо делиться, жива как никогда. Сейчас мы называем это “open source”, и это целое движение. Отметьте это!


Группа разработчиков ОС мейнфрейма набирала нескольких студентов. Они разместили вакансию, я откликнулся, и получил работу. Это было событие, изменившее жизнь! Внезапно у меня появился полный доступ к мейнфрейму (без войн за свободное место или терминалы) и доступ к исходникам его операционной системы, а так же куча коллег, которые объяснили мне, как всё это работает.


У меня была работа мечты: программировать целый день, с настоящими заказчиками — другими программистами и пользователями машины. Моя учёба застопорилась, и я почти бросил колледж, но меня вытянули мой менеджер и профессор, который не отказался от меня. Они подтолкнули меня к завершению нескольких курсов, и в конце концов, с большим опозданием, я стал выпускником.


Я немедленно перешёл на новую работу мечты, которая была закрыта для меня без диплома. Я никогда не терял интерес к языкам программирования, и в целях изучения вступил в команду, разрабатывавшую новый язык программирования — такое не каждый день увидишь. Дизайнеры надеялись, что их язык захватит мир и заменит Basic.


Были восьмидесятые, и Бейсик был выбором для нового поколения программистов-любителей, писавших под микрокомпьютеры вроде Apple II и Commodore 64. Наша команда считала Бейсик вредителем, от которого следует избавиться. Наш новый язык, ABC, должен был “искоренить Basic” — такой у нас был девиз.


Но к сожалению, с маркетингом (или сроками) у нас всё было не очень хорошо, и после четырёх лет ABC был заброшен. С тех пор я убил много часов, пытаясь понять почему проект провалился, хотя и был в нужном месте в нужное время. За исключением того, что язык был слегка избыточным, я пришёл к выводу, что ABC умер просто потому, что тогда не было интернета. Не было обратной связи между создателями языка и его пользователями. Дизайн ABC изначально был дорогой с односторонним движением.


Пять лет спустя, когда я копался в остатках ABC в поисках идей для моего собственного языка программирования, я решил устранить недостаток обратной связи. Моим девизом стал “выпускай рано, выпускай часто” (как у чикагских демократов — “голосуй рано, голосуй часто”). И интернет, маленький и медленный в 1990, позволил это сделать.


Если посмотреть на 30 лет назад, то интернет и Open Source (a.k.a Free Software) действительно многое поменяли. Ну и конечно же закон Мура, согласно которому компьютеры становились всё быстрее из года в год. В совокупности всё это изменило взаимодействие между создателями и пользователями компьютерного ПО. Я считаю, что эти события (и то, как я их использовал) привнесли больше в успех “моего” языка программирования, чем мой опыт и навыки программирования.


Также не повредило то, что я назвал свой язык Python — немного невольного маркетингового гения с моей стороны. Я назвал его так в честь комедийного шоу Monty Python’s Flying Circus, и в 1990-м это не повлекло никаких последствий. Сегодня, я уверен, куча фирм по исследованию брендов были бы счастливы выписать большой штраф за то, какие сложные ассоциации такое название может вызывать в подсознании клиента. Но я был просто легкомысленным.


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


В реальности, языки программирования определяют то, как программисты выражают свои идеи и обмениваются ими. Причина: компьютер обработает всё, что угодно, а вот программисты работают с другими программистами, и плохо переданная идея может стать причиной дорогостоящего провала. Фактически, идеи выраженные в языке программирования часто достигают конечных пользователей программы.


Подумайте о невероятном успехе компаний вроде Google или Facebook. В их корне лежат идеи — идеи насчёт того, что компьютеры могут сделать для людей. Чтобы быть эффективной, идея должна быть выражена в компьютерной программе с использованием языка программирования. И язык, который позволит лучше всего выразить идею, даст команде ключевое преимущество, потому что даёт членам команды — людям! — ясность идеи. Идеи в недрах Google и Facebook настолько различны, насколько возможно, и на самом деле избранные этими компаниями языки программирования находятся на противоположных концах спектра дизайна языков программирования.


True story: первая версия Google была написана на Python. Причина: Python был правильным языком для выражения оригинальных идей Ларри Пейджа и Сергея Брина про индексацию веба и организацию результатов поиска. И они смогли реализовать свои идеи на компьютере!


Итак, в 1990-м, задолго до Google и Facebook, я создал собственный язык программирования, и назвал его Python. Но в чём его идея? Почему он настолько успешен? Чем он отличается от других языков программирования? (Почему вы все на меня так смотрите? :-)


У меня много ответов, некоторые технические, некоторые из моего многолетнего опыта и навыков, некоторые просто вроде “был в нужное время в нужном месте”. Но я верю что главная идея — это то, что язык разрабатывался в интернете, изначально открыто, сообществом волонтёров (но не любителей!), которые страстно привязаны к нему.


И это как раз то, о чём раньше была речь в части про подвал научного корпуса.


Сюрприз: как и у любой хорошей мотивационной речи, цель этого доклада — это радость!


Я больше всего счастлив когда чувствую себя частью сообщества. Мне повезло, что я могу чувствовать это и в ежедневной работе (я ведущий инженер в Dropbox). И если я не могу испытывать это чувство, я перестану чувствовать себя живым. Это чувство заразно, и поэтому члены нашего сообщества есть во всём мире.


Сообщество пользователей Python — это миллионы людей, которые сознательно используют его, и им это нравится. Многие активно участвуют в организации конференций — PyCon — в таких удалённых местах как Намибия, Ирак и даже Огайо!


Моя любимая история: год назад я провёл 20 минут на видеоконференции с классом, полным преподавателей и сотрудников Babylon University в Ираке, отвечая на их вопросы по Python. Благодаря усилиям смелой женщины, которая огранизовала такое мероприятие даже в охваченной войной стране, студенты в Вавилонском унивеситете в настоящее время изучают введение в программирование с использованием Python. В своих самых смелых мечтах я никогда не ожидал, что буду влиять на жизни столь далёкие и столь сильно отличающиеся от моей.


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

Поделиться публикацией

Комментарии 58

    –7

    То что он медлит видно и по живому Python 2.x

      +10
      Конечно, князь Гвидон один и виноват-то, что не может взять и дать великодушного пинка всем этим десяткам тысяч нерадивых программистов, которые понаписали библиотек на Python 2, да и не сумели в силу лени быстренько их переписать на Python 3.
        +2
        Меньше месяца назад переводили наш проект на третий питон. На поверку оказалось, что все python-2-only зависимости на поверке оказалось непокрытое тестами шило, кроме, разве что, librabbitmq. Все более-менее нормальные библиотеки давно поддерживают третий питон, а если нет — есть большой повод задуматься на счет их качества.
          0
          Дело не в лени программистов.
          +2
          Давно доказано, что если человек думает медленно, это ни разу не означает, что он менее умный, чем те, кто думает быстрее.
            –2
            Всегда не могу понять, почему при выпуске новой, не совместимой, версии языка не могут выпустить транслятор для старого кода? (хотя бы в рамках стандартной библиотеки)
              +4
              эээ… 2to3?
                +2
                Лучше сразу писать код, работающий и на py2 и на py3, например, с помощью six.
                0
                Извиняюсь не слышал. Тогда почему же переход такой медленный и многие все еще продолжают тащить 2 версию?
                  0
                  Если использовать 2to3 придётся поддерживать две ветки кода. 2to3 не решает всех проблем, обязательно что-нибудь вылезет, например, со строками, итераторами и т. п. Вот, например, перевод хорошей статьи на эту тему.

                  Разработчики библиотек сейчас стараются поддерживать 2 и 3 версию в рамках единой кодовой базы, используя six, future, собственные «compat»-модули. Это, конечно, не очень удобно, но «тащить 2 версию» придётся ещё долго, так как py2.7 много где используется и пока что официально поддерживается до 2020 года, если я правильно помню.
                0
                  0
                  Но транслятор-то выпустили, называется 2to3: docs.python.org/2.7/library/2to3.html Но вот третья ветка отличается от второй не только синтаксисом.
                  +1

                  А я не намекал что он не умный. Или что думает медленно. Я взял цитату из статьи и обыграл проблему с питоном 2.


                  И, впринципе, понятно что все так накинулись, но ваш коммент это уже нечто.

                    0
                    1. Аккуратнее надо выражать мысли когда так обыгрываете.
                    2. Не вижу ничего этакого «нечто» в моём комментарии. Ниже есть комментарий с цитатой из Алфреда Ван Вогта и я не вижу в своём комментарии ничего принципиально от него отличающегося.
                  +3
                  Удивительный рост джавы за последние несколько месяцев… Кто-нибудь знает, с чем это связано?
                    +2
                    BigData идёт в массы? =)
                    Да и последние несколько лет популярность тоже растёт. Возможно тут дело в Android'e?
                      +1
                      При том, что до октября 2014 шёл неуклонный спад. Да так, что даже старый добрый Си вышел вперёд.
                      Занятно, что Питон чуть ли не единственный не Си-подобный язык в Топе.
                        +1
                        Из-за Андроида, естесственно
                        +7
                        TIOBE абсолютно не показателен.
                          0
                          Нет, эта статистика совершенно не внушает доверия. JavaScript всего 2,5%, серьезно? У stackoverflow больше похоже на правду.
                            0
                            Не очень уверен насчёт правды, так как 45,8% респондентов составили Web Developer, то есть почти половину, затем следуют студенты с 11,4%.
                          +1
                          Python удобный и гибкий язык, чем больше его изучаю, тем больше он нравится.
                          Странно, что в начала 2000-х в Веб-разработке шла борьба между PHP и Perl, но очень мало использовался Python.
                          –4
                          Знатоки Python, подскажите пожалуйста какие сейчас (python 3) используют gui библиотеки?

                          Я только начал изучать python, он мне очень понравился, но стандартная библиотека tkinter как по мне не очень удобна для сложных интерфейсов, наверно я привык что любой элемент (кнопку, поле для ввода и т.п.) можно разместить в любом месте (как в c# win forms, delphi), а не привязывать их к сеткам.

                          Хотелось бы что бы эта библиотека одинаково работала как в windows так и linux системах, ну и бесплатна для коммерческой разработки (а не так как QT).
                            –2
                            GTK
                              0
                              wxWidgets (Phoenix) — есть поддержка Python 3, использует нативные тулкиты (win, cocoa (osx), gtk).
                                +5
                                К нему нужны в комплект воистину христианские долготерпение и всепрощение. Или просто пофигизм. Внезапно и без причин кнопка съехала влево? Смирись, сын мой, ибо обратно она уже не встанет. Ложный путь wxWidgets даёт иллюзию возможности построения на нём современных интерфейсов, чем затягивает души вступивших на него в ад постоянной правки мелких недоделок в тулките и геену вычитывания неочевидных моментов в гугле.
                                Причём это вина не биндингов, а самого wxWidgets.
                                  0
                                  Нативные и современные — разные вещи. Если хочется современного, то вообще лучше взять webkit какой ни будь (cef, nw, electron, etc).

                                  Делал довольно большие интерфейсы на нем (как с биндингами, так и на C++) — никаких проблем нет. Что-то съезжает только в кастомных рисованных виджетах. Если хорошо разобраться с сайзерами и как флаги влияют на соседей — проблем не будет :)
                                +1
                                gtk, sdl2(и сверху своих обёрток, чтоб наверняка идентично было).
                                pysdl2.readthedocs.io/en/latest/modules/sdl2.html
                                www.pygtk.org
                                  +1
                                  PySide — Python + Qt. Не требует покупки для коммерческих проектов.
                                  ru.wikipedia.org/wiki/PySide
                                    0
                                    PySide мёртв. С Qt5 всё плохо, его поддержки нет.
                                      0
                                      Разработчики Qt вроде как сказали, что будут его пилить официально. Ну то есть пока да. Есть Pyside слегка устаревший и есть PySide2 совсем сырой и вроде как нерабочий.
                                        0
                                        Хорошая новость, но изначально PySide тоже начинался как проект официальных разработчиков Qt, тогда ещё в Nokia. А потом его бросили. Хватит у них сейчас ресурсов на PySide2?
                                    +1
                                    Например, Kivy. Так же можно на ней делать и для Android с iOS.
                                      0

                                      Ого, какая штука интересная. Я правда пока не совсем понял, это что, мой Python код будет на iOS и Android работать?

                                        0
                                        Да, написанный с использованием Kivy.
                                          0
                                          Ага, будет, как только вы дождётесь загрузки приложения (от 5 секунд идёт загрузка на моих планшете и телефоне). Для собственного пользования оно ещё куда ни шло, но у «обычного пользователя» столько терпения не будет.
                                        0
                                        Используйте метод «place()» для отрисовки, вместо «pack()» и «grid()». В нём есть полный набор параметров как относительного, так и абсолютного позиционирования, и задания размеров: x, y, relx, rely, width, height, relwidth, relheight.
                                        –3
                                        Всем хорош питон, но из упаковки малость медлителен.
                                          0
                                          Как же Вы его настраиваете для ускорения?
                                            0
                                            Использую интерпритаторы из семейства python — PyPy, JPython. Бывает пишу модули расширения на C (использую dll)
                                              0
                                              Очевидно же, правкой /etc/python/python.ini.
                                              /sarcasm
                                            0
                                            А есть видео с самим докладом на TED?
                                              0
                                              Я не нашёл, по крайней мере.
                                                +1
                                                Т.к. сам доклад был только вчера, я думаю надо подождать. пока появится.
                                                +7
                                                  -- Быстрота мысли не всегда является признаком превосходства, -- проговорил главный биолог Хамар. --Существа с медленным, обстоятельным мышлением занимают в ряду мыслящих особей почетные места. 

                                                Алфред Ван Вогт, "Чудовище"

                                                  +1

                                                  Не касательно темы, замечательный рассказ. Очень рекомендую ознакомиться.

                                                    0

                                                    Написал комментарий не в ту ветку. Извините.

                                                    0

                                                    Очень не хватает возможности использования нескольких выражений в лямбдах. Приходится объявлять отдельные функции для тех целей, для которых обычно используются лямбды, а последние использовать исключительно для создания замыкания.


                                                    Пожалуйста, подскажите, как в Python принято решать подобные ситуации? Может, я неправильно подхожу к вопросу?

                                                      +1
                                                      С точки зрения питоновского AST, лямбда и объявление функции эквивалентны, не считая дальнейшего присваивания переменной — для функции это происходит автоматически (имя переменной == имя функции).
                                                      Т.е. я к чему — для однострочных функций используйте лямбду, для многострочных — функцию, лучшего синтаксиса пока не придумали.
                                                        0
                                                        Лямбды в питоне, по большему счету — синтаксический сахар над функцией из одного действия. Если действий несколько — нет другого выхода, кроме как использовать функции. Только обычно незачем делать лямбду, в который вызывается функция, можно передать имя функции туда, куда передаете лямбду. Обертки лямбды функцией не избежать только тогда, когда сигнатуры не совпадают, но, насколько я понял, это не ваш случай.
                                                        0
                                                        Спасибо за эту статью, она замечательно сочетается с советом из соседней:
                                                        Вышесказанное подводит меня к следующему пункту нашей беседы: разговору о том, как ваша любимая технология появилась на свет. Как родился ваш любимый C#? Вы знаете, кто его создал? Как создавался .NET? Кто был его ведущим архитектором? Какие у этого проекта были ограничения и почему язык стал тем, чем он является теперь?

                                                        Примените этот шаблон к любому языку или CPU-архитектуре, которые вам нравятся и которые вы любите: Python, Ruby, Java, к любому языку программирования. Узнайте их происхождение и то, как они стали тем, чем являются сейчас. То же самое касается и операционных систем, сетевых технологий, аппаратного обеспечения, да чего угодно. Идите и узнайте, как люди придумали это, какими идеями руководствовались и как много времени потребовалось для того, чтобы их детище достигло зрелости. Потому что рождение хорошего программного обеспечения требует десятилетий, знаете ли.
                                                        https://habrahabr.ru/post/282674/
                                                          –1
                                                          что-то не могу оригинал найти… (
                                                            0
                                                            Оригинал в блоге Гвидо (ссылка снизу поста). Самой записи, думаю, еще нету — слишком мало времени прошло.
                                                              –1

                                                              А, это совсем новое выступление? спасибо… Что-то с мобильного приложения даже ссылка не отображалается

                                                                0
                                                                Ссылка на оригинал в блоге Гвидо: http://neopythonic.blogspot.com.by/2016/04/kings-day-speech.html

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое