| include $BASE_DIR.'_inc/left_block.php' ?> |
Сравнительная Религия
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. У него нет сообщества, от которого копить знания. Мои друзья в одиночестве прогуливаются по его миру.
Оригинал: November 2003 Linux Productivity Magazine: Perl
Автор: Стив Лит(Steve Litt)
Перевод: Александр Кубышкин
Дата: 8 января 2004
|
include $BASE_DIR.'_inc/right_block.php' ?> |