Pull to refresh
151.32
JUG Ru Group
Конференции для Senior-разработчиков

ООП будущего: Барух Садогурский и Егор Бугаенко о том, как мы будем программировать через 20 лет

Reading time 23 min
Views 56K
Концепция объектно-ориентированного программирования воспринимается разработчиками по-разному: кто-то говорит, что ей уже пора на свалку истории; кто-то кодит и не задумывается о том, что, как и почему он делает; а кто-то пытается работать в «pure OOP» парадигме, переворачивая классические паттерны с ног на голову.

В преддверии Joker 2016 мы попросили Баруха Садогурского обсудить судьбу Java и ООП с Егором Бугаенко. Что из этого получилось, слушайте в аудиоформате или смотрите в видео:



А под катом лежит полная расшифровка интервью со всеми ссылками.

Барух jbaruch Садогурский: Всем привет. Меня зовут Бáрух, я developer advocate в компании JFrog, ведущий подкаста «Разбор Полётов», спикер на конференциях вроде Joker, JPoint, ну и всякой лабуде типа JavaOne, Devoxx и прочего. И сегодня в солнечном Маунтин-Вью мы сидим с известным в определённых кругах Егором Бугаенко, встретились поговорить за жизнь.

Егор yegor256 Бугаенко: За жизнь? А я думал, про ООП, Java…

Барух: Наша жизнь — это и есть ООП, Java. Для начала расскажи о себе для тех, кто не слышал.


Егор: Java-программист, архитектор. Программировать начал лет 20 назад, ещё в школе — вначале это был PASCAL, потом ассемблер, потом C, потом C++, потом Java. Последние два с половиной года веду блог, благодаря которому появилась какая-то известность. Пишу книжки, сейчас пишу второй том. Пытаюсь немного поправить объектно-ориентированные подходы, которые используются в Java. Где-то получается, где-то меньше, но пытаюсь эту идею доносить в массы, благодаря чему эти массы…

Барух: Бурлят!

Егор: Бурлят и реагируют по-разному, да. Кому-то это нравится, кому-то нет, но эффект это производит, до кого-то какие-то мысли доходят. Кто-то против, и я не могу сказать, что сам уверен во всех своих мыслях на текущий момент, но процесс идёт. Да, чем я зарабатываю на жизнь: у меня небольшая распределённая команда в Пало-Альто, порядка 50 человек сейчас, так сказать, работающих, а суммарно человек 100. Мы пишем софт на заказ на Java. Заказчики у нас здесь, в Силиконовой долине, я управляю этими процессами с несколькими проджект-менеджерами. Программисты по разным странам, отовсюду. Вот этим зарабатываю, ну и книжка немножко денег даёт.

Барух: У меня к тебе масса вопросов. Во-первых, задам острый вопрос: откуда ты такой взялся? Ты появился на поверхности русскоязычного Java-комьюнити год назад, вихрем прошёлся по конференциям на постсоветском пространстве, и я так понимаю, что завязал. Что это было, Бэрримор?



Егор: Не завязал, у меня ещё 7 конференций впереди — меня приглашают, я не отказываюсь. Но теперь не так активно. Я выступил за последние полгода на 25 конференциях, немножко многовато.

Барух: Так вот, как так получилось, зачем это тебе надо? Это достаточно тяжёлая работа, я по своему опыту знаю. Программист, архитектор, CTO внезапно решает: «А не провести ли мне полгода, разъезжая по конференциям».

Егор: Хороший вопрос, у меня нет на него ответа. Но в какой-то момент я понял, что хочется расширить аудиторию. Блог меня на это подбил.

Барух: Зачем тебе эта аудитория? На блоге много не заработаешь, на книжке много не заработаешь, я не вижу в этом коммерческого интереса. Может быть, ты таким образом хайришь людей?

Егор: Ты понимаешь, я уже не контролирую этот процесс, я стал заложником процесса, который сам создал. Я завёл блог, появилось комьюнити, люди дают свой фидбэк и начинают меня вытаскивать, чтобы я с ними поговорил. Это двунаправленный процесс. С одной стороны, я хотел выступить на нескольких ключевых конференциях: JPoint в Москве, в Киеве JEEConf, в Белоруссии тот же JET. А другие места появились сами, потому что люди меня стали видеть и говорить «Давай и сюда тоже».

Барух: У меня есть интересная аллегория, она весьма непроста, но попробую. То, что ты делаешь, у меня вызывает религиозные коннотации. У тебя «пророчество» как процесс: ты ходишь по миру, рассказываешь какие-то совершенно «еретические» вещи, люди тебя любят, ненавидят, ты это уже не контролируешь. Это совершенно библейская история. И они обычно плохо кончают, эти пророки!

Но у меня по поводу твоей концепции объектно-ориентированного программирования очень много вопросов, сейчас мы попробуем их как-то последовательно выстроить. Основной вопрос такой: ты пытаешься придать термину «объектно-ориентированное программирование» какое-то значение, которого не только сейчас у него нет, как ты утверждаешь, но и которого, на мой взгляд, никогда не было.

Есть то, что мы называем объектно-ориентированным программированием. Это, как мне кажется, отличается от того, что ты называешь объектно-ориентированным программированием. И возникает вопрос «зачем?» Есть тот путь, который ты считаешь правильным, и у него могут быть плюсы и минусы, как и у любой парадигмы — функциональной, объектно-ориентированной и так далее. Почему ты пытаешься всунуть свой путь именно в нашу знакомую, уютную, обжитую, нишу объектно-ориентированного программирования?

Егор: Почему не создать какую-то новую парадигму, ты спрашиваешь?

Барух: Ну она и есть новая парадигма же. У слов есть свои значения. ООП — это классы, объекты, посылка месседжей объектам с определёнными параметрами для получения обратно какого-то значения. Это полиморфизм, наследование, какие-то вещи, которые мы знаем, любим и так далее. Теперь ты приходишь и говоришь: «Нет, объекто-ориентированное программирование — это не это». Зачем?

Егор: Ну, скорее не «зачем», а «почему». У меня нет ответа на вопрос «зачем?», потому что для этого должна быть какая-то цель, у меня такой чёткой цели нет. Ни денежной, ни какой-то другой. Это вопрос, скорее, «почему?», почему я так делаю. Потому что мне сильно не нравится то, с чем я работал на протяжении многих лет… Мне не нравится ни тот код, который я писал, ни та Java, которую я видел, ни библиотеки, с которыми я сталкивался, мне неприятно с ними работать. Не только мне, а людям, которые вокруг меня, программистам. Я вижу, какой код они пишут, как тяжело этот код потом понимать, поддерживать, как вообще неприятно программировать.


Мне не нравится ни тот код, который я писал, ни та Java, которую я видел, ни библиотеки, с которыми я сталкивался, мне неприятно с ними работать.



Я на конференциях задавал вопрос аудитории: «Вам нравится то, что вы делаете? Вы любите этот код, вы с утра просыпаетесь, смотрите на этот код и хотите его писать, или вы пишете потому, что вам нужно это делать?» Кто-то говорит «Да, нам нравится», но я думаю, многие лукавят. Я помню себя, когда первые три дня или три недели пишешь программу с нуля, и она тебе нравится, а последующие три года ты пишешь её потому, что должен.

Барух: Ну это всё понятно, но это нормальное явление…

Егор: Я думаю, что ненормальное.

Барух: Ну я к тому, что это известное явление, и решение этого тоже неизвестно, например возьми всех, кто сегодня использует функциональное программирование, они говорят «нам не нравится объектно-ориентированное программирование, и мы пошли в другую парадигму потому, что нам было противно от этой вашей Джавы». И они взяли и пошли в другую парадигму.

Егор: Но они и там нагадят. Если они не поняли ООП и просто от него отвернулись, сказали, что оно плохое в целом, всё ООП… Как вот недавно в блоге я собрал цитаты известных людей об объектно-ориентированном программировании. Они все говорят гадости. Начиная с Дейкстры, заканчивая сегодняшним днём. Люди говорят, что это противная концепция в принципе, давайте её не использовать, потому что она помогает создавать «spaghetti code».

Барух: Ну да, они утверждают, что индустрия переросла объектно-ориентированное программирование — так же, как она переросла процедуральное программирование. И тут я опять возвращаюсь к тому же вопросу. Естественный ответ был бы: «ОК, вот новая парадигма, вот «ООП 2.0». А ты говоришь: «Нет, то, что вам не нравится, на самом деле называется по-другому». И вместо того, чтобы предствавить свою новую парадигму (что само по себе непростой путь), ты к этому добавляешь ещё сопротивление того, что люди не понимают, зачем ты пытаешься назвать это чем-то иным.


Весь мейнстрим неправильный, 95% вы делаете неправильно



Егор: Ну чтобы носом их ткнуть. Это такой элемент провокации, который необходим, чтобы люди задумались. Если я им предложу «ООП 2.0», как ты говоришь, ну почитают несколько человек, скажут: «Ну хорошо, ещё одна идея какая-то, отложим её, подумаем. У нас есть Java, она прекрасна, она идёт вперед, она мейнстрим, на ней все пишут, по ней проводятся огромные конференции, на ней огромные фреймворки, всё прекрасно». Есть какая-то другая, новая парадима? Ну хорошо, у него пол-фреймворка, восемь программистов, ну вот пусть они там сидят и копаются. Когда же я прихожу в этот центральный мейнстрим и говорю «Ребята, весь ваш мейнстрим неправильный, 95% вы делаете неправильно», народ начинает шевелиться, ёрзать на стуле и понимает, что ему не предлагают что-то третье (куда он может пойти, а может проигнорировать), а объясняют, что сегодня ты только вредишь всем. Конечно, это вызывает большие эмоции. У меня много мейлов есть, мне люди пишут: «Я понял, что десять лет подряд делал не то, твоя такая-то статья открыла мне глаза, я теперь всё понял, я буду делать так», а другой пишет: «Да заткнись ты, прекращай это рассказывать, мы знаем, что делать». Такая разнополярная реакция говорит о том, что людей это затрагивает, что им это небезразлично, а это хорошо. А если делать что-то стоящее в стороне, это мало кому покажется интересным.

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

Егор: Так получилось. Когда я начинал статьи писать, у меня была первая статья о том, что null reference — это плохо. Она не очень провокационная, потому что многие об этом знают и говорят. Я написал немного более резким тоном: большинство статей говорит о том, что старайтесь его избегать, а я написал, что это в принципе плохо, это evil, не трогайте его. Потом пошёл чуть дальше и написал про геттеры и сеттеры. То есть я не хотел никого провоцировать, я просто писал, исходя из своего опыта. Потом отследил реакцию и понял, что многих людей это цепляет за живое, и они согласны с этим, увидел много фолловеров, не хейтеров. А потом подключились хейтеры. Но я их игнорировал, потому что видел, что кому-то это в кассу, кто-то с этим согласен. Я пошёл немного дальше. Но я не специально, не было такой задачи: давай мы сейчас спровоцируем толпу, увидим, на что у них будет реакция и начнём собирать трафик. Такой цели не было. Я просто написал сначала несколько статей из своего нескольколетнего опыта.



Барух: То есть ты опять же возвращаясь к религиозной тематике, которая меня не отпускает, это какое-то реформаторство. То есть ты делаешь какое-то новое прочтение. И, как в любом реформаторстве, есть люди, которые называют тебя еретиком и хотят сжечь на костре… Есть, наоборот, последователи. И, в общем-то, ты это осиное гнездо палкой расшевелил.

Егор: Причем хейтеры — это в основном люди, которые мало читают, которые мало слышали, слышали звон — ну ты сам это видел на «Разборе полётов» в 109-м выпуске, когда Женя EvgenyBorisov Борисов пришёл и клеймил меня, особо не прочитав ничего. Я всё хочу послать ему книжку. Я бы очень хотел, чтобы он прочитал всё целиком и собрал всё в кучу, ты же читал книжку, ты понимаешь это. А он прочитал что-то, услышал: «А, он говорит, что вот это плохо и это плохо, да он дурак».

И большинство негативных реакций именно такое. Люди узнали что-то по пол-слова и сформировали мнение. Это не сбивает меня, потому что есть люди, которые согласны. Если бы были все несогласны, я бы сильно задумался, не зря ли провоцирую толпу. А так сделали недавно на Gitter-чат, там набралось за полтора месяца 120 человек, и люди обсуждают, часто уже в стороне от меня. Часто бывает идея какая-то, один спрашивает: «Как бы вы это сделали?», а другие ему отвечают: «Мы бы сделали это так» и дают ссылки на мой блог. Это очень прикольно наблюдать, когда мысли уже не мои, они уже там живут, люди этим пользуются. Это приятно. Хотя есть в этом же чатике хейтеры, мы систематически стараемся тушить, а они поднимают флейм. И там часто задают этот твой вопрос: «Зачем ты меняешь ООП, у нас всё хорошо, у нас есть Java… Ну назови это по-своему и отстань от нас».

Барух: На мой взгляд, в этом есть такая проблема: быть реформистом и пророком обычно плохо для бизнеса. Потому что деньги любят тишину. И у меня вопрос такой: как это отражается, например, на твоём процессе набора на работу?


Когда клиент приходит и слышит, что мы делаем что-то сильно иначе, то у него возникает вопрос «а не ошибаются ли они».



Егор: Да, ты прав совершенно, это плохо отражается на бизнесе. Во-первых, с приёмом на работу проблема, во-вторых, с поиском клиентов. Когда клиент приходит и слышит, что мы делаем что-то сильно иначе, чем другие, то возникает вопрос «а не ошибаются ли они». Мы вам всё закажем, а через полгода будем искать новую команду, которая всё это выбросит, потому что понимает только эта. Это есть. С набором на работу тоже проблема — хотя есть люди, которые очень хотят именно к нам, пока таких немного. Но мне интереснее не быть ещё одной компанией в большом ряду других, а быть компанией, которая делает что-то иначе и лучше. Может, я ошибаюсь.

Барух: Женя Борисов просил узнать, насколько часто бывает, что на интервью ты даёшь претенденту тестовое задание, показываешь кусок кода, а он переворачивает стол и говорит «что это за херня, я не буду это писать».

Егор: Я слышал тоже, как Женя Борисов сказал в каком-то «Разборе полётов», что у него в Израиле была знакомая команда, где люди делали что-то по-своему, и все остальные компании банили людей из этой команды. То есть, если ты приходишь из той компании, то всё, никаких интервью, потому что у тебя мозг сломан и ты пишешь по-другому. Я понимаю, у нас тоже есть такая штука. Мы когда принимаем Java-программистов на работу, мы часто даём кусок кода на Java, который, на мой взгляд, написан с большим количеством ошибок. И просим показать ошибки. Что бы вы исправили? И многим этот кусок кода кажется правильным, а там сеттеры, геттеры, null… Всё, про что я выступаю, там представлено. И те, кто не обращает на это внимания, просто рефакторит и считает, что всё нормально. Мы таких людей отклоняем. Но есть люди, их не так много, но и немало, которые находят и говорят: «Да вот тут у вас эти сеттеры, геттеры — это что за фигня, это ерунда… надо переписать по-другому». Вот таких людей мы сразу: оп, заходи. И они находятся, в месяц одного-двух неплохих ребят имеем.

Барух: Это хороший темп.

Егор: Мы не спешим, мы же не строим сейчас команду из тысячи человек. У нас на данный момент такой задачи нет. Но ситуация, мне кажется, на рынке меняется. Меня слышат, не так много людей, но кто-то слышит. Я думаю, что изменения пойдут не через мою компанию, не через коммерческие. А люди на местах у себя начнут менять. Мне написал человек несколько недель назад, что прочитал мою книжку, она ему очень понравилась, потом он показал из нее куски своим коллегам, и теперь с ним не дружат. Но он же пошёл и показал, значит, какой-то эффект пошёл, не я это рассказал, а он пошёл. Это прикольно.

Барух: Антропологический интерес в этом всём я понимаю. Раз уж всплывает книжка, давай немножко поговорим про книжку. Это началось, как блог, который ты решил подбить вместе в какую-то подборку…

Егор: Не, сначала я писал в блог чуть больше года, а потом со мной связалось издательство Manning. И они предложили написать книжку: ты напиши, мы опубликуем. Сначала я сказал «нет», потому что был занят, потом через полгода решил всё-таки написать. Сел прошлым летом и за два месяца её написал. Это было несложно, потому что материал из блога. Сейчас я пишу второй том, и это тяжелее: про некоторые темы никогда раньше не писал, и нет реакции людей. Когда писал первый том, знал реакцию читателей, у меня была куча комментов. С Manning потом не сложилось, и я опубликовал книгу сам. Желания изначально писать книжку у меня не было, но когда издательство предложило, я задумался.

Барух: Твоя концепция развивается, в ней есть противоречивые моменты, это какой-то ментальный work in progress, когда картинка ещё не полностью сложилась. Что требует какого-то переосмысления того, что было написано. Вот этот второй том является переосмыслением первого, или ты первый откладываешь и говоришь «что было, то было»?

Егор: Нет, я первый не трогаю, я во втором делаю ссылки на него: «вот я говорил это, а теперь я говорю немножко другое…»

Барух: Вот это я ищу: где будет написано, что ты был неправ?


immutability сейчас очень активно обсуждается в нашем чате и не можем до конца понять, что такое immutable object...



Егор: Ну у меня это бывает. Я пишу, что я был неправ, уточняю что-то. Допустим, immutability сейчас очень активно обсуждается в нашем чате и не можем до конца понять, что такое immutable object… И это обсуждение очень живое, у меня есть в блоге четыре штуки, и в книжке целая глава про … Если всё это сложить, то там есть вещи, которые друг другу противоречат. Но я открыт этому, нет проблем сказать, что я был неправ.

Барух: Сказать «я был неправ» в теоретических размышлениях — почётно, круто, но легко. Возвращаясь к бизнесу: что делать с кодом, который ушел в продакшн, и ты сейчас понимаешь, что там ой…

Егор: Вопрос хороший. Но даже если там были какие-то ошибки, они не такие серьёзные. Там нет таких фундаментальных ошибок, которые нужно было бы переписать целиком. Есть какие-то моменты, которые чуть-чуть левее, чуть-чуть правее, но в целом нет. И концепция — я не сказал бы «стройная», но складывается одно с другим. Я не просто пишу об идеях, я еще и код пишу также. И есть некоторые продукты, которым три года, два года, один год. Можно их просмотреть и увидеть, что в продуктах, которым три года, два года, масса вещей, до которых я дошел вот недавно, не было. Сеттеров не было, но в некоторых местах есть и null pointer, и ORM используется где-то. То есть некоторые вещи можно открыть в опенсорсе и увидеть, что теоретическая мысль была там ещё в зачатке. А более свежие продукты более интересные, в них уже используется вся красота ООП.

Барух: Ну вот это интересное раскрытие информации о том, что на самом деле концепция ООП от Егора — она work in progress. Я не уверен, что многие, кто с твоей концепцией познакомился, это понимают. В основном из-за книжки. Потому что обычно, когда человек пишет книжку, поскольку оно на бумаге и автор не может добавить апдейт «вот тут мне написали в комментах, что я был неправ», оно как-то воспринимается законченным. Immutable, так сказать. Мне кажется, многие люди не в курсе, что это всё живёт, развивается, течёт. И на самом деле ты готов не только слушать, но и принимать критику, и она действительно может как-то изменять концепцию.


Класс — это вообще ошибка. Не должно быть классов.



Егор: Приведу пример. Ну вот например в книжке у меня написано, что класс — это определенная концепция, которая нужна и важна. Я разговораривал с Дэвидом Уэстом. И он мне говорил, что класс — это вообще ошибка. Не должно быть классов. Я думаю, я пока не уверен, прав он или что он имеет в виду.

Барух: Концепция, что класс — это ошибка, это из JavaScript. Объектно-ориентированное программирование через prototype. И есть очень серьёзный диспут на очень высоком уровне, который уже продолжается двадцать лет, о том, нужен класс или нет. И есть доводы за и против. Довод за: в объектно-ориентированном программировании класс — это действительно совершенно лишняя сущность. Она не добавляет ничего. Ты создаёшь объект, как его считаешь нужно создать, и потом создаёшь ещё сколько-то таких же. Но тут, с другой стороны, есть масса проблем типа immutability: объект может измениться, что происходит с теми, кто создан до этого? Должны ли они измениться, должны соответствовать новому или старому? И почему вроде одинаковые объекты, созданные с разницей в несколько строк кода ведут себя по разному? Потому что в каком-то другом месте изменился prototype. Ну, приехали, классно теперь. Вот эта концепция blueprint как класса, из которого ты клепаешь объекты, этот вопрос решает, потому что класс — это что-то неизменяемое, а объекты от него потом отпочкуются и живут своей жизнью. А с прототипами это не так понятно. Поэтому тут безусловно есть, о чем подумать.

Егор: Есть, да. И что, если я поменяю свое мнение?

Барух: Ну, если ты ещё и от классов откажешься, то это вообще будет армагеддон.

Егор: Я пока не отказываюсь от них, но Дэвид сказал мне: «Кто это вообще придумал, зачем они нужны?»

Барух: А вот теперь скажи мне, давай возьмём такую гипотетическую ситуацию, что ты действительно решил отказаться от классов и наследования. Ты — человек, который мёртвой хваткой вцепился в Java (надо понять, почему, сейчас мы об этом тоже поговорим), но гнуть Java под свой ООП можно только до определённой степени.

Егор: Да.

Барух: Что ты будешь делать, если ты решишь, что класс — враждебная ООП структура?

Егор: Я надеюсь, что я так не решу, хотя… Понимаешь, у меня есть некоторые статьи, где сказано «как плохо делать вот это», но не предложено никакой альтернативы Java, я так их и заканчиваю: если Java улучшится, и это будет какой-то новый язык, тогда мы сможем делать то-то и то-то.


я предлагаю управление памятью: говорю, что диски и память должны быть чем-то одним. Мы же даём программисту в Java управлять файлом на диске — открыли, закрыли. Почему то же самое нельзя делать с памятью?



Например, я предлагаю управление памятью: говорю, что диски и память должны быть чем-то одним. Мы же даём программисту в Java управлять файлом на диске — открыли, закрыли. Почему то же самое нельзя делать с памятью? Вот такой концептуальный вопрос. Java этого не даёт, а мне кажется, что правильный язык должен давать возможность управлять памятью. Как в C/C++, но в каком-то удобном виде. Но Java я не поменяю.

Барух: Это подводит меня к следующему вопросу: почему ты мёртвой хваткой вцепился в Java? Ты уже пришёл к выводу, что истинного ООП-языка не существует. У нас есть платформа JVM, позволяющая относительно малой кровью написать любой синтаксис языка, в котором будут все карточные игры и все девушки лёгкого поведения истинного ООП, которые ты только захочешь. Тебе не приходило в голову такое?

Егор: Это большая работа, и пока у меня нет большого количества фолловеров, коммьюнити, она ни к чему не приведёт. Должна быть большая группа людей, иначе это будет мёртвый язык. Есть какие-то люди, которые были бы не против помочь, но это большая работа, я к ней пока не готов. У меня есть очень старая статья, ей года четыре, где я просуммировал все фичи, которые хотел бы иметь в правильном языке. Так вот, мне кажется, что он должен совмещать язык и платформу разработки. Приведу пример. Почему из кода мы не можем получить доступ к Git-истории? Я могу получить в комментариях то, какой у меня хэштег в этом файле, ну и всё.

Барух: Я, наверное, тебе отвечу, что это отличная библиотека, но не обязательно функция языка. Существует подход, что в принципе языки должны быть минимализированы, а всё остальное подключается с помощью необходимых библиотек. И тебе есть дело до истории твоих коммитов в Git’е, а мне нет, например. Тебе нужна эта фича — ты подключаешь библиотеку, и она у тебя есть.

Егор: А её невозможно сделать как библиотеку, она должна быть в языке.

Барух: Вот это интересный вопрос. Почему?


Потому что эта библиотека будет выглядеть криво, как AOP в Java, приклеена сбоку, как AspectJ



Егор: Потому что эта библиотека будет выглядеть криво, как AOP в Java, приклеена сбоку, как AspectJ. Прикольная идея, классная, но нет её поддержки в языке. Есть аннотации, которые появились позже. В четвёртой Java вообще не было никакой поддержки AOP, и всё это было налеплено через неродные технологии. Поскольку они неродные, всё неудобно, некрасиво. Java, или любой язык, должен давать AOP by definition, он должен быть by default, встроен в язык. И так же доступ к Git. Это история наша — кто коммитит, сколько коммитит — это уже часть языка.

Барух: Но сегодня это Git, а завтра — Mercurial.

Егор: Это проблема, да.

Барух: И эта проблема решается библиотекой. Сегодня подключил библиотеку для того, завтра для другого.

Егор: Я согласен, возможно, нужна какая-то комбинация «язык + библиотека». Нужна возможность, используя язык, получить доступ.

Барух: С тем, что для языка может быть полезно бóльшее количество SPI я, возможно, соглашусь.

Егор: Вот штук 40 таких фич, которые должны появиться. Допустим, Continuous Integration. Она совершенно никак не приклеена к языку. Или build automation. У нас есть все эти мавены и грейдлы, которые к Java никакого отношения нативно не имеют. Сам код на Java не знает, что его будут билдить. Я внутри кода не могу получить доступ к этой информации. Или, допустим, юнит-тесты. Они существуют на Java как просто класс, но какие это классы? Какие это объекты? У меня есть объект book, что такое объект bookTest? Это странно. И эти методы — это не методы, это процедуры в чистом виде, микроскрипты. Оно должно быть сделано как-то иначе. Сделано так, потому что тесты сделали после Java. Нужны вам юнит-тесты — ну вот так лепите. Это не нативно, не клеится одно к другому. Этим пользуются, но должны быть более удобные средства внутри языка. Я думаю, что мы к этому идём. Такие plain языки типа C, где просто можете скомпилировать бинарник — это двадцатилетней давности, а сейчас нужно что-то новое.

Барух: Это Java двадцатилетней давности, а C уже сорокапятилетней.

Егор: Тем более, должно быть что-то новое. Я думаю, появится. Может быть, я что-то создам, не знаю. Это требует времени и, главное, должно быть коммьюнити. Создавая под себя, получу чисто моё решение. Вот ты говоришь «не Git, а что-то другое», а мне такое и в голову не придёт, для меня Git стандарт фе-факто. Ты скажешь «у нас целая команда на Mercurial или Subversion», а у меня уже не лепится, целый кусок рынка моё решение не будет поддерживать. Тут должно быть гетерогенное коммьюнити, где разные люди.

Барух: Скажи, а что ты думаешь о новых языках? Два примера — Kotlin и, может быть, Ceylon, если ты на него смотрел.

Егор: Ceylon мало смотрел, Kotlin — был на презентациях на конференциях. Я тут не могу быть экспертом, но, к сожалению, мне кажется, что общее направление в индустрии не в сторону чистого ООП, а, наоборот, в сторону его коммодизации. Вам нужны геттеры и сеттеры — так вот они by definition. В Котлине вам не нужно их писать, они там есть! Язык придуман и развивается как design pattern — люди накодили, а потом другие приходили и говорили «это назовём синглтоном, а это вот так». А должно быть с обратной стороны, должны люди приходить и говорить «давайте использовать такой design pattern, такое решение». И потом все практики за ними должны идти. А мы идём от практики к теории.


Java EE, практически покойный по сравнению с технологией, которая рождается из best practices, по сравнению со Spring.



Барух: Ты предлагаешь башню из слоновой кости. У нас в Java коммьюнити такая есть. И она на наших глазах рассыпается. Я говорю про Java EE, практически покойный по сравнению с технологией, которая рождается из best practices, по сравнению со Spring. Смотри: Java EE развивался как раз так, как ты считаешь правильным. Сидели умные пацаны, которые думали, какие best practices должны быть, назвали их официальным стандартом. Более того, этот стандарт продвигался самым сильным на рынке Java-игроком — самим Sun, а потом Oracle, у тебя есть стандарт from the source, что может быть лучше. И вот.

Егор: Я согласен. Значит, плохие теоретики, инженеры. И они должны работать в связке, теоретики должны смотреть на практиков. Но потом не описывать увиденное, как Kotlin. Не хочу сказать конкретно про Kotlin, но выглядит так: посмотрели на то, что люди делают, и увидели, что все делают геттеры и сеттеру, давайте людям упростим жизнь. Я предлагаю наоборот: давайте людям усложним жизнь там, где они делают что-то неправильно, чтобы они перестали делать геттеры и сеттеры. А большинство языков программирования создаётся в битве за популярность. Они понимают, что если дать людям не 4 инструмента, а 14, упрощающих то, что и так делают, то их станут использовать с большим интересом.


У Kotlin и им подобных направление, по-моему, неправильное. Практика должна идти с теорией, и теория должна корректировать практику.



Как Ruby. Язык вроде создавался правильно, но там такое огромное количество статики, такое огромное количество процедур, что весь язык… Язык хороший, но с библиотеками выглядит как какая-то каша. Им очень тяжело пользоваться, по крайней мере, мне. Я пишу на Ruby, но это какой-то кошмар, Java лучше. У Kotlin и им подобных направление, по-моему, неправильное. Практика должна идти с теорией, и теория должна корректировать практику.

Барух: То есть ты считаешь, что за языком должны стоять какие-то визионеры.

Егор: Конечно. Должны говорить «Ребята, вы идёте немножко не туда, теперь пойдём туда». А не «Все идут туда, побежим вперёд и встанем с флагом». К чему это приведёт? Это временные языки, они умрут через несколько лет.

Барух: Давай я попытаюсь быть адвокатом дьявола и скажу, что цель индустрии программирования, в которой мы с тобой находимся — не писать идеальный код. Цель — это приносить деньги благодаря тому, чтобы выкатывать продукты на рынок раньше и эффективнее их поддерживать. Соответственно, если ты меня спросишь, что лучше — взять сто моих программистов и переучить их на какой-то визионерский новый паттерн с идеально чистыми помыслами, или взять решение, уже зарекомендовавшее себя на рынке, с известной скоростью разработки, с известными слабыми местами, и усилить их, то второе окажется эффективнее, чем искать новую дорожку и в конце, возможно, упереться в стенку.

Егор: Они не пойдут по новой дорожке, даже если ты им предложишь. Безусловно, то, что ты говоришь, имеет смысл. Никто не пойдёт по новой, потому что никто платить за это не будет.



Барух: Почему Java унаследовала столько болезней C? Потому что должно было быть похоже, чтобы программисты могли это взять и начать фигачить код.

Егор: Именно. Но я не пытаюсь изменить ситуацию с сегодняшнего дня, чтобы мы с завтра стали писать иначе. Я пытаюсь менять на шаг вперёд, через год, два. Если сейчас мы начнём в головы программистам вставлять идею о том, что геттеры и сеттеры — плохая идея, то через три-четыре года, когда эти люди, которые сейчас учатся, начнут создавать свои фреймворки и улучшать что-то, учтут эти мысли.


Когда я читаю твою книжку, это геометрия Лобачевского. У меня начинают пересекаться параллельные линии.



Барух: Вот тут у меня есть для тебя интересная рефлексия. Вот то, что ты пытаешься сделать, и эти твои блог-посты, каждый поодиночке, преследуют эту цель. Ты объяснил, почему null — это плохо, что должно быть N параметров в методе, почему в конструкторе нельзя писать бизнес-логику. Каждый из этих ходов, наверное, немножко улучшает сегодняшнего Java-программиста. А потом я беру твою книжку, и, как я написал в ревью, я вижу совершенно другую, новую концепцию, по сравнению с сегодняшней Джавой. По совокупности всего вместе взятого. Когда я читаю один пост, могу немножко улучшить свой код, оставив всё остальное так же. Когда я читаю твою книжку, это геометрия Лобачевского. У меня начинают пересекаться параллельные линии. Это невозможно сочетать с тем, что я делаю сейчас. Или делаешь так, или по-другому. И твой код — он тоже совершенно другой. Он не постепенное изменение существующего. Когда я смотрю на твой код и сравниваю с моим, решающим те же задачи, это не просто «у тебя нет null, а у меня есть». Твой код вообще ничем не похож на мой, кроме скобочек и точек с запятой. И тут у меня получается некоторый диссонанс с твоей идеей инкрементальных изменений.

Егор: Понимаю, о чём ты говоришь. Но я не добьюсь результата мягкими действиями. В блоге я в рамках одной статьи вбрасываю, человек читает, немножко меняется. Книжка делает бросок далеко вперёд. Она говорит «Вы здесь, а правильно — вот там, через 20 километров. Как вы туда доберётесь, я не знаю». Как в анекдоте: «Моё дело — стратегия, а с тактикой вы сами решайте». А блог даёт какие-то шаги — тут немножко так, тут так. Книжка забрасывает далеко вперёд и писалась с такой задачей, не на один год — как вброс в будущее. Ну и она должна быть резкой. Тяжело человека сдвинуть. Масса была статей про null и про геттеры-сеттеры. Ты можешь погуглить, не один я это пишу. Почему мои вызывают такой флейм, у меня про геттеры-сеттеры триста комментов за полгода, а у уважаемого Аллена Холуба за десять лет пару комментов? Потому что он говорит мягче. Он говорит «Старайтесь держаться от них подальше, не использовать их». А я говорю «Если ты используешь их, то ты дурак». Естественно, это вызывает реакцию и побуждает к изменениям.

Барух: Ты сейчас ставишь две противоречивых цели. С одной стороны, ты говоришь об инкрементальном изменении людей, а с другой, про бросок на 20 километров… Вот смотри — Мой личный фидбэк — я прочитал, насладился мысленным экспериментом и забыл, потому что так писать сейчас я точно не буду. Мне очень понравилось, было очень интересно, я размял мозги, но что я приду на работу и начну писать так, не возникло мысли ни разу — в отличие от того, как я прочитал твой пост про null’ы и подумал «надо мне вот этого постараться поменьше теперь делать». Потому что я работаю в команде, мой код должны читать, и если я сейчас закоммичу в Git код «Yegor Style», то после code review мне нечем будет кормить семью. А если я уберу null’ы, меня только похвалят. И тут у тебя, насколько я вижу, есть конфликт этих двух целей — что-то реальное, что можно сделать завтра, и концепция, из которой нельзя ничего сделать завтра, если только не занимаешься опенсорсом себе в удовольствие.

Егор: Это твоя позиция, а вот, например, Антон antonarhipov Архипов написал в ревью, что задумался над тем, как его собственный код исправить.

Барух: Ха, ну ты привел пример, «код Антона Архипова»! Антон на данный момент — ведущий продакт-менеджер в ZeroTurnaround, и он не пишет код в продукт. Он не штатный программист. Он пишет много кода в опенсорсе, он делает кодревью, но это не тот человек, который пришел, надел наушники, хряпнул кофе, и до вечера у него восемь часов портянки кода выходят, который потом нужно тестировать, интегрейтить, ревьюить, поддерживать…

Егор: Ты вроде тоже не такой.

Барух: Я тоже не такой, но я ставлю себя на место программистов в команде, и я понимаю, что нет, я это никогда этого не сделаю. То, что я прочитал в книжке, это не просто прикольно, это супер-круто, причём, как по мне, самое крутое — это настолько непохоже на всё, что мы делаем и, тем не менее, имеет смысл. Но я почитал, я закрыл и меня это конечно обогатило, но ничего такого, что завтра я могу пойти и написать там нет, потому что книжка намекает, что это одна концепция, что это всё должно работать вместе, в отличие от разрозненных блог-постов. В этом есть прелесть, потому что ты построил общую концепцию, и в этом есть недостаток, потому что я не чувствую себя вправе взять один кусок, и проигнорировать остальное, я таким образом нарушаю концепцию, это неправильно! В блоге у тебя всё это отдельно, я захотел — согласился с null’ами, захотел — не согласился с сеттером. Книжка — это концепция. С концепцией я или соглашаюсь целиком, или нет.



Егор: Согласен, есть такая проблема. Но в блоге всё разрозненно, и были люди, которые говорили прямо противоположные вещи: ты вот нам рассказываешь про здесь какой-то кусок, здесь какой-то, а оно всё куда-то сведётся у тебя воедино? Что ты вообще думаешь про ООП, как должен вообще выглядеть объект, ты можешь хоть раз написать целый код? То есть люди искали какой-то целостности. Поэтому книжка суммирует.

Барух: В целостности есть безусловный плюс — из книжки мы понимаем, что такое «ООП от Егора». Но возвращаясь к твоей цели изменить разработчиков one step at a time — оно не там. И может быть нужно и то, и другое. И кажется в процессе этой беседы у меня появилось некоторое понимание, что для установления твоей credibility нужно, чтобы с одной стороны, люди узнали, что у человека есть концепция, книжку, в конце-концов написал, не проходимец, а с другой стороны, вот практические шаги, которые можно предпринять сейчас, если конкретно эти шаги вам подходят и нравятся… Вот тебе совет: берёшь эту книжку, которая концепция, и в конце каждого параграфа у тебя будет что-то типа: «Ребята, я понимаю, что у вас сейчас взорвётся мозг, и я понимаю, что вы не сможете это использовать завтра, а вот это вот, то что будет написано дальше — вот это сможете применить в коде без опасности быть убитым стулом на код ревью». Не просто ссылка на блог, а сформулированый practical advice на основе прочитанной главы. И тогда получается некоторая комбинация и целостной картины, и каких-то маленьких шагов, которые можно предпринять сегодня.

Егор: Это хорошая мысль, может быть, действительно так сделаю.

Барух: И вот тогда это, наверное, сводит две противоположные концепции.

Егор: Я согласен, я попробую это сделать. Может быть, не прямо в книжке, но мысль хорошая. У меня было много комментов к книжке, люди говорят «мало практических примеров про то, как нам жить». Ты вот взял и показал нам два класса, это интересно, но у нас класс на две тысячи строк, как шестнадцать строчек твоего класса перенести на наши огромные портянки кода. Есть такой concern.

Барух: Мне было бы интересно видеть не только второй том, но и второй revision первого. Какие будут сделаны выводы из первого тома, как это будет представлено. Вот эти практические советы — это то, чего мне очень не хватало в книжке: для меня она была абстрактным конём в вакууме и абсолютно мысленным экспериментом. И увидеть, как revision этой книжки изменит именно это, было бы интересно.

Егор: Буду работать.

Барух: Что ещё мы не обсудили? Какие планы на будущее?

Егор: Я буду на Java Day в Киеве, там будут два моих доклада, не касающиеся моей книжки, не касающиеся ООП, и discussion board как раз про ООП с вышеупомянутым Женей Борисовым. Я думаю, этой дискуссии многие ждут. На JPoint’е получилось что-то спонтанное, но была реакция достаточно агрессивная, и я был недостаточно подготовлен.

Барух: Вот да, это правильно, доклады по «твоему ООП» и по книжке должны быть дискуссионными, круглыми столами. Я очень рад, что в Киеве как раз такой формат выбрали.

Егор: Так в любом докладе они начинают со мной дискутировать на четвёртой минуте доклада!

Барух: Вооот. А тут у тебя как раз и будет «пять слайдов, а теперь давайте рубиться». И всё будет культурно, модераторы микрофоны носят, а не зоопарк.


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



Егор: Мне ещё сложно презентовать на конференциях, потому что, когда читаешь всю книжку, то всё складно, а когда начинаешь кусок какой-то выдавать, то у меня не всегда хорошо получается. Перед тем, как научить чему-то, нужно научить чему-то ещё. Я пытаюсь рассказать про ORM, но для этого нужно рассказать вот это и вот это, а времени нет. Люди не понимают фундаментальных вещей, а без этого сложно что-то строить. Поэтому я не точно знаю аудиторию, насколько они готовы. Неплохой у меня доклад был, единственный, которым я был доволен — это было на Java Day в Минске, где я рассказывал про ООП в целом и приводил примеры. В нём было всё гладко, и вопросы были в тему, но это был последний мой доклад того турне. Когда говорю про практические вещи, про ORM, это беда уже.

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

Егор: Ещё у меня будет выступление на конференции Oredev в Швеции. Посмотрим, что Европа скажет, у меня ещё не было такого опыта. Я попытаюсь подготовиться, это будет та же тема, что и на JPoint’е, но я попытаюсь ёе сделать в формате дискуссии или короче. Но ты знаешь, европейская публика более пассивная, чем наша.

Барух: Северная Европа — тем более. В Швеции у тебя будет всё очень спокойно.

Егор: У нас прямо шквал вопросов, так и должно быть, да?

Барух: Конечно.

Егор: Для меня это было открытие. Ну и пишу второй том, не знаю, когда его закончу, но до нового года он точно выйдет. Там будет про ORM много, там будет про MVC — точнее, против них. Там будет про аннотации, про монады, про именование переменных и ещё про что-то. По главам пишу, сейчас ORM заканчиваю.

Барух: Спасибо огромное, увидимся.
Tags:
Hubs:
+48
Comments 331
Comments Comments 331

Articles

Information

Website
jugru.org
Registered
Founded
Employees
51–100 employees
Location
Россия
Representative
Алексей Федоров