Pull to refresh

Comments 35

Честно признаюсь, что весь текст субботним утром не осилил, но первую треть было весьма интересно прочитать. Побольше бы таких статей на Хабре (и не субботним утром).
Честно признаюсь, что весь текст субботним утром не осилил, но первую треть было весьма интересно прочитать.

Да я и не рассчитывал, что многие целиком осилят всё статью. Начало там еще вполне общее, а сеть уже сложна для понимания.

Побольше бы таких статей на Хабре (и не субботним утром).

Спасибо за отзыв! А статья вышла в пятницу днем :-)
В 2 часа ночи субботы.)
Мне сейчас более интересна сеть на мобилках, поэтому даже не рискнул читать код для PC, чтобы «компот»(с) в знаниях не случился.
В 2 часа ночи субботы.)

Не совсем так… это я её разделил на 3 части в субботу, а сначала была одна большая часть.

Мне сейчас более интересна сеть на мобилках, поэтому даже не рискнул читать код для PC

Сети все одинаковые :-) Эта сетевая библиотека libuv, про которую я рассказывал, есть на андроиде.
Несущественное замечание: доставкой сообщений в сети IP занимается сетевой стек, инициируют передачу и приём пакетов специальные программы (в вашей аналогии — почтальоны). TCP (заказное письмо с уведомлением) и UDP («обычное» письмо) — это протоколы, т.е. формализованные способы передачи пакетов в сети, поддерживаемые сетевым оборудованием.
доставкой сообщений в сети IP занимается сетевой стек, инициируют передачу и приём пакетов специальные программы (в вашей аналогии — почтальоны). TCP (заказное письмо с уведомлением) и UDP («обычное» письмо) — это протоколы, т.е. формализованные способы передачи пакетов в сети, поддерживаемые сетевым оборудованием.

Ну да, всё правильно. Модель OSI и всё такое… :-)
UFO just landed and posted this here
Напрмиер, помимо кода, добавить служебные доксигеновские файлы, в которых будет дополнительная информация по проекту. Хотя бы тот же порядок изучения API и ссылки на примеры и прочее. Т.е. «голый» автоматически сгенерированный документ не очень удобен, но если заранее позаботиться о метаданных и прочей информации, то весьма удобно получается. Разумеется, если код документировался с расчётом на автодокументирование, а не просто ненужный флуд в комментариях.
UFO just landed and posted this here
Лично мне, к сожалению, приходится работать не только в условиях отсутствия ТЗ, но и без чёткого понимания, каким продукт будет через 4-5 лет. Так что UML диаграммы если и использую, то «на бумажке», без регистрации и утверждения… В общем, в Аду для меня есть отдельный методологический котёл. На краткосрочном периоде (1-2 года) не вижу проблемы в работе без документации, т.к. в нескольких тысячах файлов запутаться сложно (если ты их и написал).
А вот в реально больших проектах без ТЗ никуда. А если есть ТЗ, то есть и спецификация классов, интерфейсов взаимодействия и всего прочего, т.е. составить диаграммы взаимодействия относительно просто. А чтобы не было мешанины, нужно абстрагироваться. Даже на более высоком уровне абстракции, чем псевдокод.
Интересно ваше мнение, как правильно проектировать такие сложные приложения?

Наверное, существуют разные подходы. Я, например, собираю сложную программу по кирпичикам. Заранее не пишу никаких дизайн-документов и ставлю себе финальную задачу лишь в общем виде. Т.е. начинаю с малого и потом наращиваю, пока не получу примерно то, что меня устраивает. Вероятно, для промышленного производства программного обеспечения такой способ не подходит, но там задействована куча народу, должны применяться юнит-тесты и даже сама сборка производится полностью в автоматическом режиме. Я же просто беру тетрадь и пишу в ней карандашом то, что я хочу сделать. Пишу только то, что я хочу сделать сейчас — это помогает сосредоточиться на текущей задаче. Таких тетрадей у меня много, и там, практически, карандашом записано всё, что я сделал, но общими словами. Но… очень часто реальная реализация отличается от той, которую я записал в тетради, так как часто в момент, когда я начинаю реализовывать, мне приходит в голову более удачное решение. Эти тетради я никогда не читаю — они просто типа «летописи», которая отражает этапы моего движения вперед.

Ведь нереально хранить весь проект приложения просто в голове

Нереально, конечно. Например, мой основной проект, который меня кормит, Magic Particles https://www.youtube.com/watch?v=4hUGSDuwJd8 (движок частиц для игроделов http://astralax.ru/titles) сейчас содержит лично моих строк кода чуть более 400 тысяч штук без учета комментариев в коде. Т.е. о том, чтобы помнить там что-то речи не идет. И я, действительно, очень быстро забываю тонкости, но я знаю собственную логику «как бы я сделал» и обычно мои догадки на эту тему подтверждаются, когда мне приходится вспоминать. И еще я в последнее время стараюсь смотреть «на шаг вперед» что-ли. Т.е. если я вижу, что какой-то класс может мне быть полезен в будущем, то я обычно сразу делаю его в расчете на будущее, даже если сейчас мне эти возможности и не нужны. В результате иногда натыкаюсь на ситуации, когда через какое-то время забываю тонкости и пытаюсь дописать новый функционал, а, оказывается, что он либо уже реализован, либо заранее заложена сама возможность реализации.

Ответ какой-то очень субъективный получился, но как-то по другому не формулируется. Что тут еще добавить… сейчас я считаю одним из самых важных качеств программы — это возможность быстрого портирования на другую ОС. Я в свое время «сел в лужу» с этим вопросом и с игрой, и с Magic Particles так как Apple в тот момент находился в состоянии «почти мёртв» и в России особо никто им не интересовался («мыльниц» с iOS тогда ещё не придумали). И я понял, что лучше такие ошибки не повторять, так как расстановка сил на рынке постоянно меняется.

Если у вас продукт, который включает в себя API, как в случае с Magic Particles, то имеет смысл писать нормальную справку по этому API. Это экономит просто массу времени, так как пользователи смогут там найти многие ответы самостоятельно, а иначе они буду дергать разработчика. Я до сих пор пишу справку руками, взяв за основу формат MSDN, причем у меня есть русская и английская версия, между которыми я стараюсь поддерживать соответствие. И это отнимает много сил, как это кажется на первый взгляд, но на самом деле — это экономит силы на помощи, которую приходится оказывать пользователям.
UFO just landed and posted this here
По сути, ваш подход похож примерно на этот вариант:

В общем, да. За исключением того, что я фиктивных классов обычно не делаю.

Ещё интересно, а какие-то визуальные схемы вы используете — типа диаграмм классов/связей и т.д.? Или у вас всё получается без них.

Я пользуюсь только тетрадкой, карандашом и обязательно стёркой. На компьютере вообще никогда ничего такого не пишу — сажусь за него, только когда примерно представляю, что нужно программировать.
image
Левша?

Вообще-то правша :-)
Наклон влево, я так левой рукой пишу :-)
Ну, у меня так правой получается :-)
Титанический труд! Алексей, мое Вам искреннее восхищение и уважение.
Читалось на одном дыхании. Спасибо :)

С удовольствием бы «пощупал» Вашу игру, но, я так понимаю, под мак версии пока нет?
Титанический труд! Алексей, мое Вам искреннее восхищение и уважение.
Читалось на одном дыхании. Спасибо :)

Благодарю на добром слове!

С удовольствием бы «пощупал» Вашу игру, но, я так понимаю, под мак версии пока нет?

К сожалению, пока есть только Windows-версия.

Мда. Прочитал вашу первую статью. Какое же поразительное количество труда и времени впустую. Это хотя бы помогло вам найти потом работу разработчиком? Нет?
Не следовало эту игру "возрождать" и идти на гринлайты. Надо было забыть об этом всём как о ночном кошмаре. Очень вам сочувствую, застрять на столько лет на собственноручно придуманной каторге. Уж лучше помогать штамповать пачками очередные виртуальные огороды и "найди все кристаллы одного цвета" в аппстор.


Так же не согласен и с вот этим


На мой взгляд, самым важным является код, так как он и есть, собственно, игра. Всё остальное является оформлением, но к самой игре отношения не имеет. Но игрок видит в основном оформление и часто забывает о том, что там постоянно происходят процессы огромной сложности.

Это просто смешно же. Вообще-то суть игры и есть её сюжет (или же аддиктивность игрового процесса в случае с казуальными игрушками), прописанность мира, персонажей. Да кого вообще волнует, какой у вас там алгоритм распаковки и поиска пути. Сомневаюсь что вы интересуетесь каждодневными трудностями вашей селезёнки, печени и тонкого кишечника. А там ведь такие процессы огромной сложности, угу. Человек является оформлением к своему ЖКТ, а всё остальное к его сути не относится.


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


Ну в общем, моё мнение — не нужно.

Мда. Прочитал вашу первую статью. Какое же поразительное количество труда и времени впустую. Это хотя бы помогло вам найти потом работу разработчиком? Нет?

На мой взгляд, жизнь — штука сложная, и заранее неизвестно, какие именно действия в результате принесут плоды. Поэтому я предпочитаю заниматься тем, к чему у меня есть интерес, даже если, на первый взгляд, и создается впечатление, что это не принесет коммерческой выгоды. Также я совершенно точно ощущаю, что не испытываю желания быть «наемным работником» — если бы мне нравилось выполнять чьи-то распоряжения, то я бы просто пошел «служить в армию», чего однако в моем случае не наблюдается. Кроме того, опыт предыдущего поколения очень красноречиво показывает мне, что пожизненное «хождение на работу», по крайней мере, в России — это финансовый тупик, так как старшее поколение доживает свой век в состоянии «почти нищета».

Далее… на мой взгляд, человеку в жизни желательно брать на себя задачи, которые будет непросто выполнить. Это как в «школе», когда начиная от первого класса и до последнего задания постоянно усложняются. И в этом и заключается рост. Если же продолжать вечно решать примеры из 1-ого класса, то так и останешься в первом классе. Вот я и выбрал себе задачку «по плечу», которую сделать для меня не так-то просто.
Давайте примером попробуем, вот есть люди, которые занимаются коммерцией, например, поставят пивной ларёк, посадят туда несчастную иногороднюю девчушку на 12 тыс.рублей и начинают на этом неплохо зарабатывать. И им кажется, что они при этом умнее какого-нибудь «профессора математики», которому вполне могут зарплату задерживать. На самом деле «профессор математики» просто до подобной деятельности не опускается, т.е. он для себя этот уровень уже перерос и ставить пивные ларьки он чаще всего не станет — это просто будет регрессом, и он это чувствует. Именно поэтому зарабатывают в основном не «профессора», а «коммерсанты», так как в эпоху капитализма, чтобы хорошо заработать, нужно понравится толпе, потакать её глупости и играть на её недоразвитости. Инженеры и ученые этим обычно не занимаются — не те моральные ценности.

Это просто смешно же. Вообще-то суть игры и есть её сюжет (или же аддиктивность игрового процесса в случае с казуальными игрушками), прописанность мира, персонажей. Да кого вообще волнует, какой у вас там алгоритм распаковки и поиска пути.

Из описания алгоритма поиска пути вы могли бы сделать более разумный вывод, а именно: как легко произнести фразу типа «юниты буду перемещаться по игровому полю» и как трудно это реализовать на деле. И такие выводы, на мой взгляд, делает человек, который хоть немного что-то соображает в теме разработки.
Далее все ваши рассуждения базируются на том, что разработка за вас уже кем-то проделана, а далее вы будете в редакторе модельки по полю расставлять и диалоги пописывать. Подобные мнения проистекают из того, что труд грамотных программистов прекрасно тиражируется, и по розничной цене всё это стоит символические «копейки», так как сейчас идёт битва за рынок (или привлечение толпы). Ну, прикиньте сколько реальная себестоимость того же Unity3D или UDK. Я честно не знаю, во сколько этот Unity3D обошелся, но предположим, что в 30 млн$, хотя, думаю, что эта цифра занижена (Помню, что UDK когда-то продавали за 1,5 млн$ одну лицензию). И вы поймете, что ваши «идеи» на этом фоне ничего не стоят, так как в сумме ваш вклад в игру на этом фоне равен нулю, чего бы вы там себе не нафантазировали. Да, сейчас эти «гиганты индустрии» сражаются за рынок, поэтому нужно привлечь множество неграмотных людей, которые мнят себя «носителями идей» и «создателями бессмертных сюжетов». Именно поэтому работа, которая стоит огромных денег раздается даром, но вы этого не понимаете и как любой «потребитель» не цените, так просто берете бесплатно чужой труд и приравниваете его в голове к нулю.

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

Если желаете, мы можем для эксперимента поменяться местами — я вам нагенерирую идей, а вы попробуете их сделать. Вся слава в случае успеха, естественно, мне — так как идеи мои.

Сомневаюсь что вы интересуетесь каждодневными трудностями вашей селезёнки, печени и тонкого кишечника. А там ведь такие процессы огромной сложности, угу. Человек является оформлением к своему ЖКТ, а всё остальное к его сути не относится.

Я вас уверяю, что как только у вас даже зуб заболит, как всё остальное в жизни вас перестанет интересовать. А что касается селезенки, то, если с ней начнутся проблемы, то от этого даже помирают, хотя, конечно, можно пытаться и дальше продолжать не интересоваться её «каждодневными трудностями», если у вас силы воли на это хватит. Но вроде бы люди с диабетом постоянно вводят себе инсулин, т.е. «личная жизнь» селезенки их начинается очень и очень интересовать. Т.е. ваше потреблятское отношение сразу закончится, как только пропадет возможность его проявлять.

Ну в общем, моё мнение — не нужно.

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

Святые слова.
Святые слова.

Ну, я в собственную «святость» с большим трудом могу поверить :-) А если серьезно, то образ жизни и мышление многих людей всегда вызывали у меня чувство некоторой безысходности — уж больно их много, чтобы мир на моём веку стал лучше. Хотя… общество хоть и медленно, но развивается.
Меня просто удивляет, что люди, не написавшие ни одной статьи на хабре, приходят сюда и начинают высказывать своё мнение.
А заниматься в жизни нужно только тем, что интересно, жизнь слишком коротка для чего-то ещё. Но увы, это не всем дано осознать.
Меня просто удивляет, что люди, не написавшие ни одной статьи на хабре, приходят сюда и начинают высказывать своё мнение.

Ну, интернет, к сожалению или к счастью, дал возможность высказываться всем желающим, чем «желающие» сразу же и занялись. Проблема в том, что процент тех, кто в чем-то разбирается ничтожно мал по сравнению с теми, кто просто «имеет мнение». Мнение, кстати, это довольно известное о том, что программист в создании игры стоит на последнем месте — этот бред активно пропагандируется даже на форумах, посвященных разработке игр. Косвенно, это ведет к вымиранию игрового программиста как явления. Но есть в этом и плюсы, так как те кто всё же найдут в себе силы чему-то учиться и стремиться делать сложные задачи своими руками, остаются, практически, вне конкуренции. Например, у меня один приятель с Украины переехал сначала в Германию, а потом в Швейцарию в качестве художника и специалиста по спецэффектам. А всё очень просто… своих спецов нет — компания год искала, кого бы на работу взять. И эти процессы, на мой взгляд, будут нарастать.
А заниматься в жизни нужно только тем, что интересно, жизнь слишком коротка для чего-то ещё. Но увы, это не всем дано осознать.

Да, с этим трудно поспорить.
Текст большой, хороший. Некоторые люди любят всё усложнять. Вместо того, чтобы писать под системы и языки, в которых большинство моментов уже тысячу раз продуманы и реализованы, они предпочитают изобретать велосипеды.
Текст большой, хороший.

Спасибо на добром слове :-)
Есть такая штука, она называется «встать на плечи». Сие означает, что в наше время почти невозможно сделать что-то лучше уже существующего, если начинать делать «с нуля». То есть желательно, и даже необходимо, строить свой новый продукт на уже готовом и проверенном фундаменте.

Скажем, если вы делаете обувь, и ваша цель — именно сделать полезную и функциональную обувь, а не разобраться на практике как делается обувь с «нуля» (т.е. например, берём телёнка, выращиваем из него бычка, выделываем шкуру, разрабатываем лекала и т.п.), то необходимо закупить уже готовые шкуры и готовое оборудование и делать именно обувь.

То же самое с играми. Если стоит цель сделать современную игру, интересную для людей, то имеет смысл взять самый современный инструмент и делать игру. А не пилить несколько лет свой собственный велосипед.

Хотя я понимаю, что в вашем случае стояла задача именно разобраться с тем, как можно написать игру с «нуля». Если, конечно, взять за «ноль» С++ (а можно было также писать на асме). Ну или вы (были) просто слишком по-юношески амбициозны («я сделаю лучший игровой движок в мире!!111»).

Честно говоря, мне не очень нужна лекция на тему: «как нужно делать коммерческие игры малыми затратами и в сжатые сроки». По-моему, вы не очень понимаете ситуацию. Игра делалась в 1998 году и тогда что-то «взять и допилить» было навряд ли возможно. Сейчас я её просто доделал исходя из того, чтобы по минимум что-то менять в самой игре.

Хотя я понимаю, что в вашем случае стояла задача именно разобраться с тем, как можно написать игру с «нуля».

Да не было у меня такой задачи, просто раньше так всё и делалось. Да я и не жалею, что сделал именно так.
Да, в 1998 году это было абсолютно оправдано. А у вас не было мысли переделать эту игру под современные мультиплатформенные технологии, добавить шейдеры, какие-нибудь mp3 в фоне, 3d-звук, освещение и т.п.? Потому что игра-то вроде огонь.
Да, в 1998 году это было абсолютно оправдано.

На самом деле, это и сейчас во многом оправдано, только надо меру знать.

А у вас не было мысли переделать эту игру под современные мультиплатформенные технологии

Сейчас игра переделана мною с расчетом на возможное портирование на разные платформы, так что с этим проблем нет. Что касается переоформления… без какой-то ощутимой прибыли, я навряд ли буду еще что-то делать, так как я считаю, что я и так сделал здесь всё возможное и невозможное. Дальше, если это «не ценят», то, соответственно, игра остается в том виде, в котором она сейчас. К тому же мне даже нравится, что игра выглядит по-старому — я в современные игры вообще не играю, разве что в те, которые мои клиенты делали с применением моего движка частиц — оформление спецэффектами смотрю, так как чувствую свою причастность.

Потому что игра-то вроде огонь.

Спасибо! Я сам в неё частенько играю ).
Очень круто! Очень здорово! Выше всяких похвал!
Лишь немногие способны сделать такую замечательную игру на одном энтузиазме(там ещё графика на асме, это умопомрачительно). И для себя я наконец-то понял больше про то как работает графика, про то, что такое сокет(УРА!), ну и конечно, хочется сделать свою RTS(только недавно думал об этом и тут эта серия статей).

P.S. Я немного затупил про перенос и зависимость от MFC. Есть билды под mac, linux?
Очень круто! Очень здорово! Выше всяких похвал!

Спасибо на добром слове! Очень тронут…

И для себя я наконец-то понял больше про то как работает графика, про то, что такое сокет(УРА!)

Очень рад, что я вам хоть чем-то помог :-)

хочется сделать свою RTS(только недавно думал об этом и тут эта серия статей).

Я бы, конечно, не советовал во всё это влезать, но, как говорится, «сердцу не прикажешь» :-) Т.е. если очень хочется, то надо действовать.
P.S. Я немного затупил про перенос и зависимость от MFC. Есть билды под mac, linux?

Ну, сейчас в игре нет MFC — он там был до тех пор, пока я не написал собственные GUI-компоненты. Версий под linux/mac нет, так как я не знаю, как ассемблер tasm32 автоматически сконвертировать куда-то кроме Windows.
А, допустим, будет ли резонно переписать с tasm на nasm, чтобы была возможность запускать под linux, macos?
Наверное, если переделывать asm, то я бы вообще от него отошел, так как сейчас он уже не сильно нужен. Вообще главная проблема этой игры в том, что я её делал, так сказать, «в детстве», когда у меня ещё были большие иллюзии по поводу того, как этот мир «работает». Когда же я понял, что «труд не гарантирует результат» и что «большие деньги никогда не зарабатываются большим трудом», то я понял, что я наконец-то кое-что понял :-) Сейчас я не забрасываю этот проект лишь по причине его огромного объема, который придает этой ситуации некую степень уникальности. Короче говоря, я зарабатываю совсем на другом, а это так… сильно забытое прошлое, которое никак не получается отпустить :-)
Sign up to leave a comment.

Articles