If the rain is keeping you indoors, here's some stuff to read.
- The Case for Slow Programming
Venture-backed software development here in the San Francisco Bay area is on a fever-pitch fast-track. Money dynamics puts unnatural demands on a process that would be best left to the natural circadian rhythms of design evolution. Fast is not always better. In fact, slower sometimes actually means faster – when all is said and done.
- The Myth of the Interchangeable Programmer: Can't We Just Offshore Him?
The problem here is that the SMFs incorporate a number of flawed assumptions. The first of these assumptions is that programmers are fungible. The SMFs assume all programmers will contribute roughly the same amount to a project and that all programmers are interchangeable.
- Immigration is about talent, not costs
So you can be sure that all things being equal we would prefer to hire local talent for a position. But all engineers are not created equal, and great engineers are scarce worldwide, so when we find great engineers abroad we make them compelling offers and try to hire them.
- Google Test Automation Conference
All of the GTAC 2014 video recordings and slides are publicly available. You can watch them from the GTAC 2014 YouTube playlist or browse the talks below
- Never Send a Human to do a Machine’s Job: How Facebook uses bots to manage tests
Developers aren't the jerks, bots are!
Filing tasks, sending email on failure isn't enough.
All tests need owners, if we fail to blame a revision.
- From Test Driven Development to Behavioral Driven Design
Behavioral-driven development was introduced by Dan North with issues he continually came across in test-driven development. (2) He suggested that instead of simply writing tests, developers should think of specifying behaviors, which is how the users want the feature to behave. In BDD, you should always start with the features that are most important to the users. Through collaboration and continual feedback, the practice of knowing what is most important becomes clearer.
- Too Big to Fail
"The system is slow" is a poor bug report—in fact, it is useless. However, it is the one most often uttered in relation to distributed systems. Typically the first thing that users of the system notice is that the response time has increased and that the results they get from the system take far longer than normal. A distributed system needs to express, in some way, its local and remote service times so that the systems operators, such as the devops or systems administration teams, can track down the problem. Hot spots can be found through the periodic logging of the service request arrival and completion on each host. Such logging needs to be lightweight and not directed to a single host, which is a common mistake. When your system gets busy and the logging output starts taking out the servers, that's bad. Recording system level metrics, including CPU, memory and network utilization will also help in tracking down problems, as will the recording of network errors. If the underlying communications medium becomes overloaded, this may not show up on a single host, but will result in a distributed set of errors, with a small number at each node, which lead to chaotic effects over the whole system. Visibility leads to debuggability; you cannot have the latter without the former.
- Exactly-Once Delivery May Not Be What You Want
I think there are two lessons here for people building distributed systems. One is that end-to-end system semantics matter much more than the semantics of an individual building block, and sometimes what seems like a very desirable semantic for a building block may end up making the end-to-end problem harder. The other is that simple, practical, solutions like unique IDs can make really hard problems much easier, and allow us to build and ship real systems that work in predictable ways.
- Aliens in the Valley: The complete history of Reddit, the Internet's front page
This is the story of how a bootstrapped startup with a funny name and no initial ties to the tech scene outlasted better-funded competitors, survived founder drama, endured tensions with its parent company and later navigated life as a standalone business — all in order to build the front page of the Internet.
- PostgreSQL’s Powerful New Join Type: LATERAL
a LATERAL join is like a SQL foreach loop, in which PostgreSQL will iterate over each row in a result set and evaluate a subquery using that row as a parameter.
- Steve Hetzler's "Touch Rate" Metric
As an example of the use of these graphs, Steve analyzed the idea of MAID (Massive Array of Idle Drives). He used HGST MegaScale DC 4000.B SATA drives, and assumed that at any time 10% of them would be spun-up and the rest would be in standby. With random accesses to data objects, 9 out of 10 of them will encounter a 15sec spin-up delay, which sets the response time limit. Fully powering-down the drives as Facebook's cold storage does would save more power but increase the spin-up time to 20s.
- Java for Everything
If you and I have a contest to write a simple blogging system and you’re using (say) Python, you’ll have something interesting in 30 minutes using pickling and whatnot, and it’ll take me two days to build something with MySQL. Many language choices are based on trivial contests like these. But after two weeks of development, when we both have to add a feature, mine will take at most as long as yours, and I won’t be spending any time figuring out how to get my system to handle so many users, or tracking down why some obscure if clause breaks because you misspelled the name of a function, or figuring out what the heck this request parameter contains.
- The Unreasonable Effectiveness of C
C is the total package. It is the only language that's highly productive, extremely fast, has great tooling everywhere, a large community, a highly professional culture, and is truly honest about its tradeoffs.
Other languages can get you to a working state faster, but in the long run, when performance and reliability are important, C will save you time and headaches.
- The Last Homesteads of Wonder Valley, California
Arid, undeveloped, and sparsely beautiful, Wonder Valley was deemed “useless” by the federal government, and so was portioned out for mostly recreational use at $10 to $20 an acre. The sole requirement was that the applicant "proved up" the land with a small house.
- NPR’s Book Concierge: Our Guide To 2014’s Great Reads
Use the filters below to explore some 250 titles NPR staff and critics loved this year.