Sunday Selection 2010-08-22

Reading

The James Franco Project This has nothing to do with computers, technology or programming. James Franco is an actor who is leading a very full life — he’s acting full time (on multiple projects) while working on multiple graduate degrees at different places around the country. Certainly not something that’s recommended for everyone, but it goes to show just how much one man can do if he puts his mind to it.

Media

Dieter Rams – More is Less The design of technological objects has always fascinated me and Jonathan Ives might be the design man of the current times, but this video shows off Dieter Rams’ work and some of his key insights and you can see them reflected in the modern gadgets that we consider to be attractive.

Software

Foursquare I’ve just recently started using Foursquare (yes, I know after Facebook announced places) which is an iPhone, Android and Blackberry app that lets you “check-in” to places you visit and gather points for traveling and visiting. It’s a fun little utility and makes for interesting games with friends (and probably helps generated revenue for local businesses). I’m hesitant to say if it’s actually useful, but it’s definitely worth trying out.

Note: I find that I’m starting to explore less and less and am considering retiring the software section in upcoming weeks. Let me know if you have any suggestions.

I’m making a language

Or as some would say I’m starting a new religion. But no, in all seriousness I am creating a new language as  part of my senior honors thesis. Why am I doing this? Because I need a good topic for my honors thesis and programming languages are what I’m really interested in. I also want to go to grad school next year for programming languages and I think the best way for me to learn about languages is to make one from the bottom up.

This is the first time that I’m making my own language, but I have been studying programming languages for the last 2 to 3 years. And I want to take those lessons learned and apply them. I’m trying to strike a balance between taking the best of what’s out there and putting in original ideas. There are a lot of great ideas out there but they’re spread across lots of different languages. Some languages like Ruby do a great job of pulling together the best of what’s out there. Under normal circumstances I would be perfectly happy with building a language that does nothing new. But this is an academic honors thesis and I would be really really disappointed with myself if I didn’t contribute anything new.

What am I going to do that’s new? I want to solve a problem that is actually being faced by programmers on the front line and though I admire the theory behind languages, I’m more interested in implementation than pure theory. One clear problem in our field is the rise of slower, parallel processors, multicore CPUs in particular. And we have very little idea of how to use all those cores probably. There are certainly solutions that are being proposed — threads, software transactional memory, Actors, so on and so forth. But these tools are generally considered beyond the reach of everyday programmers. What most programmers are acquainted with is object-oriented programming. My idea is to take an object oriented language and make it concurrent from the bottom up. The naive idea (that I have to significantly research and refine) is that each object is its own thread of operation. This is similar to the Actor model and I’ll need to study and think more to see how to differentiate between that and what I want to do.

But as I said there are a lot of good languages out there with great ideas and I’m going to shamelessly take as many of them as I can. Everything will be an object, but it will be prototype-based (a la JavaScript), not class-based. Syntax-wise it will be elegant and homoiconic: that is there will be as few special syntactical constructs as possible and programs will be data structures in the language itself. This is to lay the groundwork for macros, though I probably won’t be getting to that any time soon. However, it will have first class functions from day one and I’m going to try like hell to make everything (or make it possible to make everything) first-class. And this isn’t just for functions, I want to extend it to tests, constructs and even documentation. All of these are good ideas that have been tried and tested before, I’m just combining them in a new (and hopefully better) way.

Technology aside, the language will be completely open source, probably under the GPL v3. As for the name, I’m probably going to call it Parley. I want a name that implies discussion. Plus it opens up a whole world of pirate-related metaphors and names for later use and I love word-play. I don’t plan on really working on it until the end of August, though I will be reading up and throwing ideas around. Code will be on Github as soon as I have something that works.

Sunday Selection 2010-07-25

Reading

Emacs vs Vi is rooted in the love of Lisp — This is an older article I came across a few days which shows how the universal programming powers that define Lisp are at the root of the Emacs/Vi divide

Have generics killed Java in which the authors argues that generics have harmed Java and that static type checking is a dead-end

Media

Public Static Void — an excellent talk by Rob Pike that discusses language and evolution and why our languages mostly suck

Software

Firefox Alpha with TabCandy is an early test release that contains a very interesting new interaction interface for tabs which I think is a step forward. Now if only I could run it all from my keyboard. Be warned that no extensions will work.

Bonus: Here’s the TabCandy video

Guns don’t kill people, people do

No, this post is not about guns, gun control or the right to bear arms. This post is about the iPad (you knew it was coming). There’s been a lot of talk of the iPad and like all such things, there’s a lot for and a lot against. I used one for a few minutes yesterday and it was an interesting experience. The iPad I was on didn’t have a lot of apps and I can’t say  I gave it a very thorough run down, but from how much I did use it, there are some things that become obvious (and not all of those things are about the iPad itself).  Here’s what I learned:

It’s a great e-reader

I loved reading on it. I used both the iBooks app as well as miscellaneous stuff online. I wanted to try out Instapaper on it too, but didn’t get a chance to. But it’s very clear from the get-go that it’s a great reading tool. The text display is beautiful in the same way that text display on Macs are. And the fact is that you can hold it at book distance instead of monitor display which makes it a pleasure to read. It’s not hard to think that you are reading a book.

It’s all about the interface

Make no mistake about it: the whole point of the iPad is the interface. As Jef and Aza Raskin tells us, the interface is the application to most people. The iPad takes this to heart and so do the apps on it. The iPhone apps run on it, either at normal iPhone size or at double-pixel size. Either way, they’re suboptimal (if not absolutely terrible). The apps that become successful will be the ones that use the large screen area and the touch interface best. It’s not about raw functionality, it’s about how well it’s exposed. And this understanding leads to my next understanding:

The interface could live outside the iPad

I have an Eee Netbook which I use fairly regularly. The screen size is about the same size as the iPad’s. After using the iPad coming back to the netbook was a bit of a pain. It was annoying because I was using standard desktop apps on a tiny screen. However, if the iPad interface (or just some of the apps) were ported to netbooks, then things would be much better. Apps like Instapaper and the WordPress would do really well on a netbook because they maximize screen usage. In fact, some of them might even be better since you don’t lose screen space to the keyboard when you need to type. I really really hope that some people take ideas from iPad apps and port them to the netbooks. In particular, I hope webapps start using the same interface for the iPad as well as netbooks. More on this in a later post.

It’s not going to kill computing

There has been a lot of talk on how the iPad is a threat to real computing. But here’s my take on the matter: the iPad is a different medium entirely and it’s not going to replace the general purpose computer any time soon. I agree with Dave Winer: At the moment, the iPad is a toy. I also agree with Alex Payne’s suggestions on how Apple could make the iPad experience better for both users and developers. There this going to take a lot of work (and a lot of apps and web services) to make the iPad a standard computing platform in any sense. Right now, I’m going to hold off judgment on the matter until the next generation or two come around.

About the post title

I chose the post title to emphasize the point that the iPad itself is not revolutionary, or good or bad or dangerous. There are a lot of factors that will come into play over the next few years to see how the iPad works out. But many of the ideas that the iPad is bringing to light (such as carefully building interfaces tailored to the task at hand) are applicable outside the device itself and it would be nice to see them popup elsewhere (including other mobile computers). Where the iPad story ends is up to us: the users, the programmers and Apple Inc. We live in exciting times and the iPad is a sign of those times. The way we interact with our machines is changing and the good thing is that we can drive the changes in the way we want to. Let’s embrace that opportunity.

Treat your education as a business

I’ve been thinking about business a lot lately, thanks in no small part to the hype surrounding the book Rework (which I haven’t bought yet, but am sorely tempted to). Also to blame is the startup visa that is interesting to me, to say the least. As romantic and exciting as starting a business may seem I’m a full time student right now and will be for a good few years to come. I’m really enjoying my student career, but I’m seriously thinking about starting a business someday. Over the past few weeks, I’ve been putting together the theory that though I won’t start a business now, I can certainly apply business-style thinking to my student life.

Before I dig in, there’s a disclaimer due: I’ve never run a business and I hope to never get a formal training in business. I’m also very much a fan of start-ups and I like businesses that sell premium products with large profit margins than ones that sell tons of cheap stuff. Feel free to provide your own examples. What I’m going to talk about will be informed from what I’ve read and heard backed up with healthy amounts of common sense (which often seem to be rather lacking in the business world). As an additional clarification, when I talk about getting returns from education, I’m talking about things you can cash in on today, not some vacuous future where you get a nice job and pay back your hundreds of thousands of dollars worth of student loans.

Your job is to turn a profit

If your business isn’t turning a profit, then you fail and deserve to be cut down by the Invisible Hand. At least stop calling what you’re doing a business. By the same logic, if you’re going to college and not learning, you’re doing it wrong. Living on a really diverse college campus it becomes abundantly clear that there are a fair share of students who are perfectly willing to coast along and graduate with the bare minimum credit and effort. It’s similar to how many businesses seem to think that it’s ok to give away their product for free with no clue as to how to get into the red. If you’re paying thousands of dollars and spending hundreds of hours in class, make sure that you are actually learning something that you are interested in and what to learn about. Of course you can’t do that if don’t realize that

Showing up is half the battle

This isn’t so much a business maxim as it is general life advice. Getting down to work everyday and actually starting on the important tasks is essential to running a business. You won’t be making any money if you’re not actually producing something. Similarly, don’t expect to be learning things if you’re not going to put in the effort of going to class, paying attention and doing the assignments. It’s tempting to sleep in and just study for the exam, but we all know that in most cases it just doesn’t work that way.

Though showing up is necessary, it’s not sufficient to keep you on target. In particular, there’s no point showing up if you’re not showing up for the right things. Which is why it’s important to …

Decide what your product is

Microsoft does a lot of things, but it still makes almost all its money from Windows and Office. Walmart knows what it does: sell lots of stuff for cheap.It irritates me no end when college students get to end of their second year with no idea of what they want to major in. Keeping an open mind and exploring is good, but you can’t expect to get a good education if you can’t decide what it is you want to study. If you’re not going to take charge and make your own decisions, someone else is going to make them for you and you probably won’t like it. After all,

No one is going to run your business for you

As the people at 37signals make clear: you can’t just be “the idea guy” and your ideas count for nothing without good execution. If you want to get a good education, you’re going to have to stand up and get it yourself. You’ll have to take hard classes, study hard and smart and really immerse yourself in the material (as opposed to the night-before-exam cram routine). If you take easy classes and do the bare minimum needed to pass, then you’ll get the bare minimum back — a degree that thousands of other people have as well with nothing to set you apart.

I can tell that I’m starting to make the whole thing sound really gloomy, but here’s the kicker:

You have to enjoy what you do

No one ever succeeded in a business that they didn’t believe in, but a lot of people get stuck in jobs they hate. A lot of students think that college is stressful and boring and a drag because they haven’t figured out what their product is. The happiest students I know are the ones that really love what they’re studying and tie it into their activities and daily lives. They may be insanely busy, in the same way that people at successful companies can work insanely hard, but they don’t regret it. In contrast, the students that are the most stressed are the ones that don’t like their major (and hence put off studying till the last minute) and would rather be doing something else. If you’re in it just for the money (or the degree) you’re doing it wrong and should seriously consider doing something else.

On an ending note, I haven’t yet taken all the rules to heart myself. I enjoy what I do and I have a good idea as to what my product is. I show up most of the time, but about once a week I’ll expect someone else to watch the shop for a prolonged period of time and my profits aren’t as high as I’d like them to be. But putting these thoughts down have given me a better idea of what I’m doing wrong and how I should restructure. I’m look forward to strong second quarter earnings.