Как стать автором
Обновить

Комментарии 63

На фоне тотального алкоголизма этих дней это больше похоже на юмор. Но, прошу заметить, действительно, часть проектов быстрее, легче сдавать спагетти. Иногда весь, иногда какую-то стадию.
+1, сам ожидал увидеть тэг «юмор»
Подождите, так это всё таки не шутка? о_О
«Гибкий, как спагетти, программист» — надо будет запомнить…
Честно говоря, я запутался. Не могу понять: или это стеб, или я ничего не смыслю в программировании.
В каждой шутке, как известно… ;)
НЛО прилетело и опубликовало эту надпись здесь
Главное в любой другой день сомнений не возникло бы, но вот 1-го января начинаешь сомневаться и в своей адекватности и в авторе :)
НЛО прилетело и опубликовало эту надпись здесь
структура проекта – лишь инструмент. если вы разложите файлы проекта по директориям, это не значит что проект станет более структурированным. так же и с ООП :)
Спагетти без соуса Болоньез?! Это издевательство, а не стёб…
Не волнуйтесь, вы разбираетесь в программировании.
В «спагетти» код очень легко вносить частные изменения, но тяжело общие. В ООП код ноборот легко общие, внедрением дополнительного слоя абстракции, но тяжело изменить чтото в частности. Поэтому все проэкты к своему окончанию таготеют к «спагетти», т.к. обобщеных изменений все меньше, в то время как количество небольших локальных ценджей становится очень много.
Возможно на этапе сапортинга написаного кода уже и нет смысла в поддержке красивого ООП, но начинать проект как «спагетти», по моему, не стоит.
Когда читал про спагетти, вспоминал один из проектов и возникала мысль: какого черта? код пишут программисты, а не менеджеры, если им так нравятся спагетти, то пускай сами пишут. Но для начала пускай попробуют вникнуть в спагетти… ну потом я все же стал думать что все это стеб :)
А можно пример, как в ООП коде сложно «изменить что-то в частности»?
О спагетти подходе к авиации, я не знаю какому самолету принадлежит эта кабина — но это точно старый самолет

habr.habrastorage.org/post_images/f8d/788/169/f8d788169ba95d9e2b5fe3d50662b150.png
Вот кабина Су-35 (у Т-50 примерно такая-же)

i027.radikal.ru/1105/d9/38c46a1ed241.jpg
Дело в том что в современном самолете много параметров и как каждому отдельный дисплей давать, так это пилот с ума сойдет — щас эргономика движется в сторону ситуативности, что тебе щас нада то приборы самуля и покажут.
Вы уверены, что за последние 50 лет самолеты в своих параметрах продвинулись настолько сильно, что стоит доказывать наличие сводных экранов именно с этим?
На сколько мне известно, возможно я ошибаюсь, но самолеты летают все те же расстояния, с теми же временными интервалами и при тех же расходах топлива.
Ну и конечный вопрос: вы уверены, что экраны и рычажки истребителя сильно схожи с пассажирским ту 154?
>>>за последние 50 лет самолеты в своих параметрах продвинулись настолько сильно

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

>>>и при тех же расходах топлива

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

ПС: А вообще сравните хонду сивик конца 80х и версию 2009 года, вроде не самолет — а путь развития то какой.
Мне кажется, что вы имеете далекое отношение к авиации.

Для упрощения задачи сравните общедоступные ТТХ хотя бы Су 27 и Су 35. Посмотрите разницу между датами их выпуска и принятия на вооружение.

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

Сравнил, вышел во двор и сравнил, хонду 5 поколения и вот, свеженькую, но она седан, наверное это не скажется на сравнении? Ну так их характеристики ничем выдающимся не отличаются. Если для вас наличие ЖК дисплея стало доступнее, это не значит, что изменения глобальны: о) Более того, это не значит, что данные на нем более понятны. Я вот очень привык к аналогу: о)
Ухаха — мне понравилось, что в архитектуре тоже спагетти подход используется. Сразу захотелось свой вход в метро на 27 этаже. И аэродром в подвале.
Вот любят сравнивать архитектуру, строительство и программирование… Блин.

Сколько в год строится новых зданий (не новых зданий по уже просчитанным проектам, я в теме не разбираюсь, извините), а новых зданий с расчетом всего до последнего болта? А сколько разрабатывается приложений? В мире, под все платформы, прошивок всякой электроники?

Как часта ситуация «дом построили, через пол года снесли и построили новый, через пол года перестроили изнутри дом на 60%»? А в программном продукте она нередка, и более того, возможна. И я не могу сказать, что это плохо — код гибче бетона. А то, что каждый раз нужно напрягать извилины, что бы перестроить изнутри программу, что бы та при этом не рухнула… не знаю, грешно на это жаловаться, как по мне.
В основном там каждый раз делают все заного с нуля (но ограниченны технологиями строительства, можно сравнить с фреймворками).
И точно также в процессе строительства возникает необходимость все переделывать (например после того как построенно уже этажей 5, требуется увеличить этажность на 6 этажей к изначальному проекту и изменить функциональное назначение уже запроектированных), но там это все сложнее в том плане, что кроме переделывания требуется, еще пересогласовать в инстанциях.
Наверное в 18 веке было по другому и сначала проектировалось а потом строилось, а вот сейчас тк все хотят по больше денег заработать в минимальные сроки зачастую строить начинают еще до того как проектировать.

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

Т.е на самом деле сравнение со строительством весьма корректно, не случайно патеррны проектированния архитекторы придумали.
аналоги легаси кода там тоже есть — это может быть реконструкция существуещего строения, да и на индивидуальном уровне вам могут просто придти файлы из другой организации в таком виде, что с ними будет не возможно работать
Конечно, придётся уволить нескольких ключевых разработчиков, которые не будут согласны с новым подходом, но ведь станет возможно писать простой код
Можно сделать ещё лучше: уволить всю команду сразу, а на сэкономленные деньги нанять настоящих гуру спагетти-методологии, которые всосали её с молоком матери и дадут сто очков вперёд любому традиционному кодеру. Эти люди родом из Индии и Пакистана, и среди их преимуществ — не только виртуозное владение методологией, но ещё и уникально экономные часовые рейты порядка $6. Какой ещё специалист экстра-класса обойдётся вам так дёшево? Воистину, скромность — черта, присущая лишь настоящим гениям.
НЛО прилетело и опубликовало эту надпись здесь
Пусть этот человек напишет обёртку aka интерфейс, через который вы и будете работать.
НЛО прилетело и опубликовало эту надпись здесь
Вот оно, функциональное программирование!
Если ошибка в коде, никакие обертки не помогут.
По-моему вы поспешили с этой статьей. Январь на дворе, а не апрель.
«без комментариев»
«с комментариями» что ли?!
Мой опыт говорит, что система должна быть грамотно разбита на кусочки, а в каждом кусочке может быть сколько угодно спагетти-кода.
При использовании спагетти-методологии важно правильно выбрать инструмент разработки.
Хороший, добротный спагетти-код, можно, к примеру, запросто наваять на LabVIEW:

Спасибо за LabVIEW, выглядит интересной темой!
LabView, ИМХО, как раз пример, как сделать плохо.
Из самого раздражающего: когда пишешь на LabView блок, дополнительно еще держишь в голове, а вместится ли этот код в тот маленький прямоугольничек оставшегося свободного пространства, или придется думать, как бы раздвинуть всё нераздвигаемое вокруг еще немного.
Или когда надо править код на ноутбуке без мышки

Как мне показалось LabView — это маркетинговая попытка показать, что программировать легко могут и не программисты, с помощью прямоугольничков и проводков
Почему вы ошибки проектирования приписываете к недостаткам LabView? Там точно так же можно объединять части кода в целое и представляться они будут единым блоком. А если у вас в LabView не хватает места на одном экране, чтобы увидеть всю композицию, то представьте себе код без вызовов функций в несколько тысяч строк и сравните с ним. Хорошая схема ничем не отличается от хорошего кода пока и то и то мы воспринимаем зрительно.
Немного некорректное сравнение. Возьмите любую более-менее сложную программу на LabView — в один экран не уместится. Но я говорил не об этом. Допустим, есть какой-то фрагмент, когда, в который надо немного добавить кода в соответствии с корректировкой задачи. И первое, о чем придется задуматься: хватит ли места внутри прямоугольника под этот код, а если не хватит, то где его брать, учитывая, что вокруг всё пространство занято
Так ведь и я о том же.
Вот у нас есть метод и там 20 строчек кода, нам нужно добавить еще 5. Тут же возникает вопрос — не пора ли нам создать новый метод (прямоугольник) и сократить текущий метод на 10 строчек или все таки впихнуть эти 5 строчек (станет 25) в ущерб читабельности.

Возьмите любую более-менее сложную программу на LabView — в один экран не уместится.

Все строчки кода сложного проекта тоже на экране не уместятся.
Если размер функции определяется разработчиком в соответствии с архитектурой — это одно, а если ограничивается размерами прямоугольника в который надо эту функцию вписать — это совсем другое. И, увы, хорошей архитектурой решить проблемы трудно читаемого и трудно модифицируемого (имею ввиду размещение компонентов) кода, не всегда получится. Порой приходится делать единственно возможным, некрасивым способом
Вы как-то очень уж серьёзно к вопросу подошли… Спагетти-образный код можно где угодно сделать, просто любой LabVIEW программист практически неминуемо пройдёт через эту стадию, так как графическая среда очень к этому располагает. С опытом обычно приходит понимание того, как вести разработку на LabVIEW, чтобы добавление кода осуществлялось легко и не приводило к спагетти, при этом большинство диаграмм не превышала бы размеров одного экрана (в большом проекте могут быть тысячи таких диаграмм). Тут как бы параллельно с разработкой в голове идёт непрерывный процесс функциональной декомпозиции и диаграммы не разрастаются с увеличением сложности. Ну и частый рефакторинг, конечно необходим (диаграмму выше это не спасёт — там заново переделать проще).
Красивая теория. В LabView она заканчивается, когда начинается практика, и получается «код» как на картинке выше
Не, это не теория, это практика. Я просто в LabVIEW больше десяти лет работаю, у нас в отделе трое LabVIEW — программистов и мы разрабатываем проекты весьма приличных размеров (при этом разработка идёт «по учебнику» — ну то есть спецификации, контроль кода и всё такое). И нет такого спагетти — кода, как на картинке выше. В LabVIEW уровень вхождения относительно невысок, но простота LabVIEW иллюзорная — чтобы стать профессионалом, требуется года этак три-четыре активного программирования — тогда теория выше постепенно станет практикой.
Я бы хотел посмотреть, как бы вы красиво выполнили код такой несложной задачи, вполне практической: Имеется 30 датчиков одинакового типа, каждый датчик в реальном времени выдает 4 параметра, допустим float ток и напряжение и два boolean параметра: датчик исправен и датчик включен. Надо отобразить показания всех датчиков на одном экране, допустим 3 ряда по 10 слева направо, сверху вниз, в виде 2 танков (ток, напряжение) и 2х подписей (включен/отключен, исправен/ неисправен) на каждый датчик. Данные от датчиков можно эмулировать любыми функциями от времени и индекса датчика.

На Delphi, например, эту задачу я могу выполнить за полчаса, красивым кодом, с короткими методами. Сколько времени уйдет, чтобы сделать это на LabView и насколько это получится красиво и без лапши?
Ну вот как-то так, что-ли, если «в лоб» (мне, правда, пришлось в пять минут уложиться, ибо бесплатный Jing, что под рукой оказался, только пятиминутные ролики даёт делать):

Для тока и напряжения я синус с косинусом от суммы времени с индексом взял, а индикаторы по рандому моргают.
Спасибо! Был неправ. Последний раз в LabView работал в 2005 году, тогда так сделать было нельзя, похоже, язык сильно продвинулся с тех пор
Что-то в вашей компании не так, если методологию написания кода выбирают менеджеры, а не программисты.
Кстати, а еще спагетти можно варить и есть на обед! Тоже неплохая экономия бюджета.
Пойду перепишу пару проектов пока не поздно.
Я требую пояснения профита от спагетти-методологии в системном администрировании(см. картинку в статье), или «юмор»+«опасно для людей с эпилепсией и неустойчиво психикой» в теги.
Для приведённой картинки, где изображён двухсекционный гамак по мотивам сверхурочных работ в крупном датацентре, спагетти-подход позволил сделать цельную конструкцию без диспропорциональных дыр и дифференцировать жёсткость по её поверхности, что положительно скажется на качестве ночного отдыха персонала.
(Тег "impromptu" стоял изначально.)
В статье описан злой анти-подход. Давайте все начнем индусить, писать спагетти код и потом умрем от количества багов. Автор пишет, что типа добавление одной функции очень быстро делается. Только стоит их добавить 20 — и крен кто потом найдет, где эти функции запрятаны. Метод для компаний, нанимающих низкоквалифицированных индусов и пытающихся с помощью них делать неподъемные проекты. Лучше как раз наоборот как можно раньше прививать культуру написания хорошо структурированного и поддерживаемого кода, рассказывать про такие вещи как SOLID, антипаттерны, дать почитать книгу Code complete, итд Но главное — это практика.
С каких пор любое отклонение от того, что написано в книге, методологии, справочнике великого программиста стало индусским кодом или кодом написанным низкоквалифицированными специалистами?
Не любое, а изложенное в статье.
Вы серьезно? :)
Из моего детектора сарказма полетели искры, а потом потух экран, и теперь ничего не показывает.
Мне вот интересно, спагетти-методология имеет какое-то отношение к летающему макаронному монстру? xDDD
Дочитал, полный негодованием.
Зато лишний раз задумался о том, что такое хорошо, а что такое — плохо.
А аббревиатура SDD теперь будет обозначать также Spaghetti Driven Development.
В статье подробное и развернутое описание давно известной методологии.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории