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

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

Статические языки против динамических языков

Когда мы говорим о динамических языках, «динамический» на самом деле относится к типам переменных. Когда вы пишете программу на динамическом языке, вы можете объявить переменную, а затем изменить её тип во время выполнения программы. Противоположность динамическим языкам — статические языки, также называемые строго типизированными языками. Например, C++ и Java — строго типизированные языки, тогда как JavaScript, PHP и Perl — динамически типизированные языки.

В C++ при объявлении переменной необходимо указать её тип. Во время выполнения программы, если вы попытаетесь изменить тип переменной, компилятор сообщит об ошибке. То же самое верно и в Java.

53e16d183fc19

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

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

Функциональные языки

Наряду с развитием динамических языков рос и интерес людей к функциональным языкам. В функциональных языках сами функции можно хранить в переменных, а функции, хранящиеся в переменных, можно передавать в качестве аргументов другим функциям. Большинство современных языков в той или иной степени поддерживают функциональное программирование. Например, C++ позволяет программистам передавать указатели на функции. Такие языки, как JavaScript, делают передачу функций ещё проще. Поэтому C++ обычно не считается настоящим функциональным языком, тогда как JavaScript считается функциональным языком, а Haskell обычно рассматривается как превосходный пример функционального языка.

Механизм сборки мусора

В теории, если писать код правильно, у вас не будет никаких ошибок. Звучит неплохо. Но в реальности, когда вы работаете с многими другими программистами над большим проектом, часто появляется одна ошибка: утечки памяти. Вы определяете переменную, но после её использования не освобождаете эту память вовремя. Это и называется утечкой памяти. Если утечка памяти возникает и вовремя не обнаруживается, то по мере того как программа работает дольше, утечка растёт, пока не поглотит всю память системы, и тогда система падает. Звучит ужасно!

53e16c8e8239c

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

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

Виртуальные машины

53e16cae29817

Когда Java ворвалась на сцену в середине 1990-х, людей беспокоило то, что она не компилировала код напрямую в язык ассемблера. В отличие от C++, Java сначала компилирует программу в промежуточный код, называемый байт-кодом. Во время выполнения система вызывает виртуальную машину для исполнения байт-кода, а иногда даже компилирует байт-код в код на ассемблере. Когда этот подход к компиляции только появился, программисты жаловались на его скорость, но сейчас, конечно, это уже не проблема. Многие языки работают на виртуальных машинах, например упомянутые ранее Java и C#. Языки этого типа сейчас достигли большого прогресса в скорости.

Языки

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

53e16cda02d86

JavaScript, HTML5 и CSS3:

С технической точки зрения HTML5 — это не язык, а технология. Вместе с CSS3 и JavaScript эта технология позволяет создавать веб-приложения. Вы можете создавать программное обеспечение, которое работает в браузере. Преимущество в том, что созданные вами приложения будут обладать беспрецедентной переносимостью — они смогут работать почти на всех устройствах, включая телефоны. Несколько лет назад компания Facebook начала использовать HTML5 для создания своих мобильных приложений. Они опередили свое время; тогда HTML5 еще не был зрелым. Через некоторое время они вернулись к традиционной модели. За последние два года браузеры начали внедрять лучшие технологии HTML5, и спрос на JavaScript соответственно вырос. Если вы хотите оставаться конкурентоспособным, это технология, которую вам необходимо изучить. (На стороне сервера многие крупные компании используют JavaScript в форме Node.js.)

Пример на JavaScript:

В следующем примере показано, как JavaScript сохраняет функцию в переменной, а затем передает ее другой функции. Чтобы изучить JavaScript, см.:Учебник по JavaScript。

var myfunc = function() {
      alert('hi');

};
setTimeout(myfunc, 2000);

C#:

Пятнадцать лет назад Microsoft создала C#, и с тех пор C# продолжает расти и процветать. Синтаксис C# похож на Java (а также на C++). Visual Studio — предпочтительное программное обеспечение для программирования на C#, и оно доступно как в бесплатной, так и в платной версиях.

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

Пример на C#:

В примере определяется класс с именем Program, который содержит функцию с именем Main. Программа начинает выполняться с функции Main. Функция Main определяет строго типизированную целочисленную переменную x и выводит значение x на экран. Чтобы изучить C#, см.:Учебник по C#。

using System;
class Program
{

          static void Main()

{

int x = 1000;
Console.WriteLine(x);

}
}

Java:

Java вот-вот отпразднует своё 20-летие. Даже сегодня Java продолжает развиваться и совершенствоваться. В 2004 году один мой коллега назвал её «игрушечным языком». Пережив свои ранние трудности роста, Java больше не игрушечный язык: она поддерживает бесчисленные веб-сайты и базы данных, а также на Java были разработаны офисные пакеты с открытым исходным кодом. Если взглянуть сейчас, будущее Java по-прежнему светлое.

Java — строго типизированный язык, работающий на виртуальной машине со встроенным механизмом сборки мусора. Хотя это не функциональный язык, в нём всё же есть некоторые возможности функционального программирования.

Пример на Java:

Java и C# во многом похожи. В программе на Java выполнение начинается с функции main. Как и в примере на C# выше, функция main определяет строго типизированную целочисленную переменную x и выводит значение x на экран. Чтобы изучить Java, см.:Учебник по Java。

public class HelloWorld
{

           public static void main(String[] args) {

        int x = 1000;|
      System.out.println(x);

    }
}

PHP:

PHP — это простой в использовании универсальный язык программирования. Его синтаксис похож на Java и C++. На самом простом уровне PHP используется для встраивания изменяемого текстового содержимого в веб-страницы. Например, у вас может быть PHP-код на веб-странице, который выводит текущую дату. Когда код веб-страницы отправляется в браузер, соответствующий PHP-код выводит текущую дату на экран. PHP может делать гораздо больше, чем печатать даты на веб-страницах. Библиотеки классов PHP могут манипулировать базами данных (почти любыми базами данных, какие только можно представить), выполнять научные вычисления и обрабатывать текст. Будущее PHP остаётся светлым.

Пример PHP:

PHP-код встроен в HTML-документ. Этот PHP-код устанавливает часовой пояс Лос-Анджелеса, а затем выводит текущее время. Когда браузер разбирает HTML-документ, часть с PHP-кодом заменяется выводом этого кода. Таким образом, в итоге на экране отображается «Привет! Текущее время —», а затем текущее время. Чтобы изучить PHP, см.:Учебник по PHP。

<html>
<body>
Hello! The current time is
<?php

      date_default_timezone_set('America/Los_Angeles');
      echo (strftime('%c'));

?>
</body>
</html>

Swift:

Это совершенно новый язык, созданный Apple. Вообще говоря, я бы не рекомендовал людям учить совершенно новый язык. Но учтите, что мы говорим об Apple, и вы уже можете использовать этот совершенно новый язык для создания приложений для iOS. Фактически уже есть признаки того, что Swift станет будущим программирования для iOS. Синтаксис Swift очень похож на JavaScript, но без точек с запятой и круглых скобок.

53e16d600894a

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

Пример Swift:

В примере определяется переменная с именем str, которая хранит строку. Хотя тип str явно не указан, Swift является строго типизированным, и компилятор определяет, что str имеет строковый тип, по строке справа от оператора присваивания. Чтобы изучить Swift, см.:Учебник для начинающих по Swift。

var str = "Hello, World!"
println (str)

Erlang:

Erlang — это язык программирования, изобретённый инженерами Ericsson в 1986 году. Изначально язык был разработан специально для телекоммуникационной сферы, но теперь он превратился в универсальный язык программирования и процветает в облачных высокопроизводительных параллельных вычислениях. Сейчас люди используют Erlang для создания мощного программного обеспечения, такого как CouchDB и Riak. Это самобытный язык с очень необычным способом обработки строк, но его также легко изучать.

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

Примеры Erlang:

Ниже приведена сложная версия примера «hello world». Помните, Erlang — зрелый язык. Если вы действительно намерены его изучать, пожалуйста, посетите:http://learnyousomeerlang.com。

-module(hello).
-export([start/0]).
start() ->

      spawn(fun() -> loop() end).

loop() ->

      receive

        hello ->
        io:format("Hello, World!~n"),
       loop();

   goodbye ->
   ok

Заключительные мысли

Программисты, конечно, могут найти работу где угодно, но не обязательно на должности, которая особенно вам нравится. Ключ в том, чтобы изучать действительно полезные технологии и найти ту хорошую работу, которая принадлежит вам. Изучать JavaScript, C#, Java, PHP или C++ не будет ошибкой. Если вы начнёте изучать Swift, перспективы трудоустройства в будущем превосходны. Если вы хотите попробовать свои силы в высокопроизводительном программировании, взгляните на Erlang, хотя вакансии, требующие Erlang, могут появиться не сразу. Независимо от того, какому языку вы сейчас посвящаете себя, вы должны изучать его основательно и овладеть им; это и есть ключ.

(Английский источник:News.Dice, переводчик: moqiguzhu)