LINUX.ORG.RU

Напутствие в трудной жизни.

 


9

3

Дисклеймер. Этот пост всесторонне вдохновлен каким-то древним видео в интернете, автора которого я благополучно забыл. Если автор сейчас читает это - респект тебе и увага, бро!

Итак.

Помойму программисты сильно перегибают палку.

Засрали всю джаву мусором.

Хотите вы бин, и что-то в нем хранить тупо, сделайте все поля public! Вместо лесов геттеров-сеттеров.

Боитесь, что такой класс (с пабликами) будет не thread-safe и хомяки не смогут писать с ним хороший многопоточный код? Да побойтесь б-га, хомяки вообще не напишут хорошего многопоточного кода, всё это миф. Дайте среднестатистическому человеку треды и локи, и он напишет код в миллион раз более медленный, чем аналогичный на готовом TransferQueue. Вот и пишите свой продюсер-консумер на TransferQueue, не выпендривайтесь.

ООП, и конкретно механизм наследования, очень плохо подходит для увеличения реюзабельности кода. Глупому заказчику можно втирать рекламу ООП=реюзабельность, но мы тут все грамотные люди, линуксоиды, как минимум с 8 классами образования, мы же все понимаем как оно на самом деле. Трейты/миксины и препроцессор и то с этим лучше справляются иногда.

Но сидят сумрачные гении, и ночами напролет пишут какие-то иерархии классов, чтобы одну строчку копипасты сэкономить. Всё это фигня! В такой надуманной иерархии классов еще сложней разобраться, чем отрефакторить копипасту. И уж точно ее сложнее модифицировать. Мой совет: копипастите смело и открыто! Если коллеги будут придираться, спокойным голосом, глядя на правое ухо поциента, говорите: «вот сам и поправь», 90% что коллега посинеет от страха и сдрыснет в ужасе, в остальные 10% можно утешаться тем, что эту лажу писать пришлось хотя бы не тебе.

Никто не заставляет писать Factory которые производят Factory, которые производят Factory! Хочешь посмотреть, откуда берется объект, а там целый стектрейс на 50 этажей, можно блуждать пока не умрешь от голоду. Хотите сделать объект - ставите new и поехали. Сразу понятно - вот тут делается объект. Фактори нужно изничтожать безбожно (только если это не Spring, Spring надо пожалеть).

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

Никаких фреймворков! Ехал фреймворк через фреймворк, и все - говно. Каждый день кто-то еще производит новый фреймворк. Потом набигают ПМы-хипстеры и такие, а что у нас популярно? Ахххаха, гороскоп показывает, что в эту фазу луны популярен Wicket, давайте нафигачим на нем гуй для Международной Космической Станции. Потом где-то там эта чушка не распарсила XML, свалилась в корку обосравшись стектрейсами, и все космонавты сварились. Отлично! Зато фреймворк!

Особенно радуют люди, которые боятся эти фреймворки чинить. Ололо, всё работает через задницу, но трогать не будем. Потому что - потом поддерживать же свой «форк» надо! Лучше нагородим еще костылей вокруг кривого фреймворка! Мотивируется это тем, что «на дальней дистанции» хомякам проще будет писать костыли, чем фиксить фреймворк. Но это ложь, через пару лет развития проекта уже совсем в этих костылях не разобраться. Совет тут такой: не использовать фреймворков, а если использовать - то понимать как они работают, и чистой душой фиксить их, а коммиты стараться засылать в апстрим.

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

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

Самая жуть, это всякие ынтерпрайзные сервера, портлеты, фигеты, шушпанчики. Вот притащил ты себе в проект WebLogic или еще какой-нибудь архитектурно-окаменевший кусок, и что изменилось? Кстати, вы видели чтобы на одном реальном хайлоадном сервере запускалось больше одного приложения? Обычно бывает как раз наоборот - на куче серверов запускается ОДНО приложение! А сколько бед от этой псевдофункциональности по огранизации шаред хостинга! Что ынтерпрайзные сервера лучше делают, чем Jetty запущенная прямо из функции main? Собственно в этом и совет, запускайте джетти откуда-нибудь руками, или из мавена, и не парьте мозг.

Надо писать так, чтобы код отражал СУТЬ. Чтобы деплой отражал СМЫСЛ. Посмотрел на код - и сразу понятно, что там написано. Запустил сервер - и сразу понятно, что и как он обслуживает, где скачать его исходники и пофиксить, если чо.

Если вы последовали перечисленным советам, но вас никто не понимает, скажите что stevejobs с лора разрешил.

В общем, идея понятна, теперь можно приступать к критике :)

Привет.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 2)

Ответ на: комментарий от lazy_aleks

Я ничего не придумываю. Человек предложил сделать простую задачку на двух языках, написал свою реализацию, но джависты так ничего и не предложили взамен, хотя продолжают писать, что дотнет уг, тормоз, линк тормозной, а шарп говно.

Давай нормальную задачу, которую можно написать быстро, я напишу. Посчитать теги <abc> например. Вникать в сложные детали чьей-то частной задачи, разбираться, что нам на C# написано, чтобы кому-то что-то доказать на лоре, естественно никому не интересно.

Legioner ★★★★★
()
Ответ на: комментарий от lazy_aleks

Пока запустишь сервер приложений

а ты его не запускай. Ну да, понаписали говна. Не хочешь - не ешь. В том-то и соль, что в джаве все свободны писать так, как им удобно, а не как Дядя сказал.

пока раскопаешь тонны конфигурационных хмл

а вот тут позволь не согласиться. В конфигурационных XML пишется настраиваемая конфигурация. Если у тебя их нету, значит всё гвоздями прибито.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

В том-то и соль, что в джаве все свободны писать так, как им удобно, а не как Дядя сказал.

вот ты приходишь работать к дядьке или тебе достался проект, а там вебсфера, ты такой «усе поцоны умываю ручки, я свободен писать так как мне удобно, а с этим говном я работать не буду» ?

umren ★★★★★
()
Ответ на: комментарий от anonymous

Боссы были вполне себе «биг». У организации направление деятельности не связанно с ИТ. Причем в части случаев эти поручения были обусловлены исключительно «политической» обстановкой внутри компании, только вот программистам знать это не положено было, поэтому и труднее было объяснить почему надо «здесь и сейчас».

anc ★★★★★
()
Ответ на: комментарий от RedPossum

там то написано, глянь внимательно.

umren ★★★★★
()
Ответ на: комментарий от umren

Этож студию надо ставить, чтоб пример посмотреть. Но спасибо, пригодится мне.

RedPossum ★★★★★
()
Ответ на: комментарий от umren

так на собеседовании надо спрашивать, что за проект (какие проекты). Кто архитекторы, какие идеи и технологии они уважают. Что думают по важным для тебя вопросам. Если там кроме вебсферы еще участвует Liferay, Alfresco или какая-то такая порнография, и тебе обещают заниматься бесконечным тупым клепанием сайтов, то спокойно говоришь досвиданья, разворачиваешься на 180, и бежишь оттуда не оглядываясь.

а вообще, это тебя должны спрашивать, на каких технологиях ты будешь делать те или иные задачи. Это же ты специалист.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от RedPossum

Хотя почек бы и нет.

За айфон отдал?

anonymous
()
Ответ на: комментарий от stevejobs

ну вот тебе рассказали что все шито-крыто там, ты там работаешь и все прекрасно, через полгода приезжает проект на том говне что ты назвал, заказчик платит щедро и компания не может отказать, под руку попадаешься ты, твои действия дальше? скажешь что ты специалист и все нужно переписать в течении года на нормальных удобных инструментах?

umren ★★★★★
()
Ответ на: комментарий от Legioner

Давай нормальную задачу, которую можно написать быстро, я напишу.

Это нормальная задача, которую можно написать быстро. В шарпе 6 строчек.

lazy_aleks
()
Ответ на: комментарий от stevejobs

а ты его не запускай. Ну да, понаписали говна.

Проблема в том, что там такого говна 90%.

Не хочешь - не ешь. В том-то и соль, что в джаве все свободны писать так, как им удобно, а не как Дядя сказал.

Ага, дадут тебе на поддержку такое, что ты скажешь? Или уволишься/откажешь денежному клиенту, чтобы не поддерживать?

lazy_aleks
()
Ответ на: комментарий от umren

если я именно кодер (непосредственный исполнитель) а не проектный менеджер или тимлид, и если там всё действительно очень печально, и нет смысла переписывать (или заказчика не убедить в этом), говорю, что я не буду с этим работать. Могу 2 недели покопаться, пока ищем исполнителя. Могу сам поискать исполнителя. Если начальство упирается и говорит, что именно я должен ближайший год копать это говно, то говорю что подумаю, и иду искать новый проект в другой компании. Если новый проект успешно найден и есть оффер, тут же сообщаю непосредственному начальнику, что увольняюсь. Если он согласен на это, то я через пять минут приношу заявление на увольнение по собственному, копаюсь с этим проектом положенные две недели и со спокойной душой ухожу. Всё.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Мощно, значит текучка среди нормальных пацанов в ява мире дикая?

umren ★★★★★
()
Ответ на: комментарий от f1xmAn

Не можешь достичь компромисса — пшел вон из программирования.

Компромиссы в программировании это плохо

Debasher ★★★★★
()
Ответ на: комментарий от lazy_aleks

Ты же понимаешь, что дело не в java. Дело в доступном api для запросов к xml. Есть api позволяющее в нормальные запросы - задача решится в пять строк, нет - не решится в пять строк. Все просто. Ты хочешь сравнить возможности api на данный момент времени? Тебе это интересно? Большинству не интересно.

anonymous
()
Ответ на: комментарий от lazy_aleks

У тебя если детство в жопе играет, ты сам найди нам реализацию нормального xml query для джавы, на котором задача тоже в шесть строк решается, и скажи нам. А мы тебя похвалим. Решение можешь не писать.

anonymous
()
Ответ на: комментарий от anonymous

Кто виноват, что в джаве нет нормальной работы с хмл? Тем более, что в джаве с хмл приходится работать очень часто и очень много и до сих пор нет вменяемого апи? На помойку тогда.

lazy_aleks
()
Ответ на: комментарий от anonymous

Зачем мне что-то искать? На шарпе все замечательно. Зачем мне копаться в джавском говне?

lazy_aleks
()

ищещь лёгкой жизни?

anonymous
()
Ответ на: комментарий от Debasher

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

f1xmAn ★★★★★
()
Ответ на: комментарий от lazy_aleks

ты что, только XML и парсишь? xD Есть «xml-программисты», а ты значит, «человек xml-парсер». Мне в разборе XML важна в первую очередь скорость, во-вторую - потребление памяти. А декларативное апи, которое от меня спрятало всё это наоборот не ок.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от darkenshvein

Надо писать так, чтобы код отражал СУТЬ.

что, камменты в коде, уже не в тренде?

Это самое заклинание про «самодокументируемость» работает до той поры, когда а) в кот все равно никто посторонний не смотрит даже теоретически
б) как всегда ВНЕЗАПНО хотят из чего-то вытащить наружу API с самогенерящимися автодоками.
в) (вризультати)к «ЭтошОпенСорц»(ТМ) библиотеке нет никаких вменяемых доков, кроме автогенеренных (да и те невменяемые) :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от stevejobs

В том и дело, что в шарпе линк не только предоставляет декларативное апи, но и работает быстро. Может быть, даже быстрее, чем джава. А про потребление памяти уж до джавы далеко в любом случае.

lazy_aleks
()
Ответ на: комментарий от anonymous

С каких пор без оптимизаций TCO нельзя обходить деревья?

dycore
()

Краткий пересказ сообщения:

КО-КО-КО JAVA ПОК-ПОК-ПОК ООП КУДАХ-ТАХ-ТАХ ФРЕЙМВОРКИ КУКАРЕКУ АРХИТЕКТУРА КО-КО-КО ЫНТЫРПРАЙЗ

Вердикт: мамкиного борщехлеба погнали ссаными тряпками из индустрии, отчего и BOMBANOOLO. Поделом погнали, кстати. Разрабатывать системы, которые держат колоссальную нагрузку, которые оперируют огромными объемами данных, от которых зависит жизнь людей, предприятий, государств - это тебе не зигохистоморфные препроморфизмы клепать в емаксе под мамкин борщок.

Тут мозги нужны.

anonymous
()
Ответ на: комментарий от f1xmAn

Если представить себе ползунок, то типичный компромисс выглядит так:


[говно,палки]==[ ]===========================================[качество]

Vit ★★★★★
()
Ответ на: комментарий от Vit

Ну это уже вопрос к отдельным личностям.

f1xmAn ★★★★★
()
Ответ на: комментарий от stevejobs

Вы напишите реализацию - сравним. В чем проблема? Я не знаю джаву так хорошо, чтобы написать суперэффективную реализацию данной задачи.

lazy_aleks
()

stevejobs
clojure, common lisp, gentoo, scala

Лол, если маргинальщику так припекло от Java, то, значит, Java всё делает правильно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.