Perl - это язык, который я чаще всего использую. Я его очень люблю, если нет веской причины для обратного, я использую исключительно его. В этой статье я расскажу вам, почему, а также дам информацию, используя которую вы сможете выбрать свой собственный основной язык.
Кто-то из стариков сказал: "за все браться и ничего не уметь". Подобно многим программистам, у меня были дни 4 языков - дни, когда я писал на 4 различных языках. Это частенько необходимо. Однако, чем больше вы уделяете внимания одному языку, тем лучше вы его знаете и тем больше вы сможете сделать за меньшее время. Поэтому я предлагаю вам выбрать ваш "основной язык" - это тот язык, который вы используете для всего, если только нет веского повода использовать что-то другое.
Мой основной язык Perl. Он установлен почти на всех UNIX, Linux и BSD машинах и поэтому я действительно могу "написать однажды, запускать везде". Он также доступен бесплатно или за небольшую плату (например $39.00) для Windows от ActiveState, а также с открытым кодом от Siemens, называемый SiePerl. Благодаря встроенным регулярным выражениям, слабому типизированию и многочисленным шоткатам(shortcuts), разработка ведется подобно молнии. Фаза отладки занимает больше времени, чем мне хотелось бы, но я могу жить с этим. Не в пример многим языкам, поставляемым с Linux, знание Perl действительно ведет к оплачиваемой работе.
Это все мои мысли.
Обсуждения языков программирования похожи на релегиозные обсуждения - живо, яростно и упрямо. Эта статья обсуждает C, C++, Java, Python, Ruby, TCL, QT, gTk, bash и Perl. По-моему это превосходные языки. В прошлом я писал на плохих языках, поэтому я узнаю собаку, когда ее вижу и ни один из них не собака (в оригинале "so I know a dog when I see one, and none of these is a dog" - может быть слово "собака" надо было заменить на слово "сука"? - прим. перев.).
Я написал сотни тысяч строк на C, C++ и Perl, десятки тысяч на Java и Python и тысячи строк на bash. У меня есть знания Ruby, потому что он похож на C++, Java и Python. Я знаю немного gTK и QT и немного знаком с TCL.
Далее идет небольшое сравнение упомянутых языков.
| Язык |
Описание |
Преимущества |
Недостатки |
Доступность |
C
|
Небольшой, прекрасный компилятор в машинные коды. |
Создает быстровыполяемые программы.
Полный доступ к железу, памяти и I/O.
Строгая типизированность защищает от ошибок.
|
Небольшое количество конструкций высокого уровня делают разработку меннее эффективной.
Частое использование указателей памяти и необходимость управления распределением памяти для программиста часто приводит к ошибкам.
Строгая типизированность тормозит разработку.
|
Установлен по умолчанию на всех UNIX/Linux/BSD машинах. Может быть приобретен для Windows. |
C++
|
C + ООП
|
Все преимущества C, хотя более медлителен.
Классы и объекты делают программы более масштабируемыми.
Строгая типизированность защищает от ошибок.
Полная объектная инкапсуляция делает программы более надежными, исключая проблемы с указателями и переполнением буфера.
|
Те же недостатки как у C.
|
Установлен по умолчанию на всех UNIX/Linux/BSD машинах. Может быть приобретен для Windows. |
| Java |
Машинно-независимый язык, компилируемый в специальный байткод. Изначально создавался объектно-ориентированным. |
Масштабируемый до гигантских проектов, благодаря врожденному ООП.
Встроенная сборка мусора в памяти и отсутствие указателей минимизируют количество ошибок.
Фаза отладки Java программ невероятно быстра.
Строгая типизированность защищает от ошибок.
Полная объектная инкапсуляция делает программы более надежными.
Гигантский рынок для Java программистов.
|
Скорость выполнения может быть очень медленной.
Даже простая программа требует ООП, поэтому простые программы не так просты, как вам бы этого хотелось.
Строгая типизированность тормозит разработку.
|
Доступен для всех платформ. |
| Python |
Широко распространенный интерпретатор, хорошо интегрированный с ООП. |
Хорошая интеграция с ООП делает Python масштабируемым до довольно крупных проектов.
Встроенная сборка мусора в памяти и отсутствие указателей минимизируют количество ошибок.
Отсутствие проверки типов позволяет быстрее разрабатывать программы.
Инкапсуляция объектов доступна, если вы знаете как (__переменная), поэтому вы можете писать отличные, надежные программы.
Вложенность Python, чувствительная к отступу, делают его самым читабельным языком на планете.
|
Отсутствие проверки типов потворствует появлению трудноуловимых ошибок.
Скорость выполнения не может стравниться с C или C++.
Почти нет рынка для Python программистов.
|
Доступен на UNIX, Linux, BSD and Windows. Поставляется со многими Linux дистрибутивами, но часто не устанавливается. |
| Ruby |
Интерпретатор, построенный снизу вверх, с мыслями об ООП. Что-то похожее на Perl и Python. |
Хорошая интеграция с ООП делает Ruby масштабируемым до довольно крупных проектов.
Встроенная сборка мусора в памяти и отсутствие указателей минимизируют количество ошибок.
Отсутствие проверки типов позволяет быстрее разрабатывать программы.
Объектная инкапсуляция позволяет делать надежные программы.
|
Скорость выполнения не может стравниться с C или C++.
Нулевой рынок для Ruby программистов.
|
Доступен на Linux, но редко установливаемый. На других платформах каждый может скомпилировать рабочий вариант и установить.
|
| TCL |
Интерпретатор, чей синтаксис и использование очень различается для С или других языков, обсуждаемых здесь. Те, кто знает как, могут писать реальные программы всего из нескольких строк TCL, но не очень масштабируемые. |
Реальные программы могут быть написаны, используя несколько TCL операторов.
|
Нет ООП и не очень масштабируемый.
TCL редко используется и рынок TCL программистов довольно мал.
|
Поставляется и обычно устанавливается на Linux. Доступен для других платформ, включая Windows.
|
| QT |
Компилируемый язык, спроектированный для создания графических приложения. |
Создает быстрые и эфективные графические приложения.
|
Трудный для использования.
|
Поставляется с Linux, доступный посредством компиляции на большинстве других платформ.
|
gTk
|
Компилируемый язык, спроектированный для создания графических приложения. |
Создает быстрые и эфективные графические приложения.
|
Трудный для использования.
|
Поставляется с Linux, доступный посредством компиляции на большинстве других платформ. |
| bash |
Командный интерпретатор может быть использован как язык. |
Выдающаяся модульность достигнута путем разделения на исполняемые файлы, piping и перенаправление.
Контроль качества прост, если вы собираете программу из протестированных, хорошо известных программ.
Безцикловая производительность так быстра, насколько быстро ее вызывает оптимизированная программа.
Доступен очень рано в процессе загрузки, поэтому bash-скрипты могут быть использованы для контроля загрузки.
|
Скорость циклов неприемлемо низка.
Синтаксис раздражающе непривычный.
Нет ООП.
Мало поддержки комплексных структур данных.
|
Установлен на всех Linux машинах. Bash или что-то очень подобное установлен почти на всех UNIX и BSD машинах. Может быть установлен на Windows машинах. |
Perl
Замечание: эта оценка справедлива только для 5 версии. |
Интерпретатор, оптимизированный делать большие вещи несколькими строками. ООП добавлено позже. |
Доступность ООП делает Perl масштабируемым до средних размеров проектов.
Встроенная сборка мусора в памяти и отсутствие указателей минимизируют количество ошибок.
Отсутствие проверки типов позволяет быстрее разрабатывать программы.
Используется повсеместно во всем UNIX/Linux/BSD мире.
Perl программа вероятно запускается на любой машине.
Солидный рынок на знания Perl.
Очень быстрый для интерпретатора.
Репозитарий Perl модулей CPAN содержит инструменты, делающие легким почти все, что вам нужно.
|
Отсутствие инкапсуляции и закрытых переменных могут приводить к ошибкам в крупных проектах.
Философия "много путей, чтобы выполнить задачу" приводит к нечитаемому коду, трудностям в отладке и отсутствию "лучшей практики".
Отсутствие "лучшей практики" приводит к весьма плохому коду Perl.
|
Устанавливается по умолчанию на всех Linux, BSD и Unix машинах. Доступен для Windows и других платформ. |
Лучше выбрать основной язык, чтобы использовать его в тех случаях, когда нет веских причин использовать какой-нибудь другой язык. Язык, который я выбрал в качестве основного - Perl.
Perl не совершенство. Он даже не язык, который мне больше нравится. Я предпочитаю Python. Но я выбираю Perl перед Python по следующим причинам:
- Perl наверняка будет установлен на большинстве машин.
- Perl библиотека CPAN - это одна из самых полных и может быть использована, чтобы выполнить почти все на Perl.
- Реально есть оплачиваемая работа на Perl.
Многим людям нравится Ruby, потому что его ООП from the ground up, и он очень мощный язык. Однако те же 3 причины, по которым я выбрал Perl перед Python дважды применимы к Ruby.
Выбор Perl перед Python и Ruby - это непростой случай. Выбор Perl перед C, C++ и Java намного больше поддерживаемый.
C and C++ требуют от программиста удалять выделенную память и они зависят от указателей на память. Эти два фактора почти гарантия ошибок в любой C или C++ программе. Я имею ввиду ошибки, которые переживают стадию отладки при разработке и видны пользователю. Во многих случаях, эти ошибки используются кракерами, как ошибки переполнения буфера. Также, C и C++ предлагают мало конструкций высокого уровня, поэтому программист должен строить каждое приложение из набросков. Perl, особенно усиленный репозитарием CPAN, позволяет вести очень быструю разработку.
Теперь Java. Java - это чудесный язык, с преимуществами
Perl'а управления памятью и отсутствием указателей. Java так организованный язык, что он почти отлаживает(debug) себя. Фаза отладки в Java НАМНОГО более быстрая, чем в Perl. Исключая фазу кодирования. Java огромен. Нужно выучить тонны всего. И он поддерживает только ООП подход, это значит, что в любом проекте вы должны использовать объекты. Hello World требует ООП код. И потом, имеет значение производительность Java. Получаем лучше, но все еще медленно.
gTk и
QT просто слишком запутанны для меня, чтобы тратить время на обучение. Bash - прекрасный, пока программа остается меньше ста строк. TCL слишком отличен - я использую языки, произошедшие от Pascal - C, C++, Java, Perl, Python, Ruby, VB, etc. Дайте мне Lisp, Prolog или да, TCL, и я новичок опять.
Как Выбрать Свой Основной Язык
Каковы ваши приоритеты? Вы пишите в основном драйверы устройств? Если так, вам нужен C. Ваши приоритеты быстрая разработка и свобода от багов? Держитесь подальше от С и С++. Ваш главный приоритет получить работу? У меня есть одно слово для вас - Java! Или С#, если вы двигаетесь в эту сторону. Вы хотите самый читабельный язык, когда либо созданный и получить прекрасное ООП, быструю разработку и свободу от багов? Python! Вы хотите ООП язык from the ground up? Java или Ruby. Вам нужен самый распространенный интерпретатор в мире UNIX, с быстрой разработкой и свободой от ошибок памяти? Perl.
Я хотел бы предостеречь вас, что это может быть большое горе, работать с языком, который никто другой не использует. У меня есть приятель, кто работает с языком, называющимся REBOL. Он может долго о нем рассказывать и хвастается своей работой на обычных основаниях. Это не хорошо - REBOL стоит денег, поэтому мы все используем C, Java, Perl, Python и Ruby. У него нет сообщества, от которого копить знания. Мои друзья в одиночестве прогуливаются по его миру.
Замечания, неточности и дополнения, а также слова благодарности и справедливая критика принимаются по адресу: cub@mobi.spb.ru
|