Как писать код, чтоб не сойти с ума и не впасть в депрессию

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

Как же кодеру не докатиться до жизни такой? Просто. Использовать принцип: проще не дать баге появиться, чем потом ее разыскивать.

Для этого надо писать код отдельными модулями, каждый из которых имеет ограниченный законченный функционал. Этот модуль проверять на работоспособность и совместимость с общим дизайном. И только после того, как убедился, что функционал исправен, и по ресурсам не конфликтует — включать модуль в общий сорец или наращивать его функционал.

Приведу два примера того, как надо и как не надо делать.

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

Неправильно:
1. Проверяем плеер (без эффекта) — играет.
2. Делаем эффект (без плеера) — работает.
3. Добавляем одно к другому — падает на третьей секунде.
4. Впадаем в ярость/депрессию.

Правильно:
1. Делаем замерялку тактов с фиксацией максимального значения.
2. Запускаем плеер, проигрываем весь музон, смотрим, что там намерялось.
3. Делаем аналогичное измерение эффекту без плеера. Если эффект использует поведение, основанное на генераторе случайных чисел, пишем тест, который гоняет его долго с разнообразными значениями стартового сида (благо эмулятор умеет «намлок», а РС у нас быстрый).
4. Складываем пики потребления тактов для обоих случаев и видим, что их сумма больше, чем тактов во фрейме. Неважно, насколько больше — важно, что эффект грохнется с гарантией и возвратом денег.
5. Фиксим. Повторяем итерацию.

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

Неправильно:
1. Наскоряк спрашиваем как там чо программится в этих ваших спрайтах.
2. Пишем рассчет синуса. Прикручиваем спрайты к синусу.
3. На экране нифига/мусор/глюки.
4. Идем за пигом.

Правильно:
1. Пишем тест для вывода одного спрайта.
2. Усложняем его функционалом изменения координаты по всему диапазону. Добиваемся, чтоб спрайт двигался.
3. Пишем тест для изменения палитры, добавляем второй спрайт и т.д.
4. Прикручиваем синус.
5. Если все-таки не работает, пишем значения спрайтовых дескрипторов в отладочный массив и вдумчиво анализируем то, что записалось, сравнивая с тем, что ожидалось.

Надеюсь, мессадж прошел. Удачного системного программрования.

P.S.
Все события и персонажи данного литературного произведения выдуманы. Любые совпадения с реально живущими или умершими для сцены лицами случайны.

26 комментариев

avatar
Не мучайся сделай в запиляторе)) Какой бы ты не был рст, ааа с его анимацией тебе не победить. Пока ты с ума годами сходишь, Ааа за месяц делает 20 частевое трахмо. Визуально тот же код. Зачем платить больше, если тайд все отстирывает?

Жизнь одна оставь место для прекрасного! Бабы!!!
  • AAA
  • -7
avatar
4. Идем за пигом.
за сигами ;)
Надеюсь, мессадж прошел.
я бы поставил на то, что он прошел мимо. те, кто это всё умеют — им и так понятно, те, кто не умеют — не научатся.
  • psb
  • +1
avatar
Ты просто пессимист!
avatar
да, нас, реалистов, частенько так называют;)
по крайней мере, я еще ни разу не видел обратного примера.
avatar
Довольно баянистая картинка. Если убрать надписи, то она точно отражает суть #z80.
avatar
Именно так, тех кто демо делает по жизни обладают дерьмом, советы дают, а те кто дает сидят на ветке и ничего не делают. Попав впервые на пентеву испугаешься и оставишь демомакинг, но ааа уже привык что он один демо делает. Остальные если и делают то на пати, как правило это гоблин, которого кстати да! Говном поливает ааа)) Вот и творят два голубя с нижней ветки))
avatar
ААА ошибается, вернее «Заклюй ближнео и насри на нижнего».
avatar
парни, успокойтесь, прошу
avatar
пример 1: если лень/некогда так заморачиваться, достаточно просто выключать прерывания во время эффекта, торможение музыки будет знаком о криворукости автора.
avatar
И ты услышишь как музон притормозится на 1 фрейм за 3 минуты?
avatar
парни, пишите блоками. и тестируйте — смотрите отладчиком.
если вы не уверены что это работает и пишете дальше — вы будете наматывать баги на моток кода.
дальше — АДЬ
  • VBI
  • +5
avatar
где-то я говорил выше — отладчик не имеет функциональности. Заодно свеж пример, когда унрыл эмулирует работу не так, как железо(например Merhaba).
показателен тот момент, когда эмуляторописателя Амстрад СРС буквально рвут как тельняшку на британские флаги в случае косой эмуляции демок.
avatar
тут по моему уже классика. либо пишут кучу текста и ловят кучу багов. либо методом последовательных приближений.
я лично стараюсь писать вообще строчками :)
avatar
Я не знаю, что повело меня написать этот текст. То ли желание систематизировать накопленный опыт и им поделиться, то ли это крик души, возникший в ходе наблюдения за методами «отладки» «демокода», так популярными в наших рядах :) Однако практически, я трачу на отладку багов все меньше времени, и методы отладки постепенно выкристаллизовываются в набор правил.
avatar
Привет! Извини, что не по теме...
Я думал тебя уже в ДНР (или ЛНР) застрелили давно, т.к. ты вроде выше всех прыгал там, типа что не москаль (без обид, но помню как ты на ирц кирпичи откладывал по поводу РФ, РПЦ, Европы (так хотел стать европейцем, но не судьба видимо, не судьба...)) и пр.
Выходит не демобилизовали тебя. Болеешь что ли? Ты кажется говорил, что у тебя пробемы с весом… Набрал? Надеюсь, что да — времена то у вас не из легких… Или какие-то другие причины? Возраст вроде у тебя призывной для «таких» времен.
Хотя, если не годишься «ридну батькивщину» защищать, то это тоже хорошо — будет кому ts-config держать, доки писать, рулить где верно, а где нет. Тут такая ситуация — либо в Европу, как ты мечтал, либо тс-конфу держать, аналогично. Да и что там в Европе? Сторожем работать разве что, на панов поляков ваших.
Как по мне, то тебе больше подходит второе — тсконфу держать, да и пользы больше, и вроде не европеец)))) (шутка, конечно — европеец))))
Рад что ты жив-здоров, желаю творческих успехов и т.д. и т.п. :)
  • sand
  • -15
avatar
Хорошо, что ты появился, но давай без политики? Не нужно это никому, на самом деле.
avatar
Ну кому-то это нужно. Но не нам. Не здесь.
avatar
Да какая тут политика? Я за человека радуюсь, что жив-здоров, может творить и быть любимым :) Я давно его не встречал, даже на irc — вот и заволновался, подумал что, может пленили его и держат в рабстве, ну или пристрелили где нибудь. Но теперь вижу, что вот он! Продолжает свою деятельность, имеет кучу фанатов и приверженцев, растет так сказать, прогрессирует. Радуюсь )))
avatar
sand, если ты продолжишь базар в этом же духе, получишь бан
avatar
Ручной мартышке будет достаточно игнора, ящитаю.
avatar
Не осилил, в чем претензия? И что такое «базар»? Ты гопник?
А на счёт "бан получишь", если хочешь, конечно самоутвердись, а лучше сходи и сделай это в творческом плане.
avatar
Пожалуйста, не используй площадку для троллинга, политоты и сведения личных счетов. Это неуважение к другим участникам, в том числе и лично ко мне, поэтому, не говоря за всех, я, например, был бы очень признателен, если бы ты закончил этот ненужный «стёб» и написал что-то конструктивное по спектруму, что было бы всем интересно почитать, а не вот это вот ненужное и неуместное.
avatar
Троллинга ноль, политоты ноль, личные счеты уже давно сведены, стёба ноль!!! Просто рад видеть человека, которого не затронула ситуация за лично его взгляды — это очень хорошо, и я считаю что это настоящее везение. Я рад что tsl получил именно то, о чем так долго писал в irc.
Дальнейшей беседы на эту тему не вижу смысла вести. Каждый понял, так, как хотел понять. Пусть будет и политика и стёб, если кто-то так увидел.
Как говорится «каждый видит то, что хочет увидеть»
avatar
sand, ещё раз.
это место — для обсуждения сцены, релизов, подходов, способов. Для общения о хобби. Поболтать об этом — welcome.
Но если ты собираешься сводить счёты, разводить политоту да срачи — тебе здесь не место.
ищи другие ресурсы.
avatar
го в ирку или зассал?
avatar
надеюсь автор топика сам рассудит дружеский ли это стеб или политический…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.