Filed under Books

The Age of the Cyborg is upon us

And they’re nothing like what the movies make them out to be. Today’s (and tomorrow’s) cyborgs are not a random and gruesome mix of metal and flesh out to destroy the rest of us. Rather, today’s cyborgs are… us. Each and every one of us, in some form or another. So what am I talking about and how did this come to pass?

For starters, technology, especially computer technology has permeated every aspect of our lives. And along with the computer has come the network. Within the next decade mobile broadband will become ubiquitous (at least in urban areas) meaning that we will always be connected to the full knowledge and collective intelligence of the internet. As a direct result we are all gradually becoming cyborgs: our machines, especially in the form of mobile network connected devices are becoming an inseparable part of us. Sure, we may not be jacking in with our brains as a part of the regular morning routine, but connecting to the global network of computers (and hence indirectly to everyone else using those computers) is already a routine occurrence which we don’t give a second thought.

A recent Wired article talks about how average chess players combined with the right machine assistance can beat out better human players as well as other players with better software. The key is in the human’s ability to make the most of their machine assistants: figuring out which machine results to accept, which to reject and how to ask the right questions. Our currently technology is in exactly the same position. The talent of the person using a computer or the computational power of the machine is less important than being able to combine the two properly.

Leaving chess aside, there are more practical areas where this combination of man and machine is producing great payoffs. Successful blogger and author Tim Ferriss makes no secret of the fact that he uses analytics extensively to fine-tune how his website operates and is viewed in order to maximize his earnings. In earlier days, Paul Graham created effectively the world’s first web application, Viaweb and successfully beat out better funded competitors by placing powerful tools (Common Lisp) in the hands of experienced users (himself and his team).

People my age and younger have never lived in a world when we couldn’t connect with people across the globe at the click of a mouse. All that has ever stood before us and the vast stores of information on the Internet has been a single text box with a button titled some variation of “Search”. We’re cyborgs in the sense that the use of our machines is natural and reflexive, requiring little explicit mental bandwidth. Who needs a port in the back of the skull when you have a copy of Google Hacks tucked into your brain?

Of course, not all cyborgs are made equal. Even among people my age there are both those who revel in technology and its gifts and those who would prefer to keep it at arm’s lengths. And I’m not talking about the difference between computer science graduate students and theater majors. I’m talking about the people who are content to use the Microsoft Word’s default font and paragraph spacing and those who spent hours tinkering with their websites to get things looking just right. I’m talking about the people who tweet a dozen times a day and those who log in to Facebook once a week. I’m talking about those who have three different emails and those who pull all their email into Gmail. I’m talking about… you get the point.

On the flip side there’s a careful balance between using technology to achieve a further goal (Tim Ferriss’ website tweaks) and technology for technology’s sake (the hours spent tweaking the CSS on a blog only your mum reads). The Wired article says that there is a difference between people who use technology productively and hence feel smarter and more focused and the people who seem lost and intimated by online life. I would add a third category: those who feel smarter, but really aren’t better than the baseline. Cyborgization may be becoming ubiquitous, but that doesn’t mean that it’s easy.

The growing cyborgization of our society is also the reason why I’m excited about the second coming of tablet computers: the iPad and whatever Chrome-based offering Google throws its weight behind. Take a few minutes to check out the new guided tours of the iPad and you might get a hint of what I feel. The interface is completely different from how we use computers today and I think that’s a great idea. Let’s face it: most people today don’t really need a real computer. They need basically two devices: a internet connection device and some sort of glorified typewriter/calculator for writing reports and spreadsheets. Of course the iPad doesn’t excite those of us who type hundreds of words a minute or write code for a living. That’s because we’ve already crossed the line of cyborgization: we know (or are at least trying to find out) what we can do with our machines. The iPad is for the people on the other side, those who couldn’t care less about how many cores or how much RAM they have. It’s for people who are more than willing to trade their freedom (and their wallets) for a computing experience that they can relate to better and easier. It’s for the mum who wants to snuggle up in bed with her kid and Winnie the Pooh. It’s for the people who still consider reading a newspaper in the morning a holy rite. It’s for the people who have by and large been on the outskirts of the computer technology revolutions of the last few decades. It’s for a new generation of cyborgs who stop thinking of their machines as computers and rather view them as constant, unobtrusive, electronic companions.

With some luck, my children will be growing up in a world where they are surrounded from birth by the warm embrace of the internet. For them, actually sitting down in front of a computer will be quaint and outmoded in the same way we don’t go to a landline phone to talk to someone anymore. And it will be devices like the iPad connecting remotely to powerful servers running recommendation engines and personalized search databases that will be their first connection to the world of computation. As Pranav Mistry says, people don’t really care about computation, they care about knowledge and information. We’ve been able to bring people closer to information by erasing it’s physicality and making everything available remotely. Our children will be getting that information without the burden of thinking about a browser or keyboard or URLs. For them, all sorts of data will be all around them accessible at the tap of a touchscreen (or hopefully without requiring even that).

Here’s looking forward to the Age of Cyborgs, of which we are the heralds and first citizens. We live in exciting times.

Tagged , , ,

Book Review: Coders at Work

At the outset let me just say that this is one book that every serious programmer must read at some point in their careers, preferably sooner rather than later. Coders at Work is a collection of interviews with 15 of the most brilliant programmers on the planet. You can find the full list of people and some excerpts on the book’s website. As a teaser, the book includes such names as Donald Knuth, Jamie Zawinski, Guy Steele, Brendan Eich and Ken Thompson. It’s a impressive list and what’s more each interview is very well conducted giving a deep insight into both the person’s general ideas on programming and their particular area of expertise.

The book is the brainchild of Peter Seibel, the author of the very well written Practical Common Lisp which I can safely recommend as a good starting point for people starting to learn Lisp. Seibel’s interviewing style is very effective, the questions are always short and to the point but they help guide the person in question into providing a lot of very interesting and useful information. They are also fairly open ended allowing the interviews to flow in interesting directions, unique to each person. He asks some general questions to all 15, things such as how they learned to program, what were their hardest problems or bugs, how they go about debugging and what their idea of the current state of programming is. But he also asks them things about their particular area of work. For example, with Jamie Zawinski he talks a lot about Netscape and Mozilla while with Donald Knuth the obvious topics are his masterpiece The Art of Computer Programming and literate programming. There are also some questions that you wouldn’t always think about, such as how to spot programming talent.

What makes the book very accessible is that it keeps technical jargon to a minimum. Anyone who has programming computers for a significant amount of time will have no problem in understanding most of the content. For areas that are more esoteric the programmers themselves provide very lucid explanations making it quite easy to follow along. A lot of the matter is about things that each programmer encounters: how to read someone elses code, how to debug programs, how to collaborate and pass on projects, how to improve as a programmer, what educational/personal qualifications are most helpful, etc. The book isn’t just about how awesome these people are: it’s about understanding how masters of the craft rose to that position and how us mere mortals might follow in their footsteps. Seibel does a pretty good job of asking the same question that many of us programmers would like to ask them if we had the chance.

Beyond the structure of the interviews, the book is made amazing by the stellar choice of programmers. Not only are they master programmers, they have very diverse experiences and interests resulting in lots of very interesting and powerful opinions. I particularly enjoyed Guy Steele’s interview which contains a fair amount of philosophy regarding programming and computer science and Fran Allen’s call for computing to become more socially relevant. At the same time, Zawinski and Thompson embodied what can be best described as the classic hacker mindset: coding for the pure joy of creation and problem solving. Many of the interviews are humorous in some way or the other and none of them degenerated into holy wars or religious diatribes.

There is absolutely no reason why you should not read this book. There are some areas for improvement, but these are of a presentational nature (I wish the interviews were broken in segments so that I didn’t have to read a full one at a sitting). Content wise there is nothing I have to say. Will this book help you become a master programmer? Well, not in any tangible, measurable sense. This book is not a howto or a handbook. Each person had their own ideas of how to do things and many of them disagree with what could be called ‘industry standards’ (in particular how code should be formatted or structured). What this book will do is give a window into the minds of some of the legends of our culture. I’ve found it most useful to compare what these people have done and how they think to what I do and think myself. Essentially, read the book the same way you would read Benjamin Franklin’s autobiography. You won’t learn how to become a great statesman, inventor or Founding Father of a nation, but you can figure out some ways to live a better, more impactful life.

Coders at Work tells the stories of people who might be very well be considered heroes of our times. If you have an interest in becoming a better programmer, go buy this book, read it cover to cover, think about everything they say about their programming practices and experiences and see how you can use that to make your own experience better. And above all else, remember and act on what you read.

Tagged , , ,

3 books to become a better programmer

Junior year is in full swing and I’ve been starting to think seriously about what I want to do once I finish college in two years time. I’m pretty certain that I want to go on to grad school, and work on a serious research project. However, I also want to be a proficient programmer by that time. I may not be an expert, but I want to be good enough to be able to hold my own and would like to complete 2-3 large projects of my own. While I certainly need to be writing actual code, I’ve always believed that you can’t become a top notch programmer without reading widely about the software industry and people in it. Considering that I have three engineering classes as well as two others, I might not have enough time to do much reading over the next semester. But I have just over three months before I need to start buckling down for finals, so here’s a list of one book a month that I plan to read cover to cover and hopefully learn something useful from

Beautiful Code

This is a book about code. It contains 33 chapters and in each one a master programmer walks though an elegant solution to a programming problem. The problems range from a small regular expression matcher to debuggers and MapReduce. It covers a wide variety of programming languages and approaches all focusing on the elusive goal of elegance and simplicity. It’s worth a read, but definitely requires some patience especially if you are unfamiliar with the languages and problem domains that are being talked about. It’s a fairly large book, but that’s offset by the high quality of the writing in it. Any competent programmer should be able to follow what the numerous authors are saying without much difficulty. I’m on my third chapter at the moment, and at just over one chapter a day, I should get in done in a month.

Coders at work

This is a new book which will be publicly available later this month. It’s written by Peter Seibel, the author of Practical Common Lisp (which I recommend for anyone starting Lisp). This is a series of interviews with 15 all time programming legends. Among them are names like Donald Knuth and Jamie Zawinski: people widely considered to be experts in their respective areas. I’ve preordered it from Amazon and while I eagerly await my copy there are some excerpts on the book website and a good review up on Slashdot. I’ve always been a fan of biographies and autobiographies, especially when it involves people I really look up to. This book won’t teach me how to be as good as the programmers interviewed, but it might give me some useful ideas on how to go about improving myself. This book is actually bigger than Beautiful Code by page count, but I think it will be easier reading since it should be less technical than Beautiful Code. I won’t be able to tell for certain until I actually get the book, so I’ll keep this on hand until October.

Code Complete 2

There are lots of books out on there design principles and techniques, design patterns, agile development, so on and so forth. There seem to be much fewer books on how to simply sit down and write code. This is one of them. I’ve read bits and pieces of this before and found it very helpful and insightful. Sometimes it might seem like what’s being said is fairly commonsense stuff, but it’s stuff we often tend to forget while pumping out the code. If you’re  a serious coder looking to improve your programming skills, this is a good starting point. This is a quite a large book with lots of good material so it will be a challenge to finish in the month-long-span I’ve set for it, but I’ll certainly give it my best shot. Because of the size I might need to devote more than a month to it. I plan on starting it in November and maybe continuing till finals in mid-December.

Once again, I’d like to reiterate that I don’t expect any of these books by themselves (or even all together) to magically make me a better programmer. Rather I’m going to view them as ways to learn directly from the masters of the field and use that to guide my own programming training.

Starting Common Lisp

I’ve been wanting to learn a Lisp for quite some time now. And by learn, I mean “be able to write a sizeable program in”. While I consider myself a language buff, the truth is that I only have real experience in a few languages: Java, C++, Python and a smattering of assembler. In any of those I would be able to write a medium size program without taking too much time or learning too much on the job. I have about 5 weeks of summer left and for 3.5 of those weeks, I have practically nothing to do. So I’ve decided to buckle down and learn some Lisp.

Choosing a Lisp

Before I got down to actually learning Lisp, I had to make a choice as to which dialect of the language I should actually use. I’ve used a bit of Scheme before (mostly as a result of getting halfway through SICP) and though I liked it, public opinion was that Common Lisp was more suited for real world development. And since I did plan on doing real world development, Common Lisp seemed the better choice. There was also Clojure which I could have considered. I really didn’t consider it because Common Lisp was good enough and it had both excellent tools and good books. I should also mention Paul Graham’s Arc language which is currently under heavy development. Arc development is going somewhat slow (but with good reason) and if Arc was ready, I would definitely have considered it. but I really wanted something that would give me a good environment today and Common Lisp gave me what I wanted

Getting Lisp (and tools)

Languages like Python, Perl and Ruby all have a single ‘reference implementation’ and some have alternate implementations (like Jython, JRuby). Common Lisp is an ANSI standard with a number of standards-compliant implementation from various vendors. There are a number of good open source Common Lisp implementations (like GNU CLISP and Steel Bank Common Lisp) as well as proprietary ones like Allegro and LispWorks. I’ve decided to use the Steel Bank Common Lisp. It’s a branch off the older Carnegie Mellon Common Lisp. It runs on a bunch of platforms and compiles down to high performance native code. The native compiler (which I’ve heard good things about) was the main reason for choosing it, plus I think the name is cool.

If you’re serious about developing in Lisp on a Linux box (as I am), your IDE of choice is almost certainly Emacs with SLIME mode. SLIME stands for Superior Lisp Interaction Mode for Emacs and it really deserves it’s name. Not only does it provide solid editing features like highlighting and indentation, it also integrates very well with whatever Lisp runtime you’re using. It allows you to dynamically evaluate definitions and expressions and send them to a Lisp process where you can interact with your code just like you would with any modern dynamic language. SLIME also provides excellent debugging tools and they’ve already proved quite useful, even though I’ve only scratched the surface.

Finding Reading Material

The internet is a great place to find information, but when it comes to learning something seriously, I really like to have a proper book, or at least a well organized tutorial. Luckily for Common Lisp there are at least two great free books. The introductory level book is Practical Common Lisp, which I’m currently using. It’s a great book for people who already have a good idea of programming and want to learn Lisp. I like to think of it as a sort of ‘Dive into Python’ but for Lisp. I’ll put up a more thorough review once I progress a bit more.

The second book I’m going to start is On Lisp by Paul Graham. It’s for people who already have a good idea of Lisp programming and want to learn more advanced techniques. I read the first chapter (which is a rehash of basic Lisp) but it makes more sense to get used to Lisp first before I try for advanced stuff.

Practice makes perfect

Computer science has a lot of theory behind it, but when it comes to something like learning a new language or framework, the only way to get good is to practice. I’m not at the point where I can write large scale programs in Lisp yet and till then I need to practice. I’ve found a really great web page that has 99 problems to be solved in Lisp which vary in difficulty and cover a large range of the things you can do in Lisp. I’m at number 20 at the moment and trying to keep a good pace.

Future plans

I eventually want to write  some server-end software in Lisp, I’m contemplating some sort of content management system. I’d like to get a start on it before summer ends, but right now I’m more concerned about just learning the ropes. I hope to work my way through Practical Common Lisp by the end of next week and start On Lisp after that. If you guys know of any other good resources or small sized Lisp projects I could get involved in, do let me know. And I’ll have more updates on my Lisp adventures soon.

Writing in the 21st century

The last post looked at some questions about how reading text has changed with the rise of computers and internet. There’s been a great increase in both the amount and type of reading matter, all of which is actually written by someone at some point.

I think that the major contributing factor in the increase in how much people write is the fact that it is now so easy to get your writing out to other people. Using a keyboard, you can put down over a hundred words per minute with some practice, far more than you can write with pen and paper. Once you have something written down, you can then send that to large audiences very easily, either by private communication (email or IM) or publicly as part of a mailing list/forum or a blog or website. That’s not the end of the story. Once you have something ‘out there’, people can start writing about what you’ve written. The internet has allowed large groups of people to take part in massive conversations which in their turn generate even more text and spawn other conversations.

Given so much opportunity and incentive for writing (and publishing), there are two main questions that are worth answering: how do you actually go about writing and what is it that you actually write.

How do you write in the computer age?

With all the choices of how to get your message out into the world, you have to actually choose which one to use. Not too long ago, simple static webpages were pretty much the only way to communicate on a large scale across the net. Today, with the explosion of such things as microblogging, wikis, social networks and the such, a simple web page is probably the last option you’ll consider. I personally think that’s mostly a good thing. I’d rather be thinking about content and writing style than about HTML and CSS (though I do enjoy making the ocassional web page layout).

While some of these tools (blogs and wikis) are conducive to long-form writing, many of them aren’t, no matter how much users might try. Most of my writing is done on this blog and in the form of emails (though I have a few other projects up my sleeve). I would find it very hard to do the same sort of writing I can do here if I were restricted to (for example) Facebook’s notes. Part of the reason is that WordPress offers a more feature-righ experience, but also that a blog is designed to make content presentation the prime objective and discussion or feedback secondary (even with comments). I know some bloggers use their blogs as discussion tools as well, but I feel that a forum or mailing list offers a better environment for that than a blog post.

You could apply the same argument to wikis as well. Wikipedia in particular makes discussion a background process. But some wikis such as the very useful EmacsWiki and the originial wiki at c2 make discussion an important part of the wiki. However, both of them still have strong seed articles and the discussions provide supplementary information and allow disagreements to be placed on record.

Even when it comes to private communication, there are choices. You have email of course, as well as instant messaging. But you also the have various social networks and forums each with their ad-hoc email-like messaging system (and maybe basic chat). A private Twitter account or blog can also be used to let people close to you know about things in your life if you’re not comfortable with laying bare to the world. I’m personally just an email guy, but with multiple accounts to keep things separate. I also use IM, but only for close friends.

While it’s certainly great to have all these cool toys to play with (many of which are generally helpful), an equally important question is what do I write and who gets to read it?

What do you write in the computer age?

This answer depends a lot on what sort of person you are. How much of your life and thoughts do you want to share? I’m personally comfortable with sharing a lot of my life. I have this blog and I Twitter. I do it because I want people to know who I am and I’d like there to be a public record of my thoughts, ideas and transformations over time for people in the future who might be interested (and might learn something). Many people don’t think the same way as I do, and that’s fine. I agree completely with Steve Yegge regarding the reasons you should blog, though I think any other medium is fine.

That being said, I certainly don’t write about everything I think about. If I did, I wouldn’t have time to do anything else. I have a few criteria for what I spend my time on. I put in writing what I think would be most interesting for other people to read. I also use writing as a thinking tool and so I write about whatever problem I’m facing to see if I can write my way to a solution. I don’t write much about my personal life because I think it’s not very interesting to most people and I’d get bored writing about it. Once again, other people probably have different criteria and reasons and that’s fine too, as long as you’ve given the issue serious thought. Above all, you should make sure that you write what you want to. Stephen King’s advice has been helpful for me: “you must not come lightly to blank page”.

While you should absolutely place yourself first when thinking about what to write, you should also give some thought to who’s going to read what you’ve written. Thanks to the internet, the chances of other people seeing what you’ve written have greatly increased, especially if they’re looking for it. Computers may be more secure than a paper diary, but for a determined enough seeker, no electronic hurdle is too much. Public encryption technology is pretty good quality, but its not bulletproof. On a less sinister note, there are chances that you yourself might accidentally send out something that you don’t want others to read (remember those great jokes about hitting the “reply-to-all” button). What if you’re afraid that you might accidentally put out something that will cause you great distress later? I found the answer a few weeks ago while reading Ender’s Shadow (which is a really good book that you should read). It goes something like this:

He would never, never commit his real thoughts to a readable form. He keeps his own counsel. Always. You will never find a document written by him that is not meant to be read.

Sister Carlotta, about Bean

Pretty simple, huh? Don’t put in writing something you wouldn’t want people to read. This doesn’t just hold for embarassing stuff, it’s also for stuff that you may think is ‘copyrighted’ or something along those lines. Unless you want people to actually read your stuff, don’t write it. Its ok to want to make money off you’re writing, but understand that not everyone who reads your stuff will pay and it’s best that you accept that and not let it stop you. Newspapers are having real trouble getting to grips with this fact about the computer age, but you can be smarter than that.

In conclusion

Writing in this age is different because computer technology has made distribution very easy. This basic fact is what you have to keep in mind while writing or thinking about writing. Publishing has never been easier, but that puts the onus on you as the writer to decide carefully what you want to publish and make the most of the wonders of computer technology.

Follow

Get every new post delivered to your Inbox.

Join 331 other followers