emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. – Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
3.48K subscribers
119 photos
15 videos
22 files
1.14K links
Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, Extreme Programming, SDLC, Agile, etc.

Chat: https://news.1rj.ru/str/emacsway_chat

Persistence: https://dckms.github.io/system-architecture/
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Интересная статья о том, как сделать систему отслеживания посетителей с распознаванием лиц у входной двери за 150$. Система написана на Python, думаю было бы круто написать перевод на JavaScript.   https://bit.ly/35HQutm (перевод - https://bit.ly/3ebvHlO)
#python #iot #article
Две статьи сравнивающие популярные фреймворки Vue и React.

1️⃣ What Vue.js Does Better Than React
🇬🇧 https://bit.ly/3oKmLc3

2️⃣ Vue vs React in 2020: Which Framework to Choose and When
🇬🇧https://bit.ly/3kFcDP5

#article #vue #react #frameworks
Дорожная карта по обучению перспективному направлению Artificial Intelligence.
🔗 https://github.com/AMAI-GmbH/AI-Expert-Roadmap
#learn #article #ai #github #repo
Не так давно, я услышал от одного очень крутого специалиста, автора книги Database Internals, термин "элитизм", который подсветил важные аспекты поведения специалиста (такие как сдержанность) в моей картине миропонимания. Мне кажется, что сегодня наблюдается дефицит этого понимания в профессиональном сообществе.

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

📝 "Refactoring is a kind of reorganization. Technically, it comes from mathematics when you factor an expression into an equivalence - the factors are cleaner ways of expressing the same statement.

Refactoring implies equivalence; the beginning and end products must be functionally identical. You can view refactoring as a special case of reworking (see WhatIsReworking).
Practically, refactoring means making code clearer and cleaner and simpler and elegant. Or, in other words, clean up after yourself when you code. Examples would run the range from renaming a variable to introducing a method into a third-party class that you don’t have source for.

Refactoring is not rewriting, although many people think they are the same. There are many good reasons to distinguish them, such as regression test requirements and knowledge of system functionality. The technical difference between the two is that refactoring, as stated above, doesn’t change the functionality (or information content) of the system whereas rewriting does. Rewriting is reworking. See WhatIsReworking.

Refactoring is a good thing because complex expressions are typically built from simpler, more grokable components. Refactoring either exposes those simpler components or reduces them to the more efficient complex expression (depending on which way you are going).

For an example of efficiency, count the terms and operators: (x - 1) * (x + 1) = x^2 - 1. Four terms versus three. Three operators versus two. However, the left hand side expression is (arguably) simpler to understand because it uses simpler operations. Also, it provides you more information about the structure of the function f(x) = x^2 - 1, like the roots are +/- 1, that would be difficult to determine just by “looking” at the right hand side."
- “What Is Refactoring” on c2.com
http://wiki.c2.com/?WhatIsRefactoring

#SoftwareDesign #Agile #Refactoring
"Using Event Sourcing and CQRS with Incident - Part 1" for Elixir-developers
https://pedroassumpcao.ghost.io/event-sourcing-and-cqrs-using-incident-part-1/

P.S.: не читал, не могу прокомментировать. Но, думаю, что у функциональщиков она вызовет интерес.

[UPDATE]: тут ребята-функциональщики еще обращали внимание на https://github.com/commanded/commanded

#DDD #FunctionalProgramming
Проанализируем популярную на этой неделе картинку.

1. С ходу бросается в глаза противоречие между "авторитарный Product Owner" и "каждый принимает участие в принятии решений". На деле в Agile экономика разработки критически зависит от достижения баланса бизнес и технических интересов https://news.1rj.ru/str/emacsway_log/124

2. Не совсем понятно, что именно автор противопоставляет Agile. Вероятней всего - BDUF.

Во времена СССР потребителям был хорошо известен термин "дефицит", являющийся следствием недостаточной адаптивности плановой экономики.

В то время как капиталистические рыночные экономики хорошо знакомы с таким кризисным явлением, как "перепроизводство", - которое является следствием недостаточности заблаговременного планирования и координирования.

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

#Agile
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Проанализируем популярную на этой неделе картинку. 1. С ходу бросается в глаза противоречие между "авторитарный Product Owner" и "каждый принимает участие в принятии решений". На деле в Agile экономика разработки критически зависит от достижения баланса бизнес…
3. Является ли Agile идеологией и религией?

На самом деле, трудно сделать экономику исключительно плановой, как и трудно достигнуть в чистом виде Top-Down или Bottom-Up проектирование. Обычно имеет место некий баланс с преобладанием одного или другого аспекта. И при Сталине была кооперация, и был даже период НЭП.

Методики разработки тоже имеют разное соотношение заблаговременного проектирования (прогнозирования) и адаптации.

В BDUF доля заблаговременного проектирования составляет 100%.

В RUP (спиральная методика) уже присутствует адаптация, но доля заблаговременного проектирования все еще велика.

В Agile (итеративная методика) доля заблаговременного проектирования минимальна.

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

Т.е. в каждом конкретном проекте выбирается сбалансированное соотношение заблаговременного проектирования и адаптации в пределах их экономической целесообразности. Len Bass, Grady Booch и Craig Larman хорошо раскрывают эту тему.

Интересно то, что разработчики пытались вести разработку итеративно еще с 1930 года, и целесообразность итеративной разработки хорошо описывал еще F. Brooks в своем "Мифическом человеко-месяце".

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

#Agile
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
4. "Маленькие команды продуктивней больших" - это, на самом деле, Закон Брукса, и Agile тогда еще не было. #Agile
5. "Работа разделена на спринты" - действительно ли работа (т.е. реализация), а не решения?

Итерация - это математический термин, which means applying function to itself. Каждая итерация на вход принимает результат работы предыдущей итерации. Это позволяет принимать решения на основе практического фидбэка предыдущих итераций с целью обработки неопределенности в тех случаях, когда осуществить прогноз трудно или дорого (дороже, чем реализовать итерацию).

Таким образом, итерация необходима для принятия решений в условиях недостаточной информированности, а не для разделения работ по реализации.

#Agile