четверг, 5 мая 2011 г.

Ксеноглоссофобия или боязнь незнакомых языков

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

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

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

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

Итак, поехали! Если у вас в процессе чтения возникают вопросы или замечания, то прошу в комментарии Smile

 

Миф 1 Для успешной карьеры достаточно знать всего лишь один мейнстрим язык

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

Даже в рамках одного языка часто не получается почивать на лаврах, тот же C# за время своего существования претерпевал серьезные изменения, С# 5.0 значительно отличается от C# 1.0 в том числе и концептуально.

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

Миф 2 Джависты пишут на джаве, а дотнетчики на сишарпе

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

На деле же в реальных проектах приходится иметь с целым рядом языков, существенно отличающихся друг от друга – SQL, джаваскрипты с экшинскриптами, HTMLи разных версий, XML/XSD/XSLT, скриптовые языки и т.п. На иных проектах до десятков доходит. Причем языки существенно друг от друга отличаются.

Получается, что изучение других языков – это норма жизни, а не исключение из правил.

Миф 3 Требуются годы, чтобы хорошо освоить язык

Многие скажут, чтобы стать хорошим джавистом, надо поработать лет эдак пару минимум. Вроде как, долго?

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

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

То есть сам язык – это всего лишь малая доля знаний разработчика.

Миф 4 Для любого .NET проекта годятся любые .NET разработчики

За годы .NET разработки я успел себя попробовать в разных типах проектов – десктоп приложения, веб-сервисы, веб-приложения, высокоскоростная обработка данных. Я в том числе разрабатывал и на Java.

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

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

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

Миф 5 Чтобы писать на каком-то языке, нужно его хорошо знать

Вообще говоря, даже когда приходишь на интервью с матерым C# или Java разработчиком, то хорошо копнув можно найти какие-то пробелы. Ну, не требовалось человеку что-то, смысла заострять внимание нет. Бывает и так, что пробелы существенные, хотя уже и пара лет практического опыта за плечами.

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

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

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

Миф 6 Ок, понятно, годы на язык не потребуются, но все же проходит немало времени для перехода от теории языка к написанию кода, нужен серьезный knowledge transfer

Если входное интервью не дает однозначного ответа, – мы иногда даем XSLT задачку в качестве входного теста. Суть задачки в общем-то в том, что подавляющее большинство XSLT либо не знает совсем, либо знает плохо.

Для справки, XSLT – это такой angle brackets язык, это совсем не ООП. Некоторым он просто взрывает мозг, там, например, нет переменных. В смысле var есть, но менять значение варов нельзя.

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

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

Итого

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

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

Итого, не стоит боятся незнакомых языков, стоит боятся плохого кода. А неподдерживаемое спагетти можно сделать  и на Java, и на C#, и на любом другом языке.

8 комментариев:

  1. Реклама в РСС - ужас-ужас. Нерелевантная абсолютно :)

    Какая-то онлайн игрушка для школьничков.

    ОтветитьУдалить
  2. Офтоп: Реклама в РСС - страх. Нерелевантная абсолютно. Какая-то онлайн игрушка для школьников.

    ОтветитьУдалить
  3. >К примеру .НЕТчик после C# 3-4-5 сможет писать на чистой Java. Но ему будет далеко не все равно. Там где он привык писать одну строчку с лямбдой или один LINQ запрос - придется написать страницу скучного кода.

    Ха-ха, у меня в первом драфте было в скобочках "(но все равно будет ныть, что C# лучше)", удалил это как нерелевантное :)

    Да, C# как язык лучше. Но Java лучше развита как платформа. Взять, к примеру, Hadoop, Lucene, Liferay - там есть такие монстры, до которых .NET еще прилично подтягиваться, хотя .NET развивается много быстрее. С другой стороны Task Parallel Library в .NET 4.0 - офигенская штука, в Java такого нет, просто клад для быстрой параллельной обработки данных на серьезном железе. Мы этой штукой побили жуткого ETL монстра за полмиллиона баксов.

    > А в целом - хороший пост, спасибо :)

    И вам :) Комментарии мотивируют написать еще и еще.

    ОтветитьУдалить
  4. Ок, надо написать в гугл :) Ты же знаешь, я жду когда же на меня нападут деньги. Чтобы хватило хотя бы домен оплатить :)))

    ОтветитьУдалить
  5. Да, на джаве не так продуктивно пишется, как на дотнетах последних, факт.

    ОтветитьУдалить
  6. Пару лет назад, я писал про [s]это[/s] аналогичное явление, как про "кайрофобию" - боязнь нового: http://www.rsdn.ru/forum/philosophy/3420743.flat.aspx :)

    ОтветитьУдалить
  7. Ага. Гугловейв явно опередил свое время, хотя идея очень аппетитная.

    ОтветитьУдалить
  8. Полностью согласен, что хороший разработчик может писать относительно вменяемый код на любом языке и хороший - на тех, где у него есть опыт.

    Но "все равно на чем писать"... тут я не соглашусь. К примеру .НЕТчик после C# 3-4-5 сможет писать на чистой Java. Но ему будет далеко не все равно. Там где он привык писать одну строчку с лямбдой или один LINQ запрос - придется написать страницу скучного кода. Это не вопрос возможности, а вопрос скорее мотивации, но тем не менее он присутствует.

    А в целом - хороший пост, спасибо :)

    ОтветитьУдалить