О юниксах, программировании и принятии решений
11 февраля 2011
До недавнего времени я сильно заморачивался на темы вроде «кто платит каждый месяц за ссылки в SAPE, когда можно купить вечные в GoGetLinks» или «я не могу поставить эту программу, ведь она использует QT, а у меня весь установленный софт – на GTK». Было еще что-то про «GUI против CLI», но сейчас я даже не могу сформулировать эту проблему.
Ключевой момент в вышесказанном — «до недавнего времени». Интуиция (и годы, проведенные в сети) подсказывают мне, что многим хотелось бы узнать, как можно решить такие холиварные «философские» вопросы, как Linux против FreeBSD, fork() против потоков и тд.
Начну немного издалека. Вы никогда не задумывались, зачем кому-то понадобилось придумывать столько скриптовых языков (PHP, Python, Ruby, …), несмотря на то, что Perl существовал задолго до их появления и прекрасно работал? Для справки — Perl появился в 1987, Python — в 90-м, PHP — в 94-м, Ruby — в 95-м. Причина элементарная — кому-то просто чем-то не понравились существующие языки и он решил придумать новый.
Например, PHP создавался, как средство, заточенное для создания динамических сайтов. Дальновидная затея для 94-го года, правда? Язык был максимально упрощен и оптимизирован для одной конкретной задачи. И что получилось в итоге? Практически все сайты сегодня работают на PHP! Хотя ничто не мешало и не мешает до сих пор писать их на Perl, Python или даже на C++ (1983-й год). Просто PHP оказался удобнее для веб-разработчиков.
Какое это имеет отношение к данной заметке? А такое, что, оказывается, люди вообще склонны создавать что-то, пусть не совсем новое, но заточенное специально под себя. Посмотрите, хотя бы, сколько сейчас существует дистрибутивов Linux! Но вот парадокс — в то же время человеческий мозг склонен искать нечто идеальное и универсальное. Представьте, как хорошо жилось бы программистам, если бы любую задачу можно было решить с помощью одного-единственного языка программирования. Эдакого универсального средства от всякой чертовщины, серебряной пули. Но ее, как известно, не существует!
Так вот, вся хитрость заключается в том (внимание!), чтобы найти не оптимальное средство вообще, а оптимальное средство для конкретной ситуации или конкретно для себя (кстати, по уверению психологов, так же обстоят дела со смыслом жизни). Проще говоря, использовать то, что больше нравится или что лучше подходит для данной задачи. Нравится Ubuntu? Используйте Ubuntu. Вполне устраивает Windows? Используйте его. В этой ситуации предпочтительнее использовать Java, а не C++? Отлично, используем Java! Правда, может возникнуть другая проблема. Как же определить, что лучше в данном случае?
Для наглядности рассмотрим пример. Васе чем-то не нравится Windows (достали вирусы), и он подумывает попробовать Linux (потому что слышал, что вирусов под Linux не бывает). Но, во-первых, чтобы попробовать Linux, нужно либо сносить Винду, либо ставить виртуальную машину, либо поискать лишний компьютер. Эти сложности идут в минус Линуксу. Во-вторых, Линуксов, оказывается, много. Какой выбрать? Что, если Вася выберет не тот Линукс? Опять придется переустанавливать ОС? Это — еще один минус. Выходит, что у Винды свои минусы, а у Линукса — свои. Стоит ли переходить?
Еще один пример. Начинающий программист Петя решил выучить скриптовый язык. Какой выбрать — Perl или Python? Вроде в Python есть много ООП, а на всех форумах пишут, что это хорошо. С другой стороны, имея опыт программирования на PHP, Петя привык к фигурным скобочкам и не хочет иметь дело с непривычными табами. К тому же, его друг Вася рекомендовал учить Perl и даже обещал подогнать хорошую книжку. А Вася — парень умный, хочет даже Линукс поставить…
Ну и как прикажите принимать решение в таких условиях? На наше счастье, математики уже давно за нас все придумали. Оказывается, проблему выбора языка программирования или операционной системы можно свести к задаче оптимизации.
Если не вдаваться в детали, достаточно посчитать все «за» для каждого из вариантов и тупо выбрать тот, у которого «за» оказалось больше. Это можно сделать на полуинтуитивном уровне за считанные секунды. Если для нескольких вариантов «за» оказалось поровну, нужно либо напрячь мозги и придумать еще пару критериев выбора, либо ввести веса. То есть давать за особо важные критерии два «за» вместо одного.
Просто, быстро и, что самое главное, не оставляет никаких сомнений в правильности выбора! Больше никаких заморочек на тему «какая же операционка самая лучшая». Для Васи после подсчетов всех «за» оптимальным вариантом оказался Linux, а Петя неплохо чувствует себя и под Windows. Проблема решена!
Казалось бы, я говорю о таких простых и общеизвестных вещах. Во-первых, серебряной пули не существует. Во-вторых, нужно использовать то, что больше подходит для тебя или для конкретной задачи. Тогда откуда, спрашивается, берутся все эти холивары (см комментарии) о Самой Лучшей На Свете ОС? Неужели мы все еще не научились игнорировать троллей? Или мы просто не вдумываемся в смысл того, о чем пишут в книгах и блогах?
А теперь — интересное следствие из всего вышесказанного. Как известно, опытному программисту безразличен синтаксис языка. Пишем мы на Pascal или C, идея везде одна и та же — переменные, циклы, условные операторы. Так вот, оказывается, существует еще более высокий уровень. Когда вообще все равно на каком языке, для какой операционки и в стенах какой компании писать. Пишете вы на Python в стенах Google или на C# в стенах Microsoft — не важно. Если вам готовы платить за это деньги, значит система работает.
Я говорю не о какой-то компьютерной системе, а о системе «пользователь — коробка с Windows — прибыль Microsoft — зарплата программистам». Аналогично, если кто-то покупает телефоны с Symbian, а кто-то — телефоны c Android, значит право на жизнь имеют и те и другие. Сколько бы нас не пытались убедить в обратном пользователи ЖЖ, Хабра и Твитера.
Что же касается GTK и QT, упомянутых в начале поста… у меня достаточно места на диске, чтобы держать обе библиотеки. И мне все равно, что одним программистам больше нравится первая библиотека, а другим — вторая. Зато имеет значение, что софт, который пишут и те и другие, не тормозит на моем компьютере и хорошо справляется со своей задачей. Глупо ведь отказываться от классной игрушки типа HedgeWars, только потому что в ней используется QT.
Вообще программистам следует помнить, что пользователя не интересует, какие инструменты вы используете в своей работе. Для него важно, чтобы программа решала поставленную задачу и, желательно, делала это без лишних тормозов. Короче, главное — чтобы работало!
Впрочем, если программист время от времени пробует новые инструменты, скорее всего, это никому не повредит.
Дополнение: Пост в продолжение темы — Свободное ПО и открытые протоколы – это хорошо?
Метки: Философия.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.