<?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>bob congdon &#187; 2010 &#187; February</title>
	<atom:link href="http://bobcongdon.net/blog/2010/02/feed/" rel="self" type="application/rss+xml" />
	<link>http://bobcongdon.net/blog</link>
	<description>Bob blogs. Blog, Bob, blog!</description>
	<lastBuildDate>Mon, 07 Nov 2011 16:48:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Why or Why Not Objective-C?</title>
		<link>http://bobcongdon.net/blog/2010/02/why-or-why-not-objective-c/</link>
		<comments>http://bobcongdon.net/blog/2010/02/why-or-why-not-objective-c/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 08:30:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bobcongdon.net/blog/2010/02/why-or-why-not-objective-c/</guid>
		<description><![CDATA[My friend Pete recently started developing apps for the iPhone using Objective-C and loves it: I can&#8217;t believe we all used C++ when Objective-C was sitting there. I don&#8217;t care that message passing is slower1. It&#8217;s f*cking genius. Objective-C has been around for about as long as C++, why isn&#8217;t it more popular? The simple [...]]]></description>
			<content:encoded><![CDATA[<p>My friend Pete recently started developing apps for the iPhone using Objective-C and <a href="http://twitter.com/PeteLyons/status/9690460519">loves it</a>:</p>
<blockquote><p>I can&#8217;t believe we all used C++ when Objective-C was sitting there.  I don&#8217;t care that message passing is slower<sup>1</sup>.  It&#8217;s f*cking genius.</p></blockquote>
<p><a href="http://en.wikipedia.org/wiki/Objective-C">Objective-C</a> has been around for about as long as C++, why isn&#8217;t it more popular? The simple answer is that early on when object-oriented programming was becoming popular, C++ got into the hands of more developers than Objective-C.</p>
<p><a href="http://www.riverblade.co.uk/blog.php?archive=2009_10_01_archive.xml#2836931512918912913"><img src="http://www.bobcongdon.net/images/objective_c_thumb.jpg" border="0" alt="" /></a></p>
<p>The first C++ compiler called <a href="http://en.wikipedia.org/wiki/Cfront">Cfront</a> generated C code. The end result was code that just about any C compiler could compile. Shortly after, inexpensive native C++ compilers such as Zortech appeared. This was followed by vendor support from companies like Microsoft, Borland, Sun, etc.</p>
<p>In contrast, Objective-C was originally a product from a single company PPI (aka <a href="http://en.wikipedia.org/wiki/Stepstone">Stepstone</a>). NeXT licensed the technology for NeXTstep in the late 80s but never developed into a large enough market for most developers. When NeXT was purchased by Apple, the same language and runtime were used for Mac OS X and eventually the iPhone. Certainly if this hadn&#8217;t happened Objective-C would be little more than a historical footnote, not a mainstream language.</p>
<p>There&#8217;s another issue when discussing Objective-C: portability. It was used by NeXTstep, now Mac OS X and nonexistent elsewhere. What happens when you want your code to run on other platforms?</p>
<p>When we developed Improv for NeXT we wrote the UI in Objective-C, everything else in C++. The usage of C++ was partly historical since a lot of the code started out on OS/2. But we retained this separation: source files continued to be either pure Objective-C or pure C++. There was a thin facade layer between the two. We also developed an application called Presentation Builder which produces graphs and diagrams for Improv. It was entirely written in Objective-C. When we ported Improv to Windows (and Mac for a while), we were able to retain the back-end code and rewrite the UI in C++. But we couldn&#8217;t reuse any of the Presentation Builder code since there was no Objective-C compiler for Windows at the time. We had to rewrite it from scratch. In fact, we couldn&#8217;t even salvage the Presentation Builder file format since relied on the AppKit serialization format which, as far as I know, NeXT never documented. Since Presentation Builder relied heavily on Display Postscript, we still would have had quite a bit of work to port it but we would have been able to salvage some of the code.</p>
<p>Apple&#8217;s current <a href="http://www.carbondev.com/site/?page=64-bit+Carbon" class="broken_link"> recommendations</a> for Mac OS X developers is to write UI in Objective-C (Cocoa) and use anything you like for the rest. So what does Apple use for their own cross-platform apps? I&#8217;ve read that iTunes is more-or-less pure C++ but much of Safari is written in Objective-C, even on Windows. So Apple must have Objective-C tools (and frameworks) for Windows.</p>
<p>My personal take on Objective-C is that while it&#8217;s not as &#8220;pretty&#8221; as C++ it&#8217;s also much easier to learn. Objective-C is clearly an add-on to C rather than an attempt to define a new language. Objective-C syntax is derived from Smalltalk and message passing is explicit in the language. In C++ method calls use the same syntax as accessing struct members in C. But language syntax is secondary. The real beauty of developing in Objective-C isn&#8217;t just the language — it&#8217;s the AppKit/Cocoa frameworks. And a big part of that is the late-bound dynamic nature of the language, something that&#8217;s still hard to do in C++.</p>
<ol>
<li><em>Message passing in Objective-C isn&#8217;t always <a href="http://www.mikeash.com/pyblog/performance-comparisons-of-common-operations.html">slower</a> than C++ virtual method calls.</em></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://bobcongdon.net/blog/2010/02/why-or-why-not-objective-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twenty Years!</title>
		<link>http://bobcongdon.net/blog/2010/02/twenty-years/</link>
		<comments>http://bobcongdon.net/blog/2010/02/twenty-years/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 08:30:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bobcongdon.net/blog/2010/02/twenty-years/</guid>
		<description><![CDATA[Twenty years ago today was my first day at Lotus. Normally I wouldn&#8217;t recall a milestone like this but I thoroughly enjoyed working for Lotus back in those days. It was an upbeat and successful company and I worked on fantastic product with a terrific team. So pardon me for indulging in a bit of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bobcongdon.net/images/improv.jpg" align="right" />Twenty years ago today was my first day at Lotus. Normally I wouldn&#8217;t recall a milestone like this but I thoroughly enjoyed working for Lotus back in those days. It was an upbeat and successful company and I worked on fantastic product with a terrific team. So pardon me for indulging in a bit of nostalgia&#8230;</p>
<p>A few months prior, a headhunter called me at home. I was expected another call so picked up rather than letting it go to voice mail (no Caller ID back then). He mentioned several people I had worked with before wouldn&#8217;t tell me who had passed along my name. He pitched a job at Lotus working on a PC database project. I wasn&#8217;t happy with my current job but I didn&#8217;t really want to write PC software. A week later he called about another job at Lotus. This other team was working on a secret project that was supposed to be really cool and was a closer match to my interests. So I scheduled an interview. The interviews went well and I got excited about the project while talking to the team. When I found out that they were writing software for NeXT, I really wanted the job. The code name was &#8220;BackBay&#8221; which became <a href="http://simson.net/clips/91.NW.Improv.html">Lotus Improv</a>.</p>
<p>When I accepted the job offer I asked the headhunter again for the name of the person who passed along my name, it turned out to be a co-worker. Her <a href="http://www.bobzblog.com/">husband</a> worked for Lotus. Small world.</p>
<p>Prior to Lotus, I developed software for Unix workstations; primarily <a href="http://en.wikipedia.org/wiki/Computer-aided_designware" class="broken_link">CAD software</a>. On my first day during new employee orientation I felt like a fish out of water. All of the other new employees were conversant in Lotus products: 123, Manuscript, Agenda&#8230; I&#8217;d never used a spreadsheet before and knew next to nothing about PC software. What was I doing there? But it turned out okay; at least in the short term. The Improv team was run like a startup, separate from the rest of Lotus and developed solely on NeXT.</p>
<p>After orientation, I settled into my new office. On my desk was a brand new <a href="http://en.wikipedia.org/wiki/NeXTcube">NeXT cube</a>. After setting it up I quickly discovered its beauty wasn&#8217;t skin deep. Before Lotus, I had SGI and Sun workstations on my desk. But despite their high-end graphical capabilities, GUI-based apps were nearly non-existent. Most of my day was spent in shell windows using emacs, gdb, etc. We wrote design specs using text-based formatters such as <a href="http://en.wikipedia.org/wiki/Troff">troff</a> or <a href="http://en.wikipedia.org/wiki/Scribe_(markup_language)">scribe</a>. When I needed something better, I&#8217;d write specs on my Mac. Conversely, developing software on Unix was a joy but developing for the Mac back then was <a href="http://en.wikipedia.org/wiki/Mac_OS_memory_management">painful</a>. No multi-tasking, no virtual memory, etc. In contrast, NeXT had the best of both worlds for users and developers &mdash; rich graphical apps like a Mac on a Unix-based OS. For example, the NeXT Mail application was beautiful and powerful. It let you send richly formatted text with pictures and file attachments. It may not sound like much today but in the days before HTML and MIME, just having email access, much less email with rich content, was uncommon.</p>
<p>Working on a &#8220;secret&#8221; project with NeXT was a lot of fun. NeXT had started out in the education market but was trying to move into the enterprise. Steve Jobs had come out to Lotus and got a demo of an early Improv prototype running on OS/2. He convinced Lotus management to build the first release on NeXT. The team had been working on the NeXT release for less than a year when I started. Jobs would come out to Cambridge occasionally to check on our progress.</p>
<p>All of our hard work culminated in the <a href="http://groups.google.com/group/comp.sys.next/browse_thread/thread/618222dd54df8ac6/8064b3983256ed14?pli=1">first public demonstration</a> of Improv as part of a NeXT product announcement at Davies Symphony Hall in San Francisco. Ashton-Tate and Informix also announced spreadsheet products for NeXT at the same event but, with a typically Jobsian twist, NeXT announced that Improv would be bundled with all new NeXT computers. The Ashton-Tate and Informix folks were livid. Lotus Improv 1.0 for NeXT shipped the following February.</p>
<p>One other thing from those early days: During my first week at Lotus I ran into someone I worked with at Applicon. He told me that he worked on Lotus Notes then paused, expecting some sort of reaction. I had to explain that I didn&#8217;t know what Notes was. A couple years later when we moved off NeXT to Windows development, I had my first experience with Notes. Compared to NeXT, it was God-awful. Ugly. Primitive. Slow. It was really hard to appreciate the underlying power under that ugly facade. Fortunately for Lotus, it did get better later. <img src="http://www.bobcongdon.net/images/sidesmiley.gif" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bobcongdon.net/blog/2010/02/twenty-years/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nobody Hates Software More Than Software Developers</title>
		<link>http://bobcongdon.net/blog/2010/02/nobody-hates-software-more-than-software-developers/</link>
		<comments>http://bobcongdon.net/blog/2010/02/nobody-hates-software-more-than-software-developers/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:00:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bobcongdon.net/blog/2010/02/nobody-hates-software-more-than-software-developers/</guid>
		<description><![CDATA[Jeff Atwood: One of the (many) unfortunate side effects of choosing a career in software development is that, over time, you learn to hate software. I mean really hate it. With a passion. Take the angriest user you&#8217;ve ever met, multiply that by a thousand, and you still haven&#8217;t come close to how we programmers [...]]]></description>
			<content:encoded><![CDATA[<p>Jeff Atwood:<em> One of the (many) unfortunate side effects of choosing a career in software development is that, over time, you learn to hate software. I mean really hate it. With a passion. Take the angriest user you&#8217;ve ever met, multiply that by a thousand, and you still haven&#8217;t come close to how we programmers feel about software. <a href="http://www.codinghorror.com/blog/archives/001289.html">Nobody hates software more than software developers</a>. Even now, writing about the stuff is making me physically angry.</em></p>
<p>Sad but true.</p>
]]></content:encoded>
			<wfw:commentRss>http://bobcongdon.net/blog/2010/02/nobody-hates-software-more-than-software-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>the setup</title>
		<link>http://bobcongdon.net/blog/2010/02/the-setup/</link>
		<comments>http://bobcongdon.net/blog/2010/02/the-setup/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 21:30:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bobcongdon.net/blog/2010/02/the-setup/</guid>
		<description><![CDATA[the setup is a bunch of nerdy interviews with developers such as Joe Hewitt, developer of the Facebook iPhone app. They discuss what hardware and software they use as well as their &#8220;dream setup&#8221;. I didn&#8217;t expect that Jakob Neilsen and I would have something in common &#8212; we both carry around an old Palm [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://usesthis.com/">the setup</a>  is a bunch of nerdy interviews with developers such as <a href="http://joe.hewitt.usesthis.com/">Joe Hewitt</a>, developer of the Facebook iPhone app. They discuss what hardware and software they use as well as their &#8220;dream setup&#8221;. I didn&#8217;t expect that <a href="http://jakob.nielsen.usesthis.com/">Jakob Neilsen</a> and I would have something in common &mdash; we both carry around an old Palm phone and an iPod touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://bobcongdon.net/blog/2010/02/the-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comments</title>
		<link>http://bobcongdon.net/blog/2010/02/comments/</link>
		<comments>http://bobcongdon.net/blog/2010/02/comments/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 15:00:00 +0000</pubDate>
		<dc:creator>Bob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bobcongdon.net/blog/2010/02/comments/</guid>
		<description><![CDATA[Haloscan comments are going away and will be replaced by Echo. I guess I should post more to have something to comment about.]]></description>
			<content:encoded><![CDATA[<p>Haloscan comments are going away and will be replaced by Echo. I guess I should post more to have something to comment about. <img src="http://www.bobcongdon.net/images/sidesmiley.gif" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bobcongdon.net/blog/2010/02/comments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

