Как за 5 недель я сделал свой софт для ввода редких символов вообще без опыта программирования
История про дизайнера, который смог создать свою собственную, с преферансом и куртизанками, программу для вставки любых символов напрямую с клавиатуры без знания кода, примерно за месяц работы по ночам. Как пришла идея, чему научился, откуда брал мотивацию, причем тут обезьяны и почему Бендер был прав.
Для кого этот материал
Эту историю я пишу для истории, если доживём — буду скидывать внукам, а зафиксированные «на бумаге» факты не дадут старческому маразму приукрасить её до какой-нибудь битвы с драконом и ходоками. Ну, а если серьёзно, мне эта история кажется воодушевляющей — и будет интересна всем, кто давно хотел начать что-то делать.
Если вы программист, скорее всего, лонгрид может показаться наивным. Но буду рад, если вы в комментариях дадите обратную связь — верю в силу коллективного разума. А продукт, надеюсь, пригодится и программистам тоже.
Чем я занимаюсь по жизни
Мама хотела, чтобы я стал хирургом и играл на фортепиано, я — хотел стать летчиком и закончил музыкалку по классу гитары. А после 11 класса я поступил в архитектурный на инженера-эколога, отучился 6 лет и пошел преподавать в школу черчение, попутно тренируя баскетбольную команду.
С программированием я последний раз сталкивался в 2002 году, в 5 классе, когда нужно было гонять по монитору черепашку и рисовать с помощью ее хвоста. Программирование меня тогда не затянуло, а вот рисование плотно вошло в мою жизнь и последние 15 лет работаю дизайнером на фрилансе.
Как пришла идея и Сайдхасл
Я вступил в закрытый чат — Сайдхасла в октябре 2024. Side Hustle — это формат, когда люди запускают свои сторонние проекты вне основной занятости. Часто это называют пет-проектом.
Участники чата общаются, делятся опытом и мыслями по проектам, накидывают идеек по улучшению или наоборот говорят, что-то типа «херня — не взлетит», что сильно экономит время. Но основная сила комьюнити, конечно, поддержка и причастность.
Я хотел сделать идейный аналог раскладки Бирмана, без конфликтов с другими программами, проще в установке и с полной кастомизацией символов на лету. Нормальная типографика — нужна мне каждый день, да и не только мне, подумал я.
Например, длинное тире — очень часто нужно даже в обычной переписке. Мне по работе частенько приходится указываться размеры форматов 210 × 297 мм, или труба ⌀ ½". Или что-то типа — снял студию 23 м² за 15 000 ₽ в ЖК «Ромашка».
После того, как я озвучил идею, сразу начал пилить. Созвоны в чате каждое воскресенье, к встрече нужно подготовить наработки за неделю. И хотя, никто ничего не требует — я видел, как другие занимаются своими проектами, у кого-то получалось, у кого-то нет, что очень мотивировало меня не останавливаться, хотя опыта не было совсем.
Сначала решил заказать разработку за деньги, но результата не получил — первая неудача
Время действия: 10 октября — 1 декабря
В самом начале я думал буду играть в продюсера. Ну, знаете — найду программиста, заплачу бабки, соберём MVP, выкатим лендосик и вот это всё. Но реальность оказалась суровее тагильских туристов в Турции, и за два месяца работы у меня на руках была иконка 32×32 px и название программы — hypetype. Сокращу восемь недель до короткого списка. Каждый пункт — неделя:
Писал ТЗ и изучал рынок.
Искал исполнителя. Допиливал техническое задание — оказалось, сложно объяснять людям, что ты хочешь без «бумажки с картинками».
Нашелся программист у нас в чате. Выбрали платформу — NodeJS, планируя делать сразу программу на Windows и MacOS.
Осознали с программистом, что как-то сложно — начали флексить (упрощать).
Поняли, что все ещё сложно — флексим ещё больше.
Сомневаемся, что это возможно, но продолжаем делать то что получается. Что-то у нас получалось. Например, сделали сборку проекта на Github и иконку.
Окончательно решаем, что сделать такую программу в рамках Сайдхасла нецелесообразно.
Закрываем проект, пишем постмортем, делаем выводы.
Итого за первые два месяца
Потрачено: 40 часов моих, 40 часов программиста
Приобретено: Опыт. Интересное комьюнити с поддержкой и знаниями. Понимание, почему написание ТЗ это отдельный вид искусства. И да, даже простая программка с двумя функциями требует много фокуса для человека со стороны. Урок, что делать ≠ сделать.
Решаю всё делать сам — жесткий флекс
1 — 7 декабря. Эмоционально выгорел. Написал постмортем своего проекта в чате. Взял отпуск от сайдхасала. Вообще ничего не делал. Но ближе к концу недели всё-таки решаю, что буду писать программу полностью сам. Вне зависимости от того сколько это займёт времени. Без внутреннего дедлайна, просто по кайфу.
Решил, что разобью задачу настолько сильно, насколько это возможно и буду действовать маленькими шагами. Просто занижаю свои требования максимально, как в том меме.
В голове у меня у меня был достаточно абстрактный план. Ведь я точно не знал, что я смогу реализовать. Но чётко понимал, что есть вещи — без которых вообще не будет работать. И вещи, которые нужны для жира. Жир — это удобство и красивости.
Точно нужны: Виртуализация и Карта символов
Для жира: Автозапуск, Интерфейс и Редактирование раскладки
Я умышленно не объясняю термины, заранее считая, что это статья не про программирование, а скорее про путь. Не все же знают как работает двигатель в машине, но почти все ездят и не жужжат.
Первая неделя · Виртуальная
8 — 15 декабря. Начал писать. Первым по плану было написать функцию виртуализации — штука, которая бы заменяла значение кнопки RAlt в реестре. Без неё банкета точно не будет. И это оказалось очень сложно.
Переустановил Windows 3 раза. Почему-то, вопреки здравому смыслу, все нейронки достаточно неплохо пишут логику — ну т.е. думает она явно как программист, но, с№%а, тонкости синтаксиса — положили мне сначала основную систему. И слава Старым и Новым Богам, что я делал это на ноуте. Первый раз удалось откатиться. Правда, второй раз уже не удалось.
После этого я переставил основную винду. Установил виртуалку. Уронил виртуалку. Поставил новую виртуалку. Посмотрел документацию, узнал как правильно передавать бинарные данные — написал правильную функцию 🤡
Чему научился
Если пишешь код — ты обязан понимать, что он делает
Если не понимаешь что происходит, контролируй подручными средствами
Используй Виртуальную машину
Запятая имеет значение
Если ничего не помогает — посмотри инструкцию
Что сделал
- Выводы
- Установил виртуалку, что оказалось супер удобно и в жизни.
Лайфхак. Попутно я разобрался как работать с токенами через виртуальную машину и перенёс всю криптографическую херабору от онлайн-бухгалтерии на неё. И внезапно, мой ноутбук перестал быть лагающим куском металлолома < 3 Рекомендую. - Написал функцию для виртуализации, которая работает
Потрачено: 25-30 часов
Приобретено: Первая капля кайфа, когда что-то получается своими руками.
Вторая неделя · Интерфейсная
15 — 21 декабря. Я понимал, что мне нужен интерфейс. Пускай тупой и нефункциональный — хотя бы просто для красоты. Хотя, он не совсем для красоты. Лично для себя решил, что на первое время, возможность подсматривать раскладку — вполне себе функционал.
Придумал выводить не настоящий интерфейс как задумывалось, а его как бы визуальное представление, короче — сделать вывод статичной картинкой.
Вывод окна с картинкой я сделал достаточно быстро, где-то за вечер. Хотя с прозрачностью и скруглениями пришлось по?№%ся достаточно, — ещё один вечер ушёл сюда. И самое смешное тут то, что опять были разночтения синтаксиса. Причём, настолько сильные, что 0 нужно было менять на 1 и наоборот. Однако, весь кайф был впереди, когда следующий день я перешёл с ноута на комп.
Я познал всю боль тех, кто занимается интерфейсами и вообще работой с тем, чтобы их софт выглядел вменяемо на всех экранах, на всех разрешениях.
У меня началась эпопея с разрешениями, дипиайями, физическим размером экрана, системными шрифтами, отличиями 10-ки и 11-ой Windows, процентом масштабирования, короче — было весело.
Ближе к концу второй недели, у меня появилось понимание, а также около 50 часов общения с нейронками, что в ультрабазовом варианте программа у меня уже есть. Да, ещё много нюансов, но мне казалось, если что, нюансы я легко поправлю. Поэтому я приму решение попробовать сделать настоящий интерфейс.
Чему научился
- Размер имеет значение
- Все мониторы на вкус и цвет разные
- Красивый интерфейс лучше никакого
Что сделал
- Дописал статичный интерфейс.
- Потихоньку подучил работу с переменными. Редко, но писал код руками.
- Начал замечать закономерности синтаксиса. И стал иногда заранее исправлять косяки за нейронкой.
- Подумал, что смогу осилить написание интерфейса с нуля.
Потрачено: 20-25 часов
Приобретено: Ощущение, что программирование прикольная вещь и она меня драйвит как 15 лет назад драйвил дизайн или 10 лет назад анимация.
Ложная надежда — вторая неудача
Мне внезапно показалось, основное тут показалось, что я уже достаточно опытный прогроммист 300к/наносек, который может позволить себе писать настоящие программы со стильно-модно-молодежными интерфейсами. И я попробовал. Убил 2 ночи, но почти безрезультатно.
В моменте пробовал отбросить интерфейс и сделать просто карту символов в отдельном .txt файле, но тоже ничего не получилось.
На итог – словил небольшую дизмораль, но в целом всё ещё был полон энтузиазма, так как вначале я себе дал возможность сделать программу с самым базовым функционалом.
Но именно на этом этапе я начал пробовать другие нейронки и модели отличные от ChatGPT. И хотя, ничего не получилось, я увидел, что нейронки бывают разные.
Чему научился
- Опыт имеет значение
- Рисовать сильно проще чем программировать
- Ты не готов, когда не готов, но узнать это можно только попробовав
Что сделал
- Выводы.
- Закрыл идею и с интерфейсом и с редактированием.
- Решил сделать статичную раскладку.
Потрачено: 15 часов
Приобретено: Подозрение, что не все нейронки одинаково полезны.
Неделя третья · Альфа версия
23 — 28 декабря. Запускаюсь с чем есть. Беру все свои наработки за прошлые 3 недели и начинаю пытаться их превратить во что-то оформленное и понятное для абстрактного пользователя — первая попытка упаковать продукт.
Попутно я жоска начинаю эксплуатировать все нейронки до которых я могу дотянуться и кидаю код одной нейронки на ревью другой. По факту, — натравливаю одну нейронку на другую. Это почти сразу начинает приносить плоды.
Я за эту неделю делаю несколько крупных шагов:
- функция для автозапуска (самая лёгкая в проекте)
- функция со вставкой символов, работа с символами через массивы (одна из самых сложных)
- красивая раскладка в виде картинки для подглядывания
- меню программы
Оффтоп про иконку. Клянусь, никогда бы не подумал, что иконка для программы может вызывать стоооооооооолько проблем. Только на разбирательства с иконкой ушло два е%№нных вечера. Мне слегка стыдно подобное рассказывать, потому что мне казалось, что дизайнер может справиться с задачей создать иконку в формате ico. Но факты против меня.
Чему научился
- Легко удивить того, кто привык к малому
- Мой совет школьникам учить математику имеет смысл
- Начал понимать, почему программисты могут позволить себе быть ЧСВ
Что сделал
- Свой первый exe-шник.
- Симпатичный интерфейс-картинку, работающий как шпаргалка.
- Начал тестирование, узнал про первые баги. Баги были мелкими, но я просто ещё не знал про крупные, они всплывут через неделю.
Потрачено: 25 часов
Приобретено: Стойкое желание не останавливаться на достигнутом и вернуться к интерфейсу.
Неделя четвертая · Новогодний рывок
30 декабря — 6 января. Самая плодотворная неделя. Во-первых, эту неделю никто меня не трогал — слава Новогодним каникулам в России. Во-вторых, я начал в разы адекватнее писать задачи нейронкам. В-третьих с половиной, Claude Sonnet 3.5 <3
Оффтопик про выбор модели. Потом я ещё несколько раз тестировал «в лоб» на одном промте все доступные мне нейронки. Sonnet выносит всех в одну калитку вперед ногами, возможно когда-нибудь расскажу.
Через неделю Новогодних каникул у меня была «Альфа версия #2» продукта и я даже было хотел её показывать миру, но есть парочка но…
№1 · Неэлегантность. За этот месяц я узнал о программировании больше чем за предыдущие 30 лет и я уже мог более менее спокойно понимать, что конкретно написано на экране, и к своему сожалению я понимал, что написано это максимально топорно.
№2 · Скорость обучения. Мой код устаревал, практически в процессе написания. Я буквально через день мог осознать, что пишу какую-то дичь потому что сегодня узнал, как сделать тоже самое но проще или лучше.
Я прям помню, как я «всю дорогу» писал код, отлаживал, пытался чтобы он хотя бы запускался без ошибок, о большем я даже не мечтал. И на моё удивление, этот код запускался и работал... но тестирование указало на проблемы, которые ставили под сомнение весь прогресс, сделанный за месяц.
И спустя почти месяц работы я решаю переписать код с нуля. Ну, или почти с нуля.
Жди меня, Github
Меняю архитектуру. Так как я всё-таки осознал, что моя программа хоть и работает, но работает с миллионом костылей и подпорок. Я начинаю думать. И придумываю.
Приятных моментов тут два. Первый — это моя идея, а не нейронки. Второе — нейронка сказала, что я гений, ведь эта идея упрощает код в разы. Да ладно, я гений?
На самом деле, она сильно преувеличивает, потому что идея максимально базовая. Я вообще не понимаю, почему она не могла, или не хотела, предложить мне эту идею месяц назад.
Мне это даёт понять, что она вообще не понимает чем мы занимались почти месяц. И по факту — мы зарыли месяц работы в землю, хотя, по хорошему, можно было тупо не делать эту работу.
…Представьте, что я попросил друга помочь мне с переездом. И друг не задумываясь, не задавая вопросов, сразу начинает упаковывать мою коллекцию киндер сюрпризов в газету, подписывая каждого динозаврика и бегемотика бирочкой, которую он предварительно напечатал на машинке для бирочек, а потом всё это ещё завел в толстую общую тетрадь с каталогом этих бирок, чтобы этим великолепием можно было потом пользоваться и что-то найти. Хотя мне просто нужно было перенести мебель и технику. 🤡
Итак, за праздничную неделю, я успеваю написать:
- Рабочий код, который не ломается и железно работает, и который занимает 30 строчек кода вместо 120, костылей почти нет. Цифры примерные на глаз.
- Настоящий интерфейс, пускай и сильно проще чем я хотел изначально
- Функцию по созданию карты символов
- Функцию, которая редактирует карту на лету
- Функцию, которая вставляет прям любые символы
- Компиляцию проекта на Github
- Базовое описание продукта
Чему научился
- Уважать ещё сильнее тех, кто пишет элегантные решения
- Идеи важнее техники, даже если у нас есть обезьяны в космосе
- Функциональный интерфейс лучше красивого
- Работает — не трогай
Что сделал
- Охренел от работы в течение недели по 10 часов в день.
- Кайфанул от того что у меня есть страничка на Github, которая выгружает exe-шник, который запускается и работает у других людей на их компьютерах.
Потрачено: 60-65 часов
Приобретено: Стойкое понимание, что Github придумали гении. Осознание, что у меня есть рабочий продукт. Осознание пока ложное, но узнаю об этом через пару дней.
Неделя пятая · Настоящее расстройство
7—12 января. Нашёл баг с диакритикой. Я тестировал бетку, качал специально с Github, а не компилировал на компе, пытался найти баги и сложности при работе с файлами, скачанными из тырнетика. Как внезапно, нашёл баг работы с диакритическими символами.
Так я не расстраивался с момента, когда я положил 3 системы к ряду. Понял, что выложил в сеть очень сырую версию, которая не может даже в заявленный функционал.
Я бросил абсолютно всё — буквально, даже тренировку отменил в школе и пошёл делать работу с диакритикой. Это заняло где-то 8 грязных часов, но к утру меня была рабочая версия. Срочно выкатил на Github.
В принципе, как мне казалось, что можно сосредоточиться уже на оформлении продукта, т.к. продукт уже готов. И я начал придумывать всякие анимашки, графику, описание, накинул лёгкую айдентику и т.д. Однако, как позже выяснится, баги ещё будут.
Чему научился
- Тестировщики важны
- Если тебе кажется, что продукт работает – перекрестись и закажи нормальное тестирование
- Когда пишешь ТЗ — знай в чем суть продукта
- Фичи должны работать, если заявлены
Что сделал
- Разобрался с диакритикой, но не стал перемудривать, отфлексил мишуру.
- Придумал парочку фишек с подсказками, мелочь, а приятная. Кстати, эту фишку предложила о1-про. Ни Widnows, ни в MacOS этого нет. Хотя, спустя месяц я вроде бы даже знаю почему этого нет, и работает это слегка криво, но всё равно идея норм.
- Немного накрутил анимацию, дописал описание в readme.
Потрачено: 15 часов
Приобретено: Осознание, не без доли сомнения, что у меня есть готовый продукт.
Неделя шестая · Финальные штрихи
13 — 19 января. Мелкие баги. В процессе тестирования некоторых фич, оказалось, что мои функции работают, но с некой долей рандома. Это почти невозможно было понять в обычном режиме, потому что, как потом покажет «тестирование», функция может 5 раз подряд работать корректно, а потом слететь.
Опять же, если нейронке описать проблемы — она приводит 5 способов как это исправить, но с%№а, почему-то она (нейронка) не может писать сразу код так, чтобы учесть это. Пока это моя главная претензия ко всем нейронкам.
В общем, в течение недели докручивал страничку на Github, наводил своего рода марафет, и полностью переписал работу с картой символов. Карта символов заняла пару часов. Ещё одним днём дописал одну важную фичу «от дурака» для работы с виртуализацией, — заняла 5 минут где-то. Поправил Tone Of Voice внутри интерфейса — ещё 20 минут.
Чему научился
- Тестировщики важны прям очень очень
- Элегантность важна, но отладка внутри ещё важнее
- Приятные мелочи, во-первых приятные, а во-вторых мелочи
Что сделал
- Выкатил на Github последнюю версию.
- Написал первый драфт лонгрида.
Потрачено: 10 часов
Приобретено: Понимание, что создать программу это только половина пути, надо теперь её показывать людям.
Три недели пишу этот лонгрид
20 — 26 января. Готовлюсь к отпуску. На этой неделе было слишком много работы перед отпуском. Времени было очень мало — практически ничего не делал.
В субботу за полчасика записал с третьего дубля мычаще-чавкающий обзор, просто чтобы был. Потом по-любому переделаю. Но решил, что если я не сделаю даже такой, это будет потраченная впустую неделя.
Рассказал про свою программу парочке человек на днюхе у мамы, скинул им ссылки. Обещали дать фидбек. Кстати, не дали. Сделал второй подход к черновику лонгрида.
27 января – 12 февраля. Улетели в отпуск. Писал этот лонгрид на телефоне в моменты когда мы куда-то едем или сидим в кафешке и ждем заказ дольше обычного.
13 и 14 февраля. Собираю лонгрид. Впервые в жизни открывал редактор на VC. Нарисовал картинки. Расставил запятые.
Чему научился
Время самый ценный ресурс
Чавкающий обзор лучше обзора, которого нет
Делать решения из разряда «чтобы было» — раньше вообще не умел так делать и очень страдал из-за этого
Что сделал: Понял, что рассказывать про свой продукт, пусть даже примитивный — тупо приятно.
Потрачено: 20 часов
Приобретено: Ещё бoльшее желание, написать этот лонгрид при любых раскладах, даже если его прочитают 1½ землекопа.
А — мне реально хочется этим поделиться, ведь меня это по настоящему заряжает и возможно кого-то тоже зарядит.
Б — когда в следующий раз меня спросят: «Какой курс пройти чтобы стать „Х“?» или «Как войти в айти», я отвечу: «Скорее всего, никакой» и скину ссылку на этот материал.
Итоги, выводы и инсайты
Потрачено
≈ 200–220 часов
Приобретено
- Своя программа на Github
- Воодушевление и заряд по всем фронтам
Выводы
№1 · Если задача не противоречит законам физики, то её решение будет лежать в плоскости наших временных ожиданий.
Да, полететь в космос и построить свой лунапарк без бабок не получится, но с другой стороны — 30 лет назад, свой сайт имел процент людей, стремящийся к нулю, а разработкой одного сайта занимались несколько специалистов с образованием. И да, — стоило это просто космос.
Сейчас — создание сайта это обязательная рутина для кофейни размером 6 м², причём, это может занимать несколько часов от идеи до готового продукта с публичной ссылкой в интернете, а бюджет может быть около нулевой…
№2 · Пилить проект одному реально. Но пилить проекты с единомышленниками в разы легче, проще, приятнее. Сайдхасл — спасибо!
Мой инсайты
- Нейросети всё-таки изменят мир на «до» и «после», как когда-то его поменяли огонь, математика, порох, паровоз, бензин, горячий душ и интернет. Спасибо, кэп!
- Свой маленький проект, лучше проекта, которого вообще нет. И даже маленький проект может приносить большое удовольствие. Понимаю почему его называют pet‘ом.
- Если занимаешься тем, что нравится — успех это лишь вопрос времени.
Главное послание внукам
Надеюсь, моя история вам откликнется и даст мотивацию сделать то, что очень давно хотелось. Например, завести новое хобби, построить свой Лунапарк или костюм железного человека, ну, или на крайняк гараж. Я вот, например, завёл телеграм-канал и начал делать портфолио.
Мне этот проект помог словить воодушевляющий режим, в котором ты №%@шишь не смотря ни на что и успеваешь только находить часы на сон. И при этом не выгорать, а кайфовать. Мой график в декабре выглядел так:
12:00−18:00 дизайню
18:00−21:00 тренирую
22:00−03:00 пишу код
03:00−11:00 сплю
Такой хардкор с тремя работами я мог себе позволить разве что в 19 лет, но тогда была учёба универе — днём, фриланс — по ночам, и тренировки вперемешку с Diablo III всё остальное время.
Планы на будущее и ссылки
От изначальной задумки интерфейс реализован на 30% и нет поддержки MacOS — поэтому развивать продукт есть куда. Если вы маковод и вам такое интересно — дайте знать. Пока у меня 2 запроса.
Страничка hypetype на Github — скачивайте, если вы работаете с текстом и используете специальные и редкие символы. Дизайнерам и редакторам особенно зайдёт, гарантирую. Программа бесплатная.
Портфель с картинками www.simbarus.com
По любым вопросам в Telegram @simbarus
Канал Сайдхасла на Boosty