The Law of Leaky Abstractions. By Joel Spolsky Monday, November 11, 2002 There's a key piece of magic in the engineering of the Internet which you rely on every single day.
It happens in the TCP protocol, one of the fundamental building blocks of the Internet. TCP is a way to transmit data that is reliable. By this I mean: if you send a message over a network using TCP, it will arrive, and it won't be garbled or corrupted. We use TCP for many things like fetching web pages and sending email. By comparison, there is another method of transmitting data called IP which is unreliable. Here's the magic part: TCP is built on top of IP. To illustrate why this is magic, consider the following morally equivalent, though somewhat ludicrous, scenario from the real world. Imagine that we had a way of sending actors from Broadway to Hollywood that involved putting them in cars and driving them across the country. That is, approximately, the magic of TCP. Back to TCP. This is what I call a leaky abstraction. Abstractions fail. Next:
Peter Norvig. Understanding the Git Workflow. If you don’t understand the motivation behind Git’s design, you’re in for a world of hurt.
With enough flags you can force Git to act the way you think it should instead of the way it wants to. But that’s like using a screwdriver like a hammer; it gets the job done, but it’s done poorly, takes longer, and damages the screwdriver. Consider how a common Git workflow falls apart. Create a branch off Master Work Merge it back to Master when done Most of the time this behaves as you expect because Master changed since you branched. Unfortunately, your feature branch contained checkpoint commits, frequent commits that back up your work but captures the code in an unstable state. So you add a new rule: “When you merge in your feature branch, use –no-ff to force a new commit.” Then one day you discover a critical bug in production, and you need to track down when it was introduced. You narrow the bug to a single file. Rethinking Revision Control Revision control exists for two reasons. The Workflow. A successful Git branching model » nvie.com.
In this post I present the development model that I’ve introduced for some of my projects (both at work and private) about a year ago, and which has turned out to be very successful.
I’ve been meaning to write about it for a while now, but I’ve never really found the time to do so thoroughly, until now. I won’t talk about any of the projects’ details, merely about the branching strategy and release management. It focuses around Git as the tool for the versioning of all of our source code. (By the way, if you’re interested in Git, our company GitPrime provides some awesome realtime data analytics on software engineering performance.) Why git? For a thorough discussion on the pros and cons of Git compared to centralized source code control systems, see the web.
But with Git, these actions are extremely cheap and simple, and they are considered one of the core parts of your daily workflow, really. Enough about the tools, let’s head onto the development model. Decentralized but centralized ¶ Flowchart Software - Online Flow charts software service with Realtime collaboration [2.4-rlive, updated 2012/02/03 10:04 UTC]