<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Monomorphic &#187; Computer science</title>
	<atom:link href="http://www.monomorphic.org/wordpress/category/computing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.monomorphic.org/wordpress</link>
	<description>Conceptual meandering</description>
	<lastBuildDate>Wed, 11 Jan 2012 02:07:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>What makes a good programming language?</title>
		<link>http://www.monomorphic.org/wordpress/what-makes-a-good-programming-language/</link>
		<comments>http://www.monomorphic.org/wordpress/what-makes-a-good-programming-language/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 09:00:09 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=1012</guid>
		<description><![CDATA[New programming languages are released all the time. History is littered with dead ones. There are also many long time survivors in good shape, as well as geriatric languages on life support. What makes a programming language attractive and competitive? How can we evaluate its quality? There are many different aspects of this problem. Ease [...]]]></description>
			<content:encoded><![CDATA[<p>New programming languages are released all the time. History is littered with dead ones. There are also many long time survivors in good shape, as well as geriatric languages on life support.</p>
<p>What makes a programming language attractive and competitive? How can we evaluate its quality? There are many different aspects of this problem.</p>
<p><strong>Ease of reading and writing</strong>, or: directness of the mapping between the problem in your head and the model you are creating on the computer. This can be highly domain dependent, for instance languages such as LaTeX, Matlab and R are designed with specific problems in mind and cater to users from that domain. Their limits show quickly when you try to stretch them beyond their envisioned purpose. Speaking of general programming languages, I think Python deserves to be mentioned as a language that is extremely readable and writable. It has other shortcomings though &#8211; see below. Prolog is also highly read- and writable if it suits your problem.</p>
<p><strong>Runtime performance. </strong>Arguably this is one of the few reasons to bother with using C++. For the majority of programming projects though, performance is much less of a problem than one might think, especially if one considers how close the performance of many JVM languages get to C++. When programmers think about their overall productivity and effectiveness in developing and maintaining a system, C++ is often not the best choice, obviously.</p>
<p><strong>Scalability to large teams. </strong>The key property here is: does the language do anything to help me, as a developer, work with code that other people wrote? Ease of maintenance may be strongly correlated with usability in large teams. An anti-pattern here is languages that allow for solving the same problem in a huge amount of ways with very variable syntax. For instance, Perl and C++ can lead to notoriously unmaintainable code if used carelessly. Some say that Scala also suffers from this problem. Basically, the language helps here if it prevents me from doing things that other developers might not expect, and that I might forget to document or communicate. This is why Gosling famously called Java a blue collar language; it restricts you enough to make teamwork quite practical. It even restricts the layout of your source file hierarchy. (Now we begin to see that some goals are in conflict with each other).</p>
<p><strong>Scalability to large systems. </strong>This is related to the preceding property, but whereas team scalability seems to be mainly about avoiding the creation of code fragments that surprise people other than their creators, system size scalability seems to be about avoiding the creation of code fragments that surprise other code fragments. Here one needs invariants, good type checking, static constraints of all kinds. Scripting languages like Perl and Python, lacking static typing completely, are some of the worst in this regard, since we cannot even be sure at startup time that methods we try to invoke on objects exist at all (Python).</p>
<p><strong>Scalability over time (maintainability).</strong> If there is both system size scalability and team scalability, then the system is also likely to be able to live for a long time without great troubles.</p>
<p><strong>Developer efficiency and rapid prototyping. </strong>Depending on the nature of the system being developed, this may depend on several different properties listed above.</p>
<p><strong>Availability of quality tools.</strong> Mature runtime environments, such as the JVM, have many more high quality tools and IDEs available than a language than Ruby. Mature languages also have more compilers for more different architectures available.</p>
<p>These points begin to give us an idea of how we can evaluate programming languages. However, I also believe that making a good language and making people use it is largely about luck and factors outside the design itself. Just like there&#8217;s a big step between imagining and specifying an utopian society and making that social order an actuality, there&#8217;s a big step between designing an ideal programming language and achieving widespread adoption for it. We have seen a way forward though: with generalised runtime environments such as the JVM and the CLR, we may develop and deploy languages that take advantage of a lot of existing infrastructure much more easily than before. And what I hope for is in fact that it becomes even easier to deploy new languages, and that new languages are as interoperable as possible (insofar as it doesn&#8217;t constrain their design), so that we could see more competition, more evolution and more risk taking in the PL space.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=1012&amp;md5=fff6eeac12b2b852112ea787fe9ec90f" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/what-makes-a-good-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pointers in programming languages</title>
		<link>http://www.monomorphic.org/wordpress/pointers-in-programming-languages/</link>
		<comments>http://www.monomorphic.org/wordpress/pointers-in-programming-languages/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 15:21:03 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[reuse]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[state]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=1006</guid>
		<description><![CDATA[It is likely that few features cause as much problems as pointers and references in statement-oriented languages, such as C, C++ and Java. They are powerful, yes, and they allow us to control quite precisely how a program is to represent something. We can use them to conveniently compose objects and data without the redundancy [...]]]></description>
			<content:encoded><![CDATA[<p>It is likely that few features cause as much problems as pointers and references in statement-oriented languages, such as C, C++ and Java. They are powerful, yes, and they allow us to control quite precisely how a program is to represent something. We can use them to conveniently compose objects and data without the redundancy of replicating information massively. In languages like C they are even more powerful than in Java, since just about any part of memory can be viewed as if it were just about anything through the use of pointer arithmetic, which is indeed frightening.</p>
<p>But they also complicate reasoning about programs enormously. Both human reasoning and automated reasoning. Pointers allow any part of the program to have side effects in any other part of the program (if we have a reference to an object that originated there), and they make it very hard to reason about the properties that an object might have at a given point in time (since we generally have no idea who might hold a reference to it &#8211; it is amazing that programmers are forced to track this in their heads, more or less). In my effort to design my own language, multiple pointers to the same objects &#8211; aliases &#8211; have come back from time to time to bite me and block elegant, attractive designs. I believe that this is a<em> very </em>hard problem to design around. Aliased pointers set up communication channels between arbitrary parts of a program.</p>
<p>Nevertheless attempts have been made, in academia and in research labs, to solve this problem. Fraction-based permissions track how many aliases exist and endow each alias with specific permissions to access the object that is referred to. Ownership analysis forces access to certain objects to go through special, &#8220;owning&#8221; objects. Unique or &#8220;unshared&#8221; pointers in some language extensions restrict whether aliases may be created or not. But so far no solution has been extremely attractive and convenient, and none has made it into mainstream languages. (<del>I know that someone</del> Philipp Haller made a <a href="http://lamp.epfl.ch/~phaller/readme_uniqueness.html">uniqueness plugin for the Scala compiler</a>, but it is not in wide use, I believe.)</p>
<p>If we are to attempt further incremental evolution of the C-family languages, aliased pointers are one of the most important issues we can attack in my opinion.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=1006&amp;md5=45794a6be4c8cfc42a0be706de7eb18b" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/pointers-in-programming-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reviewing the second year of Monomorphic</title>
		<link>http://www.monomorphic.org/wordpress/reviewing-the-second-year-of-monomorphic/</link>
		<comments>http://www.monomorphic.org/wordpress/reviewing-the-second-year-of-monomorphic/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 11:19:26 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=950</guid>
		<description><![CDATA[In May 2010 I reviewed the state of Monomorphic as a blog. Since it&#8217;s now been almost 13 months since that time, let&#8217;s evaluate what&#8217;s happened in the meantime. Where am I, how did I get here, and where do I go next? The rate of publication has decreased. Prior to the last evaluation, 55 [...]]]></description>
			<content:encoded><![CDATA[<p>In May 2010 <a href="http://www.monomorphic.org/wordpress/meta-notes-1-year-with-monomorphic-blogging/">I reviewed</a> the state of Monomorphic as a blog. Since it&#8217;s now been almost 13 months since that time, let&#8217;s evaluate what&#8217;s happened in the meantime. Where am I, how did I get here, and where do I go next?</p>
<p>The rate of publication has decreased. Prior to the last evaluation, 55 posts had been published &#8211; about one per week. Since then, only 22 new posts have been added. This is partly because I&#8217;ve had more academic tasks to carry out, a condition that is set to intensify gradually from here on, and partly because I tried to change my standards for what I wanted to blog about (in some vague, as of yet unspecified way).</p>
<p><strong>Scala</strong> is still a very popular topic to blog about, and rightly so, but I no longer feel that I should write about it for the sake of doing so. <a href="http://etorreborre.blogspot.com/">Others do</a> <a href="http://www.codecommit.com/blog/">a much better job</a> of writing about Scala than I could do, because they spend <del>all their time</del> more time with that language. Incidentally, I&#8217;m delighted to see that companies are still switching to Scala quite eagerly, and that Martin Odersky and others launched the company <a href="http://www.typesafe.com/">Typesafe</a> to help others with the transition. Learning Scala has honestly been one of the most empowering experiences I&#8217;ve had as a programmer, and I believe that there is a vast space of possibilities that has yet to be explored in the language. <a href="http://kirkwylie.blogspot.com/2011/01/scala-considered-harmful-for-large.html">Maybe it&#8217;s not a language for everybody</a> (I postpone my judgment on this for now), but if it were in the hands of the right teams with the right discipline, the world would be in a better state. Also, the <a href="http://www.scala-ide.org/">Scala IDE</a> for Eclipse has been vastly, vastly improved since 13 months ago, at which time it could barely be used.</p>
<p>I&#8217;ve become more and more interested in <strong>philosophy </strong>over the past 18 months or so, and this started to show up in the blog during this interval, with <a href="http://www.monomorphic.org/wordpress/category/philosophy/">more and more entries</a> tentatively trying to delineate philosophical questions or positions. Initially I was focussing almost only on Nietzsche, but recently I&#8217;ve also been reading a lot of Foucault, as well as some others. I&#8217;ve probably not been very pedagogical in writing down my thoughts on these topics, but I fear I will never be a pedagogical writer unless I go through some initial struggling attempts. The ideas I&#8217;m most interested in currently are causality (I believe that we don&#8217;t understand it at all) and free will (I believe that its existence is highly questionable, but very fruitful to criticise and reason about).</p>
<p><strong>Popularity. </strong>By far my most popular post has been <a href="http://www.monomorphic.org/wordpress/nomuras-jellyfish/">this little note on Nomura&#8217;s Jellyfish</a>. If I put Google adwords on just that post, I would probably make a lot of money without annoying any other readers. For some reason Google directs a lot of people googling jellyfish to this site. As if programming and philosophy are not more interesting things to Google. Other than that, the Scala posts have been very popular, and following them, <em><a href="http://www.monomorphic.org/wordpress/continuous-computing/">Continuous computing</a></em>, <em><a href="http://www.monomorphic.org/wordpress/type-theory/">Type theory</a></em> and <em><a href="http://www.monomorphic.org/wordpress/the-coming-politicisation-of-mathematics-and-computer-science/">Politicization of mathematics&#8230;</a></em> were able to attract some attention.</p>
<p>From now on, until early next year, I have to focus more and more on finishing my Ph.D. studies; it remains to see how this will affect my blogging.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=950&amp;md5=13822c37b5c673df125e8d8a599cb00f" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/reviewing-the-second-year-of-monomorphic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assessing research quality</title>
		<link>http://www.monomorphic.org/wordpress/assessing-research-quality/</link>
		<comments>http://www.monomorphic.org/wordpress/assessing-research-quality/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 07:48:33 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[epistemology]]></category>
		<category><![CDATA[fallacies]]></category>
		<category><![CDATA[human condition]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=925</guid>
		<description><![CDATA[Academic research is difficult to evaluate. In order to know the significance of an article, a result or an experiment, one must know a lot about the relevant field. It is probably fair to say that few people read research articles in great depth unless they work in exactly the area the article is in. [...]]]></description>
			<content:encoded><![CDATA[<p>Academic research is difficult to evaluate. In order to know the significance of an article, a result or an experiment, one must know a lot about the relevant field. It is probably fair to say that few people read research articles in great depth unless they work in exactly the area the article is in. PhD theses might cite hundreds of articles, but it seems natural that not all of these articles will be read with the same degree of scrutiny by the author of the thesis.</p>
<p>Hence the trouble with obtaining funding for research. In order to obtain funding, you have to communicate something that seems incommunicable without the full commitment of the reader. Grant dispensers want to know a number on a scale: &#8220;what&#8217;s the quality of this paper between 0 and 1?&#8221;, but this quality number cannot be communicated separately from the full substance of the paper and its environs. And thus we end up with keywords, catchphrases that become associated with quality for short periods of time, as a way of bypassing this complexity, an approximate way of indicating that you are doing research on something worthwhile.</p>
<p>This reflects a broader problem in society of evaluating authorities. I cannot evaluate my doctor&#8217;s, or my dentist&#8217;s, or my lawyer&#8217;s work, since I don&#8217;t have the necessary competence. Accordingly, I base my trust on the person and some of their superficial attributes, instead of judging the work by itself. It seems that the same kind of thing becomes necessary sometimes in choosing what researchers to fund.</p>
<p>It also points to a faculty that must have evolved in human being since millennia: the capacity for evaluating important properties of things we do not understand well very quickly, for danger, nutrition, etc. Only that this faculty does not translate well to research&#8230;</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=925&amp;md5=3ca265fc36c7c45e59631ba781b0c24c" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/assessing-research-quality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JTronic, a programming game</title>
		<link>http://www.monomorphic.org/wordpress/jtronic-a-programming-game/</link>
		<comments>http://www.monomorphic.org/wordpress/jtronic-a-programming-game/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 06:51:28 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=894</guid>
		<description><![CDATA[Now for something quite different from the philosophical entries I&#8217;ve been writing recently. We finally got the time to release the game &#8220;JTron&#8221; on Sourceforge. It is there under its new name Jtronic. This game is designed for programming competitions; participants program an agent that plays the game by obtaining information about its environment and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.monomorphic.org/wordpress/wp-content/uploads/2011/03/screenshot.png"><img class="alignleft size-medium wp-image-895" style="margin: 1em;" title="screenshot" src="http://www.monomorphic.org/wordpress/wp-content/uploads/2011/03/screenshot-300x226.png" alt="" width="300" height="226" /></a></p>
<p>Now for something quite different from the philosophical entries I&#8217;ve been writing recently. We finally got the time to release the game &#8220;JTron&#8221; on Sourceforge. It is there under its new name <a href="http://sourceforge.net/projects/jtronic/">Jtronic</a>.</p>
<p>This game is designed for programming competitions; participants program an agent that plays the game by obtaining information about its environment and making decisions. The programming language is Java. The game itself combines features of Pac-man and Tron in what we think is an interesting synthesis.</p>
<p>This game was used for the <a href="http://icpc2010.honiden.nii.ac.jp/">ACM-ICPC regional contest in Tokyo 2010</a>, for the &#8220;Java Challenge&#8221; part. I&#8217;ve had the honour to work with some great people in the Honiden lab in developing this game, and we spent time on it on and off for almost a year. A very educational process, and the final result was not bad at all.</p>
<p>If you can program in Java, you can have fun with this framework by programming your own agent and competing against others (including some pre-made ones that are included in the release), or you can contribute to the game framework itself, should you feel so inclined. It&#8217;s GPL licensed. The documentation is still slightly sparse, but we will release more &#8220;shortly&#8221;.</p>
<p>A similar framework is the <a href="http://queue.acm.org/icpc/">&#8220;Icy Challenge&#8221;</a> that was used in the world final ICPC Java Challenge. It has much nicer graphics than our game. Maybe someone would take the time to make 3D graphics for JTronic?</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=894&amp;md5=690ca61c1a90c9da41f87f7f088873e3" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/jtronic-a-programming-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Values 1: Philosophy, science, and their relationship</title>
		<link>http://www.monomorphic.org/wordpress/values-1-philosophy-science-and-their-relationship/</link>
		<comments>http://www.monomorphic.org/wordpress/values-1-philosophy-science-and-their-relationship/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 13:40:44 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[fallacies]]></category>
		<category><![CDATA[nietzsche]]></category>
		<category><![CDATA[ontologies]]></category>
		<category><![CDATA[science]]></category>
		<category><![CDATA[values]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=831</guid>
		<description><![CDATA[This is hopefully the start of a short series of posts in which I attempt to relate the concepts of value and value creation, in particular as they were understood by Friedrich Nietzsche, to the modern world, in some kind of way. Comments of all kinds are encouraged! In the beginning (understood as ancient Greece), [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.monomorphic.org/wordpress/wp-content/uploads/2011/01/digitalNietzsche1.png"><img class="alignleft size-medium wp-image-842" style="margin: 1em;" title="FWNietzsche" src="http://www.monomorphic.org/wordpress/wp-content/uploads/2011/01/digitalNietzsche1-224x300.png" alt="" width="224" height="300" /></a></p>
<p><em>This is hopefully the start of a short series of posts in which I attempt to relate the concepts of value and value creation, in particular as they were understood by Friedrich Nietzsche, to the modern world, in some kind of way. Comments of all kinds are encouraged!</em></p>
<p>In the beginning (understood as ancient Greece), there was philosophy. That is to say, most systematic inquiry into matters worth thinking about was collected under this umbrella term. Ethics, politics, epistemology and metaphysics went side by side with physics, biology and astronomy. As millennia passed, the collective human knowledge and scholarly labour grew, and some philosophical disciplines got their own name, cut the umbilical cord, and got to stand on their own feet.</p>
<p>There are many definitions as to what a <em>philosopher</em> is; one definition would be those who study the academic subject of philosophy in academic institutions. The German philosopher and philologist Friedrich Nietzsche wrote at length about what a philosopher really is; in his definition a philosopher is someone who creates values. Nietzsche rejected morals and universal truth as laid down by a God or higher authority; instead they are created by subjective human beings, and by philosophers in particular.</p>
<blockquote><p>Perhaps [the genuine philosopher] himself must have  been critic and sceptic and dogmatist and historian and also poet and collector and traveller and solver of riddles and moralist and seer and &#8220;free spirit&#8221; and almost everything in order to pass through the whole range of human values and value feelings [...] But all these are merely preconditions of his task: this task itself demands something different &#8211; it demands that he <em>create values</em>.</p>
<p>(Friedrich Nietzsche, <em>Beyond Good and Evil</em>, s. 211, Walter Kaufmann transl.)</p></blockquote>
<p>We may understand a <em>scholar</em> to be a person who processes knowledge. Good scholarship entails marshalling what has been written and studied previously, perhaps with a view to settling a question or supporting a perspective. Scientists and philosophers can make use of scholars in their work. To the extent that the scholar does more than merely process knowledge, he or she is something more than a scholar.</p>
<p>In contrast, a <em>scientist</em>, as we understand him or her today, is someone who combines scholarship and primary investigation (in the form of calculation, experimentation, measurement and so on) in order to create models of nature and the world, in order to gain the power to explain. The classical scientific process involves repeated refinement of hypotheses until one that cannot be proven wrong has been found.</p>
<p>Today, science, which formerly was known as <a href="http://en.wikipedia.org/wiki/Natural_philosophy">natural philosophy</a>, has grown enormously large, and to most people probably appears to have much greater value than philosophy. The scientific mindset is widely appreciated and respected throughout the world &#8212; perhaps too respected. Scientists learn as one of their highest virtues to be skeptical and to reject assertions that are made without a basis in measurement or theory. Paralysis by skepticism is very much a possibility. To see the danger in this, we have to recognise that a great deal of valuable things in human history have been created without such a basis &#8211; by people who have been something like the ones Nietzsche describes.</p>
<blockquote><p>The dangers for a philosopher&#8217;s development are indeed so manifold today that one may doubt whether this fruit can still ripen at all. The scope and the tower-building of the sciences has grown to be enormous, and with this also the probability that the philosopher grows weary while still learning or allows himself to be detained somewhere to become a &#8220;specialist&#8221; &#8211; so he never attains his proper level, the height for a comprehensive look, for looking around, for looking <em>down</em>. [...]</p>
<p>Indeed, the crowd has for a long time misjudged and mistaken the philosopher, whether for a scientific man and ideal scholar or for a religiously elevated, desensualized, &#8220;desecularized&#8221; enthusiast and sot of god. And if a man is praised today for living &#8220;wisely&#8221; or &#8220;as a philosopher&#8221;, it hardly means more than &#8220;prudently and apart&#8221;.</p>
<p>(Friedrich Nietzsche, <em>Beyond Good and Evil</em>, s. 205, Walter Kaufmann transl.)</p></blockquote>
<p>In fact, scientists today do not, in my experience, work like the ideal scientist described above. Scientists often use their own judgment and their own values in order to influence how their science is to be used. Einstein and Oppenheimer had opinions about the use and misuse of the nuclear bomb. Creators of vaccine may have opinions on how it is to be distributed and may be able to influence this. Sometimes these value statements made by scientists are pure judgments, applications of an ethic that the scientists already believe in. However, sometimes the situation is so new that the scientists effectively have to create values. To the extent that they do this, these scientists dabble in ethics, morality and philosophy, but this is often overlooked, as is the fact that scientific method itself was created by philosophy.</p>
<p>Nietzsche calls for philosophers to make use of scientists and artists, and create values in the service of mankind. He calls for a new recognition of the true role and dignity of philosophy, which does not at all need to mean a reduction of the value of science, but rather an expansion of the whole system. Philosophy stands naturally above science and scholarship and uses them as its tools. The activity of creating values based on philosophical insight by necessity goes on constantly and should not be confined to little nooks in the margins of society. The full extent of and need for this activity needs to be acknowledged.</p>
<p>Has the situation changed since Nietzsche wrote <em>Beyond Good and Evil </em>in 1886?</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=831&amp;md5=0d073b281ac6d562856b710a6ca4d8f2" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/values-1-philosophy-science-and-their-relationship/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Type theory</title>
		<link>http://www.monomorphic.org/wordpress/type-theory/</link>
		<comments>http://www.monomorphic.org/wordpress/type-theory/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 21:23:32 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[academic]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming languages]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=774</guid>
		<description><![CDATA[One of the most interesting things I&#8217;ve been studying in the past year has been type theory. I feel that type theory is an area where a lot of separate fields can come together in a good design. In strongly typed languages, language implementation efficiency, syntax and language semantics all leave essential marks in the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most interesting things I&#8217;ve been studying in the past year has been type theory. I feel that type theory is an area where a lot of separate fields can come together in a good design. In strongly typed languages, language implementation efficiency, syntax and language semantics all leave essential marks in the type system, and conversely, flaws in the type system can impair all of them.</p>
<p>Type theory was invented by <a href="http://en.wikipedia.org/wiki/Bertrand_Russell">Bertrand Russell</a> as a solution to his own <a href="http://en.wikipedia.org/wiki/Russell%27s_paradox">well-known paradox</a>, which cast doubt on the foundations of mathematics upon its discovery.  The problem posed by the paradox is essentially: given a set of all sets that do not contain themselves, does that set contain itself? Another interesting problem arising from self-referentialism. Type theory resolves this issue by classifying the members of sets according to some type, and in such a system a set definition like this one is not permissible.</p>
<p>(The drama surrounding Russell&#8217;s paradox and <a href="http://en.wikipedia.org/wiki/Principia_Mathematica">Principia Mathematica</a> can now also be read in the form of a &#8220;logicomix&#8221; <a href="http://www.amazon.com/Logicomix-Search-Truth-Apostolos-Doxiadis/dp/1596914521">graphic novel</a> by Doxiadis et al!)</p>
<p>Type theory did not end its life as a metamathematical hack that solved a set theoretical problem. <a href="http://cacm.acm.org/magazines/2010/2/69367-type-theory-comes-of-age/fulltext">It has now come of age.</a> Type systems are, of course, at the heart of the development of many modern programming languages. Java, C#, Lisp, ML and Haskell are but a few of the ones that depend completely on a nontrivial type system. (Even though C and C++ have type systems, they are kept in a crippled state by the fact that the programmer is allowed to ignore their commandments at will.)</p>
<p>What is the benefit of a type system in a programming language? In the words of <a href="http://www.cis.upenn.edu/~bcpierce/">Benjamin Pierce</a>,</p>
<blockquote><p>A type system is a syntactic method for automatically checking the  absence of certain erroneous behaviors by classifying program phrases  according to the kinds of values they compute.</p></blockquote>
<p>So, generally speaking, a type system helps distinguish correct programs from incorrect programs. The parser also does part of this job, of course, since many programs that cannot compile will not parse. But there are programs that are syntactically correct but at the same time semantically unsound according to the evaluation rules of the language. Consider the following Java statement:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">T x <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> U<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This is clearly syntactically acceptable, but is it semantically valid? In order for it to be, either U needs to be the same type as T, or a subtype of T. But Java programmers are free to define new subtypes of existing types in source code. In order for the parser to check the correctness of the assignment, it seems that either the grammar would become enormously large, or it would place awkward restrictions on Java syntax. So we leave more refined aspects of correctness to the type checker, which is applied later, post-parsing.</p>
<p>What does a type system look like? As used in programming languages today, a type system consists of a set of <em>typing judgments</em>. The judgments can be stacked together to form the <em>typing derivation</em> of an expression in the language. Every expression normally has a unique typing derivation, and when a type can be derived, we call the expression well typed. As Benjamin Pierce&#8217;s formulation suggests, each typing rule makes some assumptions about the kinds of values that constitute the various parts of an expression, and then says something about the kind of value that will be computed by the expression as a whole.</p>
<p>Type systems can look prohibitive at first sight, since they use quite a few algebraic symbols. But in general, the structure and interrelationships between the symbols is the most important thing to discern from them, and focussing on this aspect makes reading them much easier.</p>
<p>In the following mini-type system, typing judgments will have the form <img src='http://www.monomorphic.org/wordpress/wp-content/latex/4e7/4e703057592a70077f2894e4f4643f16-ffffff-000000-0.png' alt='\Gamma \vdash t: T' title='\Gamma \vdash t: T' class='latex' />, where <img src='http://www.monomorphic.org/wordpress/wp-content/latex/077/07710b5c43702a8bb7b9104eacc6ba71-ffffff-000000-0.png' alt='\Gamma' title='\Gamma' class='latex' /> is a <em>typing context</em>, <img src='http://www.monomorphic.org/wordpress/wp-content/latex/e35/e358efa489f58062f10dd7316b65649e-ffffff-000000-0.png' alt='t' title='t' class='latex' /> is a <em>term</em>, and <img src='http://www.monomorphic.org/wordpress/wp-content/latex/b9e/b9ece18c950afbfa6b0fdbfa4ff731d3-ffffff-000000-0.png' alt='T' title='T' class='latex' /> is a type. Terms are essentially fragments of the source code, and from smaller terms we can construct larger terms using syntactic forms. So for example, if <strong>a</strong>, <strong>b</strong> and <strong>c</strong> are terms, then we might use the if-syntax to construct the larger term</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>b<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>c<span style="color: #009900;">&#125;</span></pre></div></div>

<p>in a java-like language. The typing context <img src='http://www.monomorphic.org/wordpress/wp-content/latex/077/07710b5c43702a8bb7b9104eacc6ba71-ffffff-000000-0.png' alt='\Gamma' title='\Gamma' class='latex' /> is essentially just a map, mapping already typed terms to the types assigned to them. As we type increasingly large terms, we gradually add more information to the typing context. The symbol <img src='http://www.monomorphic.org/wordpress/wp-content/latex/7f5/7f5788d56bd683ffba59eed8ad6ecbe6-ffffff-000000-0.png' alt='\vdash' title='\vdash' class='latex' /> is just notational convention and has no particular meaning. The judgment <img src='http://www.monomorphic.org/wordpress/wp-content/latex/4e7/4e703057592a70077f2894e4f4643f16-ffffff-000000-0.png' alt='\Gamma \vdash t: T' title='\Gamma \vdash t: T' class='latex' /> is read as &#8220;term t has type T in typing context <img src='http://www.monomorphic.org/wordpress/wp-content/latex/077/07710b5c43702a8bb7b9104eacc6ba71-ffffff-000000-0.png' alt='\Gamma' title='\Gamma' class='latex' />&#8220;.</p>
<p>A fragment of a minimal system might look like the following.</p>
<img src='http://www.monomorphic.org/wordpress/wp-content/latex/d7a/d7a8b6c7986eb44d76281142c2a69410-ffffff-000000-0.png' alt='  \inferrule  {  \Gamma \vdash t_1 : T  \and  \text{vartype}(v) = U  \and  T &lt;: U  }  {  \Gamma \vdash v = t_1 : U  }  {  \text{T-ASGN}  }  \\  \vspace{5mm}  \\   \inferrule  {  \Gamma \vdash t_1 : \text{Int}  \and  \Gamma \vdash t_2 : \text{Int}  }  {  \Gamma \vdash t_1~\textsf{intBinop}~t_2 : \text{Int}  }  {  \text{T-BINOP}  }   \\  \vspace{5mm}  \\   \inferrule  {  \Gamma \vdash t_1 : \text{Bool}  \and  \Gamma \vdash t_2 : T_0  \and  \Gamma \vdash t_3 : T_0  }  {  \Gamma \vdash \text{if}~t_1~\text{then}~t_2~\text{else}~t_3 : T_0  }  {  \text{T-IF}  }  ' title='  \inferrule  {  \Gamma \vdash t_1 : T  \and  \text{vartype}(v) = U  \and  T &lt;: U  }  {  \Gamma \vdash v = t_1 : U  }  {  \text{T-ASGN}  }  \\  \vspace{5mm}  \\   \inferrule  {  \Gamma \vdash t_1 : \text{Int}  \and  \Gamma \vdash t_2 : \text{Int}  }  {  \Gamma \vdash t_1~\textsf{intBinop}~t_2 : \text{Int}  }  {  \text{T-BINOP}  }   \\  \vspace{5mm}  \\   \inferrule  {  \Gamma \vdash t_1 : \text{Bool}  \and  \Gamma \vdash t_2 : T_0  \and  \Gamma \vdash t_3 : T_0  }  {  \Gamma \vdash \text{if}~t_1~\text{then}~t_2~\text{else}~t_3 : T_0  }  {  \text{T-IF}  }  ' class='latex' />
<p>Three typing rules have been introduced here, T-ASGN for assignments, T-IF for if-statements, and T-BINOP for binary operations on integers, like + and -.<br />
Every rule has the same structure: above the line, assumptions that must hold true for the rule to be applied; below the line, the conclusion we may draw if the assumptions are true.</p>
<p>Above, the following example was given.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">T x <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> U<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Using T-ASGN, we can type an assignment statement like this one. The assumption T &lt;: U says that T is a subtype of U. We have also assumed a lookup function <strong>vartype</strong> which gives the declared type of the variable we assign to. In English, we can read the rule T-ASGN as saying: &#8220;Assuming that the type of the right hand side is a subtype of, or the same type as, the declared type of the variable, the assignment will evaluate to a value that has the declared type of the variable&#8221;. Of course not all programming languages implement assignment in this way.</p>
<p>In the T-BINOP rule, we must of course substitute an actual operation on integers for the special word <strong>intBinop</strong> for it to be valid. For addition, the rule can be read as &#8220;Assuming that the left hand side and the right hand side are both integers, then the result is also an integer&#8221;.</p>
<p>Finally, the T-IF rule says &#8220;assuming that the truth condition is a boolean, and that the two alternative paths have the same type, then the if-statement evaluates to the same type as that of the two conditional paths&#8221;.</p>
<p>The shape of the type system follows the evaluation rules for the language quite closely, so that a well-typed term is also always possible to evaluate. We can thus avoid accepting programs that might get stuck without any valid evaluation rule at some point. (Consider what happens in Python if you try to invoke a method on an object, and the object doesn&#8217;t have a method with that name.) We are not limited to tracking just the kinds of values being computed in a type system. We can track various kinds of safety properties, such as memory regions being violated, as well, or we may track multiple properties at once. <a href="http://en.wikipedia.org/wiki/Effect_system">Type and effect systems </a>is one way of tracking both values being computed and resource violations.</p>
<p>A good source of more information on type systems applied to programming languages would be Benjamin Pierce&#8217;s <a href="http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=cm_cr_pr_product_top">Types and Programming Languages</a>.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=774&amp;md5=d3d903e1d4d5f0b5f1bc76ddf9d7f12c" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/type-theory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The cryptographic-spiritual realm</title>
		<link>http://www.monomorphic.org/wordpress/the-cryptographic-spiritual-realm/</link>
		<comments>http://www.monomorphic.org/wordpress/the-cryptographic-spiritual-realm/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 00:19:55 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[metaphors]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=769</guid>
		<description><![CDATA[Internet services and systems such as Google and Amazon usually appear to us as a visual representation of a page, as if it were taken out of some kind of printed publication. For almost all of the users, these visual qualities are all that will ever be seen. They are always present and never present, [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica} -->Internet services and systems such as Google and Amazon usually appear to us as a visual representation of a page, as if it were taken out of some kind of printed publication. For almost all of the users, these visual qualities are all that will ever be seen. They are always present and never present, because we cannot point to the place where they really reside.</p>
<p>But of course they reside somewhere. Cables and machines embody the apparition that users interact with, and these cables can be found and cut. The machines can be shut off. <em>Traceroute</em> tells me which path the data is taking. But the thread that binds the body to the spirit is thin, and the two evolve in a largely independent manner.</p>
<p>With cryptographic methods, such as the <a href="http://i2p2.de/">I2P</a> network, it is possible to hide the exact location of a system, disperse it across the fabric so widely that it cannot be excised without destroying the fabric itself.</p>
<p>The effect is the same as if the system had no physical existence at all. It now exists in a kind of spiritual realm, where it can only be touched with great difficulty.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=769&amp;md5=b148503bce069471a78b365d2c21ca0d" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/the-cryptographic-spiritual-realm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The coming politicization of mathematics and computer science</title>
		<link>http://www.monomorphic.org/wordpress/the-coming-politicisation-of-mathematics-and-computer-science/</link>
		<comments>http://www.monomorphic.org/wordpress/the-coming-politicisation-of-mathematics-and-computer-science/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 10:10:59 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[society]]></category>
		<category><![CDATA[sweden]]></category>
		<category><![CDATA[the future]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=730</guid>
		<description><![CDATA[Increasingly, ordinary people encrypt their internet communications. Some want to share files. Some are worried about the increasing surveillance and threats of surveillance of Internet data that is taking place in many corners of the world. ACTA, Hadopi, data retention would be a few examples. People may simply wish to keep their data private, even [...]]]></description>
			<content:encoded><![CDATA[<p>Increasingly, ordinary people encrypt their internet communications. Some want to share files. Some are worried about the increasing surveillance and threats of surveillance of Internet data that is taking place in many corners of the world. <a href="http://en.wikipedia.org/wiki/Anti-Counterfeiting_Trade_Agreement">ACTA</a>, <a href="http://en.wikipedia.org/wiki/HADOPI_law">Hadopi</a>, <a href="http://en.wikipedia.org/wiki/Telecommunications_data_retention">data retention</a> would be a few examples. People may simply wish to keep their data private, even in cases when the data is not objectionable. Others, hopefully not so ordinary people, have an acute need to hide from authorities of some form or another, maybe because they actually have a criminal intent, or maybe because they are regime critics in repressive countries. Maybe they are submitting data to sites like Wikileaks.</p>
<p>Various technologies have come out of academic experiments, volunteer work and government sponsored research to assist with encrypted communication. PGP/GnuPG and SSH are classic mainstays. Onion routing, as implemented in the <a href="http://www.torproject.org/">TOR</a> system, is an effective way of concealing the true origin and destination of data being sent around. Darknet systems like the <a href="http://www.i2p2.de/">I2P</a> project aim to build a complete infrastructure for an entirely new kind of Internet, piggybacking on the old one but with anonymity and encryption as first class fundamental features.</p>
<p>I think we are only at the start of a coming era of political conflicts centered around communications technology, and that more and more issues will have to be ironed out in the coming years and decades. The stakes are high. On one hand control and political stability, on the other hand individual rights and democratic progress. This is not new. One thing that I think is potentially new and interesting though, is how mathematics and computer science ought to become increasingly sensitive and political in the coming years.</p>
<p>Today disciplines like genetics and stem cell research are considered controversial research areas by some people since they touch on the very foundations of what we think of as life. Weapons research of all kinds is considered controversial for obvious reasons, and the development of a weapon on the scale of nuclear bombs would completely shift the global power structure.  One fundamental building block of communications control is the ability to encrypt and to decrypt. These abilities are ultimately limited by the frontiers of mathematical research. Innovations such as the <a href="http://www.schneier.com/blog/archives/2008/10/the_skein_hash.html">Skein hash function</a> directly affect the cryptographic power balance.</p>
<p>Most of the popular varieties of encryption in use today can be overcome, given that the adversary has sufficient computing power and time. In addition, human beings often compromise their keys, trust the wrong certificates, or act in ways that diminish the security that has been gained. Encryption is not absolute unless the fact that something has been encrypted has been perfectly hidden. Rather, it is a matter of economics, of making it very cheap to encrypt data,and very expensive for unintended receivers to decrypt it.</p>
<p>It is not possible to freeze encryption at a certain arbitrary level, or to restrict the use of it. Computers are inherently general purpose, and software designed for one purpose can almost always be used for another. If the situation is driven to its extreme, we might identify two possible outcomes: either general purpose computers are forbidden or restricted, or uncontrolled, strongly encrypted communication becomes the norm. Christopher Kullenberg has <a href="http://christopherkullenberg.se/?p=1760">touched on this topic</a> in Swedish.</p>
<p>Those who would rather not see a society where widespread encryption is commonplace would perhaps still want to have what they see as desirable effects of computerisation. In their ideal world they would pick and choose what people can do with computers, in effect giving a list of permitted and prohibited uses. But this is not how general purpose computers work. They are programmable, and people can construct software that does what they want. If the introduction of non-authorised software somehow is prohibited, and all applications must be checked by some authority, applications can still usually be used for purposes they were not designed for. This generality of purpose simply cannot be removed from computers without making them useless &#8211; at least that is how it seems today. It seems that it would take a new fundamental model of computation that selectively prohibits certain uses is needed in order to make this happen. (In order to make sure that this kind of discovery is not put to use by the &#8220;other camp&#8221;, those of us who believe in an open society should try to find it, or somehow establish the fact that it cannot be constructed.)</p>
<p>Mathematics now stands ever more closely connected with political power. Mathematical advances can almost immediately increase or decrease the resistance to information flow (given that somebody incorporates the advances into usable software). The full consequences of this are something we have yet to see.</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=730&amp;md5=8f06dae0ab2a2005708ecfc0765b4a9f" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/the-coming-politicisation-of-mathematics-and-computer-science/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Utilitarianism and computability</title>
		<link>http://www.monomorphic.org/wordpress/utilitarianism-and-computability/</link>
		<comments>http://www.monomorphic.org/wordpress/utilitarianism-and-computability/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 08:10:12 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[human condition]]></category>
		<category><![CDATA[society]]></category>
		<category><![CDATA[utilitarianism]]></category>

		<guid isPermaLink="false">http://www.monomorphic.org/wordpress/?p=717</guid>
		<description><![CDATA[I&#8217;ve started watching Michael Sandel&#8217;s Harvard lecture series on political philosophy, &#8220;justice&#8221;. In this series, Sandel introduces the ideas of major political and moral philosophers, such as Bentham, Locke, and Kant, as well as some libertarian thinkers I hadn&#8217;t heard of. I&#8217;m only halfway through the series, so I&#8217;m sure there&#8217;s other big names coming [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started watching <a href="http://en.wikipedia.org/wiki/Michael_Sandel">Michael Sandel&#8217;s</a> Harvard <a href="http://www.justiceharvard.org/">lecture series</a> on political philosophy, &#8220;justice&#8221;. In this series, Sandel introduces the ideas of major political and moral philosophers, such as Bentham, Locke, and Kant, as well as some libertarian thinkers I hadn&#8217;t heard of. I&#8217;m only halfway through the series, so I&#8217;m sure there&#8217;s other big names coming up. The accessibility of the lectures belies their substance: what starts out with simple examples and challenges to the audience in the style of Socratic method often ends up being very engaging and meaty. (Incidentally, it turns out that Michael Sandel has also become fairly famous in Japan, with his lectures having been aired on NHK, Japan&#8217;s biggest broadcaster.)</p>
<p>One of the first schools of thought he brings up is utilitarianism, whose central idea appears to be that the value of an action is placed in the consequences of that action, and not in anything else, such as the intention behind the action, or the idea that there are certain categories of actions that are definitely good or definitely evil. What causes the greatest happiness for the greatest number of people is good, simple as that. From these definitions a huge amount of difficulty follows immediately. For instance, is short-term happiness as good as long-term happiness? How long term is long term enough to be valuable? Is the pleasure of ignorant people as valuable as that of enlightened people? etc. But let&#8217;s leave all this aside and try to bring some notion of computability into the picture.</p>
<p>Assume that we accept that &#8220;the greatest happiness for the greatest number of people&#8221; is a good maxim, and we seek to achieve this. We must weigh the consequences of actions and choices to maximise this value. But can we always link a consequence to the action, or set of actions, that led to it? Causality in the world is a questionable idea since it is a form of inductive knowledge. Causality in formal systems and in the abstract seems valid, since it is a matter of definition, but causality in the empirical, in the observed, seems to always be a matter of correlation: if I observe first A and then B sufficiently many times, I will infer that A implies B, but I have no way of knowing that there are not also other preconditions of B happening (for instance, a hitherto invisible particle having a certain degree of flux). It seems that I cannot reliably learn what causes what, and then, how can I predict the consequences of my actions? Now, suddenly, we end up with an epistemological question, but let us leave this too aside for the time being. Perhaps epistemological uncertainty is inevitable.</p>
<p>I still want to do my best to achieve the greatest happiness for the greatest number of people, and I accept that my idea of what actions cause what consequences is probabilistic in nature. I have a set of rules, A1 =&gt; B1, A2 =&gt; B2&#8230; An =&gt; Bn which I trust to some extent and I want to make the best use of them. I have now ended up with a <a href="http://en.wikipedia.org/wiki/Automated_planning_and_scheduling">planning problem</a>. I must identify a sequence of actions that maximises that happiness variable. But my brain has limited computational ability, and my plan must be complete by time <em>t</em> in order to be executable. Even for a simple problem description, the state space that planning algorithms must search becomes enormous, and identifying the plan, or a plan, that maximises the value is simply not feasible. Furthermore, billions of humans are planning concurrently, and their plans may interfere with each other. A true computational utilitarian system would treat all human individuals as a single system and find, in unison, the optimal sequence of actions for each one to undertake. This is an absurd notion.</p>
<p>This thought experiment aside, if we are utilitarianists, should we enlist the increased computing power that has recently come into being to help manage our lives? Can it be used to augment (presumably it can not supplant) human intuition for how to make rapid choices from huge amounts of data?</p>
 <p><a href="http://www.monomorphic.org/wordpress/?flattrss_redirect&amp;id=717&amp;md5=825db8f9dabf1fd9e3068e57ed17d6d6" title="Flattr" target="_blank"><img src="http://www.monomorphic.org/wordpress/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.monomorphic.org/wordpress/utilitarianism-and-computability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

