software-design   1009

« earlier    

Objects as Contracts for Behaviour
I’d love to see a programming language that puts method calls before the object, but leaves the method arguments at the end 3: pay.invoice(anAmount) and reschedule.appointment(aDate).
oop  software-design 
14 days ago by dhartunian
Limp Versus Die
To correct the analogy: if a bone breaks in an animal, the animal can limp away, but not because a single system is fault tolerant. That animal lost its bone, that system. It doesn't limp away on the broken bone; it uses its other 3 legs to limp away. It abandons the broken system and relies on backups. The animal has a large of redundancy of systems to accomplish this. It's an organic system, horribly inefficient, but very resilient. Most computer systems are not organic with many interrelated backup systems. They are generally made of a very small set of horribly brittle systems with little to no redundancy whatsoever. Just like an animal each individual system is brittle, but unlike an animal there are very few to no backup systems.
If you want to take ques from nature, for a mission critical system bring along 3 computers, each with their own hardware and independently written algorithm, and bring along a voting-holding machine which takes acts on the most popular vote and reboots the machine which makes an unpopular vote.
A resilient system in the real world is not a system made resilient all the way through. A resilient system is a collection of brittle systems with many backups. It's not to say you can't make a single system resilient the whole way through; it's just much more expensive to do that, both in nature and in programing. It's simpler to abandon a broken system and rely on backups until the "main" system can be fixed. To try and make a system resilient all the way through requires a exorbitant among of error checking code, most of which is nigh impossible to test, thereby actually increasing bugs and brittleness.
19 days ago by swlaschin
See No Evil
"Modular systems manage complexity by 'black-boxing' information; that is, they separate code or information into discrete units. A programmer need only know about the module with which she is working, because managing the complexity of the entire system would be too much to ask of any single individual. Modularity is the method we’ve devised to manage complexity at a time when we’re drowning in information. How do you manage the complexity of a system that procures goods from a huge variety of locations? You make it modular: when you black-box each component, you don’t need to know anything about it except that it meets your specifications. Information about provenance, labor conditions, and environmental impact is unwieldy when the goal of your system is simply to procure and assemble goods quickly. 'You could imagine a different way of doing things, so that you do know all of that,' said Russell, 'so that your gaze is more immersive and continuous. But what that does is inhibit scale.' And scale, of course, is key to a globalized economy."
a:Miriam-Posner  p:Logic  d:2018  w:3500  logisitics  international-trade  manufacturing  infrastructure  software-design  from instapaper
5 weeks ago by bankbryan

« earlier    

related tags

****  ***  2018-08-06  2018  a:dan-luu★★  a:jason-fried  a:miriam-posner  a:tef  a:thomas-edward-figg  abstract-syntax-trees  abstraction-layer  abstraction  abstractions  advice  agile  algebraic-data-types  analysis  api-design  arch  architecture  article  asynchronous-programming  automatic-verification  best-practices  bestpractices  blog  book-review  books  c++  career  circuit-breaker  clean-code  clojure  code-design  code  compilers  compositionality  computer-science  computing  configuration  consulting  context  course-materials  craft  cross-platform  culture  d:2017.12.21  d:2017.12  d:2018.05.14  d:2018.08.05  d:2018  data-analysis  data-oriented-design  database  ddd  debugging  delegation  dependency-injection  design-patterns  development  domain  dry  ecmascript  education-methods  education  elixir  elixor  engineering  entity–component–system  erlang  europe  facade  free-software  front-end-architecture  front-end  functional-programming  functionalprogramming  game-programming  gamedev  golang  gold-learning-star  hal  hardware  haskell  higher-order-components  indirection  infrastructure  instructional  interfaces  international-trade  java  javascript  kevin-lynagh  lecture-notes  legacy-code  logisitics  machine-learning  manufacturing  maps  microservices  minimalism  modularity  mvc  naming  netflix  observability  omni-mate  online-learning  oop  optimization  options  os  p:dan-luu★★  p:logic  p:programming-is-terrible  p:signal-v.-noise  patterns  personal-archive  phoenix  process  product-design  productivity  program-configuration  programming-is-terrible  programming-language-design  programming  queues  r-markdown  r  rails  reactjs  recursion  refactor  refactoring  reference  reliability  reviews  roguelike-development  ruby  rust  scheme  security  simulations  skill  software-architecture  software-development  software-engineering  software-management  software-testing  software  state-machines  state-management  static-typing  stream-processing  streaming-video  strong-types  structure  style  sweng  synthetic-programming  system-design  tdd  thought-provoking  time  tips  tla+  to:read  tools  travel  types  unit-testing  unix  video  videos-to-watch  w:1000  w:2500  w:3000  w:3500  w:5000  web-app  web-design  wham  work  yihui.xie 

Copy this bookmark: