Pull to refresh
2
0

Пользователь

Send message

Призыв писать компактное ПО, версия 2024 года (с примером кода)

Level of difficultyEasy
Reading time11 min
Views35K

Этот пост посвящён памяти Никлауса Вирта, первопроходца в сфере вычислительных наук, ушедшего от нас 1 января этого года. В 1995 году он написал важную статью A Plea for Lean Software, и в своём посте я постараюсь воспроизвести её почти тридцать лет спустя, с учётом современных кошмаров разработки ПО.

Очень короткая версия поста: современные способы разработки/сборки ПО смехотворны, они приводят к созданию пакетов на 350 МБ для рисования графиков, а простые продукты импортируют 1600 зависимостей неизвестного происхождения. Уровень безопасности ПО ужасен, ведь он зависит и от качества кода, и от его объёма. Многие из нас понимают, что ситуация нерациональна. К сожалению, многие программисты (и их руководство) никогда не работали как-то иначе. А остальным редко выделяют время, чтобы выполнять работу качественно.

В этом посте я сделаю краткий обзор ужасного уровня безопасности современного ПО, а затем порассуждаю о том, почему он настолько плох. Также я упомяну нормативные/юридические аспекты, которые могли бы снова сделать качество ПО приоритетным. Наконец, я расскажу о написанном мной полезном ПО , позволяющем доказать, что сегодня по-прежнему можно разрабатывать минималистичное и простое ПО, остающееся современным.

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

Читать далее
Total votes 117: ↑114 and ↓3+144
Comments197

От винта! Смотрим движок War Thunder и говорим с его создателями

Level of difficultyMedium
Reading time13 min
Views11K

Как говорил Юрий Гагарин: "В будущем мы будем летать, много летать". В определённой мере игровой движок Dagor Engine от Gaijin Entertainment позволяет это сделать. Давайте посмотрим, как он сделан, и поговорим с его создателями!

Поехали!
Total votes 19: ↑16 and ↓3+17
Comments12

Хотите похудеть – НЕ спрашивайте меня как

Reading time6 min
Views14K

Почему то все делятся историями успеха. Поделюсь историями неудач. 10 лет назад я внезапно обнаружил себя в клубе «кому за сто». С тех пор прошло с десяток попыток похудеть, кому интересно что было дальше – под кат.

Читать далее
Total votes 41: ↑27 and ↓14+21
Comments135

Сказ о том, как я за год решил более 600 leetcode задач

Level of difficultyEasy
Reading time7 min
Views95K

Всем салют!

Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел несколько coding сессий в таких компаниях как Meta, Booking, Careem, Avito...

Читать далее
Total votes 121: ↑112 and ↓9+129
Comments407

Подробное объяснение принципа KISS в программном обеспечении

Reading time18 min
Views6.4K

Когда я ищу информацию о принципе KISS в Интернете, я натыкаюсь на множество сайтов, определяющих его в паре строк: важна простота, давайте быть простыми, конец. Они часто не объясняют, что такое простота, почему простота важна и как ее достичь.

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

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

Читать далее
Total votes 12: ↑9 and ↓3+6
Comments10

Event Sourcing и CQRS в Go

Level of difficultyMedium
Reading time9 min
Views5.6K

Привет, Хабр!

Сегодня мы поговорим о двух концепциях — Event Sourcing и CQRS, и их реализации на языке Go. Go предоставляет хорошие возможности для реализации этих паттернов благодаря своей производительности, простоте и поддержке конкурентности «из коробки».

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments3

Развеиваем мифы о собеседованиях в FAANG

Level of difficultyEasy
Reading time8 min
Views16K

Наверное, уже все слышали про процесс собеседования в FAANG (и другой BigTech). Leetcode задачи, системный дизайн, поведенческие вопросы, culture fit, и прочие баззворды регулярно обсуждаются на Хабре. Коллективный разум Хабра более или менее пришел к общему консенсусу: это бессмысленная процедура, которую проектировали некомпетентные люди.

Волею судеб за десять лет опыта в FAANG+ мне повезло обсудить тему найма с множеством высокоуровневых инженеров, менеджеров, директоров, а также членов комитетов, принимающих решения о найме, из нескольких FAANG компаний. Этой статьей я хочу попробовать донести их позицию до широкой аудитории.

И в чем же смысл литкода?
Total votes 43: ↑36 and ↓7+36
Comments179

Классическое программирование на грани вымирания

Level of difficultyEasy
Reading time6 min
Views96K
Все изображения в этой статье сгенерированы нейросетью DALL-E 2

Приближается конец эпохи классических компьютерных наук, и большинство из нас словно динозавры в ожидании падения метеорита.

Период моего юношества пришёлся на 80-е годы. Тогда я занимался программированием ПК вроде Commodore VIC-20 и Apple IIe дома. Во время обучения в Калифорнийском университете, где я в итоге получил свою докторскую степень, основная часть моей учебной программы была посвящена «классическим» компьютерным наукам: программирование, алгоритмы, структуры данных, системы и различные языки. В классической форме задача компьютерных наук заключается в представлении некой идеи в виде программы, написанной человеком на языке вроде Java, C++ или Python. Причём, какой бы сложной ни была эта идея — начиная от алгоритма объединения баз данных и заканчивая крайне сложным протоколом консенсуса Paxos — её можно выразить в виде понятной для человека программы.
Читать дальше →
Total votes 99: ↑56 and ↓43+30
Comments322

Потрошим golang: как устроена память

Reading time18 min
Views27K


Привет, меня зовут Стас Иванкевич, и я работаю в VK Cloud над разработкой облачных сервисов в команде Data Masters. Сервисы, запрошенные клиентами, так или иначе должны развернуться в том виде, в котором клиенты их запросили, в адекватные сроки и без ошибок. Существует множество механизмов, позволяющих этого достичь, и еще больше существует ошибок и проблем, которые мешают в достижении этих целей.

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

Единственным надежным решением таких проблем является глубокое погружение в теорию и исследования инструмента, которым решаются поставленные проблемы. В нашем случае таким инструментом является язык Go. И как же замечательно, что исследование его внутренностей — совсем легкое дело. В том числе когда дело касается использования памяти.
Читать дальше →
Total votes 50: ↑48 and ↓2+55
Comments17

Недооцененный паттерн «Спецификация» в связке с паттерном «Репозиторий»

Level of difficultyMedium
Reading time16 min
Views15K

Использование спецификации открыло для меня новый мир в создании приложений.

Репозитории предоставляют удобное решение для доступа к данным.

Однако за многолетний опыт разработки, побывав в нескольких компаниях, сменив кучу проектов я НЕ ВСТРЕЧАЛ паттерн "Спецификация" совместно с паттерном "Репозиторий".

Читать далее
Total votes 8: ↑4 and ↓4+2
Comments31

Мапы в Go: уровень Pro

Reading time16 min
Views29K

Подробный туториал по процессам записи и чтения данных в мапах Go. Объясняем проблемы переполнения, эвакуации элементов; важность передачи количества элементов при создании мапы. Рассказываем, почему в Go нельзя обращаться к ключу или значению по адресу.

Читать далее
Total votes 14: ↑12 and ↓2+15
Comments11

Каждому клиенту 1С — по его бюджету

Level of difficultyMedium
Reading time4 min
Views7.4K

Уже 3 года я фрилансер 1С.

И вот заметил, что некоторые коллеги упрекают меня в том, что я многое в коде делаю «неправильно», «неэффективно», в общем, не по канонам.

Я веду свой блог где описываю свою практику работы с 1С. Поэтому недостатка в критиках у меня нет.

Хочу объяснить свою позицию.

Читать далее
Total votes 21: ↑19 and ↓2+18
Comments215

Метод ключевых действий

Level of difficultyHard
Reading time18 min
Views3K

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

Статья будет интересна тем, кто анализирует бизнес-процессы и создаёт их с нуля.

Окунуться в метод
Total votes 9: ↑9 and ↓0+9
Comments4

DDD в golang. Превозмогая трудности

Level of difficultyMedium
Reading time5 min
Views11K

В последнее время достаточно много выступлений, посвященных реализации подходов Domain Driven Design(DDD) в golang.

Я не буду останавливаться на value object, они в golang хорошо реализуются с помощью type defintions. А разберу работу с изменением аггрегатов.

Попытаюсь разобрать какие подходы распространены сейчас и почему DDD в go это сложнее, чем в других языках.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments35

Величайшая ошибка Эйнштейна

Level of difficultyMedium
Reading time9 min
Views74K


В своей книге: «Оптика: трактат об отражениях, преломлениях, изгибаниях и цветах света», опубликованной на английском языке в 1704 году, Исаак Ньютон анализирует фундаментальную природу света на примере преломления света призмами и линзами, дифракции света близко расположенными листами стекла и поведения цветовых смесей с помощью спектральных ламп или пигментных порошков. Книга «Оптика» стала вторым крупным трудом Ньютона по физическим наукам и считается одной из трёх основных работ по оптике периода научной революции. В конце книги Ньютон приводит список «вопросов» — нерешённых на тот момент физических задач. В частности, он пишет:

«И для отрицания такой среды мы имеем авторитет тех древнейших и знаменитейших философов древней Греции и Финикии, которые сделали вакуум, атомы и тяготение атомов первыми принципами своей философии, молчаливо приписывая тяготение какой-то иной причине, чем плотная материя. Позднейшие философы отбрасывают рассмотрение такой причины… придумывая [вместо неё] гипотезы для механического объяснения всего сущего [Но] главное дело натурфилософии — без притворных гипотез доказывать явления, выводить причины из следствий, пока мы не придём к самой первой причине, которая, конечно, не механическая.»

«И не только для того, чтобы раскрыть механизм мира, но и главным образом для того, чтобы разрешить такие вопросы, как «Что находится в местах, пустых от материи?» и «Почему солнце и планеты тяготеют друг к другу без плотной материи между ними? Почему природа ничего не делает напрасно? И откуда берётся весь тот порядок и красота, которые мы видим в мире? Для чего существуют кометы? И почему планеты движутся все одним и тем же путём в концентрических орбитах, а кометы — разными путями в очень эксцентрических орбитах? И что мешает неподвижным звёздам падать друг на друга?»
Читать дальше →
Total votes 58: ↑48 and ↓10+59
Comments84

Классификация данных методом опорных векторов

Reading time4 min
Views149K
Добрый день!

В данной статье я хочу рассказать о проблеме классификации данных методом опорных векторов (Support Vector Machine, SVM). Такая классификация имеет довольно широкое применение: от распознавания образов или создания спам-фильтров до вычисления распределения горячих аллюминиевых частиц в ракетных выхлопах.

Сначала несколько слов об исходной задаче. Задача классификации состоит в определении к какому классу из, как минимум, двух изначально известных относится данный объект. Обычно таким объектом является вектор в n-мерном вещественном пространстве . Координаты вектора описывают отдельные аттрибуты объекта. Например, цвет c, заданный в модели RGB, является вектором в трехмерном пространстве: c=(red, green, blue).

Читать дальше →
Total votes 82: ↑78 and ↓4+74
Comments27

Программист с фигой в кармане: в чем причины?

Level of difficultyEasy
Reading time11 min
Views73K

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

Степень активной осознанности может быть разной. Например, в самом ясном проявлении это может принимать такую форму: «не буду делать ни одного лишнего движения, если не посчитаю это нужным, ведь в первую очередь это нужно не мне». В самом слабом своем проявлении это звучит примерно так: «я просто боюсь выгорания и выживаю, как могу».

Я далек от того, чтобы делать какие-либо моральные оценки этому явлению (если
прочтете до конца, поймете, почему).  Я – тимлид с 15-летним опытом работы в IT. Я лично нанимал многих людей и со многими прощался. У меня есть своя приличная статистика откровенных мыслей и настроений людей, которые со мной работали, работают, или работают, но не со мной. На основании этого своего опыта (и не только своего) я попытаюсь дать ответ на вопрос, как и почему вырастает фига в кармане программиста. Я потяну за ниточку клубка причин и постепенно попытаюсь его распутать целиком. Результатом будет сводный граф причин феномена саботажа в IT. Поехали!

Читать далее
Total votes 93: ↑75 and ↓18+78
Comments295

Железнодорожно-ориентированное программирование. Обработка ошибок в функциональном стиле

Reading time11 min
Views21K

Как пользователь я хочу изменить ФИО и email в системе.

Для реализации этой простой пользовательской истории мы должны получить запрос, провести валидацию, обновить существующую запись в БД, отправить подтверждение на email пользователю и вернуть ответ браузеру. Код будет выглядеть примерно одинаково на C#:

string ExecuteUseCase() 
{ 
  var request = receiveRequest();
  validateRequest(request);
  canonicalizeEmail(request);
  db.updateDbFromRequest(request);
  smtpServer.sendEmail(request.Email);
  return "Success";
}

и F#:

let executeUseCase = 
  receiveRequest
  >> validateRequest
  >> canonicalizeEmail
  >> updateDbFromRequest
  >> sendEmail
  >> returnMessage
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments15

Белоснежно чистый код

Level of difficultyEasy
Reading time3 min
Views14K

Что такое чистый код? Это то, что все ищут, но никто не может найти. Люди редко могут сойтись на том, что это такое и как это реализовать на практике. Можно найти бесчисленное число статей на эту тему, и эта станет ещё одной. Я попытаюсь разобраться в том, что такое чистый код сам по себе, в отрыве от языков, парадигм и сфер применения. 

Читать далее
Total votes 14: ↑9 and ↓5+4
Comments38

Введение в Чистую архитектуру через 6 кругов рефакторинга

Level of difficultyMedium
Reading time15 min
Views44K

Разделяй и влавствуй, или как провести клининг легаси-кода GoLang.

Этот пост является частью большого цикла статей, в которых мы демонстрируем, как создавать приложения на Go, которые легко разрабатывать, поддерживать и с которыми приятно работать в долгосрочной перспективе. Мы делаем это, делясь проверенными методами, основанными на множестве экспериментов с командами, которыми мы руководили, и научных исследованиях («при съёмках фильма ни одно животное не пострадало»).

Мы убеждены, что для решения некоторых задач читов не существует. Поэтому, если вы хотите создавать сложные приложения быстро и эффективно, вам придётся потратить кусочек своей жизни на обучение этому. Будь это просто, в мире бы не было такого количества устаревшего кода.

Что касается подхода к «чистой» архитектуре, описываемого далее, то это симбиоз двух идей: разделение Ports и Adapters, а также контроль за тем, как пакеты ссылаются друг на друга...

Оставь надежду, всяк сюда входящий
Total votes 16: ↑12 and ↓4+11
Comments4

Information

Rating
Does not participate
Registered
Activity