О разработчике

Михаил МакаровДобро пожаловать на мой форум, посвящённый программированию и смежным вещам, которые могут быть интересны разработчикам. Движок этого форума я разрабатываю с нуля на PHP 7+ без использования сторонних фреймворков. Данная первая версия не блещет изысками архитектурных решений с одной стороны, с другой же — большая часть её была написана за две недели, — это был такой спринт, попытка сделать что-то весьма сложное быстро, и это вышло. Ко второй версии, я собираюсь перевести движок на рельсы MVC-фреймворка, который сам же и реализую в образовательных целях. Столь радикальный подход к разработке, отличающийся от современных практик, выбран с целью пройти процесс становления веб-программирования за последние 10—15 лет и пощупать кончиками пальцев, что в устаревших подходах плохо и почему от них ушли, но также, вспомнить и понастальгировать над тем, как сам разрабатывал свои первые сайты много лет назад. В качестве инструментария для фронтэнда я всё-таки выбрал Twitter Bootstrap 3, потому что качать скиллы в CSS желания особо на момент старта не имел. Есть мысли в перспективе перейти на Boostrap 4 или Materialize с поддержкой flexbox, а также переписать те немногочисленные JS-скрипты, которые имеются, на современный лад. Я не ставлю перед собой задачу поддерживать старые браузеры, повторюсь, этот форум — большей частью образовательный проект, где я могу воротить, что хочу.
Немного обо мне. Я — Михаил Макаров из Симферополя. Занимаюсь разработкой больше пятнадцати лет. За это время я успел попробовать себя в роли низкоуровневого программиста (языки ассемблера, C), написать зачатки ОС, программировать десктопные приложения на Delphi (VCL) и C# (WinForms), а также заниматься на них трёхмерной графикой — от OpenGL и DirectX до софтверного рендера. Я занимался веб-разработкой. Для бэкэнда это были: C# (WebForms, MVC), PHP (Yii), JS (NodeJS) и по-мелочам, для фронта: HTML4, XHTML, HTML5, CSS (от древних версий до CSS3), JavaScript (от ES3 до современных драфтов), TypeScript. Из фронтэнд фреймворков знаком с jQuery, Backbone+Marionette, писал на AngularJS, ковырял Angular (2+), писал под React, тыкал палочкой Vue и всякое другое, что под руку попадалось. Пытался заниматься разработкой игр на флеше (уже на закате этой технологии). В свободное время изучаю всякие интересные вещи: от Erlang до Haskell — в плане ЯП, интересуюсь криптографией, криптовалютами, сетевым программированием (писал на сокетах, WCF, WebSockets), администрированием серверов (в частности, имею опыт работы с Debian-based дистрибутивами, потому что люблю их, и доводилось работать с Windows Server), прокачиваю себя в базах данных. Периодически беру либо заказы у студентов на выполнение, либо придумываю какие-то pet-проекты себе и реализую их. Таким образом периодически имел опыт работы с разными мэйнстрим ЯП вроде C++ и Java, а также не очень мэйнстрим — вроде Visual Basic или Lisp, Prolog. Как-то всё сумбурно получается... лучше ниже ещё подробнее напишу, с чем работал и приведу примеры.
Я познал, что такое понятие, как "программирование" существует, — слишком поздно. Я перешёл тогда в десятый класс среднеобразовательной школы и у нас появились уроки информатики, на которых мы сначала рисовали блок-схемы простейших алгоритмов, а потом вбивали код на допотопной версии Бейсика в очень странные советские агрегаты, отдалённо напоминающие компьютеры. Но меня так затянул этот процесс, что я понял — это моё. К сожалению, свой нормальный компьютер у меня появился спустя аж три года. Заработать на него я не мог, а убедить родителей, зачем он нужен — было просто крайне проблематично. Кстати, уроки информатики в школе — я считаю чуть ли не единственной полезной штукой, которая в этой самой школе со мной за все десять лет обучения произошла. Я думаю, можно было смело прогуливать всё остальное (что в последних классах я и делал) и ходить только на информатику. Ещё, безусловно, стоит упомянуть уроки физики — да, это тоже было весьма занимательно, хоть я и пинал балду на них. Всё-таки, физику я люблю, — но область знаний это не моя. Давайте считать, что в школе я получил пользу только из уроков физики и информатики. Математику бы сюда ещё добавить, но, к сожалению, язык не поворачивается. Все знания по математике, которые мне впоследствии понадобились в жизни, я добывал сам на просторах Сети (да, к сожалению, даже не в вузе).
Вуз — ещё пять лет жизни (кроме десяти лет школы) коту под хвост. Безусловно, были и положительные моменты, но их можно по пальцам одной руки пересчитать и, явно, они не стоили такого количества времени, которое назад не вернуть. Я закончил Таврический Национальный Университет им. В.И. Вернадского (ТНУ, теперь он, насколько я знаю, называется Крымским Федеральным Университетом, КФУ) по специальности "компьютерные сети и системы" (или как-то так) на кафедре физики. Касательно непосредственно физики — всё было здорово, не смотря на то, что это "не моё". Касательно математики — я тупо не успевал усваивать то, что мы проходили. Вообще, мне кажется, что мы слишком резко перескочили от школьных азов до вузовской "вышки" и прочих вещей. Даже матричную арифметику, которую я потом вполне успешно усвоил и применял на практике в 3D графике, в вузе я не потянул. Вероятно, нужно было "нагонять" упущенное дома, кроме собственно посещения лекций, но я к тому моменту совсем ударился в программирование и мне было ну вообще не до математики. Про гуманитарные предметы, которыми разбавляли обучение на начальных курсах — вообще говорить смысла нет... я их либо прогуливал, либо на них спал. Запомнилась только история Украины, с преподавателем, уверенным, что этот предмет почему-то кому-то интересен и очень важен, и которую я перездавал раз пять, если не изменяет память.
Комплекс Физических ПрограммЕсли в школе самым важным для меня стали уроки информатики. То в вузе — компьютерное моделирование физических процессов. Это было действительно великолепно и я очень рад, что предмет (уже не помню, как назывался) совпал с тем моментом, когда я освоил азы программирование трёхмерной графики на Delphi под OpenGL. Итак, как же это было... Шёл далёкий 2004 год. Я был студентом второго курса. Ничего не предвещало, как говорится. Наш преподаватель физики, по совместительству, проректор, Милюков В.В. задумал провести у нас экспериментальный курс на тему компьютерного моделирования физических процессов, за что ему просто огроменное спасибо. Суть курса заключалась в том, что нам рассказывают про различные методы всяких там приближённых вычислений и прочих численных интегрирований, а мы реализуем это всё у себя в коде кто на чём горазд, а горазды чаще всего на турбо паскале. И были у преподавателя готовые программы, написанные на том же паскале несколько ранее. Насколько ранее — история умалчивает. Но, справедливости ради, стоит заметить, что реализованы добротно со всякими наворотами, реализующими красивости, и хаками, позволяющими хоть как-то раздвинуть рамки того видеорежима, который позволял использовать досовский турбо паскаль.

И вот тут то я загрустил. С одной стороны грусть навевали однокурсники, которые не в зуб ногой (были, которые и в зуб, но в подавляющем меньшинстве), с другой — софт на крайне устаревшей технологии. Во мне эта ситуация вызывала протест. Я только буквально недавно недавно освоился в Delphi и написал наброски 3D шутера под OpenGL, а тут — такое. Ну и захотелось мне выпендриться, показать какой я молодец, уделать всех. Юношеский максимализм пёр изо всех щелей. Первые робкие попытки заключались в реализации программ из методички на Delphi, потом я пытался сделать аналоги программ преподавателя, а в итоге меня осенило: нужно объединить весь этот софт под крылом одной программной среды, а лучше… а лучше вообще к чертям всё переписать, создав одну большую программу, в которой будет куча различных физических опытов! Я не ставил целей сделать что-то коммерчески успешное или просто кому-то нужное, в то время я программировал чисто для души. Это был первый мой крупный проект. Было много периодов апатии, чередующихся с периодами вдохновлённости и оптимизма. В конце концов, спустя пол года, на свет родился он — проект, который я незамысловато назвал по его сути, — Комплекс Физических Программ.

Двойной маятникКомплекс Физических Программ — это программная среда, комплекс, включающий в себя десять опытов по различным физическим процессам. Написан он был мной на Delphi 7 с использованием OpenGL 1.1. Идея сделать вот такое меню выбора опытов в виде полноэкранной карусели с их скриншотами пришла как-то спонтанно, но очень крепко засела в голову. И даже сейчас, спустя десять лет, я не могу налюбоваться этой реализацией. Физик из меня не особо шумный, потому каких-то вау-опытов тут нет. Всё, что реализовано, — сводится к банальнейшим вычислениям, потому и было выбрано мной для реализации. В конце того года у нас на факультете была олимпиада, состоявшая из двух частей. На первой части толпа студентов сидит пилит задачки в компьютерном классе. Вторая часть заключалась в домашей работе — т.е. нужно было принести что-то, созданное вне стен вуза. Ясное дело, я принёс свой Комплекс, и… получил второе место. Не знаю, как так вышло, но мне сверху дали дополнительный приз конкретно за эту программу. После — я несколько раз пытался взяться за версию 2.0, но каждый раз руки опускались. А сейчас, если честно, я в этом и не вижу смысла. Эта программа дала мне большой опыт в разработке завершённых проектов и оставила приятные воспоминания о студенческой жизни, и я, что скрывать, горжусь тем, что тогда её создал.
Были, безусловно, и другие наработки по компьютерному моделированию физики. Многие из них канули в Лету, так как не представляли из себя чего-то выдающегося и даже небыли наглядными для демонтрации. Что-то осталось в коллекции старых исходников или в виде скриншотов и видео процесса эксплуатации. Например, вот небольшая программа по моделированию систем связанных осцилляторов. На самом деле, я не уверен, что правильно так её называть, но так исторически сложилось. Суть заключается в том, что есть некоторый набор конфигураций фиксированных точек и точек свободных, имеющих некоторый вес, и всё это соединено воедино моделями пружин с заданной жёсткостью. Программа просчитывает изменение состояния системы с учётом всех факторов и выводит результат на экран в виде 3D изображения с разных точек зрения. Что здесь было нового по сравнению с Комплексом Физических Программ, - так это разбиение вычислений на потоки (т.е. по сути на этой программе я изучил и на практике научился работать с многопоточностью, синхронизацией и всем таким прочим), а также возможность просчитать все шаги заранее, запомнить их, а потом "проиграть" получившийся "фильм".
На последних курсах вуза (и в последующие несколько лет) мне довелось работать над, без преувеличения скажу, классными продуктами в частных компаниях — YesSoftware и ExtenSoft. Я не хотел бы раскрывать подробностей, даже не смотря на то, что никаких NDA я не подписывал, хотя, безусловно, много интересного можно бы было рассказать. Были, как полагается, и негативные моменты, но плюсов в работе было намного-намного больше. Для студента и программиста, только начавшего свою карьеру, это был замечательный опыт. Большие команды и действительно интересные разработки. Первый продукт — это CodeCharge Studio, такая себе RAD IDE для упрощённого создания CRUD к базам данных, позволяющая нагенерить тонны кода под различные нужды для работы с данными. Второй продукт — Artisteer, немного другого плана, но в ту же степь... это уже чисто генератор тем для различных CMS. Если первая программа была больше нацелена на логику, то вторая — на графику. Из Artisteer был даже вариант экспорта дизайна в CodeCharge Studio. Большей частью мне тут довелось пописать на C# под .NET Framework 2.0, хотя были местами задействованы и JavaScript, и PHP, и всякое разное, особенно в механизмах экспорта. Тут же я много времени провёл над графическими алгоритмами, реализуя всякое-разное: от автоматически перегенерируюемых иконок в Ribbon-style меню приложения (которых было, без преувеличения, до чёрта на каждый чих) до различных эффектов в графике на экспорт.
В дальнейшем меня носило по разным компаниям. Я работал и в офисах, и удалённо, и занимался фрилансом. Но больше к десктопному софту не имел отношения, если не считать pet-проектов, которыми я занимался всегда и, вероятно, всегда буду заниматься. Сначала я перешёл с десктопной разработки под дотнетом на веб: WebForms, а потом MVC. Затем отошёл от стека Microsoft и занимался проектами на PHP. Какое-то время большую часть уделял фронтэнду со всеми его прелестями и фреймворками, включая не только JavaScript, но и вёрстку, CSS, Bootstrap и вот это вот всё. Одним из моих крупных веб-проектов, написанных (не до конца) под заказ в одиночку с нуля, стал движок казино с кучей различных слотов. К сожалению, в один момент у заказчика поменялись планы и разработу отменили. Результаты можете наблюдать на видео. Тут, конечно, пригодились все знания, накопленные до этого: от администрирования *nix-серверов, проектирования БД до разработки на PHP/JS, вёрстки и работы с Canvas и WebGL.
Параллельно с вот этими всеми вещами, которые приносили непосредственный доход на жизнь, я, как уже писал, занимался различными побочными pet-проектами. Некоторые из них были изначально некоммерческими. Какие-то канули в Лету, какие-то пылятся потому что жалко выкинуть. Но был один интересный проект, который "выстрелил". Игровой проект на флеше. Я им начал заниматься уже на закате платформы. Некоторые говорят, что она до сих пор жива... я в это не особо верю. Но не суть. Проект получил незатейливое название NatureBubbles и по своей сути представлял простейшую match-3 игрушку. Я занимался непосредственно программированием, а также всеми организационными моментами. Графику рисовала моя жена (на данный момент, уже бывшая). Музыку для проекта написал парень, имя которого я уже не вспомню, наверное, если когда-нибудь не нарою исходников игры или саму игру где-то на просторах Сети. Не смотря на то, что игрушка получилась очень простенькая, и её не удалось продать ни единому спонсору, но на рекламе Mochimedia удалось за всё время её жизненного цикла нарубить чуть больше сотни баксов... и сотку чистыми вывести. Это, безусловно, был коммерческий успех. Я был уверен, что мне стоило продолжить заниматься инди-разработкой, и я был уверен, что последующие проекты стали бы приносить больше и больше денег, что позволило бы жить на них, быть действительно независимым и разрабатывать то, что нравится, а не то, что требует заказчик. Но, к сожалению, у меня на это на тот момент небыло денег, небыло финансовой подушки, чтобы за её счёт жить и пилить новый проект. Кроме того, жена была уверена, что я дурью маюсь, и шёл бы на "нормальную" работу устроился, а попытки попросить бабла у родителей, которые могли его дать, не принесли успеха. Таким образом, я создал с нуля продукт, прошёл все стадии разработки и выпуска в продакшен, пост-продакшен и вывод денег — полный цикл... а в итоге остался у разбитого корыта, и пошёл дальше работать на "дядю".
Софтверный рендер на C#Немного хотелось бы рассказать о проектах, студенческих лаборатоках, которые я выполнял по чьей-то просьбе просто так или за символическую сумму. Их накопилось просто огроменное количество, все сложно даже найти, вспомнить, перечислить, не говоря уже о том, чтобы выкладывать куда-то. В основном это были работы на C, C#, C++... на паскале я не делал ничего принципиально — самые последние шараги перешли с него на более востребованные ЯП, Delphi — делал, но мало. Много было шахматно-шашечных работ — это всякого рода игры на двумерной доске в клетку: уголки, реверси, шашки и прочие игры с похожей механикой. Зачастую требовалось реализовать простенький алгоритм для игры против компьютера. Конечно, ни в какие нейронные сети и deep learning я не вдавался, всё заканчивалось рекурсивном просчётом ходов на несколько шагов вперёд и выбором оптимальной по очкам ветки рекурсии для текущего хода. Были работы по трёхмерной графике: это либо OpenGL древних версий (< 2), либо софтверный рендер — т.е. необходимо было реализовать отрисовку трёхмерных моделей (плюс возможность вращения, масштабирования и прочего, простенькое освещение) используя библиотеки двумерной графики. Слева на скриншоте представлена одна из таких работ — отрисовка моделей из формата dxf на C# в WinForms.
...пятнашки, клиент-серверные приложения вроде чатов и прочего, отрисовка различных графиков в 2D и 3D, были и веб-проекты, порой весьма необычные, как например, вот такая карта:
Это незаконченная статья. Я собираюсь развивать её и дополнять различными фактами из моей жизни. Если у вас есть какие-то пожелания или предложения, пишите мне на почту m.m.makarov@gmail.com
Ещё немного информации обо мне (и видео pet-проектов) есть тут, а также на моём круге.