Programming and Libertarianism

Over time, I’ve noticed that many posters here are knowledgeable about programming (software engineering). I also personally have known several programmers who have libertarian leanings. I’m starting to wonder if programming is conducive to a libertarian worldview.

I mean, in a very loose sense, software runs in an almost anarchic environment. Granted, operating systems have various levels of interprocess security (like memory protection), but, for the most part, legitimate software will, by necessity, avoid touching other programs’ data. Because of this NAP-like behavior, maybe programmers come to enjoy this sort of libertarian freedom.

For those of you with any knowledge of programming or what it entails, what do you think? Would choice in programming languages—C (completely unmanaged environment) instead of Java (running in a VM), for instance—maybe have something to do with it as well?

I don’t think there’s a direct relation.

But I think the key is being an intellectual that is pro-efficient using the computer and internet, and finding and reading information off the internet.

I think that the great drive behind libertarianism is that internet is a powerful vehicle for its diffusion.

Then, software engineers got more exposed to libertarianism through the internet than other smart intellectuals, who are less exposed by the nature of their profession.

The deductive nature of science in praxeology is directly analogous to software programming. It’s therefore natural and simple for programmers to adopt.

Programmers are also extending deductivism to other fields of science, such as Stephen Wolfram in fundamental physics.

LOL - No. That has nothing to do with it.

Programmers are involved in every aspect of running a modern company and have a unique view of internal corporate politics. That is why they tend to be skeptical of authority. They know most people in authority aren’t very smart. Programmers do tend to be very conservative about rules, procedures, and formalities though.

PS: Anything less than the root password means you are a slave. The programming language doesn’t matter.

What about freelance programmers? Or hobbyists (like myself)?

Well the freelance and “hobbyist” (which often overlap with pro devs) are probably often annoyed and angered by the whole closed source / IP thing, thus driving the big open source software movement.

How true this is (bolded), although in many cases it may simply be a case of massive ignorance rather than pure stupidity. (Funny how this parallels with the ignorance of government leaders and bureaucrats who think they can be “smarter than the market”.) In fact the “more technically skilled” are kept down in terms of authority because they’re “too valuable to go into management” - leaving the less technically adept as the ones with the power to direct the organization and override decisions made at a lower level if they choose.

I’m not sure I’d agree that (all) programmers are conservative about rules and procedures, though. For me it seems about 50/50 with the more naturally talented and creative tending to be against strict controls/management, and the more text-book-loyal robotic/inflexible for more centralization and rules. No doubt these generalizations may sometimes vary.

Do you think this ties into libertarianism in any way, though? I imagine that BSD License advocates are more libertarian philosophically, but I doubt we can say the same for participants and advocates of the Free Software Foundation.

I think this is probably most accurate.

I’m not sure what you mean by “ties in” but I don’t think I’d read too much into it. Identifying a trend like this and then essentially guessing (probably all we can do) that there’s some kind of connection reminds me of the same type of faulty logic the government uses when they’re trying to determine why their imaginary free-market economy just fell apart again.

For every programmer I can think of who’s even slightly open to the logic of consistent freedoms, I can think of 2 more who are so closed minded on the matter that it’s painful even having some conversations with them…

I think it simply appeals to the same kind of people. Basically people who are analytical.
The leftist argument goes “look at the cute rabbit, ohh so cute we must care for it” this is not very appealing to type of people who choose to become programmers for a living, they start asking why and what would the effects be.
The cold analytical argumentation libertarians usually are prone too is much more appealing to his kind of person.

Naw - libertarians tend to be nerds and nerds who post to the internet tend to have higher than average knowledge of software. I used to debate on atheist/theist forums and it was the same there… lots of computer geeks. I don’t think there’s a correlation between software programming and atheism… or libertarianism.

Clayton -

This simpler reasoning sounds more likely to me - also, we’re assuming that our guesses are correct that there’s a higher than average number of technical people here. Maybe they’re just more vocal, or maybe it’s just not true at all? [^o)]

(Says yet another technical/developer participant… yeah I’m part of the crowd that you’re analyzing.)

lol clayton, you just described a correlation [8-|]

Hey guys -

What a perfect time to stumble upon your discussion! I’m working on an article to show a correlation between programming and politics; namely the kind of thinking that goes on in the mind of a programmer and I’ll admit right off the bat I’m a Libertarian so I’m biased and my goal is to show, through this article, that (a) the underlying principles of Libertarianism are very much in line with writing of high quality, efficient, scale-able software; and (b) the end result is a high quality, efficient, scale-able society, i.e., peace and prosperity for the most. Please note my article is unfinished and I’m sharing just the rough draft of the first ?half? in hopes of getting some ideas from you all! And please feel free to criticize. This thing is totally rough and I can take it!

PARALLELS BETWEEN POLITICS AND PROGRAMMING

Yes, the world is a complex place. Maximizing happiness for the greatest number if people is not easy. As a person who has written software for over 30 years, I see how the necessity to consider many dimensions simultaneously can be a part of both writing software and creating a system for people to coexist in peace and prosperity.

The easiest (and perhaps most accurate) analogy I can think of for a piece of software is an ecosystem. Let’s say the functions of the software are plants and animals. Let’s say the input is everything from wind to sun; everything that can affect the software from outside the ecosystem. Sometimes that input is very predictable because maybe the software’s job is only to respond to changing pressure in a pump. Other times the software may be incredibly complex so input may be from only one person at a time but that person’s input may be completely unpredictable and affecting multiple functions at the same time. Take that scenario and multiply the people-input part by thousands and you start to get an idea of how complex software can get.

An experienced programmer will understand the value of pattern recognition, extrapolation/prediction, and flexibility. UNSURE ABOUT THE FOLLOWING SENTENCE: He will uphold above all else the value of never changing data (can you imagine a complex piece of banking software removing some zeros from your account?) but instead designing a system where data can most easily flow with least amount of energy, interference, or manipulation.

Back to our ecosystem analogy? How? Or go back and remove/abandon the ecosystem analogy and just talk about the ways programming has obvious parallels to politics?

Finally, my fellow coders, I hope to incorporate some of the following ideas into this article:

An expert will recognize patterns and value the fairness and elegance of treating all situations impartially. The expert will write functions designed to handle entire groups of situations so that less functions are needed, making for more fair treatment, easier maintenance, increased transparency (readability), and cheaper (on memory use).

I call this an aspect of scale-ability. Another dimension of scale-ability that must be considered is time. Will this function work for different kinds of data, different amounts of data, through different situations, and throughout the [hopefully long] life of the software (world). So there are many factors that must be considered. This is one way Libertarianism shines. It says, “Wait a minute. Instead of making a law to protect women and a law to protect brown people and a law to protect gays, why don’t we just create a law that protects people and that is enough?”

But it goes much deeper. The politically left and right will ask first, how can we protect and equalize the greatest number of people possible? Consideration of cost in terms of energy and freedom come second.

On the left there is an assumption that all people can be “lifted up” to an equal level where (a) this artificial “lifting” will give people the head start they need to then “pay back” into society enough to compensate the energy expenditure of the lifting; and (b) … ______. Of course, in order to redistribute wealth, we must designate agencies for (a) information collection, (b) deciding who pays and how much, (c) deciding who gets the money and how much, (d) … ?

On the right there is an assumption that we can protect all people if we … ?expel the “bad” ones? ? Discourage the “bad” behaviour? force the “good” behavior, etc.

The politically libertarian will come from the point of view: instead of being compelled to “do” something for certain people, there is no compulsion. In fact, the very idea of compulsion is anathema to Libertarian philosophy. The only compulsion is “not do”, which vastly simplifies…

Well, since this thread has been resurrected from the dead, I might as well unveil my pet project which I’ve been coding since September but has been in gestation for about six years now. I am designing a new programming language, called Babel. One of my primary design goals is for the average, first-time user of this language to utter something to the effect of “Wow!”

I’m not there yet. I probably have three to six weeks of full-time coding to get to a 0.90 beta release (which will take probably take me at least a year to do in my spare time). I’m probably 3-6 months from an alpha release, thought that might be a bit optimistic. If you’re interested in hearing more about it, leave me a note in this thread and I’ll link to the online repo.

Austrian theory and liberalism has had a huge impact on me over the last 4 years and this has played a role in my design choices in Babel. I will reproduce the philosophy of Babel here, please note that many of the statements to the effect that “Babel supports …” are not yet true because the functionality has not yet been implemented.

The Philosophy of Babel

  • Let it be

There’s no point dictating to people, they’re going to use the language
they like and they’ll like a language based on how well it is suited to
help them achieve their goals. Hence, my primary design object with Babel
has been to make it adept at helping people achieve their goals. This is
complicated by the fact that there is not exactly a list of the most
common goals which programmers have.

  • Optimize for best performance on the programmer’s brain

Larry Wall’s philosophy is that we tend to over-optimize for the machine
and often fail to optimize for performance on the programmer’s mind. This
results in poor overall performance when code is filled with bugs and
sub-optimal algorithms or falls into disrepair due to the difficulty of
maintenance.

Babel’s initial inspiration came from my first encounter with Perl. I
learned Perl only after having earned my degree and I realized that what
I could do in minutes with Perl would have taken me weeks of intense C++
programming to achieve, even with the STL or utilizing specialized,
third-party libraries. This is not because Perl has some special powers
over other languages, it’s because of Perl’s optimization philosophy.

  • Make the common case fast (Amdahl’s Law)

The most important law of computer design is to make the common case fast.
There’s very little performance benefit to optimizing something that only
happens a tiny fraction of the time, however fun the optimization of that
particular problem may be.

Babel tries to avoid optimization for its own sake. Clearly, a more
optimal solution should always be preferred over a less optimal solution,
all things equal. But all things are rarely ever equal so smart
optimization is directed towards the common case.

No language can magically solve all your problems but it can sure make
them worse. Babel attempts to avoid making things worse than they have
to be.

  • Respect tradition

There is a large body of common practice across a wide spectrum of
computer cultures. These traditions usually represent the “best in class”
and deserve respect for that reason.

Babel’s design is inspired by and indebted to many computing traditions:
Unix, GNU, linux, C, C++, Perl, Lisp, Forth (and Joy), YAML and many
others.

Babel looks to tradition to identify what the common case is in order to
optimize to that. For example, it might seem strange on first brush that
I have included bzip2 and bunzip2 as core operators in Babel but the need
to quickly and easily compress/decompress data without a lot of headache
is a common programming need.

Babel says: Why hide the compression operators off in some library where
the programmer has to know they exist, go look them up and then import
them? Why not just make the common case fast? If you hate bzip2, you can
always roll your own operator and add it into Babel or import an existing
library.

  • Be humble

A lot of programming concepts have very lofty names but when you start
tearing off the Christmas-packaging and look underneath, you often find
that the reality is decidedly less grandiose. Babel attempts to take a
more humble approach. While there are ‘reflection’ ‘polymorphism’
‘pure functional evaluation’ ‘call with current continuation’ and even
‘lazy evaluation’ in Babel, they are not called these things.

  • Preserve symmetry over orthogonality

Many Babel operators are redundant. I have yet to understand all the
hubbub about orthogonality - the basic operations of a pure Turing machine
are orthogonal and they are everything you need to build a fully
functioning programming language but I’d hate to program a Turing machine.

Instead of orthogonality, Babel has chosen symmetry as the guiding light.
Whenever possible, I have tried to make operators such that they exactly
undo each other.

[1 2 3] [2] cut cat ------> [1 2 3]

I believe this design philosophy will make it easier for the programmer to
memorize the operation of the core operators. If you know what cut does,
you also know what its opposite (cat) does.

  • Be cooperative

Babel’s core operators are designed to consume input from as many other
operators as possible and generate output that can be consumed by as many
other operators as possible. This makes the suite of operators available
for operation on a particular piece of data as large as possible.

Babel attempts to apply this same philosophy to the external environment,
as well. Babel will read in any file type, and can save its internal state
in a variety of the most widely supported data formats (UTF-8, Graphviz
dot, CSV, YAML-subset, S-expressions etc.)

Babel is also easily built into your C or other language project and can
be easily compiled with C (and possibly other) language extensions. Babel
can dynamically link with any library that understands how to register new
opcodes in Babel which is an almost trivial operation.

  • Be literate

Babel’s layout is partly inspired by Knuth’s philosophy of literate
programming. The primacy of the namespace hierarchy in the layout of
Bipedal, indent-delimitation of comments, quotes and namespaces, the
“normally open” nature of a Bipedal file, the avoidance of arbitrary
punctuation characters as operators, the permission of Unicode characters
as identifier names and the use of “visible whitespace” are all inspired
by literate-programming ideas.

Babel is conscientiously international. The non-English-speaking world is
the future of technological and economic growth and they need to be able
to program in the language they speak. This is why Babel has seamless
support for UTF-8 strings (parsing, string operations, etc.) and why
Bipedal files are UTF-8 encoded, permitting Unicode identifier and
operator names.

  • Avoid intellectual property tarpits

Babel does not originate in the university system, it has been developed
entirely in my own spare time. I have decided to keep Babel out of the GNU
tarpit - Babel does not use any GNU software and is BSD-licensed. This
means that Babel can be used in closed-source, commercial products without
royalties or other hinderances.

As anyone who has spent five minutes in honest, unhampered reflection on
the issue knows, intellectual property law is in severe disrepair in the
developed world. Babel is open-source but respects the right (the
commercial need, in fact) of software developers that release their
software onto open platforms - such as the PC - to keep their source code
closed.

Clayton -

Having spent a few years as a hobbyist PL designer, I would love to see where you are going with Babel.

@Andris:

https://github.com/claytonkb/Babel

The README has a general overview and you can consult doc/babel_guts.txt for more in-depth info.

Also, I’d love to hear any war-stories… I know it’s incredibly difficult to bring a new language to fruition, get users, and so on. There are a million ways to do it wrong (as attested by the millions of new languages that no one has ever used). I am ambitious enough that I actually want Babel to become widely used and I have a strategy that I think will work toward that end. Anyway, I’m happy to learn the lessons that I can from the experience of others.

Clayton -

How will it be better than Python, Java, Ruby, etc.? Any use cases in mind? How will it help me develop web apps?

Not better, just different. That said, I am developing it in such a way that I would prefer to use it over any of those languages.

Glad you asked. So, my view of languages is that nobody ever learns a language because it’s “so powerful”. Look at Lisp - it is clearly more powerful, flexible, you-name-it than any of the mainstream PLs. But nobody uses Lisp. Why not? Because they don’t need to use it for anything. In order to enter widespread use, a language requires a killer app of some sort… an application which people are motivated to use and, hence, willing to add a new language to their vocabulary, if required. I didn’t think this idea up on my own, there was some article I read somewhere that made the case and I’m convinced it’s true.

So, I have an application in mind which is: an encrypted virtual drive that can be stored remotely (on the web) but which is encrypted client-side. I believe people would use this if it were available. The current solutions, such as dropbox, require you to encrypt as a separate step before sending the file out, which is an insecure usage model (info leaks through file names, user forgets to encrypt before sending, etc.)

It depends. I’m not going to write a web dev environment, in part because I don’t know how and in part because I think it’s a waste of time (that’s part of why I don’t know how). The browser model is fundamentally broken. The reason we use browsers is because data fetched from the ether is inherently dangerous… it could contain viruses, trojans, spyware, keyloggers, etc. But the browser itself is a fundamentally insecure container and it restricts the user experience in arbitrary ways that just workarounds for the insecurities inherited from prior web architecture.

I believe that a revolution is going to occur at some point. Instead of OS’s and “the Web”, I believe we’re going to have something which I call a “compute environment.” If you’ve used VNC, you’ll have an idea of what I’m talking about. Basically, the user wants to be able to access his data at all times from a relatively consistent user interface, across all his devices. Apple is leading the way on this but I don’t think their model scales. It will work for their hardware niche but the reality is that a piece of hardware becomes exponentially more useful the more devices it can connect to. The Apple model relies on segregation of Apple from non-Apple hardware. At some point, that model will break down.

A compute environment consists of: state, user-interface and business logic. Unix was really the first truly comprehensive compute environment and remains a formidable model of computation in the web environment despite the fact that it was not designed to be a web OS. I have to be honest: there’s no way in hell I could write a complete compute environment but I think Babel will make a kick-ass component of some future, yet-to-emerge compute-environment. The Babel core could be used to implement the business-logic of the CE and the “killer app” of a virtual encrypted drive could be used to implement the state component. All that is left is UI and I have some kick-ass ideas for that too (just need to find someone crazy enough to implement them).

To get back to your question: will it help you develop web apps? Yes and no. It can help you with any intermediate processing (text processing, logic, etc.) but I’m not going to build in an HTML, CSS, PHP, etc. library. I’ll leave that to someone else.

There will be a built-in HTTP client so you can say something like:

http://www.foo.com/bar.html” slurp

… and it will pull the file bar.html down off the web through HTTP and place it on top-of-stack (TOS). If the web server also supports HTTP PUT, then you will be able to do the reverse:

http://www.foo.com/bar.html” spit

… and it will generate an HTTP PUT request to put whatever is on TOS out to that file on that server. That’s the extent of the built-in support for web, however, and its purpose is not to enable you to write an HTML browser (already plenty of those) but, rather, so you can pull down a Babel file off the web and begin executing it locally. This goes to the CE I was describing above… at some point in the future, there will be no “installing” of programs or apps, you’ll just pull code right down off the web and execute it as-is. Yes, there are security problems but the browser is a highly sub-optimal solution to those security problems … I believe Babel has a better solution (I can describe it if you’re interested).

Clayton -

Addendum: By the way, the core Python, Ruby languages etc. are no better than Babel in terms of built-in web support, their web capabilities come from the available user-created libraries which you can include. Babel will be at least as easy to extend as any of these big-name languages are today. And none of those languages have built-in support for HTTP GET and PUT like the Babel core will, so if it’s just a core-to-core comparison, I think Babel is more web-friendly.

In fact, I think it is easier to extend Babel with new functionality based on existing open-source code so I think it will have a leg-up in that way, as well. If you want to re-use your favorite web-development environment (say, curl), it’s almost trivial to build a Babel-linkable library. You just write a few wrapper functions and you’re on your way. Eventually, I hope to make an automated wrapper-function generator… then it will be a push-button operation to extend Babel with your favorite code library.

Clayton -