Living at the Crossroads of Technology and the Arts

In Steve Jobs' 2nd to last keynote presentation at the launch of the iPad 2 in March 2011, he outlined what he thought made Apple special. He suggested that technology alone is not enough, and that Apple succeeds because it's at the cross roads of technology and the arts. You can see that particular segment of Jobs' keynote at 1:08:30 (iTunes link) (web link).

Screen Shot 2013-04-14 at 3.46.13 PM.JPG

I've been writing on a regular basis for just over 3 months now. I'm using to punish myself if I don't blog 3x weekly. Every week I fail, will give $10 to the NRA. I haven't and won't pay them a penny.

Writing was difficult when I first started blogging. I forced myself to write because I just wasn't comfortable writing. A few months later, writing has evolved from a chore into a fun activity that I thoroughly enjoy. And because I enjoy it, I spend much more time thinking about it even when I'm not writing. It's difficult to come up with interesting material within my domain areas of expertise 3x weekly, so I'm always looking for new things to write about. Every conversation, every news headline, every social scenario can spark a blog post idea.

Writing is fun. I hope I never stop. I've also come to understand that writing and programming are remarkably similar in their respective creative processes. This is particularly interesting because writing and programming generally attract opposing personality types.

Perhaps most importantly, both professions value simplicity and clarity. Both believe in the "less is more" philosophy.

Programming 101: less code is better code. The concept of writing fewer lines of code is interwoven through virtually every aspect of computer science. Abstraction, encapsulation, object-oriented programming, and APIs empower developers to write fewer lines code.

Good writing values some of the same concepts as good coding. If a message or idea can be expressed in fewer words, it should. No one wants to read unorganized babble. No developer wants to read spaghetti code*.

Writing varies across many sub domains, including blogging, novels, traditional news media, and many others. Similarly, there are many different sub domains of programming, such as kernel, library-specific, imaging, and database programming, to name a few. Humans have developed a wide range of languages and dialects, each with unique structures, strengths and weaknesses. In the same light, there are many programming languages, each with it's strengths and weaknesses, nuances and quirks, and related languages. Human and machine communications are astonishingly similar.

Good writing and programming require planning and organizing. Programmers define objects and data structures and how they relate to and work with one another, and then code and debug. In writing, authors have to create a plan and outline that will most effectively convey their ideas. They layout out how, when, where, and why people and ideas intersect, just as programmers direct objects and data structures. Once writers develop an outline, they can flesh out the details and add literary style. After they write, writers refine and reiterate. Programmers design, code, test, and debug.

Over the past few years, I've come to appreciate design in the physical world as I've spent more time programming, designing, developing, and selling virtual designs. And now the same thing is happening with writing. The more I write, the more I appreciate how communication and language permeate through daily life, both professionally and personally. I look for well crafted ideas and sentences when I read, seek good writing patterns, and try to put myself in other writers' shoes to understand how and why they wrote what they did.

I've been given the privilege to live in the world of technology since I was born. But I don't want to live there for the rest of my life. As much as I love technology, I don't want to be bounded by it. Too many in the industry get trapped in a technology lifestyle bubble. I want to challenge my beliefs and learn from my mistakes and assumptions. Perhaps James Altucher, one of my favorite bloggers, said it best: "My only New Year’s resolution for 2013 is to dot the landscape of my life once more with question marks instead of periods. To turn judgments into queries. To turn 'this' into 'that?'"

*Spaghetti code is code which cannot be followed or easily understood. Rather than grouping related code segments, spaghetti code groups unrelated functions. This breaks the concept of encapsulation, which in turn creates more code, and decreases the readability for other programmers. Developers hate inheriting spaghetti code.