Functional programming for Syntheism and Snaz

I saw a meme recently labelling selfie-sticks “Narcissistick” as though taking photos of yourself is the definition of narcissism. Really, the definition of narcissism is quite the opposite: imagining that your thoughts or actions have any meaning in isolation. I have been doing lots of verbal sharing recently, talking up my exploits and promoting my attentional value in Homer, but I have been neglecting the digital space, and notably, the Syntheism blog. So it’s time to share!

My primary focus now is creating an event-based social media platform: a digital bulletin board for displaying digital posters. I call the platform Snaz. My highest priority for Snaz is its accessibility and design. It absolutely must be a user experience so clean and beautiful that it can become ubiquitous. In order to build Snaz, I have been studying a functional programming language called Haskell. I have been studying Haskell for longer than I have known about Syntheism, and ever since I discovered The Syntheist Movement I have felt that it could be connected with the functional programming community in a philosophically meaningful way. With this blog post, I aim to establish that connection.

Snaz: event-based social media

I live in the small town of Homer, Alaska where, despite the town’s size, there is always something going on. Homer sits on the north side of Kachemak bay and overlooks mountains and glaciers on the south side. The natural beauty of the area attracts people with a wide variety of interests who put on all kinds of events year-round. The trouble is, it’s hard to know what’s happening on any given day or night. There are too many different tools for promoting events, and they are used by different groups of people. Older community members still largely rely on the local paper’s community calendar, but younger folks don’t. Facebook is fairly widely used by my peers, but I have plenty of friends who are not on Facebook or don’t use it much. Lots of people, myself included, use cellular text messaging for managing their social outings. Some events are announced on the radio, but different folks listen to different radio stations, if at all. Event promotion in Homer absolutely requires putting up posters on local bulletin boards and talking to people face to face.

This is why a digital bulletin board is such a pressing need. The sources of information are too many and too disparate. The task of advertising effectively and boosting participation and attendance is overwhelming and daunting. The need for a central, user-friendly platform for promoting and locating events in Homer is evident. This need is by no means unique to Homer, and I am only launching it here because this is where I have the most social ties.

I first became aware of this informational void when I was studying math at University of Puget Sound (UPS) in Tacoma, Washington. Even the university website had no central digital space that effectively promoted campus events. The walls of every heavily-trafficked stairwell were covered in posters, and posters were my primary source of what’s-going-on info. I have been thinking about digital bulletin boards with increasing intensity since then, imagining an entire social-media platform. I half-expected that someone else would come up with the same idea and build it before I had the chance, but I haven’t yet come across anything quite like my vision. Finally, I decided last year to genuinely pursue the goal of creating the platform I dream of. I am driven to build a social media platform centered around event promotion, and towards that end I have been studying Haskell.

If you know anything about web development you might be surprised at my choice of language. The languages that are hot in web development right now are Ruby, Python, and Javascript. But I didn’t choose a language to study based on what’s popular. Instead I chose Haskell because its coding philosophy fits with how I want to develop software. Most people I talk to haven’t heard of Haskell, but on the Internet there is a growing community of enthusiasts who are passionate about Haskell and want to bring it in to widespread use. Surrounding and intersecting with this community is an even larger community devoted to functional programming, which is the computer programming paradigm Haskell is built for.

Parrallel paradigms in philosophy and coding

In learning about Haskell I have discovered a whole world of intrigue surrounding programming language design. It turns out there are lots of ways to go about making a language humans can write and computers can read, and the approaches have been evolving rapidly over the last fifty years or so. The evolution of programming language design is approaching a paradigm shift that will have wide reaching effects on the Internet and digital technology as a whole. A while back there was a shift from procedural programming languages like C to object-oriented programming languages like C++ and Java. Object-oriented programming is currently the dominant paradigm in the industry. Within the next five years or so we will move in to functional programming being the dominant paradigm, and functional programming languages like Haskell will start to see wider use. Functional programming promises to offer faster, less buggy apps and websites, that can more easily handle growth and the addition of new features. But the importance of functional programming and its connection to Syntheism goes deeper than the superficial benefits of software performance.

Syntheism places itself at the forefront of Western philosophy by writing the information-technology history of thought. I would like do do the same thing for the functional programming paradigm by framing the history of computer programming in relation to the history of Western philosophy (at least as Bard and Soderqvist present it, since I myself have read very little of the Western philosophical canon). Computer programming can be thought of as an attempt to model thought, so it makes sense that the paradigm shifts in programming language design should reflect the history of Western thought. Just as information technology has forced Western philosophical thought through four paradigms, computing technology has forced the dominant approach to computer programming through four corresponding paradigm shifts. The computer programmer can be metaphorically associated with the metaphysical basis in each paradigm. Hence, the programmer is analogous to the ancestor in primitivism, God in feudalism, the individual in capitalism, and the network in attentionalism. The programmer is the source of thought, and hence the source of code, just as the metaphysical basis for philosophy is society’s source of meaning.

The first information-technology paradigm, primitivism, was brought about with spoken language, and was around for much longer than the time spanned by feudalism, capitalism, and informationalism. Likewise, mathematical proof-writing has been around for much longer than computers, and it should be regarded as the most primitive form of computer programming. Just as spoken language is communication that cannot be recorded, proofs are step-by-step calculations that cannot be tested by a machine. Hence it is the field of mathematics that is the primitive paradigm of computer programming. Primitivism’s metaphysical basis, the ancestor, fits nicely with mathematicians’ propensity to track academic lineages. Mathematicians inherit the terms with which they build their proofs from their academic predecessors; the bulk of a proof is the invocation of theorems proven by ancestral proof-writers. The validity of one mathematician’s work is dependent on the validity of her teacher’s work, and her teacher’s teacher before that, back through the history of mathematical proofs. This is, of course, a gross oversimplification of the history of mathematics and of the notion of a proof, but mathematics remains an apt metaphor for the primitive paradigm of computing precisely because mathematical research has been irrevocably transformed by computing technology.

With the invention of computers, the procedural programming paradigm was born, as feudalism began with the invention of writing. Procedural programming fits nicely with the theistic philosophies that were powerful under feudalism, because the programmer is focused on giving verb-based commands to the computer, much like God gives commands to pious believers. Procedural programming remained dominant until the advent of the personal computer and the need to continually develop and improve large software products over time. Asking a computer to do a few simple calculations is one thing, but working on an ongoing project requires reading code and editing the program. It turns out that reading a long list of verb-based commands doesn’t make it easy to understand what a program actually does. This resonates with how post-theistic philosophies reject theistic dogma and ritual: they are overly complex and seem to obscure the core value of religious practice. Despite the dominance of object-oriented programming, well-written procedural programs are still the fastest programs we can write, so devout programmers still learn C, just as devout religious practitioners forgo modern social mores to keep the commandments of traditional holy books.

Object-oriented programming can be associated with capitalism in historical as well as metaphorical ways, because object-oriented programming has been used to make personal computers, the pinnacle of hyper-capitalist technology. Software for personal computers is centrally developed but intended to be0 used by masses of individuals, making it sociologically akin to capitalism’s other technological favorites the printing press, radio, and television. Thus the computer programmer is no longer God; the programmer is the individual. Computer programs are not verb-based commands issued by an academic researcher in search of truth, they are descriptions of digital objects whose purpose is to make profit for some individual computer-user. Object-oriented programs seem analogous to totalistic philosophy’s attempts to break the universe into distinct, comprehensible ideas, as object-oriented programming divides a program’s functionality into distinct, comprehensible digital objects.

Unfortunately, object-oriented programming fails in its attempt to simplify through abstraction. There are two main reasons for this. First, it never really leaves behind the command-style of ‘imperative’ or procedural programming. Instead of giving commands directly to the processor, the programmer ends up giving commands to the objects. Secondly, which structure the program should take, i.e. which objects should have which functionality, is difficult to optimize before you start writing a program, but also difficult to alter after a first iteration has been coded.

The netocratic development of software demands code that is both easy to reason about and easy to radically alter and restructure to serve the constantly changing needs of the netocracy. This is what functional programming can offer, and this is why functional programming is the programming paradigm for attentionalism. Functional programming aims to be higher-level, modeling problems using pure math functions, and so it fits nicely with the eternalism’s pragmatism and the metaphysics of relationalism. Just as eternalism applies philosophical ideas pragmatically to produce contextually relevant truth without assigning meta-truth value to the applied ideas, functional programming directly applies abstract mathematical structures to the modeling of real world applications, but leaves the choice of structure entirely up to the programmer. Relationalism moves the focus from models of static subjects and objects to models of dynamic processes and relations, and in tandem functional programming shifts us from creating digital objects to codifying digital processes in mathematical structure.

Should Syntheists learn math?

What is mathematical structure exactly? As eternalists we cannot imagine the field of mathematics as the mystical blueprints for the universe, but rather as a language: eternalisations developed by elite networks, even if these networks largely believe themselves to be discovering rather than creating new math. Learning to speak the language of math gives a person the opportunity to enter in to these networks and participate in the creative process of making new math, or applying math in a new way to the task of modeling the chaotic universe. Under capitalism these math-creating networks were locked away in academia. With the Internet, now any network has access to an overwhelming amount of mathematical knowledge; anyone can learn to speak this language now. Many people express loathing and distaste for math, and still more imagine themselves incapable of ever learning math. Though many feel alienated by math and its jargon, math as a language is widely praised by those who speak it, myself included.

So the question is, should syntheists learn this language? Will the netocracy inevitably choose to become mathematically literate? Power has always kept math out of the hands of the powerless. Power is dependent on information technology, and development in science and technology has historically leaned heavily on math. Thus it seems reasonable that the most powerful netocrats will be mathematically literate and that the netocracy as a whole will value math more and more as it gains power.

I went to college because I was still stuck in a capitalist mentality coming out of high school, but I didn’t study math because I thought it would be useful for getting a job. I studied math because it is a language I love speaking, and I find math beautiful. I was applying the mantra, ‘follow your passion and you will fall in to your life purpose.’ I love tutoring math and teaching people to communicate using math. I have found that most of my task is convincing a student that she has the ability to figure it out and think critically about a problem. So many students want to fall in to the trap of self loathing where they imagine themselves incapable of doing math if they make the slightest error in mental calculation. They say, “I made a mistake so I must be bad at this,” and imagine themselves too stupid or lazy for math. Students become more adept at eliciting ‘the right answer’ from teachers, tutors, or other mathematical authority figures.

This narcissism is bred by the industrial style of math education that tells students math is about calculation, rather than communication and critical thinking, and that making errors is an indication that you are bad at math. Add on top of this a culture that rewards speed over correctness and you can see why so many math students get discouraged quickly. They are tested in isolation for their ability to quickly follow a memorized set of steps. But this is not how math is ever used in application. Engineers and scientists who use the jargon of math on a daily basis to converse with their colleagues about problems and projects. They are almost never sitting by themselves going through step-by-step calculations; that is the job of computers. Learning to communicate using math requires practice, patience, self-love, and a willingness to constantly reaffirm the most obvious and basic aspects of a problem’s definition. Making mental mistakes is a given for the mathematically literate. They do not carry a sense of infallibility because of math’s mystical status in our society. Instead, they have developed the skill of regularly checking themselves for errors in order to maintain precision. But this re-checking process is only possible of you don’t get down on yourself every time you make a small error. In other words, teaching math as communication rather than calculation presents one opportunity to help people move from narcissism to self-love.

Thus, for informational society, math education should be designed to teach students to use the language of math to communicate in groups about collaborative projects. Students can learn to forgive themselves for making mistakes while also learning to catch the mistakes of their peers without discouraging or putting them down. Is this doable? Of course! Tutoring math has taught me that anyone can learn math if they just believe they can, and convincing students they can do it is not that hard. If anyone can learn math, then any network can learn to use math. Moreover, the necessary cultural transition from a culture of inter-narcissism to a culture of self-love will go hand in hand with the development of a mathematically literate netocracy.

Functional programming in the age of informationalism

This finally brings us back to the question of how functional programming can successfully provide a programming paradigm suitable for informationalism. If math literacy can be imagined as a useful tool for an attention-seeking network, then functional programming comes right alongside math, because it uses the language of math to model computer software. Hence, with a little effort, a mathematically literate network will be able to transform itself into a software development team and begin experimenting with building new information technology. It is in the context of this mathematically literate network that we see how functional programming achieves the goals of having code that is both easy to understand and easy to restructure. Hence, the network is empowered to build its own technology as it likes in a way that capitalism’s individual never was.

Only very recently has the functional programming technology progressed to the point that these languages can realistically compete with mainstream languages. This means that we are at a critical moment in the history of the informational paradigm shift when a new form human expression has been made available to anyone with a computer and the time and motivation to learn it. Not only can humans express mathematical structures as we have for a few thousand years, but we now also have the power to codify those ideas in a language that machines can execute. In other words, we can finally mobilize our mathematical eternalizations.

The next frontier of philosophy is writing philosophy in computer code. I recently stumbled across the notion of ‘literate programming’, which suggests that a computer program ought to be thought of not primarily as something for a computer to execute, but rather as text for humans to read. The inverse should also be true: text that we have previously imagined to be primarily for reading by humans might be possible to consider as a program that a computer could execute. An immediate example is the philosophy of Alfred North Whitehead, which has spawned a branch of mathematics known as mereotopology. Certainly we can find syntheological interest in attempting to make computer programs based on this branch of mathematics.

But in the more immediate future, if Syntheism is about creating God in the intenet age, then we syntheists should take a more pronounced interest in the technology used to create the internet. The syntheist community should join forces with the functional programming community and help in the push to bring functional programming into the mainstream. We should encourage math literacy within our ranks by framing math as a fun activity to do with friends. After all, math is present in all kinds of games and art. We should also attempt to use some of the tools that are now available for functional web development for our blogging and our social media use. After all, Syntheism aims at being a radical removal, a stepping out of the capitalist paradigm; we should make plans to step out of Facebook and WordPress.

This brings me back to Snaz, the social-media platform that I want to create, or rather participate in the creation of. This meme has infected my brain and I am doing everything I can to catalyze the emergence of this new information technology. I strongly believe that event-based social-media is what Syntheism should use for networking. Facebook’s approach to the user’s profile belies its roots in the old capitalist paradigm. The fields for description define the individual based on capitalism’s measuring sticks of production and consumption: job, education, and which media you consume. On Snaz the profile will instead be a reflection of the dividuality of the user: a collage of posters representing a variety of events participated in or in the making.

This blog post is a call to action for the Syntheist community. Let’s embrace math literacy and functional programming and take this unique historical opportunity to begin for the first time to mobilize mathematical eternalisations. Let’s create a wide range of information technologies and begin experimenting with using them as organizational tools for our networks. Let’s seize the power that is now within our grasp.