Я регулярно участвую в хакатонах и конкурсах для разработчиков. При всей прелести основной работы, в ней частенько не хватает творческой активности, поэтому меня спасают конкурсы с относительно свободными задачами. Там можно не только выиграть ценные призы, но и поделать что-то нестандартное. А это и приятно само по себе и полезно для программиста, как источник новых знаний и нового опыта.
В этот раз мы с командой приняли участие в хакатоне от Яндекса и Великого Новгорода. Цель была такая: создать навык (то есть голосового чат-бота) для «Алисы», который будет интересен гостям и жителям этого города. Подробнее в статье.
#dev#hacks
https://teletype.in/@clockstackwheels/novgorod-hack
Какой язык программирования учить? У меня есть ответ.
Каждый год один из крупнейших в мире порталов для разработчиков StackOverflow проводит опрос своих пользователей. В этом году его ещё не было, но я решил взять из результатов 2021 года два графика и объединить их.
На графике расположены языки программирования в следующих координатах:
- По горизонтали "Приятность". Мера того, как разработчики отзываются о своих чувствах по отношению к языку, сколько удовольствия он им доставляет, насколько им приятно на нём писать. Эта шкала в процентах, и опрос составлен так, что значение ниже 50% следует понимать как "язык скорее неприятный, чем приятный".
- По вертикали "Популярность". Буквально, людей спрашивали, с какими технологиями они по факту работают в своих проектах. Чем больше голосов — тем чаще язык встречается. Здесь я провёл черту по матожиданию всей выборки, которое равно около 14%. Использовать в данном случае медиану мне кажется неправильным, потому что она сильно зависит от того, попал ли какой-то язык в опрос или нет. А очень много языков не попало.
В целом субъективно я бы описал квадранты этого графика так:
1. Справа вверху популярные и приятные языки — можно смело брать и учить любой, и вообще они вверху списка на рассмотрение. Но следует понимать, что и другие люди могут хотеть в первую очередь выучить именно их, так что конкуренция на рынке труда будет высокой.
2. Слева вверху популярные, но менее приятные языки — в основном это устаревшие технологии, на которых очень много легаси. На мой взгляд, это надёжный вариант, чтобы найти высокооплачиваемую работу. Рынок не скоро сможет отказаться от них, а поддерживать кому-то надо.
3. Справа внизу приятные но менее популярные языки. Кажется, логично взять какой-то из них в качестве второго языка, на котором вы будете делать пет-проекты для личного удовольствия и саморазвития. Кстати, все функциональные языки попали сюда. И некоторые языки оттуда будут уходить наверх: например Go и Kotlin уже вырвались. Уверен, опрос текущего года покажет их подъём.
4. Ну и слева внизу Бездна Боли. У которой есть неожиданное дно: если язык не очень популярен, и люди его не любят, то вы, как специалист, будете чудовищно ценным в тех немногих местах, где язык всё-таки используют. Говорят, разработчики на COBOL получают фантастические деньги даже по меркам IT. Оба ещё живых разработчика на COBOL, да.
Следует внести одну поправку: на графике отсутствует такой параметр, как "сложность". Она тоже, безусловно, влияет на выбор. Что более важно — она влияет и на положение языка по другим параметрам. Так, например, люди, которые попробовали относительно простые JavaScript и Python, могут на этом остановиться и не браться ни за какие другие языки. И такие люди будут отмечать JavaScript и Python как приятные, приносящие удовольствие. Я тоже когда-то любил JS. И даже любил PHP. Пока не попробовал Java. Потом я какое-то время был в восторге от неё, пока не попробовал C#, и сейчас считаю его лучшим языком. Вполне возможно, что через 5 лет я буду писать на Clojure и не понимать, как я мог так восторгаться ужасным C#.
#dev
В этот романтический день поговорим о поэзии.
Мне всегда нравилась теория стихосложения. Она приближала непонятный мне мир литературы к понятному мне миру математики. Эта любовь получила развитие и в программировании.
Опубликовал вот статью об алгоритме вычисления силлабо-тонического стихотворного размера по строчке на русском языке. Задача интересная и не такая простая, как может показаться на первый взгляд.
#dev
https://habr.com/ru/post/651395/
Традиционно программисты считают, что энтерпрайз разработка это переусложнённая и бюрократизированная вещь, где вместо интересных задач на алгоритмы люди просто перекладывают JSON'ы избыточным способом.
В этом мнении есть доля истины, но я уже третий год работаю в энтерпрайзе, а до этого как раз занимался всякими стартап-стайл «интересными» алгоритмами. И хочу со своей стороны защитить энтерпрайз.
Основная фишка в том, что одну программу разрабатывают много людей. И часть этих людей друг друга никогда не увидят. Поэтому обычно задача сделать работающий код дополняется двумя пунктами:
1. Другой человек, который первый раз видит ваш код, должен как можно быстрее понять, что этот код делает.
2. Другой человек, который будет дописывать ваш код, должен иметь как можно меньше шансов допустить ошибку и всё сломать.
Окей, в реальной жизни есть ещё и третий пункт:
3. Вы ограничены в выборе инструментов и подходов к разработке, потому что легаси / корпоративная архитектура / секретность / отсутствие нужной лицензии / приказ начальства и так далее, нужное подчеркнуть.
И это напоминает челленджи, которые геймеры себе придумывают для усложнения и повышения интереса. Пройти игру с одним пистолетом? Протащить через все уровни фигурку садового гнома из первой главы? Ни разу не получить ни одного повреждения?
При этом вы ещё и в момент этого прохождения транслируете обучающий стрим, а другой игрок, загрузив ваши сейвы с любого места, должен быть способен пройти дальше, даже если он не про-геймер.
Решать такие задачи на самом деле очень интересно. И отлично качает скилл в программировании, не хуже, чем эти ваши алгоритмы. Попробуй с первого раза сделай foolproof архитектуру, ещё и понятную. Есть о чём подумать. #dev
#dev
You can even use Chinese in GitHub Codespaces. 😱
Well this is trivial if you have Chinese input methods on your computer. What if you are using a company computer and you would like to add some Chinese comments just for fun....
Мой ноутбук обновился до Windows 11, и позавчера на нём стали происходить странности: некоторые программы отказывались выполнять некоторые свои функции. После тщательного исследования симптоматика прояснилась, но не стала более понятной: программы от Microsoft не могли получить доступ в сеть. Именно Microsoft и именно в сетевой части.
Outlook, Visual Studio, .NET — всё это вело себя так, будто интернет отсутствует. У программ от других производителей подобное не проявлялось, и у операционной системы в целом тоже.
Долгие часы гугления, переписывания реестра, изменения сетевых настроек, переустановки софта и драйверов ни к чему не привели. Я забил и откатился обратно на Windows 10 — всё заработало. А днём позже я прочитал в Твиттере у одного человека описание в точности такой же проблемы, и он докопался до правды — русский софт для электронных подписей КриптоПРО что-то менял в TCP-стеке, на что именно программы от MS реагировали отказом, но только в силу особенностей Windows 11.
Так вот. У меня лицензионный Windows и все лицензионные программы от Microsoft. Но нет никакого шанса, что вся эта честная лицензионность и идущая в комплекте поддержка хоть что-то смогла бы сделать за разумные сроки с моей проблемой. Реально, ведь там везде интеграционный ад.
С одной стороны, это чудовищно распространенный кейс: можно за 5 минут на любом телефоне и любом компьютере (под управлением любой ОС) найти какую-нибудь фигню, которая проявляет проблемы интеграции одного с другим. Этих проблем каждый человек встречал в своей жизни десятки, даже если всё всегда легально покупал (а порой — особенно если легально покупал). С другой стороны — производитель мог действительно за все циклы проверок ни разу не наткнуться на этот случай. И даже не представлять, что какая-то проблема может существовать.
Пользователи обречены на вечные страдания.
#dev
Если вам лень было смотреть длинный стрим Сбера в прошлый раз, то вот они тут выложили презентации отдельно. Моя презентация о том, как выбрать способ ввода в приложении. Конкретно здесь сравнивается голосовой ввод и ввод нажатиями, но есть ощущение, что шкала, которую я предлагаю, подходит и к другим вещам (например мышь vs консольный ввод с клавиатуры). Нажатие мышью на кнопку на экране в среднем быстрее, чем набор слова (особенно если учитывать время, необходимое для того, чтобы это слово вспомнить). Ещё мышь гораздо больше страхует от ошибок. Но если у вас тысяча возможных команд, вы тысячу кнопок на экран не выведите, зато набирать эти команды можно без проблем. #dev
https://www.youtube.com/watch?v=sSg3m6G8hJ0
Неделю назад в мире опенсорс разработки произошло интересное событие.
Опенсорс — это когда разработчик пишет программу (как правило, эта программа нужна для работы других программ) и выкладывает её в общий доступ на полностью свободных началах. В большинстве случаев после этого кто угодно может делать с этой программой абсолютно что угодно: копировать, изменять, продавать решения на её основе за деньги и так далее. Иногда то, что пишут такие разработчики-волонтёры, оказывается невероятно удобно и полезно. Настолько, что гигантские корпорации используют это у себя. А кроме них — ещё десятки тысяч проектов по всему миру. Такое использование называется «зависимость», и оно создаёт связь между автором опенсорс-проекта и тем, кто взял его труд.
Связь обычно такая: в моей программе где-то указано, что вот этот вот код взят по такому-то адресу у опенсорс разработчика Васи. Моя программа иногда может на этот адрес заглядывать и смотреть, а не внёс ли Вася чего нового. Вдруг он улучшил работу и исправил ошибки — тогда я скачаю новую версию его программы и установлю её у себя. Формально для такого обновления должны существовать ограничения. По факту человеческая лень и негласный этикет среди разработчиков приводят к тому, что обновления ставят не глядя. Считается, что Вася будет выкладывать только улучшенную и проверенную новую версию своей программы, ведь за ним наблюдает миллион других разработчиков. Пацаны во дворе не поймут, если Вася сделает что-то неаккуратно.
Один из разработчиков по имени Marak Squires написал некоторое время назад две очень полезные программные библиотеки. Как раз такие, которые скачали десятки тысяч людей, в том числе в крупных корпорациях, и использовали у себя. В прошлом году этот разработчик написал что-то вроде: «Эй, корпорации, вы берёте мой труд бесплатно. Конечно, я его раздал бесплатно, но вы чёртовы капиталистические гиганты, и у вас миллиарды баксов, а я вам сэкономил миллионы баксов на разработке. Я жду от вас чек на почту в благодарность». Конечно, всем было пофигу.
А неделю назад этот разработчик внёс в свои библиотеки деструктивное обновление, которое сделало программы, установившие его, неработоспособными, и вывело на экран «LIBERTY LIBERTY LIBERTY». Это обновление положило кучу проектов, в том числе у гигантов-корпораций. Поднялась буря.
Одна часть интернета заявила, что разработчик никому ничего не должен, поэтому волен делать со своим кодом всё, что хочет. Вторая часть претендовала на то, что совершённый им поступок это вандализм и осознанный вред другим разработчикам. Дров в огонь подкинуло то, что GitHub, на котором размещался код этого разработчика, заблокировал его аккаунт. А система хранения пакетов NPM откатила изменения до предыдущих версий. Хотя формально никаких законов он не нарушал: компании брали его код по собственной воле, а он ничего никому не гарантировал.
___________________________
Я не готов назвать здесь однозначно правую сторону. Пока выглядит, как «Все мудаки». Но на мой взгляд это показательный пример вот чего: никакие формальные правила никогда не покроют всё многообразие человеческих взаимоотношений, и поэтому личностный аспект тоже важен. Даже если нет закона или правила, по которому вы что-то должны, есть смысл стараться действовать созидательно и стремиться, хотя бы частично, к всеобщему благу, а не только к личному. Особенно в ситуации, когда у тебя в руках сосредоточена та или иная власть. Корпорации действительно могли бы найти способ отблагодарить разработчика (и вообще — всех разработчиков, чей код они бесплатно берут в таких масштабах). Просто из чувства благодарности, а не потому, что должны. Разработчик мог бы просто закрыть проект и не стараться нанести урон. Просто из чувства неприятия всего деструктивного. Это, конечно, идеализированный мир розовых пони, но сила и власть это как раз способность двигать границы реальности.
#dev
На днях скатался в Сбер и прочитал там доклад о выборе способа ввода в приложении.
Весь митап может быть вам интересен, если вы разрабатываете или планируете разрабатывать под платформу умных ассистентов Сбера. Но свой доклад я постарался сделать чуть более универсальным: придумал некоторый формальный принцип для выбора способа ввода, привёл примеры с разных платформ.
У Сбера пока весьма молодая площадка, однако вкладываются в неё значительно. Я уже ранее писал, что высоко оценил как техническую наполненность, так и работу с сообществом. Запись митапа тоже произвела впечатление: большая студия с кучей оборудования, леса под свет, телесуфлёры, режиссер и звукооператор, гримёрка. Почувствовал себя будто на телевидении.
Ссылка с таймкодом на начало моего выступления:
https://youtu.be/FbdHktzx3bU?t=3983
#dev
Первый день зимы, самое время показать миру проект, над которым я работал в прошлом месяце: процедурная генерация бумажных снежинок.
Написал на Хабр большую статью по теме, поделился результатами. Там же есть демка, которая позволяет в том числе распечатать себе PDF для вырезания. #dev
https://habr.com/ru/post/592659/