Как начать писать на Haskell опыт Python-программиста

Оглавление (нажмите, чтобы открыть):

/привет/мир/etc

Периодические заметки о программировании

понедельник, 28 апреля 2014 г.

Мыслить как программист. Учимся с Python

Представляю вашему вниманию книгу «Мыслить как программист. Учимся с Python», 2-е издание. Это книга для тех, кто хочет научиться программировать. Книга учит программированию, используя язык Python как средство обучения.

Это открытая книга, по аналогии с открытым кодом.

Написанная Джеффри Элкнером (Jeffrey Elkner), Алленом Б. Дауни (Allen B. Downey) и Крисом Мейерсом (Chris Meyers), книга несколько лет использовалась учениками старшей школы как учебное пособие для изучения программирования. За это время она вобрала в себя замечания и дополнения сотен ее читателей. В 2010 — 2012 годах я перевел книгу на русский язык и незначительно переработал ее.

Предисловие к русскому изданию

Эту книгу я встретил очень кстати. У меня давно зрело желание познакомиться с языком Python, и вот весной 2010 года вместе с моим 10-летним сыном Иваном мы решили его осуществить.

Мы читали вслух 2-ое издание книги «Мыслить как программист. Учимся с Python» на английском языке. В результате, Ваня познакомился с основами программирования и научился писать простые программы на Python. Энтузиазм, с которым он осваивал программирование, заглядывал вперед, делился сделанными открытиями стал для меня неожиданной и очень приятной наградой. Книга ориентирована на учеников старших классов школы, поэтому время от времени Ивану требовались дополнительные разъяснения. Но это сделало совместное изучение книги только интереснее.

Книга приятно удивила меня вот в каком отношении. Хотя она адресована людям, которые только начинают изучать программирование, книга рассказывает о приемах и лучших практиках разработки из арсенала профессиональных программистов. Это разработка дизайна программы, автоматическое модульное тестирование, приемы отладки, использующие вспомогательный код (“строительные леса”), и многое другое. Таким образом, книга не играет в программирование с новичками, а дает основные понятия и навыки, необходимые для профессиональной работы.

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

Работая над русским вариантом книги, я сделал некоторые изменения и дополнения.

Авторы исходили из того, что читатель работает с Python в ОС семейства Linux, и в ряде мест в оригинале даже присутствует привязка к конкретным версиям ОС Ubuntu. Я отступил от этой практики. Ведь изучать программирование с помощью Python можно с равным успехом и в ОС Windows.

Англоязычные строки и комментарии в примерах программ оставлены без изменения. Дело в том, что использование русского языка в программах требует дополнительных знаний и усилий. А начинающим программистам дополнительные сложности ни к чему. Однако, в Приложении A подробно изложено, как подружить Python и русский язык, если вы работаете в ОС Windows. Руководствуясь приведенными инструкциями, все желающие смогут русифицировать примеры из книги.

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

Отмечу один случай нетрадиционного перевода термина. Исходные тексты программ на интерпретируемых языках программирования по-английски называют “script”. Это слово в литературе по программированию часто переводят на русский как “сценарий”. Слово “script” имеет много значений, связанных с письменностью. И “сценарий” — лишь одно из них. Ни я, ни кто-либо из моих знакомых коллег-программистов не использует слово “сценарий” в повседневном профессиональном общении, предпочитая ему короткое “скрипт”. Вот почему в книге используется слово “скрипт”.

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

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

Для меня перевод книги такого объема был совершенно новым делом, и в ходе работы я сделал для себя много попутных открытий. Среди прочего, мне пришлось учиться работать с литературным текстом, освоить систему подготовки документации Sphinx. Кроме того, пришлось потребовать от себя элементарной дисциплины для того, чтобы завершить начатую работу. Соприкоснувшись с Python и его “экосистемой”, насчитывающей тысячи библиотек и пакетов для разных приложений, я также понял одну важную вещь. Я понял, что информационные технологии обязаны занять в интеллектуальной жизни человека более важное место, чем они занимают сегодня.

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

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

Оригинальную версию книги на английском языке можно найти на сайте проекта Открытая Книга по адресу https://openbookproject.net. Размещенные там книги доступны для скачивания, чтения, изменения и распространения без каких-либо практических ограничений. Такой подход создает отличную возможность для улучшения текстов, их адаптации к конкретным нуждам и распространения среди всех заинтересованных лиц. Данный перевод книги на русский язык не является исключением, см. раздел О правах на эту книгу. Как и открытый код в программировании, открытые книги способствуют коллективному и личному творчеству, и свободному развитию тех, кто с ними соприкасается.

Андрей Трофимов,
инженер-программист,
Владивосток, Россия

Скачать книгу в zip-архиве

Читать в оригинале на сайте Open Book Project

Профессия Python-разработчик

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

При этом разработчики на Python востребованы, поскольку популярность языка растет. Есть мнение, что в области веб-разработки он даже теснит язык PHP.

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

Содержание статьи:

Кто такой Python программист и чем он занимается?

Питон считается универсальным языком, который имеет широкое применение. Однако чаще всего он используется в следующих сферах:

  • Машинное обучение. Например, различные рекомендательные алгоритмы, поиск могут быть написаны на Питоне. Активно данный язык используется в Яндексе.
  • Написание скриптов, которые встраиваются в программы, написанные на других языках. Например, в играх на Питоне пишут алгоритмы взаимодействия персонажей, обработку событий и запуск сцен. Код на Питоне есть в таких популярных играх, как World of Tanks, Battlefield 2.

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

Помимо перечисленных областей, Python разработчики востребованы:

  • В веб-разработке. Часто бэкенд-часть сайтов (которая взаимодействует с сервером) написана на Питоне. На этом языке активно пишут парсеры, то есть программы, которые собирают различные данные с сайтов.
  • В мобильной разработке. Например, серверная часть приложения Инстаграм написана на этом языке.
  • В разработке десктоп программ. Например, на Питоне создана программа GIMP, а также софт для разработки 3D-графики Blender.

Активно данный язык программирования используется в различных устройствах, например, банкоматах, ЧПУ-станках, телекоммуникационном оборудовании.

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

Плюсы и минусы профессии

  • Язык программирования Питон подходит для новичков, его относительно легко и просто выучить даже человеку, не работавшему в ИТ.
  • Много литературы и документации на русском языке, большое сообщество русскоязычных специалистов.
  • Быстрое обучение, поскольку команды языка и сам код интуитивно понятны.
  • Популярность языка продолжает расти, что обеспечивает Python программистам хорошую востребованность среди работодателей.
  • Python разработчики работают в крупных компаниях, например, такие вакансии есть в Яндекс, Майл.ру, Facebook, Yahoo, Instagram.
  • Часто работодатели ищут сотрудников, которые помимо Python, знают другие языки программирования, например, Java. Это связано с тем, что Питон обычно используется для создания части программного продукта, а для другой части необходимо знать дополнительные языки.
  • Вакансий программистов на Python больше в Москве и Санкт-Петербурге. Если вы живете в регионе, скорее всего, вам потребуется искать удаленную работу или заказы на фрилансе.

Новичкам сложнее найти работу, чем опытным специалистам. Как решить эту проблему, расскажем в статье ниже.

Сколько зарабатывают Python-программисты?

Средняя зарплата начинающего программиста (Junior) – от 60 тыс. рублей в месяц. Разработчик с опытом работы 2-3 года (Middle) получает от 120 тыс. рублей в месяц. Зарплата специалиста уровня Senior достигает 200 тыс. рублей в месяц и выше.

На фрилансе заработки тоже хорошие, особенно если работать на иностранных биржах. Ставки разработчиков на Питоне на англоязычных сайтах могут доходить до 50-80 долларов за час работы. За 6-ти часовой день специалист может заработать порядка 30 тыс. рублей. Российские заказчики платят меньше, но получить 1000-1500 руб. в час тоже можно.

Как стать Python разработчиком, что нужно знать и уметь?

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

  • Сам язык программирования.
  • Алгоритмы.
  • Фреймворк Django, если планируете трудиться в веб-разработке.
  • Освоить работу с базами данных.

Знать, как работать с API сторонних сервисов.

Где учиться программировать на Python? Бесплатные уроки

Есть несколько вариантов, как можно научиться данной профессии:

  1. Освоить все самостоятельно по материалам на бесплатных сайтах, где обучают программированию. Если вы уже работаете программистом, это оптимальный путь, поскольку базу вы уже знаете и вам просто нужно разобраться в синтаксисе нового языка.
  2. Если вы не работали в ИТ, то можно пойти на курсы Python для новичков. Например, в Нетологии есть 6-ти месячный курс, на котором вы освоите язык программирования и другие технологии, необходимые для трудоустройства. А также получите опыт разработки программ, который сможете указать в резюме. Курс создан для людей, желающих освоить профессию с нуля.
  3. Для обучения языку Python написано много книг и самоучителей, которые помогут новичку. Например, можно прочитать книгу «Изучаем Python. Программирование игр, визуализация данных, веб-приложения» Эрика Мэтиза.
  4. Посмотрите бесплатные уроки с YouTube:
    • Уроки Python для начинающих (21 видео)
    • Анализ данных на Python в примерах и задачах
    • Программирование на Python (9 лекций)

Как найти работу начинающему специалисту?

Освоив азы языка, можно устроиться стажером в небольшую компанию и попробовать себя в области веб-разработки или машинного обучения. Как правило, стажерам очень мало платят, зато обучают и подтягивают до уровня Junior-программиста. Проработав стажером 4-6 мес., вы уже сможете претендовать на обычную зарплату для ИТ-специалиста.

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

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

Где найти Python-разработчика на проект?

  1. Если вам нужен специалист на удаленную работу или разовый заказ, добавьте проект на сервис www.kadrof.ru/work Это бесплатный сайт, где публикуются вакансии для фрилансеров.
  2. Найти частного специалиста можно в каталоге веб-разработчиков. Там есть фильтры, позволяющие выбрать программистов, знающих определенные технологии.

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

Профессия программист python

Что объединяет компании Google, YouTube, Yandex, Reddit, Instagram, Dropbox, Pinterest, PayPal, Intel, NASA, Microsoft и других гигантов? Кроме имени мирового масштаба, все они полностью или частично используют код, написанный на языке Python.

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

По результатам работы в 2020 году несколько крупных изданий поставили Пайтон на первые строчки рейтингов. IEEE Spectrum определил язык, как лучший, отдав пальму первенства, ресурс Stackoverflow выделил пятую строчку, как одному из самых популярных языков, RedMonk поставил его на третье место по востребованности.

С каждым годом увеличивается количество питонистов. Кто они такие, чем занимаются, сколько зарабатывают и как стать программистом Python – рассмотрим подробнее.

Кто такие программисты Python

Программист Python – специалист, работающий с одноименным языком. Так как язык многофункционален, программист может выполнять различную работу: писать плагины и скрипты, разрабатывать игры, мобильные и веб-приложения, сопровождать ПО.

Плюсы и минусы профессии

Программирование на языке Пайтон имеет свои преимущества и недостатки.

Основные плюсы:

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

Основные минусы:

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

Что нужно знать программисту Python?

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

  1. Знание основ программирования, структур данных, ООП.
  2. Сам язык, его синтаксис, библиотеки, фреймворки (особенно Django).
  3. Базы данных.
  4. Английский язык, особенно для удаленной работы python программистом.
  5. Знать системы контроля версий (git).
  6. Разбираться в чужом коде. Здесь стоит упомянуть о том, что вторая и третья версии Питона отличаются, нужно знать о различиях.
  7. Умение работать в команде.
  8. Javascript, jQuery.

Где обучиться

Чтобы найти работу python программистом, нужно многому обучиться. Желательно, но не обязательно заканчивать высшее учебное заведение, можно заняться самообразованием или посетить специальные курсы. Многие работодатели больше не смотрят на дипломы, а интересуются только знаниями. Особенно это касается крупных компаний, таких как Яндекс или Гугл.

Если вы выбрали самостоятельное обучение, обратите внимание на книги Марка Лутца «Изучаем Python» и «Программирование на Python». Они объемные (2 тысяч страниц в обоих вместе взятых), читать их новичку сложно. Но книги Лутца дают полное понимание темы и быстрое вхождение.
Для тех, кто о программировании еще не знает ничего, можно посоветовать автора Д. Бриггса и его чудесную и легкую в освоении книгу «Python для детей». Здесь вы поймете азы профессии, научитесь писать первую программу, первую игру.

Курсы программистов Python помогут усвоить материал быстрее и легче. Их преимущество в контакте с наставниками и возможности задать вопрос и получить быстрый и понятный ответ на него.
На курсах уделяется внимание основам языка, даются домашние задания и задачи для начинающих программистов python. Внимания достойны онлайн-курсы. Есть яркие примеры обучающих сайтом, где собраны лекции и методические материалы по программированию. После прохождения обучения получаете сертификат, который можно распечатать.

Есть хорошее бесплатное мобильное приложение – SoloLearn. Учите теорию, делайте тестовые задания, решайте задачки, тренируйтесь, играя с другими пользователями. В конце курса выдают сертификат. Приложение русифицировано, позволяет изучить 9 популярных языков, машинное обучение, HTML5, CSS3, JavaScript, JQuery, Web Development.

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

Поиски работы

Программисты по уровню знаний делятся на три категории: Junior, Middle и Senior.

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

Миддл работает как самостоятельно, так и в команде, его код не требует правок. Опыт работы (чаще всего, но не обязательно) 1-3 года. Выполняет сложные задачи, пишет сложные приложения.

Синьор — опытный специалист, умеющий решать задачи любого уровня, исправлять серьёзные проблемы в коде. Чтобы стать Senior нужно очень много практики и знаний.

Легче найти работу Миддлу и Синьору, при этом вакансий для Джуниора немного. Компаний, ищущих разработчиков, интересует опыт работы, знания и умения, иногда – диплом.

Для наработки опыта можно пройти стажировку. Это Learning by Doing, вы будете работать над настоящими проектами, которые потом можно будет упомянуть в портфолио.

Кстати о резюме, python программист перед началом поиска работы должен ответственно подойти к его заполнению. Важно правильно указать навыки, знания фреймворков, при этом не показаться поверхностным человеком-оркестром. Можно упомянуть о владении другими языками, например: «Работал с PHP. Владею HTML, CSS, знаком с фреймворком Django».

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

На моем сайте регулярно публикуется подборка топовых вакансий для python программистов.

Новичкам стоит обратить внимание на фриланс, Python программисты больше востребованы на англоязычных ресурсах, таких как Upwork, GlobalFreelance.

Есть для программиста Python вакансии без опыта на Яндексе. Для сотрудничества нужно удачно пройти тестовую работу, например. Все вакансии смотрите здесь.

Сколько зарабатывают Python программисты

Программист python без опыта может зарабатывать на фриланс биржах, где средняя оплата за проект 500 – 1000$, за месяц в среднем получается 1500$. Фрилансер уровня Синьор получает еще больше.
Зарплата штатного разработчика зависит от компании и города. Для Москвы она колеблется в рамках 50 000 — 200 000 рублей, в меньших населенных пунктах зарплата начинается от 40 тысяч. В отличие от полноценных программистов Python, стажер может работать за более низкую сумму.

С развитием сферы IT- услуг, открываются новые компании, которым требуются квалифицированные сотрудники. Поэтому хороший специалист всегда востребован. В целом, обучение профессии программист Python, дело перспективное и интересное. За IT-технологиями будущее, а творить его можете вы!

Программирование на Python: особенности обучения, перспективы, ситуация на рынке труда

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

Почему Python — хороший вариант для начинающих: краткая теория

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

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

Создатель Python — нидерландский инженер Гвидо ван Россум. В конце 80-х этот специалист работал в Centrum Wiskunde & Informatica — Национальном исследовательском институте математики и информатики, расположенном в Амстердаме. Здесь Гвидо ван Россум разрабатывал язык ABC, предназначенный для обучения программированию.

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

«Пайтон» — мультипарадигмальный язык программирование. Он поддерживает объектно-ориентированный и структурный подходы, функциональное и аспектно-ориентированное программирование. В Python используется динамическая типизация. То есть тип переменной определяется в момент присваивания значения. При изменении значения может меняться тип данных.

«Пайтон» поддерживает функциональное программирование в традициях языков семейства Lisp. Вот некоторые возможности:

  • Функции высших порядков filter , map и reduce .
  • Генераторы списков (list comprehensions).
  • Генераторные выражения.
  • Множества.

Синтаксис Python простой и понятный для людей. В этом языке для выделения блоков кода применяются отступы, а не скобки. Пример кода ниже.

Философия Python поощряет простоту, эстетичность кода и отношение к работе, которое проще всего выразить английским словом fun — забава, шутка. Это частично описано в знаменитом сборнике афоризмов Zen of Python (Дзен «пайтона»).

Где используют Python: веб-разработка, AI, Big Data

Как отмечалось выше, Python — язык общего назначения. Тем не менее в нескольких сферах Python применяется чаще и успешнее всего.

Веб-разработка на Python

В веб-разработке «пайтон» применяется для серверного программирования. Питонисты работают с бэкендом веб-приложений, используя нативный Python или популярные фреймворки, например, Django, Pyramid или Flask. «Пайтон» одинаково удобно использовать как для создания прототипов или небольших приложений, так и для больших и масштабируем проектов, например, порталов, веб-сервисов, интернет-магазинов.

Machine Learning и AI на Python

Python — один из основных языков программирования, которые применяют в области машинного обучения и искусственного интеллекта (Machine Learning и Artificial Intelligence). Например, библиотека с открытым исходным кодом TensorFlow, созданная исследовательской командой Google Brain, написана с использованием Python. Google использует эту библиотеку для программирования и обучения нейронных сетей, которые используются для изучения искусственного интеллекта.

Ещё одна известная библиотека — scikit-learn. Она написана на Python с включениями Cython — статически типизированного компилируемого подмножества Python. Библиотека scikit-learn применяется в исследованиях искусственного интеллекта, для обучения инженеров machine learning, для управления промышленными системами.

Использование Python для работы с Big Data

В Python есть несколько мощных и популярных библиотек, которые предназначены для работы с большими данными: анализа, визуализации, прогнозирования тенденций. Например, библиотека с открытым исходным кодом SciPy включает модули для математических, инженерных и научных вычислений. Matplotlib — одна из самых популярных библиотек для визуализации данных. Библиотека PANDAS применяется для анализа информации.

Это не все области применения Python. Этот язык используют для создания десктопных приложений, разработки игр и 3D-графики, программ для обработки аудио, видео и изображений и так далее.

Рейтинг и перспективы Python

Один из способов оценки популярности языка программирования — индекс TIOBE. Он рассчитывается на основе количества поисковых запросов в Google и других поисковиках. Учитываются запросы, включающие название языков программирования.

Согласно индексу TIOBE, в августе 2020 года Python занимает третье место в списке самых популярных языков программирования. Он опережает JavaScript, PHP, Swift и другие популярные языки.

«Пайтон» в индексе TIOBE

В рейтинге GitHub Octoverse за 2020 год Python занимает третье место, уступая только JavaScript и Java. Рейтинг Github Octoverse отражает популярность языка среди пользователей GitHub.

«Пайтон» в рейтинге Octoverse

В рейтинге RedMonk «пайтон» также занимает третье место. Сооснователь RedMonk Джеймс Гавернер отмечает, что Python уже стал лингва франка для Data Science. То есть этот язык стал основным для этой отрасли. Тем не менее Гавернер не исключает, что в настоящий момент Python достиг пика популярности.

Справка: термином «лингва франка» называют общеизвестные языки, которые используют для общения представители разных языковых групп. Например, английский язык можно назвать лингва франка в международном общении.

Такого же мнения придерживается аналитик RedMonk Стивен О’Грейди. Он отмечает, что Python в обозримой перспективе удержит позиции, но вряд ли станет таким же популярным, как JavaScript.

Промежуточный итог: Python входит в число самых популярных языков программирования по данным рейтингов TIOBE, GitHub Octoverse и RedMonk. По мнению экспертов RedMonk, этот язык находится на пике популярности, но вряд ли станет таким же массовым, как JavaScript. В следующем разделе рассмотрим перспективы «пайтона» в контексте рынка труда.

Python на рынке труда: зарплаты, вакансии

По данным компании «Мой круг» на первое полугодие 2020 года, медианная зарплата Python-разработчиков составляет 100 000 рублей в месяц. Такие же зарплаты у специалистов по JavaScript и C#. Питонисты зарабатывают больше PHP-разработчиков. Медианные зарплаты программистов на Java, Swift и Scala выше, чем у программистов на Python.

По данным компании NewHR, программисты, работающие на Python, получают от 150 000 до 200 000 рублей. Эти данные справедливы для разработчиков уровня middle, работающих в Москве. Для senior-разработчиков на «питоне» средняя зарплата составляет от 200 000 до 250 000 тысяч рублей в месяц.

Ситуацию в регионах можно проверить самостоятельно. Например, по запросу python в Казани на hh.ru 28 августа есть 129 вакансий. Максимальная зарплата составляет 280 000 рублей, минимальная — 30 000 рублей.

Промежуточный вывод: программисты на Python востребованы на рынке труда, медианная зарплата составляет 100 000 рублей.

Python в качестве первого языка для начинающих: сложно ли изучать

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

Python считается одним из лучших и удобных языков для обучения. Значит ли это, что изучать его легко? Скорее нет. Обучение программированию всегда требует дисциплины, прилежания, концентрации.

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

Промежуточный итог: если вы только начинаете изучать программирование, Python — отличный выбор.

Перспективы Python: мнение экспертов

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

Григорий Петров: на питонистов сейчас есть огромный спрос, так как этих специалистов меньше, чем открытых вакансий

1. По вашему мнению, почему стоит изучать Python?

Python — лучший язык для обучения программированию. Это язык программирования общего назначения. Создавался как простой язык для людей. Есть баланс между сложностью изучения и сюрпризами, с которыми сталкиваются программисты при работе с языком.

У JavaScript синтаксис лучше, чем у Python. Но в JS есть сюрпризы, например, this или приведение типов типизация. Python не взрывает мозг сюрпризами, он сбалансирован. К тому же, на нём можно делать практически всё, так как это язык общего назначения.

2. Какие перспективы у этого языка программирования по сравнению с другими языками?

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

3. Будет ли Python востребован в будущем?

У Python сильные позиции в серверной разработке, AI, Big Data, в программировании в сфере обучения и науки. В веб-разработке Python востребован в бэкенд части-разработке. Фронтенд скорее всего не для Python, так как в этой нише царствует JavaScript.

В целом в тех нишах, где Python активно используется, этот язык вряд ли уступит позиции другим языкам. То есть он останется востребованным в обозримой перспективе.

4. Каковы перспективы Python-разработчика на рынке труда?

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

5. Сколько нужно учиться разработке на Python с нуля до джуниора?

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

Если учиться 2-3 часа в день, то в течение примерно трёх месяцев можно претендовать на позицию интерна. Это не джуниор-разработчик, а именно интерн. Интерну обычно нужно ещё полгода, чтобы стать джуниором. Но, повторюсь, всё зависит от человека.

Никита Левонович: «Пайтон» активно развивается, о чём свидетельствует сокращение времени релизов новых версий с восемнадцати до девяти месяцев

1. По вашему мнению, почему стоит изучать Python?

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

2. Какие перспективы у этого языка программирования по сравнению с другими языками?

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

3. Будет ли Python востребован в будущем?

Да. Насколько долго — вопрос открытый, но в ближайшие 5-10 лет востребованность языка Python, скорее всего, уменьшаться не будет.

4. Сколько нужно учиться разработке на Python с нуля до джуниора?

Все люди разные и для освоения одних и тех же навыков им нужно разное время. А самое главное — на рынке нет единых требований к джуниору. В связи с этим срок обучения может колебаться от 3 месяцев до года.

Николай Марков: без работы толковый питонист точно не останется

Николай Марков, Principal Architect в компании Aligned Research Group

1. По вашему мнению, почему стоит изучать Python?

Python является одним из самых популярных языков общего назначения. Это значит, что на нём можно писать практически всё — от веб-приложений до серьезных низкоуровневых системных штук. Так уж получилось, что у меня есть несколько студентов, род деятельности которых практически никак не связан с программированием, но им захотелось изучать Python. Например, чтобы автоматизировать какие-то ежедневные рутинные задачи, или чтобы лучше понимать исследования, которые проводит аналитический отдел в их компании. Порог вхождения не очень высок, что и позволяет добиться значимых результатов в довольно короткие сроки, а видеть результаты своего труда всегда приятно.

2. Какие перспективы у этого языка программирования по сравнению с другими языками?

Несмотря на то, что язык существует довольно давно, он активно развивается, вбирая в себя всё новые возможности и щеголяя гигантским набором модулей расширения. Кроме того, довольно большое количество разных курсов, начиная от низкоуровневой работы с сетью и кончая Data Science, переехали с других языков на Python в новых версиях. Это можно заметить, например, по проектам на Coursera.

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

3. Будет ли Python востребован в будущем?

Лично мне кажется, что Python был и будет востребован как язык для обучения, прототипирования и решения базовых бизнес-задач. И это несмотря на то, что в узком применении зачастую имеет смысл переключиться на более специализированные инструменты. Всё потому, что он дает базу, которая позволяет регулировать глубину погружения в предмет. Инженер может пойти глубже и изучать более узкую сферу, а, скажем, учёному хватит Python в качестве подручного инструмента для основных задач. А дети в школах, например, смогут после нескольких уроков Python создавать вполне рабочие проекты, например, в IoT и решении математических задач. Хорошая замена инженерному калькулятору на занятиях, правда?

4. Каковы перспективы Python-разработчика на рынке труда?

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

5. Сколько нужно учиться разработке на Python с нуля до джуниора?

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

Плюс я искренне верю, что вменяемый менеджер выделит такому «джуниору» время и возможность на самообразование внутри компании, включая бесплатные курсы и какой-никакой R&D под присмотром с code review. Так что совет тут простой — читайте требования в вакансиях, соберите на коленке пару прототипов, а дальше — вперёд, по собеседованиям!

Никита Соболев: мы прежде всего просто разработчики, инструмент не так важен

1. По вашему мнению, почему стоит изучать Python?

Да, стоит. Python — самый простой и понятный язык из всех в плане синтаксиса и концепций. В нём минимальное количество магии и неявных моментов. В нём уже заложены несколько парадигм: можно писать в ООП стиле, можно в функциональном. Можно явно проставлять типы в аннотациях, можно сделать их неявными. Учить его приятно и максимально просто. Мне кажется, что «пайтон» — лучший язык, чтобы учиться. И нет, не C (чтобы узнать как работает память!), а «пайтон».

2. Какие перспективы у этого языка программирования по сравнению с другими языками?

Мне кажется, что язык выбрал неправильную стратегию развития. Его реверансы в стороны «асинхронщины» закончились печально. Просто уже столько лет, а оно так и не заработало как нужно: примитивы для асинхронности так и остались на уровне детского сада, а батареек так и не завезли. Более того, саму красоту синтаксиса языка начинают уродовать чуждыми концепциями: f-строки, оператор моржа (он ломает столько всего!). Сама платформа развивается очень медленно и работает также. Я бы дополнительно обратил внимание на Elixir, Rust, F#, и возможно Crystal с Nim.

3. Будет ли Python востребован в будущем?

Тем не менее «пайтон» будет жить еще очень и очень долго. Гандикап огромный, синхронная версия языка всё так же работает. Сравнивать с другими сложно, потому что слишком много сфер для сравнения. В ML всё будет хорошо, для скриптов тоже. В вебе другие языки откусят свою долю.

4. Каковы перспективы Python-разработчика на рынке труда?

Мне не нравится формулировка вопроса. Я вообще не люблю понятие «джанго-разработчик» или «пайтон-разработчик». Мы прежде всего просто разработчики. Инструмент не так важен. Для разных задач нужны разные инструменты. Бэкенд пишут на одном из множества языков, фронт на тайпскрипте (или elm’е!), башскрипты для разного, Elixir для частей с высокой нагрузкой, Rust и Haskell — для души. А есть еще куча всего интересного! Резюме: хорошие разработчики всегда будут нужны, «пайтоны» приходят и уходят.

5. Сколько нужно учиться разработке на Python с нуля до джуниора?

По-разному. Я бы сказал, от года до двух. Зависит от начального уровня, наличия фундаментального образования, без которого в некоторые сферы вход вообще закрыт, знакомства с процессом разработки в целом, мотивации и таланта. У меня ушел где-то год фултайм учёбы + работы.

Заключение: Python — лучший язык для обучения с хорошими перспективами на рынке

Эксперты называют Python если не лучшим, то одним из лучших языков для изучения программирования. Простой синтаксис делает этот язык удобным для восприятия и понятным. Разработчики со знанием Python востребованы на рынке труда. Они работают в сфере веб-разработки, machine learning и Data Science. Выводы делайте самостоятельно. А если у вас остались вопросы по целесообразности изучения «пайтон», пишите их в комментариях.

В каком году появился язык haskell. Как начать писать на Haskell: опыт Python-программиста

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

Продолжая эту просветительскую работу, я бы хотел остановиться сегодня на — замечательном функциональном языке программирования. Мне уже трижды прислали один и тот же вопрос: с чего начать (продолжить) изучать Haskell?

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

0 этап — Введение. Haskell? Чо за хрень?

Хорошо известный в среде рекрутеров программистов парадокс, часто называемый как « », и он формулируется примерно так:

Если компания выбирает в качестве основного языка программирования некий малораспространенный эзотерический язык программирования, то у такой компании наибольшие шансы получить самых лучших программистов на рынке. Почему? Дело в том, что наняться в такую «странную компанию» захотят в первую очередь те программисты, для которых изучение нового не проблема; те, для которых малоизвестное и труднодоступное не является препятствием; и, наконец, те, у кого достаточно высокая самооценка, чтобы предлагать себя в таких заведомо жестких условиях.

И главное: есть два типа программистов: те, кто учатся, чтобы получить хорошую работу, и они всегда выбирают мэинстрим , ибо это значительно повышает их шансы на трудоустройство; и те — кому просто нравится учиться чему-то новому, развиваться, и они всегда выбирают самое лучшее , что зачастую далеко не самое выгодное , как делают их коллеги-карьеристы. Итак, Парадокс питона утверждает, что начиная разработку на передовой экзотике, вы подобно пылесосу притянете вторую категорию программеров (верно и обратное, насчет компаний предлагающих работу).

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

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

3. Этап — поиск глубины и чувства нового языка

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

Вот её выходные данные:

The Functional Programming Using Haskell course
(Language: English)
35 hours | 1280×720 | XviD — 1326Kbps
25.00fps | Mp3 — 96Kbps | 20.06 GB

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

4. Завершающий этап — практика

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

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

И в заключение для приверженцев других языков программирования:

Haskell — священный язык программирования, дарованный шаманам Бубенлэнд их верховным божеством Комонада как универсальное средство для общения и духовного очищения, подходящее как божественным сущностям, так и (некоторым) простым смертным, переболевшим тяжёлыми стадиями интеллекта. Из-за своего происхождения язык всегда был функционально чист. В среднем обучение Haskell’у начинается в 10-12 лет. Своевременное начало обучения гарантирует, что вы достигнете третьего уровня Силы уже к 75 годам. Не стоит откладывать на следующую жизнь то, что можно по крайней мере начать в этой.

    Типы

    Программы на языке Haskell представляют собой выражения, вычисление которых приводит к значениям. Каждое значение имеет тип. Интуитивно тип можно понимать просто как множество допустимых значений выражения. Для того, чтобы узнать тип некоторого выражения, можно использовать команду интерпретатора:type (или:t). Кроме того, можно выполнить команду:set +t, для того, чтобы интерпретатор автоматически печатал тип каждого вычисленного результата.
    Основными типами языка Haskell являются:
    Типы Integer и Int используется для представления целых чисел, причем значения типа Integer не ограничены по длине.
    Типы Float и Double используется для представления вещественных чисел.
    Тип Bool содержит два значения: True и False, и предназначен для представления результата логических выражений.
    Тип Char используется для представления символов. Имена типов в языке Haskell всегда начинаются с заглавной буквы.
    Язык Haskell является сильно типизированным языком программирования. Тем не менее в большинстве случаев программист не обязан объявлять, каким типам принадлежат вводимые им переменные. Интерпретатор сам способен вывести типы употребляемых пользователем переменных.
    Однако, если все же для каких-либо целей необходимо объявить, что некоторое значение принадлежит некоторому типу, используется конструкция вида: переменная:: Тип. Если включена опция интерпретатора +t, он печатает значения в таком же формате.
    Ниже приведен пример протокола сессии работы с интерпретатором. Предполагается, что текст, следующий за приглашением Prelude>, вводит пользователь, а следующий за этим текст представляет ответ системы.

Prelude>:set +t
Prelude>1
1:: Integer
Prelude>1.2
1.2:: Double
Prelude>’a’
’a’ :: Char
Prelude>True
True:: Bool

Из данного протокола можно сделать вывод, что значения типа Integer, Double и Char задаются по тем же правилам, что и в языке Си.
Развитая система типов и строгая типизация делают программы на языке Haskell безопасными по типам. Гарантируется, что в правильной программе на языке Haskell все типы используются правильно. С практической точки зрения это означает, что программа на языке Haskell при выполнении не может вызвать ошибок доступа к памяти (Access violation). Также гарантируется, что в программе не может произойти использование неинициализированных переменных. Таким образом, многие ошибки в программе отслеживаются на этапе ее компиляции, а не выполнения.

Арифметика

Интерпретатор Hugs можно использовать для вычисления арифметических выражений. При этом можно использовать операторы +, -, *, / (сложение, вычитание, умножение и деление) с обычными правилами приоритета.
Кроме того, можно использовать оператор ^ (возведение в степень). Таким образом, сеанс работы может выглядеть следующим образом:

Prelude>2*2
4:: Integer
Prelude>4*5 + 1
21:: Integer
Prelude>2^3
8:: Integer
Кроме того, можно использовать стандартные математические функции sqrt (квадратный корень), sin, cos, exp и т.д. В отличие от многих других языков программирования, в Haskell при вызове функции не обязательно помещать аргумент в скобки. Таким образом, можно просто писать sqrt 2, а не sqrt(2). Пример:

Prelude>sqrt 2
1.4142135623731:: Double
Prelude>1 + sqrt 2
2.4142135623731:: Double
Prelude>sqrt 2 + 1
2.4142135623731:: Double
Prelude>sqrt (2 + 1)
1.73205080756888:: Double

Из данного примера можно сделать вывод, что вызов функции имеет более высокий приоритет, чем арифметические операции, так что выражение sqrt 2 + 1 интерпретируется как (sqrt 2) + 1, а не sqrt (2 + 1). Для задания точного порядка вычисления следует использовать скобки, как в последнем примере. (В действительности вызов функции имеет более высокий приоритет, чем любой бинарный оператор.)
Также следует заметить, что в отличие от большинства других языков программирования, целочисленные выражения в языке Haskell вычисляются с неограниченным числом разрядов (Попробуйте вычислить выражение 2^5000.) В отличие от языка Си, где максимально возможное значение типа int ограничено разрядностью машины (на современных персональных компьютерах оно равно 231-1 = 2147483647), тип Integer в языке Haskell может хранить целые числа произвольной длины.

Кортежи
Помимо перечисленных выше простых типов, в языке Haskell можно определять значения составных типов. Например, для задания точки наплоскости необходимы два числа, соответствующие ее координатам. В языке Haskell пару можно задать, перечислив компоненты через запятую и взяв их в скобки: (5,3). Компоненты пары не обязательно должны принадлежать одному типу: можно составить пару, первым элементом которой будет строка, а вторым — число и т.д.
В общем случае, если a и b — некоторые произвольные типы языка Haskell, тип пары, в которой первый элемент принадлежит типу a, а второй — типу b, обозначается как (a,b). Например, пара (5,3)имеет тип (Integer, Integer); пара (1, ’a’) принадлежит типу (Integer, Char). Можно привести и более сложный пример: пара((1,’a’),1.2) принадлежит типу ((Integer,Char),Double). Проверьте это с помощью интерпретатора. Следует обратить внимания, что хотя конструкции вида (1,2) и (Integer,Integer) выглядят похоже, в языке Haskell они обозначают совершенно разные сущности. Первая является значением, в то время как последняя — типом. Для работы с парами в языке Haskell существуют стандартные функции fst и snd, возвращающие, соответственно, первый и второй элементы пары (названия этих функций происходят от английских слов «first» (первый) и «second» (второй)). Таким образом, их можно использовать следующим образом

Prelude>fst (5, True)
5:: Integer
Prelude>snd (5, True)
True:: Bool
Кроме пар, аналогичным образом можно определять тройки, четверки и т.д. Их типы записываются аналогичным образом.
Prelude>(1,2,3)
(1,2,3) :: (Integer,Integer,Integer)
Prelude>(1,2,3,4)
(1,2,3,4) :: (Integer,Integer,Integer,Integer)
Такая структура данных называется кортежем. В кортеже может хранится фиксированное количество разнородных данных. Функции fst и snd определены только для пар и не работают для других кортежей. При попытке использовать их, например, для троек, интерпретатор выдает сообщение об ошибке. Элементом кортежа может быть значение любого типа, в том числе и другой кортеж. Для доступа к элементам кортежей, составленных из пар, может использоваться комбинация функций fst и snd. Следующий пример демонстрирует извлечение элемента ’a’ из кортежа
(1, (’a’, 23.12)):
Prelude>fst (snd (1, (’a’, 23.12)))
’a’ :: Integer

Списки
В отличие от кортежей, список может хранить произвольное количество элементов. Чтобы задать список в Haskell, необходимо в квадратных скобках перечислить его элементы через запятую. Все эти элементы должны принадлежать одному и тому же типу. Тип списка с элементами, принадлежащими типу a, обозначается как [a].

Prelude>
::
Prelude>[’1’,’2’,’3’]
[’1’,’2’,’3’] ::
В списке может не быть ни одного элемента. Пустой список обозначается как .
Оператор: (двоеточие) используется для добавления элемента в начало списка. Его левым аргументом должен быть элемент, а правым — список:
Prelude>1:
::
Prelude>’5’:[’1’,’2’,’3’,’4’,’5’]
[’5’,’1’,’2’,’3’,’4’,’5’] ::
Prelude>False:
::
С помощью оператора (:) и пустого списка можно построить любой список:
Prelude>1:(2:(3:))
:: Integer
Оператор (:) ассоциативен вправо, поэтому в приведенном выше выражении можно опустить скобки:
Prelude>1:2:3:
:: Integer
Элементами списка могут быть любые значения — числа, символы, кортежи, другие списки и т.д.
Prelude>[(1,’a’),(2,’b’)]
[(1,’a’),(2,’b’)] :: [(Integer,Char)]
Prelude>[,]
[,] :: []
Для работы со списками в языке Haskell существует большое количество функций. В данной лабораторной работе рассмотрим только некоторые из них.
Функция head возвращает первый элемент списка.
Функция tail возвращает список без первого элемента.
Функция length возвращает длину списка.
Функции head и tail определены для непустых списков. При попытке применить их к пустому списку интерпретатор сообщает об ошибке. Примеры работы с указанными функциями:
Prelude>head
1:: Integer
Prelude>tail
::
Prelude>tail
:: Integer
Prelude>length
3:: Int
Заметьте, что результат функции length принадлежит типу Int, а не типу Integer.
Для соединения (конкатенации) списков в Haskell определен оператор ++.
Prelude>++
:: Integer

Строки
Строковые значения в языке Haskell, как и в Си, задаются в двойных кавычках. Они принадлежат типу String.
Prelude>»hello» «hello» :: String
В действительности строки являются списками символов; таким образом, выражения «hello», [’h’,’e’,’l’,’l’,’o’] и

’h’:’e’:’l’:’l’:’o’: означают одно и то же, а тип String является синонимом для . Все функции для работы со списками можно использовать при работе со строками:
Prelude>head «hello»
’h’ :: Char
Prelude>tail «hello»
«Hello» ::
Prelude>length «hello»
5:: Int
Prelude>»hello» ++ «, world»
«hello, world» ::
Для преобразования числовых значений в строки и наоборот существуют функции read и show:
Prelude>show 1
«1» ::
Prelude>»Formula » ++ show 1
«Formula 1» ::
Prelude>1 + read «12»
13:: Integer
Если функция show не сможет преобразовать строку в число, она сообщит об ошибке.

Функции
До сих пор мы использовали встроенные функции языка Haskell. Теперь пришла пора научиться определять собственные функции. Для этого нам необходимо изучить еще несколько команд интерпретатора (напомним, что эти команды могут быть сокращены до одной буквы):
Команда:load позволяет загрузить в интерпретатор программу на языке Haskell, содержащуюся в указанном файле.
Команда:edit запускает процесс редактирования последнего загруженного файла.
Команда:reload перечитывает последний загруженный файл. Определения пользовательских функций должны находиться в файле, который нужно загрузить в интерпретатор Hugs с помощью команды:load.
Для редактирования загруженной программы можно использовать команду:edit. Она запускает внешний редактор (по умолчанию это Notepad) для редактирования файла. После завершения сеанса редактирования редактор необходимо закрыть; при этом интерпретатор Hugs перечитает содержимое изменившегося файла. Однако файл можно редактировать и непосредственно из оболочки Windows. В этом случае, для того чтобы интерпретатор смог перечитать файл, необходимо явно вызывать команду:reload.
Рассмотрим пример. Создайте в каком-либо каталоге файл lab1.hs. Пусть полный путь к этому файлу — с:\labs\lab1.hs (это только пример, ваши файлы могут называться по-другому). В интерпретаторе Hugs выполните следующие команды:

Prelude>:load «c:\\labs\\lab1.hs»
Если загрузка проведена успешно, приглашение интерпретатора меняется на Main>. Дело в том, что если не указано имя модуля, считается, что оно равно Main.
Main>:edit
Здесь должно открыться окно редактора, в котором можно вводить текст программы. Введите:
x =
Сохраните файл и закройте редактор. Интерпретатор Hugs загрузит файл
с:\labs\lab1.hs и теперь значение переменной x будет определено:
Main>x
::
Обратите внимание, что при записи имени файла в аргументе команды:load символы \ дублируются. Также, как и в языке Си, в Haskell символ \ служит индикатором начало служебного символа (’\n’ и т.п.) Для того, чтобы ввести непосредственно символ \, необходимо, как и в Си, экранировать его еще одним символом \.
Теперь можно перейти к определению функций. Создайте, в соответствие с процессом, описанным выше, какой-либо файл и запишите в него следующий текст:

square:: Integer -> Integer
square x = x * x

Первая строка (square:: Integer -> Integer) объявляет, что мы определяем функцию square, принимающую параметр типа Integer и возвращающую результат типа Integer. Вторая строка (square x = x * x) является непосредственно определением функции. Функция square принимает один аргумент и возвращает его квадрат. Функции в языке Haskell являются значениями «первого класса». Это означает, что они «равноправны» с такими значениями, как целые и вещественные числа, символы, строки, списки и т.д. Функции можно передавать в качестве аргументов в другие функции, возвращать их из функций и т.п. Как и все значения в языке Haskell, функции имеют тип. Тип функции, принимающей значения типа a и возвращающей значения типа b обозначается как a->b.
Загрузите созданный файл в интерпретатор и выполните следующие команды:

Main>:type square
square:: Integer -> Integer
Main>square 2
4:: Integer
Заметим, что в принципе объявление типа функции square не являлось необходимым: интерпретатор сам мог вывести необходимую информацию о типе функции из ее определения. Однако, во-первых, выведенный тип был бы более общим, чем Integer -> Integer, а во-вторых, явное указание типа функции является «хорошим тоном» при программировании на языке Haskell, поскольку объявление типа служит своего рода документацией к функции и помогает выявлять ошибки программирования.
Имена определяемых пользователем функций и переменных должны начинаться с латинской буквы в нижнем регистре. Остальные символы в имени могут быть прописными или строчными латинскими буквами, цифрами или символами _ и ’ (подчеркивание и апостроф). Таким образом, ниже перечислены примеры правильных имен переменных:

var
var1
variableName
variable_name
var’

Условные выражения

В определении функции в языке Haskell можно использовать условные выражения. Запишем функцию signum, вычисляющую знак переданного ей аргумента:

signum:: Integer -> Integer
signum x = if x > 0 then 1
else if x else 0

Условное выражение записывается в виде:
if условие then выражение else выражение. Обратите внимание, что хотя по виду это выражение напоминает соответствующий оператор в языке Си или Паскаль, в условном выражении языка Haskell должны присутствовать и then-часть и else-часть. Выражения в then-части и в else-части условного оператора должны принадлежать одному типу. Условие в определении условного оператора представляет собой любое выражение типа Bool. Примером таких выражений могут служить сравнения. При сравнении можно использовать следующие операторы:
, = — эти операторы имеют такой же смысл, как и в языке Си (меньше, больше, меньше или равно, больше или равно).
== — оператор проверки на равенство.
/= — оператор проверки на неравенство.
Выражения типа Bool можно комбинировать с помощью общепринятых логических операторов && и || (И и ИЛИ), и функции отрицания not.
Примеры допустимых условий:
x >= 0 && x x > 3 && x /= 10
(x > 10 || x Разумеется, можно определять свои функции, возвращающие значения типа Bool, и использовать их в качестве условий. Например, можно определить функцию isPositive, возвращающую True, если ее аргумент неотрицателен и False в противном случае:
isPositive:: Integer -> Bool
isPositive x = if x > 0 then True else False

Теперь функцию signum можно определить следующим образом:
signum:: Integer -> Integer
signum x = if isPositive x then 1
else if x else 0
Отметим, что функцию isPositive можно определить и проще:
isPositive x = x > 0

Информация бралась с: https://sguprog.narod.ru/

Функциональное программирование на Haskell

Часть 1. Введение

Серия контента:

Императивное программирование

Наиболее распространены императивные языки , в которых вычисление сводится к последовательному выполнению инструкций. Решение задачи на императивном языке сводится к описанию того, что необходимо проделать, чтобы получить результат. Классические примеры – FORTRAN (1957), ALGOL (1958) и C (1972).

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

Переменные рассматриваются как изменяющиеся во времени ячейки памяти. Текущие значения переменных в программе образуют изменяющееся состояние.

Пример императивного кода – процедура для вычисления факториала на C:

Здесь повторение операции умножения выражено через цикл. В процессе вычисления изменяются значения переменных x и n .

Инициализация: n:= 3; x:= 1; Первый виток цикла: x:= 1*3 = 3; n:= 3-1 = 2; Второй виток цикла: x:= 3 * 2 = 6; n:= 2 — 1 = 1; Третий виток цикла: x:= 6 * 1 = 6; n:= 1 — 1 = 0; Результат — 6

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

Функции и функциональность

В математическом смысле функция f: X → Y – это правило, сопоставляющее элементу x из множества X (области ) элемент y = f x из множества Y (кообласти ).

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

Если значения определены для всех элементов области, то функция называется всюду определенной; в противном случае она называется частичной.

Как и в математике, в интересующих нас функциональных языках не существует ячеек, хранящих различные значения. Переменные являются просто именами значений .

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

fac 0 = 1 fac n = n * fac (n-1)

n – формальный аргумент функции fac . В правой части после знака = описано, что функция делает со своим аргументом. Базовые функции для умножения и вычитания записаны через инфиксные (указываемые между аргументами) операторы * и — .

Здесь уравнений два. При вычислении функции уравнения просматриваются по порядку. Если n = 0, то будет использовано первое уравнение. Если n ≠ 0, то оно не подойдет, и задействуется второе.

Обратите внимание: аргументы функции перечисляются рядом с ее именем через пробел. Это удобно, потому что применение функции очень часто встречается в функциональных программах (таблица 1).

Запись в математике Запись в Haskell
f(x) f x
f(x,y) f x y
f(g(x)) f (g x)
f(g(x),h(y)) f (g x) (h y)
f(x) + g(x) f x + g x
f (x+y) f (x+y)
f(-x) f (-x)

Таблица 1. Запись применения функции в математике и в Haskell

Уравнения для fac составляют точное определение функции, а не последовательность действий по вычислению, как это было в императивном коде.

Используется рекурсия, т. е. fac определяется через саму себя. Такое определение работает, потому что fac выражается через более простой случай и, в конечном счете (если n ≥ 0), доходит до базового случая n = 0. Вычисление fac 3 по такому определению можно произвести так (на каждом шаге подчеркнуты упрощаемые выражения):

fac 3 → 3 * fac 2 → 3 * (2 * fac 1) → 3 * (2 * (1 * fac 0)) → 3 * (2 * (1 * 1)) → 3 * (2 * 1) → 3 * 2 → 6

Здесь мы применили f к значению 3 . При этом 3 называется фактическим аргументом .

Функциональный подход сосредоточен на вычислении выражений, а не на выполнении команд. Фактически, функциональная программа – это выражение, и ее выполнение соответствует вычислению выражения.

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

Обратите внимание, что для n ffp r 0 = 1 ffp r k = (r-k+1) * ffp r (k-1)

В первом уравнении r не используется, поэтому можно использовать заменитель _ и писать ffp _ 0 = 1 .

Можно убедиться, что

(проверьте это). Поэтому уравнения факториала можно заменить на

Как только мы записали уравнения функции ffp , ее можно рассматривать как абстрактный черный ящик с двумя входами и одним выходом не заботясь о том, что именно происходит внутри. Всё, что для нас теперь важно, – это корректное отображение входов в выход.

Рисунок 2. Черный ящик, вычисляющий убывающую факториальную степень

Возьмем еще один черный ящик (/) с двумя входами x и y и выходом, равным частному x/y:

будет вычислять такая схема:

Рисунок 3. Схема из черных ящиков, вычисляющая биномиальный коэффициент

Она соответствует выражению

Определим искомую функцию:

binc r k | k >= 0 = ffp r k / fac k | otherwise = 0

Такая запись называется уравнением с условиями (сравните с математической записью определения). После | и до знака = стоят условия. « otherwise » означает «иначе». Подробно это будет рассмотрено в последующих статьях.

Пример вычисления binc 6 2:

binc 6 2 → ffp 6 2 / fac 2 → (5 * ffp 6 1) / fac 2 → (5 * (6 * ffp r 0)) / fac 2 → (5 * (6 * 1)) / fac 2 → (5 * 6) / fac 2 → 30 / fac 2 → 30 / ffp 2 2 → 30 / (1 * ffp 2 1) → 30 / (1 * (2 * ffp r 0)) → 30 / (1 * (2 * 1)) → 30 / (1 * 2) → 30 / 2 → 15

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

Это приводит к важному понятию чистоты.

Чистота

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

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

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

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

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

Каждое выражение в функциональном языке соответствует своему значению; вычисление только модифицирует выражение, но на значение не влияет.

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

Язык без побочных эффектов называется чисто функциональным .

Такие языки, как ML и Scheme, в целом являются функциональными по стилю, однако допускают как присваивания, так и побочные эффекты.

Примеры чисто функциональных языков: Miranda , Haskell и Clean .

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

Ленивость и нестрогость

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

Приблизительно этому соответствует то, что в функциональных языках называется энергичным и ленивым вычислением. В энергичном случае вычисляется всё, что можно, а в ленивом – всё, что нужно. (Мы отложим формальный подход к этому вопросу до тех пор, пока не будет выяснено, какая модель вычислений лежит в основе функциональных языков.)

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

Например, наша функция binc всегда будет требовать значение k , но значение r требуется, только если k ≥ 0.

В соответствии с этим, говорят о языках со строгой семантикой и языках с нестрогой семантикой. («Нестрогость» и «ленивость» – не одинаковые, но близкие понятия.)

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

В нестрогом языке вычисление производится по необходимости. Если f нестрогая, то вычисление f e может завершиться, даже если вычисление e не завершается.

обозначает список из трех элементов. Вычисление fac (-1) зацикливается. Значит, вычисление списка также зациклится.

Пусть теперь функция length возвращает длину списка. Выражение

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

Примеры нестрогих языков: Miranda и Haskell. Строгие языки – ML и Scheme.

Вопрос строгости достаточно тонок, и его нельзя свести к простому «Что удобнее и эффективнее?» >Передача отложенных вычислений вместо значений в ходе вызова функции связана с определенными затратами. Вместе с тем во многих ситуациях ленивость позволяет экономить на вычислениях или записывать такие выражения, которые бы не вычислились или вычислялись бы бесконечно в энергичном языке.

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

Краткая история

Функциональное программирование черпает идеи из комбинáторной логики и лямбда-исчисления .

Одними из первых языков с функциональным стилем были LISP (1958), APL (1964), ISWIM (1966) и (1977).

К концу 1980-х годов уже имелось много функциональных языков. Среди тех, которые оказали значительное влияние на Haskell:

  • (1973) – первый язык с типизацией Хиндли–Милнера.
  • SASL , KRC , Miranda (1972–1985) – одни из первых ленивых языков.
  • Hope (1980) – один из первых языков с алгебраическими типами данных. Haskell разрабатывался многочисленной группой исследователей с 1987 г. Он назван в честь Хаскелла Карри .

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

Нововведения Haskell – монады и классы типов. Другие сильные стороны, заимствованные из других языков – каррирование, алгебраические типы данных, сопоставление с образцом. (Здесь мы просто приводим набор ключевых слов; все эти понятия скоро будут разъяснены.)

Последнее зафиксированное описание – Haskell 98, однако язык постоянно развивается и усложняется; сейчас планируется выход Haskell» .

Haskell стал самым популярным нестрогим чисто функциональным языком. На Haskell реализовано много сложных проектов:

  • Компиляторы и другие средства разработки.
  • Распределенная система управления версиями Darcs .
  • Оконный менеджер xmonad .
  • Сервер Web-приложений HAppS .
  • Интерпретатор/компилятор Pugs для языка Perl 6.
  • Операционная система House .
  • Язык описания аппаратных средств Lava .
  • Система обработки натурального языка LOLITA.
  • Системы доказательства теорем Equinox / Paradox и Agda .

Основные источники информации по Haskell

У Haskell имеется широкое и дружелюбное сообщество.

Основной источник информации – сервер haskell.org .

Есть очень оживленный IRC-канал #haskell на irc.freenode.net . В нем можно быстро получить любезный ответ практически на любой вопрос.

Множество тематических блогов собирается на https://planet.haskell.org/

  • Хорошим введением в Haskell может быть руководство A Gentle Introduction to Haskell 98 .
  • Документацию по обширным библиотекам смотрите по адресу https://haskell.org/ghc/docs/latest/html/libraries/
  • Формальный отчет – The Haskell 98 Report .
  • Редактирование и выполнение кода

    Реализации Haskell

    Формально, Haskell не имеет какой-то одной «стандартной» реализации.

    Для интерактивной работы подойдет легковесный интерпретатор Hugs .

    Также есть интересный проект Yhc , компилирующий исходные тексты в байткод, и Helium – учебный вариант Haskell, дружественный к новичкам (например, выдающий более ясные сообщения об ошибках). Однако они еще находятся в процессе разработки.

    Де-факто стандартным стал компилятор/интерпретатор GHC. Он является наиболее продвинутым, во всём соответствует стандарту и предлагает ряд экспериментальных расширений. Мы сконцентрируемся на нем.

    GHC можно загрузить по адресу https://haskell.org/ghc/ . Если вы используете GNU/Linux, то посмотрите готовые сборки в своем дистрибутиве. Для MacOS X и Windows можно также найти бинарные файлы. (Учтите, что сборка GHC прямо из исходников может быть довольно утомительным занятием.)

    Нас в первую очередь будет интересовать интерактивная программа ghci, в которой удобно испытывать учебные примеры.

    Итак, после установки GHC вы можете запустить в терминале ghci:

    Здесь Prelude – это название загруженного модуля. В Prelude содержатся основные определения, и он всегда задействуется по умолчанию. Изучая или переписывая самостоятельно код Prelude, начинающие могут узнать много нового. (Мы с вами тоже отчасти будем это делать.)

    Символ > означает, что ghci ожидает пользовательский ввод. Это могут быть выражения Haskell, а также команды для интерпретатора.

    Клавишами ← и → можно перемещать курсор по командной строке ghci. и ↓ пролистывают историю команд назад и вперед.

    Вместо Prelude> или других имен модулей мы дальше будем писать ghci> (если хотите сделать так же, выполните в ghci команду:set prompt «ghci> «).

    Для начала ghci можно использовать как продвинутый калькулятор:

    ghci> 1*2 + 2*3 + 3*5 23 ghci> 23^23 ghci> gcd 3020209 1161615 232323

    Операторы совпадают с принятыми в других языках (таблица 2).

    Таблица 2. Арифметические операторы из Prelude

    Для них используется инфиксная запись и соответствующий приоритет. Например, 2*3+4 соответствует (2*3)+4 , а 2^3^4 – 2^(3^4) . Чтобы изменить принятый приоритет, можно расставить скобки.

    В ghci имеется специальная переменная it , равная значению последнего успешно вычисленного выражения.

    ghci> 15 — 2 13 ghci> it + 10 23

    Редактирование исходного кода

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

      Расширение для Emacs : https://www.iro.umontreal.ca/

    monnier/elisp/

  • Расширение для Vim : https://projects.haskell.org/haskellmode-vim/
  • Другие средства разработки описаны на странице https://haskell.org/haskellwiki/Libraries_and_tools/Program_development

    Для кода Haskell используется расширение файлов.hs .

    Если вы запишете код на Haskell в файл foo.hs , то определения загружаются в ghci командой:load foo . Параллельно файл можно редактировать и при необходимости перезагружать определения при помощи:reload .

    Текущая директория изменяется командой:cd (например, :cd /home/bob).

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

    $ ghci ghci, version 6.10.3: https://www.haskell.org/ghc/ 😕 for help Loading package ghc-prim . linking . done. Loading package integer . linking . done. Loading package base . linking . done. Prelude> :load fph01.lhs Compiling Main (fph01.lhs, interpreted) Ok, modules loaded: Main. *Main> ffp 6 6 720 *Main> fac 6 720 *Main> binc 6 2 15.0 *Main> binc 6.5 4 23.4609375

    Эти и другие команды можно сокращать – вместо:load использовать:l , вместо:reload – :r и так далее.

    Список команд интерпретатора выводит:help . Для выхода из ghci нужно набрать:quit .

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

    ghci> let double x = 2*x ghci> double 23 46

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

    ghci> let < fac 0 = 1; fac n = n * fac (n-1) >ghci> fac 23 25852020738884976640000

    Заключение

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

    В 1985 году был разработан первый полностью функциональный язык, названный Мирандой (предшественником его был Lisp, который нельзя считать чисто функциональным). Он был очень популярен в среде программистов, однако, к сожалению, принадлежал только одной компании. Поэтому его дальнейшее развитие было сильно ограничено, что привело к возникновению множества похожих на него независимых языков. В 1987 в Орегоне был собран комитет, состоящий из энтузиастов функционального программирования, который постановил, что им необходим единый язык, который бы сосредоточил в себе лучшие достижения ФП за последние годы. В результате этого в 1990 году вышла первая версия, названная по имени Хаскелла Карри, известного математика. В 1999 был опубликован стандарт языка, а компилятор GHC, разработанный в университете Глазго стал самой известной реализацией языка (кстати, GHC, примерно на 80 % написан на самом хаскелле).

    Философия языка Haskell

    Haskell, мягко говоря, не похож на большинство своих объектно-ориентированных собратьев. Например, здесь нет привычных операторов присваивания значения переменной (вообще, переменных тоже нет) или циклов (вместо циклов используется рекурсия). А ещё, он с самого начала поддерживал такие вещи, как лямбда-исчисления, нестрогую семантику, монадическую систему. Некоторые элементы из этого (лямбда-выражения, которые происходят от лямбда-исчислений) только недавно внедрили в такие языки, как Java, Python или JavaScript.

    Особо стоить отметить так называемые ленивые (отложенные) вычисления. Суть их сводится к тому, что вычисления не производятся, пока они не будут необходимы. Так, например, если мы определили некоторые выражения (пусть будут две разных суммы чисел или два разных произведения), то они не будут вычислены до тех пор, пока их не потребуется сравнить между собой или произвести с ними другие операции. Отсюда же происходит и другая потрясающая возможность Haskell — манипулирование бесконечными последовательностями (списками). Если на объектно ориентированном языке попробовать работать с такими данными, то получим просто переполнение памяти. А ленивые вычисления позволяют получать только необходимые элементы из этих списков, поэтому программа на хаскелле будет иметь большое преимущество перед другими. Например, в задачах по сортировке данных. Это также позволяет сокращать число шагов выполнения и экономить ресурсы оперативной памяти и решить проблему распараллеливания программы не прикладывая никаких усилий.

    Будет также нелишним рассказать о HaskellDB. Это библиотека, которая позволяет писать запросы к базе данных при помощи функций Haskell, не используя SQL. Её главное преимущество в том, что запросы проверяются во время компиляции. Но если необходимо, то в хаскелле можно использовать и просто SQL запросы, без данной библиотеки.

    Где применяется Haskell

    Haskell некоторое время назад был известен только в сфере фанатов математики и функционального программирования, однако, вопреки слухам, это уже давно не так. Сейчас его используют в Facebook для фильтров спама и он успешно справляется со своей задачей. Возможности Хаскель изучали специалисты в Microsoft Research, в результате чего появилась урезанная версии языка, названная F#, которая сейчас доступна в Visual Studio.

    Разработчики промышленных приложений тоже уже оценили преимущества функционального Haskell. В СНГ некоторые компании использовали Haskell для разработки систем управления услугами,а в Европе его многократно использовали в сфере финансового программирования (инвестиционные банки).

    Haskell также хорошо подходит для создания оконных приложений (GUI). Можно найти сделанные на Haskell текстовые редакторы, оконные менеджеры, торрент-клиенты, игры (шутеры и логические), браузеры, движки для рендеринга 3D и.т.д. Уже существуют веб-фреймворки на нем, а также приложения для работы с базами данных. Также известен инструмент для криптографии под названии Cryptol и система управления версиями Darcs.

    Сложность обучения Haskell

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

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

    Плюсы/минусы Haskell

    Плюсы Хаскелля — это его красота и лаконичность. Программы на Haskell проще читать и понимать (даже не зная некоторых деталей языка). Его синтаксис защищает программиста от типичных ошибок. На нем проще спроектировать и создать даже большие сложные программы. И он лишен многих типичных проблемы других языков.

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

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

    Сопутствующие технологии

    GHC — самый популярный, на сегодняшний день, компилятор для хаскелля.

    Snap, Yesod, Happstack — фреймворки, предназначенные для веб-разработки.

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

    Bluespec SystemVerilog — расширение для хаскелля, применяется для проектирования полупроводниковых схем.

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

    И хотя я иногда прибегаю к помощи Python, большую часть работы в вебе я теперь делаю на Haskell.

    В первую очередь — данные

    Я думал о переходе от динамического языка к статическому, а в Haskell’e структура данных, с которыми вы работаете, четко описывается при объявлении. В Python в большинстве случаев эту задачу выполняет код.

    Когда я впервые увидел функции в Haskell, я задался вопросом: «Что представляют собой данные? Эта функция что-то берет на вход и выдает что-то на выходе?» А при работе с Python у меня возникал вопрос: «WHAT DOES THE CODE SAY?»

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

    Читаемость кода

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

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

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

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

    А более мощные абстракции в Haskell и вовсе напоминают некую магию, которой я пытался избегать при работе с Python.

    Про читаемость я говорю серьезно

    Сначала поверьте и убедите себя, что, да, люди действительно читают листинги на этом новом для вас языке, причем делают это быстро и регулярно. Разобравшись наконец с большей частью известных нюансов, я начал спокойнее относиться к коду на Haskell.

    Комментарии. Они занимают верхнюю строчку в одной из глав нашей «книги».

    Эта глава описывает то, как Томми пошел в магазин и купил утку.

    Функции из другой, уменьшенной функции, в общей картине сокращают код по максимуму.

    Краткость. Вам не потребуется тонна кода для воплощения ваших идей.

    Вставные символы

    Я также хотел упомянуть о вставных функциях, которые распространены в языке Haskell. Вставные функции (или операторы) — это те функции, которые используют between для двух аргументов вместо before . Простым примером является «+».

    В языке Haskell мы имеем несколько вставных символов, которые используются по умолчанию: $, , , др. Они могут вас немного смутить на начале пути.

    Не переживайте! Как только вы научитесь применять их, вы поймете, как они полезны и просты. Я насчитал около 5 символов, которые я использую регулярно.

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

    Нужно полностью обновить знания

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

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

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

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

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

    Map (+1) — results in

    Так я дал название этому — мапа. Слово «мапа» является очень простым для запоминания. Список — это функтор. Список — это мапа.

    Моя система проверки ошибок

    Когда я писал на Python, моим инструментом отладки были операторы печати.

    В Haskell я пользовался систематическими инструментами.

    Но! Вы можете применить Debug.Trace . Данный прием схож с тем, как в Python функция печати не зависит от Haskell IO. И данный модуль может вначале принести пользу. Когда вы только начинали работать с Haskell, вы думали о том, как много вы будете его использовать?

    Если вы не будете использовать операторы трассировки в вашем коде после проверки ошибок, то вы сразу заметите, что ваш код в Haskell выглядит хуже, чем в Python.

    Лучший учебник по монадам

    Каждый раз, когда вы слышите об успехе человека, программирующего на Haskell, вы задумываетесь: «Как этот человек до конца усвоил монады?» Итак, все по порядку.

    Я должен провести синтаксический анализ. Я кое-что знал об этом, когда писал на Python. Но, в силу моей неопытности в этой области, сейчас сделать анализ достаточно сложно.

    Окей, сейчас я расскажу подробнее. Я буду объяснять на Haskell.

    Я нашел видео на YouTube, «Parsing Stuff in Haskell », в котором описывалось, как сделать JSON анализ в Haskell, используя при этом библиотеку Parsec.

    Это видео помогло мне ненароком понять, как можно, используя монады и аппликативные функторы, создать то, что мне требовалось. Я понял, как их функции (har, har) соединяются друг с другом.

    После написания синтаксического анализа при помощи видео, я начал понимать весь код. Я также начал понимать всю его «природу». Но на начальном этапе это не пригодится.

    Итак, Parsec делает свое дело достаточно неплохо, так что моя неопытность при написании анализа практически не заметна. Так же, как и любой другой начинающий в Haskell, я с лёгкостью мог даже в начале знакомства с этим языком делать неплохие программы и операции.

    Польза от ваших знаний

    Haskell является моим основным языком по нескольким причинам:

    1. Выбор технологий, которыми я буду пользоваться.
    2. Я могу писать свои программы быстрее, и чаще всего эти программы я и продаю.
    3. Не приходится иметь дело с мелкими багами.
    4. Даже сталкиваясь с несколькими ошибками, я быстро решаю их, так как они более-менее понятны.
    5. Python не делал акцент на скорости работы. Haskell делает то же самое, но выбор все же за мной.
    6. Рефакторинг, по сути, достаточно «ветреный». В Python я иногда сильно ругал себя, когда забывал править небольшие ошибки в коде, которые позже вызывали огромные затруднения.
    7. Замечательные библиотеки. Основная особенность Haskell заключается в высоком качестве библиотек.
    8. Сообщество , всегда готовое помочь.
    9. Простота масштабирования кода до нужного ядра.
    10. Haskell часто обновляется. В прошлом году, когда GHC (компилятор для Haskell) был обновлен до версии 7.8, делая при этом написание кода в два раза удобнее, были ускорены многие веб-сервера.

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

    Что стоит изучать начинающему python-программисту?

    Django, Flask — деньги сразу
    помимо выучить еще и 2-3 проекта нужно сделать успеть,за год планируемый
    помимо Мускуля — PostgreSQL, иногда он предпочтительней, также в Джанге, кажется, уже по умолчанию
    также AngularJS (да, не Питон, «а шо делать»(с))

    ну а потом всякие aiohttp, kivy, pycuda и прочие тяжкие

    Всем привет! Я студент, учусь на втором курсе. До недавнего времени плыл по течению, просто хорошо учился в инсте (т.е. есть только опыт написания простых прогармм на Дельфи), сейчас же финансовое положение в семье заставило задуматься о своём будущем.

    Как бы избито это не звучало, но забудь подходы к программированию, которые у тебя были в ВУЗе, тот опыт полезен, но пока его придержи. Начни с освоения контроля версий, разберись с пакетами, зависимостями, привыкай перед тем как приступить к задаче, сначала исследовать — никто ли до тебя не занимался ли решением такой же задачи? В общем старайся максимально использовать чужой код, анализировать его, смотреть с какими проблемами сталкивались люди при его написании и т.д. И старайся писать понятный, не только тебе, код.
    Анализ чужого кода — важная, недооценённая студентами, составляющая работы.

    Начал изучать Питон (взял на курсере «Intro to interactive programming in Python», сейчас перехожу ко второй его части), т.к. он используется в DSP и компьютерном зрении, а мне эти области интересны. Также полезной вещью в моём багаже будет MySQL, который у меня сейчас идёт в универе.

    Питон относительно спорное начинание. Да, в перспективе — он хорош, но, субъективно, найти работу на PHP без коммерческого опыта — проще(это если финансовое положение такое что надо вот сейчас найти работу). Спрос большой, ровно как и спектр задач. Когда в голове будет понимание спектра задач для языка и вообще того какие задачи возникают в коммерческой разработке, тогда уже можно примерять Python к тем задачам которые перед тобой стояли.
    Если есть время(3-6 месяцев) то можно подучить джангу/фласк(только что-то одно) и идти работать стажёром — бесплатно или же помогать в open source(тут как раз и поймёшь примерные задачи, которые будут вставать перед тобой в работе, потому как туториалы хорошо, а реальность отличается).
    Не знаю как у вас дают БД, у нас давали так себе, поэтому лучше дотягивай сам, хотя бы то как язык работает с базой.
    Если хочешь научное — компьютерное зрение и т.д., устраивайся на кафедру (вариант с натяжкой — работу где у тебя будет много свободного времени(сторож, продавец простаивающий)) и штудируй литературу пачками, т.к. минимальные требования там высокие и нужно больше фундаментальных знаний, нежели знания ЯП. Плюс ко всему — участие во всех олимпиадах по программированию, интересные курсовые работы, по актуальным темам.

    Среднесрочную задачу я перед собой поставил конкретную: через год устроиться на оплачиваемую стажировку, чтобы начать получать хотя бы какие-то деньги и опыт. Поэтому вариант с поступлением в ШАД, который я изначально рассматривал как основной, отпал, и я решил перенести эту затею на год вперёд.

    На год вперед после работы? Потому как ШАД+оплачиваемая стажировка+учеба = ничего. Нигде не будешь успевать. По большому счёту — не ШАДом единым, если год самообучения, плюс год работы, то лучше включить в эти 2 года ещё и изучение того что проходят в ШАД, чтобы быть подкованнее

    В итоге у меня вопрос: что посоветуете сделать/изучить? Сконцентрироваться на Django, мб html/css, и т.п. и гарантированно идти стажироваться в заданный срок? Или рискнуть, попробовать делать то, что интересно (изучить dsp на базе питона, либо opencv), и податься в какое-нибудь крутое место типа Яндекса, в надежде, что на тебя обратят внимание? (Наиболее туманный для меня вариант). Ещё недавно возникла идея попробовать себя в связке веба, и, например, машинного обучения, может тоже неплохо? В общем, помогите советом нубу)

    Супер-недо Junior Python или история о переквалификации

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

    В посте будет описана попытка переквалификации из одной сферы в другую, разобрано что сделано, что находится в работе и какие сложности лично я испытываю в таких условиях.

    Сначала будет минутка истории. Представьте самого обычного среднестатистического человека. У него нет высшего образования (бросил/выгнали/нет денег/не сложилось), работает на работе, приходит домой, кормит кошку.

    Пьёт пиво по вечерам, ну и потихонечку деградирует как может.

    Однако всё таки нечто упавшее сверху (то ли яблоко, то ли осознание недостатка пищи для мозгов) сказало мне, что так больше продолжаться не может. Одним чудным декабрьским днём, было принято решение о том, что пора что-то делать. Опуская подробности — я переехал из Сибири в чудный город Ленинград (в котором жил прежде много лет) и начал таки думать как дальше жить. Переезд произошёл в июне 2020 года.

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

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

    ОШИБКА НОМЕР 1. На попытки читать не систематизированную информацию пытаясь переквалифицироваться я убил месяц, а то и больше. Если вы собираетесь менять сферу — НЕ ПОВТОРЯЙТЕ ЭТОЙ ОШИБКИ. Информация плохо усваивалась и закреплялась, долго до меня доходило, что надо не так, но всё таки дошло. Были найдены курсы на образовательном портале по данному языку программирования. Думаю ссылки оставлять было бы не корректно, кому нужно найдут сами — их бесчисленное множество.

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

    Это была моя ОШИБКА НОМЕР 2. Не нужно сидеть по 18 часов пытаясь что-то сделать. Во первых вы рискуете утратить интерес к вопросу который изучаете, во вторых, после первых 10 часов вы скорее всего будете соображать хуже и плодотворность вашей работы будет катастрофически уменьшаться. В третьих — вы не получите удовлетворения от победы над задачей просидев над ней слишком большое время подряд. (Как пример мне попадалось несколько подобных задач в курсах или в заданиях на собеседования. Были те которые я решал «пока не решится», а были те которые я делал день за днём, с перерывами и отдыхом. Результат от вторых приносил мне искреннюю радость, от первых лишь один глубокий выдох)

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

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

    Это была моя ОШИБКА НОМЕР 3. Готовясь к смене рабочего профиля, позаботьтесь о том, чтобы у вас была работа, на которой вам хватает денег для того чтобы жить и которая предоставляет достаточное количество свободного времени для изучения нового. Работать 6/1 по 14-16 часов в день явно не то, что вам нужно для самообразования.

    Было заработано достаточно средств и я продолжил проходить курсы, приступил к более углублённому курсу в язык, более сложные задачи. Материал начал восприниматься тяжелее. Мозг который уже отвык думать воспринимал всё в штыки. Но «русские не сдаются», так что если не получается, слушаем/читаем/делаем ещё раз. Попутно узнаём, что часто проще найти информацию на английском и перевести, чем шерстить в поисках инфы на русском. Заводим гит и учимся с ним работать.

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

    Это была моя ОШИБКА НОМЕР 4. При поиске вакансий на junior Python вы найдёте примерно следующее. Нужны senior Python / middle Python / конец. Джуниоры не нужны. Есть пара мест, которые не требуют стажа работы, пишут тестовое задание которое им нужно прислать в резюме, но к требованиям обычно прилагается — хорошее знание C# / C++ / Node.js / MySQL / умение работать в linux на уровне администратора (Вы умеете работать в ХХХ? — Да? — То есть если сломается почините?)

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

    ОШИБКА НОМЕР 5. Не пренебрегайте знакомствами при поиске работы. Даже если вам неудобно/стыдно, лучше воспользуйтесь возможностью. Так я попал на своё первое интервью.

    В следующий раз перед интервью я обязательно выпью валерьяночки, потому-что трясло меня примерно как школьницу при виде Джареда Лето, и тёк я примерно так же (но не там).

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

    Наступило сегодня. Завтра собеседование на должность связанную с IT очень косвенно, потому что ждать неделями или месяцами у меня пока нет средств.

    Что делать дальше? Пока планируется придумать какой нибудь полезный в быту проект и реализовать его, выложить на гит, закончить текущий курс и начать новый. Ознакомиться с математикой и её использовании в machine learning, пройти курсы по алгоритмизации и искать собеседования в удобное для меня время.

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

    Что должен знать программист Python и как быстро изучить этот язык

    С чего начать изучение Python

    Начинать свой путь в программировании на Python (Пайтон), так же, как и на других языках, нужно с основ – изучения синтаксиса. Он прост, но в то же время значительно отличается от многих других языков программирования (ЯП).

    Например:

    – ограничителями блока выступает табуляция, а не фигурные скобки;

    – ограничение выражения происходит не по знаку “;” а простым переводом строки;

    – нет строгой типизации и т.д.

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

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

    Одну или несколько из них обязательно потребуется изучить, так как зная только императивное программирование невозможно найти соответствующую оплачиваемую работу. После освоения вышеперечисленного не обязательно, но очень рекомендуется хотя бы попытаться разобраться в самом интерпретаторе. Для этого можно использовать PyPy – программу, написанную на Python, которая, в свою очередь, выполняет созданные на Пайтоне скрипты.

    Полезные навыки для программиста на Python

    Что отличает кодера-новичка от опытного программиста? Это опыт. Мало какая компания возьмет к себе на высокооплачиваемую должность человека, который только-только освоил синтаксис и получил представления о парадигмах. Чтобы набраться опыта, нужно что-то делать при помощи Python.

    Это может быть сайт, написанный либо на чистом Пайтоне, либо с использованием какого-то фрейворка; игра (совершенно не обязательно с оригинальной идеей – можно взять за основу какой-то существующий проект, например, Flappy Bird) и т.д.

    Да и изучать программирование лучше и проще всего на практике. Знание и умение использования алгоритмов – это очень важный навык для любого программиста. И если сам Python можно изучить на практике, подглядывая в документацию, алгоритмы лучше учить по книгам.

    Хорошее знание стандартной библиотеки и некоторых сторонних Lib. Это позволит не изобретать велосипеды, а быстро решать задачи. И последнее – это знание одного или нескольких фреймворков.

    Как лучше изучать Python

    Наиболее быстрый способ изучить язык – это записаться на курсы программирования Python. На них уже состоявшиеся профессионалы обучают основам и особенностям ЯП, а главное – помогают исправлять ошибки.

    Самостоятельно изучение, в свою очередь, отнимает куда больше времени и часто не дает такого качественного усвоения информации, как на курсах.

    Первые шаги Python программиста

    Дошли руки до Питона. Я не гуру и покажу вам основы Python. Сила любого программиста в хорошем знании основ. Глупо изучать сложные разделы языка если вы не знаете элементарных вещей. Вам советую пройти мои шаги и начать самостоятельное развитие. Если вы в прошлом PHP программист, то python вы изучите сравнительно легко. Я покажу вам переход с PHP на Python. Многие примеры будут написаны на РHP и Python. Очень часто говорят, что питон — лёгкий язык. Не верьте ). Он сложно устроен. Написать сайт на питоне сложнее чем на PHP.

    Плюсы Python

    1. Короткий код
    2. Отсутствие знака ; в конце строк
    3. Синтаксический сахар
    4. Новые типы данных
    5. Подключаемые модули
    6. Внутренние модули
    7. PIP — система управления пакетами
    8. Крутые фреймворки: Django, Tornado
    9. Хорошо дружит с linux. Серверное программирование
    10. Многопоточность threading

    Минусы Python

    1. Сложное администрирование. Непростая настройка окружения для ваших скриптов.
    2. Отсутствие констант
    3. Сложное внедрение кода python на веб страницы.
    4. Мало документации на русском языке

    Сотрудники яндекса показали как используют код python. Благодаря короткому синтаксису они смогли обработать значение переменной 7-10 функциями. Причём визуально обработка переменной вытянулась в одну строку. Посмотрите на пример. Символ \ — это перенос строки. У меня код просто не поместился в окне.

    На PHP подобное решение выглядит довольно громоздко. Сам язык python не является экзотикой. На django написаны многие сервисы yandex. Python любят использовать в google.

    До выхода PHP 7 python считался самым быстрым языком для веба. Теперь трудно судить что быстрее? Возможно через некоторое время выйдет более быстрая версия python. Смотрите pdf-версию схемы обучения python. Её можно увеличить и рассмотреть.

    Для обучения необходимо время. Скажу сразу, что нужно учить 1 год и более. Я потратил пол года и не смог выучить питон. Основы я уже понимаю. Знаю как пользоваться некоторыми модулями. Буду двигаться дальше.

    Вы должны решить, что именно вам учить? Вам может, быть и не нужно ООП и сложные фреймворки? Вы можете легко писать скрипты при помощи процедурного стиля. Сам создатель питона Гвидо ван Россум рекомендует писать простым стилем и не усложнять скрипты.

    Предлагаю вам на сайте stepik.org посмотреть 2 курса: Python: основы и применение, программирование на Python. Так у вас появится представление о Python. Потом советую почитать мои статьи.

    Основы

    • Типы данных
      1. None(null)
      2. строки
      3. Числа
        • вещественные
        • целые
        • комплексные
      4. Исключения (exceptions)
      5. колекции
        • список(list)
        • кортеж(tuple)
        • множество(set)
        • неизменное множество(frozenset)
        • словарь(dict)
    • функции
      1. внутренние
        • Функции для работы со списками Python
        • Функции для работы со словарями Python
        • Функции для работы с множествами Python
        • Функции для работы со строками Python
      2. анонимные lambda
      3. пользовательские
      4. замыкания
      5. генераторы
      6. декораторы
    • Циклы
      1. for
      2. while
    • Условные операторы
      1. if-else

    Модули

    1. numpy
    2. pillow
    3. pil
    4. itertools
    5. collection
    6. os
    7. sys
    8. json
    9. xml
    10. csv
    11. math
    12. re
    13. random
    14. configparser
    15. imghdr
    16. logging
    17. shutil
    18. pickle
    19. Базы данных
      • sqlite3
      • MySQLdb
      • postgresql
    20. кеширование
      • memcached
      • redis
    21. парсинг
      • urllib
      • urlparse
      • requests
    22. Время
      • calendar
      • datetime
      • time
    • Классы
      1. свойства
      2. методы
      3. Волшебные/магические методы
        • геттеры
        • сеттеры
      4. объекты
        • свойства
        • методы
      5. декораторы

    Фреймворки

    • синхронные
      1. bottle
      2. flask
      3. django
    • асинхронные
      1. twisted
      2. tornado

    Хочу вас предупредить, что то что вы видите — это только базовый набор. Модулей в разы больше. Фреймворков у python масса. Начните с самого простого. Основы — это то, с чего надо начать! Если смотреть на схему, то сложность нарастает сверху вниз. В схеме есть сложные разделы: фрейморки, парсинг. Парсинг сайтов и документов — сложное занятие. Тут без опыта тяжело писать код. Фреймворки — это особая тема для опытных программистов. Можно сделать вылазку и написать сайт на django. Если вы плохо знаете основы, то не сможете сделать сложный функционал. В django активно применяются декораторы. Вы должны легко писать пользовательские функции. Регулярные выражения Python применяются чуть ли ни на каждом шагу. Фрейворк постоянно требует подключения различных модулей. Игра стоит свеч!

    Как стать Python-разработчиком: история Алексея Курылева

    В отличие от многих моих коллег я не был рожден программистом. Я был рожден музыкантом. Я не учился программировать в ВУЗе и до определенного времени даже и не собирался связывать свою жизнь с IT.

    Зато меня всегда привлекала Москва, с ее широкими тротуарами, длинными набережными и огромными парками. Но оказавшись там, ты чувствуешь потребность в деньгах более чем в любом другом городе нашей удивительной родины. В то время мой старший брат снимал квартиру вместе с двумя программистами, работающими в каком-то банке. Так, в одной из кухонных бесед, я первый раз погрузился в мир Python. С того момента прошло еще немало времени перед тем как я устроился на первую работу в качестве Python-developer.

    Первые шаги в программировании

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

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

    Первая работа

    На удивление, я никогда не работал junior-ом. Сразу в middle пошел. Но попытки устроиться младшим разработчиком у меня были. Я хорошо помню то собеседование.

    Два прекрасно образованных программиста (что забавно, это были муж и жена) целых два часа тестировали мои знания и мышление, после чего сделали вывод, что знаний у меня явно недостаточно, но мне не отказали, а дали список литературы и отправили доучиваться. Через две недели я вновь пришел на собеседование и продемонстрировал фантастическую способность к обучению, ответив на множество вопросов, на которые прежде ответить не мог. На следующий день мне позвонили и сказали, что я принят. Мне озвучили зарплату, которой мне не хватило бы даже на аренду жилья и еду, не говоря уже о каких-то излишествах. Я сразу отказался и ни разу не пожалел об этом, так как устроился системным администратором в компанию с мировым именем, где и продолжил самообучение как программист. Из этой истории я извлек один важный момент — ничто так хорошо не направляет и не подталкивает как собеседование!

    А что дальше

    В какой-то момент, устав от офисной жизни и работы админом, я скопил немного денег и на полгода уехал путешествовать в Индию. Ох, если бы я мог описать что это были за полгода, то не хватило бы и книги, не то что этой статьи. Вернувшись, я уже знал, что буду снова пробовать устроиться работать программистом, и на этот раз удача улыбнулась мне, да и я был куда лучше для этого готов. За полгода путешествий я очень-очень хорошо подтянул разговорный английский, что сейчас мне ежедневно помогает в общении с коллегами. Попасть в языковую среду оказалось куда эффективнее любых учебников (кстати тоже самое можно сказать и о программировании). Но прыгать туда лучше уже понимая основы, иначе те условия, в которых можно стать продвинутым, вы будете использовать для изучения азов.

    Так вот. На моей первой работе программистом я был единственным бекенд-разработчиком в компании! Вот уж хуже не придумаешь! Ну, что хотел, то и получил. Зато на второй работе я попал в замечательный коллектив, где работали настоящие профессионалы с огромным опытом. Благодаря им я приобрел культуру кода и узнал про высокие стандарты в разработке. Миша Корсаков и Андрей Беляк — респект и уважуха!

    Сейчас

    А сейчас я работаю удаленно в одной международной компании и в этом есть свои плюсы! Только не подумайте, что я сейчас лежу на пляже с ноутбуком и наслаждаюсь жизнью по полной. Я все также много работаю и много устаю, но в офис ходить не нужно. Живу в Питере, иногда путешествую. Успел пожить в Португалии, в Италии, в Грузии, но не скажу, что я там как-то особо отдыхал. Организация путешествия накладывает много дополнительных сложностей, и в сочетании с работой это может быть в два раза тяжелее, чем работа из дома или офиса. Но увидеть можно очень много нового, красивого и интересного. И это явный плюс!

    Менторство

    А мое менторство началось очень забавным образом и без моего участия. Как-то раз я был в гостях у друга и случайно забыл у него книжку по Python и Django. А в следующий раз встретились мы только через год, и тогда он меня удивил. Говорит, а я теперь работаю программистом! Помнишь ты у меня книжку забыл, так вот я ее прочитал, сделал по ней свой сайт и недавно получил первую работу.

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

    Как стать успешным Python разработчиком? Алексей Курылёв поделится опытом как с начинающими, так и с опытными программистами Нанять

    Вопросы

    Какой совет дашь новичкам, который редко встречается или считается необычным, спорным?

    Вписывайтесь в любую движуху! Не упускайте ни одной возможности практиковаться! Будьте открыты всегда и к любым предложениям!

    И что очень важно:

    “Встретив двусмысленность, отбрось искушение угадать.” — zen of python

    Как ты сохраняешь свои навыки актуальными? Как постоянно растёшь и становишься лучше как разработчик?

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

    Топ 3 книжек для новичка
    • Марк Саммерфилд — «Программирование на Python 3. Подробное руководство»
    • Уэсли Чан, Пол Биссекс, Джеффри Форсье — “Django. Разработка веб-приложений на Python”
    • Роберт Мартин — “Чистый Код” — Читайте ее даже если не понимаете Java, там очень много просто хороших советов. А заодно и Java начнете изучать.
    Фото рабочего стола

    Об эффективности обучения у Алексея и остальных менторов mkdev мы рассказывали в цифрах подписчикам нашей рассылки. Получить отчёт об успехах наших учеников ты можешь, подписавшись через эту форму:

    Мастер Йода рекомендует:  Unity представила проект FPS Sample
    Добавить комментарий