Время прошло

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

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

Надо как-то проще писать в этот блог... мне кажется, я слишком выбираю слова. Вам так не кажется? Хех, да как же вы ответите, я же комментарии ещё не прикрутил. Вот, кстати, и задачка: прикручу. Либо самописные какие сделаю, либо Disqus, либо InstanseDebate — других вариантов пока не вижу. Ну да не в этом суть, а суть в том, что блог задумывался как дневник реализации неких проектов, или даже бизнес-проектов, если позволите. И их есть у меня, «проектов» этих. И о реализации, наверное, если взяться, можно вполне даже и писать.

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

Усвоение новой информации:

  • 10% от прочитанного
  • 20% от услышанного
  • 30% от увиденного
  • 50% от увиденного и услышанного
  • 55% от увиденного и записанного
  • 70% от обсуждённого
  • 85% от увиденного, записанного и просмотренного в течение последующих 5-ти часов
  • 90% от опробованного и обсуждённого с другими людьми
  • 95% от того, чему обучаем других людей

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

Один из вопросов был о раннем и позднем связывании в контексте виртуальных методов C#. О чём в рамках этой новой идеи и расскажу как-нибудь.

26.04.2011

Время пошло

Поскольку этот блог я решил вести честно, честно во всём и признаюсь: за все дни с последней заметки я не сделал по своему „громадному“ проекту ничего. При том, что в офисе исправно тружусь по 9 часов в сутки. Лично меня это уже не столько удивляет, сколько обескураживает.

  • Что даст мне опыт в построении законченного приложения и проведении его через все стадии жизненного цикла?
  • Что даст мне опыт самоорганизации (самоорганизации, как бы не так) и понимание того, как мне следует строить свою личную работу вне офиса?
  • Что мне даст опыт применения новых технологий, в том числе заветного Objective C?

А теперь та часть меня, которая в ответ на всё это прячет голову в песок и продолжает прозябать, выйди на площадь и подставь своё бесстыдство под меткие броски камнями. И поделом тебе будет.

На правах картинки:

Не позволяй душе лениться

Не позволяй душе лениться!
Чтоб в ступе воду не толочь,
Душа обязана трудиться
И день и ночь, и день и ночь!

Гони ее от дома к дому,
Тащи с этапа на этап,
По пустырю, по бурелому,
Через сугроб, через ухаб!

Не разрешай ей спать в постели
При свете утренней звезды,
Держи лентяйку в черном теле
И не снимай с нее узды!

Коль дать ей вздумаешь поблажку,
Освобождая от работ,
Она последнюю рубашку
С тебя без жалости сорвет.

А ты хватай ее за плечи,
Учи и мучай дотемна,
Чтоб жить с тобой по-человечьи
Училась заново она.

Она рабыня и царица,
Она работница и дочь,
Она обязана трудиться
И день и ночь, и день и ночь!

Николай Заболоцкий, 1958


Мне кажется, надо выстроить процесс работы (ох как я не люблю все эти модные словеса), начиная с чёткой цели, сроков, плана. Вспомнить про SMART и прочие менеджерские уловки. Я сейчас и менеджер, и исполнитель. И директор, и подчинённый. И обе роли пока что делаю провально.

Итак, сейчас выступлю волевым и даже вредным начальником: я хочу, чтобы через неделю у меня был рабочий прототип игры! Через неделю от сегодняшнего дня, то есть в четверг, 17 марта 2011-го года. И точка. Прототип должен позволять проводить обычную, двумерную, классическую игру в сапёра. Платформа — WPF, чтобы не заморачиваться. С графикой — тоже не заморачиваться. Главное, чтобы можно было сыграть. Время пошло.

10.03.2011

В погоне

Покуда с ячейками мы разобрались, давайте двигаться дальше. Нужно как-то увязать ячейки с игровым полем. Когда я об этом думаю, мне представляется свойство типа Dictionary<Coordinate, Cell> у класса Field. То есть словарь ключ-значение, где ключём будут координаты, а значением — сама ячейка.

Этот тип описан в .net framework’е, и потому такое моё представление поля уже становится в некотором смысле платформозависимым. В общем, пришла, видимо, пора подумать о платформе, на которой всё это дело будет реализовываться. И этот вопрос я решу быстро. Дело в том, что я — разработчик на C#. Казалось бы, выбор сделан? Что знаешь, на том и пиши? Возможно. Но мне, конечно же, хотелось бы, чтобы готовую игру смогли скачать как можно больше людей. Ведь коль скоро мы говорим о бизнесе, именно люди приносят деньги. А людей больше, пожалуй, всё-таки не на платформе от Microsoft. Короче говоря, хорошо бы попасть в iTunes App Store, то есть написать приложение под iOS, совершенно незнакомую мне платформу на вражьем этом Objective-C, о котором я и слышал то всего половиной уха. С другой стороны, Microsoft Marketplace тоже существует и им, надо думать, тоже кто-нибудь да пользуется. Я даже поискал конкретные цифры:

iOS

  • Количество проданных iOS устройств: 160 миллионов (на середину января нынешнего, 2011-го года, вот ссылка)
  • Количество приложений: 400 000
  • Разработчиков: 43 185 (ссылка)

WindowsPhone 7

  • Количество проданных WindowsPhone7 устройств: 2 миллиона
  • Программ в Marketplace: 6 500
  • Разработчиков: 24 000 (ссылка)

Как говорится, почувствуйте разницу.

План действий я всё-таки выбираю такой. Разрабатывать игру на .net’е под WindowsPhone7, поскольку эти технологии мне уже знакомы. А паралелльно изучать iOS и Objective-C. Думается мне, переносить существующее приложение на другую, пусть и малознакомую платформу будет проще, чем сразу писать под неё. Ну и, конечно, потом будет интересно сравнить результаты.

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

Постер фильма «В погоне за счастьем»

Написав это, я открыл свой проект в Visual Studio и начал описывать классы координат и алгоритм генерации поля... Но очень скоро запутался, пытаясь при генерации абстрагироваться от конкретной реализации координат. Как только как будто разобрался... рухнула студия. Ключевые изменения пропали. А ещё я подумал, что в день по чайной ложке — это убогий подход. Так можно целый год писать этого несчастного сапёра, которого я выбрал как умышленно простую задачу. Когда я смотрел фильм «В погоне за счастьем» с Уиллом Смитом в главной роли, я представлял себя на его месте. Но мои обстоятельства в разы лучше. Практически тепличные. И это странно: когда как будто бы всё есть, но хочется большего... просто чтобы было — это дурацкая мотивация. Это не работает. Когда нужно сделать что-то во что бы то ни стало, чтобы выжить — это другой разговор. Хоть умышленно загоняй себя в невыносимые рамки...

Как изменить подход?

Сейчас третий час ночи и я отправляюсь спать.

03.03.2011

По кирпичику...

Как-то с другом мы придумали термин «сон-тайм» для обозначения режима работы над своим проектом, если работой по найму занято всё остальное время. «Сон-тайм» в противовес «фул-тайм». И что-то этот сон-тайм мне не очень-то нравится... Но покуда работа в офисе остаётся, единственное, что я могу сделать, это черпать вдохновение из своего видения и не роптать : )

Итак, начну подробнее прорабатывать каждую из сущностей, которые всплыли в результате небольшого мозгового штурма, проведённого в прошлый раз.

Ну, собственно, к делу.

Сначала разберёмся с ячейками. Они могут быть двух видов: с бомбой или с цифрой — количеством бомб в соседних ячейках. Думаю, это будут два разных типа BombCell и NumberCell, потомки абстрактного типа Cell. Базовый тип будет содержать защищённую булеву переменную, которая будет хранить информацию, была ли ячейка открыта или нет. Да, для бомбы как будто это не акутально — её можно открыть только один раз, и игра закончится. Но кто сказал, что это будет обычный сапёр? ;) Буду всё-таки стараться писать наиболее гибко. Не выходя, однако, за рамки разумного (а также доброго и вечного, конечно).

Также базовый тип будет содержать виртуальную функцию Open() с целочисленным типом возвращаемого значения. Это будет количество бомб в округе, или, скажем минус единица в случае, если открытая ячейка — бомба. Каждый класс-потомок будет реализовывать эту функцию сам. В базовой реализации сделаю только простановку флага, что мол ячейка открыта.

Получается примерно такая картинка:

Диаграмма классов ячеек

Тип ячейки-бомбы чрезвычайно прост. Всё, что ему требуется сделать — это переопределить базовый метод Open() и вернуть в нём минус единицу (индикатор бомбы). Ячейка-циферка же ничуть не сложнее. Разве что в её конструктор нужно будет передать количество бомб-соседей, дабы она его хранила и возвращала при открытии.

Ну и с ячейками пока похоже что всё.

02.03.2011

Первый взгляд

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

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

Minesweeper — игра про бомбы. И то, что в ней есть наверняка — это игровое поле и клеточки ячейки. Так, не долго думая, и запишем.

Дальше начинаются детали. Ячейки могут быть разных типов: бомбы, пустые или с циферками. А последние два, пожалуй, можно объединить, ибо пустая ячейка, по сути, содержит цифру ноль, которая просто не отображается. Но представление — это уже совсем другая история. Об этом позже.

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

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

Думать я предпочитаю на бумаге. И, желательно, картинками. Но коль скоро вчера был день рождения Стива Джобса, присоединюсь к его видению будущего. Думал я на iPad’е. И вот какая картинка у меня получилась (кликните на картинку для её увеличения):

Ментальная карта по игре Сапёр

Я просто накидал пришедшие мысли и организовал их в MindMap, или ментальную карту. К ячейкам и полю добавилось ещё несколько сущностей: координаты, опции и некий менеджер, который будет отвечать за команды типа «Начать игру» и «Закончить игру». Дальше, думаю, следует спуститься на уровень ниже и продумать более подробный вид всех этих сущностей.

25.02.2011

На старт, внимание

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

«Как видите, это специально отведённая часть книги, где я хочу выразить свою благодарность. Почти во всех книгах есть такая глава, где авторы описывают тёплые чувства, которые они питают к людям, так или иначе помогавшим им написать книгу. В данном конкретном случае в этом нет необходимости.

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

:-)

Прошу прощения, захотелось подурачиться. Всё равно ведь эту часть книги никогда не читают.

Честно говоря, я ...»

И приписывает в конце введения:

«Очень надеюсь, что эта книга вам поможет, а может быть, даже и вдохновит.

Разумеется, если вы — сотрудник компании SourceGear, то забудьте даже, что держали эту книгу в руках. Поверьте, создавать компанию — очень, очень очень тяжёлый труд. Зачем это вам? Возвращайтесь к работе. :-)»

Обложка книги Эрика Синка

Содержательная же часть книги начинается с раздела «о себе» и основного вопроса «а стоит ли начинать или нет».

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

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

Не догадались, о чём я? Я буду делать версию игры «Сапёр» или, если угодно, «Minesweeper». Моя задача — сделать законченный конкурентный привлекательный продукт и организовать его продажи. Успехом будет считаться получение прибыли, то есть превышение доходов над расходами (которых на данный момент пока, к счастью, нет).

24.02.2011

Бизнес в кавычках

Добрый день. Или какое бы то ни было время суток. Сегодня я купил книгу со смешным названием «Бизнес для программистов». Почему смешным? Потому что, во-первых, любое слово, если его повторять большое количество раз подряд, становится смешным, а во-вторых, я начитался всяческих книг про бизнес и успех столько, что уже наверное до смешного пресытился. Но тем не менее эту книгу купил. Ибо именно в держащего её в руках меня пришла идея основной темы этого блога. А тема у блога должна быть, это я понял наверняка.

кусочек книги Тома Петерса

Итак, я программист и я думаю о бизнесе. Программистом себя считаю со школы и думать привык с тех же времён. Работаю программистом, однако, совсем недавно; а о бизнесе по-прежнему только лишь думаю.

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

Завтра праздник, а значит будет время ознакомиться с книгой и выбрать (выработать?) идею.

На связи.

22.02.2011

ПроРеВорк

Добрый день. Я начну этот блог с обзора книги, которую недавно прочёл.

Первой книгой, которую я прочёл в наступившем году, стала «Rework: Бизнес без предрассудков» — достаточно известный и даже модный труд от компании 37signals. О самой компании, к слову, в России известно мало. «37 сигналов» — это всего 14 человек. И они не собираются расти. Ведь они итак экономные и прибыльные, как сами о себе пишут. Так и книга. Она о бизнесе, она очень ёмкая, она совершенно без воды.

Обложка книги Rework

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

И она читается чрезвычайно легко.

В ней во многом даётся новый, оригинальный взгляд на бизнес. Минималистичный. Но не минималистичный в смысле минимума временнЫх вложений (что активно проповедует Тимоти Феррис в книге «Четырёхчасовая рабочая неделя», о которой я расскажу как-нибудь потом), а минималистичный в смыле затрат.

«Нанимайте, когда уже становится невмоготу»

и более того:

«Проходите мимо отличных людей»

Основная мысль, на мой взгляд — собирайтесь, делайте и запускайтесь. Моя любимая глава в этой книге «Запускайтесь сейчас».

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

Авторы применяли этот подход вплоть до крайностей:

«Когда мы запустили Basecamp, у нас не было механизма получения платы с клиентов. Поскольку продукт требовал ежемесячной оплаты, мы знали, что у нас будет 30 дней на решение этой задачи. Поэтому мы использовали время перед запуском для того, чтобы заняться более важными для первого дня проблемами. Проблемы 30‑го дня могли подождать»

И не прогадали.

Хотите встряхнуть старые устои? Прочтите Rework. Рекомендую.

Иллюстрация из книги Rework

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

27.01.2011