Учим языки программирования как иностранные

По принципам программирования

По принципам программирования различают процедурные, непроцедурные языки и языки объектно-ориентированного программирования.

Процедурные языки основаны на описании последовательной смены состояния компьютера, то есть значения ячеек памяти, состояния процессора и других устройств. Они манипулируют данными в пошаговом режиме, используя пошаговые инструкции. В процедурных языках выдерживают четкую структуризацию программ, поэтому их еще называют языками структурного программирования. К таким языкам относятся Fortran, Algol, Pascal, BASIC и др.

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

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

В конце XX в. была презентована новая методика программирования, получила название объектно-ориентированного программирования (ООП). То есть начали развиваться языки, содержащие конструкции, позволяющие определять объекты, принадлежащие к классам и имеющие средства для работы с абстрактными типами данных. К таким языкам относятся C ++, Java, C #, Python и др. Сегодня языки ООП практически вытеснили с рынка профессионального программирования процедурные языки.

Java

Java – высокоуровневый язык программирования, предназначенный для запуска приложений. Он используется для создания мобильных программ под ОС Android, 2D-игр, приложений для финансовой сферы, высокопроизводительных систем, программ для Big Data и т.д.

Синтаксис Java часто сравнивают с синтаксисом низкоуровневого языка программирования C, но он является более простым для восприятия. Кроме этого, Java имеет следующие преимущества:

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

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

Вот как выглядит стек технологий Java:

  1. IDE: Eclipse, Netbeans, AndroidStudio.
  2. Android-фреймворки: OrmLite, RoboSpice, Picasso, Retrofit, Butterknife.
  3. Популярные фреймворки: Spring, Hibernate, Swing, RxJava.
  4. Android-инструменты: Android SDK Manager, Android Emulator, ADB.
  5. Android-фреймворки: OrmLite, RoboSpice, Picasso, Retrofit, Butterknife.
  6. Базы данных: Oracle, MSSql, Mysql.
  7. Менеджер зависимостей/система сборки: Gradle, Ant, Maven.
  8. JVM — Java Virtual Machine, среда выполнения кода.

На рынке труда вакансия Java-разработчиков достаточно популярна, и зарплаты при этом высокие. В Москве, например, опытный специалист зарабатывает более 100 тысяч рублей, а новичок может претендовать на зарплату в среднем 70 тысяч рублей.

Русские идут: 1С, Робик, Рапира

Большую часть кириллических языков придумали ещё во времена СССР — и они канули в Лету вместе с пятилетками и перестройкой.

Сто китов мне в глотку: ненавистный 1С

1С в представлении не нуждается, да что там — именно он вдохновил нас написать статью. Правда, в языке 1С можно использовать и английские ключевые слова. По синтаксису он напоминает «русский Pascal», только менее строгий и без некоторых конструкций. При этом синтаксис языка довольно простой: например, вот так выглядит классика — «Hello, World!»:

Собственно, готово. Только зачем это бухгалтерам — непонятно 🙂

В профессиональном сообществе 1С-программистов и сам язык не очень-то и жалуют. Даже JavaScript на фоне нашенского Enfant Terrible выглядит благородным доном. Ругают 1С за слабую производительность и отсутствие классов — кстати, никакого наследования, инкапсуляции и полиморфизма вы там тоже не найдёте. Зато в экосистеме 1С есть своя объектная модель базы данных, хранилище значений и язык запросов.


Изображение: кадр из фильма «Бойцовский клуб»

Несмотря на хейт и насмешки, 1С популярен — российский бизнес плотно подсел на продукты компании, а значит, 1С-программисты без работы не останутся.

Русская «черепашка»: Робик

Язык Робик разработал Геннадий Звенигородский в 1975 году. Писали его под родные винтажные «агаты» — в помощь школьникам. Фишка Робика — концепция исполнителей. Это как «черепашка» в Лого, только у Робика таких «черепашек» было несколько, причём каждая со своим «характером» — набором команд.

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

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

Защищайтесь, сэр: Рапира

Рапира — ещё один учебный язык программирования made in USSR начала восьмидесятых годов. Рапира помогала старшеклассникам и студентам-первокурсникам пересесть с Робика на нормальные языки. Они писали на ней калькуляторы, алгоритмы поиска, сортировки файлов, простые игры и алгоритмы решения математических задач.

«Hello, World!» на Рапире выглядит вот так:

Интересно, что у Рапиры были версии не только на русском, но и на английском, эстонском, грузинском. «Пролетарии всех стран, соединяйтесь!» — да и только. Это был настоящий призрак цифрового коммунизма — правда, побродить по Европе ему так и не удалось.

Почему появляются новые языки программирования

Пиком развития модульного программирования считаются фреймворки. Типичные представители этой категории для разработки веб-ресурсов – Bootstrap, React.js, Django, Laravel, Angular. На рынке подобных «изделий» насчитывается несколько десятков. Такие инструменты часто называют «новыми» языками программирования.

Причины разработки новинок:

  1. Изменение локальных и сетевых технологий.
  2. Рост мультимедийных возможностей оборудования.
  3. Возрастают потребности пользователей компьютеров.

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

Что выбрать новичку?

Опишем краткий алгоритм выбора.

Для начала выберите не язык, а интересное вам направление. Это может быть веб-разработка, десктопная, мобильная или серверная разработка. А может быть, вы хотите заниматься анализом данных.
Теперь оцените свои силы и навыки и выберите язык, подходящий вашему уровню. Если вы никогда ничего не программировали и не учились программированию ни в школе, ни в университете, начните с языков полегче (JavaScript, CSS), а если вы чувствуете себя увереннее и уже пробовали что-то писать, можете выбрать Java.

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

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

Python

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

Профессии: Fullstack-разработчик / Data scientist / Data engineer / Data analyst.

Продукты: Sims 4, YouTube, Instagram, Dropbox, Bittorrent.

Преимущество Python — в его многогранности и широком применении. Его можно использовать как в веб-разработке (фреймворк Django, например, достаточно прост для того, чтобы новичок быстро разобрался в основах его использования) и работе с данными, так и в написании скриптов. Вы можете заниматься анализом данных для банковских систем, автоматизацией простых задач, разрабатывать приложения, совершенствовать голосовые помощники или обучать нейросеть (для этого, кстати, есть веб-сервисы типа Google Colaboratory, где можно бесплатно пользоваться мощным процессором TPU).

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

Курс

Fullstack-разработчик

Освойте программирование на Python и Django и станьте универсальным солдатом. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

Библиотеки не нужны

В описании к Ć сказано, что в его случае зависимости от библиотек рантайма (runtime libraries) сведены к минимуму. В качестве примера Фусик привел вывод кода, для использования в программах на С – в большинстве случаев пользователь получает автономную пару файлов .c/.h с удобочитаемым кодом С99.

Презентация Ć в 2013 году

Автор утверждает, то это в равной степени относится и к другим поддерживаемым языкам – C++, C#, Java, JavaScript, Python, Swift и OpenCL. В то же время он упоминает о нескольких исключениях. Одно из них касается необходимости использования библиотеки GLib для вывода кода на C в случае, когда программист, пишущий на Ć, использует выражения List, Dictionary или SortedDictionary.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

function fib_recursion(n) {
   return n < 1 ? 
    	 n <= 2 ? 1
    	 fib_recursion(n - 1) + fib_recursion(n - 2);
}
 
console.log(fib_recursion(10));

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

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

Ruby — модный и крутой

Действительно модный — именно на нем написан , им пользуются разработчики Look At Media. Ruby является главным конкурентом Python за звание по-настоящему объектно-ориентированного языка. Созданный в начале девяностых под влиянием языка Perl, Ruby подходит для решения широкого спектра задач, от веб-программирования до разработки сложных интегрированных систем, включающих сайты, мобильные приложения и виджеты рабочего стола.

Ruby быстр в работе и логичен в своем устройстве и синтаксисе. Всплеск интереса к языку и рост его применения в последние годы обеспечивают ему, пожалуй, самые лучшие перспективы на ближайшее будущее. Главная проблема этого языка сегодня в том, что он довольно слабо востребован: в Ruby-программистах сейчас заинтересован всего 1% работодателей. Так что его изучение в качестве первого языка — выбор на свой страх и риск.

Особенности языка программирования

Язык программирования – это технический, искусственный язык, обладающий некоторыми свойствами естественного. Так, в любом из них есть лексика, синтаксис и семантика. Программист обязан соблюдать алгоритм, иначе код получится нерабочим. Схема одинакова практически для любого языка программирования – хоть для Fortran, появившегося в 50-х годах прошлого века, хоть для React 2012 года. 

На данный момент существует более 8 тысяч языков программирования. 

Тенденции в сфере программирования:

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

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

Область применения программ и приложений

Выбор языка, на котором написана та или иная программа, во многом зависит от области ее применения. Так, например, для работы с самим «железом» компьютера (написания драйверов и поддерживающих программ) лучшим вариантом станет C («Си») или С++, которые входят в основные языки программирования (список смотрите выше). А для разработки мобильных приложений, в том числе игр, следует выбрать Java или С# («Си-шарп»).

Если вы еще не определились, в каком направлении работать, то рекомендуем начать изучение с языков C или C++. Они имеют весьма понятный синтаксис, четкое структурное разделение на классы и функции. К тому же, зная C или С++, можно с легкостью выучить любой другой язык программирования.

Java

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

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

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

public class MainClass {
 
  public static long fib_recursion(long number) {
	if ((number == ) || (number == 1))
  	return number;
	else
  	return fib_recursion(number - 1) + fib_recursion(number - 2);
  }
 
  public static void main(String args) {
	for (int counter = ; counter <= 10; counter++)
  	System.out.printf("Fibonacci of %d is: %d\n", counter, fib_recursion(counter));
  }
}

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

Для тех, кто хочет начать быстрое освоение Java, наш педагог Сергей Ирюпин подготовил цикл вводных статей, которые мы постепенно публикуем в блоге:

  • Быстрый старт с Java: от знакомства до вашей первой игры
  • Быстрый старт с Java: пишем «крестики-нолики

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

Императивное программирование характеризуется в основном:

  • в исходном коде программы записываются инструкции (команды);
  • инструкции должны выполняться последовательно;
  • каждая инструкция может изменять некое глобальное “состояние” программы

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

Практически всё аппаратное обеспечение в основе своей императивное.

Неструктурное программирование

Характерно для наиболее ранних языков программирования.

В основном характеризуется:

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

Характерной особенностью неструктурного программирования является сложность реализации рекурсии.

Структурное программирование

В отличие от неструктурного программирования, характеризуется:

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

Концепция структурного программирования основана на теореме Бёма-Якопини:

Последовательность – это выполнение сначала одной подпрограммы, затем другой.

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

Итерация – это многократное выполнение подпрограммы пока некое булево выражение истинно.

Процедурное программирование

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

Основная идея заключается в том, чтобы сделать подпрограммы более модульными за счёт:

  • локальных переменных
  • относительно простой рекурсии

Оба этих пункта реализуются за счёт использования стека вызовов.

Объектно-ориентированное программирование

Объектно-ориентированное программирование основано на концепции “объекта”.

Объекты могут содержать данные (поля, свойства, аттрибуты) и поведение (код, процедуры, методы).

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

Одной из альтернатив является прототипное наследование. Прототипное наследование не использует классов. Вместо этого, одни объекты могут быть объявлены “прототипами” других объектов – при этом методы и поля прототипа становятся доступны как методы и поля нового объекта (если, конечно, новый объект их не переопределяет)

Немецкий Teuton: немец свиньёй идёт

Teuton — даже не язык в строгом смысле слова. Это немецкая реализация CEDSimply — специальной оболочки, которая позволяет создавать локализации Python. Чтобы добавить новый язык, надо составить таблицу соответствия лексики Python. Вот немец Кай Шлюер и не поленился — сделал такую таблицу. Получилась весёлая программистская шутка.

Сам автор объясняет появление немецкого Python так:

«Хотя на немецком раньше не было языков программирования, об этом мечтал, пожалуй, каждый захмелевший студент, изрядно хряпнувший пшеничного на Октоберфесте или в других злачных местах. У Teuton нет никаких особых свойств — он просто немецкий. Идею я позаимствовал у Энди Дента, который рассказал в блоге о своём космополитическом языке CEDSimply».

Эстетствующий Шлюер не просто составил банальную таблицу — нет, он ещё и включил в Teuton две формы предлога in (in и im), чтобы они грамматически правильно подстраивались под падежи и артикли немецкого языка. В общем, если вы германист, вам точно понравится.

PHP (Пи-эйч-пи)

Расшифровывается как Personal Home Page Tools («инструменты для создания личной странички в интернете»). Чаще всего PHP применяют веб-мастера для разработки сайтов. В настоящее время он наиболее популярен в среде хостов (интернет-провайдеров), которые следуют тенденции использовать и поддерживать PHP, в чём и заключается его огромное преимущество. Но одним интернетом его функциональность не ограничивается.

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

Что такое HTML и CSS?

HTML (Hypertext Markup Language) дословно переводится как язык гипертекстовой разметки. Он служит для разметки документов в Интернете.

CSS (Cascading Style Sheets) ― язык, который переделывает внешний вид документа на сайте, написанного языком разметки, в удобную форму для восприятия.

Да, оба языка не относятся к языкам программирования, с их помощью написать программу не получится. Они нужны, чтобы создавать контент страницы, и разработка сайта без них невозможна. HTML и CSS очень просты в изучении. Если вы решили освоить языки программирования, рекомендуем начать с них, а после переходить к более сложным.

Rust

Rust — это мультипарадигмальный язык, предназначенный для создания крупных параллельных систем, обладающих высокой производительностью и надежностью. С 2016 года Rust ежегодно признавался самым популярным языком программирования в опросе StackOverflow. Будучи языком системного уровня, похожим на C ++ и не требующим длительной обработки или наличия виртуальной машины, Rust обеспечивает низкоуровневый доступ к оборудованию. Благодаря этому он идеально подходит для разработки операционных систем, программ для микроконтроллеров и другого софта, в котором решающее значение имеет производительность железа.

Области применения: разработка ОС, встроенные приложения, сервера, инструменты, игры.

Требует ли IT-рынок реально знать несколько языков программирования?

Но вернёмся к минимальному порогу. Всё же знать четыре языка звучит реалистичнее, чем 20. Насколько часто IT-компании ищут таких эрудитов? Чтобы ответить на этот вопрос, я изучил несколько сотен вакансий на hh.ru. Большинство позиций с зарплатой от 150 тысяч выглядят примерно вот так:


Скриншот: сайт HeadHunter. Зарплатная вилка этой вакансии — от 150 до 200 тысяч рублей

Человека, который решил попробовать себя в программировании или просто не знаком с C++, такое количество иностранных слов может отпугнуть. Но опытный разработчик на C++ знает, что STL, Boost, MFC — это всего лишь библиотеки, а Qt — фреймворк. То есть в этой вакансии от вас требуется знание всего одного языка программирования — C++. И это, в общем-то, уже верхний уровень российского рынка.

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

В других вакансиях от вас могут потребовать следующее:


Скриншот: сайт HeadHunter. Зарплатная вилка этого предложения — от 150 до 260 тысяч рублей

С HTML и CSS мы разобрались выше. React, Vue.js, Node.js опять-таки инструменты профильного языка представленной вакансии — JavaScript

Обратите внимание, что базовое понимание (не владение!) C++ не обязательно, а лишь будет плюсом. Знать Go тоже не нужно, если вы уже владеете Node.js

То есть обязательных требований здесь едва ли наберётся на два языка.

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


Скриншот: сайт HeadHunter. Один из немногих офферов, где фигурируют три языка (всё-таки требуется отличное знание PHP 7+ и РСУБД). Но и обещанная зарплата — до 500 тысяч рублей 🙂

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

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

Сфера применения JavaScript

Возможно, что по мере знакомства с программированием сфера ваших интересов изменится: вместо frontend вы сфокусируетесь на backend или захотите углубиться в мобильную разработку. JavaScript не ограничивается лишь интерактивностью сайтов и клиентской стороной.


Пример визуализации данных с D3.js. Источник

Фреймовики и библиотеки JavaScript позволяют создавать десктопные приложения (Electron), мобильные приложения (React Native), игры (Phaser), а также работать с визуализацией данных (D3.js), базами данных (mongoDB), анимацией (Three.js).

JavaScript — один из самых популярных и быстроразвивающихся языков.

Ваш первый язык программирования не обязательно будет основным, мало кто ограничивается одной технологией. Но если вы планируете сделать JavaScript профильным языком, то международное JS-сообщество вам в помощь. Согласно исследованию GitHub, крупнейшего веб-сервиса для хостинга IT-проектов, в 2017 году JavaScript был на первом месте среди 15 наиболее популярных языков.


15 наиболее популярных языков по версии GitHub

JavaScript пять лет подряд является самым популярным языком на одном из крупнейших ресурсов для программистов — StackOverflow.


Наиболее популярные языки по версии StackOverflow

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

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

Борис Горячев

backend-разработчик Meduza

Плюсы и минусы наиболее популярных языков программирования

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector