#include
using namespace std;
int main() {
····int language = 2;
····cout << "Language " << language << \
·······": I am C++!··Pay no attention to that C behind the curtain!" << \
·······endl;
····return(0);
}
Java и C# являются преемниками языков С и С++, избавленными от некоторых проблем предшественников. Однако они немного избыточны и ограничительны. Следующий пример написан на Java:
public class Overlord {
····public static void main (String[] args) {
········int language = 3;
········System.out.format("Language %d: I am Java! Scarier than C!\n", language);
····}
}
Если вы никогда не писали программ ни на одном из этих языков, вам может быть интересно, что все это такое. Некоторые языки нагружены значительным синтаксическим багажом. Их иногда называют статическими языками, поскольку они требуют, чтобы вы указали компьютеру некоторые низкоуровневые детали. Позвольте мне объяснить.
Языки программирования имеют переменные — имена значений, которые вы хотите использовать в программе. Статические языки заставляют вас указывать тип каждой переменной, который определяет, сколько места переменная займет в памяти и что с ней можно сделать. Компьютер использует эту информацию, чтобы скомпилировать программу в очень низкоуровневый машинный язык (характерный для определенного аппаратного обеспечения, машины понимают его лучше, а люди — хуже). Дизайнеры языков программирования часто должны решать, кому их язык должен быть понятнее: людям или компьютерам. Объявление типов переменных помогает компьютеру найти некоторые ошибки и работать быстрее, но это требует предварительного продумывания и набора кода. Бо́льшая часть кода примеров, написанного на языках С, С++ и Java, требует объявления типов переменных. Например, в каждом из примеров объявление типа int было необходимо для того, чтобы переменная language считалась целым числом. (Другие типы включают в себя числа с плавающей точкой, вроде 3.14159, и символьные или текстовые данные, которые хранятся по-разному.)
Почему же они называются статическими языками? Потому что переменные в этих языках не могут изменять свой тип, они статичны. Целое число — это целое число, раз и навсегда.
Динамические языки — полная противоположность статических (они также называются скриптовыми языками). Эти языки программирования не заставляют вас определять тип переменной перед тем, как ее использовать. Если вы напишете что-то вроде x = 5, динамический язык определит, что 5 — это целое число, поэтому переменная x имеет тип int. Эти языки позволяют вам достичь большего, написав меньшее количество строк кода. Вместо того чтобы компилироваться, они интерпретируются программой, которая называется — сюрприз! — интерпретатором. Динамические языки обычно медленнее, чем статические, но их скорость повышается, поскольку интерпретаторы становятся более оптимизированными. Долгое время динамические языки использовались для коротких программ (сценариев), которые часто предназначались для того, чтобы подготовить данные для обработки более длинными программами, написанными на статических языках. Такие программы назывались связующим кодом. Несмотря на то что динамические языки больше годятся для этой цели, в наши дни они могут решать и самые трудные задачи по обработке данных.
Многоцелевым динамическим языком многие годы был Perl. Язык программирования Perl очень мощный и имеет множество библиотек. Однако его синтаксис может быть трудным для понимания, а сам язык теряет в популярности из-за появления языков программирования Python и Ruby. А вот извольте: острый код с привкусом Perl:
my $language = 4;
print "Language $language: I am Perl, the camel of languages.\n";
Язык программирования Ruby (http://www.ruby-lang.org/) появился немного позже. Он отчасти заимствует функционал у языка Perl, а свою популярность приобрел благодаря фреймворку для веб-разработки Ruby on Rails. Он используется примерно в тех же областях, что и Python, и, если выбирать между этими языками, вам придется руководствоваться в большей степени вкусом и доступными библиотеками. Следующий фрагмент кода написан на Ruby:
language = 5
puts "Language #{language}: I am Ruby, ready and aglow."
Язык программирования PHP (http://www.php.net/), который вы можете увидеть в следующем примере, очень популярен в области веб-разработки, поскольку позволяет довольно легко объединить HTML и код. Однако язык PHP имеет несколько подводных камней, и его довольно трудно применить за пределами веб-разработки:
$language = 6;
echo "Language $language: I am PHP. The web is mine, I say.\n";
?>
Следующий пример показывает ответ Python этим языкам программирования:
language = 7
print("Language %s: I am Python. What's for supper?" % language)
Почему же Python?
Python — многоцелевой высокоуровневый язык программирования. Его дизайн позволяет писать хорошо читаемый код, что гораздо важнее на деле, чем на словах. Каждая компьютерная программа пишется всего однажды, но впоследствии к ней обращаются множество раз. Удобочитаемость позволяет легко запомнить программу, а также легко воспроизвести. По сравнению с другими популярными языками программирования кривая обучения для языка Python более гладкая, что позволяет вам быстрее стать продуктивными. Однако есть и сложные моменты, которые вы можете исследовать по мере приобретения опыта.
Относительный лаконизм языка Python позволяет создать программу, которая будет гораздо короче своего аналога, написанного на статическом языке. Исследования показали, что программисты пишут примерно одинаковое количество строк кода каждый день независимо от языка, поэтому Python может значительно повысить вашу продуктивность. Язык программирования Python — самое несекретное оружие многих компаний, которым важна продуктивность работы сотрудников.
Python является самым популярным языком на курсах программирования для начинающих в лучших американских колледжах (http://bit.ly/popular-py). Он также используется для оценки навыков программирования более чем 2000 работодателей (http://bit.ly/langs-2014).
И конечно же, он абсолютно бесплатен. Вы можете написать с помощью Python все, что захотите, и пользоваться этой программой где угодно совершенно бесплатно. Никто не сможет прочитать вашу программу и сказать: «Какая милая программа! Будет жаль, если с ней что-то случится».
Python запускается практически везде и имеет «встроенные батарейки» — целую кучу полезного ПО в стандартных библиотеках.
Но, возможно, основная причина использования Python покажется вам неожиданной: людям обычно нравится этот язык. Им действительно нравится программировать на нем, а не относиться к нему как к еще одному инструменту. Некоторые разработчики говорят, что им не хватает какой-то особенности Python, когда они вынуждены программировать на другом языке. И это отличает Python от его «коллег».
Когда не стоит использовать Python
Python не всегда будет наилучшим выбором.
Он не предустановлен по умолчанию. В приложении Г показано, как установить Python, если он еще не установлен на вашем компьютере.
Python довольно быстрый для большинства приложений, но его скорости может оказаться недостаточно для наиболее требовательных из них. Если ваша программа проводит бо́льшую часть времени за вычислениями (в технических терминах такое называется «ограничена быстродействием процессора» (CPU-bound)), то языки С, С++ или Java справятся с задачей гораздо лучше, чем Python. Но не всегда!
• Иногда более качественный алгоритм (пошаговое решение) для Python превосходит по скорости неэффективный алгоритм для С. Более высокая скорость разработки для Python дает вам больше времени для экспериментов над альтернативными решениями.
• Во многих приложениях программа «скрещивает пальцы» в ожидании ответа от сервера. Центральный процессор (компьютерный чип, который делает все расчеты) обычно не задействован, поэтому время выполнения статических и динамических программ будет примерно одинаковым.
• Стандартный интерпретатор Python написан на С и может быть улучшен с помощью дополнительного кода. Я рассмотрю этот вопрос в разделе «Оптимизируем ваш код» главы 12.
• Интерпретаторы для Python становятся быстрее. Java был ужасно медленным, когда только появился, и для его ускорения было потрачено много времени и денег. Языком программирования Python не владеет ни одна корпорация, поэтому он улучшается более плавно. В подразделе «PyPy» упомянутого раздела главы 12 я расскажу о проекте PyPy и его приложениях.
• Вы можете писать очень трудоемкое приложение, и, что бы вы ни делали, Python не будет соответствовать вашим потребностям. Тогда, как сказал Иен Холм в фильме «Чужой», примите мои соболезнования. Обычно альтернативой в таком случае являются языки программирования С, С++ и Java, однако решением может стать и более новый язык программирования — Go (