Это перевод доклада с голландского 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!

Комментарии (57)


  1. Fen1kz
    28.04.2016 15:07
    -7

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


    1. pehat
      28.04.2016 15:29
      +10

      Конечно, князь Гвидон один и виноват-то, что не может взять и дать великодушного пинка всем этим десяткам тысяч нерадивых программистов, которые понаписали библиотек на Python 2, да и не сумели в силу лени быстренько их переписать на Python 3.


      1. Nepherhotep
        28.04.2016 23:41
        +2

        Меньше месяца назад переводили наш проект на третий питон. На поверку оказалось, что все python-2-only зависимости на поверке оказалось непокрытое тестами шило, кроме, разве что, librabbitmq. Все более-менее нормальные библиотеки давно поддерживают третий питон, а если нет — есть большой повод задуматься на счет их качества.


      1. exfizik
        29.04.2016 10:36

        Дело не в лени программистов.


    1. kvothe
      28.04.2016 17:34
      +2

      Давно доказано, что если человек думает медленно, это ни разу не означает, что он менее умный, чем те, кто думает быстрее.


      1. LexS007
        28.04.2016 18:49
        -2

        Всегда не могу понять, почему при выпуске новой, не совместимой, версии языка не могут выпустить транслятор для старого кода? (хотя бы в рамках стандартной библиотеки)


        1. Nepherhotep
          28.04.2016 23:41
          +4

          эээ… 2to3?


          1. iroln
            28.04.2016 23:44
            +2

            Лучше сразу писать код, работающий и на py2 и на py3, например, с помощью six.


            1. lightman
              29.04.2016 11:10

              Руководство для тех, кто хочет писать совместимый код.


          1. LexS007
            29.04.2016 10:38

            Извиняюсь не слышал. Тогда почему же переход такой медленный и многие все еще продолжают тащить 2 версию?


            1. iroln
              29.04.2016 11:34

              Если использовать 2to3 придётся поддерживать две ветки кода. 2to3 не решает всех проблем, обязательно что-нибудь вылезет, например, со строками, итераторами и т. п. Вот, например, перевод хорошей статьи на эту тему.

              Разработчики библиотек сейчас стараются поддерживать 2 и 3 версию в рамках единой кодовой базы, используя six, future, собственные «compat»-модули. Это, конечно, не очень удобно, но «тащить 2 версию» придётся ещё долго, так как py2.7 много где используется и пока что официально поддерживается до 2020 года, если я правильно помню.



        1. thenno
          29.04.2016 10:41

          Но транслятор-то выпустили, называется 2to3: docs.python.org/2.7/library/2to3.html Но вот третья ветка отличается от второй не только синтаксисом.


      1. Fen1kz
        29.04.2016 14:21
        +1

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


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


        1. kvothe
          29.04.2016 16:55

          1. Аккуратнее надо выражать мысли когда так обыгрываете.
          2. Не вижу ничего этакого «нечто» в моём комментарии. Ниже есть комментарий с цитатой из Алфреда Ван Вогта и я не вижу в своём комментарии ничего принципиально от него отличающегося.


  1. Michael134096
    28.04.2016 15:16

    1. youROCK
      28.04.2016 17:12
      +3

      Удивительный рост джавы за последние несколько месяцев… Кто-нибудь знает, с чем это связано?


      1. SamVimes
        28.04.2016 19:23
        +2

        BigData идёт в массы? =)
        Да и последние несколько лет популярность тоже растёт. Возможно тут дело в Android'e?


      1. red_andr
        28.04.2016 23:37
        +1

        При том, что до октября 2014 шёл неуклонный спад. Да так, что даже старый добрый Си вышел вперёд.
        Занятно, что Питон чуть ли не единственный не Си-подобный язык в Топе.


      1. samodum
        29.04.2016 10:17
        +1

        Из-за Андроида, естесственно


    1. evocatus
      28.04.2016 18:37
      +7

      TIOBE абсолютно не показателен.


    1. LexS007
      30.04.2016 10:21

      Нет, эта статистика совершенно не внушает доверия. JavaScript всего 2,5%, серьезно? У stackoverflow больше похоже на правду.


  1. DaneSoul
    28.04.2016 16:38
    +1

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


    1. dynamixnewmedia
      29.04.2016 10:36
      -2

      Podderzhivayu vashe mnenie


  1. ZoRgSoft
    28.04.2016 16:41
    -4

    Знатоки Python, подскажите пожалуйста какие сейчас (python 3) используют gui библиотеки?

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

    Хотелось бы что бы эта библиотека одинаково работала как в windows так и linux системах, ну и бесплатна для коммерческой разработки (а не так как QT).


    1. shara
      28.04.2016 16:44
      -2

      GTK


    1. ad3w
      28.04.2016 16:46

      wxWidgets (Phoenix) — есть поддержка Python 3, использует нативные тулкиты (win, cocoa (osx), gtk).


      1. Barafu
        28.04.2016 17:13
        +5

        К нему нужны в комплект воистину христианские долготерпение и всепрощение. Или просто пофигизм. Внезапно и без причин кнопка съехала влево? Смирись, сын мой, ибо обратно она уже не встанет. Ложный путь wxWidgets даёт иллюзию возможности построения на нём современных интерфейсов, чем затягивает души вступивших на него в ад постоянной правки мелких недоделок в тулките и геену вычитывания неочевидных моментов в гугле.
        Причём это вина не биндингов, а самого wxWidgets.


        1. ad3w
          28.04.2016 19:41

          Нативные и современные — разные вещи. Если хочется современного, то вообще лучше взять webkit какой ни будь (cef, nw, electron, etc).

          Делал довольно большие интерфейсы на нем (как с биндингами, так и на C++) — никаких проблем нет. Что-то съезжает только в кастомных рисованных виджетах. Если хорошо разобраться с сайзерами и как флаги влияют на соседей — проблем не будет :)


    1. kir_vesp
      28.04.2016 17:01
      +1

      gtk, sdl2(и сверху своих обёрток, чтоб наверняка идентично было).
      pysdl2.readthedocs.io/en/latest/modules/sdl2.html
      www.pygtk.org


    1. RevenantX
      28.04.2016 17:37
      +1

      PySide — Python + Qt. Не требует покупки для коммерческих проектов.
      ru.wikipedia.org/wiki/PySide


      1. iroln
        28.04.2016 23:34

        PySide мёртв. С Qt5 всё плохо, его поддержки нет.


        1. RevenantX
          28.04.2016 23:36

          Разработчики Qt вроде как сказали, что будут его пилить официально. Ну то есть пока да. Есть Pyside слегка устаревший и есть PySide2 совсем сырой и вроде как нерабочий.


          1. iroln
            28.04.2016 23:39

            Хорошая новость, но изначально PySide тоже начинался как проект официальных разработчиков Qt, тогда ещё в Nokia. А потом его бросили. Хватит у них сейчас ресурсов на PySide2?


    1. ZoomLS
      29.04.2016 00:25
      +1

      Например, Kivy. Так же можно на ней делать и для Android с iOS.


      1. Himura
        29.04.2016 18:48

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


        1. ZoomLS
          29.04.2016 21:48

          Да, написанный с использованием Kivy.


        1. frol
          03.05.2016 19:52

          Ага, будет, как только вы дождётесь загрузки приложения (от 5 секунд идёт загрузка на моих планшете и телефоне). Для собственного пользования оно ещё куда ни шло, но у «обычного пользователя» столько терпения не будет.


    1. ajick
      30.04.2016 17:40

      Используйте метод «place()» для отрисовки, вместо «pack()» и «grid()». В нём есть полный набор параметров как относительного, так и абсолютного позиционирования, и задания размеров: x, y, relx, rely, width, height, relwidth, relheight.


  1. saw_tooth
    28.04.2016 16:56
    -3

    Всем хорош питон, но из упаковки малость медлителен.


    1. batekman
      29.04.2016 10:38

      Как же Вы его настраиваете для ускорения?


      1. saw_tooth
        29.04.2016 16:05

        Использую интерпритаторы из семейства python — PyPy, JPython. Бывает пишу модули расширения на C (использую dll)


      1. Core2Duo
        29.04.2016 18:09

        Очевидно же, правкой /etc/python/python.ini.
        /sarcasm


  1. TheGreatParker
    28.04.2016 17:34

    А есть видео с самим докладом на TED?


    1. komissarex
      28.04.2016 17:37

      Я не нашёл, по крайней мере.


    1. AdmAlexus
      28.04.2016 20:27
      +1

      Т.к. сам доклад был только вчера, я думаю надо подождать. пока появится.


  1. kvark
    28.04.2016 18:13
    +7

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

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


    1. thewizardplusplus
      29.04.2016 01:10
      +1

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


    1. thewizardplusplus
      29.04.2016 01:15

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


  1. thewizardplusplus
    29.04.2016 01:16

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


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


    1. Nepherhotep
      29.04.2016 09:56
      +1

      С точки зрения питоновского AST, лямбда и объявление функции эквивалентны, не считая дальнейшего присваивания переменной — для функции это происходит автоматически (имя переменной == имя функции).
      Т.е. я к чему — для однострочных функций используйте лямбду, для многострочных — функцию, лучшего синтаксиса пока не придумали.


    1. Grief
      29.04.2016 10:39

      Лямбды в питоне, по большему счету — синтаксический сахар над функцией из одного действия. Если действий несколько — нет другого выхода, кроме как использовать функции. Только обычно незачем делать лямбду, в который вызывается функция, можно передать имя функции туда, куда передаете лямбду. Обертки лямбды функцией не избежать только тогда, когда сигнатуры не совпадают, но, насколько я понял, это не ваш случай.


  1. lightman
    29.04.2016 09:22

    Спасибо за эту статью, она замечательно сочетается с советом из соседней:

    Вышесказанное подводит меня к следующему пункту нашей беседы: разговору о том, как ваша любимая технология появилась на свет. Как родился ваш любимый C#? Вы знаете, кто его создал? Как создавался .NET? Кто был его ведущим архитектором? Какие у этого проекта были ограничения и почему язык стал тем, чем он является теперь?

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


  1. Himura
    29.04.2016 14:40
    -1

    что-то не могу оригинал найти… (


    1. ad3w
      29.04.2016 18:39

      Оригинал в блоге Гвидо (ссылка снизу поста). Самой записи, думаю, еще нету — слишком мало времени прошло.


      1. Himura
        29.04.2016 18:41
        -1

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


        1. ad3w
          29.04.2016 19:28

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