Язык программирования не выучить за месяц

Выучить один из основных языков программирования за месяц невозможно. Опытный программист решит поставленную задачу с помощью незнакомого языка в короткие сроки, если задача типовая, а кардинально непривычных конструкций нет. Грубо говоря, любой может за день на любом языке написать “Hello, World!” на любимом языке, но не следует путать это со знанием. В вузе можно некоторое время учиться для галочки по методу “зазубрил, сдал, забыл”, а в резюме при поступлении на первую работу указать “Владею C, C++, Python, Java, Javascript, ASM, PHP, Ruby, SQL” (потратил девять месяцев и стал универсалом), чем позабавить принимающую сторону. В жизни после вуза требования к уровню знаний специалиста другие.

Так после чего можно сказать, что выучил?

Стандарт или RTFISO


Как ни странно, но множество программистов на языке X ни разу не заглядывало в описание стандарта языка X. Да, это сухие, строгие тексты, их бегло не прочитать, над некоторыми абзацами сидишь с час, гоняя тесты на разных интерпретаторах и компиляторах, но никакая книга (впрочем, некоторые книги сами по себе вариант стандарта, K&R и Страуструп тому примеры) или статья не заменит стандарт. Нужна ли здесь запятая? Можно ли сократить эту конструкцию? Чем заменить эту функцию? Какая из RDBMS поддерживает это ключевое слово? Почему этот код ведёт себя по-разному в разных средах? Какой из пяти компиляторов более правильный? Наконец, откуда все эти до мозолей на пальцах спорящие на форумах люди черпают поводы для споров? Ответ один: Read The F ISO / JLS / ECMA / W3C / RFC.

Инструменты I


Очевидно, текст программы надо чем-нибудь обработать, а результат в чём-нибудь запустить. Современные языки поставляются со стопкой разнообразных “родных” инструментов. Одни компилируют, другие исполняют, третьи декомпилируют, четвёртые дарят светлую радость отладки, остальные просто помогают жить. Иногда программист не может даже перечислить эти инструменты, а также описать хоть полезные ключи запуска. Почему у разработчика работает так, а у пользователя эдак? Сколько памяти надо выделить виртуальной машине? Какой уровень оптимизации включить компилятору? Под какую версию языка компилировать? Как собрать документацию к библиотеке? Как выполнить дамп базы? А если дамп на руках, в каком он формате и чем его заливать? Как включить логирование? А выключить? Всё это надо знать.

Библиотеки I


Язык без библиотек бесполезен. Программист без знания библиотек бесполезен ровно так же. Уверен, если будет статистика затрат времени на изучение языка X, окажется, что не менее 3/4 времени уходит не на сам язык, а на то, какие компоненты / функции / пакеты с ним поставляются, и что они позволяют делать. Даже в свежем Go уже свыше ста “родных” пакетов. При этом программист должен добиться понимания того, как и почему работает то, что он использует. Какая реализация I/O быстрее? Почему эту HTTP-библиотеку лучше не использовать? При каком количестве элементов начнёт пробуксовывать этот вариант списка? В какой версии сменили реализацию RFC 1149 и почему начали теряться пакеты? И это надо знать.

Теория


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

Инструменты II


Также программист должен освоить и те инструменты, что создавались сообществом, но не вошли в комплект языка. От утилит сборки до IDE, от простых code formatter’ов до мощных серверов приложений. Что толку от программиста, который знает, что на языке X сложить числа можно таким-то способом, но затрудняется правильно и принятым в культуре X способом организовать код, автоматически проверить, а затем собрать его требуемым образом? Маловато.

Библиотеки II

Помимо “родных” библиотек существуют и важные сторонние. Не умеющий ими пользоваться обречён на создание идентичных (нередко хуже качеством) велосипедов. Как маленьких, так и больших. На слуху framework’и для web-разработки. Java — Spring, Python — Django, Ruby — Ruby on Rails, Javascript — jQuery. Следует учесть, что это отнюдь не маленькие пакетики с парой классов или функций, отнюдь. Сотни, если не тысячи, классов и методов, десятки стандартов, тысячи страниц документации, множество новых понятий и решений. Нет ничего плохого в написании собственного кода, если эта нужда обоснована. Но зачастую во всех смыслах дешевле выбрать уже готовое решение, вот здесь-то метод “язык за месяц” даст сбой, т.к. за это время программист банально не успеет даже познакомиться со всем ассортиментом доступных библиотек.

Чтение


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

Чувство прекрасного


Вокруг основных языков образовалась определённая культура. Если отсечь философию с историей, в остатке умение писать на языке X уместно. Повторяя старую шутку: писать не на FORTRAN’е, но на языке X. Это умение (наряду с пониманием причин) приходит со временем. Надо читать форумы, читать блоги признанных практиков, книги, журналы, общаться с коллегами, изучать чужой исходный код. И через несколько месяцев или лет программист начнёт чувствовать причины, по которым его код был назван некрасивым. Ведь стабильно работает, а почему-то некрасивый. Почему? Никто не смог обосновать, да и как обоснуешь красоту, изящество, гармонию связки язык + остроумное или классическое решение + стиль? За месяц чувство не приходит. Кажется, оно же превращает ремесло в искусство. Сотни забивают гвозди примитивно, но один забьёт так, что хоть сейчас на полотно. В этом и есть разница.

Заключение


Итак, день состоит из 24 часов. Если на сон и остальное уделять 8 часов, для изучения останется 16 часов. Умножаем на 30, получаем 480 часов. Из них следует вычесть неизбежное непонимание, столкновение с багами, поиск и выбор информации, пробы и ошибки, повторное перечитывание документации… Вы всё ещё считаете, что язык можно выучить за месяц и на шляпке гвоздя не будет надписи “Hello, World”?


0 комментариев

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