Xpoint
   [напомнить пароль]

Ну вот что за уроды берутся программировать?

Метки: [без меток]
[арх]
2005-05-26 14:57:37 [обр] Андрей Новиков(0/1242)[досье]
Поставил тут awstats исключительно ради плагинности и расширяемости. И всё так красиво на первый взгляд, но когда разберешься, понимаешь, что не можешь сделать простейшей вещи - сделать свою табличку анализа запросов. Накрутили черти знает что, но никакой системности, понятности и единообразия. Сплошные подпорки и заглушки. Уродство. Я в расстройстве. Несколько дней насмарку.
спустя 15 минут [обр] Андрей Брайнин(0/127)[досье]
ну ты еще не видел исходников .NET :)
спустя 1 час 14 минут [обр] dip00dip(0/2)[досье]
Тем не менее, я не встречал ничего лучше awstats из бесплатных анализаторов посещений. :)
спустя 1 час 8 минут [обр] Андрей Новиков(0/1242)[досье]
Мы не о продукте, мы о программистах :)
спустя 32 минуты [обр] Алексей В. Иванов(0/2861)[досье]
Есть у меня предположение, что зачастую никудышные программисты, пытаясь поднять свою самооценку выпускают разного рода бесплатные приложения. То, что у них огромная куча свободного времени наводит на соображения, что они безработные :)
Вспомнить те же CMS, phpmyadmin, е-магазины, форумы. Все, что я видел, а видел довольно много — жуткие фекалии. Я не хочу сказать, что у меня "длиннее", но смотришь снаружи –- нормально, но стоит залезть во внутрь и разочаровываешься в людях :(
спустя 30 минут [обр] Андрей Брайнин(0/127)[досье]
Алексей В. Иванов[досье] а внутрь мало кто заглядывает :) на это и расчет разработчиков.
выглядит намально? - намально.
работает? - работает.
что еще надо пользователю? :)
80% кода (если не больше) написано именно так :)
спустя 11 минут [обр] Алексей В. Иванов(0/2861)[досье]
Спору нет, конечно, когда я обязан укладываться в сроки разработки я сам ставлю "подпорки" и "соплями леплю фичи" :) (самому неприятно, но чего не сделаешь ради придирчивого клиента :). Но когда проект начинается с этого и карточный домик начало проекта — это ужасно :)
Не понимаю, почему свободные девелоперы экономят время на проектировании.
спустя 1 час 1 минуту [обр] Serge(0/27)[досье]
Андрей Брайнин[досье] А кто-то мешает хорошим программистам показать, как нужно проектировать скрипты? Когда я искал себе поисковую систему, не нашел абсолютно ничего, что удовлетворяло бы моим требованиям. Пришлось писать самому, хотя я вообще не программист и красиво спроектировать и написать соответсвенно ничего не мог. Зато оно работало так, как мне нужно. И через пару месяцев уже сотни копий стояло на других сайтах, потому что ниша оказалась совершенно незаполненной. Где эти хорошие программисты были раньше? А потом добавлялись новые функции и сейчас там уже 250 кб кода, в котором постороннему будет сложно разобраться. Вот только альтернатив не так уж много - либо по функциональности совсем не то, либо это будет еще более большая и сложная система.
спустя 48 минут [обр] Алексей В. Иванов(0/2861)[досье]
А кто-то мешает хорошим программистам показать, как нужно проектировать скрипты?
Никогда не слышал, чтобы разработчики таких проектов просили помощи в проектировании. Вас послушать, так получается во всем "хорошие программисты" виноваты :)
спустя 11 минут [обр] Serge(0/27)[досье]
Ну что Вы, конечно не во всем. Только в том, что так мало хороших бесплатных продуктов:) Но и их можно понять, они ведь так заняты работая на заказ. Только не нужно потом жаловаться:) Вот и получается, что многие продукты вырастают из наколенных решений, постепенно обрастая функциями. А до тотальной переделки далеко не все доживают. Я бы тоже хотел свой скрипт с нуля переписать, но страшно за это взяться, да и времени нет на такие глобальные вещи.
спустя 12 минут [обр] Сергей Чернышев(0/589)[досье]

Алексей В. Иванов[досье]
Не нужно думать, что коммерческие продукты пишутся лучше...

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

Поверьте - я это говорю отнюдь не из-за опенсорс-фанатства.

Короче, во всех областях это правило работает одинаково - плохих профессионалов много, а хороших мало и эта пирамида никуда не денется.

спустя 19 минут [обр] Алексей В. Иванов(0/2861)[досье]
Совершенно согласен. Видел немало платного говёного софта.
спустя 3 часа 16 минут [обр] Старынин Валерий(0/57)[досье]
А если в общих чертах, то что есть ПРОЕКТИРОВАНИЕ софта?
спустя 8 часов [обр] Сергей Круглов(0/2057)[досье]
Старынин Валерий[досье]
А что есть проектирование моста или самолета?
спустя 27 минут [обр] Старынин Валерий(0/57)[досье]
Спасибо. Очень содержательно. А кто может подробнее, со ссылками на материалы?
спустя 23 минуты [обр] Даниэль Алиевский(0/125)[досье]

Старынин Валерий[досье] Ссылок не дам. Литературы на эту тему немеряно. А вот подробнее можно.

Проектирование - это когда вначале делается проект. Архитектурная схема, каркас. Как именно - вопрос более частный: вроде как, есть целые технологии проектирования софта. Лично я воспринимаю проектирование как некий иерархический процесс. (Конечно, речь о проектировании "сверху вниз".)

Вначале появляется смутная идея - нечто надо сделать, и как это примерно может выглядеть. Например, в процессе обсуждения с коллегами - генерация идей от 5 минут до пары часов.

Далее идет обдумывание. Если в принципе подход кажется осмысленным, то появляется текстовый файлик с основными идеями. Постановка задачи, технологию представления данных, используемые алгоритмы и т.п. Каверзные вопросы, на которые надо будет найти ответы. Самые грубые прикидки по срокам.

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

Через некоторое время, когда в принципе все "утрясено", файлика становится недостаточно: пишутся первые модули на языке программирования. Но - лишь самые общие декларации самых очевидных интерфейсов, без каких-либо реализаций. На этом этапе проект "спускается с неба на землю": выявляется, какие же еще придется написать модули, какова примерно должна быть иерархия классов. На этом этапе обычно пишутся основные абстрактные классы и/или интерфейсы (в зависимости от языка). А также, по возможности, пишутся комментарии - как к отдельным процедурам (не реализованным), так и ко всему проекту в целом. Все это опять же активно обсуждается, продумывается, критикуется. Сроки становятся более реальными. Весь набор модулей обычно также многократно переписывается - все в том же, предельно общем и урезанном виде. Но здесь число переписываний уже поменьше. У меня число радикальных переписываний с нуля на данном этапе редко превосходит 5-7 раз.

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

Это уже ресурсоемкий этап. Цель его - протестировать, насколько получаемое решение удобно, элегантно, расширяемо. Хотя 99% функциональности все еще не работает (точнее, выдает тривиальные, возможно малоосмысленные результаты), но можно уже посмотреть, как будет использоваться готовое решение. Становится очевиден необходимый объем работы. Например, может выясниться, что придется реализовать 1000 однотипных функций - откуда будет следовать, что при проектировании была какая-то ошибка. Может обнаружиться, что добавить еще одну возможность в решение очень трудно (надо добавить не один класс или метод, а переписать реализации сотни методов). И так далее: есть много причин, по которым система может зайти в тупик. Короче, здесь архитектура проходит всестороннее тестирование.

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

Все предыдущие этапы - это и есть проектирование. Далее начинается собственно реализация алгоритмов, оставленных ранее "на потом". И все последующие этапы - отладка, тестирование, профилирование, оптимизация, сопровождение, полное документирование (если оно не было сделано при проектировании), маркетинг, вплоть до последних этапов - получения кучи денег и их проматывания :-) Если архитектура спроектирована грамотно, то написание алгоритмов не потребует ее переделки.

Примерно, так - если "по-любительски". А вообще-то, повторяю, проектирование архитектуры программных средств - тема настолько популярная, что не понимаю, откуда проблемы с поиском информации. Почитайте хотя бы про паттерны и антипаттерны проектирования.

спустя 1 час 14 минут [обр] Иванов Михаил aka Ivanych(0/70)[досье]

Даниэль Алиевский[досье]
Хм. Красивое описание несуществующего явления.

Денис Ибаев aka Dionys[досье] меня обогнал - я хотел привести те же сссылки. В свете изложенного там - нет программистов, которые не проектируют. Таким образом, нельзя сказать, что один код был спроектирован, а другой - "просто написан".

спустя 48 минут [обр] Алексей Волков, он же «Росомаха из Флориды»(0/468)[досье]

В большинстве случаев с бесплатными самостоятельными проектами (awstats/PMA/PHP + почти всё, что лежит в PEAR/CPAN) написано потому, что людям нужна та или иная функциональность, но писать „правильные программисты“ будут либо за немеряное количество бабла (то есть за зарплату — это и есть „немеряное количество“ по меркам одиночек, которым нужно „нестандартного“), либо за интерес. Интерес возбуждается крайне редко — большинство встреченных мне „правильных программистов“ — крайне консервативные люди.

И поехали — „мне нужна статистика и анализатор логов, помоги написать? У меня есть такие-то, такие-то требования, ага? — а нафиг? — ну, ничего больше нету. — Да лана! Вон, есть Вебтрендс, у меня кряк есть, хочешь? Ну, или вон Вебалайзер/аналог. Да и вообще, ну его, большой какой-то объём работы, лень изобретать велосипед.“

Алексей В. Иванов, как автор нескольких подобных дилетантских проектов, с ответственностью заявляю: прошу помощи регулярно у „правильных программистов“. Но все они — вот ведь какая штука — очень заняты. Или делают не так, как надо, а так, „как правильно“ (это часто убивает проект). Поэтому остаётся у профессионалов учиться в деталях, через консультации, а основной каркас писать силами одиночки или, если очень повезёт — группы волонтёров.

Так что хороших навыков кодинга мало. Хороший кодер — не всегда хороший (инновационный, грамотный, открытый к новому) разработчик. И тем более не всегда — хороший менеджер или хороший специалист по работе в команде. И почти всегда — тиран и деспот, который хочет, чтобы было так, как он считает нужным, а не так, как просит заказчик или предлагают коллеги (пусть даже этот заказчик неформальный, а коллеги имеют в два раза больший опыт).

„Нет, такой хоккей нам не нужен.“

спустя 11 минут [обр] Алексей Волков, он же «Росомаха из Флориды»(0/468)[досье]

Переход на личности (надеюсь, автор темы простит): наш самый главный и самый замечательный Тиран и Деспот в лице Андрея Новикова — хороший пример специалиста высокого класса, который:

  1. занят;
  2. очень медленно соглашается на внесение новых решений;
  3. не соглашается на использование чужих велосипедов и берётся за свои, потому что „так правильно“.

Слава Аллаху ещё, что Андрей соглашается хотя бы обсуждать какие-то нововведения и новые подходы, а с лагом в полгода-год-два (увидев, как похожие решения воплощаются в других сервисах) даже соглашается на их необходимость (и ещё через год реализует, потому что см. п.1 выше).

спустя 1 час 39 минут [обр] Даниэль Алиевский(0/125)[досье]

Иванов Михаил aka Ivanych[досье]

Хм. Красивое описание несуществующего явления.

Это уже почти наезд :-) Я ж не зря написал: "Лично я воспринимаю проектирование как..." и т.д. Я попросту описал, как я обычно работаю. Конечно, не всегда - для простых задачек "на неделю" все этапы гораздо короче. И понятно, что и я не всегда "работал правильно", были исключения (о чем потом приходится жалеть). Но стараюсь именно так. Иначе программировать просто противно, доходы тут ни при чем.

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

Кто здесь программирует аналогично, поднимите руки :-)

спустя 1 час 1 минуту [обр] Иванов Михаил aka Ivanych(0/70)[досье]
Это уже почти наезд :-)

Да ни боже мой:)

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

Поэтому говорить "у этой программы был плохой проект" некорректно, ну нет такого явления, как абстрактное "проектирование программы".

А методика у всех своя, это да.

спустя 7 минут [обр] Иванов Михаил aka Ivanych(0/70)[досье]

В догонку.

А вот сказать "эта программа плохо спроектирована" можно.

Получается, что нельзя сказать себе - "Вот сейчас я буду грамотно программировать. Напишу правильный проект и потом по нему накатаю классную программу". Можно только вылизывать ее в процессе (что Вы, собственно, и описали) и закончив сказать - "Во! Получилось круто!". Или - "Да... Все переделывать нафиг..."

спустя 30 минут [обр] Даниэль Алиевский(0/125)[досье]

А я и не утверждаю, что создание программы делится на проектирование и кодирование. Мое "проектирование", на 90%, сводится к написанию программного кода - проектного. Я лишь говорю, что программирование без проектирования - типа сразу сели ваять нечто эдакое - обычно приводит к хорошо известному безобразию.

"Верхние этажи" создания программы - чистое проектирование, "нижние" - алгоритмика, реализация процедур. Верхние этажи гораздо меньше по объему, поэтому их пересмотр и переписывание обходятся на порядки дешевле. Чем выше уровнем мы начнем тестировать, критиковать и переделывать решение, тем больше шансов за осмысленное время создать нечто удобоваримое.

спустя 32 минуты [обр] Иванов Михаил aka Ivanych(0/70)[досье]

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

А о чем мы тут говорим? Я что-то нить потерял...

спустя 3 часа 26 минут [обр] Андрей Новиков(0/1242)[досье]

Старынин Валерий[досье], достаточно хотя-бы спланировать развитие.

Алексей Волков, он же «Росомаха из Флориды»[досье], вот только не надо говорить, что любой бесплатный код не спроектирован или плохо спроектирован. Я могу привести много примеров хорошо продуманного бесплатного софта, который писался именно, чтобы было, а не чтобы поразить мир.

спустя 19 часов [обр] Старынин Валерий(0/57)[досье]
Спасибо всем за ответы.
спустя 3 дня [обр] Дмитрий Котеров(1/912)[досье]

Я вот заметил, что править баги в грамотно написанном и спроектированном (чужом!) проекте (Cocoon, Castor, Eclipse и многих проектах на Java и C++) обычно сильно сложнее, чем в "куче мусора" (Apache, phpBB и т.д.). То же самое и с объектной ориентированностью: ОО-программы поддаются правкам стороннего человека с большей "неохотой", чем "не-ОО" программы.

Это, правда, субъективное ощущение.

спустя 6 лет [обр] Евгений Седов aka KPbIC(2/176)[досье]
М Перенесено из форума "Прочее"
Powered by POEM™ Engine Copyright © 2002-2005