Tuesday, January 26, 2010

On Cloud Computing

While I typically blog AFTER the students have blogged, I felt pretty inspired today and I thought I would pen down my thoughts before I forget them.

I would like to thank Simone Brunozzi from Amazon for taking time to come talk to the class about Amazon Web Services (AWS) and Cloud Computing in general.

The reason why we are deploying the class assignments on AWS and why I invited Simone to give a talk to the class is because I believe that cloud computing is future (and Amazon didn't pay me to say this). I'm saying this not because the technology is cool, but because it makes business.

Simple reason: it's annoying (and expensive) run a data center. :-P

I must admit that while I have a reasonably good idea of how the technology works 'cos my area of research is networking and distributed systems, I had never used a cloud computing service before until this semester.

I believe that it would be helpful for the students to understand how it works, because while many aspects are the same as traditional servers, there are also key differences. For example, persistent storage is something that requires a little more understanding and thought, i.e. should we put the data in S3, EBS or MySQL?

While students are expected to work mainly with EC2, I hope that the students will also use the opportunity (and free credits) to explore the other AWS services that Simone mentioned.

I'm not going to talk about the technical content of the talk since that's for the students to talk about and discuss. There are three things that I would like to highlight.

One, the conversion to cloud computing will not likely be an easy one. The reason is that people don't necessarily change just because something is better. Small companies probably don't need the full capabilities of the cloud; large companies are resistant to change.

The resistance is more often than not a human rather than a technical issue. Basically, change is scary because things can go wrong. Middle management in Asia is typically conservative.

This is the question: suppose they convince their boss to switch over to cloud computing and their company saves a lot of money, will they get a bigger paycheck? Suppose something goes wrong in the process - who's going to take responsibility?

The lesson here is that it's not enough to big something bigger and better. You've gotta convince the sucker to buy it. :-)

Next, I really really pleased by how Simone answered some of the questions. Basically, to almost all the questions of "how do we do it?", his answer was "it depends".

This underscores the importance of being flexible and understanding that life is complicated and that there are often different answers to the same question "what is the best way to make data persistent on AWS?" under different situations. In a nutshell, context matters.

Finally, I was very impressed by Simone's story about him advising the customer who had 200 EC2 instances to run his own distributed file system instead of using S3 or EBS (which would cost the customer more and increase AWS's profits).

This underscores the importance of integrity in doing business.

Many of my students will probably eventually end up starting their own businesses.

My wife does not have very many good things to say about the sorts of people she has come across in the corporate world. She said that integrity is severely lacking.

I hope that however that my students will learn from Simone's example and "do the right thing". Don't screw the customer to make a quick buck. Create value and build real businesses. :-)

Tuesday, January 19, 2010

The Paradox of Simplicity

CS3216 evolves over time.

We have had a lecture on "Principles of Software Engineering" since the first year.

The first year, it was guest lecture by Prof Stan Jarzabek. It was a good lecture -- but the non-programmers complained that it was too technical and they were completely lost.

Last year, Prof Stan was busy and so I did an abbreviated version of the lecture followed by a sharing session by three students, Zi Han, Wei Man and Justin. The sharing session was quite well-received but there were still complaints that the lecture was too technical.

So when it came to this year, I thought about what we should do and decided to keep the sharing session but do the lecture differently. Thanks Zi Han, Wei Man and Justin for coming down yesterday to do the sharing session.

What I had come to realize was that it's not very meaningful to cover the principles of software engineering that students are not likely to relate to in CS3216.

Software engineering is a complicated process and mostly relates to big systems. In CS3216, the focus is more on ideas and ideas, and while it would be preferable if students produce world-class and easily maintainable code, we have to be realistic about what can be accomplished in 13 weeks.

In this light, I decided to simplify and to focus on what is most likely relevant to the students here and now. I decided that it is important to talk about stuff that the students can relate to immediately even in their first assignment.

The simplification is evident on the number of principles we discussed in the lectures. Two years ago, there were six principles; last year, there were five; this year, I only talked about three of them. So much for dumbing down.

Some students seem to think that the stuff I mentioned: (i) modularity, (ii) abstraction and (iii) design for change are quite straightforward -- and they are right. It's mostly common sense actually.

The irony of life however is that many things are pretty simple and straightforward. Strangely enough, people often fail to do what is simple and straightforward.

For example, the following lecture on Time Management by Randy Pausch says pretty obvious things:

How many people can actually do it? Personally, I can't even manage some of those things.

In this sad state of affairs however is opportunity. Basically, this suggests that many people already know how to significantly improve their lives --- they just have to DO IT. :-)

Truthfully, one of the reasons why the lecture was the way it was is because of what I'd heard about how some of the groups are doing -- some groups were struggling to distribute the work, some groups didn't know how to start and others didn't know what to do with the non-programmers. It's a learning process for everyone. :-)

Sleep matters. Finally, I'm not always serious about everything I said in class. While it is true that people can do a lot more things if they don't sleep, I am not advocating that students should deprive themselves of sleep.

In fact, research has shown, and as Li Yen has kindly highlighted, sleep deprivation hurts performance.

In fact, it's more than just sleep. Some amount of balance and moderation is necessary for life in general. Many people focus exclusively on their careers to the detriment of the other parts of their lives (family, health, friends, etc.).

While I don't believe in well-roundedness and advocate focussing on developing one's strengths, I do believe that some amount of balance is necessary in leading our lives.

Our lives are pretty short. I should know. I actually feel quite old already. :-)

Wednesday, January 13, 2010

On Success

Further on the question of success, I chanced upon the following Anthony Robbins video. Title says "Wealth Mastery" but Anthony Robbins deals with the issue of what it means to be successful and why some folks are outwardly successful, but extremely unhappy.

We were talking about failure and celebrating failure. The following is a cool story about failure and more failure and even more failure ... and then success:

Tuesday, January 12, 2010

Hard Questions

First, I would like to apologize to the class that today's lesson ended way late.

Like I said in my previous post, CS3216 is "like a box of chocolates". I never quite know what I'm going to get. Truthfully, it's pretty scary.

The Show-and-Tell this year was much longer than either of the Show-and-Tells for years' past. The main reason is that we had a *much* larger number of musicians, singers and dancers. Also, lots of the students showed stuff on their laptops.

This year was much more show than tell and those who told, told a lot. :-) Previous years were mostly tell and not so much show.

I guess I am quite good at cutting people off if they talk to much -- but I don't know how to cut people off in the middle of a musical piece.

My consolation to the class is that future lessons, except the Facebook application seminar, are not likely to go overtime. Remember that I'm the guy with the wife and two screaming babies at home.

If I keep going home past 11 pm, it will not be long before I have my ears twisted off. I think I have nice ears. I would like to keep them attached to my head thank you. :-)

Anyhow, typically I ask students at the end of the first lecture if they have questions and I expect "normal" questions.

Today, the students asked two questions and I didn't have the time to answer them so I said I would answer them in this blog. So here I am stuck with two hard questions.

First question: What is success?

Second question (asked by Wai Hong after Show-and-Tell): What is passion?

What do you do when confronted with hard questions? You Google - and I did exactly that.

I estimate that there must be at least 300 articles on success and about 30 on passion. Those with more time than me can go count and let us know exactly how many.

So obviously, people are more interested in success.

The truth of the matter is that I don't "know" the answers to the two questions. I can only talk about my impression of what they are.

I think success is a state of mind. People can be divided into two categories by their mindset: winners and losers.

The winners aren't necessarily your billionaires and often times if they aren't quite billionaires yet, they are just on their way. But this analogy seems to suggest that success is measured in financial terms. Maybe it is. Maybe it isn't. How would I know? After all, I'm a Computer Scientist, not a philosopher.

The following quote by Ralph Waldo Emerson is pretty thought-provoking:

What is Success?

To laugh often and much;

To win the respect of intelligent people
and the affection of children;

To earn the appreciation of honest critics
and endure the betrayal of false friends;

To appreciate beauty;
To find the best in others;

To leave the world a bit better, whether by
a healthy child, a garden patch
or a redeemed social condition;

To know even one life has breathed
easier because you have lived;

This is to have succeeded.

I once stocked up on copies of this book called Secrets of the Millionaire Mind and I gave them away to random students who came to see me (it's a cheap paperback lah). I've run out. Sorry.

The point of giving out this book was not so as to encourage students to become more money-minded, but to highlight to them this point I'm trying to make: success is a mindset.

Sorry I like to pick on students, but welcome to CS3216. This student for example has a mindset problem because he says "I think I am a failure".

The truth of the matter is that I knew that already. Our friend submitted a seven-page personal statement and said he "already tried to make it as short as possible". After reading every single word and thinking through what sort of a person would write what I was reading, I was not surprised to read the "I think I am a failure". :-)

Fortunately, the story does not end here. This student also says, "I don’t want to be one", which I also expected.

The truth of the matter is this: CS3216 doesn't take losers. There aren't already enough places to go around. It is only right to offer the places to those who have the potential to benefit the most 'cos I don't have any confidence that I can turn losers into winners. My goal is to try to pick the winners and try to help them win earlier and bigger. :-P

This particular student has talent. He doesn't really know what it is, but it's there. He feels he hasn't quite achieved his potential and he is NOT content with status quo. That means his mentality can be "fixed" so that he falls squarely in the "winning camp".

Let's play a little game. I know what his talent is. I suspect he doesn't. At this point, all of you probably don't either - since you don't know him well enough. Over the course of the semester, why don't you guys figure it out and do him a favour and tell him? :-)

Finally, what is passion? I think passion is a deep-seated conviction that empowers folks to do stuff above and beyond what is typically known as mediocre. It's not about what you believe, but knowing WHY you believe. No one says it better than Anthony Robbins.

I believe that I have a passion for what I do. It is now 4 am. I am dead tired. Still I blog. Enough said. :-)

Sunday, January 10, 2010

A New Beginning

Tomorrow will be the first class for CS3216. Again.

Typically, if I were to be teaching a class for the third time, I would probably be able to do it in my sleep.

Not so for CS3216.

While many people have been on vacation this past month, my dedicated teaching staff have been hard at work developing the new assignments for this year. To them, I owe a great debt of gratitude. Without them, CS3216 would not be possible.

Unlike last year, we will be introducing a new Google Wave assignment. Google Wave is so new that none of us knew how it works, and much less what it is good for - but we still have to come up with an assignment.

Also, instead of deploying their homework on the SoC servers, the students this Semester will get to deploy their work on Amazon Web Services. Truthfully, we also had no idea what this was about and we had to go find out.

But such is life.

There is the saying that if we really believe in what we're doing, then we better "eat our own dog food". So we eat.

CS3216 is about learning how to take risks and work outside our comfort zones. Why would we want to do something like that? Well, because if we do not push at the boundaries, there will be no progress - and if we do not push at the boundaries aggressively enough, there will not be breakthroughs.

So every semester we try new things. We try to make it better - though we aren't necessarily sure that we will succeed.

I was chatting with Kok Wee (course TA) after we finished CS3216 last year. I told him that I thought we did well and the feedback for the module seems to indicate so too. But it's scary sometimes when things go well, because in creeps the fear of screwing up. When things are going well and swimming along, where else do you have to go but down?

To digress, I would like to take the opportunity to address the following comment by a student last year: "I strongly suggest the last project before the Final Project be scrapped. Too much time is spent to master a totally new platform to create a new app. Perhaps it is not so strenous on non-programmers but it takes a lot for programmers to pick up a totally new platform. Although the intention is to expose the students to "evolving platforms", I feel that it is way too heavy and results in a lack of time for the final project. Overall this module feels more like an 8MC module and this view is echoed by all the students of the class. It is extremely taxing on students in their 3rd or final years where they are also pursuing their FYPs or design projects which also require an immense amount of time. While those modules are appropriately awarded with 8 or 12 MCs, this isn't. Although the student is already spending the majority of time on this, it does not translate to better scores, instead, it drags down the students' overall score as the other modules are severely affected."

Two things: (i) this student is referring to the Microsoft WPF assignment we had last year, which we have replaced this year with the Google Wave assignment. Google Wave is really just JavaScript, so life will be better this year (not only for the students, but for the teaching staff). (ii) We will continue to emphasize to the students to try to moderate the size of their projects and to avoid building the mother-of-all-projects project to take over the world. Instead, we hope that the students will deliver small but cool projects.

Sometimes, small is beautiful.

Sometimes, when we do something right/well, there are fears of not being able to reproduce past success. I would be honest and admit that these fears are quite real to me.

CS3216 really has a lot of random uncontrolled factors. Like Forrest Gump says, "it's like a box of chocolates." I have no idea what we're going to get.

However, there is also the theory of "Do or Do Not, There is No Try." Sometimes we might have concerns, but what really matters is whether we believe in what we do.

I believe. And fortunately for me, I have a dedicated TA and four brilliant Tutors, who are all ex-students of this class, and who share the same belief.

One lesson on risk management is to find the right people who BELIEVE in the same vision. I am fortunate to have found the right people and with that, we press on with CS3216 for yet another semester.

To conclude, I would like to address the issue of blogging.

It's clear to me that some students are going to find blogging a pain/chore -- and like Randy Pausch says, "if there's an elephant in the room, address it".

CS3216 is about learning. The sad thing about learning is that students can go through motion the entire time they are in college, get good grades and learn absolutely nothing. This statement might seem like nonsense, but it's true.

How does blogging help in the learning? Well, we have to go back to the psychology of learning.

The thing about blogs is that there's some ownership. When a student blogs, it makes a statement about who he/she is. Very few people want to make a statement to others that "I'm a loser".

In this light, when "forced" to blog, students will spend a lot more effort thinking about what to say and how they want to say it. It is not so much the blogging that the learning takes place, but in the agonizing over what to write where people will learn something.

They are forced to take stock of what they have heard/seen and draw conclusions. That's important. Many people go through life not thinking hard about what they have seen or heard.

I am one of the weird profs who tell my students that school is overrated (fortunately, parents don't believe that - or I'd be out of a job :-P).

Well, school is overrated, because learning is EVERYWHERE. To think that learning can only take place in school is completely misguided.

That said, given that we have job to educate our students, we should try to earn our pay.

In addition to "forced" thinking, there are two other key advantages of blogging.

One, it is important to learn to communicate in ANY job. Writing more through blogging is one way for students to practise this skill. We're not looking for Shakespeares in CS3216. People just have to express what they say in clear and concise manner.

Foreign students might find blogging even more of a pain 'cos they have to write in a foreign language. All the more better write more to improve your command of English.

Two, the blogs actually allow me to figure out exactly what people are learning and how much they are learning. Blog comments also provide me with a way to ask questions and challenge assumptions and/or clarify ideas. Students can also interact with each other and learn from their friends through the blogs.

There are many good things going for blogs - but there's no free lunch. Blogging every week requires effort and discipline.

As it turns out, I believe that teaching also requires some leadership by example.

If I am to inflict such pain on my students, I jolly well demonstrate that I can take the same pain. In this light, I will also write a blog entry every week like the students.

However, I will probably do it AFTER I have read what the students have written.

It's not because I dunno what to say and I need to check what the students have written to check market rate and because I need to "copy" from the students. In fact, by blogging after the students, I am making my life much harder 'cos the expectation is that I have to say smart things that none of the students have said. :-)

Actually, if students expect me to say "smart things," I suspect they will be sorely disappointment. My talent lies in stating the obvious (did I say school is somewhat overrated? :-)).

But more seriously, I don't want to write first because there's still a very bad culture in Singapore where students tend to think that there's some "model answer" and that the prof knows the "right answer". I suspect that if I weigh in prematurely on issues, students will end up worse off because they will be circumscribed by what I say.

To understand my concerns, see this entry. I would like to clarify that students won't "score more points" if they agree with me. No one has any need to rewrite *any* blog entries. :-)

What exactly students think doesn't really matter. What matters more is how and why they think the way they think. I'm am actually more impressed with students who come up with views contrary to mine that are backed with with good ideas and thorough arguments.

Anyway, my closing remark to the new students is this: don't complain about this blogging business. Just do it (Nike style). If you struggle with it, good for you. You're learning something and getting smarter.

I'm ready for CS3216. Are you? :-)