<?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>Geek by Day &#187; computers</title>
	<atom:link href="http://www.geekbyday.com/category/computers/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geekbyday.com</link>
	<description>A blog with no particularly interesting tagline</description>
	<lastBuildDate>Wed, 08 Jun 2011 20:17:53 +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>Collaborative Code Review</title>
		<link>http://www.geekbyday.com/2011/06/08/collaborative-code-review/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=collaborative-code-review</link>
		<comments>http://www.geekbyday.com/2011/06/08/collaborative-code-review/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 20:17:53 +0000</pubDate>
		<dc:creator>Mason</dc:creator>
				<category><![CDATA[computers]]></category>

		<guid isPermaLink="false">http://www.geekbyday.com/?p=135</guid>
		<description><![CDATA[It occurred to me that despite the number of times I&#8217;ve been asked to talk about what my Masters thesis work is all about, I&#8217;ve never really bothered to sit down and describe it outside of my own personal notes and drafts. So I&#8217;m going to talk a bit about the motivations and ideas behind [...]]]></description>
			<content:encoded><![CDATA[<p>It occurred to me that despite the number of times I&#8217;ve been asked to talk about what my Masters thesis work is all about, I&#8217;ve never really bothered to sit down and describe it outside of my own personal notes and drafts. So I&#8217;m going to talk a bit about the motivations and ideas behind what I&#8217;m doing, since the actual technical side isn&#8217;t particularly interesting.</p>
<p>The idea of code review is a very simple one: if you have someone else look over your code, they can probably help you make it better. Many software companies incorporate this into their development workflow, and it is not uncommon for code review to be mandatory before new code is accepted. While this works well in industry (not to say that it is without faults), it relies on the assumption that every developer writing code is also a code reviewer. If all code gets a second set of eyes and you assume that reviewing code is a much less time-consuming task than writing it in the first place, then the overhead of mandatory code review is fairly palatable.</p>
<p>When we look instead at teaching a moderately large programming class with a significant amount of programming work, it becomes essentially impossible for the teaching staff to look over student code with any amount of detail beyond superficial correctness, code style, and maybe some high-level concepts. While this is depressing, it is also inevitable when you look at the numbers (we&#8217;ll use some approximate numbers from a recent iteration of MIT&#8217;s 6.005: Elements of Software Construction):</p>
<p style="text-align: left; padding-left: 30px;">100 students × 3 projects × 3000 lines per project / 3 students per group<br />
= 300,000 lines of code</p>
<p style="text-align: left; padding-left: 30px;">300,000 lines of code / 4 TAs / 15 weeks per semester<br />
= 5,000 lines of code per TA per week</p>
<p style="text-align: left;">I&#8217;m not comfortable with the idea of looking at 1,000 lines of code per day as a TA. That&#8217;s not even including the smaller problem sets we had throughout semester.</p>
<p style="text-align: left;">How can we make sure that student code gets looked over and corrected?</p>
<p style="text-align: left;">One approach is to bring in more people by bringing the students into the review process. This has three advantages: reducing the load on the teaching staff, teaching the students how to review code, and exposing students to each other&#8217;s code and comments. It is easy to imagine a class where after an assignment is due, each student is then given the task of reviewing some amount of code written by classmates, after which the feedback would be collected and presented to the students for their own benefit, and also to the teaching staff to facilitate the grading process.</p>
<p style="text-align: left;">While existing review systems are built for small teams of experienced developers whose primary goal is to improve code quality, our problem is fundamentally different. A classroom code review tool needs to be built for a large group of students of varying levels together with a small group of (hopefully experienced) teaching staff. Furthermore, while code quality is important, the primary goal in a classroom is to teach the students how to be better software engineers. By designing a few key features into the system with the characteristics of our reviewer population in mind, we can accelerate and improve both the quality of the code review and the quality of the student learning that result:</p>
<ul>
<li>Code partitioning &#8211; Because it would be unfeasible to simply distribute an entire project to a student for review, student code needs to be partitioned into small &#8220;chunks&#8221;, perhaps on the order of 50 lines each, to distribute to peers.</li>
<li>Discussion support &#8211; Users can reply and vote on existing comments, allowing students to directly communicate with each other in the context of code.</li>
<li>Reputation system &#8211; Users are rewarded for high-quality comments, incentivizing  participation. This can be in the form of &#8220;karma&#8221; points, achievements or badges, or both.</li>
</ul>
<p style="text-align: left;">The other approach is to bring in better tools to help streamline and automate the review process as much as possible. This is something that doesn&#8217;t quite exist yet in the wild. Our current state-of-the-art tools to ensuring code quality fall largely into two categories: completely automated systems like testing frameworks and static analysis, and completely user-driven tools like existing code review systems (<a href="http://code.google.com/p/gerrit/" target="_blank">Gerrit</a>, <a href="http://code.google.com/p/rietveld/" target="_blank">Rietveld</a>, <a href="http://www.reviewboard.org/" target="_blank">Review Board</a>).</p>
<p style="text-align: left;">Ideally, our tool would sit between these two extremes and aim to increase the efficiency and quality of the code review by automating tedious work and gathering relevant data. Our users are experience-rich and time-poor, so the it is the primary responsibility of the tool to decide how best to target their attention.</p>
<ul>
<li>Automatically generated feedback &#8211; Existing static analysis tools (<a href="http://checkstyle.sourceforge.net/" target="_blank">Checkstyle</a>, <a href="http://findbugs.sourceforge.net/" target="_blank">FindBugs</a>) can often generate many of the same comments that human reviewers would otherwise leave. Why not add the output of those tools into the same interface that human reviewers use and allow users to upvote/downvote/reply to them.</li>
<li>Clustering similar code &#8211; If a piece of code is unfamiliar to the reviewer, it could be extremely helpful to look at a piece of similar code somewhere else in the system that has already been reviewed and annotated.</li>
</ul>
<p>In short, my thesis work is to improve both the code review process itself and software engineering education by adding students (and others) into the review process and giving them an intelligent, easy-to-use tool to make that process as easy and streamlined as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekbyday.com/2011/06/08/collaborative-code-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming is a Conversation</title>
		<link>http://www.geekbyday.com/2010/09/21/programming-is-a-conversation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programming-is-a-conversation</link>
		<comments>http://www.geekbyday.com/2010/09/21/programming-is-a-conversation/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 15:41:03 +0000</pubDate>
		<dc:creator>Mason</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[musings]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.geekbyday.com/?p=110</guid>
		<description><![CDATA[This semester I have the pleasure of teaching a recitation of about 15 students the basics of software engineering as part of my TA duties (this Master&#8217;s degree won&#8217;t pay for itself, sadly). The course, 6.005, is taught in Java and is more or less the replacement for the old 6.170 Software Engineering Lab that [...]]]></description>
			<content:encoded><![CDATA[<p>This semester I have the pleasure of teaching a recitation of about 15 students the basics of software engineering as part of my TA duties (this Master&#8217;s degree won&#8217;t pay for itself, sadly). The course, 6.005, is taught in Java and is more or less the replacement for the old 6.170 Software Engineering Lab that MIT once offered.</p>
<p>One of the points I made during the first class was that programming is more about a conversation with other people rather than a conversation with a machine.</p>
<p>When one first starts learning to program, it really does feel like you are somehow talking to a computer. You type some words in a text file, save it, and when you run it, your silicon companion will either helpfully respond with the correct answer or squawk at you irritably and tell you to try again. For small programs that never grow beyond one-off scripts and toy projects, this is about the highest level of discourse that really ever gets reached.</p>
<p>As your projects grow in both the amount of work that needs to be done and in the time it takes to complete them, it becomes increasingly important to write your code not just as instructions to a computer, but as documentation to anyone else working on that code. You are just as much, if not more, telling the computer what to do as you are telling the next person to read the code what you mean to do. Sometimes, the next person to read the code might even be yourself in the future, well after you have forgotten the thought process behind the original code.</p>
<p>I&#8217;ve found that thinking of programming this way has inevitably led me to write clearer, better code and clearer, better comments. I imagine a colleague sitting next to me and then I pretend that I&#8217;m not allowed to communicate in any way other than the contents of the text file that I am editing. If the code is obvious, then my intentions are clear. When I do something that looks funny, or pause to think about a decision (perhaps some trade-off or compromise), I imagine the furrowed brow and confused expression on my friend&#8217;s face. These are then quickly remedied with an illuminating comment or bit of documentation.</p>
<p>Writing clear, understandable code isn&#8217;t a once-over kind of process after the fact, and it doesn&#8217;t have to be difficult either. I&#8217;ve found that by keeping my imaginary friend in the back of my head while I do my work, the output is inevitably better for myself and for others. Or maybe this is all just an excuse to justify having an imaginary friend.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekbyday.com/2010/09/21/programming-is-a-conversation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Better Font</title>
		<link>http://www.geekbyday.com/2009/02/23/a-better-font/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-better-font</link>
		<comments>http://www.geekbyday.com/2009/02/23/a-better-font/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:46:57 +0000</pubDate>
		<dc:creator>Mason</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[consolas]]></category>
		<category><![CDATA[courier new]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://www.geekbyday.com/?p=80</guid>
		<description><![CDATA[This is going to be a quick post about a tiny detail that I feel makes for a big increase in happiness for a lot of people. A lot of computer users, when using text editors or any other application that use monospaced (having the same width for every character, useful for programming and related [...]]]></description>
			<content:encoded><![CDATA[<p>This is going to be a quick post about a tiny detail that I feel makes for a big increase in happiness for a lot of people.</p>
<p>A lot of computer users, when using text editors or any other application that use monospaced (having the same width for every character, useful for programming and related tasks) fonts to render text  (source code, plain text, e-mails, markup, etc.), stick with the default font.  On some platforms, notably Mac OS X and most modern Linux distributions, this default font is a fairly reasonable and attractive typeface like Monaco or Monospace.  On Windows XP and Vista, however, the default monospaced is Courier New.</p>
<div id="attachment_90" class="wp-caption aligncenter" style="width: 510px"><img src="http://www.geekbyday.com/wp-content/uploads/2009/02/couriernew10.png" alt="Courier New, 10pt" title="Courier New, 10pt" width="500" height="305" class="size-full wp-image-90" /><p class="wp-caption-text">Courier New, 10pt</p></div>
<p>Recently, Microsoft released several new fonts with its new operating system, Vista.  One of these fonts is a monospaced font specifically designed for programming, called Consolas.  This font, and a few other nice fonts, is available by default in Vista and Office 2007, and can also be downloaded as part of the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466&amp;displaylang=en">Office Compatibility Pack</a> for free.</p>
<div id="attachment_89" class="wp-caption aligncenter" style="width: 510px"><img src="http://www.geekbyday.com/wp-content/uploads/2009/02/consolas10.png" alt="Consolas, 10pt" title="Consolas, 10pt" width="500" height="268" class="size-full wp-image-89" /><p class="wp-caption-text">Consolas, 10pt</p></div>
<p>Isn&#8217;t that better?</p>
<p>The only caveat is that Consolas is designed with ClearType font smoothing in mind, and if you do not have ClearType enabled, then things will look very ugly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekbyday.com/2009/02/23/a-better-font/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Timegrid</title>
		<link>http://www.geekbyday.com/2007/06/04/timegrid/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=timegrid</link>
		<comments>http://www.geekbyday.com/2007/06/04/timegrid/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 03:10:09 +0000</pubDate>
		<dc:creator>Mason</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[timegrid]]></category>
		<category><![CDATA[urop]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://scripts.mit.edu/~masont/blog/?p=17</guid>
		<description><![CDATA[This summer, I&#8217;m working as a UROP (Undergraduate Research Opportunity) at MIT&#8217;s CSAIL. I don&#8217;t think I&#8217;ve ever made a post about my actual project, Timegrid, so I think I&#8217;ll do that now. My task is to design and develop a client-side Javascript framework that takes event data in some format (iCal, XML, etc.) and [...]]]></description>
			<content:encoded><![CDATA[<p>This summer, I&#8217;m working as a UROP (Undergraduate Research Opportunity) at MIT&#8217;s CSAIL.  I don&#8217;t think I&#8217;ve ever made a post about my actual project, Timegrid, so I think I&#8217;ll do that now.</p>
<p>My task is to design and develop a client-side Javascript framework that takes event data in some format (iCal, XML, etc.) and renders it out to a number of different, configurable, dynamic views.  What kind of views will Timegrid support?  For starters, it will support all of the views that Google Calendar is currently capable of: weekly, monthly, etc.  Timegrid is more flexible than Google Calendar though.  Imagine that you want to render a table of events happening in various locations, and you want each column to represent a different room, and each row to represent a starting time.  Timegrid will be able to handle that as well.</p>
<p>Timegrid is designed to be easily configurable, incredibly flexible and customizable, clean, and beautiful.  Good thing I have all summer to work on it.</p>
<p><a href="http://simile.mit.edu/timegrid" title="Timegrid" target="_blank">Timegrid Project Page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekbyday.com/2007/06/04/timegrid/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Some AJAX Libraries</title>
		<link>http://www.geekbyday.com/2006/05/17/some-ajax-libraries/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=some-ajax-libraries</link>
		<comments>http://www.geekbyday.com/2006/05/17/some-ajax-libraries/#comments</comments>
		<pubDate>Wed, 17 May 2006 20:05:45 +0000</pubDate>
		<dc:creator>Mason</dc:creator>
				<category><![CDATA[computers]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://scripts.mit.edu/~masont/blog/?p=6</guid>
		<description><![CDATA[At work today, my boss asked me to write a tag library for Spring, and in the process, I found these two really neat Javascript libraries that reduce a lot of the tedium of writing an AJAX (Asychronous Javascript And XML) web application. Prototype &#8211; A fairly large (~50kb) Javascript library that defines several classes [...]]]></description>
			<content:encoded><![CDATA[<p>At work today, my boss asked me to write a tag library for Spring, and in the process, I found these two really neat Javascript libraries that reduce a lot of the tedium of writing an AJAX (Asychronous Javascript And XML) web application.</p>
<ul>
<li><a title="Prototype" href="http://prototype.conio.net/">Prototype</a> &#8211; A fairly large (~50kb) Javascript library that defines several classes to make your life easier.  There are many functions provided that simply reduce the amount of typing you have to do, and even Ruby-style closures for lists, through the Enumeration class.  Of course, it also provides some great classes for AJAX tasks as well.  However, be warned, there is very little official documentation for Prototype.</li>
<li><a title="script.aculo.us" href="http://script.aculo.us/">script.aculo.us</a> &#8211; A Javascript library that layers itself on top of Prototype and adds a plethora of eye candy.  Some of the effects it includes are: drag &#038; drop support, fading, sliding panels, and highlighting.</li>
</ul>
<p>Working with either library is extremely pleasant, especially when compared to the task of manually coding all of the functionality that they provide for free.  Also, I&#8217;ve seen the end results on many websites and they look great.  Highly recommended.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekbyday.com/2006/05/17/some-ajax-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

