Wednesday, June 24, 2009


"Software is ... onionlike, a thing of layers, each built painstakingly and precariously on the previous one, each counting on the one below not to move or change too much. Software builders like to talk about laying bricks; skeptics see a house of cards. Either way, there's a steady accumulation ogoing on. New layers pile on old.

"Programmers call these accretions 'layers of abstraction,' because each time a new one is added, something complex and specific is being translated into something simpler and more general. The word abstraction comes from the Latin for draw away; here's one computer science definition of the term: 'The process of combining multiple smaller operations into a single unit that can be referred to by name.' Abstraction begins in the nursery. It is what children learn when they realize that if they want an apple, they don't have to find one to point to but can simply say the word that refers to it. They also learn that abstraction depends on a comon language, on shared assumptions of what class of objects the word apple refers to.

" 'This is what programmers do,' wrote Eric Sink, a programmer who led the creation of the Web browser that became Microsoft's Internet Explorer. 'We build piles of abstractions. we design our own abstractions and then pile them up on top of layers we got from somebody else.' And every year the piles grow higher."

--Scott Rosenberg, Dreaming in Code

For example:
Web browser are a wonderful creation. They turn the mess of networks, servers, routers, clients, network protocols, html code, and access permissions that are the reality of the internet - and let users pretend that they are working through a magical window into another world.

This quote does an excellent job of explaining what I mean when I talk about abstractions - a term I apply to linguistics and psychology almost as much as computer science - as well as justifying my current direction in life.

No comments: