Второе издание «Рефакторинга» будет с примерами на JavaScript
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
Мартин Фаулер
Почти 20 лет прошло с момента выхода 1-го издания книги Мартина Фаулера «Рефакторинг. Улучшение существующего кода», которая покорила сердца миллионов программистов по всему миру, изменив навсегда их представление о хорошем коде. И даже спустя столько времени она не потеряла своей актуальности и сегодня. Несмотря на столь почтенный для книги по программированию возраст, ее до сих пор покупают, читают, советуют. И я советую её в том числе.
Сегодня с удивлением узнал, что второе издание будет с примерами кода на JavaScript. Примеры больше не используют Java.
Когда Мартин выбирал язык для примеров, он, в первую очередь, ориентироваля на читателя, задавался вопросом: «Какой язык поможет большинству читателей понять примеры в книге?» Он выбрал Java для первого издания, потому что чувствовал, что большинство людей смогут понять примеры кода, если они будут написаны на Java. Так было в 1997 году, но как насчет 2018 года?
Рассматрев использование одновременно нескольких языков, что подчеркивало бы языковой нейтралитет книги, автор пришёл к выводу, что это будет только запутывать читателя и лучше использовать один язык. Итак, какой из языков программирования наиболее доступен для читателей? Однозначно такой язык должен занимать лидирующие позиции в опросах популярности языков.
Выбор JavaScript был глубоко ироничным для него, как известно многим читателям, он не поклонник JS. Несмотря на врождённую «нуклюжесть» ECMAScript 2015 (ES6) представил довольно хорошую модель класса, что делает многие объектно-ориентированные рефакторинги гораздо проще для объяснения. Но убедительная причина для его выбора вместо Java - это то, что не полностью сосредоточен на классах. Существуют функции высшего порядка, а использование функций первого класса является обычным явлением. Всё это значительно упрощает объяснение рефакторинга.