...

суббота, 11 июля 2015 г.

Конец — это только начало

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

В 2011 я, как кажется, не осознавал, что стартапом был не тот романтичный проект lovepinger, а стартапом был я сам, а точнее так: во мне случился не start, а reset, что привело к существенным изменениям в жизни.

Но, прежде чем начать, ремарка. Это четвертая попытка написать пост для хабра, потому как мне всегда чего-то не хватало, какой-то законченности, завершенности. Ее не было в 2012, в 2013 и год назад тоже не было. Но выбрасывать старые записи мне не хочется, и я решил частично их использовать в рубрике «Из блокнотика». Это может быть довольно интересно. Посему считайте так, что этот пост писался четыре года к ряду.

Сам проект Lovepinger я перестал поддерживать еще в 2012. Хотя количество зарегистрированных пользователей и превысило 25 тыс., их активность была не велика, а совпадений и вовсе было всего три штуки. Но просто так сдаваться не хотелось и верилось, если уж не в чудо, то как минимум в необходимость мобильного приложения. Бесплатного, разумеется.

Не буду вдаваться в объяснения (для этого нужно писать еще одну заметку), просто скажу, что выбор пал на Windows Phone, а значит – здравствуй C#.

Вы представляете, что такое для новичка C#? После поверхностного изучения JavaScript и PHP. С нуля. В тридцать лет. С экономическим и юридическим образованием. Я вот не представлял, совсем не представлял.

Из блокнотика, 2012 год, где-то зимой.

Решено. Качаем Visual Studio, SDK под Windows Phone. Заказываем пару книг по C#.

Вот так я ее впервые и увидел, мою Шарли (C#). После Скарлет (JavaScript), Шарли казалось строгой и до безобразия привередливой, ведь у нее непременно все должно быть classно. Пусть даже мелочь ты делаешь – делай это classно. Она как жесткая супруга, для которой главная ценность – семья (логика), а муж есть тот, кто ценность эту должен охранять.

Шарли оказалась полным антиподом Скарлет: она не терпит беспорядка; у нее все на своих местах; с ней общаться нужно только трезвым. И с ней мне было несоизмеримо сложней, трудней и утомительней. А когда она открыла мне reflection, хотелось просто застрелиться.

Но очень скоро я начал замечать красоту в ее строгости, грацию в ее подходах, преисполненных любовью ко всему classному. Вот оно – объектно-ориентированное программирование, что не просто набор пресловутых объектов, не просто набор объявленных классов, интерфейсов и бог весь чего еще, а – принцип взаимодействия.

Я и правда был потрясен. Еще до C# я встречал описание ООП, но читать одно, а осознать совсем другое. Уже позднее, год спустя, я открою для себя рефакторинг и окончательно окрепну в мысли, что расширяемое и легко сопровождаемое приложение если уж не должно быть выполнено в ООП, то как минимум должно заимствовать некоторые принципы и подходы.

Забегая немного вперед скажу: мне кажется зрелость разработчика приходит тогда, когда он вдруг понимает, что язык программирования – это лишь инструмент – это отвертка. А вся суть сокрыта в структуре и логике кода, что есть чертеж, схема, если хотите. И, продолжая эту мысль, можно сказать что не бывает плохих языков, хотя бывают и не удобные.

К моменту публикации приложения в магазине Microsoft, я был уже не в России. Я уехал, еще в начале 2012.

Ощущение того, что ты занят чем-то не тем и где-то не там, не покидало меня, наверное, год, тот год, что я занимался Lovepinger. И к его (проекта) завершению я был уже готов, готов на все плюнуть и изменить свою жизнь (я слукавлю, если не упомяну, что сильное влияние на мое решение оказало и то, что в 2011 стало понятно, кто будет следующий президент в РФ)

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

Уезжая, я иллюзий не питал. В Европе российское экономическое и тем паче юридическое образование, как бы это помягче сказать, бесполезно. Иные законы, иные подходы, иные стандарты. Я прекрасно понимал, что единственный способ самореализации – это двигаться в сторону web-разработки. И я был готов к этому: готов не спать ночами; готов читать порой невыносимо нудные книжки; готов учиться, пробовать, ошибаться и снова учиться. Но…

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

Из блокнотика, 2012 год, осень.

Иногда мне кажется, что только русский человек может так пожелать удачи в твоих начинаниях, что лучше бы просто и прямо послал. Было бы по крайне мере честно.

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

Главный урок, что я для себя вынес – «Да, пошли они все!». Моя жизнь – мой выбор. Простите за пафос, но только так делаются действительно серьезные шаги – без оглядки на чье-то, пусть даже очень ценное, мнение.

После приложения для lovepinger к середине 2012 я сделал и другое – int.SMS, все под ту же платформу. Это был менеджер sms-сообщений с возможностью их отправки через мой шлюз, что как бы подразумевало существенно более низкую стоимость сообщения. Стоимость действительно на тот момент была примерно в три, четыре раза ниже среднерыночной (для роуминга, на постоянных пользователей которого и делалась ставка).

То, что проект оказался не таким провальным, как lovepinger, а придуманные мною решения по интерфейсу удачными, подтвердил тот факт, что через 2-3 месяца после выхода int.SMS «сломали», а «раскупоренная» версия приложения красовалась на 4pda. Война с администрацией этого сайта ни к чему не привела – копии как лежали, так и лежат.

Я блокировал «нелегалов» вручную, но тупо не успевал за ними. Я обновлял и внедрял защиту и в логику, и в код, но с этой стороны подводили Microsoft, что могли рассматривать каждое обновление неделю, а то и дольше. Короче, я тупо терял деньги на российской аудитории больше, чем зарабатывал на честной, преимущественно европейской. Int.SMS пришлось закрыть.

Окончательно расставшись (на время) с мыслью, что Сергею Брину в ближайшее время руку мне не пожать, я пришел к мысли, что свою руку надо бы набивать как можно большим количеством практики. Ставку я сделал на web-разработку и… ну и понеслась: фабрика библиотек (JavaScript); модуль по работе с CSS анимацией, с анимацией в canvas; свой собственный WYSIWYG редактор (JavaScript); загрузчик ресурсов (JavaScript, PHP, C#) и много-много чего еще. Я просто брал и выдумывал себе задачу, а затем решал. И снова выдумывал. И снова решал. Собственно, так и прошел почти весь 2013 год.

Конечно, после C# и понимания того, что есть ООП, а также пары книжек про профессиональный JavaScript, мои подходы к этому языку изменились. И он открылся с совершенно иной стороны – та гибкость, которую дает JavaScript при грамотном подходе преображает код, делая его структурированным, понятным, расширяемым.

Из блокнотика, 2013 год, лето.

Оказалась, что свобода, присущая JavaScript, может быть обращена в совершенно иное русло, в сторону упорядоченности и прозрачной логики. Наверное, JavaScript мог бы быть одним из самых ярких примеров того, что язык (синтаксис) ничто, проектирование – все.

Но кроме всей этой романтики, иногда возникает желание кушать. А деньги от всего проданного стремительно кончались. Где-то в середине 2013 года я создал свое первое резюме разработчика. Смотрелось скудновато, кто ж тут спорит, но то лишь начало. Через 3 месяца муссирования HR сайтов и кадровых агентств – bingo! Я нашел свою первую работу в Европе.

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

А самым сложным была не сама по себе работа, нет, а был язык. Ведь я еще не упоминал, что мой английский ограничивался «кривым туристическим». Посему в язык пришлось вникать «на лету», что было крайне сложно (мне вообще языки тяжело даются).

Из блокнотика, 2013 год, осень.

Существует стереотип и довольно устойчивый, что мол найти работу в Европе можно лишь зная язык страны, где та самая работа. Это действительно так. Найти работу, скажем, в Германии будет проще в разы, зная немецкий. Но, незнание языков не есть приговор, ведь мы очень часто говорим на языке своей профессии, и если то, что вы говорите своим кодом, своей логикой, если это действительно интересно, то фактор языка становиться вторичным.

Так же можно уверенно выделить ряд стран, где английский приживается плохо и преимущественно используется местный язык. Это: Германия, Франция, Норвегия, Бельгия и Нидерланды. В других странах Европы, как мне показалось, с английским проще, и он может использоваться как единственный необходимый.

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

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

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

Завести учетную запись в уютной жжшке, скажете вы? Ну, да, вариант. Но не интересно.

В общем, так я познакомился с WordPress и решил попробовать написать свой шаблон. Во-первых, может получится продать. Во-вторых, я смогу сделать сайт под себя со всеми своими хотелками.

Продать не получилось.

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

Вообще за несколько лет на примерах разных магазинов ПО (будь то Microsoft MarketPlace или тот же ThemeForset) я осознал насколько же бесправна профессия программиста, разработчика, дизайнера, всех кто решается устраивать свою жизнь сам, а не через работодателя. Как юрист, я насчитал десятки нарушений положений по честной конкуренции и защите прав производителя (не потребителя). Самым ярким из которых, был ответ от EnvatoMarket, где я пытался разместить свой plugin. Близко к тексту и по-русски: «Ваш плагин во многом повторяет функциональность уже имеющихся в нашем магазине». Трудно представить себе продуктовый магазин, где был бы лишь один вид молока, одной марки; а вот в мире EnvatoMarket только такие магазины и есть.

Быть может, когда-нибудь, подам на кого-нибудь в суд, хорошенько подготовившись).

Из блокнотика, 2012 год, глубокая осень.

Удивительная позиция Microsoft. Я им говорю, ребята, мое приложение запрашивает уникальный ID телефона, да и сам магазин об этом предупреждает – мол приложение собирается идентифицировать аппарат. Ну раз я, вы и покупатель моего приложения знаем, что этот несчастный ID будет определен, то почему вы не даете мне этот ID в статистике тех, кто купил приложение? Какие здесь могут быть правовые ограничения, на которые вы ссылаетесь? И почему вы не даете мне прямую ссылку на закон? Ведь такой до безобразия простой подход просто сведет на нет пиратство.

После неудачных попыток разместить свой шаблон в магазинах, я решил делать сайт под себя, а точнее под то, что считаю полезным и необходимым. Идея моего последнего проекта связана с моей же иммиграцией (что как бы очевидно) и крутится вокруг одной простой мысли – информация должна быть бесплатна. Все, кто пытался собрать данные об эмиграции из РФ, поймут меня очень точно. К тому же я нашел человека, помогавшего с первичным контентом. Я не буду здесь особо пиарить этот проект (так как посыл поста несколько иной), дам лишь на него ссылку для вашей оценки (если сочтете нужным).

Мое же первое глубокое знакомство с CMS на примере WordPress дало мне понимание того, что эта штука должна быть выполнена в ООП и/или, как минимум соответствовать модели MVC. Ни того, ни другого в WordPress, как я увидел, нет. Вообще этот движок мне показался, как бы это сказать – загнанным в угол. Его бы переписать с акцентом на ООП, сделать более логичным, более управляемым; но сотни тысяч уже реализованных решений этого сделать не позволяют. Либо разработчики, тупо не хотят на этот счет заморачиваться и делают ставку как раз на доступность начинающим программистам (которые еще любят себя называть дурацким словом «сайто-строитель»). В конце концов я и сам выбрал WordPress, потому как с него легко было начать.

Из блокнотика, 2014 год, лето.

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

В общем спустя полтора или два месяца с момента первых экспериментов с этой CMS, я занялся разработкой своего небольшого framework’a для WordPress, чтобы хоть как-то структурировать код и не запутаться в «расползающейся» логике. Критерий был до неприличия прост: отделить данные от логики, логику от представления, то есть приблизиться к MVC. И, полагаю, у меня что-то из этого получилось, ведь несмотря на то, что шаблон включает в себя более полутора тысяч файлов, я прекрасно понимаю, что и где лежит, и легко дополняю нужным функционалом сам движок. А сделал я не так уж и много: ввел понятие провайдера данных (контролер, отвечающий за доставку данных из базы данных и их обработку); разработал элемент «компонент» (специфический функционал, подключаемый только по необходимости) и сделал контролер представлений (полностью отделив логику от разметки, что позволило прийти к использованию «чистых» html файлов взамен php шаблонов и раскидать описание стилей для каждого элемента по отдельным файлам (css)).

Из блокнотика, 2014 год, осень.

Мне вот интересно, почему подавляющее число разработчиков для WordPress непременно запихивают все стили в один файл, получая таблицу стилей на 10 тысяч строк? А как потом искать, как править? Почему нельзя собрать в один файл из многих, сохранить на сервере и передавать клиенту, а при обновлении какой-то части – просто пересобрать этот, скажем, результирующий файл? Или почему нельзя написать двадцать строк JavaScript и 10 строк PHP и сохранять ресурсы в localStorage оттуда же их подгружая при повторном открытии страницы?

Вообще я должен честно сказать, я никогда так много не работал. Будучи «по ту сторону баррикад» (выражение из первого поста) продолжительность моего рабочего дня в среднем была около 10 часов (да, некоторые директора так работают). Плюс, почти всегда один из выходных (часов на 6-7) тоже жертвовался для работы. Но, понимаете в чем соль – я не уставал. Я мог запариться, заколебаться, задолбаться в конце концов, но вряд ли устать.

Тут же совсем иное дело. Разработчик – это, как я теперь понимаю, довольно непросто, особенно если ты ищешь решение. Не копи-пастишь, как модно говорить, «лучшие практики», а разбираешься, пытаешься понять все до последнего if и else. 5-6 часов сна – это нормально. 7 – это праздник. Но… усталость эта, она в кайф, она приятная, ибо ты делаешь то, что тебе по душе, то чем ты, как оказалось, всю жизнь хотел заниматься, но не решался себе в этом признаться.

* * *

Итак, сегодня 2015. Прошло почти четыре года со старта моего StartUp’а (простите за тавтологию). Тот свой пост, я завершил несколькими советами для начинающих. Сейчас, я хотел бы сделать тоже самое, но, быть может, не только для начинающих, но и для раздумывающих. И пусть мои сегодняшние советы будут куда более философскими, чем практичными, я, все же, надеюсь, что они окажутся кому-то полезны, кому-то своевременны.

  • Не слушайтесь никого, слушайтесь только себя и верьте только себе и только в свои силы. Эту жизнь живете вы и как бы это эгоистично не звучало, проживать ее надо для себя в первую очередь. Даже в падающем самолете инструкция нас учит – думай вначале о себе, а потом уж о других. И, да, «никого» значит никого; исключений нет.
  • Чем сложнее цель вы себе выбираете, тем больше на пути к ней будет спотыканий, падений и неудач – тут прямая корреляция. Все что нужно, просто легче к этому относиться и ехидно улыбаться судьбе в глаза.
  • Если вы решились на какие-то серьезные перемены в жизни, то идти придется до самого конца. Назад пути, как правило нет. Если же путь назад есть, то это не серьезные перемены)
  • Вы обязательно встретите двух опасных врагов – лень и уныние. Они меж собой тесно связаны, порождая друг друга и питаясь неудачами. Но лучшие оружие против них – мечта и вера в себя, а еще, иногда, бутылочка хорошего вина. Сюда же я бы посоветовал почитать эссе Альберта Эйнштейна «Наука и религия» (вроде 1930 года или 1932 года).
  • Самая лучшая книга из всех (не считая книг Стивена Хокинга), что я на данный момент прочитал – М.Фаулер, «Рефакторинг. Улучшение существующего кода». И пусть вас не смущает, что она десятилетней давности – эта книга не о программировании, эта книга о проектировании. Тут я повторюсь, но это важно. Учится надо по книжкам, а не статьям и уж тем более видео-курсам с youtube.
  • Не бывает неудобного времени что-то начать, равно как и не бывает удобного. Однако, «завтра» всегда будет сложнее чем «сегодня».
  • Если вы знаток PHP и JavaScript, то изучение ООП языка (того же C# или Java) будет вам на пользу хотя бы потому, что вы будете писать совершенно иной код на вашем любимом PHP и JavaScript.

Большое спасибо, тем кто прочитал, надеюсь не скучали. Удачи, света и тепла.

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

P.P.S.
Обращаю ваше внимание, что написанное выше – есть описание моего собственного опыта, а значит и те выводы, что сделаны мною априори субъективны.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий