The Generics Proposal is Now Really, Truly Accepted — Last week it was a ‘likely accept’ but now you can breathe easy.. all they have to do is the hard work of finishing the implementation(!) What can we move on to demanding of Go next? 😁
- Russ Cox
https://github.com/golang/go/issues/43651#issuecomment-776944155
- Russ Cox
https://github.com/golang/go/issues/43651#issuecomment-776944155
GitHub
spec: add generic programming using type parameters · Issue #43651 · golang/go
We propose adding support for type parameters to Go. This will change the Go language to support a form of generic programming. A detailed proposal document has been published, with input from many...
Обширный список словесных нападок, разбитый на категории и сопровождаемый примерами http://www.vandruff.com/art_converse.html
Как говорится, предупрежден - значит вооружен.
#Management #Career
Как говорится, предупрежден - значит вооружен.
#Management #Career
Vandruff
Conversational Terrorism: How NOT to Talk!
An expose of conversational terrorism cheap shot tactics to notice and avoid. HOW NOT TO TALK! Read 'em and laugh - or weep if you must.
"When to use the microservice architecture: part 5 - the monolithic architecture and rapid, frequent, reliable and sustainable software delivery" by Chris Richardson
http://chrisrichardson.net/post/microservices/2021/02/14/why-microservices-part-5-monolith.html
#Microservices
http://chrisrichardson.net/post/microservices/2021/02/14/why-microservices-part-5-monolith.html
#Microservices
Хочу обратить внимание на одну, на мой взгляд, недооцененную сообществом книгу по алгоритмам.
“Introduction to the Design and Analysis of Algorithms” 3d edition by A.Levitin
Принципиальной иной взгляд на классификацию алгортимов, хотя автор утверждает, что этот взгляд уже имел место и до него, просто не очень распространен.
Есть качественный перевод на Русский.
Наверное, это самая легкая книга по алгоритмам из всех, что я встречал (по крайней мере, среди иностранных). Сбалансированное присутствие математики. Читается на одном дыхании. Решил глянуть о чем она, и не заметил, как за день буквально проглотил 75 страниц. Отличное учебное пособие для новичков.
#Algorithms
“Introduction to the Design and Analysis of Algorithms” 3d edition by A.Levitin
Принципиальной иной взгляд на классификацию алгортимов, хотя автор утверждает, что этот взгляд уже имел место и до него, просто не очень распространен.
Есть качественный перевод на Русский.
Наверное, это самая легкая книга по алгоритмам из всех, что я встречал (по крайней мере, среди иностранных). Сбалансированное присутствие математики. Читается на одном дыхании. Решил глянуть о чем она, и не заметил, как за день буквально проглотил 75 страниц. Отличное учебное пособие для новичков.
#Algorithms
"Domain Driven Design in Golang - Tactical Design" by Damiano Petrungaro
https://www.damianopetrungaro.com/posts/ddd-using-golang-tactical-design/
"Domain Driven Design in Golang - Strategic Design" by Damiano Petrungaro
https://www.damianopetrungaro.com/posts/ddd-using-golang-strategic-design/
Не читал, но тенденцию DDD в Golang поддерживаю.
#DDD #Golang
https://www.damianopetrungaro.com/posts/ddd-using-golang-tactical-design/
"Domain Driven Design in Golang - Strategic Design" by Damiano Petrungaro
https://www.damianopetrungaro.com/posts/ddd-using-golang-strategic-design/
Не читал, но тенденцию DDD в Golang поддерживаю.
#DDD #Golang
Damianopetrungaro
Domain Driven Design in Golang - Tactical Design
Introduction In the past few weeks, I received a lot of private and public questions about the first article of the Golang and Domain-Driven Design series I wrote.
Most of the questions I received privately were about how to write an entire Golang project…
Most of the questions I received privately were about how to write an entire Golang project…
A Golang port of Greg Young's SimpleCQRS
https://github.com/andrewdodd/m-r
Парень портировал демонстрационное CQRS-приложение Грега Янга на Golang.
#DDD #Golang
https://github.com/andrewdodd/m-r
Парень портировал демонстрационное CQRS-приложение Грега Янга на Golang.
#DDD #Golang
GitHub
GitHub - andrewdodd/m-r: A Golang port of Greg Young's SimpleCQRS
A Golang port of Greg Young's SimpleCQRS. Contribute to andrewdodd/m-r development by creating an account on GitHub.
Один из наиболее частых вопросов - есть ли жизнь без Outbox pattern?
Да, есть, и Outbox нужен далеко не всегда.
В руководстве Microsoft https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/subscribe-events#designing-atomicity-and-resiliency-when-publishing-to-the-event-bus
и в каталоге Chris Richardson
https://microservices.io/patterns/data/transactional-outbox.html
в качестве альтернативы Outbox приводится Event Sourcing, иногда реализуемый в виде Front-Door Queue
https://github.com/obsidiandynamics/goharvest/wiki/Comparison-of-messaging-patterns#front-door-queue . При этом, становится важной поддержка идемпотентности.
В EIP ("Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions" by Gregor Hohpe, Bobby Woolf) есть весьма познавательная, и, к сожалению, малоцитируемая глава "Transactional Client", которая рассматривает вопрос "Transactional Consumer" vs "Transactional Sender".
📝 "Both a sender and a receiver can be transactional. With a sender, the message isn’t “really” added to the channel until the sender commits the transaction. With a receiver, the message isn’t “really” removed from the channel until the receiver commits the transaction. A sender that uses explicit transactions can be used with a receiver that uses implicit transactions, and vise versa. A single channel might have a combination of implicitly and explicitly transactional senders; it could also have a combination of receivers.
With a transactional receiver, an application can receive a message without actually removing the message from the queue. At this point, if the application crashed, when it recovered, the message would still be on the queue; the message would not be lost. Having received the message, the application can then process it. Once the application is finished with the message and is certain it wants to consume it, the application commits the transaction, which (if successful) removes the message from the channel. At this point, if the application crashed, when it recovered, the message would no longer be on the channel, so the application had better truly be finished with the message.
How does controlling a messaging system’s transactions externally help an application coordinate several tasks? Here’s what the application would do in the scenarios described above:"
- "Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions" by Gregor Hohpe, Bobby Woolf
Этот же вопрос, но немного с другой терминологией, "Transactional Client" vs "Transactional Actor", рассматривается в RMPwtAM ("Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka" by Vaughn Vernon).
Те, кто пишут на Golang, могут использовать коробочные решения Outbox:
- https://github.com/ThreeDotsLabs/watermill/tree/master/_examples/real-world-examples/transactional-events
- https://github.com/obsidiandynamics/goharvest
- https://github.com/wework/grabbit (поддерживает Saga)
- https://github.com/omaskery/outboxen
- https://github.com/omaskery/outboxen-gorm
- https://github.com/QuangTung97/eventx
- https://github.com/nilorg/outbox
- https://github.com/topics/transactional-outbox?l=go
- https://github.com/topics/outbox?l=go
- https://github.com/topics/outbox-pattern?l=go
- https://github.com/topics/transactional-outbox-pattern?l=go
Watermill интересен тем, что данные в таблицах неизменяемы, т.е. записи ложатся компактно и постранично на диск, и могут быть применены решения для time-series data (timescaledb, pg_partman/pg_pathman...).
#DistributedSystems #EIP #EDA #DDD #Microservices #Golang #SoftwareArchitecture #SoftwareDesign
Да, есть, и Outbox нужен далеко не всегда.
В руководстве Microsoft https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/subscribe-events#designing-atomicity-and-resiliency-when-publishing-to-the-event-bus
и в каталоге Chris Richardson
https://microservices.io/patterns/data/transactional-outbox.html
в качестве альтернативы Outbox приводится Event Sourcing, иногда реализуемый в виде Front-Door Queue
https://github.com/obsidiandynamics/goharvest/wiki/Comparison-of-messaging-patterns#front-door-queue . При этом, становится важной поддержка идемпотентности.
В EIP ("Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions" by Gregor Hohpe, Bobby Woolf) есть весьма познавательная, и, к сожалению, малоцитируемая глава "Transactional Client", которая рассматривает вопрос "Transactional Consumer" vs "Transactional Sender".
📝 "Both a sender and a receiver can be transactional. With a sender, the message isn’t “really” added to the channel until the sender commits the transaction. With a receiver, the message isn’t “really” removed from the channel until the receiver commits the transaction. A sender that uses explicit transactions can be used with a receiver that uses implicit transactions, and vise versa. A single channel might have a combination of implicitly and explicitly transactional senders; it could also have a combination of receivers.
With a transactional receiver, an application can receive a message without actually removing the message from the queue. At this point, if the application crashed, when it recovered, the message would still be on the queue; the message would not be lost. Having received the message, the application can then process it. Once the application is finished with the message and is certain it wants to consume it, the application commits the transaction, which (if successful) removes the message from the channel. At this point, if the application crashed, when it recovered, the message would no longer be on the channel, so the application had better truly be finished with the message.
How does controlling a messaging system’s transactions externally help an application coordinate several tasks? Here’s what the application would do in the scenarios described above:"
- "Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions" by Gregor Hohpe, Bobby Woolf
Этот же вопрос, но немного с другой терминологией, "Transactional Client" vs "Transactional Actor", рассматривается в RMPwtAM ("Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka" by Vaughn Vernon).
Те, кто пишут на Golang, могут использовать коробочные решения Outbox:
- https://github.com/ThreeDotsLabs/watermill/tree/master/_examples/real-world-examples/transactional-events
- https://github.com/obsidiandynamics/goharvest
- https://github.com/wework/grabbit (поддерживает Saga)
- https://github.com/omaskery/outboxen
- https://github.com/omaskery/outboxen-gorm
- https://github.com/QuangTung97/eventx
- https://github.com/nilorg/outbox
- https://github.com/topics/transactional-outbox?l=go
- https://github.com/topics/outbox?l=go
- https://github.com/topics/outbox-pattern?l=go
- https://github.com/topics/transactional-outbox-pattern?l=go
Watermill интересен тем, что данные в таблицах неизменяемы, т.е. записи ложатся компактно и постранично на диск, и могут быть применены решения для time-series data (timescaledb, pg_partman/pg_pathman...).
#DistributedSystems #EIP #EDA #DDD #Microservices #Golang #SoftwareArchitecture #SoftwareDesign
Docs
Subscribing to events
.NET Microservices Architecture for Containerized .NET Applications | Understand the details of publishing and subnoscription to integration events.
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Один из наиболее частых вопросов - есть ли жизнь без Outbox pattern? Да, есть, и Outbox нужен далеко не всегда. В руководстве Microsoft https://docs.microsoft.com/en-us/dotnet/architecture/microservices/multi-container-microservice-net-applications/subscribe…
Ну и, чтобы уже закрыть тему Outbox, то стоит упомянуть несколько полезных ссылок по Transaction log tailing (Transaction log mining):
- https://www.postgresql.org/docs/11/sql-notify.html
- https://www.postgresql.org/docs/11/sql-createpublication.html
- https://www.postgresql.org/docs/11/protocol-replication.html
- https://tapoueh.org/blog/2018/07/postgresql-event-based-processing/
- https://github.com/eulerto/wal2json
- https://github.com/kingluo/pgcat
- https://github.com/hasura/pgdeltastream
- https://github.com/pramsey/pgsql-http
Игорь Кузнецов ( @swenotes / @kuznetsovin ) недавно писал статью на эту тему:
- https://www.swe-notes.ru/post/pg-event-sourcing/
Для Golang-разработчиков могут оказаться полезными следующие ссылки:
- https://pkg.go.dev/github.com/lib/pq#hdr-Notifications
- https://github.com/blind-oracle/psql-streamer
- https://github.com/jackc/pglogrepl
- https://github.com/dingchao/prometheus/blob/43953b105bf9dddd6ec82878f509fb3628e1961b/storage/remote/wal_watcher.go
- https://github.com/redesignhealth/postgres-wal-tailer/blob/2562429aa1feb692987bbb7775d0555ebbea43b2/src/main/java/jon/pgrepl/WalTailer.java#L43
#DistributedSystems #EIP #EDA #DDD #Microservices #Golang #SoftwareArchitecture #SoftwareDesign
- https://www.postgresql.org/docs/11/sql-notify.html
- https://www.postgresql.org/docs/11/sql-createpublication.html
- https://www.postgresql.org/docs/11/protocol-replication.html
- https://tapoueh.org/blog/2018/07/postgresql-event-based-processing/
- https://github.com/eulerto/wal2json
- https://github.com/kingluo/pgcat
- https://github.com/hasura/pgdeltastream
- https://github.com/pramsey/pgsql-http
Игорь Кузнецов ( @swenotes / @kuznetsovin ) недавно писал статью на эту тему:
- https://www.swe-notes.ru/post/pg-event-sourcing/
Для Golang-разработчиков могут оказаться полезными следующие ссылки:
- https://pkg.go.dev/github.com/lib/pq#hdr-Notifications
- https://github.com/blind-oracle/psql-streamer
- https://github.com/jackc/pglogrepl
- https://github.com/dingchao/prometheus/blob/43953b105bf9dddd6ec82878f509fb3628e1961b/storage/remote/wal_watcher.go
- https://github.com/redesignhealth/postgres-wal-tailer/blob/2562429aa1feb692987bbb7775d0555ebbea43b2/src/main/java/jon/pgrepl/WalTailer.java#L43
#DistributedSystems #EIP #EDA #DDD #Microservices #Golang #SoftwareArchitecture #SoftwareDesign
PostgreSQL Documentation
NOTIFY
NOTIFY NOTIFY — generate a notification Synopsis NOTIFY channel [ , payload ] Denoscription The NOTIFY command sends a notification …
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Ответ Jimmy Bogard по поводу того, может ли CQRS-Команда возвращать результат: 📝 "It might seem rather strange that commands always have a result, but it’s much, much easier to deal with side effects of commands through return parameters than through some…
Еще одна превосходная статья на тему Side-effect of CQRS-query (thanks to @vkhorikov ):
"Applications and their side effects" by Mark Seemann
https://blog.ploeh.dk/2015/09/23/applications-and-their-side-effects/
#DDD #Microservices #SoftwareDesign #SoftwareArchitecture #FunctionalProgramming
"Applications and their side effects" by Mark Seemann
https://blog.ploeh.dk/2015/09/23/applications-and-their-side-effects/
#DDD #Microservices #SoftwareDesign #SoftwareArchitecture #FunctionalProgramming
blog.ploeh.dk
Applications and their side effects
All applications have side-effects, but you can isolate those side-effects at the boundaries.
С поддержкой Generics в Golang открываются новые возможности в использовании приемов функционального программирования.
См. главу "Monadic Error Handling":
https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/
Это вынуждает по новому взглянуть на широко известный среди функциональщиков Railway Oriented Programming:
- https://fsharpforfunandprofit.com/rop/
- https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/
Перевод на русский статьи "Railway Oriented Programming":
- https://habr.com/ru/post/339606/
Еще одна ссылка, на эту тему:
- https://medium.com/@naveenkumarmuguda/railway-oriented-programming-a-powerful-functional-programming-pattern-ab454e467f31
А здесь, на слайдах, показана трансформация UseCase of Robert Martin в Railway Oriented Programming:
- https://github.com/swlaschin/RailwayOrientedProgramming/blob/master/Railway_Oriented_Programming_Slideshare.pdf
- https://github.com/swlaschin/RailwayOrientedProgramming/blob/master/Railway_Oriented_Programming.pptx
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html#use-cases
Кстати, это является и ответом на вопрос, есть ли жизнь без синхронных Domain Events:
📝 "In an object-oriented design, it is common to have domain events raised internally within a bounded context. In that approach, a workflow object raises an OrderPlaced event, and then a handler listens for that and sends the order acknowledgement, and another handler generates a BillableOrderPlaced event, and so on.
<...>
In a functional design, we prefer not to use this approach, because it creates hidden dependencies. Instead, if we need a “listener” for an event, we just append it to the end of workflow...
<...>
This approach is more explicit – there are no global event managers with mutable state – and therefore it is easier to understand and maintain."
- "Domain Modeling Made Functional. Tackle Software Complexity with Domain-Driven Design and F#" by Scott Wlaschin
https://fsharpforfunandprofit.com/books/
Кстати, на github.com по этой теме в топе ребята из @drypython :
- https://github.com/topics/railway-oriented-programming
Одна из библиотек, облегчающих использование Railway Oriented Programming в Python: https://github.com/proofit404/stories
#FunctionalProgramming #DDD #Golang
См. главу "Monadic Error Handling":
https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/
Это вынуждает по новому взглянуть на широко известный среди функциональщиков Railway Oriented Programming:
- https://fsharpforfunandprofit.com/rop/
- https://fsharpforfunandprofit.com/posts/against-railway-oriented-programming/
Перевод на русский статьи "Railway Oriented Programming":
- https://habr.com/ru/post/339606/
Еще одна ссылка, на эту тему:
- https://medium.com/@naveenkumarmuguda/railway-oriented-programming-a-powerful-functional-programming-pattern-ab454e467f31
А здесь, на слайдах, показана трансформация UseCase of Robert Martin в Railway Oriented Programming:
- https://github.com/swlaschin/RailwayOrientedProgramming/blob/master/Railway_Oriented_Programming_Slideshare.pdf
- https://github.com/swlaschin/RailwayOrientedProgramming/blob/master/Railway_Oriented_Programming.pptx
- https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html#use-cases
Кстати, это является и ответом на вопрос, есть ли жизнь без синхронных Domain Events:
📝 "In an object-oriented design, it is common to have domain events raised internally within a bounded context. In that approach, a workflow object raises an OrderPlaced event, and then a handler listens for that and sends the order acknowledgement, and another handler generates a BillableOrderPlaced event, and so on.
<...>
In a functional design, we prefer not to use this approach, because it creates hidden dependencies. Instead, if we need a “listener” for an event, we just append it to the end of workflow...
<...>
This approach is more explicit – there are no global event managers with mutable state – and therefore it is easier to understand and maintain."
- "Domain Modeling Made Functional. Tackle Software Complexity with Domain-Driven Design and F#" by Scott Wlaschin
https://fsharpforfunandprofit.com/books/
Кстати, на github.com по этой теме в топе ребята из @drypython :
- https://github.com/topics/railway-oriented-programming
Одна из библиотек, облегчающих использование Railway Oriented Programming в Python: https://github.com/proofit404/stories
#FunctionalProgramming #DDD #Golang
Adenoid Adventures
Monads for Go Programmers
Why? Monads are all about function composition and hiding the tedious part of it.
After 7 years of being a Go programmer, typing if err != nil can become quite tedious. Everytime I type if err != nil …
After 7 years of being a Go programmer, typing if err != nil can become quite tedious. Everytime I type if err != nil …
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
С поддержкой Generics в Golang открываются новые возможности в использовании приемов функционального программирования. См. главу "Monadic Error Handling": https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/ Это вынуждает по новому взглянуть…
Кстати, агрегаты вот этого DDD/Golang reference application https://github.com/AntonStoeckl/go-iddd выполнены в функциональной парадигме. Об этом автор пишет в сопроводительных статьях к приложению.
📝 "My Aggregate used to be implemented in OOP style with inline state in the past. My little project is event-sourced and I decided a while ago that I want to implement a functional core. Event-Sourcing is quite functional by nature, so I decided that my Aggregate will only consist of functions! My first functional version did not even have a state object. It simply projected all necessary properties into local variables. Not long ago I introduced a currentState object — which is unexposed — so only visible inside the Domain subpackage customer in which my Aggregate lives."
- "Implementing Domain-Driven Design and Hexagonal Architecture with Go (2). Part 2 — How I implement tactical DDD patterns — the Domain layer" by Anton Stöckl
https://medium.com/@TonyBologni/implementing-domain-driven-design-and-hexagonal-architecture-with-go-2-efd432505554
#DDD #Golang #FunctionalProgramming
📝 "My Aggregate used to be implemented in OOP style with inline state in the past. My little project is event-sourced and I decided a while ago that I want to implement a functional core. Event-Sourcing is quite functional by nature, so I decided that my Aggregate will only consist of functions! My first functional version did not even have a state object. It simply projected all necessary properties into local variables. Not long ago I introduced a currentState object — which is unexposed — so only visible inside the Domain subpackage customer in which my Aggregate lives."
- "Implementing Domain-Driven Design and Hexagonal Architecture with Go (2). Part 2 — How I implement tactical DDD patterns — the Domain layer" by Anton Stöckl
https://medium.com/@TonyBologni/implementing-domain-driven-design-and-hexagonal-architecture-with-go-2-efd432505554
#DDD #Golang #FunctionalProgramming
GitHub
GitHub - AntonStoeckl/go-iddd: showcase project for implementing DDD in Go
showcase project for implementing DDD in Go. Contribute to AntonStoeckl/go-iddd development by creating an account on GitHub.
Forwarded from Yuriy Yarosh
По поводу https://news.1rj.ru/str/emacsway_log/377 и функциональщины
Надо понимать что у golang2 пока непонятно как будут обстоять дела с контролируемым развёртыванием хвостовой рекурсии, и будут ли для этого дополнительные примитивы (@tailrec аннотация в случае с JVM языками).
С функциональных примитивов, более продвинутые вещи, типа IO монад и Eval, без этого реализовать не получится.
Eval нужен для стэкобезопасности любого куска кода который он оборачивает - все рекурсивные вызовы внутри не будут приводить к переполнению стэка, но должны тоже возвращать Eval.
IO нужен для ROP'a и весь код обёрнутый внутри автомагически будет работать по ROP'у без дополнительных плясок.
Потому Eval/IO довольно сложно реализованы что в Cats / Scalaz что в Arrow.kt.
Для Arrow пришлось отдельный плагин к компилятору писать (https://github.com/arrow-kt/arrow-meta), ну и для скалы тоже есть для better-monadic-for плагин (https://github.com/oleg-py/better-monadic-for).
Как это будет реализовано в голанге - непонятно, но про модульность плагинов к компилятору точно можно не мечтать.
Надо понимать что у golang2 пока непонятно как будут обстоять дела с контролируемым развёртыванием хвостовой рекурсии, и будут ли для этого дополнительные примитивы (@tailrec аннотация в случае с JVM языками).
С функциональных примитивов, более продвинутые вещи, типа IO монад и Eval, без этого реализовать не получится.
Eval нужен для стэкобезопасности любого куска кода который он оборачивает - все рекурсивные вызовы внутри не будут приводить к переполнению стэка, но должны тоже возвращать Eval.
IO нужен для ROP'a и весь код обёрнутый внутри автомагически будет работать по ROP'у без дополнительных плясок.
Потому Eval/IO довольно сложно реализованы что в Cats / Scalaz что в Arrow.kt.
Для Arrow пришлось отдельный плагин к компилятору писать (https://github.com/arrow-kt/arrow-meta), ну и для скалы тоже есть для better-monadic-for плагин (https://github.com/oleg-py/better-monadic-for).
Как это будет реализовано в голанге - непонятно, но про модульность плагинов к компилятору точно можно не мечтать.
Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
С поддержкой Generics в Golang открываются новые возможности в использовании приемов функционального программирования.
См. главу "Monadic Error Handling":
https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/
Это вынуждает по новому взглянуть…
См. главу "Monadic Error Handling":
https://awalterschulze.github.io/blog/post/monads-for-goprogrammers/
Это вынуждает по новому взглянуть…
Для тех, кто работает с Golang, - смотрел как-то я эту книгу: "Hands-On Software Architecture with Golang. Design and architect highly scalable and robust applications using Go." by Jyotiswarup Raiturkar
Copyright © 2018 Packt Publishing
Она прекрасна. Удивительное сочетание полноты информации и её краткости. Это скорее конспект, а не книга. Курс молодого бойца. Никакой воды - только все самое нужное. Вряд-ли есть другой способ получить такой колоссальный объем знаний из одной книги. Она, поистине, шедевральна в этом смысле.
Дано практически все, что нужно знать разработчику, на примере Golang. Виды согласованностей, в т.ч. Causal Consistency, Векторные Часы, CAP-теорема, способы достижения консенсуса, в т.ч. RAFT, Paxos, 2PC, основы ООП, композиция vs наследование (кстати, на примере зверушек - известный пример), Design Patterns, основы работы с БД, индексы, формы нормализации, виды транзакций (ACID, BACE), матрица уровней изоляции транзакций, брокеры сообщений, принципы масштабирования и многое другое.
Понятно, что все это впихнуть в одну книгу невозможно, поэтому она выполнена в виде конспекта, т.е. она дает обзор и приводит примеры.
Раз уж речь зашла про Packt Publishing, то еще было бы уместно упомянуть "Learning Functional Programming in Go. Change the way you approach your applications using functional programming in Go." by Lex Sheehan
Copyright © 2017 Packt Publishing
И "Hands-On High Performance with Go. Boost and optimize the performance of your Golang applications at scale with resilience" by Bob Strecansky
Copyright © 2020 Packt Publishing
#Golang #SoftwareDesign #SoftwareArchitecture #FunctionalProgramming
Copyright © 2018 Packt Publishing
Она прекрасна. Удивительное сочетание полноты информации и её краткости. Это скорее конспект, а не книга. Курс молодого бойца. Никакой воды - только все самое нужное. Вряд-ли есть другой способ получить такой колоссальный объем знаний из одной книги. Она, поистине, шедевральна в этом смысле.
Дано практически все, что нужно знать разработчику, на примере Golang. Виды согласованностей, в т.ч. Causal Consistency, Векторные Часы, CAP-теорема, способы достижения консенсуса, в т.ч. RAFT, Paxos, 2PC, основы ООП, композиция vs наследование (кстати, на примере зверушек - известный пример), Design Patterns, основы работы с БД, индексы, формы нормализации, виды транзакций (ACID, BACE), матрица уровней изоляции транзакций, брокеры сообщений, принципы масштабирования и многое другое.
Понятно, что все это впихнуть в одну книгу невозможно, поэтому она выполнена в виде конспекта, т.е. она дает обзор и приводит примеры.
Раз уж речь зашла про Packt Publishing, то еще было бы уместно упомянуть "Learning Functional Programming in Go. Change the way you approach your applications using functional programming in Go." by Lex Sheehan
Copyright © 2017 Packt Publishing
И "Hands-On High Performance with Go. Boost and optimize the performance of your Golang applications at scale with resilience" by Bob Strecansky
Copyright © 2020 Packt Publishing
#Golang #SoftwareDesign #SoftwareArchitecture #FunctionalProgramming
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Все перечисленные по ссылке книги доступны для скачивания: https://postgrespro.ru/education/books Достойное чтиво (особенно последняя). Дает комплексные знания в лаконичной форме. #Database #PostgreSQL
Тут у меня как-то было дело, что осталась незамеченной одна архи-полезная ссылочка, которую я, вероятно, в спешке неподобающе оформил. Исправляюсь.
PostgresPro представил три книги для трех разных уровней подготовленности читателей, от совершенно неосведомленного человека до разработчика баз данных. Достойное чтиво, которое дает комплексные знания в лаконичной форме. Все книги доступны для скачивания в свободном доступе.
- https://postgrespro.ru/education/books
1. "Postgres: первое знакомство"
- https://postgrespro.ru/education/books/introbook
2. "PostgreSQL. Основы языка SQL"
- https://postgrespro.ru/education/books/sqlprimer
3. "Основы технологий баз данных"
- https://postgrespro.ru/education/books/dbtech
В них есть все: согласованность, реляционная алгебра, формы нормализации, архитектура, структуры данных и алгоритмы, оптимизация, транзакции, надежность, безопасность, администрирование, масштабирование, и т.п.
Так же доступны учебные материалы курсов: слайды, видео, руководства. Скачать можно все материалы каждого курса одним архивом:
- https://postgrespro.ru/education/courses
Видеозаписи курсов:
- https://postgrespro.ru/education/where
Превосходная подборка статей с фундаментальной информацией простым языком о внутреннем устройстве PostgreSQL, от разработчиков PostgresPro:
- https://m.habr.com/ru/company/postgrespro/blog/442804/
- https://m.habr.com/ru/company/postgrespro/blog/458186/
- https://m.habr.com/ru/company/postgrespro/blog/459250/
- https://m.habr.com/ru/company/postgrespro/blog/460423/
- https://m.habr.com/ru/company/postgrespro/blog/461523/
Ну и пара превосходных книг от разработчика PostgreSQL, но уже не в свободном доступе:
- "Mastering PostgreSQL In Application Development" by Dimitri Fontaine
- "The Art of PostgreSQL" 2nd edition by Dimitri Fontaine - is the new noscript of "Mastering PostgreSQL in Application Development"
#Database #PostgreSQL
PostgresPro представил три книги для трех разных уровней подготовленности читателей, от совершенно неосведомленного человека до разработчика баз данных. Достойное чтиво, которое дает комплексные знания в лаконичной форме. Все книги доступны для скачивания в свободном доступе.
- https://postgrespro.ru/education/books
1. "Postgres: первое знакомство"
- https://postgrespro.ru/education/books/introbook
2. "PostgreSQL. Основы языка SQL"
- https://postgrespro.ru/education/books/sqlprimer
3. "Основы технологий баз данных"
- https://postgrespro.ru/education/books/dbtech
В них есть все: согласованность, реляционная алгебра, формы нормализации, архитектура, структуры данных и алгоритмы, оптимизация, транзакции, надежность, безопасность, администрирование, масштабирование, и т.п.
Так же доступны учебные материалы курсов: слайды, видео, руководства. Скачать можно все материалы каждого курса одним архивом:
- https://postgrespro.ru/education/courses
Видеозаписи курсов:
- https://postgrespro.ru/education/where
Превосходная подборка статей с фундаментальной информацией простым языком о внутреннем устройстве PostgreSQL, от разработчиков PostgresPro:
- https://m.habr.com/ru/company/postgrespro/blog/442804/
- https://m.habr.com/ru/company/postgrespro/blog/458186/
- https://m.habr.com/ru/company/postgrespro/blog/459250/
- https://m.habr.com/ru/company/postgrespro/blog/460423/
- https://m.habr.com/ru/company/postgrespro/blog/461523/
Ну и пара превосходных книг от разработчика PostgreSQL, но уже не в свободном доступе:
- "Mastering PostgreSQL In Application Development" by Dimitri Fontaine
- "The Art of PostgreSQL" 2nd edition by Dimitri Fontaine - is the new noscript of "Mastering PostgreSQL in Application Development"
#Database #PostgreSQL
postgrespro.ru
Книги
Postgres Professional - российская компания, разработчик систем управления базами данных
Хорошее руководство для тех, кому предстоит изменять структуру базы данных PostgreSQL с большими массивами данных без downtime:
"PostgreSQL at Scale: Database Schema Changes Without Downtime" by James Coleman
https://medium.com/braintree-product-technology/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680
#Database #PostgreSQL
"PostgreSQL at Scale: Database Schema Changes Without Downtime" by James Coleman
https://medium.com/braintree-product-technology/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680
#Database #PostgreSQL
Medium
PostgreSQL at Scale: Database Schema Changes Without Downtime
Braintree Payments uses PostgreSQL as its primary datastore. We rely heavily on the data safety and consistency guarantees a traditional…
Обзор книги "Fundamentals of Software Architecture: An Engineering Approach" 1st edition by Mark Richards, Neal Ford
https://apolomodov.medium.com/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-fundamentals-of-software-architecture-1754c0e78d48
От Alexander Polomodov - Director of digital ecosystem development department at Tinkoff.
#SoftwareArchitecture #Career
https://apolomodov.medium.com/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-fundamentals-of-software-architecture-1754c0e78d48
От Alexander Polomodov - Director of digital ecosystem development department at Tinkoff.
#SoftwareArchitecture #Career
Medium
Обзор “Fundamentals of Software Architecture”
Бывают книги, которые можно читать запоем, а бывают те, что требуют вдумчивого чтения. Книга “Fundamentals of Software Architecture” от…
Обзор книги "What Is Domain-Driven Design?" by Vladik Khononov ( @vladik_kh )
Книга:
https://www.oreilly.com/library/view/what-is-domain-driven/9781492057802/
Обзор:
https://apolomodov.medium.com/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-what-is-domain-driven-design-7128373196e8
От Alexander Polomodov - Director of digital ecosystem development department at Tinkoff.
Именно с этой книги я рекомендую начинать DDD. У Владика талант к способности выделять главное из общей массы информации, и доносить сложные вещи простым языком. Менее 100 страниц. Очень легкий Английский. Идеальная методичка, если нужно быстро погрузить разработчиков в основы DDD.
#SoftwareArchitecture #SoftwareDesign #DDD #Microservices
Книга:
https://www.oreilly.com/library/view/what-is-domain-driven/9781492057802/
Обзор:
https://apolomodov.medium.com/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-what-is-domain-driven-design-7128373196e8
От Alexander Polomodov - Director of digital ecosystem development department at Tinkoff.
Именно с этой книги я рекомендую начинать DDD. У Владика талант к способности выделять главное из общей массы информации, и доносить сложные вещи простым языком. Менее 100 страниц. Очень легкий Английский. Идеальная методичка, если нужно быстро погрузить разработчиков в основы DDD.
#SoftwareArchitecture #SoftwareDesign #DDD #Microservices
O’Reilly Online Learning
What Is Domain-Driven Design?
The majority of software projects are delivered late or over budget, or they fail to meet the client’s requirements. Attack the problem head-on and build better software with domain-driven design … - Selection from What Is Domain-Driven Design? [Book]
Коллеги обратили мое внимание на статью "Радикальный перфекционизм в коде"
https://habr.com/ru/post/543490
У меня появилось несколько мыслей, которыми можно поделиться. Будет несколько постов.
Стоит отметить, что хотя автор старался отделить моментами Code Style от Code Smell (и подчеркивал это в комментариях), но статья затрагивает оба аспекта, из этого и будем исходить.
#SoftwareDesign
https://habr.com/ru/post/543490
У меня появилось несколько мыслей, которыми можно поделиться. Будет несколько постов.
Стоит отметить, что хотя автор старался отделить моментами Code Style от Code Smell (и подчеркивал это в комментариях), но статья затрагивает оба аспекта, из этого и будем исходить.
#SoftwareDesign
Хабр
Радикальный перфекционизм в коде
Идея взята с постов telegram-канала Cross Join Представьте себе, что какой-то программист придет на работу в одних трусах. Или вообще голышом. Работа встала, все...
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Коллеги обратили мое внимание на статью "Радикальный перфекционизм в коде" https://habr.com/ru/post/543490 У меня появилось несколько мыслей, которыми можно поделиться. Будет несколько постов. Стоит отметить, что хотя автор старался отделить моментами Code…
> переименовывающим getJson в getJSON
Очень тонкий вопрос. Правило getJSON не универсально, и не будет работать для snake_case (get_j_s_o_n). Т.е. общее количество правил растет для каждого частного случая. А базовый критерий хороших правил - минимализм. Хороший пример - объем документация к языку Оберон стал в 3 раза меньше, чем к языку Паскаль. При этом автор обоих языков один и тот же. Т.е. эволюционирование заключается в поиске форм упрощения. Как не вспомнить тут не вспомнить Дейкстру:
📝 "Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better."
- Edsger W. Dijkstra, 1984 On the nature of Computing Science (EWD896)
Запись вида get_j_s_o_n() затрудняет восприятие. Если стремиться минимизировать подмножество правил, тогда getJson() или get_json(). Одно и то же правило и для CamelCase и для snake_case.
Но однообразие принятого стиля важней. Битву выигрывает строй, и при этом не важно, кто из бойцов лучше маршрует индивидуально. Главное, чтоб одинаково.
#SoftwareDesign
Очень тонкий вопрос. Правило getJSON не универсально, и не будет работать для snake_case (get_j_s_o_n). Т.е. общее количество правил растет для каждого частного случая. А базовый критерий хороших правил - минимализм. Хороший пример - объем документация к языку Оберон стал в 3 раза меньше, чем к языку Паскаль. При этом автор обоих языков один и тот же. Т.е. эволюционирование заключается в поиске форм упрощения. Как не вспомнить тут не вспомнить Дейкстру:
📝 "Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better."
- Edsger W. Dijkstra, 1984 On the nature of Computing Science (EWD896)
Запись вида get_j_s_o_n() затрудняет восприятие. Если стремиться минимизировать подмножество правил, тогда getJson() или get_json(). Одно и то же правило и для CamelCase и для snake_case.
Но однообразие принятого стиля важней. Битву выигрывает строй, и при этом не важно, кто из бойцов лучше маршрует индивидуально. Главное, чтоб одинаково.
#SoftwareDesign