Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
637 - Telegram Web
Telegram Web
«Самое клёвое в работе программиста выбирать технологии и мечтать о том, каким будет твой код. Самое скучное в работе программиста — писать этот самый код»
Про тесты.

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

А вот тесты — это прям сплошной антипаттерн. Там сплошное дублирование, и процветает макаронный стиль. Но фишка в том, что так и должно быть.

Давным давно коллега мой придумал шикарное правило в отношении тестов и называл его «правилом Шапокляк». Идея в том, что тесты должны быть, как крокодил Гена — плоскими и зелёными. Чем больше в ваших тестах разного устранения дублирования, наследования, переменных и всяких ленивых вызовов, тем больше тест похож на код, а не на тест.

Приведу один простой пример. Писать я буду на абстрактном псевдоязыке, чтобы передать смысл. Если попрёт, будут и другие примеры с «хорошо-плохо».

Плохо писать:

user = create(User)
expect(user.full_name).to equal("#{user.first_name} #{user.last_name}")


Это сильно упрощённый пример, но вот expect(2 + 2).to equal(2 + 2) уже отчётливо прослеживается.

Хорошо писать:

user = create(User, first_name: ‘Bob’, last_name: ‘Smith')
expect(user.full_name).to equal("Bob Smith")


Если подыдожить, то перестаньте программировать в тестах. Тесты — это в первую очередь спецификация работы приложения. Попробуйте к тестам отнестись, как к описанию работы, а не как к программе по проверке программы.

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

Был у нас в аутсорсе заказчик один крайне заинтересованный в результате. И по всем законам «Гибкого программирования» мы его активно привлекали к обсуждению фич. И однажды он увидел наши аццептанс-тесты, написанные на этом языке. Сказать, что он офигел — ничего не сказать. Следующие несколько дней мы ему объясняли где лежат файлики с этими тестами, как их правильно называть и что там может быть в этих файлах.

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

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

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

Я хз что происходит. Обычно в играх так лут собирают. Идей других нету.
Ребята. У нас открыт сбор всё тому же отряду. Будем рады любой помощи. Спасибо.

Ссылка банки не поменялась: https://send.monobank.ua/jar/4QxM3tuPTR

Монобанк-карта: 5375411201873143

Приват-карта: 5168752003854042

Пейпал: alexey@osipenko.in.ua
Мы большие молодцы. Эта сумма пойдёт на покупку десяти тактических рюкзаков и шестнадцати пар летних берцев. Отчёт будет, ессно.

Всем участвовавшим большое-пребольшое спасибо. Но не расходимся, война только начинается.
Продолжаем рубрику «хорошо-плохо» и опять про тесты.

Месседж очень простой: Перестаньте писать циклы в тестах.

Плохо:

[2, 4, 6].each { |item|
expect(item).to_be_odd()
}


Хорошо:

expect(2).to_be_odd()
expect(4).to_be_odd()
expect(6).to_be_odd()


Иногда ещё, если позволяет фреймворк, можно это красиво завернуть в макрос (или что там у вас есть в фреймворке):

expect_to_be_odd(4)

Но нужно помнить, что такие вот макросы в тестах — это тоже код, который тоже бы неплохо протестировать. Правило всё такое же — любой мало-мальски сложный код нужно тестировать. Поэтому код должен быть максимально простым.
This media is not supported in your browser
VIEW IN TELEGRAM
Авто, на которое мы недавно сбрасывались, уже второй раз возвращается с передовой и в этот раз — на капремонт. Подвеска ушатана, что совсем не удивительно. Но машина по имени Пиксель в строю и совсем скоро опять поедет на передовую.
Парадоксально, но с гитхаб-копилотом молодому и неопытному джуну станет сильно проще писать код и насколько же сложнее будет найти работу.
Ладно, на прошлой неделе мы в каментах начали обсуждение того, почему же это вдруг копилот составляет конкуренцию джунам. Мысль очень простая.

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

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

Вероятно, вы спросите, а при чём тут программирование. А не при чём, вот такая у нас новая рубрика будет. Кто-то нейронной сетью факты о лягушках выдумывает, а у нас будет вот «очевидное невероятное».
Говорят, это дорожный знак где-то в Нью-Йорке.

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

#dimoneverything
Эй, друг, который читает это, потому что вам его переслали, знай! Тот кто вам это прислал, очень переживает за то, что происходит на фронте и делает всё возможное для победы.

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

И помочь тут можно двумя очень важными способами. Помимо финансов не менее важная штука — это распространение информации. Если вдруг вы очень хотите помочь, но уже всё отправили Притуле или в «ПЖ», то просто отправьте это сообщение своим друзьям или в соцсети. Плашка в начале сообщения предназначена как раз для ваших друзей.

Мы будем рады любой помощи. Спасибо.

Ссылка банки не поменялась: https://send.monobank.ua/jar/4QxM3tuPTR

Монобанк-карта: 5375411201873143

Приват-карта: 5168752003854042

Пейпал: alexey@osipenko.in.ua
Media is too big
VIEW IN TELEGRAM
Ребята поделились видео. На нём видно в тот Т5, на который мы собирали. И Т4, которого уже нет.

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


Собираем на пикап: https://www.tgoop.com/itextrapolation/628
Когда в любой процесс приходят юристы и законы, получается полный бред и абсурд. Наверняка у тех из нас, кто работает на зарубежную компанию, по два ноутбука, один — для людей, второй — для чудовищ, один из них выдаёт компания со всяким предустановленным софтом, обязательным корпоративным ВПН и запретом ставить удобные программульки. Понятное дело, формально на то есть причины, но прикол в том, что это только формально. Обойти правила не составляет никакого труда и, при желании (или наоборот, при нежелании), это просто берётся и обходится.

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

И самое главное, что процесс обхода всем известен и всем на него наплевать. Это всё нужно потому, что компания хочет избежать судебных исков, а не фактически того, что сами запрещают там или навязывают. Это нужно всегда иметь ввиду и просто принять, как факт.

Из того, что полезно знать рядовому сотруднику:
1. Почему возник тот или иной запрет. Прям знать нужно не абстракно «для безопасности», а конкретную причину, прецендент или закон.
2. Понимать отвественность и санкции за нарушение правила. Просто уволят, наложат штраф в сикстиллион миллиардов денег или в тюрму посадят? Нужно знать не только чем грозят, а и что в действительности будет.
3. Обсудить способы обхода блокировок до начала использования. Если приходит начальник и говорит, что нужно вот программку поставить, чтобы экран записывала, прям тут же сказать, что для всяких непотребств, у тебя вон, есть айпад, второй ноутбук или стационарный компьютер и непотребства при желании легко можно обойти. И внимательно слушать что в ответ говорит. Если начинает неуверенно что-то говорить про «мы не предполагаем, пук-пук, что во вмремя рабмоты ты что-то использмуешь», значит ему тоже наплевать.

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

————————
Сбор на пикап: https://send.monobank.ua/jar/4QxM3tuPTR
Со всех рупоров сейчас можно услышать про новые фото от нового телескопа Webb. Они офигенные и вот интернет не нужно долго упрашивавть, чтобы появился сервис сравнения качества фотографий. И это офигенно.

https://johnedchristensen.github.io/WebbCompare/
Скоро в моду войдут шестиконечные блики на фотографиях. Будет фильтр специальный «Webb» в инстаграмах всяких. Запомните этот твит, как говорится.
В созвездии Большой Медведицы есть двойная звезда Мицар и Алькор (вторая звезда ковша). Ходит легенда, что в древнем Египте в элитные войска фараона набирали юношей, которые могли различать эти звезды. Это было доказательством, что зрение было достаточно острым. На самом деле эта "двойная звезда" — шестикратная, так как Мицар является парой двойных звезд, и Алькор тоже двойная звезда. Об этом воины фараона не знали.
То, Мицар есть двойная звезда, увидели в 1617 году в один из первых телескопов. Каждая из звезд Мицара стала двойной уже в 19 веке. И только лишь в конце 20-го века определили, что Алькор тоже двойная звезда. Двойная звезда, в отличии от сдвоенной имеет общий центр масс. А звезды внутри сдвоенной могут быть разнесены в пространстве на множество парсеков. Система Мицар-Алькор имеет общий центр масс, чем, собственно и уникальна. Если в этой системе есть жизнь, то местные аборигены наблюдают шесть солнц на небе. А ещё, возможно, что разделение на день-ночь там попросту отсутствует.

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

————
Собираем на пикап: https://www.tgoop.com/itextrapolation/628
Одна из основных причин закручивания гаек на работе — это конечно же юридические проволочки. И основная проблема проволочек — это интеллектуальная собственность на написанный код. Разбираться в этом всём кошмаре интеллектуальных собственностей, всяких лицензий на софт и всяких юрисдикции — сущий кошмар.

Ну вот вы выполнили npm install blah и ещё кусок кода написали, который вызыывает функцию из этого пакета. Чо с правами на код? Кому оно вот это принадлежит? Лицензии очень хитро наследуют друг друга и «инфецируют» своими лицензиями код, где используются. И конечно имеют разные особенности. Какая-нибудь зависимость в пакете с пакетами, от которого зависит ваш этот blah может легко поставить огромный крест на очередном раунде инвестиций, когда вдруг юристы решат тщательно проверить кому же принадлежит весь код суммарно.

Или например вы, как отвественный разработчик, взяли кусок кода из прошлого проекта с прошлым заказчиком и вставили в этот проект. Ну, всё то же самое, а там ещё вы постарались и библиотечку написали, тестами обложили всё. Молодец? Прям сейчас — да, а вот когда юристы прийдут и начнут разбираться, то окажется, что вот эта вот конкретная часть кода второго проекта от второго заказчика принадлежит первому проекту и первому заказчику. И юридически окажется, что второй проект, который принёс уже миллионы долларов вдруг обязан всем своим существованием первому проекту, а значит второму заказчику нужно срочно поделиться прибылью с первым.

Вот такие дела.

————
Собираем на пикап: https://www.tgoop.com/itextrapolation/628
Сегодня, в раннее субботнее утро, покажу вам наш лендинг, который мы сделали лет эдак 7 назад, когда активно занимались аутсорсом. Меня вот сильно прёт от того, что его можно рассматривать очень долго, находя много разных мелких штучек-дрючек. Как вам?

https://cimon.io
2025/06/30 11:39:57
Back to Top
HTML Embed Code: