I associate Yosefk’s nomad programmers with maximizing the amount of program you can hold in your head, since you don’t find working very closely with other people very productive. This gets you weird super-expressive languages like Lisp and Haskell in favor of things like Java or C++, which have the forced common idiom and interface conventions to help collaboration between multiple developers. This gets you different types of culture, with the nomad programmers making small works that can get arbitrarily tricky and impressive, while the settler programmers do less idiosyncratic work in order to keep being able to talk to each other, and build the stuff that’s eating the world by the sheer volume of output they can collectively manage.
This interfaces a bit oddly with Yegge’s language taxonomy. By this idea, the solo programmers prefer languages that let them do clever stuff in a small number of lines. This works both in very statically typed languages like Haskell and very dynamically typed ones like Perl. While there are similarly languages like Java (designed for peons) and PHP (designed badly) that programmers often avoid if given the choice.
The interesting bit in Hanson’s post is the idea that while everyone cares about fairness, liberty and care, only farmers also strongly care about loyalty, respecting authority and respecting sanctity. The group hierarchy virtues only make sense in projects that require cooperation from multiple people, and possibly hierarchies of teams operating under a managing authority. These kind of groups can also use sanctity norms like syntax formatting conventions to keep it easier for different people to work on all parts of the project.
I have been on both extremes of this division. As a nomad against a group of settlers: “So just because you guys never heard about these most frequent design patterns (and most likely even about the whole idea of design patterns), it means that I shouldn’t ever use them… and instead use your preferred way of hundred-lines blocks of procedural code with dozens of ad-hoc modifications because the whole thing is already too heavy to be refactored (and you probably haven’t heard about refactoring either)?” And as a settler after a nomad raid: “So Mr. Smart created this weird framework here, completely idiosyncratic and undocumented, and now he moved on to a fresh project, and it is my job to understand what he tried to do here and solve all the resulting problems, so Mr. Smart can get the credit for being smart, and I get the lowly work of cleaning up his mess. I wish he had to clean up his own mess, just as I have to clean mine.” And the funny thing is that now as I write it, I understand how the other side probably felt.
It is about long-term responsibilities. Programming is not just “create this magical stuff”, but also “maintain this stuff when it starts falling apart”. Some people are shining good at the former task, and completely suck at the latter, and then someone else must pay for their ticket to fame.
(Not surprisingly, I feel similarly about politics. Designing an utopia is not a hard problem if in a case of disaster you are allowed to say “meh, whatever” and go away, leaving the starving millions behind.)
I associate Yosefk’s nomad programmers with maximizing the amount of program you can hold in your head, since you don’t find working very closely with other people very productive. This gets you weird super-expressive languages like Lisp and Haskell in favor of things like Java or C++, which have the forced common idiom and interface conventions to help collaboration between multiple developers. This gets you different types of culture, with the nomad programmers making small works that can get arbitrarily tricky and impressive, while the settler programmers do less idiosyncratic work in order to keep being able to talk to each other, and build the stuff that’s eating the world by the sheer volume of output they can collectively manage.
This interfaces a bit oddly with Yegge’s language taxonomy. By this idea, the solo programmers prefer languages that let them do clever stuff in a small number of lines. This works both in very statically typed languages like Haskell and very dynamically typed ones like Perl. While there are similarly languages like Java (designed for peons) and PHP (designed badly) that programmers often avoid if given the choice.
The interesting bit in Hanson’s post is the idea that while everyone cares about fairness, liberty and care, only farmers also strongly care about loyalty, respecting authority and respecting sanctity. The group hierarchy virtues only make sense in projects that require cooperation from multiple people, and possibly hierarchies of teams operating under a managing authority. These kind of groups can also use sanctity norms like syntax formatting conventions to keep it easier for different people to work on all parts of the project.
I have been on both extremes of this division. As a nomad against a group of settlers: “So just because you guys never heard about these most frequent design patterns (and most likely even about the whole idea of design patterns), it means that I shouldn’t ever use them… and instead use your preferred way of hundred-lines blocks of procedural code with dozens of ad-hoc modifications because the whole thing is already too heavy to be refactored (and you probably haven’t heard about refactoring either)?” And as a settler after a nomad raid: “So Mr. Smart created this weird framework here, completely idiosyncratic and undocumented, and now he moved on to a fresh project, and it is my job to understand what he tried to do here and solve all the resulting problems, so Mr. Smart can get the credit for being smart, and I get the lowly work of cleaning up his mess. I wish he had to clean up his own mess, just as I have to clean mine.” And the funny thing is that now as I write it, I understand how the other side probably felt.
It is about long-term responsibilities. Programming is not just “create this magical stuff”, but also “maintain this stuff when it starts falling apart”. Some people are shining good at the former task, and completely suck at the latter, and then someone else must pay for their ticket to fame.
(Not surprisingly, I feel similarly about politics. Designing an utopia is not a hard problem if in a case of disaster you are allowed to say “meh, whatever” and go away, leaving the starving millions behind.)