Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Psycho Tiger

Оценить эту запись

Давайте начистоту

Запись от Psycho Tiger размещена 18.12.2010 в 03:46

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

Дак вот, ратовать то ратую, только нифига сам этому не следую.
Например интерфейсы я применяю раз в 5 лет - там, где действительно без них никак. Никогда не использовал интерфейс для ограничения функционала - типа оставить только гет-сет. Мне это даже неудобно - по goto declaration я перехожу в интерфейс, а не в действительно место реализации.
В моём коде порой встречаются классы по 2-3 тыщи строк, когда можно легко обойтись без этого. Сам я встречая такой класс тыкаю на него пальцем и говорю, что с этим я работать не буду. Ну, это уже больше маркетинговый ход - как правило если заказчик - человек не гуманитарного образования то он готов накрутить 20% сверх сметы, но это другой разговор.
Я ратую за наследование и всё такое. Только достаточно часто работаю под мотивацией "бегомля!" и моё "наследование" это копипаст кода. Хотя оправдаюсь, обычно такой код живёт недолго и полностью рефакторится до нормального состояния в ближайшие дни. Потому что с таким работать невозможно.
В моём коде встречаются локальные переменные, начинающиеся с "_", приватные без "_", очень-очень редко публичные с "_". Протектед я всегда пишу с "_", хоть это и общественно неправильно.
Много-много констант в кастомных событиях и много-много методов и переменных, которые я никогда не вызываю. Кода слишком много чтобы помнить, делает ли какой-нибудь кусок что-то, а заниматься такими поисками нет желания.
В триада MVC вообще похожа на MVP, контроллеры сами обновляют вьюху. Зачем мне нужны модели я порой сам понять не могу.
А ещё я редко пользуюсь профайлером, в основном во время рефактора, которого не бывает (сроки-сроки-сроки!) при матерных словах, среди которых иногда прослеживаются "мемори" и "лик".

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

Господа, порой я пишу очень-очень плохой код, думая что он ужасный. Но нет, есть ещё люди в русских селениях! Я просто не представляю, как людям удается делать хуже, чем делаю я.

Теперь когда вы всё знаете, вы все ещё хотите взять меня на работу?
Всего комментариев 44

Комментарии

Старый 18.12.2010 10:11 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
В моём коде встречаются локальные переменные, начинающиеся с "_", приватные без "_", очень-очень редко публичные с "_". Протектед я всегда пишу с "_", хоть это и общественно неправильно.
А это уже твой личный стиль. Я сам пишу вообще "_" только у одноименных переменных с сет-гет методами. И никогда еще не было такого, чтобы я не знал, с каким модификатором доступа та или иная переменная (когда пишешь, это же понятно и все держится в голове). А раньше принимаемые параметры вообще с $ начинал.

Цитата:
Например интерфейсы я применяю раз в 5 лет - там, где действительно без них никак. Никогда не использовал интерфейс для ограничения функционала - типа оставить только гет-сет.
Интерфейсами я вообще не пользуюсь, хоть убей не вижу в них смысла. Описать то, что должно быть в классе? А зачем? Я пойду в класс и сам нафигачу все это. Тут либо не дорос, либо они на самом деле штука не очень важная.

Цитата:
наше текущее приложение... бегает быстрее, чем его конкуренты.
Значит не все так плохо (:
Старый 18.12.2010 13:14 Jewelz вне форума
Jewelz
 
Аватар для Jewelz
берем
Старый 18.12.2010 13:44 Hauts вне форума
Hauts
 
Аватар для Hauts
Цитата:
Теперь когда вы всё знаете, вы все ещё хотите взять меня на работу?
Да, однозначно.
Старый 18.12.2010 14:21 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
Цитата:
Например интерфейсы я применяю раз в 5 лет - там, где действительно без них никак. Никогда не использовал интерфейс для ограничения функционала - типа оставить только гет-сет.

Интерфейсами я вообще не пользуюсь, хоть убей не вижу в них смысла. Описать то, что должно быть в классе? А зачем? Я пойду в класс и сам нафигачу все это. Тут либо не дорос, либо они на самом деле штука не очень важная.
Интерфейсы нужны для описания методов, это так сказать хелпер по большей части. Пример, работаете вы в большом штате, с сотней флешеров. И разрабатываете один продукт. Каждый пишет свою часть движка , интерфейса, графики - не важно, все что касается АС, допустим. И вот один из флешеров уходит из конторы, а тебе отдают его часть кода на разбор и доработку. Ты открываешь классы, видишь тонну функциий, не сразу соображаешь что они делают, начинаешь читать весь движок, разбираться, тратить время и т.д. - а тут ты просто заходишь в имплеминтарный интерфейс - и видишь - ага destroy() удаляет все объекты, ага show() показывает что то там... и все. Тебе уже проще становится разбираться с этим движком. Имхо, адобовцы юзают их не просто так.
Старый 18.12.2010 14:29 КорДум вне форума
КорДум
 
Аватар для КорДум
А, ну только если это. Забота о ближнем. Но я за все время работы одиночка, так что мне это и не надо. Наверное, пока не надо.
Старый 18.12.2010 14:41 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Не слушайте это:
Цитата:
Интерфейсы нужны для описания методов, это так сказать хелпер по большей части. Пример, работаете вы в большом штате, с сотней флешеров. И разрабатываете один продукт. Каждый пишет свою часть движка , интерфейса, графики - не важно, все что касается АС, допустим. И вот один из флешеров уходит из конторы, а тебе отдают его часть кода на разбор и доработку. Ты открываешь классы, видишь тонну функциий, не сразу соображаешь что они делают, начинаешь читать весь движок, разбираться, тратить время и т.д. - а тут ты просто заходишь в имплеминтарный интерфейс - и видишь - ага destroy() удаляет все объекты, ага show() показывает что то там... и все. Тебе уже проще становится разбираться с этим движком. Имхо, адобовцы юзают их не просто так.
Слушайте это: интерфейсы нужны в двух случаях - при загрузке сторонних классов из другого swf, чтобы сохранить типизацию и в случае замены множественного наследования - при помощи абстрактного класса без реализации. Яркий пример - IBitmapDrawable. Можно делать BitmapData#draw как BitmapData, так и всех DisplayObject. Другой пример - IEventDispatcher. Когда класс наследуется уже от другого класса, но ему нужно добавить возможность участия в event flow модели FP - ему реализуется IEventDispatcher через композицию с полем класса типа EventDispatcher. Хороший тон, который я написал, и которому не следую - это ограничение функциональности через интерфейс / интерфейсы-маркеры без методов вообще как "памятка" кодеру - is начинает работать, типа myObjects is ISexyGirl, хотя ISexyGirl вообще пустая.
А то что написал in4core достигается с помощью outline`а и ASdoc`а. Тут, конечно, сипипишники старой закалки начнут говорить мне о пользе хидеров (*.h), но я их фанатизм не разделяю. Да и скорее всего не многие вообще поняли о каком фанатизме речь.
Старый 18.12.2010 17:08 Котяра вне форума
Котяра
 
Аватар для Котяра
Никогда не видел пользы в хидерах
И да ! Код за который ратуешь и код который находится в рабочем репозитарии, это как говорят в Одессе "две большие разницы"
Главное чтобы стремление всё таки было.
Старый 18.12.2010 18:33 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
А меня вот что-то переклинило и я вообще не использую публичные переменные...
А интерфейсы для связи частей приложения из несколько swf-ок -- отличная вещь.
Старый 18.12.2010 18:48 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
А меня вот что-то переклинило и я вообще не использую публичные переменные...
Один класс на все про все, что ли?
Старый 18.12.2010 19:35 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
а тут ты просто заходишь в имплеминтарный интерфейс - и видишь - ага destroy() удаляет все объекты, ага show() показывает что то там... и все. Тебе уже проще становится разбираться с этим движком
Для этого есть ASDoc. Не стоит путать описание методов с их перечислением.

Цитата:
интерфейсы-маркеры без методов вообще как "памятка" кодеру - is начинает работать, типа myObjects is ISexyGirl, хотя ISexyGirl вообще пустая
Зачем эти маркеры - никогда не понимал. Хочешь 2 разные ветки наследования использовать в одном месте - значит у них есть что-то общее, что и должно попасть в интерфейс.

Цитата:
и я вообще не использую публичные переменные...
Кстати, да. Чем дальше, тем меньше в них пользы.
Старый 18.12.2010 19:36 in4core вне форума
in4core
 
Аватар для in4core
кордум необязательно. Class то public , а вот варсы все private.
Старый 18.12.2010 19:37 in4core вне форума
in4core
 
Аватар для in4core
gloomy - перечисление методов + описание. имелось ввиду именно то
Старый 18.12.2010 19:48 КорДум вне форума
КорДум
 
Аватар для КорДум
В интерфейсах нельзя указать описание метода.
Старый 18.12.2010 19:59 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Цитата:
А меня вот что-то переклинило и я вообще не использую публичные переменные...
Цитата:
Кстати, да. Чем дальше, тем меньше в них пользы.
ChuwY, gloomyBrain, научите
Цитата:
В интерфейсах нельзя указать описание метода.
Вот тут кстати задумался. Почему доступ к методам в интерфейсах есть, а к переменным нет. Понимаю, что вопрос к индусам из адоба, т.е. из разряда риторических. Мне вот интересно, такая мысль только меня "осенила"? И да, я знаю что можно использовать гет- и сет-методы, но как-то не шибко хочется каждую переменную такой байдой окутывать.
Старый 18.12.2010 20:01 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
В интерфейсах нельзя указать описание метода.
Почему это? Можно =)
Просто, по идее, правильнее указывать описание для реализации метода. Откуда иначе узнать, как оно работает в том или ином классе?
Обновил(-а) gloomyBrain 18.12.2010 в 20:03
Старый 18.12.2010 20:23 КорДум вне форума
КорДум
 
Аватар для КорДум
gloomyBrain, ну-ка, я, похоже, путаюсь в понятиях. Описание метода - это тело метода, верно? А в интерфейсах оного делать нельзя (засомневался и полез в Мука за уверенностью). Да, нельзя. В интерфейсах указыватся только модификатор доступа, тип метода, название, аргументы, возвращаемый тип и все это заканчивается ";", ведь так?
Старый 18.12.2010 20:27 udaaff вне форума
udaaff
Модификаторы не указываются.
Старый 18.12.2010 20:30 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
Модификаторы не указываются.
О, действительно. Ну, сказывается знание исключительно теоретического материала, на практике-то не использовалось.
Старый 18.12.2010 21:24 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
@Кордум
В контексте этого поста - это ASDoc. по крайней мере я его имел в виду
Старый 18.12.2010 21:53 mayakwd вне форума
mayakwd
 
Аватар для mayakwd
а я использую интерфейсы, редко, но использую, для gui, чтобы можно было примерять любые рендереры без лишних телодвижений, для листа с поиском и фильтрацией, куда можно загнать кучу ICondition (где есть test и exec) и т.д.

использую "_" для protected/private в случае если переменная изменение переменной используется с геттерами и сеттерами.

с наследованием дружу хорошо, и стараюсь использовать по максимуму.

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

единственная проблема - не документирую код, точнее документирую но очень мало времени этому уделяю и 90% кода остается просто без описания, при том что одни и те же мои либы используются далеко не в одном проекте и бывает проблемно порой вспомнить как и чем пользоваться,а доков нету, и вот лезешь заново смотреть этот код, методом проб и ошибок находишь "как надо".
Старый 18.12.2010 22:53 chabapok вне форума
chabapok
Да вы, батенька, *****кодер! %)

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

По опыту работы с чужим кодом, большинство кодеров:

- пишут на таймлайне, хотя про код в файлах явно знают
- циклы не проходили. Если участок надо выполнить 100 раз - он будет 100 раз скопирован. При этом оптимизацией (как раньше на спектрумах циклы с djnz разворачивали ради экономии) там и не пахнет.
- мало того что пишут в таймлайне, так еще и код разбрасывают по кадрам
- не знают что такое select count(*) FROM..., для узнавания кол-ва строк используется запорс, с последующим перебором и подсчетом, или в лучшем случае запрос с последующим mysql_num_rows(). При этом зачастую, сразу делается снова такой же точно запрос - теперь уже для выборки значений.
- Не знают что такое индексы или в лучшем случае не умеют ими пользоваться.

убивать больше всего хочется за циклы....
Старый 18.12.2010 23:14 gr_crd вне форума
gr_crd
 
Аватар для gr_crd
Цитата:
циклы не проходили. Если участок надо выполнить 100 раз - он будет 100 раз скопирован.
это невероятно)))
Старый 19.12.2010 00:47 Dukobpa3 вне форума
Dukobpa3
 
Аватар для Dukobpa3
Цитата:
Сообщение от chabapok
- Не знают что такое индексы или в лучшем случае не умеют ими пользоваться.
О, индексы больная тема)))
Старый 19.12.2010 02:10 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
- пишут на таймлайне, хотя про код в файлах явно знают
- циклы не проходили. Если участок надо выполнить 100 раз - он будет 100 раз скопирован. При этом оптимизацией (как раньше на спектрумах циклы с djnz разворачивали ради экономии) там и не пахнет.
- мало того что пишут в таймлайне, так еще и код разбрасывают по кадрам
- не знают что такое select count(*) FROM..., для узнавания кол-ва строк используется запорс, с последующим перебором и подсчетом, или в лучшем случае запрос с последующим mysql_num_rows(). При этом зачастую, сразу делается снова такой же точно запрос - теперь уже для выборки значений.
- Не знают что такое индексы или в лучшем случае не умеют ими пользоваться.
У Вас флешеры и серверники одновременно? Круто.
А вообще у нас наверное порог вхождения разный. С людьми "я пишу на таймлайне" мне вообще работать не приходилось - их отсеивают за много абстракций до меня.
Старый 19.12.2010 02:20 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
А меня вот что-то переклинило и я вообще не использую публичные переменные...
Push event flow & accessors?)
Старый 19.12.2010 02:30 Котяра вне форума
Котяра
 
Аватар для Котяра
да кстати... последнее время заметил, что у меня часто получается максимум один публичный метод.
это
addEventListener
кроме него разве что init
или reInit
но это только про вьюшки в основном.
И это хорошо!
Старый 19.12.2010 02:35 Котяра вне форума
Котяра
 
Аватар для Котяра
Кстати тоже покаюсь - больше года 70% кода пишу на as2. это жесть.
специально для этого и понаписал "переходных" либ, чтобы чувствовать себя удобно.
Надеюсь as2 таки умрёт когда нибудь..
Старый 19.12.2010 04:17 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
Цитата:
Один класс на все про все, что ли?
Ннет. Имелось ввиду, что если свойство нужно снаружи -- геттер к нему приписывается, но никак не public.

До более упоротых способов пока не дошел =)

Интерфейсы могут использоваться для описания свойств как раз с помощью гет\сет методов.

Сам почти не документирую, но мой код -- конечный.
Библиотеки же с интерфейсами и евентами в проекте продукоментированы полностью.
Обновил(-а) ChuwY 19.12.2010 в 04:23
Старый 19.12.2010 13:12 КорДум вне форума
КорДум
 
Аватар для КорДум
Цитата:
Имелось ввиду, что если свойство нужно снаружи -- геттер к нему приписывается, но никак не public.
А, в моем понимании геттер/сеттер == свойство (но не === )
Старый 19.12.2010 13:13 КорДум вне форума
КорДум
 
Аватар для КорДум
Котяра, я уже полгода пишу на as2 - работа у меня этого требует, и ничего, кастомный Delegate с передачей параметров мой друг, чтоб его.
Старый 19.12.2010 15:27 chabapok вне форума
chabapok
Цитата:
У Вас флешеры и серверники одновременно? Круто.
что "у нас" -- я понятия не имею! Такой код попадает ко мне обычно так: с неизвестного ранее номера аси ко мне обращаются с вопросом "я купил приложение вк, надо {список, что надо}". Я говорю, мол, вцелом да, если будут исходники. Один ли человек "у них" писал этот код или много - не имею понятия.

И естественно, рефакторингом я в таких случаях не занимаюсь, а иду по пути наименьшего сопротивления - *****код в том же, в рамках разумного, стиле.
Обновил(-а) chabapok 19.12.2010 в 15:52
Старый 19.12.2010 15:43 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
А, ну раз там такой код - возится с ними себе дороже. Или переписывать, или пусть дальше ищут кого-нибудь. Ну это моё имо.
Старый 19.12.2010 15:51 ChuwY вне форума
ChuwY
 
Аватар для ChuwY
Цитата:
А, в моем понимании геттер/сеттер == свойство (но не === )
Ну ведь и то и другое может быть не просто выдачей в одну строчку.
Например геттер инстанса синглтона. Который, если нулл, то инит.
Сеттеры а-ля координаты дисплейобджекта.

Ну кому я в конце концов обьясняю..

Документацию проще писать к свойствам таким образом.

Просто, когда метод, то сразу хочется сказать "даа. это интерфейс класса", а когда паблик "чёрт. кости торчат, я чувствую себя незащищенным 0_о".
Старый 20.12.2010 13:32 Hidest вне форума
Hidest
 
Аватар для Hidest
Про незащищенность - у меня то же самое... Всегда чувствую себя лучше, когда могу проконтролировать и проверить, чего у меня там кто-то хочет в поле поменять. В сеттер его и полный контроль!
Старый 21.12.2010 00:37 Mur4ik вне форума
Mur4ik
Цитата:
а тут ты просто заходишь в имплеминтарный интерфейс - и видишь - ага destroy() удаляет все объекты, ага show() показывает что то там... и все.
А чем в этом случае окно Outline не в помощь, тот же вид интерфейса, да еще и с переходом на нужную строку в редакторе? Т.ч. как по мне это не совсем верное толкование нужности и полезности применения интерфейсов.
Старый 21.12.2010 08:27 Slip_91 вне форума
Slip_91
 
Аватар для Slip_91
Я тоже студент. Недавно устроился кодером. И пишу такой отвратительный код, что аж самому иногда противно. Прекрасно это понимаю, но времени на оптимизацию / рефакторинг практически нет. Зачастую некоторое время пребываю в шоке от того, что весь этот *****код вообще работает и мне даже удалось пофиксить все баги.. Так и живём (
Старый 21.12.2010 09:53 Mur4ik вне форума
Mur4ik
Вот из-за таких "нет времени сейчас", потом кому-то или самому разработчику приходится тратить куда поболее времени. Если проект хоть чего то стоит и нужна его поддержка и развитие.
Старый 21.12.2010 15:10 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цель - апдейт проекта до nn-ого числа. Время есть, начинаем рефакторить. Рефакторим, рефактор затягивается. Чтобы успеть после рефактора снова лепим очень плохой код =) И по кругу.
Старый 22.12.2010 13:36 Doctor76 вне форума
Doctor76
 
Аватар для Doctor76
Цитата:
С людьми "я пишу на таймлайне" мне вообще работать не приходилось - их отсеивают за много абстракций до меня.
Я в таймлайне не пишу. , задачи другие. А напротив сидит человек, который в нем только и работает. Я пишу софт. Он делает анимацию. Как бы он рисовал мультики без таймлайна, я не знаю. Конечно код там носит эпизодический характер, но все таки
Старый 22.12.2010 13:55 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Мы про программистов говорим, а не про аниматоров/художников, конечно)
Старый 22.12.2010 14:15 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Psycho Tiger, просто поставте себе цель, если такое возможно, 7 часов пишем код, 1 час рефакторим. Конечно, побороть себя не очень легко. Но уже очень скоро схема даст результат. Это как переход от кадров к классам)
Старый 22.12.2010 14:59 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Да, пожалуй стоит )
Старый 22.12.2010 19:03 alatar вне форума
alatar
 
Аватар для alatar
Цитата:
Psycho Tiger, просто поставте себе цель, если такое возможно, 7 часов пишем код, 1 час рефакторим.
Или сначала 1 час думаем что писать, 8 часов пишем.
Цитата:
Вот из-за таких "нет времени сейчас", потом кому-то или самому разработчику приходится тратить куда поболее времени. Если проект хоть чего то стоит и нужна его поддержка и развитие.
Вот как раз отношусь к "кому-то"
Как там говорится? "Пишите код так, как будто после вас его будет читать склонный к агрессии маньяк-убийца, который знает где вы живете."
Старый 22.12.2010 20:09 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Ыгы, мне вот сейчас на работе сказали 2 проги, написанных в кадрах, дорабатывать. Для полноты радости одна из них на AS2, который я вообще в жизни юзал 2 раза, т.к. друзья - дизайнеры просили баннеры подправить...

Извините за офтоп, просто наболело за неделю...
 

 


Часовой пояс GMT +4, время: 05:10.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.