dbs   365

« earlier    

The Law of Leaky Abstractions – Joel on Software
[TCP/IP example]

All non-trivial abstractions, to some degree, are leaky.


- Something as simple as iterating over a large two-dimensional array can have radically different performance if you do it horizontally rather than vertically, depending on the “grain of the wood” — one direction may result in vastly more page faults than the other direction, and page faults are slow. Even assembly programmers are supposed to be allowed to pretend that they have a big flat address space, but virtual memory means it’s really just an abstraction, which leaks when there’s a page fault and certain memory fetches take way more nanoseconds than other memory fetches.

- The SQL language is meant to abstract away the procedural steps that are needed to query a database, instead allowing you to define merely what you want and let the database figure out the procedural steps to query it. But in some cases, certain SQL queries are thousands of times slower than other logically equivalent queries. A famous example of this is that some SQL servers are dramatically faster if you specify “where a=b and b=c and a=c” than if you only specify “where a=b and b=c” even though the result set is the same. You’re not supposed to have to care about the procedure, only the specification. But sometimes the abstraction leaks and causes horrible performance and you have to break out the query plan analyzer and study what it did wrong, and figure out how to make your query run faster.


- C++ string classes are supposed to let you pretend that strings are first-class data. They try to abstract away the fact that strings are hard and let you act as if they were as easy as integers. Almost all C++ string classes overload the + operator so you can write s + “bar” to concatenate. But you know what? No matter how hard they try, there is no C++ string class on Earth that will let you type “foo” + “bar”, because string literals in C++ are always char*’s, never strings. The abstraction has sprung a leak that the language doesn’t let you plug. (Amusingly, the history of the evolution of C++ over time can be described as a history of trying to plug the leaks in the string abstraction. Why they couldn’t just add a native string class to the language itself eludes me at the moment.)

- And you can’t drive as fast when it’s raining, even though your car has windshield wipers and headlights and a roof and a heater, all of which protect you from caring about the fact that it’s raining (they abstract away the weather), but lo, you have to worry about hydroplaning (or aquaplaning in England) and sometimes the rain is so strong you can’t see very far ahead so you go slower in the rain, because the weather can never be completely abstracted away, because of the law of leaky abstractions.

One reason the law of leaky abstractions is problematic is that it means that abstractions do not really simplify our lives as much as they were meant to. When I’m training someone to be a C++ programmer, it would be nice if I never had to teach them about char*’s and pointer arithmetic. It would be nice if I could go straight to STL strings. But one day they’ll write the code “foo” + “bar”, and truly bizarre things will happen, and then I’ll have to stop and teach them all about char*’s anyway.


The law of leaky abstractions means that whenever somebody comes up with a wizzy new code-generation tool that is supposed to make us all ever-so-efficient, you hear a lot of people saying “learn how to do it manually first, then use the wizzy tool to save time.” Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting. So the abstractions save us time working, but they don’t save us time learning.
techtariat  org:com  working-stiff  essay  programming  cs  software  abstraction  worrydream  thinking  intricacy  degrees-of-freedom  networking  protocol  examples  traces  no-go  volo-avolo  tradeoffs  c(pp)  pls  strings  dbs  transportation  driving  analogy  aphorism  learning  paradox  systems  elegance  nitty-gritty  concrete  cracker-prog 
14 days ago by nhaliday
DBS Bank goes big on open source
“If we want to be truly innovative, we have to do experiments, of which some work and some don’t,” he said. “We have to accept failure and pivot fast – that has very much become a part of our culture of experimentation that enables us to be agile.”


“Our business and technology teams responsible for developing digital products that sit on each platform have joint KPIs [key performance indicators] and budgets that allow them to experiment and iterate,” Gledhill said. “We also need to learn and re-learn as no one knows everything about the latest technologies.”
DBS  pivotalcustomers  banking  agile  quotes  book4 
23 days ago by cote
Fossil: Home
VCS w/ builtin issue tracking and wiki used by SQLite
tools  devtools  software  vcs  wiki  debugging  integration-extension  oss  dbs 
7 weeks ago by nhaliday
Do you use source control for your database items? - Stack Overflow
Top 2 answers contradict each other but both agree that you should at least version the schema and other scripts.

My impression is that the guy linked in the accepted answer is arguing for a minority practice.
q-n-a  stackex  programming  engineering  dbs  vcs  gotchas  hmm  idk  init  nitty-gritty  debate  contrarianism  best-practices  rhetoric  links  advice  system-design 
8 weeks ago by nhaliday
its-not-software - steveyegge2
You don't work in the software industry.


So what's the software industry, and how do we differ from it?

Well, the software industry is what you learn about in school, and it's what you probably did at your previous company. The software industry produces software that runs on customers' machines — that is, software intended to run on a machine over which you have no control.

So it includes pretty much everything that Microsoft does: Windows and every application you download for it, including your browser.

It also includes everything that runs in the browser, including Flash applications, Java applets, and plug-ins like Adobe's Acrobat Reader. Their deployment model is a little different from the "classic" deployment models, but it's still software that you package up and release to some unknown client box.



Our industry is so different from the software industry, and it's so important to draw a clear distinction, that it needs a new name. I'll call it Servware for now, lacking anything better. Hardware, firmware, software, servware. It fits well enough.

Servware is stuff that lives on your own servers. I call it "stuff" advisedly, since it's more than just software; it includes configuration, monitoring systems, data, documentation, and everything else you've got there, all acting in concert to produce some observable user experience on the other side of a network connection.
techtariat  sv  tech  rhetoric  essay  software  saas  devops  engineering  programming  contrarianism  list  top-n  best-practices  applicability-prereqs  desktop  flux-stasis  homo-hetero  trends  games  thinking  checklists  dbs  models  communication  tutorial  wiki  integration-extension  frameworks  api  whole-partial-many  metrics  retrofit  c(pp)  pls  code-dive  planning  working-stiff  composition-decomposition  libraries  conceptual-vocab  amazon  system-design  cracker-prog 
9 weeks ago by nhaliday

« earlier    

related tags

&  ?  12  17ghz  2017-09-09  2017-09-11  24ghz  3  5  6  a  aaaaa_voor_hsk  abstraction  activerecord  advanced  advice  agile  ai  algorithms  amazon  analogy  analysis  anime  aphorism  api  app  apple  applicability-prereqs  appropriate  asleep  aston  at&t  audiobooks  backup  balance  ball  bank  banking  barthold  bbcdu  best-practices  bewell  bible  blog  blogs  blowhards  book4  bookmarksbar  books  brain  breathing  breatning  build-packaging  business  but  c(pp)  caching  caltech  car  care  carmack  cars  cases  challengers16  cheatsheet  checking  checklists  citusdata  classroom  clinicaltrial  cloud  code-dive  collaboration  commentary  common-case  communication  comparison  composition-decomposition  computer-memory  computer-vision  concept  conceptual-vocab  concrete  concurrency  contrarianism  cornell  correctness  cost-benefit  course  cracker-prog  criminal-record-check  critique  crypto  cs  cuttings  dan-luu  data-science  data-structures  data  database  databases  db  debate  debugging  deep-learning  degrees-of-freedom  desktop  destruction  devops  devtools  digital  digitaltransformation  directv  dish  distributed  dj  dmm  documentation  dotnet  dragon  drawing  driving  ecosystem  edisontechcenter  editors  education  educational  electric  electricity  electroceuticals  elegance  embedded  employment  engineering  epilepsy  episode  essay  evil  examples  exocortex  experiment  explained  explanation  exposition  facebook  feelies  fiercewireless  flux-stasis  foieg  formal-methods  frameworks  free  frontier  fus  games  gems  geospatial  gfci  git  glassfish  go  god  gods  golang  google  gotchas  graphics  graphs  greece  ground-up  guide  hardware  health  hmm  hn  homepage  homo-hetero  housemartins  how-to  howto  hsk  huge-data-the-biggest  hypothalamus  ibm  idk  ifttt  imported9/14/09  in-memory  in  india  infrastructure  init  inmemory  inspire  integration-extension  interface  interference  intricacy  ios  java  javascript  jvm  k/v  kent  komal  lab  learning  lecture-notes  lectures  lesion  leveldb  libraries  library  life-saving  lightning  linear-models  linked  links  lionel  lisp  list  lists  literature  luxe  machine-learning  mail  mailmerge  management  mariadb  martin  matteagles  measure  media  medtech  memory-management  memory  mentor  metrics  migraine  minimalism  mobile  model-class  models  mp3blog  multi  music  mvcc  mvdds  mysql  needsediting  neeraj  neha  networking  neuroscience  nibble  nitty-gritty  no-go  node  nosql  nostalgia  not  notetaking  numerics  obesity  objektbuch  ocaml-sml  of  omni  onlineresources  onlinetools  openoffice  optimization  or  org:com  org:edu  org:junk  organization  os  oss  osx  pain  painting  pairing  paradox  parkinson  parkinsons  pd  people  performance  phase  photography  pilot  pivotal  pivotalcustomers  planning  plimsouls  pls  poetry  police  postgres  postgresql  power  pragmatic  prediction  prioritizing  priors-posteriors  productivity  prof  programming  project  proofpoints  protector  protocol  q-n-a  quotes  rails  rcd  reading  recommendations  reference  reflection  refugees  regularizer  replication  rest  retention  retrofit  review  rhetoric  riak  rpa  rsc  ruby  rust  saas  saiyan  satellite  scaling-tech  sci-comp  science  service  services  shipping  simple  singapore  slides  social  software  sonu  speed  sql  sqlite  stackex  stanford  startup  startups  stats  stream  strings  summer-2014  super  sv  system-design  systems  tech  techtariat  terminal  thinking  three  tips  tools  top-n  traces  track-record  tradeoffs  transportation  trees  trends  tutorial  ubiquity  ucb  uncertainty  unit  valet  vcs  video  volante...  volo-avolo  volvo  war  web  webapp  webdev  white  whole-partial-many  why  wiki  wordpress  working-stiff  workshops  worrydream  worse-is-better/the-right-thing  yak-shaving  yolatengo  zarama 

Copy this bookmark: