Friday, March 5, 2010

What I've Learned From Wave

24 hours after we first sat down to code in Sheares hall, I looked up and said: "I must blog about this."

"Ya, you should," Xialin said, and she looked up from her code for all of like 0.5634 seconds before looking back down at her computer screen. And I think that was the end of that conversation.

It could've been at 2 in the morning. Or 5am. Or maybe 7. Time kinda disappears when you've spent a whole night staring at monospaced fonts. I remember being hungry at around 2am. I also remember Biyan placing her head in her hands - I think I was plugging Haocong's backend into the UI then, and we both looked over at her and asked her if she was okay and she looked up and said she was thinking - but that might've been on Sunday night.

Like I said, I don't know. I can't remember. It's now all a big blur in my head.

What I do remember, however, is how much I've learnt from the Wave assignment.

What struck me the most about Wave was the sheer intensity with which Biyan and Haocong worked. I learned a lot from them. I can be very indisciplined - earlier on Saturday night I sat down to watch an animated video, putting off coding the UI, and Biyan said: "Cedric, I need to plug in my code into yours soon. So please work?" and I felt very guilty about that.

And even after I started work - and I didn't sleep like the other two - I knew that I did not match up to their level of focus. Sometime around 4 in the morning I did a count of Biyan's code and it was up to 1500 lines. Sure, there was a lot of whitespace, but my jaw dropped when I did the count, because I was quickly scrolling through the file and I figured out what she was writing and it was bloody complicated. The algorithm for check probably gave her the most trouble. And she was doing this on 2-3 hours of sleep.

Wave was also the first assignment in which I finally got to write code. As in - proper code - not the weak little descriptive languages like HTML and CSS with which I'd been playing since I was 15. Haocong said: "I need you to write this function, and you call this function from the back-end, and the parameters are this," and then he left me to do it. I really liked that. Here he was, an NOI programmer from his home country, and he trusted me to write stuff. I did it and I was quite pleased with myself after that. Learning a new programming language felt very satisfying; I'd only wished I'd done it sooner.

And there are other things, of course. Haocong spent a lot of time helping the two of us, because he finished his bit - the backend code - in about a night. I found that amazing. Haocong is probably the most understated elite programmer I've seen in 3216 so far - he doesn't say much, and he doesn't show off, but he gets things done. And then he tells you what he still needs done, instead of writing it himself, even though you probably know your code would take him all of 30 minutes to do. "When did you learn Javascript?" I asked him - and he said (without any trace of irony or inflection): "Last night."

(I think he took slightly longer to learn objective-C, but Mismatch currently has an iPhone version, and it looks great on his laptop. So I must say that, overall, it was a real learning experience working on this Wave app with him.)

Two more things.

First: our team made the mistake of waterfalling our software. I believe I've learnt my lesson - I won't do that again. Ever. Halfway through - at around 4 or 5 or 6 in the morning, I looked up from my code and said, thoughtfully: "You know what we should've done? We should've sat down together and written a whole list of interfaces before we started." And I remember Haocong sighing to that.

In the end, however, our app managed to work when we plugged things into each other the night of the deadline - but just barely. I thank God that we were writing a webapp, and not something bigger or more complex. And that became very true! Things began to be really scary when it hit 11pm and we were still nowhere near a playable chess game. Never again, I tell myself; never again.

Second: I no longer find myself insecure about my programming abilities. That is not to say that I'm great at it. I started real programming last semester, which was really late, and I found - to my surprise - how much I really enjoyed writing code. It was like finding a long lost friend. But because I was new to the school then, and new to so many things in Singapore, that I became scared and defensive when I saw all these great programmers in 1101 speaking in Java like it was their second language. They were better than me and they knew it. They didn't hesitate to talk over my head to show off how good they were with their code, and they compared lab marks with each other, and they asked me how much I got for my exams and my tutorials, sizing me up as potential competition and then then reconsidering that when they learnt I was new to this. And this made me really insecure - as silly as that may sound.

Today, however, I now know that these kids - while good - are nowhere near the level of Haocong or Biyan or Hung or Adhiraj. And that's a comforting thought. It means that I don't have to worry about those kids, for they are an order of a magnitude below than the 3216 programmers ... who are, in turn, an order of a magnitude below than the best programmers in the world. And I think that's important to know. What this means is that I needn't compare myself to them - because I know I'm new to this and I now know there's always somebody who's better than me. I have learned that what I really should be focusing on is the programming itself, because it's fun, and it's beautiful, and not the competition, or even the grades, because I shouldn't let all that taint the learning itself. And I think that is important.

Programming to me is fun and I hope to keep it that way. I'm glad I learned that from Wave. And so now: onward.

9 comments:

benleong said...

3216 programmers ... who are, in turn, an order of a magnitude lousier than the best programmers in the world.

Not true, Haocong, Hung and Adhiraj are about as good as they get. They might not be the world's best at this point, but they are definitely not an order of magnitude worse. If they continue to work hard, they can actually reach the apex, i.e. become among the world's best. :-)

Be comforted that you get to meet among the world's best.

Eli James said...

I meant Ken Thompson and Linus Torvalds. And probably Bill Joy - you know, the rockstars.

Right now - and you can't deny it - us students are at a ledge, some 10,000 feet below where they are.

Wai said...

Mishmash... Haha. =) How's Treehouse coming along?

Eli James said...

OOPS! Spelt wrong. =) Treehouse, I think, is going to be a personal project for the summer hols. ;-) Finding the source code as we speak.

Eli James said...

You know, on second thought: I've changed 'lousier' to 'below'. It doesn't have the quality connotation, and it makes more sense with what I'm trying to say.

Wai said...

Ouch!

Actually, I think you can do it as a personal project too. I think it's important that everyone's working on the project is passionate about it. =) I think you can do it! I wish I could help.

Looking on the bright side, does that mean Adhiraj is a free agent now? =p

Eli James said...

@Wai Hong: I have no idea, to be honest. When you posted that question, yes, he was a free agent. And then two hours after you posted that question he kinda wasn't. And then, this morning at about 4am, he confirmed wasn't.

Who is to say he won't be a free agent tomorrow?

WiRuS said...

Yeah.. Haocong is the most underrated programmer in CS3216.. But his humbleness and enthusiasm makes everyone respect him..

Eli James said...

@Hong Jun: So true. So true indeed. =)