В поисках Святого Грааля или сага о священных войнах программистов

Я программирую уже свыше 10 лет и за этот период сменил не  одну технологию. Фактически, для любой задачи полезен тот язык программирования, который идеально подходит для ее решения с меньшими трудозатратами. Например, часто в системном администрировании nixов приходится писать perl скрипты, которые позволяют сэкономить буквально массу времени. Согласитесь, что глупо буквально каждую повседневную задачу писать на сях, танцуя с бубном над очередной реализацией того или иного функционала. Или же для разработки сайта наивно пренебрегать таким языком как PHP и реализовывать CGI на каком-то другом языке.

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

Возможно, что я познал путь дзен, ибо меня этот вопрос уже не волнует. Ведь на самом деле, какая разница, на чем программировать? Вы посмотрите на основные конструкции того или иного языка — все они одинаковы. Даже при написании своих уроков по программированию, я сталкивался с дурацким дублированием одного и того же текста.

Тем не менее, уверен, что среди читателей этой статьи все равно найдется тот, кто является приверженцем  того или иного языка. Такой программист будет придумывать доводы, почему именно этот язык будет лучше других.  А ведь это глубокое заблуждение.

По сути, все языки одинаковы. Разница лишь в дополнительных библиотеках. Сравните большинство участков кода C# и Java – фактически, они будут примерно одинаковы. А все лишь потому, что восходят корнями к С. Но даже такой, казалось бы, отличный от C Паскаль (Делфи) все равно похож на тот же C++. Да, можно писать begin end вместо {} и говорить «вот оно, это отличие». Но если придираться, то можно найти массу отличий даже в различных релизах одного и того же языка.

Что по сути представляет современное программирование? Это прежде всего, повторное использование чужого кода. Честно говоря, на мой взгляд полное безумие писать то, что уже делали неоднократно другие. Например, я хотя и представляю себе алгоритмы архивации, но писать свою компоненту или библиотеку никогда не буду. А зачем? Если есть готовая, лучше использовать ее, чем тратить время на ее написание.

Современное программирование представляет собой предметно-ориентированную направленность. По факту, многое уже открыто и изучено. Можно годами искать свой Святой Грааль в программировании, ничего тем самым не открыв. Программист — человек прагматичный. Он прекрасно должен уметь распоряжаться своим временем.

И глупо штамповать программы лишь на одном и том же языке лишь потому, что он «лучше и быстрее». Когда нужно написать небольшую утилиту с графическим интерфейсом с нативным кодом, я использую Делфи. Да, программа получится медленнее, чем на VC++, но и разработка гораздо быстрее.  Если нужна сетевая программа или работа с базами данных, использую C# или Java, если речь идет о кроссплатформенности.

Тенденция последних лет -повсеместное использование Python. Его набор модулей предназначен, похоже, для всех случаев жизни. На Питоне можно писать кроссплатформенные программы. Ну будет скорость медленнее, чем у тех языков, которые компилируются в нативный код, и что? Современные устройства обладают настолько мощными процессорами, что уже быстродействие кода плавно отходит на задний план.

Я даже уверен, что сама профессия программиста, которая существует в нынешнем виде, претерпит массу преобразований. Все возможные конструкторы кода полностью наступают, что делает угрозу традиционному программированию.  Место нынешних программистов займут системные архитекторы ПО.

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

Циклы, условия, массивы, функции,классы — все это присуще современным языкам. И если вы не занимаетесь профессиональным реверсингом программ, вам даже не нужно знать о паскалевской и сишной нотации программ в ассемблерном коде.

По факту, когда говорят, что мне нравится  тот или иной язык, имеется в виду компилятор и платформа.  Изучить C++ несложно — там всего, если память мне не изменяет, 89 ключевых операторов.  А вот на изучение всех библиотек хотя бы из набора стандартной библиотеки может понадобиться около года. Тоже самое с C#, Делфи или Java.

Все эти споры о том, какой язык лучше бессмысленны по своей природе. Да, можно виртуозно владеть каким-либо инструментом и постоянно ставить его в пример. Но не более. По факту, все кто  спорят о языках программирования, сомневаются в своих силах и боятся изучить что-то новое. Но подобный подход обречен на неудачу.

Представьте себе подход, когда студент с энтузиазмом изучает C++, заведомо отбрасывая все иные варианты. Хотя в его регионе востребован 1С или PHP. Хуже, лучше — важно лишь то, что какой язык программирования  востребован в данный момент. И когда встает выбор между работы в захудалом НИИ сишником на оклад в 7 тысяч рублей или освоить попсовую 1С и пойти работать на 40 тысяч, «отжимая» у фирмы клиентов,  выбор падает не в пользу первого.

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

 

Комментарии

9 комментариев на “В поисках Святого Грааля или сага о священных войнах программистов”
  1. Алексей:

    Полностью поддерживаю вашу точку зрения, сам программирую уже больше 7 лет. Довольно часто посещаю форумы программистов и всегда вижу комментарии «язык под названием N круче чем язык M, потому что это я программирую на нем». И часто такие посты вызывают у меня улыбку.

  2. Albom:

    «По сути, все языки одинаковы».
    Крайне не согласен с этим выражением! А как же языки разных парадигм. Можно ли сравнить, например, С++ и Lisp? Императивные и функциональные языки очень отличаются. И даже C и C++, несмотря на очень схожий синтаксис (можно даже считать C подмножеством C++), различаются концепцией — в C++ используется принцип ООП, а в С структурное программирование.

    • Вячеслав "VeGA" Головлев:

      Эти сравнения можно приводить бесконечно. Высокоуровневые языки против ассемблеров. Интерпретируемые против компилируемых и .д. Да и подход к программированию отличен между структурным или тем же ООП. Но суть статьи не в этом. Программист, умеющий программировать на одном языке, спокойно освоит и другой, независимо от парадигмы. Почему? Подумайте сами.

      • Albom:

        Да, суть статьи не в этом. А в том, что языки C, C++, Java и Pascal имеют очень похожий синтаксис.

        Но даже если сравнивать только синтаксис, то и это неправильно. Что быдлокодер, пишущий индусский код на делфи, может сказать о таком синтаксисе:

        http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/src/Control-Monad-Trans-State-Lazy.html

        ?

        Ничего. Потому что он привык, что «Циклы, условия, массивы, функции, классы — все это присуще современным языкам». И его субъективное мнение, что ПО СУТИ между языками нет никакой разницы.

  3. Вячеслав "VeGA" Головлев:

    Я так понимаю, что вы изучали хаскель и лисп и теперь перед всеми блещете «крутизной»? Что вы мне пытаетесь доказать? Если программист не разобрался в другом языке, грош ему цена, будь он четырежды ас в своем языке. Я имел в виду прежде всего это. Да, я не знаю хаскель и никогда не задавался целью его изучить, так как вакансий по нему не видел.
    Насчет быдлокода… Мой блог по задумке идет от новичков и т.д. Если я сейчас начну првиодить сложный код, сколько человек ко мне будет приходить? Какой-нибудь Albom, который будет с занудным упорством искать изъяны в коде и тыкать на ссыль с хаскелем? Сколько их будет? 1-2 в месяц? Если вы такой уж профессионал, какого хрена вы делаете на моем «индусском» блоге?
    А насчет ссылки на хаскеле… Вы хотите проверить, что «индус, пишущий быдлокод» может в нем понять или что? Мне просто даже самому интересно узнать мотив.
    Попробуйте написать несколько рубрик по разным языкам, причем с самого начала. И попробуйте удивить какой-либо «изюминкой». Да, далее будет уже различаться. Хотя бы тот же Java и C++ и т.д.
    В общем, взялись троллить, идите уже до конца…

    • Albom:

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

      P.S. Сам около десяти лет назад начинал писать на технические темы и сталкивался с серьёзной критикой редакторов и рецензентов. Обижался, не хотел больше писать. Но затем выработал некоторый стиль, стал более объективен. Так что на комментарии к статье — это не личное унижение, а обратная связь, позволяющая совершенствоваться.

      • Вячеслав "VeGA" Головлев:

        Кстати, вы не тот Albom, что Kolibri OS написал? Скорее всего, что-то путаю… Юзал ее по-моему в 2009. Но в любом случае речь не об этом.
        Статью побудили написать мои ученики. Я просто не мог понять, как человек, изучавший C++ не может изучить Ruby или C# (оба с ООП). Просто программист, знающий основные алгоритмы, структуры данных, конструкции большую часть времени тратит на применение этих знаний к конкретному SDK и написанию приложения для той или иной платформы.
        Конечно, я не совсем правильно проводил аналогии. Даже такие производные от C языки как C++ и Objective C отличаются подходом, а что тогда говорить о функциональных языках?
        Кроме того, можно привести пример пресловутой Java2000, которой меня замучили в Питере :).
        А быдлокодерство — издержка изложения. Кроме того, сложный код я привык писать на C++. Кроме того, его и читать никто не будет на этом блоге — не та аудитория. Профессионалы обычно обитают на специализированных форумах. Что толку писать то, что никогда не будет прочитано?
        Даже затеяв давать уроки программирования на блоге, я столкнулся с маленькой посещалкой. Поэтому пришлось разбавлять блог компьютерным материалом.
        Кстати, вы всерьез изучали хаскель? Мне просто интересна его востребованность. Как по мне, так уж лучше быть быдлокодером и писать индусский код на C#, получая свою корку хлеба, нежели забивать голову хаскелем, лиспом и т.д.
        Еще прошу вас прокомментировать труды Кнута по алгоритмике. Там все на псевдокоде. А его понимают программисты всех мастей. Не то ли это единство языков?

        • Albom:

          Да, я принимаю участие в разработке KolibriOS, но сказать, что я её написал — это будет неправильно. Моё участие в проекте — разработка нескольких системных утилит, документирование, продвижение системы в массы, помощь начинающим, разработка алгоритмов функционирования отдельных её частей и обсуждение (в том числе и критика) алгоритмов, которые предлагают другие участники сообщества. Ну, и ко всему моё участие — это написание нескольких игр, а также тестирование драйверов на имеющемся у меня железе.

          По поводу хаскеля скажу, что я его только недавно начал изучать, хотя с теорией функционального программирования знаком давно. Согласен, что вакансии можно пересчитать на пальцах одной руки. И применений его, да, очень мало. Но главная идея, которая меня побудила написать комментарий, это то, что не синтаксисом единым похожи и различаются языки. Парадигма. Вот то слово, которое определяет стиль программирования. В то, во что нужно въехать, что нужно постичь. Это как дзен. Так вот. Есть такие задачи, которые на императивном языке программирования не то, что сложно реализовать, а практически невозможно. А на хаскеле их решение по крайней мере реально.

          По поводу фундаментального труда Кнута могу сказать, что это классика, которую должен прочитать каждый образованный программист. И меня всегда радуют книги с псевдокодом.

          И ещё пару строчек о статье и блоге в целом. Блог мне очень нравится, так как в нём попадаются очень удачные примеры подачи информации (я кроме основной работы в захудалом НИИ преподаю в вузе). И я желаю, чтобы он был ещё лучше! :)) Но статья получилась несколько субъективной и не отражающей полной картины. Надеюсь, когда-нибудь появится статья «В поисках Святого Грааля… Часть 2». 😉

          Удачи! 🙂

  4. Вячеслав "VeGA" Головлев:

    Значит, память мне не изменила. Просто ссылку на Колибри я брас с Чипа, а там автором указан был тогда именно Albom. Поэтому мозг и выдал подобную ассоциацию.
    Знаете, реально в споре с вами действительно увидел пробелы. Так что новая статья обязательно должна появиться:).
    А насчет подачи материала — я ведь тоже преподаю. И обучаю сейчас детей-инвалидов. Поэтому моя задача была подать материал так, чтобы понятно было любому. Отрадно слышать от другого преподавателя, что мне частично это удалось.
    В любом случае, спасибо вам за то, что посетили мой скромный блог. Удачи и вам ! 🙂

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: