Very interesting to see this play out (read links in order for better effect):
Friday, May 16, 2008
Wednesday, April 23, 2008
My Home Office Setup
I've been reading some of Jeff Atwood's entries about ergonomics and work area setup and I started to think about my own setup in the home office. And I figured out that I really use a lot of desk real state.
For years I've been using a metal tanker desk and it has served me so well that I will never part with it provided that I have the space to keep it and the strength to haul it around. The tanker desk does have a lot of storage space in all its drawers, but it lacks severely on the surface area property.

Tanker Desk (12.5 feet squared)
What I need most in my work space is the surface area because I am constantly reviewing and reading technical articles that I printed or I have a pile of books that I am using for reference. I need the room to spread out. At work I have a corner desk which gives me a lot of space to spread out, so I did a little research on that and I found that one of the best corner desks out there today is the IKEA Galant model.

IKEA Galant Desk (25.7 feet squared)
The new desk definitely gives me the surface area I need (an extra 13.2 feet squared), but I also like it for the elbow support. My elbows are not hanging off the edge anymore. I also got me a drawer unit to go with it just to keep the most immediate office supplies that I need. In the end, my personal philosophy about ergonomics is: If it feels comfortable, do it. Like Jeff, I've been blessed that I haven't experienced any stress injuries to date.
For years I've been using a metal tanker desk and it has served me so well that I will never part with it provided that I have the space to keep it and the strength to haul it around. The tanker desk does have a lot of storage space in all its drawers, but it lacks severely on the surface area property.

Tanker Desk (12.5 feet squared)
What I need most in my work space is the surface area because I am constantly reviewing and reading technical articles that I printed or I have a pile of books that I am using for reference. I need the room to spread out. At work I have a corner desk which gives me a lot of space to spread out, so I did a little research on that and I found that one of the best corner desks out there today is the IKEA Galant model.

IKEA Galant Desk (25.7 feet squared)
The new desk definitely gives me the surface area I need (an extra 13.2 feet squared), but I also like it for the elbow support. My elbows are not hanging off the edge anymore. I also got me a drawer unit to go with it just to keep the most immediate office supplies that I need. In the end, my personal philosophy about ergonomics is: If it feels comfortable, do it. Like Jeff, I've been blessed that I haven't experienced any stress injuries to date.
Labels:
Cool Stuff,
Ergonomics
Sunday, April 20, 2008
Apple OS a Threat to Microsoft - Yes, But Not For The Reasons You'd Think
A few days ago a friend pointed me to an article that Gary Morgenthaler wrote for Business Week. Gary's main thesis is that Apple's products have a huge momentum in the market and that they are taking away market share from Microsoft. I agree with that thesis. What I don't agree with is the evidence he presents to support his thesis.
His theory is based on four main points: 1) Apple Spaces feature allows the user to run Windows applications and the Windows OS from within Apple OS X; 2) The adaptability and flexibility of the Apple core OS X kernel allows Apple to move faster than Microsoft; 3) As large companies become more mobile, Apple is strategically positioned to take a big bite of that market with its line of laptops and the iPhone; and 4) Apple software development kits allow independent software vendors to create applications that run on OS X. I want to address each of these points individually.
Apple Spaces
Gary wrote "Instantly you switch from a Macintosh operating system to a Microsoft Windows OS." He then adds "This easy toggling on an Apple computer, enabled by a feature called Spaces,..." and further down he continues "Windows users, in the very near future, will be free to switch to Apple computers and mobile devices, drawn by a widening array of Mac software, without suffering the pain of giving up critical Windows-based applications right away."
He is mistaking a Virtual Desktop (VD) for a Virtual Machine (VM). Spaces is a VD, a feature that allows the user to work on more than one desktop at a time and to toggle a desktop from foreground to background and vice-versa. The type of software that allows the user to run an OS within another is a VM. There are also emulators that provide a compatibility layer, which is usually implemented as a library, and come in the form of Wine for Linux or Cygwin for Windows. Maybe Gary was thinking of Apple's Boot Camp feature that acts as a boot manager for OS X.
But I want to give Gary the benefit of the doubt and assume that he means a VM rather that a VD. A VM, however, does not give a strategic advantage to Apple. VM software is an ubiquitous commodity: There are VMWare, Parallels, VirtualPC, QEMU, and Xen just to name a few. This is more of a liability to Apple and to illustrate what I mean I want to rephrase one of the sentences I quoted above from Gary's article: "Windows users, in the very near future, will be able to run Apple OS X from within Windows, without suffering the pain of paying for the Apple hardware premium." VMWare itself uses its own software to run OS X on Dell and HP computers.
The ability to run Windows OSs and applications on the Apple hardware is also facilitated by the fact that Apple has switched the CPUs in its entire product line to Intel. This also means that Apple has ported OS X to run on Intel chips. Which, in turn, means that OS X can, in theory, run on any Intel based device. As a matter of fact, many have already hacked the Apple OS X to run natively on non-Apple hardware and VMs.
OS X Kernel Flexibility and Adaptability
If you define flexible and adaptable as "susceptible of modification" and "able to adjust oneself readily to different conditions," respectively, then the Apple OS X kernel is none of the above. At the core of Apple OS X is an operating system kernel that is based on the Mach kernel.
Mach implements a microkernel architecture, which means that the kernel itself provides only essential core services such address space, process management, and inter-process communication. The core of a microkernel architecture rarely changes. What changes are the other OS services (Memory manager, Networking, etc.), that don't necessarily run on kernel mode, and drivers as well.
Apple sells three models of laptops and three models of desktops. All of these devices have essentially the same exact innards across the board. What changes is the form factor. Equal hardware devices and peripherals require equal drivers and software across the entire product line. The OS does not have to change one bit to support that. Any changes can be supported with drivers for the different hardware components.
Windows, in the mean time, has to run on several different form factors of laptops and desktops, and several of them have manufacturer specific devices built-in. The Windows kernel, in this regard, is the flexible OS kernel, not the OS X kernel. The irony here is that Rick Rashid, Microsoft's Senior VP of Research, contributed a lot of work to the Mach kernel 17 years ago when he was affiliated with Carnegie Mellon University.
When Apple decided it was time to go through a major real change, it took them a year and a half to make the necessary modifications to the core of OS X. In June 2005, Apple announced that it would switch to Intel processors across the entire product line. They didn't actually ship the first Intel-based Mac until January 2007. Microsoft did take almost six years to ship a new OS and this is more of a reason for the current rise in market share for Apple. The Linux core group of developers, on the other hand, can crank out work like this in less than six months. I say that Apple's ability to deliver on major changes to its core technologies is above average for a large company. But it is not as easy as Gary has alluded to in his article.
Apple Products in Large Companies
Gary writes that Apple's products are well positioned to take off in the enterprise world. I will argue that most enterprises are going to compare a Lenovo or Dell laptop to an Apple laptop and say that they can't justify the extra cost of the Apple machine. Apple's products are well positioned to gain a lot of market share in the consumer market, however. I will discuss this again further down.
Gary also writes that "Apple's recently introduced Leopard servers compete in a market of unhappy Vista server buyers..." Vista server has not been launched yet. The current server offering from Redmond is Windows Server 2003, and it is doing very well still.
He also mentions that the iPhone will gain corporate customers for Apple because it will soon provide corporate email access and calendaring. I am wondering how it will accomplish that when the business is running an Exchange server and there isn't an Outlook client for the device.
Apple SDKs
An OS by itself has never really meant that much as a strategic advantage for any company. What really means something is the number of independent software vendors writing applications that run on your platform. Microsoft became what it is today because it understood this fact 20 years ago.
The fact that Apple has an SDK for the iPhone or for its lines of computers means that more Windows applications will be ported to OS X. But it doesn't necessarily means that the Mac or the iPhone will have more applications that run exclusively on them.
What OS X needs is a "killer app" like the Apache web server is for Linux and Office is for Windows. Some may argue that Photoshop is the killer app for the Mac, but it isn't exclusive to the Mac like Office and Apache are mostly exclusive to Windows and Linux.
Why is Apple Really a Threat to Microsoft
There are four reasons why Apple is a threat to Microsoft now. Gary hints at one of them in his article, but he doesn't explore it further.
The first reason is that Microsoft has really messed up bad with Windows Vista. Users and developers who in the past were willing to put up with Windows annoyances, have now left the platform in droves to Apple OS X or Linux. There is evidence of this everywhere: Dell went back to offering PCs running Windows XP and other free operating systems. Other PC manufacturers have followed suit. Developers are blogging about it. All this without mentioning the class action law suit filed against Microsoft on behalf of Vista users.
Second, Apple is not a hardware nor a software company. Apple sells "cool." Their main product is the coolness factor and their technology is just an enabler for them to market the coolness factor. Cool has appeal to the masses and people are willing to pay a thousand dollars more for it. Cool is Apple's purple cow. People are willing to care about you, as Seth Godin so eloquently puts it. People are willing to be irrational, as those who, in one breath, say that they don't want to be locked into the Microsoft platform, and on the next breath, they buy into the Apple lock in. Apple locks you in even more than Microsoft because they control the whole experience: hardware and software. How does Apple get away with that and Microsoft doesn't?
The third factor is that Apple is able to do work under a veil of secrecy that none of its competitors can achieve. There is a great article on April 2008 Wired issue that explains how this works. In a nutshell, Microsoft has to share product plans and release schedules with its OEM partners so that hardware and software releases match. Apple doesn't have to do that for obvious reasons. Apple was able to work on the iPhone platform for three years before anyone even realized what they were up to.
The real ace up Apple's sleeve is Steve Jobs, though. He's known for being very hard to please and even a jerk at times, but he has charisma and inspires people to do great work and overcome insurmountable odds.
I am curious to know what you think.
His theory is based on four main points: 1) Apple Spaces feature allows the user to run Windows applications and the Windows OS from within Apple OS X; 2) The adaptability and flexibility of the Apple core OS X kernel allows Apple to move faster than Microsoft; 3) As large companies become more mobile, Apple is strategically positioned to take a big bite of that market with its line of laptops and the iPhone; and 4) Apple software development kits allow independent software vendors to create applications that run on OS X. I want to address each of these points individually.
Apple Spaces
Gary wrote "Instantly you switch from a Macintosh operating system to a Microsoft Windows OS." He then adds "This easy toggling on an Apple computer, enabled by a feature called Spaces,..." and further down he continues "Windows users, in the very near future, will be free to switch to Apple computers and mobile devices, drawn by a widening array of Mac software, without suffering the pain of giving up critical Windows-based applications right away."
He is mistaking a Virtual Desktop (VD) for a Virtual Machine (VM). Spaces is a VD, a feature that allows the user to work on more than one desktop at a time and to toggle a desktop from foreground to background and vice-versa. The type of software that allows the user to run an OS within another is a VM. There are also emulators that provide a compatibility layer, which is usually implemented as a library, and come in the form of Wine for Linux or Cygwin for Windows. Maybe Gary was thinking of Apple's Boot Camp feature that acts as a boot manager for OS X.
But I want to give Gary the benefit of the doubt and assume that he means a VM rather that a VD. A VM, however, does not give a strategic advantage to Apple. VM software is an ubiquitous commodity: There are VMWare, Parallels, VirtualPC, QEMU, and Xen just to name a few. This is more of a liability to Apple and to illustrate what I mean I want to rephrase one of the sentences I quoted above from Gary's article: "Windows users, in the very near future, will be able to run Apple OS X from within Windows, without suffering the pain of paying for the Apple hardware premium." VMWare itself uses its own software to run OS X on Dell and HP computers.
The ability to run Windows OSs and applications on the Apple hardware is also facilitated by the fact that Apple has switched the CPUs in its entire product line to Intel. This also means that Apple has ported OS X to run on Intel chips. Which, in turn, means that OS X can, in theory, run on any Intel based device. As a matter of fact, many have already hacked the Apple OS X to run natively on non-Apple hardware and VMs.
OS X Kernel Flexibility and Adaptability
If you define flexible and adaptable as "susceptible of modification" and "able to adjust oneself readily to different conditions," respectively, then the Apple OS X kernel is none of the above. At the core of Apple OS X is an operating system kernel that is based on the Mach kernel.
Mach implements a microkernel architecture, which means that the kernel itself provides only essential core services such address space, process management, and inter-process communication. The core of a microkernel architecture rarely changes. What changes are the other OS services (Memory manager, Networking, etc.), that don't necessarily run on kernel mode, and drivers as well.
Apple sells three models of laptops and three models of desktops. All of these devices have essentially the same exact innards across the board. What changes is the form factor. Equal hardware devices and peripherals require equal drivers and software across the entire product line. The OS does not have to change one bit to support that. Any changes can be supported with drivers for the different hardware components.
Windows, in the mean time, has to run on several different form factors of laptops and desktops, and several of them have manufacturer specific devices built-in. The Windows kernel, in this regard, is the flexible OS kernel, not the OS X kernel. The irony here is that Rick Rashid, Microsoft's Senior VP of Research, contributed a lot of work to the Mach kernel 17 years ago when he was affiliated with Carnegie Mellon University.
When Apple decided it was time to go through a major real change, it took them a year and a half to make the necessary modifications to the core of OS X. In June 2005, Apple announced that it would switch to Intel processors across the entire product line. They didn't actually ship the first Intel-based Mac until January 2007. Microsoft did take almost six years to ship a new OS and this is more of a reason for the current rise in market share for Apple. The Linux core group of developers, on the other hand, can crank out work like this in less than six months. I say that Apple's ability to deliver on major changes to its core technologies is above average for a large company. But it is not as easy as Gary has alluded to in his article.
Apple Products in Large Companies
Gary writes that Apple's products are well positioned to take off in the enterprise world. I will argue that most enterprises are going to compare a Lenovo or Dell laptop to an Apple laptop and say that they can't justify the extra cost of the Apple machine. Apple's products are well positioned to gain a lot of market share in the consumer market, however. I will discuss this again further down.
Gary also writes that "Apple's recently introduced Leopard servers compete in a market of unhappy Vista server buyers..." Vista server has not been launched yet. The current server offering from Redmond is Windows Server 2003, and it is doing very well still.
He also mentions that the iPhone will gain corporate customers for Apple because it will soon provide corporate email access and calendaring. I am wondering how it will accomplish that when the business is running an Exchange server and there isn't an Outlook client for the device.
Apple SDKs
An OS by itself has never really meant that much as a strategic advantage for any company. What really means something is the number of independent software vendors writing applications that run on your platform. Microsoft became what it is today because it understood this fact 20 years ago.
The fact that Apple has an SDK for the iPhone or for its lines of computers means that more Windows applications will be ported to OS X. But it doesn't necessarily means that the Mac or the iPhone will have more applications that run exclusively on them.
What OS X needs is a "killer app" like the Apache web server is for Linux and Office is for Windows. Some may argue that Photoshop is the killer app for the Mac, but it isn't exclusive to the Mac like Office and Apache are mostly exclusive to Windows and Linux.
Why is Apple Really a Threat to Microsoft
There are four reasons why Apple is a threat to Microsoft now. Gary hints at one of them in his article, but he doesn't explore it further.
The first reason is that Microsoft has really messed up bad with Windows Vista. Users and developers who in the past were willing to put up with Windows annoyances, have now left the platform in droves to Apple OS X or Linux. There is evidence of this everywhere: Dell went back to offering PCs running Windows XP and other free operating systems. Other PC manufacturers have followed suit. Developers are blogging about it. All this without mentioning the class action law suit filed against Microsoft on behalf of Vista users.
Second, Apple is not a hardware nor a software company. Apple sells "cool." Their main product is the coolness factor and their technology is just an enabler for them to market the coolness factor. Cool has appeal to the masses and people are willing to pay a thousand dollars more for it. Cool is Apple's purple cow. People are willing to care about you, as Seth Godin so eloquently puts it. People are willing to be irrational, as those who, in one breath, say that they don't want to be locked into the Microsoft platform, and on the next breath, they buy into the Apple lock in. Apple locks you in even more than Microsoft because they control the whole experience: hardware and software. How does Apple get away with that and Microsoft doesn't?
The third factor is that Apple is able to do work under a veil of secrecy that none of its competitors can achieve. There is a great article on April 2008 Wired issue that explains how this works. In a nutshell, Microsoft has to share product plans and release schedules with its OEM partners so that hardware and software releases match. Apple doesn't have to do that for obvious reasons. Apple was able to work on the iPhone platform for three years before anyone even realized what they were up to.
The real ace up Apple's sleeve is Steve Jobs, though. He's known for being very hard to please and even a jerk at times, but he has charisma and inspires people to do great work and overcome insurmountable odds.
I am curious to know what you think.
Labels:
Commentary
Saturday, March 8, 2008
XO: First Impressions
I had the XO for a few days now and I had the opportunity to play with it a little bit. The device is small; smaller than I expected. And, yet, it packs a lot of punch for the size and the components inside. It's definitely slower than your top-of-the-line two core machine, but you are not left twiddling your thumbs while waiting for things to load.
The screen presents great sharpness of image and is big enough for 99% of the tasks that I will ever perform with it. I'm not going to use the XO for extensive programming tasks, for instance. But the XO is great to take on trips with the family just to check on email and surf the web.
I have large hands, so the keyboard is unusable for me. Thankfully, I can easily plug my HHKB into one of the three USB ports and use it instead.
It comes with a built-in wireless network card that connects right up to my wireless network at home. I also read a little about the mesh networking capabilities of the XO, but haven't had the chance to actually play with it first-hand yet. Mesh networking is a fascinating technology, though.
A little perk that comes attached to the XO version that I have is the free year of T-Mobile HotSpot access. I activated mine today and it works like a charm.
The OS is a modified version of Fedora Linux, so I'm sure it is highly customizable. This weekend and the next few days I will be doing a lot of reading at the Laptop wiki site. They have an amazing amount of really great information about the machine itself, as well as projects and lessons to do with the kids. I also found some very useful posts by Bill Clementson about his experiences with his XO.
Anyway, I will keep you posted.
The screen presents great sharpness of image and is big enough for 99% of the tasks that I will ever perform with it. I'm not going to use the XO for extensive programming tasks, for instance. But the XO is great to take on trips with the family just to check on email and surf the web.
I have large hands, so the keyboard is unusable for me. Thankfully, I can easily plug my HHKB into one of the three USB ports and use it instead.
It comes with a built-in wireless network card that connects right up to my wireless network at home. I also read a little about the mesh networking capabilities of the XO, but haven't had the chance to actually play with it first-hand yet. Mesh networking is a fascinating technology, though.
A little perk that comes attached to the XO version that I have is the free year of T-Mobile HotSpot access. I activated mine today and it works like a charm.
The OS is a modified version of Fedora Linux, so I'm sure it is highly customizable. This weekend and the next few days I will be doing a lot of reading at the Laptop wiki site. They have an amazing amount of really great information about the machine itself, as well as projects and lessons to do with the kids. I also found some very useful posts by Bill Clementson about his experiences with his XO.
Anyway, I will keep you posted.
Labels:
Cool Stuff
The Blinking Cursor
A friend asked me the other day what is The Blinking Cursor. It represents a space where everything is simple and uncomplicated. A place where there are no deadlines or budgets and technologies stand on their own merits rather than a ROI analysis.
Circa 1983, I got my first computer: a Sinclair ZX Spectrum 16K. The blinking cursor of my Spectrum was always there waiting for me, like a boy's first puppy with its tongue sticking out, as if saying come play with me.
I long for the blinking cursor, and this is the space where I write and share my feelings about technologies that take me back to the old state of mind.
Circa 1983, I got my first computer: a Sinclair ZX Spectrum 16K. The blinking cursor of my Spectrum was always there waiting for me, like a boy's first puppy with its tongue sticking out, as if saying come play with me.
I long for the blinking cursor, and this is the space where I write and share my feelings about technologies that take me back to the old state of mind.
Labels:
Philosophy
Friday, March 7, 2008
New Toys
Today there were two packages in the mail for me: A XO Laptop from One Laptop per Child and a Happy Hacking Keyboard Lite 2. Those are my new toys.

Back in November I paid $400 for the XO during the period when the OLPC was sending you a laptop if you donated the other one to a child in a third world country. Mine arrived today as the OLPC where having some supply problems. Technically, the XO is for my children, but since the twins are at age three now, I will experiment with it on my own also.

The purpose of the HHKB is to help me become a better, more efficient typist. I am writing this note with it and so far I like the way it feels, but it is a little weird due to different key positions. We will see how this goes.

You can view a few more images here.

Back in November I paid $400 for the XO during the period when the OLPC was sending you a laptop if you donated the other one to a child in a third world country. Mine arrived today as the OLPC where having some supply problems. Technically, the XO is for my children, but since the twins are at age three now, I will experiment with it on my own also.

The purpose of the HHKB is to help me become a better, more efficient typist. I am writing this note with it and so far I like the way it feels, but it is a little weird due to different key positions. We will see how this goes.

You can view a few more images here.
Labels:
Cool Stuff
Sunday, February 24, 2008
Shrink Your Comfort Zone
I was talking to a co-worker the other day and I mentioned that I am teaching myself Python and Lisp. He immediately tensed up as if I had uttered a blasphemy. He replied, Why waste your time doing that, you'll never use them? All you'll ever really use in the real world is C#, PowerShell and maybe some VBScript.
I think that the crux of the matter comes down to the size of one's own comfort zone. In order for me to be a better programmer, I believe I need to keep my comfort zone really small. When I only use C#, Visual Basic, PowerShell and VBScript my comfort zone is large because these languages all have the same background: Microsoft and the .Net framework.

I think that a programmer needs to ask himself: Are all of these programming languages really different? They are all turing-complete after all, aren't they? Programming languages are not what really matters; What matters are the concepts they are made of.
I'm glad I'm learning Lisp because I now know more about macros, scope and the meta-circular interpreter. I'm glad I'm learning Python because I now know more about generator expressions and list comprehensions. I'm glad I'm learning both languages because now I know a lot more about functional programming.
The key thing is that the knowledge you had before and the new knowledge must overlap a little, otherwise you can't bridge that knowledge and make the connections among past, present and future knowledge.

In order to improve your skills, you got to shrink your comfort zone without letting it disappear completely.
I think that the crux of the matter comes down to the size of one's own comfort zone. In order for me to be a better programmer, I believe I need to keep my comfort zone really small. When I only use C#, Visual Basic, PowerShell and VBScript my comfort zone is large because these languages all have the same background: Microsoft and the .Net framework.

I think that a programmer needs to ask himself: Are all of these programming languages really different? They are all turing-complete after all, aren't they? Programming languages are not what really matters; What matters are the concepts they are made of.
I'm glad I'm learning Lisp because I now know more about macros, scope and the meta-circular interpreter. I'm glad I'm learning Python because I now know more about generator expressions and list comprehensions. I'm glad I'm learning both languages because now I know a lot more about functional programming.
The key thing is that the knowledge you had before and the new knowledge must overlap a little, otherwise you can't bridge that knowledge and make the connections among past, present and future knowledge.

In order to improve your skills, you got to shrink your comfort zone without letting it disappear completely.
Labels:
Lisp,
Programming,
Python
Thursday, February 21, 2008
The New Command Line
In the old days, you would type ...
... to read your mail, and this to read your news ...
... or this to edit a file ...
... but then the command line interface (CLI) became an archaic user interface and the powers that be adopted the GUI. Now-a-days, one may use the following single line commands to read mail, news or edit a file, respectively:
Is this a revival of the command line interface? Some people will say No... This is a completely different context. I agree that the context is different, but the principle behind CLI is still the same that it was 30 or 35 years ago. This principle is that written language is power, be it in CLI or any other paradigm. Nobody understands this better today than these guys. I am keeping an eye on them.
$> mutt
... to read your mail, and this to read your news ...
$> tin
... or this to edit a file ...
$> emacs ~/document.txt
... but then the command line interface (CLI) became an archaic user interface and the powers that be adopted the GUI. Now-a-days, one may use the following single line commands to read mail, news or edit a file, respectively:
http://mail.google.com/
http://news.google.com/
http://docs.google.com/
Is this a revival of the command line interface? Some people will say No... This is a completely different context. I agree that the context is different, but the principle behind CLI is still the same that it was 30 or 35 years ago. This principle is that written language is power, be it in CLI or any other paradigm. Nobody understands this better today than these guys. I am keeping an eye on them.
Labels:
Concepts
Wednesday, February 20, 2008
5 Books Every Programmer Should Read
Here are 5 non-technical books I think every programmer should read:
Godel, Escher, Bach: an Eternal Golden Braid
by Douglas Hofstadter
Because every programmer must understand this: "It always takes longer than you expect, even when you take into account Hofstadter's Law."
Zen and The Art of Motorcycle Maintenance
by Robert Pirsig
Because every programmer must realize this: You are the code you write.
Syntactic Structures
by Noam Chomsky
Because every programmer must know what a language really is.
The Cluetrain Manifesto: The End of Business as Usual
by Christopher Locke, Rick Levine, Doc Searls, David Weinberger
Because sources of code are conversations, also.
The Elements of Style
by Strunk & White
Because every programmer must know how to write clearly and concisely.
Godel, Escher, Bach: an Eternal Golden Braid
by Douglas Hofstadter
Because every programmer must understand this: "It always takes longer than you expect, even when you take into account Hofstadter's Law."
Zen and The Art of Motorcycle Maintenance
by Robert Pirsig
Because every programmer must realize this: You are the code you write.
Syntactic Structures
by Noam Chomsky
Because every programmer must know what a language really is.
The Cluetrain Manifesto: The End of Business as Usual
by Christopher Locke, Rick Levine, Doc Searls, David Weinberger
Because sources of code are conversations, also.
The Elements of Style
by Strunk & White
Because every programmer must know how to write clearly and concisely.
Labels:
Programming
Saturday, February 2, 2008
Languages Worth Knowing
Among many other pearls, Alan Perlis is known for saying this one: A language that doesn't affect the way you think about programming, is not worth knowing.
I was wondering about the languages I knew, know and will come to know and realized that the languages that changed the way I thought and think about programming are quite and eclectic bunch: Sinclair BASIC, HyperCard, Visual Basic, SQL, and Python. In between those there are others that did not change my thinking: C, Java, PHP, C#, Bash, and PowerShell. I have written working programs in all the languages listed here, so to a degree I can claim working knowledge of all these languages at some point in time. However, I will never claim real expertise in any of them.
Sinclair BASIC on the ZX Spectrum 48K was my first programming language. It was 1985 and I lived in São Paulo, Brasil at the time. I was fresh out of an after-school computer course that taught people how to program BASIC on a TRS 80 III machine. I was eager to go off on my own and try my new skill set. I successfully talked my parents into buying a ZX Spectrum. I taught myself Sinclair BASIC and remember being mesmerized by the color display and at the ease with which you could create little games in the language. That experience sparked my passion for technology if nothing else.
Some would argue that you cannot properly call HyperCard a programming language, but it sure felt like one to me at the time. The major paradigm shift I went through as a consequence of direct exposure to HyperCard was this: You can actually create useful programs with this thing. That was back in 1992 when I was working as an aid in the college computer lab. I wrote a little HyperCard application to check people in and out of the lab and show a report at the end of each day.
My first serious programming language was Visual Basic 4.0. I was a passionate classic VB advocate until its demise as VB.NET and I wrote VB code professionally for quite a while. VB made me realize that anyone can program (and that's a good thing). The ease with which one can create an application with VB was unprecedented in the computer industry. Classic VB was the most popular programming language of its time for a reason, and people want it back.
SQL (more specifically T-SQL on MS SQL Server) was an eye opener because of the fundamental shift in thinking about data that you have to go through in order to use it effectively. What I mean by that is if you try to write SQL code in a procedural style you will shoot yourself in the foot very quickly. As a matter of fact, you will blow your whole leg off. With SQL, you have to think in sets. If you don't think in sets you will write a bunch of crappy and slow SQL code.
About a year ago I started to teach myself Python and I had an immediate A-Ha moment: This is sooo easy... programming is fun again! My current work involves the support of hardware and software systems for a large fortune 100 company. It's rare when a day goes by in which I have a technical problem to which the solution cannot be trivially achieved in Python. Python is the most expressive language I have used so far in my career. Using Python constantly makes me think What was I doing writing all that code before?
I also started to look into Lisp recently and although I already know that it has affected the way I think about programming in a profound way, I can't quite articulate what that is yet. But I think this paradigm shift is a major one and will require its own entry.
As I stated above, I learned other languages (to various degrees of proficiency) that did not impact my thinking that much. Were they worth learning? That's also a topic for another post.
-----
P.S. Thanks to Reginald Braithwaite for pointing out that HyperCard scripting was indeed considered a programming language. However, I know some people that, despite insurmountable evidence of the contrary, still think that HyperCard was not programming.
I was wondering about the languages I knew, know and will come to know and realized that the languages that changed the way I thought and think about programming are quite and eclectic bunch: Sinclair BASIC, HyperCard, Visual Basic, SQL, and Python. In between those there are others that did not change my thinking: C, Java, PHP, C#, Bash, and PowerShell. I have written working programs in all the languages listed here, so to a degree I can claim working knowledge of all these languages at some point in time. However, I will never claim real expertise in any of them.
Sinclair BASIC on the ZX Spectrum 48K was my first programming language. It was 1985 and I lived in São Paulo, Brasil at the time. I was fresh out of an after-school computer course that taught people how to program BASIC on a TRS 80 III machine. I was eager to go off on my own and try my new skill set. I successfully talked my parents into buying a ZX Spectrum. I taught myself Sinclair BASIC and remember being mesmerized by the color display and at the ease with which you could create little games in the language. That experience sparked my passion for technology if nothing else.
Some would argue that you cannot properly call HyperCard a programming language, but it sure felt like one to me at the time. The major paradigm shift I went through as a consequence of direct exposure to HyperCard was this: You can actually create useful programs with this thing. That was back in 1992 when I was working as an aid in the college computer lab. I wrote a little HyperCard application to check people in and out of the lab and show a report at the end of each day.
My first serious programming language was Visual Basic 4.0. I was a passionate classic VB advocate until its demise as VB.NET and I wrote VB code professionally for quite a while. VB made me realize that anyone can program (and that's a good thing). The ease with which one can create an application with VB was unprecedented in the computer industry. Classic VB was the most popular programming language of its time for a reason, and people want it back.
SQL (more specifically T-SQL on MS SQL Server) was an eye opener because of the fundamental shift in thinking about data that you have to go through in order to use it effectively. What I mean by that is if you try to write SQL code in a procedural style you will shoot yourself in the foot very quickly. As a matter of fact, you will blow your whole leg off. With SQL, you have to think in sets. If you don't think in sets you will write a bunch of crappy and slow SQL code.
About a year ago I started to teach myself Python and I had an immediate A-Ha moment: This is sooo easy... programming is fun again! My current work involves the support of hardware and software systems for a large fortune 100 company. It's rare when a day goes by in which I have a technical problem to which the solution cannot be trivially achieved in Python. Python is the most expressive language I have used so far in my career. Using Python constantly makes me think What was I doing writing all that code before?
I also started to look into Lisp recently and although I already know that it has affected the way I think about programming in a profound way, I can't quite articulate what that is yet. But I think this paradigm shift is a major one and will require its own entry.
As I stated above, I learned other languages (to various degrees of proficiency) that did not impact my thinking that much. Were they worth learning? That's also a topic for another post.
-----
P.S. Thanks to Reginald Braithwaite for pointing out that HyperCard scripting was indeed considered a programming language. However, I know some people that, despite insurmountable evidence of the contrary, still think that HyperCard was not programming.
Labels:
Lisp,
Programming,
Python
Subscribe to:
Posts (Atom)