Новость не новая, но интересная.
Любопытное заявление сделал гугл. Они утверждают, что на Rust писать код в 2 раза быстрее, чем на C++
А команды, перешедшие с Go на Rust, пишут примерно с той же скоростью.
В последнее трудновато поверить, честно говоря
Любопытное заявление сделал гугл. Они утверждают, что на Rust писать код в 2 раза быстрее, чем на C++
А команды, перешедшие с Go на Rust, пишут примерно с той же скоростью.
В последнее трудновато поверить, честно говоря
dev.by
Google: Rust-разработчики вдвое продуктивнее разработчиков на C++
Писать код на Rust оказалось вдвое эффективнее, чем на С++. Такое заявление на конференции Rust Nation UK, прошедшей в Лондоне на прошлой неделе, сделал глава разработки Google Ларс Бергстром. Его команда занимается созданием инструментов и библиотек для…
❤2🤡2
Forwarded from Женя Жданов
Человеки
Бич любой более или менее большой корпоративной системы – канцелярщина. По звонку люди перевоплощаются в должности. В роботов с бейджиками «специальный специалист». И всё: коммуникация в этот момент превращается в полосу препятствий.
Робот с регламентом за пазухой запрограммирован на то, чтобы всё на свете знать и не ударить в грязь лицом. И ладно, если специальный специалист, помимо апломба обладает релевантными для решения вопроса компетенциями, с этим можно жить. Но часто это не так:
Специалист по всему говорит абстракциями, многословен и витиеват: он скрывает свою бестолковость. Ситуация критическая. Всем срочно нужна инъекция человечности.
Однажды, мне в команду упала задача с невнятным описанием. Заказчик оказался как раз таким энтерпрайзным (и ненужным) винтиком. Мы обсуждали и обсуждали, много часов. Столько текста. Столько слов было сказано и всё ради того, чтобы выяснить, что никто ничего не понимает и не знает, а заказчик вообще не автор, а просто рупор чужого потока сознания. Не тот, с кем надо говорить, просто он мастерски это скрывал. Это бессмысленная трата времени, так же известная под кодовым названием «работа».
Не знаешь – не знаешь. Не можешь – не можешь. Хватит казаться, достаточно просто быть, желательно быть человеком.
Бич любой более или менее большой корпоративной системы – канцелярщина. По звонку люди перевоплощаются в должности. В роботов с бейджиками «специальный специалист». И всё: коммуникация в этот момент превращается в полосу препятствий.
Робот с регламентом за пазухой запрограммирован на то, чтобы всё на свете знать и не ударить в грязь лицом. И ладно, если специальный специалист, помимо апломба обладает релевантными для решения вопроса компетенциями, с этим можно жить. Но часто это не так:
Специалист по всему говорит абстракциями, многословен и витиеват: он скрывает свою бестолковость. Ситуация критическая. Всем срочно нужна инъекция человечности.
Однажды, мне в команду упала задача с невнятным описанием. Заказчик оказался как раз таким энтерпрайзным (и ненужным) винтиком. Мы обсуждали и обсуждали, много часов. Столько текста. Столько слов было сказано и всё ради того, чтобы выяснить, что никто ничего не понимает и не знает, а заказчик вообще не автор, а просто рупор чужого потока сознания. Не тот, с кем надо говорить, просто он мастерски это скрывал. Это бессмысленная трата времени, так же известная под кодовым названием «работа».
Не знаешь – не знаешь. Не можешь – не можешь. Хватит казаться, достаточно просто быть, желательно быть человеком.
👍24💊3👏2🔥1💯1
Чувака бомбит от того, как Uncle Bob в книге "Чистый код" рефачит программы. Боб взял несложную чистую функцию и раздербанил это на огромный класс, с мутированием полей и запутанными названиями.
Было:
стало:
Понятное дело, что если фанатично упарываться по какой-то идеологии, то попадёшь в ад.
https://theaxolot.wordpress.com/2024/05/08/dont-refactor-like-uncle-bob-please/
Было:
private void printGuessStatistics(char candidate, int count) {
String number;
String verb;
String pluralModifier;
if (count == 0) {
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1) {
number = "1";
verb = "is";
pluralModifier = "";
} else {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String guessMessage = String.format(
"There %s %s %s%s", verb, number, candidate, pluralModifier
);
print(guessMessage);
}
стало:
public class GuessStatisticsMessage {
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count) {
createPluralDependentMessageParts(count);
return String.format(
"There %s %s %s%s",
verb, number, candidate, pluralModifier );
}
private void createPluralDependentMessageParts(int count) {
if (count == 0) {
thereAreNoLetters();
} else if (count == 1) {
thereIsOneLetter();
} else {
thereAreManyLetters(count);
}
}
private void thereAreManyLetters(int count) {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter() {
number = "1";
verb = "is";
pluralModifier = "";
}
private void thereAreNoLetters() {
number = "no";
verb = "are";
pluralModifier = "s";
}
}
Понятное дело, что если фанатично упарываться по какой-то идеологии, то попадёшь в ад.
https://theaxolot.wordpress.com/2024/05/08/dont-refactor-like-uncle-bob-please/
Axol's Blog
Don’t Refactor Like Uncle Bob. Please
Correction: Throughout this article, I attribute Chapter 2 of Clean Code to Robert Martin, however I was recently informed that this particular chapter was actually authored by Tim Ottinger. That s…
👍13😁4🔥1
Пишете ли вы комментарии в коде?
Когда-то (100 лет назад) я писал много комментариев, пока не прочитал, что нужно просто писать нормальный код, а не объяснять его сбоку. А комментарии всё равно устареют.
Окей.
Потом услышал, что комментарии должны объяснять "почему", а не "как", тогда они будут полезны. В целом согласен, пробовал так, оставлял ссылки на объясняющие доки в самых странных местах, но блин, комментарии всё равно устареют, и доки устареют, и доверять им нельзя )
В итоге на практике получается так, что проще посмотреть, какая задача жиры была привязана к комиту, и из нее почерпнуть информацию "почему".
Беда лишь в том, что задачи не всегда нормально это объясняют.
Возможно, в запутанных случаях надо просто писать более подробные описания комитов. Они не устареют, потому что привязаны к конкретной версии кода. Но комментарии, получается, один хрен не особо нужны.
Было бы круто, чтобы можно было писать такие специальные коменты, чтобы при каждом коммите приходилось явно подтверждать их актуальность (если код рядом с ними менялся). Вот тогда бы было идеально)
Когда-то (100 лет назад) я писал много комментариев, пока не прочитал, что нужно просто писать нормальный код, а не объяснять его сбоку. А комментарии всё равно устареют.
Окей.
Потом услышал, что комментарии должны объяснять "почему", а не "как", тогда они будут полезны. В целом согласен, пробовал так, оставлял ссылки на объясняющие доки в самых странных местах, но блин, комментарии всё равно устареют, и доки устареют, и доверять им нельзя )
В итоге на практике получается так, что проще посмотреть, какая задача жиры была привязана к комиту, и из нее почерпнуть информацию "почему".
Беда лишь в том, что задачи не всегда нормально это объясняют.
Возможно, в запутанных случаях надо просто писать более подробные описания комитов. Они не устареют, потому что привязаны к конкретной версии кода. Но комментарии, получается, один хрен не особо нужны.
Было бы круто, чтобы можно было писать такие специальные коменты, чтобы при каждом коммите приходилось явно подтверждать их актуальность (если код рядом с ними менялся). Вот тогда бы было идеально)
👍14❤6👏2
Сейчас буду набрасывать, я предупредил.
Все обсуждают статью "Go развивается в неверном направлении".
TLDR: дженерики усложнили код, но никто ими не пользуется, итераторы, которые ввели в 1.23 усложнили код, но это просто сахар для того, чтобы чуть по-другому перебирать коллекции.
Короче, я ваще не согласен )
Дженерики уже давно с нами, но никому не мешают. Никто ими не пользуется, да, но никто не пользуется в продуктовом коде. Но зато, например, стандартная библиотека наконец-то получила универсальные функции типа "поискать элемент в слайсе", и на мой взгляд это биг факин дил.
Всякие там sql.Null[T] в 3d-party библиотеках тоже облегчают жизнь. Т.е. реальных проблем от дженериков на практике я не вижу, а реальная польза есть 100%.
А итераторы - это не просто синтаксический сахар, блин. Это же команда yield, временно прерывающая исполнение, и всё такое. Другой флоу вообще.
Я уверен, что будет куча мест, где можно будет заменить елдой каналы, и код станет намного проще и быстрее (потому что не надо дёргать планировщик).
Ну да, где-то появится два способа обхода коллекций - старый и новый. Ну и что, мозг уже не способен это переварить или что? Имхо это вообще не проблема.
Единственное, что плохо - это то, что надо изучить что-то новое. Ну т.е. Go хорош тем, что один раз выучил за условные выходные и потом ничего делать не надо 20 лет, не меняется ничего. Можно до пенсии спокойно писать свои микросервисы.
Короч, теперь это не так, теперь надо напрячься и раз в 5 лет изучить что-то типа дженериков или итераторов. Ну капец прям. Go всё равно в 5 раз быстрее учится, чем современный PHP, например.
Наброс закончен 🙂
Все обсуждают статью "Go развивается в неверном направлении".
TLDR: дженерики усложнили код, но никто ими не пользуется, итераторы, которые ввели в 1.23 усложнили код, но это просто сахар для того, чтобы чуть по-другому перебирать коллекции.
Короче, я ваще не согласен )
Дженерики уже давно с нами, но никому не мешают. Никто ими не пользуется, да, но никто не пользуется в продуктовом коде. Но зато, например, стандартная библиотека наконец-то получила универсальные функции типа "поискать элемент в слайсе", и на мой взгляд это биг факин дил.
Всякие там sql.Null[T] в 3d-party библиотеках тоже облегчают жизнь. Т.е. реальных проблем от дженериков на практике я не вижу, а реальная польза есть 100%.
А итераторы - это не просто синтаксический сахар, блин. Это же команда yield, временно прерывающая исполнение, и всё такое. Другой флоу вообще.
Я уверен, что будет куча мест, где можно будет заменить елдой каналы, и код станет намного проще и быстрее (потому что не надо дёргать планировщик).
Ну да, где-то появится два способа обхода коллекций - старый и новый. Ну и что, мозг уже не способен это переварить или что? Имхо это вообще не проблема.
Единственное, что плохо - это то, что надо изучить что-то новое. Ну т.е. Go хорош тем, что один раз выучил за условные выходные и потом ничего делать не надо 20 лет, не меняется ничего. Можно до пенсии спокойно писать свои микросервисы.
Короч, теперь это не так, теперь надо напрячься и раз в 5 лет изучить что-то типа дженериков или итераторов. Ну капец прям. Go всё равно в 5 раз быстрее учится, чем современный PHP, например.
Наброс закончен 🙂
👍33🔥3🥴3❤2💯1🤷1
Табы vs пробелы
Ни то, ни другое имхо не нужно, это всё костыли и анахронизм. Все пишут код в IDE/редакторах, ревьювят в системах с подсветкой и т.д. Никто не пишет код в чистых .txt
Давно пора сделать бинарный формат для кода.
Тогда
1) компиляция будет быстрее, можно хранить код сразу в виде AST дерева, которое целиком грузишь в память и поехали.
2) IDE с AST деревом будет работать быстрее, плюс для упрощения жизни IDE можно делать какие-то особые пометки, невидимые пользователю в редакторе
3) можно менять шрифты хоть в каждом слове, например, самые важные части программы выделить жирным красным и подчеркнутым. VeryImportantFunction()
4) юзеру не надо будет вручную вводить табы или пробелы - ide и так прекрасно знает, где отступ нарисовать.
Исключением будет только питон, так как там от отступов зависит вообще всё.
Ни то, ни другое имхо не нужно, это всё костыли и анахронизм. Все пишут код в IDE/редакторах, ревьювят в системах с подсветкой и т.д. Никто не пишет код в чистых .txt
Давно пора сделать бинарный формат для кода.
Тогда
1) компиляция будет быстрее, можно хранить код сразу в виде AST дерева, которое целиком грузишь в память и поехали.
2) IDE с AST деревом будет работать быстрее, плюс для упрощения жизни IDE можно делать какие-то особые пометки, невидимые пользователю в редакторе
3) можно менять шрифты хоть в каждом слове, например, самые важные части программы выделить жирным красным и подчеркнутым. VeryImportantFunction()
4) юзеру не надо будет вручную вводить табы или пробелы - ide и так прекрасно знает, где отступ нарисовать.
Исключением будет только питон, так как там от отступов зависит вообще всё.
🤡35👍11🤣9😱3❤1
Репостну еще раз Программистику. Важная тема.
Я бы не сказал, что мотивировать совсем невозможно, но это скорее тонкое искусство, что-то схожее с созданием секты. В менджменте же имхо важнее убрать демотиваторы. Любит, например, человек программировать. Но его заставляют делать вещи, противоречащие здравому смыслу, мало платят, задалбывают бюрократией, не дают принимать решения - и всё. Вот уже вся любовь к программированию сошла на нет: никакой инициативы не ждите, всё исключительно по инерции, на отъебись.
Я бы не сказал, что мотивировать совсем невозможно, но это скорее тонкое искусство, что-то схожее с созданием секты. В менджменте же имхо важнее убрать демотиваторы. Любит, например, человек программировать. Но его заставляют делать вещи, противоречащие здравому смыслу, мало платят, задалбывают бюрократией, не дают принимать решения - и всё. Вот уже вся любовь к программированию сошла на нет: никакой инициативы не ждите, всё исключительно по инерции, на отъебись.
💯20💩1
Forwarded from Женя Жданов
Не учи меня как жить
Как работать с мотивацией команды? Я знаю. А вы знаете? Руководители, которые упарываются в мотивацию, как по мне, не шарят за жизь. Я понимаю, как [пере]собрать мотивированную команду, но не имею ни малейшего представления, как мотивировать команду. Какую из задач все решают, а какую из них целесообразно решать?
Мотивация
Исходит из личных потребностей, желаний, целей и ценностей. Долговременная и устойчивая, она связанна с внутренними убеждениями и стремлениями человека. Поэтому, как правило, не требует внешних стимулов. Как и внешние стимулы, мотивация – это фактор, влияющий на поведение человека.
Стимул
Стимулы в большинстве своём вредны. Вносят сумбур и негативно влияют на социальные динамики в команде. Есть море исследований и книг на тему премий, перфоманс ревью и прочей дребедени с морковками, без которой мы все прям жить не можем. Почему это есть? Ну потому что кое-как это всё-таки работает, иногда устраивает, мол «и так сойдёт». Так и живём: я заплачу тебе х2, если сделаешь прямщас и лучше всех.
Почитать на тему:
Punished by Rewards
Why We Work
Способности
Принято разделять способности и навыки. Если упростить, можно сказать и софты с хардами, но способности точнее отражают суть. А суть в том, что ценность человека в способностях, а не в навыках. С первыми работать практически невозможно, а вторые развиваются на раз-два. Ну то есть работать то, конечно, можно, чем (чуть не сказал «успешно») тщетно и занимаются руководители, естественно, занятие это бестолковое.
Мотивация как раз относится к способностям человека. Это характеристика – мотивированный, как любопытный, интересный, токсичный, циничный или сумасшедший (тут желательна справка).
Место и время
На работе работают, в отпуске отдыхают, а воспитанием папа с мамой сначала занимаются, детсад, школа или улица там, не знаю, у кого как сложится, жизнь в конце концов. Но на работе – работают.
Не учи меня как жить
Единственное, что можно сделать – это понять мотивацию команды, не мешать и в поте лица работать над тем, чтобы система, в которой существует команда, не влияла негативно на мотивацию. А если вы вдруг надеялись научить меня как жить, привить новые ценности или пошатать парадигмы, то расслабьтесь, вам на работе тоже работать надо, а это вы ерундой занимаетесь, ресурсы почём зря расходуете. Лучше б прямо на собеседовании спрашивали: «Ты кто по жизни?».
Воспитание
Такая работа возможна, в определенном контексте, например, когда мы взращиваем неокрепшие умы целенаправленно и формируем кадровый резерв из вчерашних студентов. Но и здесь, кроме личного примера и вдохновения вряд ли найдутся подходящие инструменты.
Короче
Будьте классным, здоровым и богатым. Как это сделать разберётесь, иначе вы не такой уж и классный, чтоб кого-то там ещё и учить. Возвращаясь к вопросу – никак. Никак работать с мотивацией.
Как работать с мотивацией команды? Я знаю. А вы знаете? Руководители, которые упарываются в мотивацию, как по мне, не шарят за жизь. Я понимаю, как [пере]собрать мотивированную команду, но не имею ни малейшего представления, как мотивировать команду. Какую из задач все решают, а какую из них целесообразно решать?
Мотивация
Исходит из личных потребностей, желаний, целей и ценностей. Долговременная и устойчивая, она связанна с внутренними убеждениями и стремлениями человека. Поэтому, как правило, не требует внешних стимулов. Как и внешние стимулы, мотивация – это фактор, влияющий на поведение человека.
Стимул
Стимулы в большинстве своём вредны. Вносят сумбур и негативно влияют на социальные динамики в команде. Есть море исследований и книг на тему премий, перфоманс ревью и прочей дребедени с морковками, без которой мы все прям жить не можем. Почему это есть? Ну потому что кое-как это всё-таки работает, иногда устраивает, мол «и так сойдёт». Так и живём: я заплачу тебе х2, если сделаешь прямщас и лучше всех.
Почитать на тему:
Punished by Rewards
Why We Work
Способности
Принято разделять способности и навыки. Если упростить, можно сказать и софты с хардами, но способности точнее отражают суть. А суть в том, что ценность человека в способностях, а не в навыках. С первыми работать практически невозможно, а вторые развиваются на раз-два. Ну то есть работать то, конечно, можно, чем (чуть не сказал «успешно») тщетно и занимаются руководители, естественно, занятие это бестолковое.
Мотивация как раз относится к способностям человека. Это характеристика – мотивированный, как любопытный, интересный, токсичный, циничный или сумасшедший (тут желательна справка).
Место и время
На работе работают, в отпуске отдыхают, а воспитанием папа с мамой сначала занимаются, детсад, школа или улица там, не знаю, у кого как сложится, жизнь в конце концов. Но на работе – работают.
Не учи меня как жить
Единственное, что можно сделать – это понять мотивацию команды, не мешать и в поте лица работать над тем, чтобы система, в которой существует команда, не влияла негативно на мотивацию. А если вы вдруг надеялись научить меня как жить, привить новые ценности или пошатать парадигмы, то расслабьтесь, вам на работе тоже работать надо, а это вы ерундой занимаетесь, ресурсы почём зря расходуете. Лучше б прямо на собеседовании спрашивали: «Ты кто по жизни?».
Воспитание
Такая работа возможна, в определенном контексте, например, когда мы взращиваем неокрепшие умы целенаправленно и формируем кадровый резерв из вчерашних студентов. Но и здесь, кроме личного примера и вдохновения вряд ли найдутся подходящие инструменты.
Короче
Будьте классным, здоровым и богатым. Как это сделать разберётесь, иначе вы не такой уж и классный, чтоб кого-то там ещё и учить. Возвращаясь к вопросу – никак. Никак работать с мотивацией.
👍19🔥2❤1
Пост для закрепа.
В этом канале я пишу про то, что мне интересно. Чаще всего это Go, Postgres, тимлидские вопросы, общие мысли про программирование, управление проектами и всё такое.
Некоторые последние посты:
Мой плагин для редактирования OpenAPI (плагин для jetbrains IDE)
Неявное приведение типов - говно
Вся правда об IT
Перестаньте молиться на S.O.L.I.D
ИИ точно заменит программистов: один, два, три
Поставить deepseek на макбук парой команд
Возврат в офисы не окупается
Интерфейсы в Go позволяют отложить выбор
Обработка ошибок в Go - это большая ошибка
Go развивается в неверном направлении
Structured Concurrency в языке Go
Вышел Postgres 17
Большая часть ответов chatGPT неверны
Popover API работает в основных браузерах
Семантический поиск с помощью Postgres
Влияние каннабиса на способность программировать
Про фокус внимания разработчиков и тимлидов
ORM для реальных приложений не окупается
Подписывайтесь на канал Cross Join!
В этом канале я пишу про то, что мне интересно. Чаще всего это Go, Postgres, тимлидские вопросы, общие мысли про программирование, управление проектами и всё такое.
Некоторые последние посты:
Мой плагин для редактирования OpenAPI (плагин для jetbrains IDE)
Неявное приведение типов - говно
Вся правда об IT
Перестаньте молиться на S.O.L.I.D
ИИ точно заменит программистов: один, два, три
Поставить deepseek на макбук парой команд
Возврат в офисы не окупается
Интерфейсы в Go позволяют отложить выбор
Обработка ошибок в Go - это большая ошибка
Go развивается в неверном направлении
Structured Concurrency в языке Go
Вышел Postgres 17
Большая часть ответов chatGPT неверны
Popover API работает в основных браузерах
Семантический поиск с помощью Postgres
Влияние каннабиса на способность программировать
Про фокус внимания разработчиков и тимлидов
ORM для реальных приложений не окупается
Подписывайтесь на канал Cross Join!
Telegram
Cross Join - канал о разработке
Написал на Хабр статью "Перестаньте молиться на принципы S.O.L.I.D"
https://habr.com/ru/articles/874584/
🫥 Cross Join
https://habr.com/ru/articles/874584/
🫥 Cross Join
👍5
Cross Join - канал о разработке pinned «Пост для закрепа. В этом канале я пишу про то, что мне интересно. Чаще всего это Go, Postgres, тимлидские вопросы, общие мысли про программирование, управление проектами и всё такое. Некоторые последние посты: Мой плагин для редактирования OpenAPI (плагин…»
В продолжение темы про код и хранение AST. Я написал на Хабр статью, и там мне в панамку накидали нехило.
По чесноку, я и сам не уверен, что замена тексту может быть реальной в текущей ситуации, это скорее просто тема на поболтать. Тем не менее, интуиция мне подсказывает, что текст для описания логики работы программы - это скорее неизбежный костыль, чем оптимальный инструмент. Т.е. мысль "так работал бейсик в спектруме, но не зашло" меня не удовлетворяет.
Вот еще пара вещей на подумать:
1) Часто в начале каждого файла пишут огромный комент про лицензию и прочую дичь. IDE не скрывает такой комент, потому что для нее это просто какой-то комментарий. В случае бинарных исходников можно было бы это хранить в мета-информации и показывать только особо жаждущим по отдельной кнопке.
2) мат формулы можно было рисовать как матформулы, многоэтажно, если ввести спец конструкцию языка/IDE для этого.
3) тесты часто прогоняют по табличным данным, чтобы проверить разные кейсы. Эти данные зачастую выглядят как массив массивов или типа того. Почему бы не сделать конструкцию "таблица" и не рисовать это юзеру в виде, собственно, таблицы
3) комментарии вида javadoc/phpdoc тоже можно прибивать к самому классу/методу и показывать только при наведении курсора, чтобы не засирать экран хернёй.
4) если упороться, то можно отказаться от файлов совсем, и приложение рисовать как некую miro-диаграмму, кружочки-стрелочки и всё такое
5) вместо пачки ифов, где-то можно было бы рисовать прям таблицу состояний и переходов, это было бы нагляднее
6) картинки можно эмбедить прямо в исходник и там же видеть привьюшку
7) кстати, можно комментарии снабжать рисунками, а не ссылками на доку или псевдографикой
Вот такие мысли.
Кстати, вот панамка для новой порции х%ёв:
\ /
----
По чесноку, я и сам не уверен, что замена тексту может быть реальной в текущей ситуации, это скорее просто тема на поболтать. Тем не менее, интуиция мне подсказывает, что текст для описания логики работы программы - это скорее неизбежный костыль, чем оптимальный инструмент. Т.е. мысль "так работал бейсик в спектруме, но не зашло" меня не удовлетворяет.
Вот еще пара вещей на подумать:
1) Часто в начале каждого файла пишут огромный комент про лицензию и прочую дичь. IDE не скрывает такой комент, потому что для нее это просто какой-то комментарий. В случае бинарных исходников можно было бы это хранить в мета-информации и показывать только особо жаждущим по отдельной кнопке.
2) мат формулы можно было рисовать как матформулы, многоэтажно, если ввести спец конструкцию языка/IDE для этого.
3) тесты часто прогоняют по табличным данным, чтобы проверить разные кейсы. Эти данные зачастую выглядят как массив массивов или типа того. Почему бы не сделать конструкцию "таблица" и не рисовать это юзеру в виде, собственно, таблицы
3) комментарии вида javadoc/phpdoc тоже можно прибивать к самому классу/методу и показывать только при наведении курсора, чтобы не засирать экран хернёй.
4) если упороться, то можно отказаться от файлов совсем, и приложение рисовать как некую miro-диаграмму, кружочки-стрелочки и всё такое
5) вместо пачки ифов, где-то можно было бы рисовать прям таблицу состояний и переходов, это было бы нагляднее
6) картинки можно эмбедить прямо в исходник и там же видеть привьюшку
7) кстати, можно комментарии снабжать рисунками, а не ссылками на доку или псевдографикой
Вот такие мысли.
Кстати, вот панамка для новой порции х%ёв:
\ /
----
Хабр
А что если исходные коды программ хранить в бинарном формате?
Эта статья — просто идея, не судите строго. TLDR: предлагаю рассмотреть хранение исходных кодов программ в некоем бинарном формате вместо голого текста. Компилятор и IDE Как примерно работает...
❤7👍3😁1🌚1
Forwarded from Тимлид Очевидность | Евгений Антонов
Дотягивать слабые стороны или усиливать сильные?
Мне всегда казалось, что должен быть определенный баланс в жизни. Что не должно быть чего-то такого, что сильно отстает.
Искажения и странные примеры
Возможно, это на меня наложилось искажение от карикатурных картинок с теми, кто пропускал день ног и сам огромный, а ходит на ногах-спичках.
А с другой стороны, я же люблю играть в компьютерные игры. И там зачастую специализация рулит. Либо ты танк с кучей жизней, но маленьким уроном, либо дамажишь, но сам рассыпаешься от двух ударов, либо ни то ни это, но можешь обкастовать своих товарищей по игре так, что они фигачат как не в себя (эдакие тимлиды).
Как только попытаешься сделать персонажа, хорошего во всем, он получится плохим во всем.
Есть даже такая известная поговорка «Jack of all trades, master of none». Мастер на все руки – ни в чем не мастер.
Что говорят мудрецы?
Питер Друкер в одной из своих мудрых книг говорил, что сильные стороны сотрудников важнее слабых. Приводил такой пример:
«Генерал Грант был неординарной личностью и вёл не самый здоровый образ жизни. И хотя президент Линкольн знал об этих его особенностях, он всё равно назначил этого генерала главнокомандующим, потому что из всех генералов только Грант умел спланировать и успешно реализовать военные операции. Это было удачное назначение, ставшее переломным моментом Гражданской войны. Так, Линкольн выбрал главнокомандующего за сильные качества, а не за отсутствие недостатков».
В жизни и работе
У каждого из нас есть свои сильные и слабые стороны. И я не уверен, что баланс тут вообще достижим.
А еще я не уверен, что нам нужно достигать этот баланс. Что нам нужно постоянно выравнивать все свои недостатки и корить себя, что это всё никак почему-то не получается.
У меня есть некоторая черта, которая является у менеджеров скорее плюсом. Я очень хочу, чтобы всё было сделано как договорено и было под контролем (не обязательно моим личным). Это вроде бы хорошо, я часто довожу дела до конца и предупреждаю заранее, если что-то идет не так.
Но у этого есть и обратная сторона. Я довольно тревожный и не очень благодушно реагирую на резкую смену планов.
И вот я для себя решил, что перестану заниматься самоедством, что такой минус у меня есть, и прекращу пытаться срастить несращиваемые противоположности. А просто приму вот эти свои особенности и постараюсь чаще вписываться туда, где нужен порядок и контроль, а не где каждый день всё горит и все переобуваются в полете.
И прям морально стало легче.
Итог
Если ваши слабые стороны – просто антагонисты сильных, то есть шанс, что их и невозможно подтянуть, как вы мечтаете. И это не потому, что вы плохие и с вами что-то не так. Это в целом так работает, что нельзя сразу на всех стульях сидеть.
Важно уметь понять и ценить свои сильные стороны и принять свои слабые, подбирая себе такую активность, где вы сможете раскрыть свой потенциал и не сильно страдать.
НО я не говорю о том, что вообще с любыми недостатками надо мириться и не работать над собой. Сложно понять, что поправимо, что нет, что просто дурная привычка, а что очень сильная особенность и ваша неотъемлемая черта. Предстоит хорошенько потрудиться, чтобы в себе разобраться.
Если бы всё было легко, то все бы уже были счастливые, довольные, эффективные и румяные.
Мне всегда казалось, что должен быть определенный баланс в жизни. Что не должно быть чего-то такого, что сильно отстает.
Искажения и странные примеры
Возможно, это на меня наложилось искажение от карикатурных картинок с теми, кто пропускал день ног и сам огромный, а ходит на ногах-спичках.
А с другой стороны, я же люблю играть в компьютерные игры. И там зачастую специализация рулит. Либо ты танк с кучей жизней, но маленьким уроном, либо дамажишь, но сам рассыпаешься от двух ударов, либо ни то ни это, но можешь обкастовать своих товарищей по игре так, что они фигачат как не в себя (эдакие тимлиды).
Как только попытаешься сделать персонажа, хорошего во всем, он получится плохим во всем.
Есть даже такая известная поговорка «Jack of all trades, master of none». Мастер на все руки – ни в чем не мастер.
Что говорят мудрецы?
Питер Друкер в одной из своих мудрых книг говорил, что сильные стороны сотрудников важнее слабых. Приводил такой пример:
«Генерал Грант был неординарной личностью и вёл не самый здоровый образ жизни. И хотя президент Линкольн знал об этих его особенностях, он всё равно назначил этого генерала главнокомандующим, потому что из всех генералов только Грант умел спланировать и успешно реализовать военные операции. Это было удачное назначение, ставшее переломным моментом Гражданской войны. Так, Линкольн выбрал главнокомандующего за сильные качества, а не за отсутствие недостатков».
В жизни и работе
У каждого из нас есть свои сильные и слабые стороны. И я не уверен, что баланс тут вообще достижим.
А еще я не уверен, что нам нужно достигать этот баланс. Что нам нужно постоянно выравнивать все свои недостатки и корить себя, что это всё никак почему-то не получается.
У меня есть некоторая черта, которая является у менеджеров скорее плюсом. Я очень хочу, чтобы всё было сделано как договорено и было под контролем (не обязательно моим личным). Это вроде бы хорошо, я часто довожу дела до конца и предупреждаю заранее, если что-то идет не так.
Но у этого есть и обратная сторона. Я довольно тревожный и не очень благодушно реагирую на резкую смену планов.
И вот я для себя решил, что перестану заниматься самоедством, что такой минус у меня есть, и прекращу пытаться срастить несращиваемые противоположности. А просто приму вот эти свои особенности и постараюсь чаще вписываться туда, где нужен порядок и контроль, а не где каждый день всё горит и все переобуваются в полете.
И прям морально стало легче.
Итог
Если ваши слабые стороны – просто антагонисты сильных, то есть шанс, что их и невозможно подтянуть, как вы мечтаете. И это не потому, что вы плохие и с вами что-то не так. Это в целом так работает, что нельзя сразу на всех стульях сидеть.
Важно уметь понять и ценить свои сильные стороны и принять свои слабые, подбирая себе такую активность, где вы сможете раскрыть свой потенциал и не сильно страдать.
НО я не говорю о том, что вообще с любыми недостатками надо мириться и не работать над собой. Сложно понять, что поправимо, что нет, что просто дурная привычка, а что очень сильная особенность и ваша неотъемлемая черта. Предстоит хорошенько потрудиться, чтобы в себе разобраться.
Если бы всё было легко, то все бы уже были счастливые, довольные, эффективные и румяные.
👍22❤4👏1💘1
Вообще, щас подумал, что наверно надо развивать не слабые и не сильные стороны, а те, что тебе понадобятся в достижении каких-то целей. Проблема лишь в том, чтобы предсказать будущее и понять, что же тебе будет нужно.
👍19❤1
Шел медведь, видит проект горит.
Влез в него, и выгорел
Влез в него, и выгорел
😁40🗿8👍7💔1
Forwarded from System Design & Highload (Alexey Rybak)
DevHands_io_Highload_Bootcamp_Books_and_Articles_v0_3_16_07_2024.pdf
117.9 KB
Делюсь списком литературы по темам “введение в разработку высоконагруженных проектов”, “архитектура хайлоад-проектов”, “системный дизайн”.
Цель - составить вводный список русскоязычных материалов для погружения в хайлоад тем, у кого не было таких проектов вовсе, либо опыт в больших нагрузках был ограничен. Где нет русско-язычного перевода, но читать надо - оставлен английский вариант.
Буду рад вашим комментариям и предложениям.
Цель - составить вводный список русскоязычных материалов для погружения в хайлоад тем, у кого не было таких проектов вовсе, либо опыт в больших нагрузках был ограничен. Где нет русско-язычного перевода, но читать надо - оставлен английский вариант.
Буду рад вашим комментариям и предложениям.
❤22🔥10👍1🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Постоянно пользуюсь копайлотом и прочими нейроштуками для программирования. Искренне удивлён, что кто-то до сих пор считает это дурацкой игрушкой.
На мой взгляд, копайлот хорошо работает там, где надо писать много нового кода. Например, при интеграции внешнего апи я в коментах перед функцией копипастю кусок доки, и копайлот сам полностью пишет метод. Да, его все равно надо проверять, дебажить, покрывать тестами и т.д., но самая занудная часть очень часто уходит в 0.
Еще нейросети классно работают для изучения нового. Например, я плохо знаю котлин и как писать плагины для IDE (мой пет проект для выходных). Я слоупок, только в воскресенье попробовал просто нарисовать эскиз в Миро и скормить картинкой в claude.ai - сделай мне класс диалога по экскизу. И всё, я уже вижу код, какие-то новые штуки, фишечки. Да, код надо напильником доработать, но блин, это сокращает путь познания в разы.
Также claude.ai / chatGPT хорош для объяснений чего-то. "Чем отличается технология X от технологии Y"
На мой взгляд, копайлот хорошо работает там, где надо писать много нового кода. Например, при интеграции внешнего апи я в коментах перед функцией копипастю кусок доки, и копайлот сам полностью пишет метод. Да, его все равно надо проверять, дебажить, покрывать тестами и т.д., но самая занудная часть очень часто уходит в 0.
Еще нейросети классно работают для изучения нового. Например, я плохо знаю котлин и как писать плагины для IDE (мой пет проект для выходных). Я слоупок, только в воскресенье попробовал просто нарисовать эскиз в Миро и скормить картинкой в claude.ai - сделай мне класс диалога по экскизу. И всё, я уже вижу код, какие-то новые штуки, фишечки. Да, код надо напильником доработать, но блин, это сокращает путь познания в разы.
Также claude.ai / chatGPT хорош для объяснений чего-то. "Чем отличается технология X от технологии Y"
👍15❤1
UPD: оформил в виде статьи на хабре
Ошибки в языке Go - это большая ошибка
=============================
Хочу явно прописать свои мысли, чтобы потом ссылаться на этот пост.
Я пишу на Go уже несколько лет, он мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.
Но сорян, к бесконечным
Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но блин, на мой взгляд Го-вэй Го-вэю рознь.
Читабельность
Одно дело отказываться от магических ORM или всеобъемлющих фреймворков - мы получаем больше контроля, а платим за это неким "лишним" техническим кодом, который особо никому и не мешает. Немного медитативного набивания кода - это даже приятно.
Но совсем другое дело, когда бизнес-логика, которая и так бывает очень сложна, замусоривается обработкой ошибок. Дело вообще не в том, что мне лень написать бойлерплейт, я с этим абсолютно ок. Дело в читабельности.
Возьмем самый-самый простой пример (псевдокод):
Вместо такого
Мы имеем
какой из двух кусков кода боле читабелен?
Да, второй более explicit, и да, он досконально проверяет всю ошибочную фигню, но зато в первом примере сразу понятно, что происходит, а во втором приходится продираться через мусор, потому что сама логика происходящего занимает намного меньше площади экрана, чем ошибочные реакции. А если сама логика сложна и содержит какие-то хитроумные условия и подсчеты? Там капец просто.
И это, знаете ли, big fucking deal. Как вы наверно знаете, при программировании люди тратят на чтение кода 80-90% времени, а на написание совсем чуть-чуть. Т.е. сначала надо разобраться, что уже происходит, и лишь потом добавлять новое. Так вот, с чтением кода в Go совсем беда. И беда эта связана только с обработкой ошибок, всё остальное в пределах нормы, а то и лучше.
Стек трейс
Стандартный пакет errors не сохраняет стек вызовов, поэтому когда вы в конце концов на самом высоком уровне получили ошибку и записали ее в лог, в логе вы просто так не поймёте, где изначально была проблема. Например, изначальная ошибка была "ошибка SQL запроса". Где sql, какой именно запрос из сотен? А трейс есть только на момент записи лога, остальной стек уже потерян. Именно поэтому люди вынуждены выкручиваться: использовать сторонние пакеты или прояснять ошибку вручную, добавляя информацию на каждом слое (через fmt.Errorf) или логировать прямо в месте ошибки (еще больше захламляя логику).
В общем, на практике вместо хотя бы
чаще всего идет оборачивание
причем это объяснение в 99% нужно не для лучшего понимания происходящего, а тупо для того, чтобы потом по сообщению в логе найти место возникшей проблемы.
Что делать?
Есть несколько десятков proposals, которые предлагают разные способы упрощения языка.
Например, ключевое слово try перед вызовом функции, которое работает практически как макрос, неявно добавляющий if err != nil {return nil, err}.
или так:
callSomeFunction() orfail
(в случае фейла идет возврат из функции с ошибкой)
тысячи их :)
Как по мне, надо сделать этот самый try. Но его недостаточно, потому что никто не возвращает просто ошибку, ее возвращают с пояснениями. Поэтому нужен try, запоминающий цепочку вызовов. И вот это уже будет бомба.
Ошибки в языке Go - это большая ошибка
=============================
Хочу явно прописать свои мысли, чтобы потом ссылаться на этот пост.
Я пишу на Go уже несколько лет, он мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.
Но сорян, к бесконечным
if err != nil я до конца привыкнуть так и не смог.Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но блин, на мой взгляд Го-вэй Го-вэю рознь.
Читабельность
Одно дело отказываться от магических ORM или всеобъемлющих фреймворков - мы получаем больше контроля, а платим за это неким "лишним" техническим кодом, который особо никому и не мешает. Немного медитативного набивания кода - это даже приятно.
Но совсем другое дело, когда бизнес-логика, которая и так бывает очень сложна, замусоривается обработкой ошибок. Дело вообще не в том, что мне лень написать бойлерплейт, я с этим абсолютно ок. Дело в читабельности.
Возьмем самый-самый простой пример (псевдокод):
Вместо такого
прочитали из базы()
обработали()
записали результат()
Мы имеем
прочитали из базы()
if err != nil {
return fmt.Errorf("не смогли прочитать из базы: %w", err)
}
обработали()
if err != nil {
return fmt.Errorf("не смогли обработать: %w", err)
}
записали результат()
if err != nil {
return fmt.Errorf("не смогли записать результат: %w", err)
}
какой из двух кусков кода боле читабелен?
Да, второй более explicit, и да, он досконально проверяет всю ошибочную фигню, но зато в первом примере сразу понятно, что происходит, а во втором приходится продираться через мусор, потому что сама логика происходящего занимает намного меньше площади экрана, чем ошибочные реакции. А если сама логика сложна и содержит какие-то хитроумные условия и подсчеты? Там капец просто.
И это, знаете ли, big fucking deal. Как вы наверно знаете, при программировании люди тратят на чтение кода 80-90% времени, а на написание совсем чуть-чуть. Т.е. сначала надо разобраться, что уже происходит, и лишь потом добавлять новое. Так вот, с чтением кода в Go совсем беда. И беда эта связана только с обработкой ошибок, всё остальное в пределах нормы, а то и лучше.
Стек трейс
Стандартный пакет errors не сохраняет стек вызовов, поэтому когда вы в конце концов на самом высоком уровне получили ошибку и записали ее в лог, в логе вы просто так не поймёте, где изначально была проблема. Например, изначальная ошибка была "ошибка SQL запроса". Где sql, какой именно запрос из сотен? А трейс есть только на момент записи лога, остальной стек уже потерян. Именно поэтому люди вынуждены выкручиваться: использовать сторонние пакеты или прояснять ошибку вручную, добавляя информацию на каждом слое (через fmt.Errorf) или логировать прямо в месте ошибки (еще больше захламляя логику).
В общем, на практике вместо хотя бы
if err != nil {
return nil, err
}
чаще всего идет оборачивание
if err != nil {
return nil, fmt.Errorf("мы тут делали то-то и то-то, а нам вернули ошибку: %w", err)
}
причем это объяснение в 99% нужно не для лучшего понимания происходящего, а тупо для того, чтобы потом по сообщению в логе найти место возникшей проблемы.
Что делать?
Есть несколько десятков proposals, которые предлагают разные способы упрощения языка.
Например, ключевое слово try перед вызовом функции, которое работает практически как макрос, неявно добавляющий if err != nil {return nil, err}.
или так:
callSomeFunction() orfail
(в случае фейла идет возврат из функции с ошибкой)
тысячи их :)
Как по мне, надо сделать этот самый try. Но его недостаточно, потому что никто не возвращает просто ошибку, ее возвращают с пояснениями. Поэтому нужен try, запоминающий цепочку вызовов. И вот это уже будет бомба.
👍27👎6🤔4😁2🌚2
Почему программисты (и не только) всегда опаздывают с дедлайнами?
Ошибка планирования — это когнитивное искажение, из-за которого мы систематически недооцениваем время, ресурсы и усилия, необходимые для выполнения задачи. Впервые описано психологами Даниэлем Канеманом и Амосом Тверски в 1979 году.
Ключевые фишки:
- Универсальность: влияет на людей независимо от опыта и экспертизы
- Устойчивость: сохраняется даже при осведомленности о нем
- Масштабируемость: проявляется как в малых задачах, так и в крупных проектах
Причины возникновения:
- Чрезмерный оптимизм 😊
- Игнорирование прошлого опыта
- Недооценка сложности и возможных препятствий
- Фокус на идеальном сценарии ("планирование наилучшего случая")
- Внешнее и внутреннее давление сроков
- Желание произвести хорошее впечатление
1️⃣ "Это просто баг, пофикшу за час!"
Спустя 8 часов: "Кто написал этот спагетти-код?!"
2️⃣ Оценка проекта: 2 недели
Реальность: 2 месяца
Причина: Забыли учесть тестирование, документацию и неизбежные правки от клиента.
3️⃣ "Внедрение нового фреймворка займет пару дней"
Месяц спустя: Команда всё еще борется с несовместимостью и неожиданными багами.
Как бороться?
- Разбивайте задачи на мелкие подзадачи
- Применяйте "планирование от прошлого": анализируйте схожие завершенные проекты
- Добавляйте буферное время (умножение оценки на Пи и т.д.)
- Учитывайте "неизвестные неизвестные": резервируйте время на непредвиденные сложности
И всё равно нихера не угадаете
Интересный факт: исследования показывают, что люди более точно оценивают время выполнения задач другими, чем самими собой. В общем, планирование лучше делать коллективно.
Ошибка планирования — это когнитивное искажение, из-за которого мы систематически недооцениваем время, ресурсы и усилия, необходимые для выполнения задачи. Впервые описано психологами Даниэлем Канеманом и Амосом Тверски в 1979 году.
Ключевые фишки:
- Универсальность: влияет на людей независимо от опыта и экспертизы
- Устойчивость: сохраняется даже при осведомленности о нем
- Масштабируемость: проявляется как в малых задачах, так и в крупных проектах
Причины возникновения:
- Чрезмерный оптимизм 😊
- Игнорирование прошлого опыта
- Недооценка сложности и возможных препятствий
- Фокус на идеальном сценарии ("планирование наилучшего случая")
- Внешнее и внутреннее давление сроков
- Желание произвести хорошее впечатление
1️⃣ "Это просто баг, пофикшу за час!"
Спустя 8 часов: "Кто написал этот спагетти-код?!"
2️⃣ Оценка проекта: 2 недели
Реальность: 2 месяца
Причина: Забыли учесть тестирование, документацию и неизбежные правки от клиента.
3️⃣ "Внедрение нового фреймворка займет пару дней"
Месяц спустя: Команда всё еще борется с несовместимостью и неожиданными багами.
Как бороться?
- Разбивайте задачи на мелкие подзадачи
- Применяйте "планирование от прошлого": анализируйте схожие завершенные проекты
- Добавляйте буферное время (умножение оценки на Пи и т.д.)
- Учитывайте "неизвестные неизвестные": резервируйте время на непредвиденные сложности
Интересный факт: исследования показывают, что люди более точно оценивают время выполнения задач другими, чем самими собой. В общем, планирование лучше делать коллективно.
❤20👍9