Pull to refresh
3
0
Send message

Как правильно писать тесты? Часть 1

Level of difficultyMedium
Reading time2 min
Views6.4K

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

Обсудим три базовых подхода к тестированию чего‑либо в программе:

Читать далее
Total votes 5: ↑2 and ↓3+3
Comments6

Разработчики на PHP умеют писать код, но не всегда знают как устроен web-server

Level of difficultyEasy
Reading time5 min
Views14K

Одной из ключевых особенностей PHP является - легкость для разработчика в написании первой программы. Во многих мануалах для старта разработки сокращают информацию о web-сервере до минимума, например, запустите openserver или скопируйте собранный докер образ, где уже будет все настроено и просто перейдите по адресу http://localhost. Все это приводит к сужению знаний общей картины как работает web-приложение, что негативно влияет на репутацию разработчиков на этом языке программирования в целом. В прошлой статье я обещал рассказать о web-серверах для PHP, как раз для того, чтобы расширить кругозор тех людей, кто пропустил эту тему и постараться раскрыть ее максимально простым и понятным языком.

Читать далее
Total votes 24: ↑16 and ↓8+12
Comments27

Простые приёмы, которые сделают ваш код нагляднее

Level of difficultyEasy
Reading time8 min
Views13K

Упорядоченный, опрятный, хорошо написанный для восприятия код помогает быстрее выявлять случайные ошибки, и позволяет глазам быстрее "парсить" код, что в целом ускоряет время выполнения задач. В этой статье я, Андрей Рик, fullstack-разработчик с 10+ лет опыта коммерческой разработки, рассказываю как и зачем писать опрятный код.

Читать статью
Total votes 21: ↑11 and ↓10+6
Comments66

Тебе нужна своя стратегия

Level of difficultyEasy
Reading time10 min
Views32K

Каждый человек мечтает о лучшей жизни, но не многие "приземляют" свои желания и цели на конкретные задачи сегодняшнего дня.

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

Сейчас мы пройдем путь от вашего прошлого, до вашего будущего; от ваших целей, до задачи на ближайшие 2 часа.

Создать свою стратегию
Total votes 39: ↑27 and ↓12+26
Comments50

Решаем задачу уровня «Невозможно». Сжатие хаотического бинарного кода. Суперпозиционные системы счисления

Level of difficultyHard
Reading time10 min
Views2.2K

Для наилучшего восприятия выделим основные пункты изложенного материала:

1.    Для чего необходимо сжатие информации и увеличение плотности записи.
2.    Проблемы в покорение хаоса, нерешенные математиками и ими же созданные.
3.    Простое решение проблемы сжатия абсолютно любого бинарного кода.
4.    Пути и методы дальнейшего развития сжатия бинарного кода.

Читать далее
Total votes 18: ↑3 and ↓15-10
Comments28

Пишем анти-легаси приложение

Reading time7 min
Views12K

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

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

Я даже предположил, что Elm MVU — это тот путь, который данные потребности закроет.

Однако, несмотря на то, что MVU является архитектурой, позволяющей жестко разделять представление и логику, я пришел к выводу, что MVU (и функциональное программирование в целом) страдают от некоторой чуждости естественному процессу мышления и программирования.

Под словом «естественный» я подразумеваю нечто, что коррелирует с языком, который мы используем в повседневной жизни. Функциональное программирование не всегда можно описать таким языком (например, несмотря на то, что монады, включая Observable streams, являются относительно простым понятием, мы вряд ли сможем выразить это понятие на таком языке). Я убедился, что программирование, которое лучше коррелирует с естественным языком — это многопарадигменное программирование, где вещи не строго OOP и не строго функциональны, а то или другое в зависимости от ясности и удобства работы.

Читать далее
Total votes 13: ↑12 and ↓1+14
Comments5

Описательный анализ или как выбрать страну для релокации (пошаговый ключ к посту топ 20 стран)

Reading time4 min
Views13K

Описательный анализ (далее - ОА) это самый простой вид анализа, который используется на начальном этапе анализа данных. Задачи ОА могут быть разными, но чаще всего целью ОА является облегчить принятие решений для бизнеса через выявление закономерностей и тенденций.

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

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

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

Данные с сайта https://www.numbeo.com/, анализ проведен в BigQuery.

Критерии

Добавить свои критерии поможет базовая функция электронных таблиц =VLOOKUP.

Например, мы решаем добавить в нашу таблицу столбец с показателями валового дохода от аренды квартиры в центре города (полезно учитывать, если планируете купить квартиру и сдавать её или оплачивать в ипотеку).

Для этого используется функция =VLOOKUP, которая подбирает совпадающие значения.

=VLOOKUP(A2:A96, $I$2:$J$112, 2, FALSE)

Читать далее
Total votes 27: ↑9 and ↓18-6
Comments36

Как избежать когнитивной перегрузки: способы оптимизации кода для разработчиков

Level of difficultyMedium
Reading time14 min
Views13K

По мнению Артема Закируллина*, одна из фундаментальных проблем, с которой сталкиваются разработчики при анализе кода – высокая когнитивная нагрузка. Это не абстрактное, а реальное ограничение возможностей, которое стоит времени и денег. На чтение и понимание кода, тратится больше времени, чем на его написание. Поэтому, разработчику нужно постоянно задаваться вопросом: не пишет ли он код, чтение которого создает чрезмерную когнитивную нагрузку?

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

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.

Читать далее
Total votes 55: ↑54 and ↓1+61
Comments20

Простой пример использования Symfony Messenger

Level of difficultyEasy
Reading time6 min
Views3.9K

Пришёл и мой черёд асинхронно и многопоточно средствами PHP кое-что пообрабатывать… И я, естественно, вспомнил про компонент Messenger фреймворка Symfony.

Ранее я никогда Symfony Messenger не использовал.
Чтобы понять, как с ним работать, я пытался найти какой-то простой, законченный и самодостаточный пример, понятный даже чайнику, но мне это не удалось...

Всё, что находилось, было либо слишком сложным, либо это были какие-то отдельные куски кода, понятные только тем, кто уже работал с Symfony Messenger. К тому же всё, что находилось, в основном было "заточено" либо под Redis, либо под RabbitMQ. установка которых как-то немного перебор для учебного примера…

В-общем, я создал и выложил на GitHub такой простой, законченный и самодостаточный пример работы Symfony Messenger совместно с Symfony Console.

Посмотреть пример работы Symfony Messenger
Total votes 8: ↑8 and ↓0+12
Comments0

Юнит-тесты: чек-лист методик проектирования

Level of difficultyEasy
Reading time10 min
Views12K

Привет, Хабр! Меня зовут Василий Косарев, я Java‑разработчик в CDEK. Много раз мы слышали о необходимости писать модульные тесты, о том, что весь код должен быть ими покрыт. При этом мне не встречалось списка: какие именно методики лучше использовать при тестировании кода.

Я задумался: есть ли чек‑лист/ руководство, который облегчил бы генерацию тестовых сценариев и помог выявлять серьёзные ошибки? Чтобы вдумчиво подходить к тестированию и не тратить ресурсы впустую, сводя к минимуму количество необходимых тестов.

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

Читать далее
Total votes 40: ↑39 and ↓1+40
Comments12

Улучшение кода без споров и цитирования известных практик

Level of difficultyEasy
Reading time16 min
Views11K

Не секрет, что при формировании новой команды руководители (Team Leader, Tech Leader) сталкиваются с проблемой формирования единого стиля написания программ, так как все члены команды новые, и у каждого из них свой подход к организации кода и выбору используемой практики. Как правило, в большинстве случаев это приводит к длинным диспутам на ревью, которые в итоге перетекают в различные толкования известных практик, таких как SOLID, KISS, DRY, и т.д. Принципы использования этих практик довольно размыты и, при должном упорстве, легко найти парадокс, когда одна из них противоречит другой. Например, рассмотрим Single Responsibility и DRY.

Одна из вариаций определения принципа единой ответственности (Single Responsibility - буква S из аббревиатуры SOLID) гласит, что каждый объект должен иметь одну ответственность, и эта ответственность должна быть полностью инкапсулирована в класс. Принцип DRY (Don’t repeat yourself) предлагает избегать дублирования в коде. Однако, если у нас в коде есть один набор данных (DTO), который может использоваться в разных слоях/сервисах/модулях, какому из этих принципов нам следовать? Безусловно, во многих книгах по программированию разбираются похожие ситуации, как правило, в них говорится, что если речь идет о разных объектах/функциях с одинаковым набором свойств и логики, но принадлежащим разным доменным областям, то дублированием это не является. Но как доказать что эти объекты ДОЛЖНЫ принадлежать разным доменным областям, и, главное, готов (и уверен ли в своих силах) руководитель доказывать это утверждение?

Читать далее
Total votes 19: ↑18 and ↓1+25
Comments17

Проверка тестов PHP API на соответствие определениям OpenAPI — пример Laravel

Reading time8 min
Views8.7K

OpenAPI — это спецификация, описывающая API-интерфейсы RESTful в форматах JSON и YAML так, что он понятен и людям, и машинам.

Определения OpenAPI не привязаны к конкретному языку и могут использоваться самым разным образом.

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments0

Я до последнего буду защищать сильную статическую типизацию

Level of difficultyMedium
Reading time8 min
Views24K

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

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

Читать далее
Total votes 61: ↑55 and ↓6+65
Comments135

Чтение на выходные: «Идеальный программист» Роберта Мартина

Level of difficultyEasy
Reading time3 min
Views8.2K

Роберт Мартин — инженер, программист, консультант в области разработки ПО. Известен как автор книг о чистом коде, архитектуре и Agile. Пока что мы прочитали одну из его книг — «Идеальный программист», и уже хотим продолжить чтение по теме. Поговорим о том, чем зацепила эта работа и даже немного поспорим с рандомными отзывами в интернете (в том числе на Хабре) о ней.

Читать далее
Total votes 8: ↑5 and ↓3+2
Comments7

Код-ревью и советы по повышению его качества: на что обратить внимание в первую очередь?

Reading time4 min
Views5.7K

Привет, Хабр! Сегодня поговорим о код-ревью, т. е. проверке и оценке качества кода выполненной разработчиком задачи перед её релизом. У код-ревью несколько положительных моментов:

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

Но на что обращать внимание в процессе код-ревью? Об этом сегодня и поговорим.

Читать далее
Total votes 6: ↑5 and ↓1+10
Comments8

Что ждут от мидлов в бэкенд-разработке: рекомендации от синьоров

Level of difficultyEasy
Reading time19 min
Views11K

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

Читать далее
Total votes 10: ↑5 and ↓50
Comments8

Проблемы при реализации микросервисной архитектуры

Level of difficultyEasy
Reading time7 min
Views5.9K

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

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

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

Исчерпывающее руководство по различным типам API

Level of difficultyEasy
Reading time8 min
Views33K

API (Application Programming Interface, программный интерфейс приложения), является жизненно важным компонентом в современном ландшафте разработки программного обеспечения, обеспечивая строительные блоки для взаимодействия приложений друг с другом. В этой статье рассмотрим пять основных типов API: REST, SOAP, WebSocket, gRPC и GraphQL, чтобы получить более четкое представление об их функциях, особенностях и идеальных сценариях использования.

Читать далее
Total votes 15: ↑14 and ↓1+15
Comments2

Чистый код. Часть 3

Reading time15 min
Views17K

Привет! Этим постом я завершаю цикл из конспектов видеолекция Дяди Боба про чистый код.

Сегодня обсудим обработку исключений, комментарии к коду, форматирование, размеры файлов и дата-классы.

Обработка исключений

Не раскрывайте реализацию

Майкл Физерс (Working effectively with legacy code) сказал: «Если обработка ошибок раскрывает реализацию — то это неправильная обработка ошибок». Не раскрывать реализацию можно, если написать исключения перед тем, как написать реализацию функции (привет TDD — по-другому и не получится).

Рассмотрим классCommissionCalculator , который обменивает сумму в разных валютах.

Читать далее
Total votes 23: ↑20 and ↓3+20
Comments52

Как контролировать вес, не считая калории?

Level of difficultyEasy
Reading time2 min
Views12K

Друзья, приветствую! Не так давно в журнале Nature Food вышло исследование, которое дает ответ на популярный вопрос: что и как нужно есть, чтобы не толстеть/похудеть?

Будет не плохо закрепить еще раз постулаты, которые все прочнее закрепляются в нашем сознании и помогают становится и оставаться стройными.

Итак, исследователи проанализировали 2700 протоколов питания и вывели 3 наиболее сильных фактора, которые помогают бороться с лишним весом.

Читать далее
Total votes 38: ↑5 and ↓33-26
Comments44

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity