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.