Developer's notes
33 subscribers
68 photos
4 videos
74 links
Пишу обо всём и ни о чём, могу и о программировании
Download Telegram
Channel created
What is it all about?

Канал задуман как мои личные дневники, посвященные текущим и прошлым проектам и задачам. Без имен, паролей и явок и прочей чувствительной информации. Основное назначение - служить подмогой моей памяти. Рабочие языки: русский и английский (как получится). Комментарии и информация личного или неприемлемого характера будут удаляться.
Необычный проект.

Некоторое количество лет назад (но уже в этом десятилетии) довелось мне работать в одной крупной международной outsource/ outstuff компании, ныне не присутствующей на просторах нашей Родины, на должности Senior C++ developer. Заказчиком была одна немецкая automotive контора, на проекте... На проекте, с чьим описанием я всё время испытываю толику проблем, судите сами: проект под Windows c Qt\QML, не работающий ни с железом ни с сеткой, ни даже SQL-запросов там не завалялось, даже самых небольших. Что же он тогда может делать? Казалось бы, делает он какую-то полную ерунду - разбирает XML-based файлы и предоставляет удобный графический интерфейс для редактирования этого формата и всё это совершенно локально, на отдельно взятой машине пользователя... Итог: огромное количество нетривиальных интересных задача, минимум обычного формошлепства. #job #Qt #QML #C++ #automotive #c_plus_plus #interesting_tasks
Unusual project.

Some time ago (but within the current decade) it happened to me to be a senior C++ developer in a famous international corporation which doesn't work in Russia any longer. The corporation works according to oursource/outstuff business model, particularly for this project out customer was one German automotive firm. My responsibility there was an unusual project that I always struggle to describe. Let's judge yourself about that: desktop application for Windows written in C++ Qt\QML without any network interactions and even without SQL-queries I mean at all. Well, what the hell can it be then? Perhaps, it appears to be some kind of crap: the app parses XML-based files and provides handy graphical user interface to edit those files. That's all. As a result: lots of untrivial tasks had been done almost without making usual forms. #job #Qt #QML #C++ #English #automotive #c_plus_plus #interesting_tasks
Channel photo updated
Раскинем сети.

Лето. Жара. Столбик ртути в термометре на моем балконе штурмует новые высоты. Проснувшись с утра от звонка курьера в дверь (да, первый раз я почти проспал доставку продуктов), мысленно я уже загораю в близлежащем парке, физически – ещё нет.
Начал на этой недели читать книгу Таненбаума “Компьютерные сети”, 6-ое издание, много лет назад ещё будучи студентом университета читал другое издание (4ое? 3ее?), с первых страниц заметил большую разницу – что не мудрено. Было бы враньем сказать, что читаю я это для моей работы: любопытство – мой движущий мотив.
Забавно, что мало кто говорит о сетях и сопутствующих технологиях, хотя, это основа всей ИТ индустрии, и, в основном, мы получаем большие зарплаты потому, что эти сети существуют и работают лучше, чем знаменитые швейцарские часы. Мы же получаем хорошие зарплаты, разрабатывая очередной e-commerce или приложение доставки, работающие поверх плеч этих гигантов
#today #summer #weekend #flood #books #networks
🔥1
Entwine it.

It’s summertime, a heatwave has come to central Russia, and a thermometer on my balcony is rising higher and higher. Having awakened because of a ringing doorbell in the morning – that was a currier delivering my usual products – in my thoughts, I’ve been sunbathing in the nearest park since, though, in fact, it isn't so.

Several days ago, I started reading Andrew S. Tanenbaum's “Computer Networks”, 6th edition. Many years ago, being a student, I was reading another edition of the book (4th? 3rd?), and from the very beginning, I noticed a huge difference between editions, well, no surprise. The reason why I decided to read this book is just curiosity, I don’t want to confuse someone with a phrase like “As a software developer I have to read it”, because it wouldn’t be true.
Nevertheless, so few people talk about computer networks and related technologies even though it’s a foundation of the entire IT industry, and our (developers) salaries result from the fact that the networks exist and work better than the famous Swiss watch. When we develop another e-commerce or delivery app we stand on the shoulders of network technology giants.  
#today #summer #weekend #flood #books #networks
Административное (не нарушение).

Было решено разделить канал на англо- и русскоязычные версии. Весь текущий контент остается как есть, ссылка на новый канал появится на будущей недели, до тех пор буду писать на русском.
I've decided to split this channel into two, so a separate English version will appear next week. Before that, I'm going to write in Russian.
#today #administrative #Russian #English #this_channel
👍1
Пусть говорят!

Ни для кого не является секретом распространенное мнение, что программисты и прочие ИТшники разговаривать не умеют, ибо а) им не с кем, кроме компьютера б) просто не нужно. Видели бы эти люди количество совещаний в день рядового разработчика и тем более team leader’а… На самом деле, практически ни один серьезный программный продукт не может быть сделан “в одного” – подозреваю, что внутрикомандная коммуникация среди разработчиков превышает аналогичную среди других “белых воротничков”: бухгалтеров, юристов, маркетологов. Добавьте сюда популярные в индустрии разговоры о T-shaped skills, учтите, что в обычной среднестатистической продуктовой команде кроме программистов присутствуют такие роли как аналитики, тестировщики (возможно, дизайнеры и DevOps) – и, надеюсь, вы начнёте что-то подозревать.

“Им просто присылают задания, а они сидят и пишут код в соответствие с ними – просто и четко”, – могут сказать другие. И это – другое распространённое и неправильное мнение. Реальная жизнь и реальная разработка максимально далеки как от примеров Вышмата из моего предыдущего поста, так и от задач с Leetcode по следующим причинам:

а) всё, что можно сделать “по шаблону”, автоматически – уже давно так и делается, индустрия справилось с этим ещё до появления ChatGPT

б) Главная и основная загвоздка – а кто и как напишет это сверх подробное и точное ТЗ, что я только код быстро напишу по нему и сразу и все тесты пройду и в продакшн выложу?

Так же замечу, что, диаграмма классов в Confluence и документирование кода – это прекрасно, но все же не может полностью заменить созвон на тему “Что мы вообще хотим добиться и как нам не провести все выходные дебажа этот код”.

#job #IT #General #Около_ИТшное
👍1
Административное.

Хочется отметить: канал не носит сентиментально-лирического характера, технический контент скоро подвезут.
#today #administrative #this_channel
Состояние потока.

Жара только усиливается – пообещали нам +34 сегодня. Такая погода явно требует некой жест^ технического контента. И вспомнилось мне одно собеседование и тестовое задание на нём. Как я уже говорил: собеседования – это отдельный жанр (кринжа), при этом если вы разработчик и хотите получать адекватную зарплату – зло абсолютно неизбежное. Если учесть, что многие компании имеют 2ух – 6ти ступенчатые собеседования, то проведя достаточно лет в индустрии, есть шанс пройти собеседований не меньше, чем было экзаменов в Вузе.

Впрочем, в эту довольно известную и крупную российскую компанию, менявшую имя несколько раз, собеседования не шокировали числом и сложностью, всё было довольно стандартно, кроме тестового задания: созвон с HR, тестовое задание, созвон с командой, созвон с тех директор чего-то там. В итоге не взяли на последнем этапе – скорее всего нашли разработчика подешевле, никаких сильно отрицательных эмоций это не вызвало у меня, впрочем, положительных тоже. Поскольку собеседования, как известно, не покрыты NDA, ничто не сдерживает меня от опубликования тестового задания и его решения.

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

Нужно написать консольное приложение на C++, в нём должно быть 2 потока, один из них выводит ‘1’ в стандартный вывод, второй выводит ‘2’ в стандартный вывод, при это единицы и двойки всё время чередуются, переносов строк – нет, программа работает бесконечно. То есть вывод должен быть “12121212….”. Использовать потоки и средства синхронизации из стандартной библиотеки (std).

Ниже приведу версию без всякой синхронизации, которая, конечно, работает неправильно, а вот правильные ответы и разбор – будут в следующих постах.

#include <iostream>
#include <thread>

using namespace std;

int main()
{

auto firstRoutine = [](){
while (true){
cout << '1';
}
};

auto secondRoutine = [](){

while (true){
cout << '2';
}
};

thread th1{firstRoutine};
thread th2{secondRoutine};


th1.join();
th2.join();

return 0;
}

#job #C++ #Около_ИТшное #interview #собесед #today #memories #c_plus_plus #IT
🔥2
Тяжелые хвосты

Жара спала, и в целом, наступила суббота на наш замечательный перенаселённый город.  Вспомнилось мне, что когда-то я усиленно учился теории вероятности и всякой статистике, однако занудствовать прям с формулами мне не хочется, давайте лучше немного порассуждаем. Для этого возьмём очень наглядную и физическую вещь – рост взрослого мужчины (старше 18 лет), вспомните ваших знакомых, и просто людей, которых вы видите на улице, предполагаю, что их рост будет, в основном, варьироваться между 160 и 195 сантиметрами, причём пограничные случаи будут довольно редки (предполагается, что вы не зависаете в компании баскетболистов).  Можно встретить человека выше или ниже? Да, определённо, особенно если живёте в городе-миллионике и ездите на метро, а часто ли? –  Ну не то, чтобы. Вот вам статья на тему, что людей сильно выше совсем немного, учитывая, что на планете живёт несколько миллиардов человек.

Надеюсь, к этому моменту все осознали, что рост, в основном, размазан в определённом диапазоне, а теперь я вам скажу, что это всё давно формализовано и изложено в виде тех самых скучных формул, что я не буду тут упоминать, и называется Нормальным или Гауссовым распределением. В трёх словах его суть в следующем: если по оси X отложить рост, а по оси Y отложить процент, как часто данный рост встречается в популяции, то получится колоколообразная фигура с максимумом у среднего значения, более того, с крайне высокой вероятность рост не отклоняется дальше определённой величины. А вот тут для нас уже всё нарисовали, листайте до слов “Height is normally distributed”. И да…с большой вероятностью в Вузе вас пытались этому научить даже на нетехнической специальности.

А все ли величины распределены согласно этому распределению?  –  Очевидно, что нет – иначе почему учебник математической статистики такой толстый и не заканчивается на нормальном распределении.  А если серьёзнее, можно рассмотреть другую очень жизненную величину – доходы отдельно взятого человека. Может показаться, что величина эта не случайна – и действительно, для каждого отдельного человека она зависит от множества факторов, но мы эти факторы не изучаем, поэтому считаем, что она случайна.  Попробуем тут порассуждать примерно, как про рост: и так, вы знаете собственную зарплату, можете предположить, что люди в той же должности и отрасли получают примерно столько ж (умножить поделить на 3), а вот там элитный район в городе – там, видимо, доходы побольше, а вот люди ездят на теслах – у них ещё побольше, ну и все мы знаем про существование списка Форбс. Тут важно заметить, что учителей и врачей довольно много – миллионы, элитные районы и поселки явно поменьше, на теслах, Бентли и прочая ездят ещё поменьше, а список Форбс это меньше трёх тысяч людей на всём свете. И тут я опять не открываю Америку – всё давно посчитано и написано, просто посмотрите на первую картинку — там максимум концентрируется в районе низких значений и потом хвост бесконечно уходит вправо. Если применить на пример выше сотни миллионов людей получают несколько сот долларов в месяц, но потом всё реже и реже идут экземпляры с более высоким доходом, заканчивая единичными случаями почти 20 миллиардов в месяц. А если применить на пример с ростом, получалось бы примерно так: большинство людей в районе 170 см, но можно найти хоть и редко ростом с Эйфелеву башню, Эмпайр-стейт-билдинг, от Земли до Плутона…

Подобные распределения называются - распределениями с тяжелыми хвостами, когда-то я читал книжку "Черный Лебедь" – не дочитал, бросил на середине, потому что к тому моменту я уже тер. вер. знал :)

#today #flood #education #math #probability_theory #books
🔥1
А есть ли вероятность?

Выходные продолжаются, как и наша рубрика “Тервер для самых маленьких”. Если вы открывали и пробежались глазами через эту ссылку в прошлой статье, то могли заметить довольно-таки очевидные вещи: рост зависит от многих факторов, включая генетические и нет, средний рост разный в разных поколениях, в разных регионах мира средний рост сильно отличается – жители Черногории высокие даже для европейцев, жители Таиланда – довольно низкие. Это означает, что, если б мы взяли данные по одному регионы, а желательно ещё и моноэтнические и только людей одного и того же года рождения, то получили бы тот же самый “колокол”, но более узкий. Кстати, ширина “колокола” обусловлена так называемым среднеквадратичным отклонением – СКО (квадратным корнем из дисперсии). Воздействие же множества довольно разнообразных факторов – причина, приводящая к нормальному распределению роста.

А есть ли другие величины, распределённые согласно нормальному распределению? Конечно! И очень много, особенно, это касается настоящих физических величин: результатов экспериментов, измерений, результатов работы производственных линий, да хоть линии производства мороженного, объема кофе из кофемашины при одинаковых настройках и т.д. Если вдруг кто не верит, что даже заводские продукты ежедневного потребления немного варьируются, то вот ссылка. Другое дело, что, когда погрешность (3 * СКО), много меньше номинального значения (среднего значения) конечному потребителю не стоит и волноваться – так в приведенной ссылке они обещают, что-то вроде +- 5 грамм на килограмм. Обратите внимание, я написал +-, это не значит, что, если вы купите 100 пакетов молока, вы получите недовесок или перевесок в 500 грамм, а вот настоящий результат тут – это тема для отдельной статьи.

Тут можно заодно упомянуть наивное заблуждение, что в “точных” науках всё абсолютно точно. Нет – все физические величины всегда идут с погрешность, максимум, что возможно сделать это ограничить эту величину при соблюдении определённых условий. И касается это не только пищевых продуктов, но и высокотехнологичных производств: производство CPU требует миллиардов долларов, да и каждое отдельное изделие стоит несколько сот долларов, тем не менее производитель не может штамповать все процессоры с одинаково хорошими заданными характеристиками даже на одной и той же линии, вместо этого постфактум их тестируют после чего классифицируют кто тут Core-i5, ну а кто Core-i3.

#today #flood #math #education #probability_theory
🔥2
Куда оно летит?

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

Шёл далекий 2018ый год, Android был популярен примерно, как сейчас, приложения под него не писал только ленивый, компания, где мы работали тоже их писала, причём довольно активно, наш же проект на C++ подходил к жизненной стадии излёта – поддержка, поддержка, новых фич очень мало и не планируется. Всё закономерно: есть такое понятие жизненный цикл продукта, а программное обеспечение – тоже продукт, но об этом поговорим как-нибудь в другой раз. Компания занимала тогда весьма спокойную позицию по поводу таких проектов, которую можно описать словами: если они хотят работать, пусть работают как могут, мы их увольнять не будем (но и зарплату повышать – тоже). Соответственно, когда в ходе очередной беседы с менеджментом поступило предложение позаниматься Android (без предварительно имеющегося опыта), конечно, я и мой коллега тут же согласились.

Конкретика, звучала тоже довольно интересно: разработать с нуля приложение в несколько десятков экранов, взаимодействующая с backend и так далее, и кстати, — вот вам аналитик/прожект менеджер в придачу и “наставник” – опытный программист Android с флагманского проекта компании. Огонь! Описания функционала и предметной области тут не будет – это не так важно.

Глянув документацию по Java и код в соседнем проекте, осознал, что Java – это C++ из которого выкинули всё самое сложное (жду ваших гневных комментариев), и вся сложность в особенностях Android SDK: жизненный цикл Activity, жизненный цикл Fragment, разветвлённые переходы между экранами… Наставник тут помог: “вам нужно Moxy, Cicerone, RxJava, Retrofit и, конечно, Dagger”. Сказано – сделано, не все эти технологии выглядят очевидно для разработчика на C++, но, в принципе, не rocket science и по сравнению с голым AndroidSDK разработка упрощалась.

Заметка получается длинной, поэтому продолжим в следующий раз.

#job #IT #Android #Java #memories #ToBeContinued #interesting_tasks
👍1🔥1
Куда оно летит?

Часть 2.

В прошлый раз мы остановились на самом начале процесса разработки. Помня свой успешный (а иногда не очень) опыт из Desktop разработки, мы с коллегой начали с разработки архитектуры, было желание сделать сначала “каркас”, а потом планомерно его наполнять экранами, логикой и так далее, были там и более интересные технологические моменты: библиотека на C++ для обработки звука, кое-что там втягивали стороннее для обработки фото и тд.

Наша команда постепенно наполнялась: присоединились дизайнер, пара бэкендеров, сильно позже – тестировщик. Работать было интересно и комфортно – с моим напарником, другим разработчиком C++/Android никаких конфликтов никогда не бывало, задачи мы пилили сами, как считали справедливым, с дизайнером бывали абсолютно типичные моменты: дизайн бывал настолько красивый (сложный) – непонятно, точно ли нужно тратить трудодни на его реализацию – решали с участием упомянутого в прошлый раз аналитика/прожект менеджера, обладающего крайне высокими компетенциями и знаниями (здесь нет никакого сарказма). Разработчиками backend были двое студентов (возможно, вчерашних), из всей команды они выделялись своей незаинтересованностью в результате и срывом сроков – бывало трудновато, но опять же, всё в пределах нормы.

Замечу, что работать в любом проекте с нуля, совсем ни то же самое, что приходить в проект на других стадиях жизненного цикла. И дело тут не в атмосфере стартапа – её на самом деле не было, приложение нужно было разработать ни “как можно быстрее, что б отбить денег”, а к фиксированному сроку, ТЗ было практически фиксировано с первого дня и менялось очень мало – редкий случай. Дело тут в том, что гораздо интереснее самому вырабатывать архитектуру и потом работать, зная её особенности.

Коммиты успешно заливались в git, задачки пилились и брались в темпе, который нравился прожект-менеджеру, приложение стабильно прибавляло экраны, запросы, обработку ошибок, а Scrum не обрастал “религиозными встречами” – всё шло прекрасно.

Продолжим в следящий раз: опять не хватило пространства выдать сюжетный поворот.

#job #IT #Android #Java #memories #ToBeContinued #working_days
👍1