
Roman
10.11.2016
07:02:18
Там обсуждали как заработать свой первый миллион зелеными за два часа?
Или объясняли, почему бутерброд падает маслом вниз?
Или как понять женщину?

Denis
10.11.2016
07:03:09

Google

Aleserche
10.11.2016
07:03:22
ну ты посмотри что-нибудь из этого
https://vimeo.com/ontico/videos

Salavat
10.11.2016
07:03:26
Рассказывали о тех вещах, о которых людям интересно было послушать

Roman
10.11.2016
07:03:53
Но просто мне интересно было, о чем там
Может там собрались мастера мира
И рассказывали почему и как что-то сделали в своем продукте

dypa
10.11.2016
07:05:22

Salavat
10.11.2016
07:06:27

Grigori
10.11.2016
10:39:16
"паттернами не надо увлекаться" для меня - это "виноград зелен"

Dmitry
10.11.2016
10:40:04
хм... а что у тебя с зеленым виноградом?

Pavel
10.11.2016
10:41:22
В эволюции каждого разработчика есть такой период когда он все фанатично делает по паттернам, а если нет то ругается.
Обычно это период когда он как раз только выучил эти паттерны

Google

Dmitry
10.11.2016
10:42:22
я не понимаю, как это "делать по паттернам", делать "не по паттернам"....
у тебя возникает проблема, сразу приходи ответ готоворго решения, ты пишешь код дальше

Pavel
10.11.2016
10:44:38
Решение проблемы не бинарное, иногда паттерн решает 10% проблемы
И тогда "по паттернам" - это применить его, а "не по паттернам" - проигнорировать

Dmitry
10.11.2016
10:45:56
проблема - это что? бизнес проблема, проблема оформления кода, проблема организации кода, проблема тестирования? ;))

Pavel
10.11.2016
10:46:20
бизнес-проблема скорее

Dmitry
10.11.2016
10:46:38
Паттерны никогда не были направлены на решение бизнес проблем
Паттерны - они больше об организации конкретного кода, улучшения его поддерживаемости за счет узнаваемых и проверенный идей

Pavel
10.11.2016
10:49:03
Ну вот пример, нужно тебе написать скрипт сортировки файлов в 15 строк, ты берешь, подключаешь DI контейнер, парсер yml конфига - в нем параметр по какому алгоритму сортировать, делаешь интерфейс Sorter, фабрику которая генерит эти сортеры. Пишешь 1 сортер, прогоняешь его на своей задаче, скрипт удаляешь :)

Dmitry
10.11.2016
10:49:17
опять же, это не готовые снипеты кода, а направление мышления... есть у дебя задача обмена между объектами данными, ты смотришь - подходит ли что из паттернов поведения... берешь эту идею и реализуешь
или не удаляешь.. а постишь на гитхабе, получаешь всемирную известность и зарабатываешь бабло на докладах на модных конференциях

Pavel
10.11.2016
10:51:28

Dmitry
10.11.2016
10:52:00
Ну варинат не хуже твоего примера, такой же абстрактный ;)
Но в общем тогда уж следует говорить о применении паттернов в отрыве от решения проблем.

Pavel
10.11.2016
10:52:41
Такие ситуации в общем то и есть суть деятельности программиста. Решить какие паттерны более подходят а какие менее - и есть то на что он тратит время
полдня сидишь рисуешь диаграммы, думаешь как все это впишется в предметную область, потом час это кодируешь, остальное время пьешь кофе и ходишь по офису

Dmitry
10.11.2016
10:54:30
Вернее, применение их без наличия проблемы. Когда у тебя возникнет проблема сортировать пятью разными алгоритамими в зависимости от директории и типа файла, написать на это тест... ну вот проблема, которая решается di и фабриками
а по каким он паттернам и почему говно?

Pavel
10.11.2016
10:57:48
Короче это нерешаемый спор :) очень сильно зависит от контекста, и как правило круче тот кто умеет лучше угадать будущее.

Dmitry
10.11.2016
10:59:30
Ну если мне за год вперед за поддержку и развитие скрипта по сортировке файлов... то будущее очевидно ;)

Google

Pavel
10.11.2016
10:59:37
Вот кстати код в проекте, построенном на command bus и хексагональной архитектуре, на первый взгляд кажется совершенно рандомным месивом из паттернов. И только на больших объемах он себя оправдывает.

dypa
10.11.2016
11:00:04
>а по каким он паттернам
хорошо бы это у авторов кода спросить :)
>почему говно
это не самый показательный участок кода, метод setWriter не имеет смысла при условии передачи в него всегда значения по умолчанию

Dmitry
10.11.2016
11:01:18

Pavel
10.11.2016
11:02:06

Dmitry
10.11.2016
11:03:23

dypa
10.11.2016
11:06:26
просто нужно понимать что некоторые паттерны появились из-за особенностей языка для которого этот паттерн делался. не нужно делать из php java. в java нельзя new $foo сделать.

Dmitry
10.11.2016
11:06:37
например?
new $foo? Счастливого рефакторинга ;)
Фабрики и создатели - они вообще-то не о том, что new $foo нельзя сделать

dypa
10.11.2016
11:08:48

Dmitry
10.11.2016
11:11:14
Не следует путать использование и даже злоупотребление паттернов с говнокодом без паттернов ;) Слово Factory в названии класса еще ничего не говорит
Но мне все же про виноград интересно... причем тут зеленый виноград

Pavel
10.11.2016
11:14:55
Ты рассматриваешь видимо только коммерческие проекты с длительным циклом поддержки, в таких да нужен

Dmitry
10.11.2016
11:15:38
Павел, рефакторинг никогда не нужен... вплоть до того момента, когда он становится нужен ;)
Хз, я вот даже свой ansible конфиг для вагранта рефакторю переодически ;)

Pavel
10.11.2016
11:16:19
А это может быть какая-нибудь ниндзя-библиотека размером в килобайт, которая никогда не рефакторится и там new $foo помогает сэкономить 0.5кб кода

Google

Dmitry
10.11.2016
11:18:43
Но когда рефакторинг становится нужен - уже поздно пить боржоми... Вот у меня один юниор тоже не думал про рефакторинг, когда назвал свой кастомный класс валидатора в Yii просто и незатейлево class Validator, а я это по болезни упустил... потом были счастливые часы рефакторинга, ибо Validator:class тогда еще не было, да и не уверен, что он бы его использовал,если бы было ;)
Так что есть просто хороший тон когда, которого не сложно придерживаться. А экономия кода... это как мне кто-то на собеседовании рассказывал, что они магию на методы переписывали, ибо магия уж очень тормозит...


Pavel
10.11.2016
11:21:39
> Но когда рефакторинг становится нужен - уже поздно пить боржоми...
Глубоко философский вопрос......
На прошлой работе мы долго писали очень красивый и правильный код, до усрачки спорили об именовании и о том как эту систему размаштабировать до нагрузки в миллион пользователей. А потом пришел фаундер и сказал что инвестор больше не дает денег и все могут идти на улицу ?
Я вот о такой экономии кода говорю, когда разработку можно было бы сократить на месяцы, и выпустить MVP и уже тестировать.

Dmitry
10.11.2016
11:22:56
Так рефакторинг как раз о том, что бы об именовании не спорить ;) А что бы потом отрефакторить ;)

Pavel
10.11.2016
11:23:22
Ну мы проводили рефакторинг регулярно
У нас было правило ни в коем случае не оставлять говнокод, и сразу его переписывать на хороший тон, если он вдруг появился.
На это все время и потратили в итоге.

Dmitry
10.11.2016
11:24:14
Знаешь, тут есть вторая сторона медали. Когда через пол года ты приходишь и говоришь - а теперь мне нужно еще пол года, что бы все переписать. И отгадай, куда и какими словами тебя посылают. О "понимающих заказчиках", что тут dypa рассуждал - это так, скорее миф ;) Исключение

Pavel
10.11.2016
11:25:16
> нужно еще пол года, что бы все переписать.
У нас кстати в итоге так и вышло. Мы развивали систему не в ту сторону.

Dmitry
10.11.2016
11:25:49
Ну ты сжав зубы пишешь дальше... и через год о каждого изменения у тебя летят другие куски фунционала... очередь багов растет. И тебя вызывают и спрашивают - а хрен ли, пиши заявление ;)

Pavel
10.11.2016
11:26:07
Получилось как раз очень крутая инфраструктурная часть по паттернам, все на ансибле и с oauth авторизацией, а предметная область убогая и ненужная пользователям

Dmitry
10.11.2016
11:26:44

Pavel
10.11.2016
11:27:00
И такое ощущение что это даже не компетентность конкретной команды, а вселенский закон.

Dmitry
10.11.2016
11:27:30

Pavel
10.11.2016
11:28:00
А могли бы все делать по паттернам и в конце концов разориться

Dmitry
10.11.2016
11:29:00
У них другая история, извини, совсем не о том. У них проблема производительности. Тот случай, когда люди дешевле железа частенько.

Pavel
10.11.2016
11:29:56
Интересно здесь ведь наверняка есть ребята оттуда, почему бы не рассказать как оно на самом деле)
Потому что я собирал всю эту инфу по крупицам и отзывам

Google

Dmitry
10.11.2016
11:30:28
Ну, скажем, фишер тоже "отсюда", но ему уже не интересно в формах трепаться ;)

dypa
10.11.2016
11:31:21
axure знаешь как хорошо заходит? при этом ни строчки кода не пишется.


Dmitry
10.11.2016
11:32:40
А кто такой заказчик? ;) Понимашь, это хорошо, когда на против тебя заказчик - владелец бизнеса с кошельком. А если это - технический директор у которого есть план, бюджет и ничего больше?
Это ему придется объяснять совету директоров, почему следует в этом году потратить столько же на готовый сайт, что и при его создании. А зачем ему это надо? Все, тупик.
И даже владельцам бизнеса не всегда можно все объяснить. Мы поратили кучу услилий, выработки аргументов и обучению менеджеров только лишь что бы научить их продавать разработку "на фреймворках", вместо "Битрикса".
Ну т.е. есть идеальны мир, а есть реальный... ну и как-то нужно балансировать. О перепроектировании до старта тоже все верно... в идеале баланс находить, что бы потом и легко менять было, рефакторить, и скорость разработки не терять.

Pavel
10.11.2016
11:42:43
То есть это те же самые слова "не стоит увлекаться паттернами", только записанные в виде одного абзаца :)

Dmitry
10.11.2016
11:44:11
Не стоит увлекаться проектированием на абстрактное будушее, оставляя необходимый минимум, что подсказывает опыт. А паттерны тут непричем ;)

Salavat
10.11.2016
11:44:33
Отвлеку вас. В соседнем чате ищем решение в один цикл - может здесь кто найдет
Есть массив range(1,9), есть список операций + - / *
Задача - вывести результаты арифм.действий чисел массива между парно.
То есть для массива [1, 2, 3] ответ:
1 + 1 = 2
1 + 2 = 3
....
1 * 1 = 1
...
1 / 1 = 1
...
1 - 1 = 0

Dmitry
10.11.2016
11:46:31
Похоже на обычную задачу находжения перестановок

Pavel
10.11.2016
11:46:44
то есть 12 вариантов получается?

Salavat
10.11.2016
11:46:52
Задача - попробовать решить в 1 цикл

Dmitry
10.11.2016
11:47:07
если я понмю, в один цикл без рекурсии она решается, но не то, что бы очень читаемо

Pavel
10.11.2016
11:47:45
А что из этих параметров вариативно? Набор операций и набор чисел?

Salavat
10.11.2016
11:48:00
набор чисел
операции постоянны

Pavel
10.11.2016
11:49:09
то есть это еще и выборка с возвращением :)

Salavat
10.11.2016
11:49:27
Наверное )
array_* (filter, map, walk...) - это считается за цикл