Sunday, April 18, 2010

This is not the end, just the beginning

Time here sure flies very fast. I can remember very well the day I applied for CS3216 or the first lecture of this module. Now it's near the end already. The experience is very real, very wonderful, and very meaningful as well. Prof's last question in this blog is what I have learnt in CS3216. Interestingly (or is it on purpose), the first blog was also on the similar topic. Somehow, I partly feel that it's like a cycle. You predict what you will learn, fight and learn with your best, then review what you learnt, and then the same cycle (maybe different situation) begins. Not very, but just a feeling....
What have I learnt in CS3216? I don't know exactly, but the followings are the ones bearing deep impression in my mind.
Idea is cheap, and execution matters. If I'm not wrong, prof always mentioned that idea is cheap, about which I agree but not totally agree. In my opinion, idea is still expensive to a certain extent. Original ideas still have a very good stand in this world. But prof is also right. Generally speaking, ideas can be considered to be cheap ‘coz it's very hard to come up with a real original and unique idea, which is but to say, regardless of how wonderful your idea is, there's always a high chance that there're some people in this world who also come up or already have come up with the same idea. Speaking of this, it is naturally that one of the factors that differentiate people with the same idea, is the execution. Therefore, just partly, execution matters. The other reason why execution matters is that idea is just idea, it is not real, and without execution, it will just be forever theory only, which might be said to be... nothing (not all cases). Another reason I feel that execution matters is that practice and theory might be very different in many cases, as time is always an essence, and normally people want to achieve the best in the shortest amount of time. The last reason is that idea is just on paper, no matter how good you are, it's very likely that there're many problems out there you don't expect, and regretfully, most of them do matter in life. Regarding to our final project, the idea in the beginning was quite good and impressive. But when it came to make that idea real, many problems arose. And in the end, the idea about skill tree was dropped ‘coz we didn't have enough time, the idea about the item is also not available yet, also because of time, .... and many other problems as well. Not a quite good example though. In conclusion, idea is just theory, execution is one important things to make idea reality, and so, it does matter, even a slight difference in execution may result in a great difference in the outcome. In other words about this, all ideas can be considered to be the same, either good or bad, without execution.

Programming. Yup. I can feel clearly that I have learnt quite a lot about programming in this module. I learnt quite a number of programming language, html,js,php,as,... Also, I learnt lots of stuff about web programming, about database, about security and some others as well. Prof said that it's not possible to miraculously become an expert after some hours, but I was equipped with the basic about those problems so that I can avoid very bad code and have a foundation or interest to go deeper to the field. Regarding to programming itself, the amount of coding in this class is significantly more than the code I have done in the rest of my life up to now (with regards to CS1101S and CS1102S). Actually, many parts of my code are not good, if not, crap, but I feel that many other parts are quite good. So let's be happy with what I've learnt about coding for a while. Hmm, I think that programming is quite not the very heart of cs3216, so let this paragraph to be short, i.e. I mean to end it here.

The next wonderful experience I've gone through in CS3216 is teamwork. Those are the first time I worked in a team with other people, and greatly, all of them are very good. Facebook project, seminar project, Google Wave final project, all of the people there are very good in many aspects, and it's really great to be able to work with them. (Actually this not quite about learning).

The next original and unique stuff I learnt in CS3216 is to learn 'how to learn'. I still remember prof's idea in the first lecture: "If you give a man a fish, you feed him for a day. If you teach a man how to fish, then you feed him for a life. But in this modern world, is there any fish out there (which is but to say, there's no guarantee that what people teach students at school is applicable later on). If you give a man a rod and he figures out how to fish, then even if the world changes, he will also be able to absorb, learn new techniques and adapt to the new world." It's not exactly word by word, but generally it is that. It was very impressive the first time I saw this quote. It was more than just right and true. It was wonderful. And seriously, I think prof did quite well in teaching this idea to CS3216 students. I and we, CS3216 students, seriously learn many things on our own and adapt those to the real world.

Followings are some random stuff from prof and some wonderful entrepreneur people:
Blame yourself, don't blame any other.
This can be one of the things I will remember for the rest of my life. Before CS3216, I always thought that I blamed myself for any mistake, not any other, ‘coz if I want to better, I must face my mistake and fix it, running away by blame any other will solve nothing. In the end, it turned out that I was quite right about the latter, but I was wrong about the first. I was still finding excuse for myself when making mistake or doing something not quite good. I still remember very clearly the time when prof quarrelled with me when I let player use keyboard to choose difficulty of the game rather than using mouse with a click (actually I still haven't changed my mind over the reason of that was I tested it on my computer when coding and it's more intuitive to use keyboard rather than use mouse, cos my hand was generally on the keyboard. But seriously, when prof pointed it out, I really realized that it was my mistake to not test on the web at that time, when it's more intuitively to use a click than keyboard, my bad :( ). It really, really made a serious impression on my mind. Prof was really serious, and I became serious as well. I realized that many times when I failed or did not quite good, I instinctively found some 'lame' excuses rather than looking at my very self, and then, I couldn't become better, ‘coz eventually, I learnt nothing. Now, I really feel that I'm ready to blame myself in any situation rather than to finding any other 'lame' excuses. Speaking of this, it doesn't mean defenceless, seriously, when I must defend myself when I have a reason, I have my point of view to do, I will defend. It's just that I will look at myself first, seriously and truthfully finding excuse inside me, before seeing at the other.

Apply common sense.
I think this is one of the hardest stuff to absorb from prof. Regarding to his quarrel above, he did also mentioned that I should apply common sense, and if my common sense is low, my skill will also be quite low. Truthfully, I think prof is right, but it's not as easy to learn and apply common sense as to speak about that, plus the fact that common sense might be said to be cannot-be-taught, it's grown and built up by each person. It's quite sad to say that even now I don't have the feeling that I have learnt completely well about this problem, about applying common sense, or having a good foundation of common sense. But it's even sadder if I give up and leave this problem for now, which is but to say, even though now I don't think I have completely absorbed the idea about this problem, but I will give it more thoughts, try harder in the future, and I believe, eventually I can learn this to the fullest :-).

Do or do not, there is no try.
What is this connected to CS3216. Seriously, in my opinion, it does. I can see many of CS3216 people fail midterm and do not earn a very good grade at their other modules. What makes it so, what makes CS3216 so great a place that we want to contribute as much as we want? Basically, I think it's because CS3216 is a dream module for many people, a module they themselves decide what to learn, and what to do. Hmm, how to put my point clearly in this paragraph, I don't know, but basically, what I mean is that we cs3216 people are here to build our dream, to learn, to do stuff, not to try them. And do something well, or not at all. And we are here in this module, to do things damn well, and it is our choice. Actually it's partly in conflict with the idea of balance every module, which is also a good skill in life, but in my opinion, it's more right than wrong. So messy and abstract about this paragraph, sorry, I feel so as well.

Do the right thing.
One of the last quotation of prof in cs1101s, and in cs3216 as well. Life is all about choices, and one importance in that, is to 'do the right thing'. I think I understand what prof mean by this. Generally it's easier to not do the right thing, and even more, there’s generally a price for doing so. But 'no pain no gain, no sacrifice no win' (not absolutely) right?, by making the right decision, doing the right thing, you will gain more than lose (I believe, there's always things to learn, the problem is that whether you learn it or not), you will become stronger than if you do not do the right thing. And one more time, the choice is yours, to become strong or to be just fine, choose one for yourself, the latter is easier. For me, I want to become stronger.



Hmm. Let's end the final post here. Actually, what I wrote here is not really I have learnt in this module, but what is and will be left inside my very self now and beyond. To end the post, let's quote another great quotation cs1101s (and might be cs3216 as well) all know: "What doesn't kill you make you stronger". After going through CS3216, I believe many will become dramatically mature and stronger. :-). A really great module, perfect at least to my judgement.

Monday, March 1, 2010

Case Study 2 - Team dynamic

Like before, let's jump directly to the problem.
1. Working with people who you are already acquainted with work/project:
Pros:
- This has a huge and undeniable advantage, which is that we people can almost expect(or know) the ability and the dedication of the members as we already experienced working with them in some work or project.
- Also, as the we experienced working with people before, the co-operation can become easier, so that the flow of the project/work is easier to control.
- No risk like working with new people, when we don't have a real understanding of them yet. Anything can happen (although that in CS3216, I don't think there's risk out there working with new people, but in normal life, people we don't know much can be real great and real fit the project, or on the other hand, can be real lazy and don't want to dedicate much, then working with the second people can really contain certain risk. Of course, this can be partly handled by finding more and more information about potential team mates in advance, but I don't think taht it can be completely dealt with, i.e, there can be still risk)

Cons:
- Lose chance to meet new people, in my opinion, one people does not need to have only 'dream team', in fact there can be many dream team out there, and if we keep working with the only 'dream team' we have formed so far, we will lose the great chance to working with new people.
- Life is not as poetry, we can ensure that we will always be able to work with people we know and want to work with, so if working with new people can really enhance and improve our experience and ability to work in a group of new people, which I think is a must-have skill in life.


Conclusion:
- Should work with new people when it's not so necessary to work with acquainted ones, i.e, some minor project, but should work acquainted people when there is an urge to work, i.e, important project (like final project in cs3216). Both working with new and old people are skills that should be learnt and improve in life, the first is to learn, and the second is to enhance.

2. Important trait:
- Frankly, I have no trait inside me. Now that the assignment mentions it, I think seriously I should have at least some things in mind first. Now I only have some characteristics I look for in my team mate (now I only look for and expect). Will fill in and expect more and more later on.
- Firstly, the team member should be hard-working and dedicate hard work for the team project. I think this is the most important thing.
- Secondly, I expect and want to, but not must, work with somewhat same-level people (not greatly different I mean). For example, I don't want to work with damn good people, when all I have to do is sitting there, doing nothing except staring or seeing people working. I don't like it, seriously. I want to do, want to dedicate, and I real feel bad if doing nothing in the project. I'm not the kind wanting free grade. Seriously I can learn from them, by seeing them working or asking question, but I want to do, that's what really matters. Luckily until now I have never work with damn good people (Patrick is almost indeed). First assignment has nothing to explain, indeed I really enjoy working with them and I will work with them again for the final project. Google Wave assignment is a little bit like that, when seriously I did no programming at all, even though I am a programmer. Patrick wrote the code at first (which was very much), and then Xecheng join the programming side, and Google Wave assignment (or my assignment) doesn't require 3 programmers to code, it's not that large I think. So I ended up doing the write-up things, lol, poor me. Indeed I did feel bad, but I think this time it was not that they were too ways high level than me, but it is I who was ways low level than them (can you get it?), and I will become strong later on :), the GW assignment was not the same as the 'damn good people' I described above. Anyway, back to the GW assignment, some how I also enjoyed working with them, it was really nice working Xecheng and Patrick, really, really nice, and if one asks me whether I want to work with them again, then definitely yes, and I will dedicate as well that time, not like before.
- That's all for the second question.

3. lol, I was there looking and asking "what is VC????" (although I can guess), the assignment listed it here while introducing about it later on, haha. Anyway, about the question, I dont really know, the only thing I see by now is that there's two game designer, so there might be some conflict in the game design.

4. Working with talented people or people you like? People I like, definitely. The first reason can be like I described in question 2, when working with really dam good people. Secondly, talented people but I don't like can negatively affect the bond and the co-operation. Thirdly, generally I like not-lazy people and in my opinion, every single person has it own talents, so everyone is talented in some way, the key is that whether they can do their good in the project (i.e, I only mean that there's no talented aspect here). Still don't know how to express, but I really, really like and seriously want to work with people I like, and seriously don't want to work with people I dislike (still can work if must, I will temporarily consider I don't dislike them, or consider this is the chance to stop disliking them) - the second is rare, cos normally and generally I don't dislike people, very few up to now. People I don't like or dislike, still want to work, just that not as 'want' as people I like.



Part 2:
1. recommend a simpler design or encourage keep that completely strange design. I dont know, seriously. I am not a casual gamer, I am a hardcore (partly) gamer. I don't see any special interest in Mafia Wars (the others I haven't seen yet) and I see no point playing it, but a huge amount of people playing it, and I completely don't understand why. And another point prof mention is that no game that requires IQ more than 40 has been successful in fb, also don't really understand, but take it into account, it reflects the target and current users out there that we should concentrate on. In face, redesign as many things as possible is great in my opinion, but the potential risk is also high as well. Still don't know whether to recommend simpler design or encourage keeping like that, frankly. I like the redesign the whole thing, but my instinct tells me that it is damn risky.....
2. If my opinion, if there were a 5th programmer in the team, things would be more smooth, although there are still certain disadvantages. Ken and Gareth can deeply concentrate on the game design without worrying about the programming part, so that it can become better. Han also have people to share the work so the amount of work he carries is not great. But a disadvantage is that at times the programmer do not produce the expected result as the designer want, and if the designer want to change something, he must contact with a programmer, and if the designmer want to experiment different designs, things will become a little trouble some, sometimes he might not want to disturb the programmers so that he refuses to experiment instead.

Enough for now.....

Monday, February 22, 2010

Case Study - GetHelp!!!

Dont know how to open the post naturally, then just jump to the point right away :-P.

Truthfully, I was a little shocked reading the case study this time. The idea is quite similar to the idea of my group's facebook assignment project, and truthfully, the GUI is somewhat similar, and then it is intended that the GUI sucks, then improve it. LOL, how can I improve it while the GUI implemented by my group is somewhat similar. I'm doomed. Anyway, enough for the spamming joke, let's go to the point.
Seriously, I'm not very good at design as well as my experience is quite limited, so indeed there're not many problems I can see in the implementation, but anyway, let's start.


The very first thing is to analyzing the statement of the problem. "redesign the user interface from scratch" (quoted), note that "from scratch" means that everything single thing is wrong (or is it just prof's trick :-P). Indeed, I don't see problems in some pages, sigh, so let's forget it anyway.

Let's dig out the interface, here I look at every single page, instead of specialization, i.e, user interaction,.. I will dig out each page in term of functional, attractive,.. if I have idea.

The very first and also almost always the most important page is the home page. Here it is merged also into user's profile page. The heart of this app is to 'quickly' get help, so the process to create a new offer should be present right in the home page, and this is met here. Now I understand why prof told my prof to include the create process in our canva page. Actually back then I don't see any real advantages in that, as I think the real intention of my group is to create new event through the publisher, it's much faster and more convenient, plus the users visit their home page quite more often than the app page. Back to the GetHelp!!!, in the create help page, there're some problem I think. The first is that I don't know which ones of the inputs are optional, as there's no indication. If all of the input fields are required, it would be quite troublesome. The first reason is that not in all cases I always have a deadline or estimated time, it's just that I may have, not I must have. Anyway, looking more carefully at the page, it seems that every field apart from the main title is supposed to be optional, but there's no real indication (or just no in the image?), then it may confuse users in the first use. Some other minor issue is that 'who do you want to ask' and the 'web included' should have some default value, and user can set default to that, as it make it more convenient to offer a new help. One more thing is that there can be optional input field 'urgent level', which can included 'emergency' (like tomorrow is my midterm and I need help right now, as soon as possible), 'normal', and the default value should be 'normal'. Of course, on the new feed the very emergency helps should be placed first. That's all for the first page.

Come to the next page, the 'new feed'. The first thing I think looking at this page is it would be a little bit confusing for the long run as well as make it a little harder for those who want to real help. What I mean is that projects/activities and awards/incentives/achievements of friends should be separated. It helps the users to easily see what their friends' help without being disruptive about the awards, as well as there's a box displaying their friends' awards, which I think can encourage them to do more, and the key is that it is always present, which means that they are always encouraged (not absolutely true, but somewhat it is so). Of course the heart of this application is the help, not the awards :-P, so the box for the awards should be relatively small in comparison to that for friends' help. Notice the 'calls for help' on the right side, but don't quite know whether it's really needed or not, in my opinion it's not, as it is displayed and separeted in the 'what's new' page.
Just one thing to also included here. Notice that the 'refer a friend!' function. The question is that, what if I have many friends to suggest/recommend, then it would be troublesome for me to recommend, which may discourage users from doing so. It would better be replaced by 'refer friend(s)', and then users can choose friends from multiple friends, or just search for them by a search function.

Now let's go to the 'helper activity/project page'. Not much problem here, but there should be some, as indicated by "from the scratch". It's not really related to this, but anyway, it's presenting in this page, so let's put it here. The first problem is the 'probables'. There can be duplications in this fields, as maybe there are 2 friends out there who refer the same person. Also, there can be duplication between 'probables' and 'helpers', which should also be paid attention to. Anyway, another problem arising is that at times number of helpers would be relatively large, then it can be somewhat hard for the owner to choose. Many is very good, but at times it is more convenient to have less :-P. Last problem is that I dont see any indication of found/successful-close/giveup here (and in the new feed to), how can I know whether the owner still needs help or not?

Lastly, the stats page, as I mention about, let's forget about the "from the scratch", I don't see any real problems here, I just think that the heart is the help, the incentives are just to encourage people, and this stats page and its functions are just nice :-).

The last thing which is not in any page is that I don't see any indication of friend's page. I think there should be, maybe it's just that it's not in the case study pdf file, cos it's quite important. Imagine of the case I have a crash on someone and want to see her help to offer to gain impression, then the friend's page is the right way for me to go :p.

Tuesday, February 2, 2010

Superpoke :-)

Yesterday lecture was actually full of good presentations. Many popular applications in facebook were examined to a great extent, many ideas were dig out, many suggestions, they are unspeakable good to me. It was a great experience for me, and for those who want to build facebook applications. CS3216 is actually a great class. Prof not only let made his students critic about facebook applications but also let them do a real one, so that they can learn from both assignments. As prof always says, 'go get you hands dirty', 'the learning is in the doing'. It's not only about judging the other applications, it's also looking back at what you've done. Truly. after the seminar, I realized that the application my group did has some critically bad points, the idea was simple but amazing, but the execution was not so successful. But leave it for later, now is the time for facebook seminar critique, Superpoke :-).


About the presentation:

-'Presentation'(performance): the teamwork was not very good. There were times the slide was ahead what Tomithy was saying, and there were times he changed the points but the slide didn't. It was a little distractive and ruining the mood. That was a bad point of having one person presenting, one person controlling the slide, the teamwork can't be perfect everytime. I prefer one person presenting and controlling the slide at the same time, and this can be even greater with the remote (truly I don't know what it is :">, it's just to control slide without being near the laptop like what Ji Wei used, amazing).

-The slide: nice, but not too easy to grasp because of the CBAA+, I spent some time wondering 'what are they' during the presentation.

-Message:

+Truly, I don't quite remember, somehow I was not good at remembering things in English, both listening and reading. The first thing I remember is that the presentation was not about the application itself, but about the idea of this application, 'poke', that it is a very potential idea.

+Indeed, the most thing I remember is that the suggestion of using this kind of application to poke 'serious, global thing' ('causes'), such as '$friend throws at you Haiti earthquake. Throw back?'. I think this is quite an interesting idea, but I think it can only work quite well for people paying attention to superpoke or regularly use them. For me, at first I can be excited about some poke my friends sent me, but I am not of the kind liking using this type of application, after some time, I will probably drop this, and for every notification containing 'superpoke', 'poke', I will just simply ignore. Sometimes having many things from the greatest to the smallest is good. Sometimes it isn't. In this particular field, I think 'causes' is quite good enough an application for that kind of activity. Superpoke is of another type, and it is different, following a successful road from some other will not always guarantee success. Superpoke should have it own way as well. Anyway, quick rethink, I think it is not impossible to implement 'causes' in 'superpoke', but how to implement it is a hard question. Facebook is not the first social network (initial idea) in the world, nor is google the first web search in the world, but what makes them so successful is the 'how'. Superpoke should adapt 'causes' in its own way, as there's some difficulties like what I mention above(people don't know what is 'causes', what is normal poke). It's not impossible, but nor is it easy. How to overcome? I have no idea. Oops. This is the new app arising, not suggestion?? how bad my memory is. Still, I don't like this things much, I think it's not very different from spreading message, one sending message to the whole friendlist and so on, through yahoo messenger, which is quite bothersome. But maybe the different is 'how' they implement such functions, I do not know for sure.



About the application:

- The functionality is quite simple indeed, and it's much like a kind of ecard I think, except that it is not too formal like ecard and has more things, more simpler but very funny things, and more functions such as war, pet as well. But still, it's not my type. Not much interest in this things, as in my opinion, it's not meaningful, it's just trivial, superficial and just for fun, entertainment. Nothing more. Not much impressions left in me after using this application. That's from user view.
- From developer's view, nothing particular about this, very simple :-). Just one thing is that the 'premium' poke (buy with money) is also included in normal poke as well, while I am almost sure I would never send such poke if I used this application. There should be a choice to hide those premium poke. Maybe this is a kind of making money :-), but I don't like it.

Friday, January 29, 2010

Some thoughts after first assignment (fb app)

The first week is truly a shock. I once heard that tigers push their child down the mountain so that it will climb up itself and become stronger. It's like that in this module, I think. I can remember in the first lecture, prof mentioned that in the past time, people thought that 'if you give a man a fish, he will be fed for a day. If you teach a man how to fish, he will be fed for a life', and he said that nowadays, it would be rather 'if you give a man a rod and push them to figure out how to fish, then when there is no fishes anymore, he can easily figure out other things to help his life'. Indeed, the problem he gave us was at a greatly different extent of this. In my very eyes, it would rather be prof said that 'hey you guys, there are fishes out there, take me some'. From this simple thing, problems begin to arise. There are in fact many, many kinds of fish, from the smallest fish like the Paedocypris (google lol) fish to the giant fish like sharp, whale. Together with that, there are also many kinds of fishing, using rod, gun, chemistry,...Suddenly, things become very complicated and stressful, plus the fact that the time is very tight. Programming in my opinion is very similar to the things I describe above. But actually, facing such difficult problems in life is not a bad thing at all to me, if not, it is even kind of interesting :-).


Truly, first assignment didn't go smoothly as I expected it. I did not do my job well, in programming. After the first assignment, I realize some important things in me. Firstly, I'm bad at reading, and bad at finding new things. I was there, staring at the code of the publisher, struggled for almost a whole night, before figuring out how easy it is. It is just a very simple thing, and I did take me a very long time to figure out clearly. How bad. Secondly, this module, in comparison with CS1101S, is not just much harder, it is at a completely different level. The algorithms here I think is not as hard as in CS1101S, as you don't have the feeling that even you are given more time, things are still very hard to change. The problems are very different. In CS1101S, you know what you can do, and you just need to figure out how to solve the problems with just that. It was kind of like that. In CS3216, the problems is harder, but there are a lot of them. And in this module, you don't know what you can do. Actually, now I think you can do almost everything. The problem now is divided in 2 parts, trying to find out what you can do and do with that, or figure what you 'need' to can do and find out how to do them :-). And from now, things begin too stressful. The key problem with me lies inside the process of finding information and figure out new things on my own, which I found very hard. Partly because of my bad English. Partly of my laziness of reading in English. Lastly I find it too stressful reading 'too much' words in the articles. Furthermore, examples in Maths and in Programming can be very different at times. And one important thing, I have the habit of skipping the theory part, just reading the example and take a fast look at the theory and figure out the idea. Programming is rather hard. The codes may vary from people to people. And it somewhat requires experience. And when I studied this module, I studied html, and it is linked to javascript, and then to php, them mysql, html dom,.... and many more. Other than that, trying to figure fbml, api, fql,... Too much things, so little time.


About the group work as well. My group work's is not very efficient. The programming split is not a good thing. At first I know by my instinct that the work will run more smoothly and effectively if the programming work is devided by specialization, namely one can handle all php,javascript,fbjs another handle html, fbml, css, layout, and the last handle mysql,fql,api. But still, my group divided the work by pages. By this kind, the work is slower and harder, but I think that each person can learn more in this way. Fortunately, Jonathan has this thought as well, how wonderful. Actually, at first, the programming split was very messy, we needed to ask another first whether he was working on something before doing. But after the second lecture, things become easier, although still a little blur, as knowing and doing is a different thing. But the programming division did improve after the second lecture. It's as prof said, 'the learning is in the doing', go get your hand dirty and you will figure it out and improve after some time.

Monday, January 25, 2010

CS3216 Reflection after two weeks

Now I understand why everyone should take a new post for every week, cos after one week, my feeling has become very different than it was one week ago. Anyway, I think it's still enough for a new entry.

First lesson.
The lesson was indeed quite familiar. I once experience it during the last lecture in CS1101S, very meaningful, and I was very happy back then, that I was able to be in this wonderful class. Some meaningful key ideas in the lecture:
Learning is hard, but learning is fun. But one thing to remember, it it ain't hard, it ain't worth doing. Truly, I must admit. Learning seriously is never easy. It's challenging that makes people better and better. And seriously, if something is hard, it's very, very boring. When I was in high grade 12, learning in class suddenly become so boring, I think, don't quite know. But normal class, unlike Maths, didn't require much brain thinking, and to me, it's somewhat boring. But I couldn't be playing around, I must have something to do. And then I knew about NUS, and it was just a few months. And I thought: 'hey, this looks interesting, this looks hard, this seems worth doing to kill the time'. People told me that the exam is very hard, some even told me that it was impossible for me to pass the exam. But who cared, people of the same type as me, when someone tells them that something is hard, it not only don't discourage them to do but also makes them try and try harder, the harder something is, the more interesting is. I'm sick of 'normal life'. Almost all people in my high school just took the university exam in Vietnam as the first priority. I was not, I wanted to do something different, and I was sick of things that were very ordinary. Kind of like that. And my first semester here, Maths module were very boring. I finished reading and understanding and even could take a short rest before the lecturer finished explaining about a problem. Maths is like that. Idea is important, details is not. With a basic foundation of Maths, give one an idea and he can figure out the rest of the solution. Same here. Memorize the details and you can solve tens of problem, catch the idea and you can solve a thousand ones. That's the key thing that I very like in Maths, idea, is the most important thing :-). A little off topic, I was sick of Maths module, it was very boring that even I skipped lecture for the whole semester but still can score high finally. They were ways too easy. I just saw the latest final exam, and could easily figure what the final would be, what I should do. While in CS1101S, I saw the latest midterm test, anticipated how the midterm test would be, and was trapped in the real test. For practical test, a very sharp increase in the difficulty of problem 3 makes me standing there, shocked for a while. And lastly, the final test, while it took me only a little bit more than 1 hour to solve most of the final tests before, the real test, 2 hour and 15 minutes, was not enough for me to finish, and partly due to my mental, my shock. Truly, it's hard to read the evil prof's mind, but actually, it's very good to know so.
Learning how to learn. True, this is a very new idea in my opinion. Instead of giving me the answer, he show me how can I find the way to the answer. It's my prof who makes me realize how dependent I am, and how lazy I am to find out more, to be active, all the time. Those now have already become my characteristic. I had some very wonderful friends in high school. They are truly strong, very strong. And I partly rely on them very much. Hard Maths, problem? Ask them. Hard things to find out, ask them. Another example is that, I am here now, not because I seriously found out things about NUS, but I just asked a friend of mine, he suggested NUS, and some of my friends was also going to take the entrance examination to NUS, and so, I decided to take the entrance examination as well. And many many other case as well. Consequently, now I have become rather dependent, rather lazy to find out new things, to read information. However, prof has shown me very clearly about that, and now, I'm trying to change myself, to become better :-).
Execution matter. True, very true. Realized that after many things prof told about. The idea is expensive and unique, but it will become very cheap without execution I really, really think.


Second lesson.
Many interesting and useful ideas in this lecture, indeed. It's about project work. No, not about project work, it's about programming project work, which is a must in the module, and a must for me to know, to learn and to do as I had very little programming and project experience in the past. Don't know how to say or state clearly about this lecture, but it did clear my mind in many ways. My facebook application group started before this lecture, and there were many things not so smooth about the programming as well as the project. And this lecture is one solution, or one direction to solve the problem. And indeed, after the lecture, many things went easier and more smoothly than that. The lecture is about how to create an app in an efficient way, and there're something I think very important.

Programming is long term, and one efficient way is the software development life circle. The world is changing everyday, and there's no guarantee that the app can catch up with the pace of life everytime, so designing the software development in a circle to fix, mainternance, improve on the go is a must have thing.

More thinking, less coding. Think properly first, then do. This is about thinking to the most possible extent what you want you program do, and rank them, and then design and coding so that changes is easily even after a long time. Last vacation, I coded something for my friends to help them learn with the computer. At first, I only thought of a very simple idea, and simply thought that "nah, why need to think harder, it's just that, start coding now". And then, after successful coding, I realized that the UI (not exacly UI, but kind of) is very ugly, not comfortable and convenient. Also, I recognised that if I included some more functions, things will be easier and the app (not an app in fact) is of higher value, can help my friend more. But then, the fixing process was a pain, I was too lazy that I didn't even thought ahead of time, didn't create abstract barriers for the app, and also not predict that the app would have some more function. The code became more and more messy after I added some more things inside it. What a pain. Come to this lecture, I realized how important the thinking process is at the beginning. Very important. We need to think hard, list all possible functions, design for changes, ranking,... and coding is the last thing. Otherwise, the app will go boom after sometime as it cannot catch up with the speed of the modern life.

Monday, January 11, 2010

CS3216 - Show-and-tell session, and my inequality articles

Today is the first lecture of CS3216, and I was very excited to attend the class.
Still, things will be lecture will be commented/blogged later, I'm very tired now, attending lecture for the whole afternoon and night, and not having yet. I'm here now cos there're some important things I have to do as soon as possible.

Today is the first lecture of CS3216, and one of the most special things in this lecture is the show-and-tell session. Still, I think of this session before, but I ended up finding myself have no particular talents or something like that to show off. Thus, at first I just intended that I would be only introduce about myself. However, to me, I'm not the only one in this situation. There's at least another one in the class, and fortunately, his turn was before mine. He was just talking about his blog. This gave me the idea of just introducing my articles in inequalities, which is just normal, but is my pride, representing for a long time learning Maths of mine, and also, one of the most wonderful and also craziest thing I've done so far, in my opinion. As it happened on the go, the inequality articles of mine wasn't post in my blog. So firstly, posting it is an important thing for me to do.

Secondly, there're some another thoughts about the show-and-tell session. People there were awesome, indeed. But those issues will be left to my later post. The thing I just want to mention here, is me :-). Actually, a bit disappointed about myself. My performance today was rather lame, I must admit. Truly, at first, maybe I was strongly impressed by the 'Wii ...' show-and-tell of the previous CS3216 in the past, that I thought that if I had to show something in the show-and-tell session, I must show something related to my role in the course, and even more, something really fantastic. And I could find nothing like that about myself, which is regretful to say. However, after the session today, I think that I was quite wrong. It's not a must for me to show something related to my role in the class, and even not something fantastic. I just have to show something, anything at all, tell anything I feel like, I think, but I have to truly show something. Truly, now when I'm thinking back, I think I could probably do some skating trick, or just playing the harmonica,..., even though I'm not good at them :-P. Still, it's better than doing nothing :-). Today was not good as my performance was rather poor, but still, it was good that I realized something. The next time, I will become better :).


A little off topic about inequalities. Back then, when I was in high school, grade 10, I went crazy and learnt almost no stuff at all in the curriculum (in Mathematics) (I didn't want to learn, I was a little bored). Instead, I chose what I want to learn, what I learnt myself, and I found inequalities interesting and decided to study a little deeply about it back then. It was not long before I had to come back to the school's curriculum, but the time I learnt inequalities was one of the most memorable moments of mine, and it was very fun and very happy. I was able to do something that is not a must for me to do, I learnt something that no one forced me to learn, but it is what I really, really wanted to learn. Why I mention it here? Because I think CS3216 is something partly like that, and now I really can't wait to learn CS3216 more and more.

Here comes my (and some friends, we worked together) articles. Actually, some of them hasn't been finished yet, I had some other ideas long after I finished them, but I was a little busy and haven't been able to manage time to update yet, and also, I am lazy :-P. Another interesting thing about these articles it that they are non-copied from any source. The idea was self-created :-). Actually, the idea for the first one is inspired, i.e. generalized, by a smart solution to one problem. But the point is that, if you learn Mathematics a little bit deeply, you will see that there's smart solution for many problems, which is short, and very clever; however, whether that solution can be generalized to become method is a different problem, and even if it can, how to generalize it might also become a problem. In addition, I also added some more techniques to the generalized method :-). Anyway, regretfully, now all my articles are kind of outdated already.

Here comes my articles.
Oh, LaTeX sucks here. I used PcTeX for typing my articles, and it's not well displayed here, so I think it's better to give link to download.


First article, the SOS-Schur method (now I think it's just a technique :-P )
http://www.mediafire.com/?izmuqtyylzl

Secone article, a useful technique in SOS and SOS-Schur method (sorry, this one is in Vietnamese, I didn't write an English version of this).
http://www.mediafire.com/?jyhymvndmmy

Final article, a method of solving 3-variable inequalities. Truthfully, this method can be done by hand, but actually it's computer-based, so normally the solution is ugly. But this one is quite strong.
http://www.mediafire.com/?1ntkx2mnzzm

Sunday, January 10, 2010

CS3216 - What do I hope to learn in CS3216

This blog is started cos blogging is kind of assignment in CS3216, a module I will be taking this semester. I'm not the kind of person like blogging, but still, it's not that I dislike it. Anyway, if this can help be become better, I will do it without hesitation.

The first and foremost reason why I take CS3216 is because of my brother's recommendation. Truly, without his recommendation, it is very likely that I would have ignore the email regarding to CS3216 in my email box, like many other emails. Secondly, it is also recommended and taught by my cool professor. In my opinion, what my prof recommend must be very interesting as well as useful. Furthermore, as I have just taken CS1101S last semester, a module which is also taught by my prof, I expect very much in this module. Then I began to read carefully and also find information on this module, and then, I started to like this module very much. Things ltaught in this module seems to be very, very interesting. Finally, an important factor that I decided to take this module is that I like challenge, and I want to get mature at any cost. The fact that a common reflection on this module is like 'workload is insane' not only doesn't make me give up but also makes me want to try harder, harder and harder. Also, to me, it's kind of "I would rather regret giving it a shot than not trying at all." - quoted from someone in CS1101S. Last but not least, "no pain no gain" right, "there's no free lunch", if I want to be mature, I must try hard, and CS3216 is a perfect environment to do so, and challenges or difficulties are just very useful ways to make and to force people to get mature, I think. "What doesn't kill you makes you stronger", my prof believes so, my friends believe so, and so do I.

What do I hope to learn in this module? Well, many things, especially when I myself is a programmer but also is not a programmer enough at this time, I can say. Why I call myself a programmer, because I'm currently COM1 student, and I like coding, programming very much. and I intend to become a programmer. But why I also call myself not a programmer enough instantaneously? The reason is very simple that I'm new, very new to the field of programming. I majored in Maths from class 6 up to class 12. And before NUS, I knew nothing, nothing at all, about programming. It was just that I like helping people, and I truly want to help people, and I think that computing is a very useful way to make my dream come true. Many useful application can be created in this field, which means that many people can be helped. Therefore, I choose computing. The result is that now I am here, present in CS3216 with a role of a programmer but my knowledge about programming has just been built in one semester, which is not significantly different from a non-programer's knowledge. However, I mention it here, only to mean that I must, and I will try harder, much much harder. Just so in CS3216.


What do I hope to learn? I think it's kind of better to list things.

Selling? Money? There's at least one reflection on this module which is like 'this module is all about selling and making money', kind of. But do I truly want to learn about selling money? Still, it is an important factor in life, but actually, it's not the very reason for me to make an application. I pay more attention to how my application can help people, or even change their life, what my application is used for, rather than some other issues such as how much I can gain by this application, how many people people use it. To me, an application that changes life of a single person , or just make a small group of people happy is more appreciated than an application that is just a normal relaxing way used by many people. Still, it's easier thought than said, and then than done. An application that changes life or kind of so is not easy to build, and not easy to think of, truly, but I still like this idea. Maybe this will be changed in the future, when my knowledge is larger or someone makes me change, but now, I still want to keep that thought. It is but to say, to me now, the criteria for me to build an application is firstly what and how it is used for, who will use it, and money and popularity only come after them. know the number of users is very important when building a large/big application, but I can only think carefully about this issue and maybe change my opinion later, when I find more information, knowledge about it, now I don't have enough information and knowledge yet. Anyway, it has been a little off topic. What I just want to state here is that money and selling is not the very first reason for me to build my application, but still, they are kind of important and are must-known things in life cos still, I have to live :), and also I have to advertise and sell my application, because if there's no users, then what is my application for? Truthfully and seriously, money is also important, and who can say that he doesn't want to make money at all? Me as well. But to me, it's not the first priority. The point is that I will try to make money with my application, not try to make application that earn me money.

Programming? Yes, truly, programming. Programming is one of the things I hope the most to learn in CS3216, and to raise my programming ability . Web programming, software engineering, ... Although CS3216 is not a module just about programming, but still, there are many things about programming to learn in CS3216. And now I can't wait to learn them.

Teamwork. Teamwork is a very important skill in life, cos only a person cannot dramatically changes the life, I think. And in CS3216, there's a lot of teamwork. Still, my teamwork skill is not very well, if not, even bad. I haven't done many team projects yet. For a few team projects in the past, my team even utterly failed due to many factors such as weak co-operating, weak organization. The rest are some projects I did together with very close friends of mine. We knew each other well before the work so it run rather smoothly. Truthfully, I only do team projects with new friends, kind of, a very few times before. But it only means that I will try very hard in CS3216 to improve myself and contribute to the team project, as usual :).

Let's discuss a little more about programing and teamwork. Actually, now I'm not skillful in programming as well as not good at teamwork. But what's the deal? To me, that's not the problem. The point is not that now I am weak, but is that I want, and I will try to become stronger. The problem is not that now I am not skillful and good enough, but is that I haven't learned yet, haven't seen the point, the idea yet. When I see the point and get it, I will rise rapidly, I believe.

Lastly,it's 'how to learn' in life, I think. If I'm not mistaken, prof describes this module not as a programming module but a life module, kind of. In this module, students will learn how to learn in life, how to survive in life. There will be skills about life taught in this module. Everyone will eventually get mature, but at which rate, which speed, and how, they all depend on each person and can vary greatly from people to people. I want to get mature as well. And I'm looking forward to learn many useful lessons in CS3216.

Still, there's an important thing to mention. Tomorrow is always a mystery. And life is not so simple that I can really know what I can learn, what I will learn in the future, i.e, in CS3216. In addition, isn't it kind of boring if I know very well :-P? The last thing I hope to learn in CS3216 is many things that I haven't hoped/known yet. There's things that people don't know that they don't know. Also, there's things that people want to learn but they don't know, they want or just haven't wanted yet, I think. Me as well. Possibly, eventually, after CS3216 there will be things I truly want to learn and am happy to be able to learn taught in CS3216 but I don't list here now. Maybe even more surprisingly, that in the end, the very best thing I learn in CS3216 lies nowhere but in these sentences.

I intended to ends here. But still, there's one more 'last' thing I must say. Simple. It's not just that I hope to learn, it's that I will try my very best to learn.