Education

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

Вы не станете волноваться, а просто воспользуетесь Google Maps.

После того, как вы побываете в магазине несколько раз, весьма вероятно, что Google Maps вам больше не понадобится.

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

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

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

То же самое относится и к определённым методам, которые нужны вам в языке программирования.

Новички в разработке могут чувствовать себя неуверенно, если не запоминают соответствующий синтаксис: им приходится обращаться к документации. Они расценивают это как знак, что они плохие разработчики. 

Вот пара вопросов, которыми они, возможно, задавались, начиная свой путь в программировании:

  • Как я смогу запомнить весь этот синтаксис?
  • Сколько времени мне понадобится, чтобы освоить синтаксис и писать код, не обращаясь к документации?

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

У них создаётся впечатление, что количество языков или фреймворков, которые они в состоянии запомнить, имеет значение.

Для наглядности давайте сравним синтаксис определения длины строки в различных языках программирования:

  • seq.length —  списки JavaScript, массивы Java.
  • seq.size() — последовательности Java, выражения jQuery (устаревшее).
  • len(seq) — Python.
  • seq.count() — выборки Django.
  • SeqType'Length — массивы Ada.
  • length seq — Haskell.
  • (count seq) — Clojure.
  • sizeof(seq)/sizeof(seq[0]) —  C, статистически определённые строки.
  • strlen(seq) — C, строки с нулевым символом в конце.

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

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

Действительно ли синтаксис настолько важен, что я должен выучить его?

Чтобы ответить на этот вопрос, давайте посмотрим, что об этом говорят сами senior-разработчики.

Tim Dierks: Привет, меня зовут Тим. Я ведущий разработчик в Google с 30-летним опытом и мне приходится искать, как найти длину строки в Python.

Lukas Kollmer: Привет, меня зовут Лукас. Я пишу на Objective-C почти 8 лет и мне всё ещё приходится гуглить синтаксис блоков.

localghost: Привет, меня зовут JP. Я установил Node.js в коммерческий самолёт и я всё ещё не знаю разницу между .substr() и .substring().

localghost: Даже для того, чтобы написать этот пост, мне пришлось гуглить, нужно ли использовать CamelCase для написания substring.

Jon F Hancock: Привет, меня зовут Джон, я ведущий разработчик на Android в Phunware. Я не могу прочесть входящий поток без копирования кода со Stack Overflow.

(Original Friendly) Mike: Привет, я Майк. Я ведущий разработчик в “Нью-Йорк Таймс”, и я не знаю, что значит np complete. И должен ли я знать?

Faisal Chaudhry: 12 лет разработки на JavaScript, а я до сих пор путаю substr() и substring(). Всегда проверяю на w3schools.

dominil kundel: Привет, меня зовут Доминик. Я пишу на JS 6 лет и всё ещё подсматриваю, как выполнять AJAX-запросы без fetch или jQuery.

Tim Bray: Привет, меня зовут Тим. Я в программировании с 1979 года и всё ещё постоянно ищу методы строк java.lang.

Умер Мансур: Я написал 255 строк кода, который включал работающий сервер и клиент. Я искал в Google 23 раза, в основном, на StackOverflow, веб-сайте Netty 4, GitHub и JavaDocs. Если посчитать, в среднем это составило 1 запрос на каждые 10 строк кода! С ума сойти.

Erica Joy: Привет, меня зовут Эрика. Если я вам расскажу, какие вещи гуглю, то скажете, что я не настоящий инженер.

Scott Hanselman: Привет, я Скотт. Я часто путаю O(n) и прочие штуки. Хотя я могу написать цикл for. И хорошо гуглю.

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

Это то, что беспокоит многих junior-разработчиков. Правда в том, что в действительности вам не нужно запоминать всё на ходу. 

Даже технические работодатели не заботятся об этом. Вот мнение технического директора Google:

Tim Dierks: Я всегда говорю кандидатам, что меня не интересует знание того, с чем может помочь IDE.

Вот цитата из другого комментария на Hacker News:

  • Я не просто часто использую Google, я использую его для поиска вещей, которые когда-то сам написал.
  • Не могу сосчитать, сколько раз я использовал Google по вопросам программирования и находил ответы на странице Stack Overflow, которую написал я сам. Если это был настолько старый ответ, что я совершенно о нём забыл, я мог подумать: “ух ты, этот гений пишет совсем как я”, или “да этот идиот вообще не понимает, о чём говорит!” 

Пару месяцев назад я прочитал пост в группе на Facebook от senior-разработчика, упоминавшего, что, когда работодатели спрашивают его, имеет ли он опыт работы с определённой технологией, которого у него нет, то отвечает: “Это просто ещё один инструмент”. Это означает: хоть у меня и не было возможности поработать с этим инструментом в прошлом, я уверен, что смогу изучить его. 

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

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

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

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

Читайте также:


Перевод статьи Fatos Morina: If You Want to Be a Senior Developer, Stop Focusing on Syntax