Язык за 24 часа

При смене языка X на язык Y речь никогда не идёт о смене языка. Всегда под водой огромная часть айсберга.

Синтаксис. Не обсуждается. Ты обязан знать синтаксис назубок. Любой текст на языке Y должен быть тебе понятен, даже если речь про C и победителей IOCCC.
Идиомы. Многие языки позволяют решить коротенькие тактические задачки разными путями. Идиома — принятый устоявшийся путь. Не пишут “for (.. i = i + 1)”, пишут “for (.. i++)”. Писать надо так, как принято. Тем, кто так не делает, напоминают ироничную поговорку “You Can Write FORTRAN in any Language”.
Стиль. Отступы. Имена переменных. Вообще именование. Пробелы. Иное форматирование текста. Для любого распространённого языка есть style guide. Например, PEP 8 — Style Guide for Python Code. Стиль настолько важен, что публикуются и корпоративные guides. Если ты работаешь в ABC, очень рекомендовано писать так, как пишут в ABC. Примером Google JavaScript Style Guide.
Стандартные библиотеки. Синтаксис — 1% языка. В JDK 1.4.2 было 2723 классов. В JDK 8 их уже 4240. Лишь у ArrayList 26 методов. Когда вы решаете задачу, как минимум, вы должны знать, где искать и где вы найдёте нужное что-то: пакет, класс, метод, функцию. Для задач текучки вы должны помнить найденное, а не искать всякий раз.
Популярные библиотеки. Зачастую стандартных библиотек или не хватает, или они плохонькие. В таком случае вы должны знать то, что на самом деле используется. В JDK есть java.net, но все используют Apache HTTP Client. В Python есть urllib2, но все используют Requests.
Стек. Для решения больших задач нужен “технологический стек”. Как “производственная линия” (IDE, инструменты сборки проекта, тестирования, выкатки и т.п.), так и “продуктовый набор”. Скажем, вы хотите поднять небольшой веб-сервис. Один из классических Java-стеков для этого: Apache Tomcat (контейнер), Spring Framework (огромная масса всякой полезной обвязки), Hibernate ORM (упрощение работы с базой).
Парадигма. Китайский и английский — языки. Но знание одного вам мало поможет в изучении другого. Так и в программировании. Smalltalk — чистейший представитель Object-oriented programming, а Haskell — едва ли не эталон Functional programming. Чтобы оптимально использовать язык, вам потребуется переформатировать голову мышлением в нужной парадигме.
Культура. История языка, его вектор развития, сообщества вокруг, философия, причины и нужды, байки и всякое. Знание культуры, нахождение в ней… это помогает разработчику понимать, а не просто что-то делать. Проблемы JavaScript в том, что изначально это язык для беготни по DOM-дереву браузера, а не нормальный язык программирования. Фан Python’а также и в том, что есть PEP 20 — The Zen of Python. А Java долгое время считалась очень медленной (ну а чего вы ждали от JVM конца 90-х?). Нет, C++ — это уже совсем не C с классами (C with Classes), пусть Страуструп и начал так в 1979 году.
Практика. Программист должен писать код. И писать быстро. Всё упомянутое знание должно сесть “на пальцы”, войти под кожу. Если ты несколько секунд размышляешь, вспоминая, какое значение by default у какой-нибудь переменной, попутно листая справочник в поисках синтаксиса конструктора класса… ну, ты пока ещё не пишешь на языке. А всё это появляется только после долгой практики.

Уф. Вот всё это в сумме заставляет скептически смотреть на манящие заголовки книг вроде “Освой самостоятельно C++ за 21 день”. Нет цели “освоить” язык. Есть цель быстро решать на нём большие задачи с production ready качеством. А должный универсальный уровень достигается отнюдь не за месяц и даже не за полугодие. Объём одних лишь основных знаний можно оценить… ну, я вот бегло посчитал по Amazon’у количество страниц для набора “язык + базовый стек”. Что для Java, что для Python получилось по ~4000 страниц. О том, что счёт статей по другим темам идёт на сотни, и говорить не надо.
И это мы ещё подразумеваем, что в фоновых знаниях программиста уже есть всё остальное. Свежий чувак, который обладает хорошим опытом работы с базами, может не обладать опытом REST и потому в задачке на пару часов застрять на сутки, осваивая как саму архитектуру решения, так и всякую мелочь вроде разницы GET и POST.
Разница в изучении языка между junior developer и senior developer — она вот в этом всём. Для junior’а существует только синтаксис, грубо говоря, а для senior’а всё остальное.
Такие они, переходы.

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