Сосредоточение на одном языке программирования

Оглавление

Содержимое

Часто люди спрашивают в интернете, стоит ли учить такой-то язык программирования. И вот у меня возникла мысль.

  1. С одной стороны знать много языков программирования вроде как хорошо, широкий кругозор.
  2. С другой это лишь отнимает силы от того, чтобы выучить хотя бы один язык, но профессионально.

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

Что лучше, знать один язык программирования профессионально или несколько на среднем уровне?

  1. Один профессионально.
  2. Несколько на среднем уровне.

Вопрос специально поставлен так, чтобы не казалось, что можно выучить больше за тоже самое время, например:

  1. Один профессионально и несколько на среднем уровне.
  2. Несколько профессионально и ни одного на среднем уровне.
  3. Несколько профессионально и несколько на среднем уровне.

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

Я не знаю как компании оценивают уровень владения языками программирования и совпадает ли это с моей оценкой.

  1. Джун (новичок)
  2. Мидл (средний)
  3. Сеньор (профи)

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

Для примера предположим человек выбрал C++, он знает все парадигмы этого языка. Ему можно заказывать всё что угодно, но именно в ограниченном круге задач. Если нужен хотя бы скриптовый язык, вроде Lua, Python, то предполагается, что он не может их использовать эффективно. Или, например, кто-то выбрал PHP, он может что угодно на нём сделать, никакая веб-программа на этом языке не является для него секретом. Но при этом никаких Ruby или ещё чего-то похожего, это не говоря уже про отдалённое.

Я как бы поставил умозрительное условие:

  1. Или программист ограничен во всём, кроме одного языка программирования, но на нём он творит чудеса.
  2. Или он этакий мастер на все руки, но идеального исполнения от него ждать не стоит.

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

Если программист средний в каком-либо одном языке, то он может или выучить ещё один язык до среднего уровня, или повысить текущий до профи. На то и другое будет потрачено время, да и не факт, что запала хватит на всё. В мире более 8 тысяч языков программирования. Говорят, что фраза про 10 тыс. часов это профанация. Ну, а всё же, если посвятить улучшению 4 часа в сутки, тогда это 2.5 тыс. суток. Если заниматься каждый день, то это ≈6.85 лет. А если не каждый, а если меньше 4 часов. В топике всего лишь вопрос, кто что думает по этому поводу.

Почему тогда не все поголовно профи, почему профи так мало, почему всякие конторы их так мучительно ищут? А это не говоря уже о том, что новичку до среднего тоже надо напрячься и как-то перейти на следующий уровень владения языком.

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

У профессионала как минимум программа:

  1. Должна правильно работать.
  2. Выполнять все возложенные на неё задачи.

Звучит просто, но на деле это не просто.

По первому пункту программа может:

  1. Не работать.
  2. Работать неправильно.

Почему? Потому что её сговнякали на коленке, а не спроектировали. Не учитывали что и как она делает, как попало выделяли память и распределяли по коду данные, и всё в таком роде.

По второму пункту программа может:

  1. Не выполнять все возложенные на неё задачи.
  2. Выполнять их через одно место.
  3. Доставлять неудобство пользователю при работе с ней.

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

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

Выше я уже писал, что программист может не гнаться за множеством языков программирования, а освоить один на профессиональном уровне. Именно на нём он будет решать задачи оптимально подходящие под его язык программирования. Если же задачи под другой язык программирования или даже парадигму для конкретного языка программирования, тогда он просто будет продолжать заниматься своим делом, а не лезть в чужие.

И опять же откуда берётся дерьмо, которое нужно разгребать? Ведь кто-то и когда-то его написал. Написал его тот, кто не был профессионалом. И вот теперь нужен профессионал, который может его разгрести. Фактически мы возвращаемся к тому же самому, рынку нужны профессионалы хотя бы в одном языке программирования, а не просто среднячки и не профессионалы во всём, которые без должного руководства тоже могут написать то, что нужно будет потом разгребать.

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

Если в программе баги, утечки памяти и код запутан, причём это действительно так, а не некая субъективная оценка и попытка залезть в код, которого не понимаешь, то с чего вывод, что программу писал профессионал. По идее именно качество программы и определяет профессионализм программиста, а не то, что он сам сказал, что он профессионал, и даже не то, согласна ли ему платить какая-либо компания как профессионалу.

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

Хотя аргументы в стиле и чтец, и жнец и на дуде игрец тоже стоит послушать, для того и создан топик. Пока противники профессионализма меня лишь убедили, что новички, а то и среднячки запросто напишут говнокод. Была попытка обозвать их профессионалами, чтобы опорочить последних, но нет, те кто пишут говнокод не профессионалы.

На одном языке программирования наговнокодил, на другом наговнокодил, на третьем наговнокодил. В чём тогда преимущества владения множеством языков программирования? А появляется говнокод не просто от отсутствия времени, как любят некоторые говорить, а от отсутствия необходимого опыта на получение которого по сути тоже нужно время, причём очень много.

Может ли человек быть профессионалом во всём? Хотелось бы верить, но скорее всего он не будет профессионалом ни в чём. И проблемы начнут проявляться не на хеллоу ворлдах и учебных примерах, а на больших программах, которые бесконтрольно разрастаются непонятно во что.

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

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

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

Литература

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