Почему в сорок лет я решил поменять профессию и стать программистом Python

На прошлой неделе я ходил на собеседование, и основной вопрос ко мне был такой: «Почему вы решили поменять профессию и стать программистом?». В конце собеседования человек, который проводил собеседование — руководитель отдела перспективных разработок одной IT компании — прямо сказал: "… я вас не понимаю, вы претендуете на позицию, которая явно ниже вашей и по уровню оклада, и по должности, да в общем и не такая интересная, как ваша работа сегодня..."

Предыстория


Программирование мне нравилось всегда, еще в девятом классе, когда мы с друзьями забрели на областную станцию юных техников, в компьютерный класс и остались там до окончания школы (это был 1993 год, домашних компьютеров у нас не было, а там стояли IBM386).

Поступил я, правда, в авиационный институт, т.к. самолеты в тот момент казались интереснее. По окончании института (2001г.), получив красный диплом и приглашение в аспирантуру, пять лет разрабатывал системы управления авиационными двигателями, защитил кандидатскую, подучил английский. И тут вплотную встал вопрос — а что дальше? Авиация тихо умирала. По ощущениям — перспектив не было, все было глухо.

Я решил, что нужно что-то делать, что-то менять! В общем, разместил резюме в интернете. Как бы это ни было странно моим коллегам, через три дня у меня случилось первое в жизни собеседование, была предложена хорошая зарплата и очень интересная работа. Компания, в которую я попал, занималась испытаниями и измерениями, и эта сфера меня привлекла надолго: новое оборудование, интересные, часто уникальные задачи, много командировок, общения с разработчиками оборудования, с отечественными и зарубежными поставщиками, неожиданные сложности и нетривиальные решения — в общем, было интересно! Это всегда интересно, когда создаешь что-то новое.

В карьерном плане — тоже все хорошо, поработал и инженером, и ведущим инженером, и руководителем технического отдела, и исполнительным директором, немножко побыл соучредителем нового бизнеса.

И вот теперь, как мне кажется, снова пришло время что-то менять.
И снова, как и в предыдущий раз, все спрашивают: Почему? Зачем? Всё ведь хорошо!

Попробую объяснить свою позицию


Чуть более чем десять лет я проработал в сфере разработки испытательного оборудования.

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

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

Можно продолжать ходить на работу и попытаться реализовать себя в каком-нибудь хобби и пять раз в неделю, вставая по утрам, осознавать, что сегодня будет навсегда потерян еще один день — мрачноватая перспектива!

В общем нужно что-то менять! Но что и на что? — вот в чем вопрос!

Если посмотреть на программирование, то это направление представляется очень интересным:

  • Оно с одной стороны — совершенно новое для меня, т.е. в нем можно учиться и развиваться: выбор ПО, задач, проблем практически не ограничен, от молекулярной биологии, физики и химии до верстки сайтов. Мне кажется, тут есть возможности и есть перспективы.
  • С другой стороны — это направление, в котором у меня есть некоторый опыт: Fortran в институте, LabView — последние три года на работе, Си и Free Pascal (немножко для общего развития), PHP + WordPress + HTML+CSS — вполне рабочий сайт получился.
  • Честно говоря, мне просто нравится кодить, и я люблю когда моя работа имеет результат: сделал — заработало!

Судя по тому, что я вижу на Хабре и в интернете — разработчик должен быть очень опытным и молодым, желательно лет 23-27, после 35 — найти работу становится сложнее. Скажу честно, это кажется немного странным! Конечно, общеизвестно, что с возрастом интеллектуальные способности деградируют, но с точки зрения медицины — возрастом считается 70-80 лет и никак не 30-40. Другое дело, что человеку, которому двадцать лет, можно меньше платить. Но я не претендую на позицию разработчика с 20-летним стажем.

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

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

Мне нравятся слова, адресованные Кирком Шупом молодым разработчикам на встрече в Яндексе:
Найдите вещи, которые вас мотивируют, пишите много кода и читайте много кода. Меня вдохновляет строить вещи, которые просуществуют много лет после того, как я их сделаю, и которые не сломаются даже после изменений, которые в них внесут люди, не понимающие их.
Когда я начинал программировать, смотрел на опытных разработчиков и думал, что через 10 лет я догоню их текущий уровень, но они уже уйдут вперёд на 10 лет. Через десять лет я понял, что на самом деле полностью их догнал. Технологии двигаются вперёд, так что мне не пришлось изучать старые, а новые я узнавал одновременно с ними.

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

Рассмотрим финансовый вопрос. Да, при смене работы я существенно потеряю в деньгах, но кое-что при этом и приобрету:

  • Во-первых программист не так сильно привязан к месту работы географически, а это значит, что при желании я смогу работать на удаленных заказчиков;
  • Во-вторых, по моей оценке уровень дохода скорее всего через пару лет сравняется с моим текущим уровнем;
  • В третьих, рынок программного обеспечения неуклонно растет, а значит растет спрос и на специалистов, а вот производство оборудования в РФ непрерывно сокращается (это безусловно мои личные субъективные ощущения, не претендующие на какую-либо объективность), а значит работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!

Но языков программирования так много, почему именно Python — скажете вы.

Существует даже мнение, что не нужно учить Python первым языком.

Получилось так, что лет пять назад один мой друг, увлекающийся Linux, очень настоятельно мне его порекомендовал, были новогодние праздники и было время попробовать разные дистрибутивы, в общем последние пять лет я использую Debian. А дальше все просто: bash — это наше все, но хотелось возможности написать что-то более сложное: попробовал Си, по рекомендации того же друга попробовал Lazarus, немного повозился с PostgreSql. Потом был почти годовой перерыв, а потом, попробовал Python.

Python мне понравился сразу и по многим причинам: читаемость, подробнейшие описания на русском и на английском, масса примеров программ в том же Debian, большое количество модулей, возможность использовать Си там, где требуется скорость, перечислять можно долго. Именно после этого я понял, что это вполне интересное направление, которым можно заниматься и которого мне хватит надолго. Ознакомился с литературой, написал несколько не очень сложных программ.

Еще одна причина для меня выбрать Python — это то, что я считаю его более перспективным языком с точки зрения участия в различных технических, научных и просто интересных проектах, чем например PHP.

Сейчас, в свободное от работы время потихоньку начал изучать machine learning, а на прошлой неделе сходил на первое собеседование.

Получилось несколько длинно, но я хотел максимально подробно объяснить свои мотивы, и размышления.

В данный момент вопрос актуален для меня, и мне будет интересно получить мнения и комментарии читателей Хабра.
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 273
  • +44
    Вопрос!

    Причем тут хабы «программирование» и «python»? Про программирование нет ничего, а про питон… И про питон, ничего!

    Замените программирование на «сборщик мебели», а питон на «корпусную мебель»… Мне кажется смысл особо не поменяется.
    • +2
      Вопрос в чем?
      «Почему вы решили поменять профессию и стать программистом?»
      — этот?
      • +7
        Я как раз месяц назад получил свою первую работу в программировании — а мне уже 31 год. Тоже, кстати питонистом, я в восторге от этого языка :)
        Желаю вам удачи!
        • 0
          А можно поподробнее описать опыт и процесс?
          • 0
            Опыт получения работы?
            Да всё достаточно стандартно — подготовил резюме, начал откликаться на вакансии, ходить по собеседованиям. Параллельно старался углублять свои знания и навыки в языке, фреймворках и смежных технологиях.
            • +1
              Я, скорее, про «багаж», с которым Вас взяли. Участие в каких-то проектах, код на гитхабе? Что, вообще, кроме питона, понадобилось?
              • 0
                Ну, я до этого 6 лет работал в техподдержке/администрировании. Периодически возникали задачи, связанные с написанием кода, да я и сам старался в этом вопросе проявлять инициативу. Из завершённых более-менее весомых проектов у меня были: внутренний корпоративный портал (php+sql+js), пара внутренних веб-сервисов, один проектик, связанный с интеграцией с внешним сервисом. Ну и по мелочам — скрипты, простые запросы к БД.

                Кроме питона на собеседовании мне задавали вопросы на общее понимание того, как работает интернет, спросили, как бы я реализовал в БД хранение иерархического каталога и неориентированного графа, какие я знаю веб-фреймворки и ORM, задали пару вопросов по js и css.
                • 0
                  Спасибо! Сам поглядываю туда же.
        • 0
          А я первую работу программистом получил в 38 :) Не большое увлечение программированием помогло мне подняться по карьерной лестнице и в денежном вознаграждении.
        • +4
          Расскажите лучше про «уникальные задачи», которые вы решали.
          • –7
            Поскольку тема явно не техническая, позволю себе небольшой оффтоп: а что такого выдающегося все внезапно нашли в Питоне? Вопрос совершенно серьезный. Мне приходится иногда на нем писать небольшие вещи и пока впечатление скорее нехорошее.

            Претензии например:
            1) Быстродействие. Вижу разницу в два порядка даже с Явой, многие задачи на нем из-за этого невозможны в принципе.
            2) Значимые whitespaces. Финиш полный, пришлось настроить перед каждым запуском автозамену табуляторов на пробелы, чтобы не ругался.
            3) Куцый язык с велосипедным синтаксисом (отсутствие ++ и --, нормального for цикла, запрет пустых блоков и
            т.д.)
            4) Еще более куцая стандартная библиотека. Понадобилась обычная TreeMap — вперед шерстить сеть на предмет чьих-то third-party.
            5) Какая-то каша с кодировками и строками, постоянные encode/decode
            6) Еще больший финиш с ООП/функциями/классами: self явным параметром, приватные функции через имя…

            Полное ощущение, что имею дело с каким-то игрушечным языком двадцатилетней давности.
            • –18
              Так это и есть игрушечный язык. Для всяких небольших наколенных скриптов. Пере-bash/недо-С. Никто его для чего-то масштабного использовать не будет. Ну кроме тех, у кого совсем уже «питон головного мозга»:)
              • +3
                Компания Dropbox может с вами не согласиться
                • +11
                  Дропбокс после ухода Гвидо переписывает архитектуру на Go
                  • +4

                    Уже переписали давно. И частично еще на Rust.


                    https://news.ycombinator.com/item?id=11283758

                    • 0
                      Плюс скриптовых языков в том, что можно быстро, на коленке, написать сервис\сайт. Да, когда проект развился, стал популярным и нагруженным — тогда можно хоть на Java, хоть на С++ переписать.

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

                      А так — да, компилируемые языки работают быстрее, кто ж спорит то?
                      • +1

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


                        На скриптовых языках в аналогичных условиях точно быстрее бы было?

                        • –1
                          Я не знаю, быстрее ли получилось или нет — на то сослагательное наклонение указывает. Но вот читаемость кода явно страдает. На Питоне код был бы покороче и лучше читался бы (это мое мнение)
                          • 0

                            Ну, читабельность — вопрос привычки скорее, ИМХО, но куда уж короче? Там и так-то логики с гулькин нос.

                            • 0
                              Ммм, как то на заре интернета (1996) написал тучу кода на С — просто CGI приложение, которое форму показывало, принимало url-encoded строку, а потом выводило Hello %username%

                              Потом манной небесной показался Perl. Более ёмкий, но и более запутанный. Читаемость чужого кода стремилась к нулю.

                              Пробывал Java, но волею судеб там не было встроенной поддержки HTTP 1.1 (читай, нельзя было на одном IP делать несколько сервисов\сайтов). Ну и эта дурацкая тема — всё объект — ужасно.

                              Пробежавшись по всяким ASP и Coldfusion перешёл к PHP, в основном потому что легко было настроить всю связку Апач+mod_php+MySQL. Как язык, PHP может и не лучший, но средство разработки — вполне приемлемое. Читаемость — лучше, чем у Перла.

                              Но когда я перешёл в 2008 году на Python\Django — слезы радости текли по моей щетине. Компактный, читаемый, гибкий, мощный, продуманный и достаточно быстрый. Туча библиотек в комплекте. Лучшая документация! (чего тогда не хватало Руби и Рельсам)

                              Конечно, можно привыкнуть к любому синтаксису, но я выбираю тот язык, что более читаем. На текущий момент для меня это Python.
                              • +1

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


                                Как бы аналогичный код выглядел на питоне?

                              • 0
                                И кстати, а что делает код на гитхабе? Достает какую-то информацию из lasm.fm по артисту и обложку сохраняет?
                                • 0

                                  Помогает обойти то, что в новой версии lastfm api (которая была выкачена пару лет назад, да) нет никаких средств получить фоточки исполнителя. Соответственно, получает запрос, говорит клиенту, какую страницу надо выкачать, клиент её выкачивает и отправляет обратно сервису, сервис выдирает ссылки на фотографии и возвращает список.

                        • +1
                          Куда Гвидо ушел?, он вроде все ещё в дропбоксе.
                          Если бы дропбокс начал бы с Go изначально, он бы никогда бы не «взлетел».
                          • +1

                            Этому есть какие-то другие причины кроме той, что язык Go начал разрабатываться примерно в том же году, что «зарелизился» Dropbox?

                    • +5
                      а что такого выдающегося все внезапно нашли в Питоне?

                      Python позиционируется как простой и понятный язык и, вероятно, хорош для обучения (как первый язык).

                      • –5
                        >> Python позиционируется как простой и понятный язык и, вероятно, хорош для обучения (как первый язык).

                        Согласен, это вполне возможно. Для абсолютного новичка он будет понятнее и легче в освоении. Но копнуть в глубину и начинается… Жаловался профессионально работающим с SciPy/NumPy, ответ был: главное при работе с Питоном — это как можно больше вынести в C++ :)
                        • +9
                          главное при работе с Питоном — это как можно больше вынести в C++ :)

                          Это справедливо для многих языков, если область применения — жадные до гигафлопс расчёты.

                          • +7

                            Не нужно забивать гвозди микроскопом. Если вам нужно получить абсолютный максимум производительности — не смотрите ни на питон, ни на джаву, ни на пхп, ни на джаваскрипт. Ваши языки — C и может быть C++/Rust. Однако, если ваша задача — внести интерактивность в web-страницу — Javascript (да, есть возможность писать на других языках и транслировать в JS, но ...). Python? Если твоя задача получить результат быстро (не в смысле быстрых рассчётов, а в смысле "на вчера", то Python здесь со своей экосистемой даст возможность этого достичь в кратчайшие сроки, а на C/C++ будете изобретать велосипед, в сотый раз изобретать пакетный менеджер/систему сборки/и прочие базовые утилиты). У большинства инструментов, которыми пользуется больше двух человек есть своя ниша, где они решают задачи эффективнее (быстрее/производительнее/безопаснее/...)

                            • –2
                              Что ж тогда не в ассемблер сразу? ;) Потеря точности при работе с числами с плавающей точкой в С++ толком не позволяет даже с простыми бухгалтерскими вычислениями справиться. ;)
                              • 0
                                >>> главное при работе с Питоном — это как можно больше вынести в C++
                                • +1
                                  >>> Что ж тогда не в ассемблер сразу?

                                  -1? Вот интересно, кому мой комментарий мог не понравиться?

                                  Я, проггер с 21-летним стажем, тоже ныне, как и автор статьи, сорока лет отроду. Начинал с бэйсика на Корветах ещё в 1993 году. До 2005 года неплохо владел asm x86 и при работе с языками типа (Object) Pascal регулярно для критичных по времени исполнения рутин делал вставки на асме. Потом «забил».
                                  Да, Python (который мне лично очень нравится и по которому имею два сертификата), является интерпретатором. Да, он медленнее компиляторов. И что?.. Зато он проще в освоении. Понятнее в сопровождении чужих исходников и весьма продуктивен в плане скорости разработки.

                                  Автору статьи уважение за смелость, удачи и усидчивости! Главное, чтобы было желание продолжать учиться и работать над собой.
                                  К сожалению многие в нашем возрасте уже обленились вконец и ничего не хотят менять…
                                  • +1

                                    Непонятно, как язык без статической типизации может быть понятнее в сопровождении чужих исходников.

                                    • +1

                                      Меньше кода читать )

                                      • 0

                                        APL и его производные, наверное, в таком случае идеальны?

                              • +1
                                Вот по чесноку, я не программист, а просто пробую баловаться и баловство мое начиналось толком с С#. Хотелось потом было начать писать для веб под django, но после си шарпа питон казался чем-то вообще неудобоваримым. Месяцок мучений и выбор таки ушел к ASP.NET.
                                Хотя, если сейчас преподавание азов переходит с паскаля на питон, то тут ура.
                                • +1
                                  если сейчас преподавание азов переходит с паскаля на питон, то тут ура

                                  Ошибаетесь.
                                  Никлаус Вирт создавал своя ЯП с определенной целью — учить студентов программированию. Поэтому Паскаль так хорош для азов.

                                  Ну, а на практике всё зависит от преследуемой цели.

                                  Начиная учиться с Паскаль — человек научится программировать.
                                  Начиная учиться с Питон — человек научится писать программы на Питон.

                                  Небольшая, но разница есть.
                                  • 0

                                    Можно научиться программировать на примере Питона, а можно научиться писать программы на Паскале, но не научиться программировать.

                                    • 0
                                      Человека, научившегося на примере питона, практически невозможно заставить решать некоторые задачи.
                                      Например, матчить строку вручную. Потому что у него изначально есть регэкспы и прочее.

                                      Скажите, что оно ему и не нужно? Отчасти соглашусь. Но на собеседованиях в дев-компании для тех кто претендует на зп $2-3K очень любят давать классические задачки по поиску соответствий в строках, по сортировке и т.п. И не принимают решения с учётом особенностей языка… Как-то так.

                                      Но это, конечно не помешает заколачивать деньгу на джанге.
                                    • –1
                                      И в каком месте «научится писать программы на Питон» не является «научится программировать»?

                                      PS если кто не знает: Питон вообще-то тьюринг-полный.
                                      @VolCh: можно научиться писать программы на Паскале, но не научиться программировать

                                      Чё за чушь?! Паскаль тоже является тьюринг-полным, а следовательно умение писать программы на Паскале является умением программировать.

                                      Программировать вообще можно на любом тьюринг-полном языке. Просто, некоторые языки лучше подходят для обучения, а другие хуже. Например, на Лого — можно учиться функциональному программированию, а вот ун-Лямбда, хоть и тоже является функциональным, для обучения не намного лучше брейн-фака.
                                      • 0
                                        умение писать программы на Паскале является умением программировать.

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

                                        • 0
                                          И в каком месте «научится писать программы на Питон» не является «научится программировать»?

                                          Я попытался комментарием выше свою мысль пояснить.
                                          Фишки языка расслабляют, научишься писать проги на чём-нибудь, а что у него под капотом и знать не будешь. Оно может и не надо, но иногда знание лишним не бывает.
                                          • 0
                                            Неадекватным фанатикам минуснувшим в Карму за сравнение ун-Лямблы с брейн-факом, не плохо бы сначала погулить что это такое https://zserge.wordpress.com/2011/01/26/unlambda-%D0%BC%D0%BE%D0%B7%D0%B3%D0%B8-%D0%BD%D0%B0%D0%B2%D1%8B%D0%B2%D0%BE%D1%80%D0%BE%D1%82/

                                            И этот язык уж точно для обучения новичков не годится (для сравнения Лого позволяет обучать ФП даже детей).
                                            • 0
                                              Гы. ;)
                                              Для тех, кто не интересовался, классический пример.
                                              Программа на языке Brainfuck, печатающая «Hello World!»:

                                              ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
                                              .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
                                              ------.--------.>+.>.


                                              http://ru.wikipedia.org/wiki/Brainfuck

                                              P.S. Для обучения язык ТОЧНО не годится. Он, и по названию даже судя, скорее, для любителей эээ… головоломок, если прилично говорить.
                                              • 0
                                                Ну Hello World на unLambda выглядит обманчиво безобидно:
                                                `r```````````.H.e.l.l.o. .w.o.r.l.di

                                                А вот программа, которая выводит числа Фиббоначи, выглядит вот так:
                                                ```s``s``sii`ki
                                                `k.*``s``s`ks
                                                ``s`k`s`ks``s``s`ks``s`k`s`kr``s`k`sikk
                                                `k``s`ksk
                                                • +1

                                                  Ну, для обучения тому, как работает машина Тьюринга, Brainfuck вполне сойдёт. Несмотря на свою эзотеричность, это не самый бесполезный ЯП.

                                              • –3
                                                ОМГ…
                                                Как научился в 1994, так и продолжаю писать на Pascal (правда уже лет 18, как перешёл на Object Pascal).
                                                И «студенческость» Паскаля не сильно мешала мне в одиночку реализовывать части в весьма сложных коммерческих проектах. И не помешала мне освоить и использовать при надобности другие языки (asm x86, VB, C/C++, Java, Python, PHP и прочие).
                                                Что за дискриминация языков? ;)
                                                >>> Паскаль тоже является тьюринг-полным, а следовательно умение писать программы на Паскале является умением программировать.
                                                Именно.
                                                И, порой, это даже дело вкуса. Вот не нравился мне никогда Си-подобный синтаксис, поэтому не перешёл на Java или C#. А Python, кстати, понравился именно синтаксисом. ;)
                                                • +3

                                                  Когда я вижу человека пишущего C/C++ в контексте освоенных языков, то могу смело, с 95 достоверностью, предполагать, что он не знает ни си, ни плюсов.

                                                  • –3
                                                    Почему это? Обычно, редко кто учит эти языки по отдельности, чаще всего эти языки учат параллельно, по причин обратной совместимости между C++ и C.
                                                    • 0

                                                      Я уже писал в этой теме про "совместимость". Они не являются обратно-совместимыми ни в одну сторону, это два разных языка.

                                                      • –2
                                                        Это если на них много и углублённо пишешь. А чаще всего C и C++ учат «чтобы знать», потому что это классика, и знание этих языков помогает лучше понимать языки от них производные. Так как на работе чаще всего используется какой-нибудь другой язык, а знакомство C и C++ просто полезно, если вдруг что-то понадобилось срочно исправить в коде на незнакомом языке происходящем от C/C++ :)
                                                        • +2

                                                          Боюсь, что мы просто сильно по разному понимаем что такое "изучать язык".


                                                          В моём представлении от "иметь представление о базовом синтаксисе" и "быть способным читать и писать простой код" до "более-менее изучить язык" лежит ещё долгая дорога в несколько лет минимум с регулярной практикой на это языке с использованием соответствующей инфраструктуры, подходов и библиотек. Т. е. если человек 10 лет пишет на Си с классами, то к C++ он отношения почти не имеет.

                                                          • 0

                                                            Это извечный философский вопрос: Что значит "изучил язык"?
                                                            Вопрос этот не ограничивается языками программирования… и для естественных языков придумали такое понятие как уровень владения. И по факту с годами это почти не коррелирует. Точнее, очевидно, что для освоения языка на уровне С2 требуется несколько лет. Но обратное не верно, т.е. можно десятилетиями активно и успешно пользоваться языком, но не владеть им на уровне C2. Более того, практическая ценность такого уровня владения весьма спорна.
                                                            То же справедливо и для ЯП, изучить язык на уровне B2 достаточно для решения более 90% практических задач, вне зависимости от чьих-то представлений.

                                                            • –2
                                                              То что Вы пишете — это уже профессиональное владение языком. А я имею в виду под «освоением языка» — достаточное знание языка, чтобы приступить к практической работе на нём.
                                                              • +1

                                                                Проблема в том, что ощущаемая достаточность знания языка наступает существенно раньше, чем практическая достаточность. И в случае C++ это особенно выражено.

                                                    • 0
                                                      не нравился мне никогда Си-подобный синтаксис, поэтому не перешёл на Java или C#

                                                      А мне наоборот синтаксис C очень понравился (а ещё больше понравился APL — жаль на нём не довелось писать).
                                                      • 0
                                                        Именно поэтому я и говорю, что синтаксис — дело вкуса. ;) А, как говорится, «о вкусах не спорят».
                                                        Если человек может в своей работе использовать тот «инструментарий», который ему нравится, то и работа будет более комфортной, имхо.
                                                    • 0
                                                      Да и, вообще, дискуссия потиху скатывается к холивару, а-ля «Pascal vs C++».
                                                • +1

                                                  На Python пишут в университетах. Поэтому на нем масса библиотек по математике, разным наукам, по ML. Масса отличнейших библиотек. Пишут эти библиотеки люди со степенями и мозгами. Как раньше в 80ые писали на том же Фортране. Поэтому среднее качество кода выше среднего по Джаве и СиШарпу, есно за пределами .NET библиотек.
                                                  Кроме того у него замечательные примитивы по работе с коллекциями. Вроде просто, но результат ощущается быстро и практически везде.
                                                  По поводу скорости. Везде (?), где она нужна, есть библиотеки, скомпилированные на С.
                                                  Минусы тоже есть. Меня достает то, что всегда надо выбирать 2 или 3 версию надо/можно использовать :)

                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                    • –1

                                                      Похоже те библиотеки пишут всё-таки на C++ (а то и вообще это всё делается на основе какого-нибудь BLAS), а в Python просто прикручивают интерфейс — для популяризации, так сказать.

                                                      • 0

                                                        Откуда вы это взяли? Вы заглядывали в исходники исходники, например, netlib-blas, openblas, atlas? Там, если что, используются C, Fortran и чуток asm.

                                                  • +16
                                                    1. Быстродействие. Не могли бы Вы поделиться списком задач, которые "на нем из-за этого невозможны в принципе".
                                                      2,3 — без комментариев.
                                                    2. Чем Вам не подошёл обычный dict? Хорошо, а OrderedMap?
                                                    3. Тут ладно, есть нюансы детских болезней и разницы веток 2.х и 3.х
                                                    4. Как это обычно бывает, у Вас просто сложилось своё определенное понимание ООП. Причём существование иных толкований Вы не принимаете. Откройте для себя толкование ООП от Алана Кея, будете сильно удивлены.

                                                    Ну и Вам, очевидно, Python кажется не удобным с точки зрения программиста на Java. Python/Java/Clojure/whatever — не плохой, он просто другой, со своими парадигмами и идиомами.

                                                    • –4
                                                      1) Пример: пару дней назад нужно было посчитать коэффициенты похожести (similarity) для некоторого количества строк между собой. Для 3К строк это заняло на Питоне около 5 минут. Для 10K даже начинать не стал, перевел на Яву, сделало за секунды.
                                                      2) dict же не упорядоченный? Мне нужна была map с порядком на ней. По OrderedMap для Питона у меня поиск ничего не находит, уточните пожалуйста.
                                                      3) Да нет, иные толкования меня вполне устраивают. Их воплощение смущает, неудобно же.

                                                      >>Ну и Вам, очевидно, Python кажется не удобным с точки зрения программиста на Java.

                                                      Вряд ли, мне доводилось писать на языках от Бэйсика и Пролога до С++ и Матлаба. Просто Ява сейчас удобна тем, что соединяет достаточную скорость с мощной стандартной библиотекой. А так я за языки не держусь совершенно.
                                                      • +3
                                                        2) Вероятно имелся в виду OrderedDict — Python3 OrderedDict
                                                        • 0
                                                          Ещё, в python 3.6 стандартный dict хранит порядок.
                                                          • 0
                                                            Ещё, в python 3.6 стандартный dict хранит порядок.

                                                            А можно ссылочку на источник?
                                                            Пример в документации https://docs.python.org/3.6/library/stdtypes.html#dict говорит об обратном.
                                                            • +2
                                                              https://docs.python.org/3/whatsnew/3.6.html

                                                              The dict type now uses a “compact” representation based on a proposal by Raymond Hettinger which was first implemented by PyPy. The memory usage of the new dict() is between 20% and 25% smaller compared to Python 3.5.

                                                              The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon (this may change in the future, but it is desired to have this new dict implementation in the language for a few releases before changing the language spec to mandate order-preserving semantics for all current and future Python implementations; this also helps preserve backwards-compatibility with older versions of the language where random iteration order is still in effect, e.g. Python 3.5).

                                                              • 0
                                                                Насколько я понял, они изменили алгоритм работы со словарем, в результате теперь он не рушит порядок при работе, но гарантий сохранения порядка нет, то есть он явно нигде не хранится специально.
                                                                + Самая интересная возможность упорядоченных коллекций — работа со срезами и индексацией не реализовывалась, так что преимуществ у такого сохранения порядка не так много.

                                                                The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon


                                                                Аспект сохранения порядка в новой реализации рассматривается как деталь реализации и на него не следует полагаться.
                                                                • –1
                                                                  так что преимуществ у такого сохранения порядка не так много.
                                                                  Они не делали намеренно сохранение порядка, это побочный эффект при переходе на новый алгоритм. Но как профит — можно юзать стандартный dict вместо OrderedDict (помимо более оптимальной работы самого dict)

                                                                  Гарантий порядка нет потому что если вы запустите программу в 3.5 или более старых версиях (совместимость 3.x), то будет работать не так.
                                                          • 0
                                                            >> 2) Вероятно имелся в виду OrderedDict — Python3 OrderedDict

                                                            Его я видел, но там не натуральный порядок элементов, а порядок добавления, что совсем из другой оперы. В итоге я использовал sorteddict отсюда http://www.grantjenks.com/docs/sortedcontainers/

                                                          • +9
                                                            Для 3К строк это заняло на Питоне около 5 минут. Для 10K даже начинать не стал, перевел на Яву, сделало за секунды.


                                                            Код покажите? Интересно.
                                                            • –9
                                                              Код мне пришлось бы сейчас выдирать и оформлять, чтобы запустился отдельно, что вряд ли имеет смысл. Если интересно, посмотрите на модуль difflib, тут похожая тематика.
                                                              • +11
                                                                Скорее всего вы просто использовали, что называется, «метод в лоб». В Пайтоне есть особенности хранения данных, и соответственно для того чтобы обрабатывать данные эффективно, надо это учитывать. Для этого действительно надо погружаться в Пайтон глубже чем «за пару часов почитаю по диагонали описание до того неизвестного мне синтаксиса и напишу скриптик».

                                                                Если конкретизировать — подозреваю что у вас вышло так что при выполнении вашего кода происходило огромное количество ненужных аллокаций памяти. К примеру если вы в цикле, после проверки каждого символа каждой строки, использовали что-то вроде
                                                                new_line = old_line[1:]
                                                                
                                                                что на каждый символ заново аллоцировало еще один участок под почти всю строку.

                                                                Собственно для прочесывания строк и/или массивов байтов — стоит использовать memoryview (https://docs.python.org/3/library/stdtypes.html#memoryview) над нужным вам контейнером. Оно, используя все тот же синтаксис
                                                                new_line = old_lint[1:]
                                                                
                                                                — не будет делать новых аллокаций, и является неким аналогом адресной арифметики из C/C++.

                                                                Ну и кроме того, в язык встроены другие специальные средства быстрой потоковой обработки данных (в основном взятые из функционального программирования). Они используются вместо циклов и ускоряют обработку несколько раз (бывает что и на порядок). Опять же это требует не самых базовых знаний языка (т.е. надо приложить хоть какие-то усилия и: или книжку почитать, или документацию посмотреть, или же курсы пару-месячные по начальному владению языком пройти).
                                                            • +6
                                                              1. Если вы делаете выводы о эффективности работы питона исключительно на примере написанного вами кода, то, возможно, проблема не в питоне?

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

                                                              5. К третьему питону уже никакого encode-decode не осталось, вместо множества кодировок — один юникод.

                                                              2, 3, 6 — претензии к форматированию, синтаксису, реализации ООП, функций и классов — это в значительной степени вкусовщина и дело привычки. У меня, например, синтаксис джавы вызывает отторжение из-за чего я в своё время не стал её заниматься, хотя и считал, что она весьма перспективна в плане карьеры. Но при этом я с пониманием отношусь к людям, которым джава нравится. Среди моих хороших друзей есть джависты, и я уважаю их выбор.
                                                              • +1
                                                                1. Охотно допускаю и был бы очень рад. Вбил сейчас «Python performance» в Гугл и получил вот эту страницу: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
                                                                Тоже алгоритмическая задача, те же самые два порядка разницы к C++/Java (исходный код прилагается). Хм…

                                                                4. Отсутствие одной из основных структур данных в стандартной библиотеке меня действительно удивило (и заставило потерять часа два на поиски, сравнение и установку стороннего кода). Культура открытости — дело хорошее, разумеется.

                                                                Что касается синтаксиса, форматирования и пр. — дело тут не во вкусовщине. Мне все равно, ставить скобочки или двоеточие, писать else if или elif. Дело в неудобствах — например, отлаживая алгоритм, я часто комментарю/вытаскиваю обратно строки. Но Питон почему-то не дает оставить пустой блок. То есть мне нужно дополнительно вписывать туда каждый раз «pass», дурная работа же. Почему нет инкрементов, чье отсутствие размножает строки вида a+=1? Это ведь простейшие вещи, самые основы, на которые приходится наталкиваться постоянно и которые крадут время.
                                                                • +3
                                                                  У питона весьма богатая библиотека в тех сферах, где он популярен. Возможно, вы просто пытаетесь использовать его не по назначению? Да, далеко не всё интересное входит в стандартную библиотеку, но никто не видит в этом проблемы. Возможно, ваша проблема просто в том, что в питон-сообществе принято другое отношение к использованию сторонних библиотек, а вы пытаетесь судить по меркам джава-сообщества? Сильно подозреваю, что в сообществе питонистов просто сильнее развита культура открытости и обмена наработками. Поэтому у создателей языка просто не было необходимости раздувать стандартную библиотеку.

                                                                  Спасибо, рыдаю. Стандартная библиотека python'а, как многие отмечали, это место куда слоныбиблиотеки приходят умирать. Там есть огромное нагромождение кода, который будет жить там вечно ради совместимости, хотя для python'а это не такая священная корова, как для java.


                                                                  Но вообще в python std странностей выше крыши. Например, есть парсер для json'а, но он не умеет парсить в потоке (т. е. json.read(file_like) внутри сделает просто json.reads(file_like.read())). Или есть работа с датами, но она не работает с датами до 1900 года в 2.7, но работает в 3.2+.


                                                                  С точки зрения использования внешних зависимостей я бы не рекомендовал обобщать java-мир. Он очень разный. Кто-то ради IOUtils.closeQuietly притащит commons-io в проект, кто-то завендорит jackson/netty/resteasy/weld/whatever целиком.

                                                                • 0
                                                                  Если вы не нашли ничего про упорядоченный словарь, то и namedtuple рекомендовать не буду. Но порекомендую.
                                                                • 0

                                                                  к п.2: Например, я не вижу аналога метода TreeMap.floorEntry(key) в Python'е. Класса OrderedMap вообще не нашёл, а OrderedDict — это по-видимому аналог java.util.LinkedHashMap, а не TreeMap.

                                                                  • 0
                                                                    Логично, он возможен без полного перебора только для SortedMap и аналогичных. В стандартной библиотеке Python таких структур нет.
                                                                • 0
                                                                  1) Быстродействие. Вижу разницу в два порядка даже с Явой, многие задачи на нем из-за этого невозможны в принципе.
                                                                  И для java многие задачи невозможны*. «Инструмент под задачу» ©.
                                                                  А скорость разработки, в среднем, гораздо ниже чем с питоном, например веб-сервисов. Да и по быстродействию может проиграть питону если для этой задачи в нем использовать либу на С/С++.

                                                                  А ещё, помню, java проиграл питону по скорости выполнения чуть ли не на порядки из-за медленного старта.
                                                                  • +1
                                                                    Если так сравнивать, то питон рвет в клочья c++ из-за компиляции.
                                                                    • 0
                                                                      Сравнивалась не скорость компиляции, а время работы готового приложения т.е. для С++ был готовый бинарник.
                                                                      • +1
                                                                        Так у java, как и у c# медленный страт из-за jit компиляции. По крайней мере в c# это можно поборать.

                                                                        Или я что-то не так понял?
                                                                    • 0
                                                                      Скорость разработки веб-сервисов? Вы начинаете сравновать не языки, а фреймворки, django или flask, несомненно клевые и удобные, но и у java есть, например, Spring boot. Так что выбор на чем запилить веб сервис — дело привычки и вкуса.
                                                                      • 0
                                                                        Речь не о привычке, а о скорости разработки, если вы считаете что дело не в языке, а во фреймворке — возьмите любой веб фреймворк под С или лучше asm и посмотрите (почувствуйте) во сколько раз больше вы потратите времени на написание аналогичного веб-сервиса.
                                                                        • +1
                                                                          Вы правы. Хочу лишь заметить, что гибкость языка определяет возможную выразительную мощность фреймвёрка. Например, такой API, который предоставляет SqlAlchemy и Django ORM, совершенно невозможно реализовать ни на C++, ни на PHP. А от этого сильно зависит простота и скорость разработки.
                                                                      • 0
                                                                        >>что такого выдающегося в Python?

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

                                                                        питон *хреново* декомпилируется; уверяю, это плюс гораздо чаще, чем может показаться (с радостью окажусь неправ, но дайте ссылок на нормальный декомпилятор)

                                                                        я пробовал много языков, мне питон приглянулся (хотя это эмоциональное утверждение), однако уже более лет 10 погоду делает не язык, а библиотеки и компоненты;)
                                                                        • 0
                                                                          >> например, на питоне реализуемы весьма заковыристые задачи контентного анализа в реальном времени (жёсткий код на C или плюсах, обвязка полегче на питоне)

                                                                          Это называется «каша из топора» :) Если код на C/C++, то обвязку на чем угодно сделать можно. Для математики в Matlab удобно, например.

                                                                          >> питон *хреново* декомпилируется; уверяю, это плюс гораздо чаще, чем может показаться

                                                                          Серьезно есть потребность в декомпиляторе питона? Если да, и еще не существует, то можно написать,- пару месяцев как-нибудь получится выделить. Но очень сомнительно…
                                                                          • +1
                                                                            Удобно, это смотря с чем сравнивать и как использовать. Прелесть Python в данном случае в универсальности.
                                                                            У меня, например, задачи всплывают из очень разных областей: и обработка теста, и графики, и тяжелые числодробилки, и математика. И везде Python оказывается, если не лучшим вариантом(в учетом самописных и обёрнутых библиотек), то по крайней мере более чем удобным. И позволяет не учить другие инструменты на каждый случай(таких как R, matlab, которые почему-то не пошли от слова совсем), даже Mathematica в некоторых не сложных случаях можно заменить.
                                                                            • –1
                                                                              обвязку на чем угодно сделать можно

                                                                              поверьте, в той задаче, о которой я здесь не расскажу, не на чём угодно:) питон доказал отличную переносимость по платформам, работу в реальном времени и очень неудобную реверсную инженерию; для задачи это оказалось очень важно


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

                                                                              провокационное заявление; хотя нет ничего невозможного, но восстановить исходный код (как в Java или .NET) вряд ли удастся

                                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                            • +1
                                                                              Минусят, но ведь действительно, питон это утилитарный, а не бизнес язык. К пунктам выше я бы добавил отсутствие явной типизации что приводит к аду сопровождения или портирования.
                                                                              При этом, на мой взгляд, нарушается главный принцип питона — явное лучше неявного.

                                                                              Мнение основано на попытке портировать более-менее крупный проект с питона на .NET, при переносе любого метода приходится разворачивать всю цепочку вызовов чтобы понять что за объект передавал автор оригинальной библиотеки.

                                                                              Да, в новой версии можно указать типы, но кто из питонистов будет это делать?

                                                                              А в качестве скриптового языка для разовых задач он прекрасен, это да.
                                                                              • 0
                                                                                Я бы вот спросил, что проще учить с нуля — Python или C#?
                                                                                • 0
                                                                                  Я пробовал и то, и то, питон показался проще и гибче. Но эти языки как велосипед и санки, видимо мне больше нравится велосипед. Если язык первый, наверное, питон будет проще. Если язык не первый, то смотря какой был предыдущий. С це наверное проще перейти на цешарп, а с какого-нибудь пхп — на питон. Но это моя субъективная теория.
                                                                                  • 0

                                                                                    C PHP проще будет перейти на C#, если на PHP писал в современном стиле, а не в стиле 90-х. Субъективно, конечно же.

                                                                                  • +1

                                                                                    C# с нуля проще учить, он гораздо более последовательный (т.е. содержит меньшее кол-во WTF? в стандартной библиотеке). А от Python у новичка останется каша в голове, без чёткого понимания что зачем и почему так.

                                                                                • +1
                                                                                  Неожиданный обрыв повествования в статье. Собственно, как раз когда вроде ближе к сути (заявленной в заголовке) автор подошёл, все и закончилось.
                                                                                  • 0
                                                                                    Хм. Вроде описано же все: нравилось программирование, текущая профессия теряет актуальность, а в новую довольно низкий порог вхождения.
                                                                                  • –3

                                                                                    Удивительно, но сегодня я увидел ВК рекламу "Как выучить программирование после 40". И тоже Python. Это наводит на странные мысли о связи этих статей.


                                                                                    Трудно понять мотивацию к.т.н., директора, претендующего на уровень junior'a.


                                                                                    работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!

                                                                                    Хороший инженер может быть настолько не уверен в своих способностях?


                                                                                    У автора хочется поинтересоваться — как успехи? Обычно считается, что чтобы стать профессионалом в какой-либо области, требуется 10 лет в сфере. Вы готовы потратить 10 лет, чтобы выйти на уровень даже ниже вашего текущего?

                                                                                    • +5
                                                                                      работу программиста через двадцать лет я скорее всего найду, а вот работу инженера-конструктора — вряд ли!
                                                                                      Хороший инженер может быть настолько не уверен в своих способностях?

                                                                                      Мне кажется, там речь скорее о неуверенности в перспективах развития отрасли… Посмотрите, для примера, как за предыдущие 30 лет полностью развалили лёгкую промышленность, сколько закрыли НИИ, фабрик и т.д.

                                                                                      • 0
                                                                                        10 лет, это чтобы стать гуру наверное, особенно если мы говорим про IT, где обмен опытом происходит намного быстрее, чем в других отраслях. Если брать в расчет «правило 10000 часов» — то где-то 4-5 лет будет вполне достаточно чтобы стать высококвалифицированным профессионалом.ИМХО.
                                                                                        • 0

                                                                                          Да, именно "правило 10000 часов" я и имел в виду.

                                                                                        • 0
                                                                                          Хороший инженер может быть настолько не уверен в существовании области применения своих профессиональных навыков через двадцать лет в доступном ему по разным причинам географическом окружении.

                                                                                          P.S. Автору всяческие мои пожелания двигаться вперед и не бояться радикальных перемен. Как минимум, это новый жизненный опыт, который вряд ли будет бесполезен.
                                                                                          • 0
                                                                                            Хороший инженер может быть настолько не уверен в своих способностях?


                                                                                            Если ты узкоспециализированный инженер, то не в способностях дело а в отсутствии спроса на твою профессию.
                                                                                            У меня сходная проблема, выслужился из простого монтера до инженера высшей категории, и толку? Если ты специалист в узкой отрасли которая к тому же умирает? Куда идти? Через 10 лет она точно загнется, и куда идти уже в 50 лет? В 40 лет есть хоть шанс вписаться в струю.
                                                                                            Автор правильно написал, сейчас нет профи, все имеют средний уровень, по причине того что технологии очень быстро развиваются, и если ты был в чем то профи 10 лет назад, то сейчас ты один среди многих, так как за 10 лет успело появится много нового и даже успеть отмереть.
                                                                                            • 0
                                                                                              сейчас нет профи, все имеют средний уровень, по причине того что технологии очень быстро развиваются

                                                                                              Профи есть. Это те, кто за определённое время успевают столкнуться с разными технологиями (которые, возможно, отмирают), изучить разные области computer science, и они отличаются от не-профи тем, что могут грамотно выбрать технологию для проекта, или успешно применить некоторые принципы из совершенно другой области. Естественно, для этого нужно изучать новое.


                                                                                              Из-за быстрого развития и отмирания технологий ИТ-специалисты больше развиваются "в ширину", а не "в глубину". Это не значит, что хороших спецов вообще нет.

                                                                                          • –2
                                                                                            Рассмотрим финансовый вопрос. Да, при смене работы я существенно потеряю в деньгах
                                                                                            Интересно, что по этому поводу думает семья?
                                                                                            • +4
                                                                                              В нормальной семье поддержат решение сменить профессию с надоевшей на вдохновляющую, даже если это связано с каким-то падением уровня жизни (в разумных пределах)
                                                                                              • +1
                                                                                                Нормальная семья — это какая? :) Если говорить языком абсолютных цифр, то расходы в Москве (а автор отсюда), то на семью из трех человек, чтобы жить более-менее (ипотека/съем квартиры, хватало на еду, шмотки средние, отдых пару раз в год, образование ребенку), то надо 200 000 р, т.е. каждый взрослый должен получать по 100 тыс. рублей. Это при условии, что ребенок один и он большой (>7 лет), т.е. может оставаться дома один и не надо его в 6 часов забирать с продленки или из детсада.
                                                                                                Junior питон разработчик столько получает? Если да, и жена получается столько же — то прекрасно. Если жена получает больше, то вообще замечательно — можно даже никуда и не устраиваться — рисковать и уходить во фриланс.
                                                                                                А если жена не работает или получает 50 000 р? Тогда все эти светлые мечты о программировании разбиваются о быт…
                                                                                                PS Просто наболело :)
                                                                                                • +1
                                                                                                  то на семью из трех человек, чтобы жить более-менее (ипотека/съем квартиры, хватало на еду, шмотки средние, отдых пару раз в год, образование ребенку), то надо 200 000 р

                                                                                                  Есть подозрение, что уж квартирный вопрос у автора решён. И вообще ваше "более-менее" — это уровень заметно выше среднего.

                                                                                                  • +1

                                                                                                    В Москве многие живут более-менее и с двумя детьми, далеко не у всех доход 200к+ на семью.

                                                                                                    • +2
                                                                                                      Если в каждой «нормальной» семье будет только один ребёнок, то с каждым поколением население будет уменьшаться вдвое. Конечно из-за того что продолжительность жизни человека больше чем максимальный детородный возраст это не сразу становится заметно.
                                                                                                      • 0

                                                                                                        Уровень безработицы понизится, вопрос с тем, куда лишних людей девать по мере автоматизации, не поднимется, одни плюсы!

                                                                                                      • 0
                                                                                                        Можно же еще и подрабатывать. Было бы желание.
                                                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                    • 0
                                                                                                      Пробовал Python некоторое время назад — язык очень понравился. Правда сейчас я изо всех сил налегаю на Java. Что до возраста и своего рода возрастной дискриминации в IT (а может и не только там) — полностью согласен с наблюдениями автора.

                                                                                                      Ваша ситуация, уважаемый shutovds, лично мне очень понятна, поскольку нахожусь в похожем положении. Поэтому поддерживаю Ваше решение обеими руками и желаю удачи. У Вас всё получится. А программировать — это такой кайф…
                                                                                                      • –18
                                                                                                        Ну выбор разумный. Си и плюсы вам уже не потянуть, там порог входа очень высокий. Питон простой, там можно за пару недель приловчиться делать несложные вещи. Смотрите сразу в сторону веба. Работа страшная, монотонная, одни и те же вещи придётся делать, писать одни и те же модели и одни и те же рест сервисы, зарплаты низкие, перспектив никаких — это суровые реалии.

                                                                                                        Машин лёрнинг это не питон, это суровый матан, к тому же на питоне там прямо никто не сидит и не пишет, там опять же нужен хороший си и вообще нужно как говорят «шарить в матане», читать статьи (в день по 2 статьи это норма).

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

                                                                                                        Просили мнение — вот оно.
                                                                                                        • +1
                                                                                                          Как у вас всё мрачно :)
                                                                                                          • +11
                                                                                                            Порог входа в Сях вполне нормальный, может быть чуть-чуть выше, чем везде.
                                                                                                            Другое дело, что потолок где-то в стратосфере.
                                                                                                            • +1
                                                                                                              вот вы человека даже не видели, а так лихо за него решили, что потянет, а что нет
                                                                                                              выбор неразумный, Python никогда не будет хорошим первым языком
                                                                                                              Яндекс и Mail.ru запилили на одном известном сайте бесплатные курсы по плюсам, уровень такой, что умственно-отсталые школьники справятся, инженер и подавно
                                                                                                              по сям круто поможет стенфордский курс «programming paradigms» (есть на их youtube канале)
                                                                                                              было бы желание
                                                                                                              p.s. авиастроение в России устроено так, что его нет
                                                                                                              • 0

                                                                                                                а можно ссыль на курсы? Помоложе чем автор, да и не авиаконструктор,
                                                                                                                но все же примерно в схожей с ним ситуации.Задумываюсь, что лучше
                                                                                                                учить.
                                                                                                                Был бы признателен за ссыль

                                                                                                              • 0
                                                                                                                По поводу курсов от Яндекса и мэйла — имеете в виду их курсы на степике? С них можно начинать обучение, если ты даже не особо понимаешь названия отдельных уроков и совсем не программист?
                                                                                                                • 0
                                                                                                                  да, именно их
                                                                                                                  начинать с c++, возможно, будет тяжело, но зарядившись компилятором и терпением, можно превозмочь
                                                                                                                  если вообще не имеете представления о программировании, попробуйте посмотреть на Ruby, мне он показался очень простым и наглядным (хотя это очень субъективно, могло повлиять то, что я уже немного знал Perl, которым вдохновлялся автор Ruby), кроме того многие современные языки (например Swift от Apple) вдохновлялись Ruby, и будет несложно перейти
                                                                                                                  обязательно попробуйте SoloLearn: Learn to Code (там можно быстренько пройти курс молодого бойца по разным языкам и сравнить)
                                                                                                                  • +1
                                                                                                                    Про Ruby конечно же слышал, как и про фреймворк Ruby on Rails, детище бывших 37signals. Но если и Ruby лёгкий, и Python лёгкий, почему же вы советуете первый и отказываете второму? Да, я прочитал комментарии, тут каждый второй не поленился описать плюсы Python, и каждый первый при этом — его минусы, но они есть и у Ruby.
                                                                                                                    С другой стороны, как я понимаю, оба этих ЯП по сравнению с С++ и тем более с С дают новичку возможность очень быстро научиться собирать свой первый конструктор — это как Лего против советских металлических :) А в дальнейшем всё равно лучше изучить C++. Но интегрировать Python и C++ вроде как легче, чем Ruby и C++, тем самым быстрый старт верхом на питоне и дальнейшая интеграция его с С++ даст большую эффективность, чем бег по «рельсам» за этим локомотивом в лице С++:) Если я где-то заблуждаюсь, то срубите одну из этих трёх сосен :)
                                                                                                                    SoloLearn установил, спасибо, буду пробовать.
                                                                                                                    • +2
                                                                                                                      Ruby не Rails, Rails не Ruby. Rails — классный фреймворк, который существенно повлиял на веб. В Python тоже есть свой RailsDjango. Но Ruby гораздо больше, чем Rails. Попробуйте поискать видео, в котором автор rake рассказывает, как он написал аналог make на Ruby за 5 минут. Главный, но далеко не единственный плюс Ruby — писать на нём легко, приятно и естественно, что прямо сказывается на мотивации новичка.
                                                                                                                      В Ruby действительно всё является объектом, и вот такие штуки: 13.to_s.length.nil? помогают быстрее разобраться с ООП.
                                                                                                                      В Ruby изящно реализовано метапрограммирование (смогут все).
                                                                                                                      С точки зрения же C/C++ практической разницы между Python и Ruby нет.
                                                                                                                      • 0
                                                                                                                        Да, разницу понимаю, и про Django и Flusk я слышал. Видео rake не нашёл, но понял, что речь о компиляторе. Написать что-то новое и полнофункциональное за 5 минут — это круто, конечно.

                                                                                                                        Вы и моя любознательность заставили меня прошерстить документацию для того, чтобы понять, что же значит 13.to_s.length.nil?. Как я понял, to_s превращает 13 в строку, и всё это предназначено для выяснения, не нулевая ли (nil) длина (length) у 13, на что Ruby ответит False. В Python же за это отвечает
                                                                                                                         if len(13) == 0:
                                                                                                                            print('the list is empty')
                                                                                                                        
                                                                                                                        .
                                                                                                                        Если всё верно, то синтаксис Python мне почему-то кажется более понятным. Безусловно, если разобраться, то всё будет понятным, но я-то как раз не разбираюсь и это типа взгляд со стороны.

                                                                                                                        Господин Бешеная гиена (думаю, поймёте правильно с таким ником :)), я ни в коем случае не спорю — мне интересно говорить об этом, но не с кем) Вообще Хабр читаю уже лет 5, аккаунту уже 4 с лишним года, но мой первый комментарий — вам :)
                                                                                                                        • 0
                                                                                                                          mrobespierre, как я понял, и не говорил, что код на Ruby понятнее/красивее (ибо красота вещь субъективная). Он показал пример, демонстрирующий, что ООП в Ruby ярче выражен, нежели в Python. Да даже ваш собственный контр-пример это показывает.
                                                                                                                          • 0
                                                                                                                            А, ну тогда я что-то начинаю понимать. Правда, пришлось для этого прочитать основы ООП.
                                                                                                                            Судя по всему, под выраженностью ООП в данном примере имеется ввиду видимая структурированность 13.to_s.length.nil?, где, если я не ошибаюсь, 13 — это объект, to_s — метод, который отнесет объект к классу строк, length и nil — методы. Поправьте, если что не так.
                                                                                                                            Но вот осознать преимущество этого над тем же Python мне пока не дано :) Может, если только код так более читабелен и понятен?
                                                                                                                            Вообще, такие вот разговоры очень сильно мотивируют и подталкивают к изучению)
                                                                                                                            • 0
                                                                                                                              если всё упростить, то:
                                                                                                                              1. в Ruby всё является объектом
                                                                                                                              2. каждый стейтмент что-то «возвращает» в результате своей работы
                                                                                                                              сложив всё вместе получим: 13 — это объект типа int и у него нет метода length, но последний есть, например, у string. метод to_s объекта типа int вернет совершенно новый объект типа string, чей метод length вернет нам снова int, у которого есть метод nil? (который есть вообще у всего в Ruby). преимущество становится очевидным, когда вы делаете сортировку в обратном порядке в Ruby с помощью array.sort!.reverse!, а в другом языке по-другому
                                                                                                                              • +1

                                                                                                                                Пожалуйста, прекратите позорить Ruby своими примерами… Никто в здравом уме не будет так делать сортировку в обратном порядке.
                                                                                                                                Для демонстрации цепочек вызовов прекрасно подходят ActiveRecord, Ransack и т.д., проще говоря, те случаи, где уместен паттерн Fluent Interface.

                                                                                                                                • 0
                                                                                                                                  и что, насколько сильно опозорен Ruby, сколько литров крови смогут смыть этот позор?
                                                                                                                                  что не так с этой сортировкой? только будьте добры, придумайте что-то стоящее, а не чушь в духе «два прохода медленнее одного на 0.00001 секунды».
                                                                                                                                  • +2

                                                                                                                                    Пфф, а что с ней так? Зачем делать то, что будет медленнее, когда сделать нормально не составляет никакого труда:
                                                                                                                                    array.sort! {|a, b| b <=> a}
                                                                                                                                    Зачем писать белиберду "13.to_s.length.nil?" в качестве примера? Или Вы поставили себе задачу показать, как не надо писать на Ruby?

                                                                                                                                    • 0
                                                                                                                                      Ну если вы пролистаете ветку вверх, то увидите, что мы обсуждаем хороший вариант первого языка для человека, которому интересны C/C++. Мой посыл был в том, что Ruby — как раз такой вариант. Примеры я пытался привести такие, чтобы даже не программист мог понять (т.е. просто знания английского достаточно для понимания кода, это ведь здорово для того, кто никогда не программировал, правда?). Вы, судя по всему, — рубист и могли бы сами привести примеры изящные и лаконичные примеры кода на Ruby (так чтобы две строки, а не куски Rails, который сишнику, наверное, не пригодится), но вместо этого вы постарались меня дискредитировать, указав на недопустимость сортировки массива из 3-х элементов в 2-х строчной программе в 2 прохода и подтолкнуть человека к Python. Хорошего дня.
                                                                                                                                      • +2

                                                                                                                                        Ruby — неплохой вариант для начинающих. Тут я не спорю.
                                                                                                                                        Однако, примеры Ваши даже программистам не понять… Потому что они нелогичны! Посмотрите, в какой ступор Вы вогнали бедного Eudokimoff своим "13.to_s.length.nil?".
                                                                                                                                        Я уверен, что любой пример должен делать что-то осмысленное, ну например ASCII-табличку печатать:


                                                                                                                                        puts (32..127).map(&:chr).each_slice(16).map(&:join)

                                                                                                                                        или


                                                                                                                                        puts (32..127).map(&:chr).join.scan(/.{16}/)

                                                                                                                                         !"#$%&'()*+,-./
                                                                                                                                        0123456789:;<=>?
                                                                                                                                        @ABCDEFGHIJKLMNO
                                                                                                                                        PQRSTUVWXYZ[\]^_
                                                                                                                                        `abcdefghijklmno
                                                                                                                                        pqrstuvwxyz{|}~ 

                                                                                                                                        Это он сможет переписать на Python и сравнить… А код, напрочь лишённый смысла, нельзя сравнить с кодом на другом языке.

                                                                                                                                        • 0
                                                                                                                                          Как-то так, если поставить целью в одну строку )

                                                                                                                                          print('\n'.join([''.join([chr(x) for x in range(x, x+16)]) for x in range(32, 128, 16)]))
                                                                                                                                          
                                                                                                                                          • 0

                                                                                                                                            Ну, это Вы немного схитрили… заранее подготовив range.
                                                                                                                                            Аналог второго варианта на Ruby выглядит на Python так:


                                                                                                                                            import re
                                                                                                                                            print '\n'.join(re.findall('.{16}', ''.join(map(lambda x: chr(x), range(32, 128)))))

                                                                                                                                            А первый вариант, емнип, стандартной библиотекой Python не решается, придётся свою функцию писать для разбиения массива на чанки.


                                                                                                                                            P.S. В любом случае, однострочники на Python лучше даже не пытаться писать, это ни разу не его сильная сторона. Получается довольно страшненько и практически нечитаемо.

                                                                                                                                            • +1
                                                                                                                                              lambda x: chr(x) можно заменить на chr, получится менее страшно:

                                                                                                                                              import re
                                                                                                                                              print '\n'.join(re.findall('.{16}', ''.join(map(chr, range(32, 128)))))