На фоне большого количества статей вида “как я прошел курсы за 30 дней и стал программистом” я решил поделиться своим опытом, как я стал программистом за 5 лет упорного обучения, не включая время школьной и вузовской подготовки.
Если спросить меня, что больше всего способствовало моему становлению разработчиком, я назову не вуз, не коллег по проектам, не книги, а форум программистов forum.vingrad.ru. Но начать придется издалека.
История началась примерно в 2006 году, точно не вспомнить. Меня уволили из числа охранников на автозаправке, где я подрабатывал в свободное от учебы время.
Пользуясь случаем, выражаю огромную искреннюю благодарность начальнице заправки, которая создала невыносимо давящую враждебную атмосферу в коллективе, что привело не только к моему увольнению, но и к осмыслению, что лучше в подобных местах не будет, что хватит перебиваться временными работами, пора идти в мою профессию.
К этому моменту в моей учебе в вузе закончились предметы, более или менее относящиеся к разработке, включая программирование на C++ (в том самом сине-белом терминале в Borland C++ что-то там), алгоритмы, вычислительные сети, операционные системы и прочее.
Мало кто вокруг меня понимал какие реальные задачи решают разработчики. Одни мои знакомые поставщики временных подработок вроде “переустановить винду в госучреждении”, “поменять винчестер у клиента” уверяли меня, что рынка разработки на C++ в принципе не существует, мол бросай заниматься ерундой, учи 1С, будешь обеспечен всем по жизни. Дали мне книжку, я, почитав ее, почувствовал себя убогим, так как практически ничего не понял.
Уже позже я осознал, что 1C-программист, особенно в те времена это отчасти и бухгалтер, что не понимая предметной области нет шансов понять как все работает и стать разработчиком 1C. Но в тот момент я решил, что 1С не для меня и не жалею об этом сейчас.
К тому моменту я отлично ориентировался во всем, чему нас обучали, в программировании я был одним из лучших, часто ко мне обращались за помощью в выполнении работ по программированию, математике, и некоторым другим предметам, чем я часто подрабатывал. Самое большое впечатление на тот момент на меня произвела вычислительная математика, которая после матана, где нам объяснили, что множество задач в нашем мире не имеют решения и это доказано, показала, что решить можно любую задачу, нужно только задать точность.
Под этим впечатлением мне хотелось найти нечто подобное, где пригодится мое знание математики, не будет бухгалтерии и желательно на C++.
И вот летом я заявил о себе на рынке труда в качестве программиста С++. Я толком не понимал, что искать, как искать, как подавать себя. Не помню, какими ресурсами пользовался, существовал ли на тот момент hh.ru, но помню, что всего я сделал около 80-ти откликов, был на 10-ти собеседованиях, и в итоге нашел свое первое место работы, но это было значительно позже.
Первый верный вывод, который я для себя сделал в процессе, это набивать руку на тестовых заданиях. Я пробивался до тестового задания, которое давали либо сразу после отклика, либо первой беседы, и пытался изобразить лучшее решение, на которое был способен. Я не жалел сил, порой переделывая решение по нескольку раз, чтобы сравнить между собой, где-то насчитал даже с десяток реализаций.
Оглядываясь назад я понимаю, насколько неуклюжими были те решения, в основном потому что некому было дать мне фидбек. К примеру в тестовом задании “сделать в консоли навигатор по реестру Windows” я сумел соорудить иерархию из трех уровней наследования, просто потому что “знал ООП” и хотел это продемонстрировать.
И вот, мне попалась очень интересная на компания.
По словам интервьюера они занимались разработкой средств обработки изображений. В работе было задействовано много математики и программирования, все как я хотел. Нужно было выполнить тестовое задание, прочесть цветную картинку в из файла в формате BMP RGB24, разложить на три картинки BMP GrayScale8, чтобы в каждой лежало по одному каналу, R, G и B соответственно (все из памяти, мог уже забыть какие форматы существовали). Думаю с текущей доступностью информации подобную задачу можно решить и школьнику, способному сформулировать верный запрос. Но в те времена почти все в этой задаче было непонятно.
Прошерстив все оффлайн магазины книг я нашел одну, наиболее близкую книгу, где рассказывалось как с помощью MFC (Microsoft Foundation Classes, толстая обертка над Windows API, тот который еще даже не на .NET) прочитать файл BMP и снова сохранить его в файл. Но в процессе выполнения задания я столкнулся с тысячей вопросов, ответы на которые сейчас можно получить в первой строке поиска на stackoverflow. В то время я вынужден был искать ответы в MSDN. Поиск информации в MSDN всегда был увлекательным путешествием: множество разрозненной информации, иногда в подробных деталях описывающей нюансы определенного предмета, иногда не раскрывающий вообще ничего. Видимо разработанная людьми с разной мотивацией и способностями эта база знаний была мало структурирована, переход по ссылкам в процессе чтения приводил в самые неожиданные статьи. Примерно 10% изученного материала касалось предмета твоего поиска, остальные 90% касались более или менее отдаленных тем, но эти материалы тоже приходилось изучать, и это позволяло строить полную картину о предмете изучения и смежных предметах.
Получается в те времена, из-за плохого качества поисковиков и недостаточно накопленной базы знаний, специалистам приходилось читать документацию, литературу большими объемами, получая в процессе более полное представление, нежели то полотно из обрывков информации, которое складывается у многих специалистов сейчас.
Тем не менее сведений в MSDN все равно не хватало, я стал искать другие источники информации. В то время поисковики работали не так как сейчас, интернет был дорогим и каждый час был на счету, причем занимал телефонную линию. Ну а самый важный фактор в том, что пользоваться интернетом я не умел.
И вот где-то в обсуждениях в интернете мне попалась офлайн-версия форума forum.vingrad.ru. По своей сути это был архив склонированной версией форума с прикрученным каким-то образом поиском по этой базе.
Пользу этого архива сложно было переоценить, в сравнении с MSDN здесь гораздо чаще находились ответы на любые возникающие у меня вопросы, причем часто я находил информацию в виде сформулированного вопроса, ответа на него, нюансов. Я был в восторге.
Задание с разложением картинки на каналы я выполнил, даже с интерфейсом в котором можно было просмотреть исходный файл и результаты. Однако в работе мне отказали, причем это был не последний раз когда мне отказывали.
Отказ конечно расстроил, но я уже понимал, что разработчики C++ существуют, вот они где-то работают и обсуждают вопросы связанные с работой, значит я тоже сюда попаду.
Как-то я не смог найти ответ на один из своих вопросов при выполнении очередного тестового задания и решился задать вопрос на самом форуме:
https://forum.vingrad.ru/forum/topic-105189.html
помню, что основную задачу тестового задания я решил, и хотелось украсить интерфейс консольного приложения добавив возможность работы с историей ввода. Правда самого задания уже не помню.
Очень волновался, но ответили мне удивительно дружелюбно и по делу.
Я стал больше вовлекаться в общение на форуме, моими любимыми разделами стали: «Общий C++», MFC, WinAPI, «Центр помощи».
Увидев очередной вопрос от участника , особенно на который не дали ответа, я воспроизводил проблему из вопроса у себя, и пытался решить. Довольно часто решить проблему удавалось, попутно собрав очередную порцию знаний про уставное и неуставное поведение языка, фреймворков, библиотек, операционных систем.
Особое внимание стоит обратить на «Центр помощи», уникальный раздел, по крайней мере в то время. С одной стороны «двоечники» различных вузов размещали здесь учебные задания по программированию, с другой стороны ребята вроде меня бесплатно выполняли их, мерясь попутно решениями с другими такими же. У нас даже образовалось нечто вроде своего сообщества, человек в 10. Когда появлялось новое задание, каждый из нас старался выполнить задачу быстрее остальных, применить более изящное алгоритмическое решение. Удавалось иногда даже пошутить в коде, чтобы было понятно только своим.
Именно в «Центре помощи» набивалась рука, чаще всего на мелких, несложных (для нас) задачах.
В разделе «Общий C++» чаще всего шли обсуждения теоретические, я сначала восхищался другими, потом перенял манеру цитировать стандарт языка C++. Верхом крутости было в ответ на вопрос процитировать стандарт, сказать, что он предписывает вот так, компилятор A ведет себя так, а компилятор Б так. Еще очень круто было бросить при случае слова, что это UB (undefined behavior) и сделав загадочное лицо удалиться.
В разделе про MFC решались практические вопросы, связанные с использованием MFC. Уже в те времена MFC называли «Good example of a bad example». Создатели проповедовали принцип «делайте методы ваших классов публичными, вдруг они еще кому-то понадобятся”. Жизненный цикл компонентов был непредсказуемым, например в задачах инициализации компонентов пользовательского интерфейса установить в какой момент что разрешено делать нередко можно было только опытным путем. Таким образом опытный разработчик MFC был на несколько голов выше неопытного, потому что было множество нюансов, которые просто нужно было знать. Решая чужие проблемы я поднаторел в работе с MFC, меня даже приняли в состав модераторов ветки, это было очень круто, я получил звание близкое к тем, что было у невероятно крутых в своих областях участников форума.
Где-то в этот момент произошло важное для меня событие. Ко мне в личке обратился один из старожилов форума, он был серьезным специалистом в своей теме, в том числе был разработчиком C++, но не имел раньше дела с MFC. Жизнь заставила его применить этот фреймворк, и он столкнулся с этой кучей нюансов, стал задавать вопросы на форуме, где я активно подключился к решению. Видимо после очередного подгорания он написал мне с предложением моими силами разработать прототип его продукта, без бизнес-логики, только ту часть, что отвечает за взаимодействие с пользователем. Это была огромная честь и оказанное доверие, я без раздумий согласился и пустился в многочасовую борьбу с MFC. Задача была со сложностями, не зубодробительными, но помучаться пришлось. Надежда той ночью сменялась отчаянием и обратно, я не уложился примерно вдвое в срок в несколько часов, который сам изначально озвучил, но задачу решил в требуемом объеме. Разработчик явно обрадовался результату и отправил мне 100 долларов через Western Union, он проживал далеко за границей. Я не верил до того момента, пока не получил деньги на руки, счастью предела не было, это было первое достижение на пути к тому, чтобы стать разработчиком. Притом, это были большие деньги за ночь работы в те времена, что говорить о том, какими они казались студенту подрабатывающему охранником.
Дальше стало проще, у меня появилась некоторая доля уверенности в себе. На одном из последовавших собеседований я выступил не слишком бодро, но услышал суть задачи, которую нужно решить. Мне никто не перезвонил и не написал после собеседования, но я не ждал ответа. Вернувшись домой я пустился в непрерывный трехдневный сеанс разработки. Прототип решения был готов, это было страшное десктопное приложение снаружи и не передать словами насколько страшное внутри. Уже позже я переписал его полностью на MFC, а потом на Qt. Но главного я добился, прототип явно давал понять, что задача мне по зубам, что я продемонстрировал на встрече которую инициировал сам.
Это стало еще одним шагом в становлении разработчиком, но я даже близко не ощущал себя настоящим программистом. Настоящие программисты были там, на форуме, они знали в разы больше меня, они умели проектировать, они знали кучу инструментов, бибилиотек, систем, железа.
Дальше были годы работы, так случилось, что работал я в сфере обработки изображений, управлении разными устройствами, в том числе захвата изображений. Со временем я освоил и применил в своих программах STL, boost, OpenCV и всякого по мелочи.
В разработку стал привлекать еще программистов, некоторые из них были знакомыми по тому же форуму.
Здесь же, на форуме мое внимание обратили на Qt, и после очередного указания я решил все-таки попробовать этот фреймворк. Еще способствовало требование бизнеса выпускать кроссплатформенное ПО.
После MFC знакомство с Qt перевернуло мое представление о том, что такое удобный инструмент, все было предсказуемо, документация краткой, но исчерпывающей. Как следствие я сделал вывод о своей собственной зашоренности, ведь работая с MFC я считал, что это хороший инструмент, а все, кто его не освоили считают плохим, потому что не поняли как с ним работать.
Здесь же, на формуе, меня подтолкнули к рассмотрению Python, и я взял его в качестве скриптового интерфейса для своей системы. Ох и намучался же я с тем, чтобы обеспечить параллельную обработку изображений скриптами Python в программе, но в итоге решение нашлось.
Я посвящал все меньше и меньше времени форуму, разработка и появившиеся управленческие обязанности занимали все время свободное ото сна в сутках.
Общение больше перешло в курилку, в споры ни о чем.
И вот настал торжественный момент, когда я ощутил себя программистом. Однажды придя на работу я я попытался взяться за очередную задачу, но не смог себя заставить.
Флагманская программа предприятия над которой я работал сначала один, потом командой, была завершена.
Это был кроссплатформенный программный продукт на C++ и Qt, успешно запускаемый и тестируемый вместе с инсталляторами под несколько популярных дистрибутивов семейств Windows, Linux, Mac. Я был доволен архитектурой системы, по крайней мере, мне не хотелось ее еще раз переделать. Мне нравились примененные технические решения, например собственная библиотека обработки изображений, интегрирующая возможности популярных библиотек обработки изображений, с возможностью доступа к отдельным пикселям в разнообразных форматах без проседания производительности за счет сочетания шаблонов C++ и своего DSL. Python в качестве интерфейса для отладки алгоритмов на лету, без пересборки. Несколько алгоритмов обработки изображений, реализованных своими руками, например сборка одного четкого изображения из нескольких, где сфокусированы отдельные участки, где самая интересная часть это бесшовная сборка нескольких изображений в одно.
Все это работало у пользователей, со всеми документациями, поддержками, лицензированием и прочим.
Похоже теперь я стал программистом. Но никакой радости не было, я не мог делать что-либо дальше в этом проекте, просто садился за рабочее место и не мог себя заставить. Я не знал, чем мне заняться дальше, цель тоже сгорела. Наверное сказался этот режим в течение около 5-ти лет, и наверное это было то самое выгорание.
Дальше было много всякого: уход в наивный консалтинг, разработка веб-приложений (на Django еще до первых версий я сделал работоспособный во всех аспектах магазин меньше чем за месяц), уход в управление все большим и большим числом сотрудников, переосмысление возврат обратно, ближе к разработке, освоение JS, TS, Go, Rust в процессе, выход в консалтинг уже в более взрослом режиме, свои продукты и много по мелочи.
Не помню точно в какой момент я и вовсе перестал посещать форум, раз в несколько лет вспоминая о нем.
Несколько раз предпринимал попытки собраться с теми, кто еще помнит, но встречу собрать так и не удалось.
Посещаемость самого форума тоже тем временем сошла на нет.
В телеграме сейчас существует группа из 10 человек из прежнего сообщества, но обычно там тихо. Разве что одна известная на форуме особа развлекает участников группы своим экстравагантным поведением. Ссылку на группу публично оставлять не буду, но интересующиеся найдут, либо пишите в личку, пришлю.
Закончу тем, с чего начал. Именно forum.vingrad.ru больше всего поспособствовал тому, что я стал программистом. Залогом его успеха была невероятная по любым меркам терпимость и дружелюбие к новичкам. На форуме никому в голову не приходило самоутверждаться за счет унижения неопытных коллег. В наше время я не знаю таких площадок. Из некоторых групп в телеграме, посвященным разработке хочется бежать от атмосферы внутри, на stackoverflow плохо подготовленному новичку разместить вопрос шансов нет, хабр вообще не для новичков.
Почему нет места новичкам? Может потому что во времена Винграда, RSDN в нашу профессию шли ведомые внутренним стремлением, интересом к делу, а не ради того, чтобы войти в элиту, которая будет на всех остальных плевать и удовольствие получать? Думаю я не прав и это просто старческое брюзжание.
https://forum.vingrad.ru/forum/topic-111027.html
Комментарии (19)
Javian
00.00.0000 00:00+2С темой (особенно с последними абзацами) перекликается публикация "Почему форумы продолжают жить" https://habr.com/ru/company/ruvds/blog/709572/
asked2return
00.00.0000 00:00+1Но в те времена почти все в этой задаче было непонятно
.чему же вас учили тогда
prishelec
00.00.0000 00:00+2Ого, тему оформления так и не сменили за более чем 10 лет. Аж ностальгия.
SahaSenik422
00.00.0000 00:00В то время все отличалось если сейчас обычный школьник может насмотреться видео и выучить сс
asked2return
00.00.0000 00:00vhs
jobber_man
00.00.0000 00:00+3SECAM, первый, второй и пятый канал. VHS был у особо продвинутых, но там крутили что-то очень отдаленное от программирования. Хотя, на тему deadline было несколько немецких фильмов.
asked2return
00.00.0000 00:00y 600 секунд вполне комnютерное оформление было чтобы научиться ... vhs 30 лет назад как и кабельное было не проблемой ga к 95 vhs-c или ibm-pc даже в ближайшем дворце пионеров a то инет в детском-центре развития ну а каждый обладатель паспорта имел право на 15 минут/неделю у сороса законектится в ближайшем вузе - а если ты ещё программировать то тебе безлимит на доступы но дома под кальянчик конечно как с chatgpt
peremudrilius
00.00.0000 00:00+2Привет.
А Вы сейчас помогаете людям, так же как Вам помогли тогда, на форуме, в решении задач, проверке кода? Тратите своё время на разъяснения и объяснения?"старческое брюзжание " сколько Вам лет, старче?
dimka11
00.00.0000 00:00+2Stackoverflow намного мягче стал со временем, раньше действительно сложно было задать вопрос и не получить кучу минусов, а в Telegram чатиках все сильно зависит от конкретного чата.
Хабр так вообще практически открытый стал, раньше даже комментарий без инвайта оставить было нельзя.
Nasreddin_Hodja
00.00.0000 00:00+1Залогом его успеха была невероятная по любым меркам терпимость и
дружелюбие к новичкам. На форуме никому в голову не приходило
самоутверждаться за счет унижения неопытных коллег. В наше время я не
знаю таких площадок.Реддит, например, правда он англоязычный. Но там новичков так много что скучно: большинство тем или нубские вопросы, или новички хвастаются хелловорлдом.
ivankudryavtsev
ФМШ, выпуск 2000й, при НГУ. Многие, кто в физмат направлении были, хотели поступить на мехмат или физфак, научиться божественно прогать на C++, уехать в США, Канаду, etc. И это и случилось массово (ну понятно, там кроме C++ много всего).
А вы: охрана, Борланд какой-то там, 1С. Странная среда у вас была... что хоть заканчивали?
Javian
Город имеет значение. Тут не раз в комментариях одни доказывали, что в 90е "х86 был у каждого", а другие возражают, что тогда только на картинке видели.
dimka11
Скорее школа, а не город.