Русский
Русский
English
Статистика
Реклама

Учеба в it

Как Qt сделал студента человеком

10.09.2020 02:16:17 | Автор: admin

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


Ранний университет


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


Поиск себя


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


Еще в школе я начал увлекаться WarCraft III, а затем играть онлайн в Battle.net. Так познакомился с несколькими играющими людьми из своего города. Мы общались, играли, устраивали кланвары, в общем довольно весело проводили время, хотя уже тогда игра начала потихонечку увядать, самый расцвет соревновательного времени игры я не застал. Чтобы поддержать интерес к любимой игре, несколько парней из моих знакомых решили организовать турнир, в котором могли принять участие все желающие. Я же вызвался помочь в организации, а именно в расклеивании объявлений о нем на безвозмездной основе.


Сейчас листовка не может не вызывать улыбку, особенно "амбициозный интернет-проект"

(турнир был успешно проведен, а видео с него в 640x480 вызывает дикую ностальгию)


Листовки нужно было физически забрать в офисе одного из ребят, и мне впервые довелось пообщаться с ним лично. Он работал в конторе, базирующейся в здании организации а-ля бизнес-инкубатор, внутри которого были достаточно прикольные и комфортные офисы. Я был очень впечатлен, никогда ранее не видел ничего подобного. В ходе ознакомительной беседы я поинтересовался о том, чем он занимается, как попасть в аналогичное место и как начать зарабатывать как уже говорил раньше, это была животрепещущая для меня тема. Приятель учился на филолога, соответственно все его советы в той или иной мере касались работы с языком. Он порекомендовал мне начать работать хоть где-то, например в call-центре (что неудивительно, учитывая его профиль). Я его послушался, и даже пособеседовался разок в какой-то конторе слава Богу меня не взяли :) Еще один приятель зарабатывал по тем временам неплохие деньги дизайнерством вроде как он рисовал модельки различной мебели в 3D-редакторе, а так же рисовал разнообразные логотипы в Photoshop'e. Каждый кулик свое болото хвалит, так что неудивительно, что этот товарищ порекомендовал мне заниматься дизайнерством :) В эту тему я углубился уже намного сильнее, купил книжку "Photoshop для чайников" (буквально), и прорешал ее от корки до корки, проделав все примеры от начала и до конца. Я реально знал весь Adobe Photoshop CS2.



(та самая книжка и консервативный UI Photoshop CS2)


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


Первые шаги в правильном направлении


Тем временем заканчивался первый курс в университете. На тот момент я знал только самые азы программирования на C (даже не C++) и по-прежнему увлекался Warcraft III. Одним из самых топовых ресурсов в России по этой игре тогда (да и сейчас) был сайт GoodGame.ru. Услышав, что на сайте неким D39 (я его сначала хотел назвать неизвестным волонтером, пока не накопал тему на форуме) создается проект для проведения кастомных игр по варкрафту (нечто вроде Garena или GGC), я тут же решил присоединиться к проекту. На тот момент у него уже много всего было готово примерный UI, старт игр, матчинг соперников, etc. В ответ на мою просьбу о присоединении D39 поинтересовался моими знаниями, а потом отправил читать доку по WxWidgets. Господи, это был просто китайский. Какие-то непонятные вещи, контролы, циклы событий, а в каждой второй ссылке разбирающиеся люди спорят о том, что лучше WxWidgets или Qt. Я старался, но абсолютно ничего не понял. Да и проект, как я помню, сам по себе затух, ничего готового релизнуть не получилось. С большим трудом сейчас откопал тему на форуме и даже нашел свой коммент: https://goodgame.ru/topic/7143/. Жалко скрины все протухли...



(сообщение на форуме о начале разработки)


Еще из примечательного за этот период: в самом конце курса по программированию у нас была задачка на связные списки. Уж не помню почему, но я как-то быстрее всех разобрался в теме, и затем помог выполнить и сдать лабораторку всем в группе. Причем несмотря на пользование Visual Studio, я никогда не пользовался отладкой прокручивал весь код в голове, а если и отлаживался, то обычными принтами (такая закалка с раннего обучения оказалась очень кстати в будущем, когда перешел в разработку под мобильные ОС/Linux). Оглядываясь сейчас назад я понимаю, что это ценнейший опыт понять тему чуть-чуть лучше других и затем объяснять им, получая в процессе еще больше знаний. Потом так случилось с курсом по компиляторам, с git'ом и т.д.


Середина университета


Черт его знает, что меня надоумило это сделать, но после первого курса во время летних каникул я от корки до корки прочитал книгу "Объектно-ориентированное программирование в C++" (Лафоре). Точно помню, что посоветовал мне ее приятель, так что не стоит недооценивать общение с другими студентами во время обучения. На чтение и прорешивание всех заданий книги ушел примерно месяц. Благо я уже натренировался работать с книгой в таком формате на "Photoshop для чайников". К началу нового учебного года я подошел во всеоружии. Начавшийся курс по С++ казался элементарным, я периодически задавал лектору нетривиальные вопросы, общался с ним о тонкостях языка, да и вообще в целом один из немногих понимал, что вообще происходит и о чем речь. К экзамену впервые не нужно было готовиться и учить билеты. Это было абсолютно новое, непривычное чувство всю необходимую для сдачи информацию я знал.


Знакомьтесь Qt


На текущий момент читающий может задаться вопросом а причем вообще Qt в названии статьи? :) А я как раз собирался рассказать Позднее случилось еще одно совершенно случайное, но судьбоносное событие. После одной из практик мы с товарищем засиделись в аудитории. Кажется, мы рисовали какие-то окошки на голом WinAPI, и дико удивлялись тому, сколько всякого кода генерирует Visual Studio в пустом проекте. Когда опомнились, нас уже потихоньку выпроваживал преподаватель, потому как ему нужно было на другую пару. Случился примерно такой диалог (преподаватель и студенты):


П Так WinAPI это старье беспросветное, на нем уже никто не пишет
С Да? А на чем пишут сейчас?
П Ну на Jave и на Qt


Ого! Классно, Qt, я уже слышал про него, надо попробовать, ведь мне столько раз встречалось название этой библиотеки, когда я собирался учить WxWidgets в волонтерском проекте для GG. Дорожки сошлись! С преподавателем на других курсах не встречались, так что он вряд ли узнал, какое сильное влияние на меня оказал этот крошечный диалог.
Как оказалось, на тот момент у меня уже был подходящий уровень знания C++, чтобы освоить первую в своей жизни графическую библиотеку. А дальше было чтение Макса Шлее "Qt 4.8 Профессиональное программирование на C++". Стоит ли говорить о том, что все задания были прорешаны, все примеры кода перенабраны и запущены, а некоторые ради своего интереса модифицированы. Трудно вспомнить точно, сколько в итоге получилось кода, но мне кажется что-то в районе 10к строк. Для студента в начале своего пути это крайне важный опыт.



(прекрасная книжка для самостоятельного изучения Qt)


Где-то через полгода я уже мог сделать абсолютно любую университетскую лаборатурную/курсовик на C++/Qt (когда подразумевалось использование любого удобного инструмента). Программки получались быстрые, симпатичные, с масштабируемым интерфейсом. Помог и предыдущий опыт работы с Photoshop'ом не ленился нарисовать красивые иконки и поставить их на кнопочки или пункты меню. Спустя некоторое время преподаватели начали это намечать, а затем и давать какие-то нестандартные задачки и курсовые. Их было интереснее делать, а профита с них получалось намного больше. Так, с одним из преподавателей мы решали разные задачки вплоть до песледнего курса, конечно же именно в будущем он стал у меня руководителем дипломной работы.


MeeGo


Кажется, в какой-то момент захотелось программировать под мобильные ОС. Шутка ли, тогда смартфоны активно завоевывали рынок, и незнание мобильной разработки казалось большим упущением. Qt под Android тогда еще не было, зато можно было создавать приложения под Symbian^3. Первые мои поделки на этом поприще были очень скромные по функциональности то ли это был трекер калорий/веса, то ли аналогичная простая утилитка. Кстати программировать предлагалось на QML возможно лучшее, что получила экосистема Qt за время пребывания под крылом Nokia. Я изучил эту технологию практически сразу после анонса, периодически мысленно хвастаясь мол если меня спросят, сколько у меня лет опыта работы с QML, я смогу ответить в стиле Чака Норииса все!


Nokia тогда так активно продвигала Qt, что была готова бесплатно раздавать телефоны всем заинтересованным. Да да, программа Qt Ambassador именно это и подразумевала нужно было всего лишь создать какое-то приложение на Qt (под любую платформу если не ошибаюсь), а затем зарегистрироваться в программе. В общем то времена можно охарактеризовать цитатой из Mr. Robot: It's an exciting time in the world, exciting time. За указанные выше нехитрые действия я получил Nokia N9 под управлением MeeGo Harmattan



(Nokia N9 отличное сочетание железа и программной начинки)


Вау! Новое устройство, новая ОС, и самое главное можно программировать приложения на Qt. Кстати, SDK для этой платформы мне до сих пор кажется одним из самых лаконичных, зрелых и быстрых в работе среди всех, что были созданы на базе Qt Quick. Разве что Qt Quick Controls 2 может тем же похвастаться.


Окончание университета


К "зрелому" университету все уже было под контролем я знал несколько языков программирования, подтянул уровень образования с помощью курсов на Coursera'е, без особого труда совмещал учебу с военной кафедрой и периодически получал небольшие деньги за лабораторки/курсовые на Qt. Но, как оказалось, это была еще далеко не вся польза, которую я мог выжать из любимого фреймворка.


Диплом YaD


В 2012 году появился на свет Яндекс.Диск. Мне он был не столько интересен в качестве облачного хранилища, сколько в плане возможности работы с ним по открытому API, базирующемуся на WebDAV. Помнится, прочитал статью и тут же решил попробовать скачать файл программно, на Qt. Буквально 5-7 минут и я уже вижу в консоли содержимое файла hello.txt, который несколькими минутами ранее закинул на сервер. Ух ты, так просто и работает? Я тут же начал накидывать функциональность в свое-мини PoC-приложение, научился выводить список файлов, скачивать выбранный, а потом и загружать. И тут мне пришла ясная идея а почему бы не написать клиент под MeeGo? Ведь там не будет официального клиента, так как позиции ОС в борьбе с Android и iOS уже тогда были нерадужные. И заодно эту разработку можно было использовать в качестве своей дипломной работы, в очередной раз применив Qt в качестве своей палочки-выручалочки в университете. Клиент я назвал просто и кратко YaD. Конечно, тему диплома пришлось сделать немного формальной, если не ошибаюсь "Клиент облачного хранилища данных для мобильной ОС MeeGo YaD". Программировать приложение было намного легче, чем писать пояснительную записку к диплому :)



(несколько скриншотов приложения, позаимствованы из ПЗ)


Я выпустил две версии приложения: платную и бесплатную. В платной была только одна дополнительная возможность шаринг файлом/ссылкой посредством диалога ОС. Если честно, в бесплатной версии она тоже была, и любой желающий мог ее просто раскомментировать в QML-файле. Кстати приложение довольно долго жило, получило несколько форков (в основном косметических), пользователи давали позитивные оценки (особенно запомнился комментарий, что удалось без проблем закачать файл 1.4Гб со своим DSL на тот момент я и подумать не мог о таких объемах), когда-то даже висело в топе продаваемых, а некто Nokia Expert даже снял видео на YouTube. В обзоре довольно много времени разбираются прочие системные приложения, почти полностью упущено одно из двух функциональных меню, но все равно было приятно, что кто-то уделил моему диплому время.



(скриншоты ТОПа платных и бесплатных приложений магазина)


Ubuntu Phone


Когда Canonical объявила о создании Ubuntu Phone, моей радости не было предела. К тому времени я уже порядка года или немногим более сидел на Ubuntu в качестве домашней ОС и полностью проникся духом свободного ПО. Кстати, в те времена можно было заказать бесплатный установочный диск Ubuntu. Его честно отправляли по почте в любую глубинку, а ты находил его в почтовом ящике, довольный такому приятному и самое главное бесплатному сувернирчику. Возвращаясь к Ubuntu Phone компания объявила, что к созданию базовых приложений (таких как калькулятор, календарь, читалка документов и т.д.) будут привлекаться волонтеры из сообщества. Примечательным было то, что в качестве фреймворка для разработки предлагалось использовать Qt. "Вау!",- подумал я,- "кажется мои навыки могут им пригодиться" и ради интереса отправил свою кандидатуру! А потом, будучи на празднике в честь дня рождения подруги, получил официальное приглашение в команду RSS Reader'а. Это был восторг да и только. Ранее я писал об этом в статье. Одной из интересных плюшек участия в этом проекте была возможность заказать себе Nexus 4 в качестве стенда для разработки/тестирования. Конечно же я ей воспользовался второй телефон кряду забесплатно!



(рисунок актуального на тот момент логотипа Qt в исполнении сестры)


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


Первая работа


В нашем университете многие преподаватели совмещали, собственно, преподавание одновременно с работой в прочих коммерческих организациях. Одна из таких контор была буквально через дорогу от университета. Нет ничего удивительного в том, что самых смышленых ребят из нашего потока позвали туда работать за еду, набираться опыта и знаний. Так я попал на свою первую работу. Разрешалось совмещать учебу в университете полдня на учебе, полдня на работе. Сразу скажу, что конкретно Qt там заниматься не довелось, однако знание фреймворка более чем пригодилось в более позднем периоде работы. Дело в том, что нам предлагалось разработать графический интерфейс для самобытной ОС, о которой ранее писали на Хабре (если самую малость постараться, можно без труда сопоставить факты и понять о ком именно я говорю). Задача была не из простых. Однако в коллективе из двух опытных системных разработчиков и двух студентов возникло уникальное сочетание знаний, которое помогло с этой задачей справиться. Мой вклад был в знании принципов работы Qt (об отрисовке кастомных контролов Qt Quick в частности) и в глубоком знании особенностей форматов изображений (привет книжке "Photoshop для чайников" из начала статьи). Фреймворк мы делали что называется "с душой", очень круто сработались и по-настоящему подружились.


Забавный факт видимо я настолько часто трындел про Qt, что даже на приуроченном ко дню рождения компании пиксельарте я стою с табличкой "Qt".



(выдержка из огромного полотна со 150-ю уникально нарисованными человечками)


После университета


Потом было разное портирование YaD на Ubuntu Phone (и неудачное на Android) с получением за это значка Ubuntu Phone Pioneer, участние в Scope Showdown, создание AMeditation. Но только во время написания статьи я понял, что никогда не программировал на Qt в своей регулярной работе. То ли в маленьком городе было не так много вариантов трудоустройства, а удаленка тогда еще не так была распространена (да и софт-скиллов для нее еще было маловато). То ли я намеренно программировал на Qt только для души, бережно храня эту отдушину в стороне от сроков, дедлайнов, багов на продакшене, etc. Но факт остается фактом на основной работе меня увлекло в энтерпрайз с его C#/Java/SQL и прочими вещами, которые в университете казались крайне непривлекательными, особенно в свете отличного знания C++/Qt/QML. Решился бы я написать эту статью про Qt, если бы использовал его ежедневно на протяжении лет? Вопрос риторический...


На этом моя небольшая история про роль Qt в раннем профессиональном развитии подходит к концу. К окончанию университета я мог уверенно назвать себя разработчиком. По итогу четырехлетнего периода работы с Qt я получил уникальный опыт взаимодействия с качественным фреймворком, с отличной и проработанной документацией, с развитым сообществом. Он стал краеугольным камнем, положенным в основу будущего роста как профессионала. Я даже не могу представить, как бы сложилась моя жизнь без этого фреймворка.


Ладно, что-то к концу статьи стало грустновато, давайте исправим интересуйтесь, увлекайтесь, находите интересные технологии и языки, занимайтесь интересными себе вещами, становитесь профессионалами и вам обязательно воздастся. Namaste!

Подробнее..

DINS Scala School

04.02.2021 14:12:29 | Автор: admin

Приглашаем в онлайн-школу DINS: здесь мы научим программировать на Scala и сделаем оффер лучшим студентам. Прием заявок открыт до 16 февраля. Подробности под катом.


Для кого Scala School

У идеального студента Scala School есть техническое образование и/или опыт программирования. Если технического образования нет не беда: достаточно курсов по программированию или самостоятельного обучения.

На занятия и выполнение домашних заданий потребуется примерно 8 часов в неделю. К моменту старта у студентов должна быть необходимая техника: компьютер на Windows, Mac или Linux, микрофон и камера.

Зачем участвовать

  • Ты научишься писать полноценное бэкенд-приложение на Scala.

  • Получишь сертификат о прохождении обучения.

  • У тебя появится проект для портфолио.

  • Обзаведешься полезными знакомствами в IT-сообществе.

  • Получишь работу в DINS, если хорошо проявишь себя на курсе.

Программа курса

  • Scala 101

  • Коллекции

  • Функциональное программирование

  • Асинхронное программирование

  • Http4s, server & client

  • Базы данных

  • Асинхронное общение, Kafka

  • Подготовка к финальным проектам. Мастер-классы Telegram-боты и Frontend на Scala

  • Фичи и MVP. Protobuf и GRPC

  • Проектная работа, презентация проектов

Как проходят занятия

Курс стартует 2-го марта и продлится до конца мая. Занятия будут проходить с 19:00 до 21:00 МСК по вторникам и пятницам. Все обучение будет в онлайне, так что участвовать можно из любого города.

Как подать заявку

Для поступления в Scala School нужно подать заявку на сайте школы до 16 февраля и сделать тестовое до 21 февраля. Мы внимательно изучим результаты тестовых и сообщим о поступлении до 26 февраля.

Если есть вопросы задавай их в комментариях к посту или пиши на scala-school@dins.ru.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru