Эндрю Орам опубликовал в Linux Professional Institute двухчастную статью о том, почему языки программирования взлетают и падают. Он относит C, C++ и JavaScript к бессмертным, Java — к возможным, а COBOL, FORTRAN, BASIC и Perl — к достойно ушедшим на пенсию; Pascal, Objective-C, PL/I, Ada и Tcl называет ложными стартами, Ruby — балансирующим на грани. В конце Орам цитирует Саймона Пейтон Джонса: принятие языка почти не связано с его техническими достоинствами, всё решают социальные и экономические факторы.
Эта цитата — суть. Программирование для людей — одновременно призвание, искусство и работа. Если язык делает хотя бы одну из этих сторон неоправданно трудной, его заменят, как только появится альтернатива.
Как работа пали Pascal и Tcl: Pascal поставлялся без нормального строкового типа, Tcl не дотягивал до больших программ. Как искусство умерли Ada и PL/I: их навязали сверху, приказы не любят. Как призвание погибли Perl — его рынок труда ушел в Python — и Haskell, сознательно избегавший успеха.
Аномалии объяснимы. JavaScript плох как искусство, но остается главным языком браузера. Objective-C был неудобен, но пятнадцать лет процветал как единственный вход в экосистему Apple; Swift появился — и Objective-C испарился. COBOL держится из-за дороговизны замены, но если компании решат этот вопрос, он умрет. Ada живет в нишах, где сертификация делает его почти незаменимым; его трудность — уведомление о выселении.
C++ и Rust, вопреки всему, живы и трудны. Но их трудность — как у скрипки: требует точности и вознаграждает. Люди пишут код-гольф на C++ для спорта и эссе о дне, когда borrow checker наконец щелкнул. А трудность Ada — трение, бюрократия без отдачи. Трудность без возврата смертельна, с возвратом — нет.
Java не так сложна, как C++ или Rust, поэтому ей не нужна такая защита. Она бессмертна от полезности и веселья, а недавние улучшения упаковки и функций вернули в экосистему страсть. Автор признает предвзятость, но Java точно не умирает.
Аналогия с музыкой: сэмплер воспроизведет любой нюанс скрипки, но заставить его это сделать труднее, чем играть на скрипке. Код — компактное описание поведения, прозой дороже. Автор программировал компьютер, чтобы тот играл на гитаре, как он сам, — вышло точно, но не весело. Тому, кому нужны только ноты, сэмплер идеален; тому, кто играет, — нет. Выбор инструмента и есть суть.
Языки не проигрывают бенчмарки. Они теряют людей. Они поднимаются, когда делают призвание, искусство и работу легче, и падают в тот день, когда появляется что-то, способное нести ту же ношу. И тогда остается один вопрос: весело ли это?