Another fun bit of housekeeping. I’d like to welcome Sam Bhagwat, Jordan Peacock, Kartik Agaram and Keith Adams, our resident bloggers for 2014.
I’ve known them all for a couple of years now (though I’ve only met Jordan online), and I can safely say that the sophistication of my understanding of our emerging digital civilization has been greatly enhanced by my ongoing conversations with these guys. If I’ve said anything smart in the last couple of years about the world being created by computing technologies, a lot of the credit goes to them.
This blog already has a computing subtext (the “refactoring” in the tagline is a reference to a computing concept), and my own work this year is going to be dominated by projects related to software and computing, so part of my reason for inviting these guys on board this year is a selfish one. I hope they can keep my own thinking at the bleeding edge. Nothing like immersion to get you thinking like a native in a new culture.
I suspect all of you will also enjoy learning from these guys. The more our world gets eaten by software, the more the world views of software professionals matter in shaping the future. On the flip side, non-software people have to keep evolving their appreciation of computing, or risk being left behind on the wrong side of history.
To kick things off, I asked the new residents to introduce themselves with a short riff on the idea of refactoring, as I did last year.
So let me yield the floor to them.
Note: residents contribute to ribbonfarm in their personal capacity, and their views do not reflect the views of their employers.
Sam is an economist/data scientist by training. He works at Boingo and previously worked at Blueseed. He blogs at Moore’s Hand and will be writing his posts here under the byline Data Gardens.
Refactoring, to me, means creative intellectual land-grabbing. In the late 20th and early 21st centuries, my native field of economics was cast as an “intellectual imperialist” as practitioners used statistical methods to make inroads into the social sciences (think Freakonomics). Today, computer science under the banner of “big data” is making inroads into traditional economics problems.
The generalization: domains of thought are settled enclaves managed by academic and professional communities. When technological and societal changes shift boundaries, some harden; others erode. The entrepreneurial watch for emerging land bridges and newly passable swamps, then march across with tools from domain X to attack problems in domain Y.
Jordan is an independent software guy from Minneapolis, and easily the most massively well-read person I know. He blogs at hwcd, and is extremely active on Google+. He will be writing here under the byline Marginally Acceptable.
The act of refactoring is a revisiting, an attempt at understanding the pathways of thought that led to a particular result, and experiments in improving upon it. This is a sort of temporally-displaced empathy, putting yourself in past-you’s shoes, or in the shoes of prior wayfarers. Choices that may appear perverse or horrifying from the outside may be found, on reflection, to be less unreasonable than first thought, as the technical limitations, skill limitations, or political constraints upon the original solution come to light. (The reverse may instead be true; choices you thought noble may turn out to have been thoroughly venal).
Kartik works at Google, and in his spare time, tries to figure out better ways to build software. He blogs at akkartik.name (his writings there are more technical than they will be here). He will be writing here under the byline Consensual Hells.
I’m a programmer, and the word ‘refactoring’ originated in programming. So I can’t help seeing this term more technically than most. In programming, refactoring a program relies on a collection of simulations of its operation in different situations. Making changes to a program requires verifying that the simulations we’ve pinned down on the dissection table continue to work as desired.
To the extent that programming has unfulfilled promise, I believe the cause is limitations in the kinds of situations we are able to pin down. Our institutions are similarly plagued by a tendency to forget the precise scenarios they were designed for, dooming them to either forget history and repeat mistakes (‘regressions’ in programmer-speak) or to continue cargo culting old solutions long after they’ve become obsolete.
I hope to show that the programmer’s view of refactoring can be valuable to society at large, helping to make our institutions more resilient to change and more robust to capture
Keith works at Facebook and was one of the principal architects behind the Hip Hop Virtual Machine (HHVM), one of the pieces of arcane magic that works behind the scenes at Facebook. You can follow him on Facebook. He will be writing here under the byline Totalizing Views.
I am a computer programmer at Facebook. My professional interests are centered on programming languages, AI, information retrieval, and the hardware/software interface.
This year, I’ll be writing about totalizing views of computing. Relating this to the “refactorings” theme of this blog, I prefer the algebraic (rather than software engineering) view of “refactoring.” We can view the aggregate of computing today as a huge, dense matrix, every cell of which seems unrelated to its neighbors. Each cell in this big matrix might represent a single product or technology. There are many ways of looking at this matrix: row-by-row, column-by-column, in MxN patches, etc. But the most precious ways of looking at it are literally factorings in the algebraic sense: vectors whose outer product closely approximates this matrix. Such a structure would have real explanatory power; we’re able to predict this seemingly information-rich structure with far fewer pieces of information.
Like a lot of disciplines, computer science is split into camps of specialties. Since it takes years to become conversant in the history, techniques, vocabulary, and general paradigm of each camp, serious technical communication, and therefore invention, mostly takes place inside camp boundaries.
Through general distractibility and flightiness, I have not specialized as deeply as most other computer practitioners. I’ve had long, variously productive flirtations with operating systems, search, programming languages, and artificial intelligence. In my experience as a resident alien in each of these camps, I’ve noticed that each camp harbors a half-conscious belief that it is the true center of the computing universe, and that all the other camps are simply pursuing degenerate, under-specified versions of their camp’s vision.
Artificial intelligence, search, programming languages, and operating systems are each broad enough paradigms to describe all information processing. These perspectives are not right or wrong; they are each projecting the same high-dimensional reality into their lower-dimensional specialty. For computing practitioners, understanding these different world views can sometimes open up non-obvious avenues of attack in their work. For end-users of computing, understanding that the world is being shaped by these different paradigms can inform your consumption of this technology. For example, the fact that the inventors of the graphical web browser were (in my opinion) operating system people leads to interesting speculation about what a web built with the toolset of programming languages or search could have been.