I started my career as a teacher for London A/L computer science students. Even though I had a shaky start, I was always under the impression that I was pretty decent, but it turns out that was not the case always. Today I was chatting with one of my X-Student and it seems that, it was more drama than actual teaching :-) I always wanted to get back to teaching if I get a chance (because I loved it), but now I better think twice about it.
On a separate note, it looks like your students remember much more than you do as far as all the stances you have pulled in the class. Its fun though, getting to know all those stuff, from a students perspective and trust me it’s totally different.
One of my dear friend and colleague IK has left and it was a day with full of emotions. I knew him for little time, but definitely I am going to miss him. He was very resourceful, challenge taker, current, and one of the few people I know who allocate time everyday to be at the edge. He was also a friend, breakfast/lunch partner, discussion mate, gang member, motivator, and somebody I could count on. Above all I am soooo great full to him for the 17” monitor I am using now at work (grin :-) ). I wish him all the best and (I waaaaant Ausssssssssssi Dollars)
We all know how important it is to get our daily 8 hrs of sleep. Making sure I get adequate sleep is one of my top priorities and one that I strictly follow; hmmm, most of the time. However did you know that sleeping was important for problem solving? A research done by some scientists in a controlled environment shows that “if you didn't sleep on a problem, you missed a golden opportunity.” I have had first hand experience of this phenomenon. I have pulled my hair over some of the coding complexities, mathematical problems or IQ questions for hrs, given up, slept over it and in the morning Eureka, I have a solution. The solution will appear so simple that you would want to kill yourself for not cracking it the day before itself.
However, solutions like this don’t come easily, and after reading this, whenever you have a problem, you can’t just try for a few minutes and think to yourself, “why not let me sleep over it and tomorrow I will have a solution”. Nope, sorry guys, if that was the case anybody who gets adequate sleep will be able to solve any problem and I will be the world’s greatest problem solver.
Through my experience I have noticed, if you really put your heart and soul into trying to figure something out for hrs, finally get tired of it and go to bed while your sub conscious mind is still working on the problem, there is a greater possibility of you having a Eureka moment next morning.
“People who tackled the problem in the evening and returned refreshed after eight hours sleep were more than twice as likely to spot the shortcut as those who had stayed awake. Another group who tried the problem first in the morning, and then spent a normal eight hours of the day awake, were just as bad at spotting the trick as those who had stayed awake all night.”
I have mostly used this as a way to write simple code. If I have to solve a coding problem, and it appears too complex to me; without immediately trying to start coding that complex algorithm, I always try hard to see whether there is a simpler way of doing the same thing, and most of the time I push such things to the end of the working day, think about it, search around, think about it while going home, think about it while eating, and then go to bed and most of the time I find a simpler solution than what I had originally in my mind.
If you have not understood a single bit of this blog, may be its time for you to read it a 100 times and sleep on it
I was working on this mediation stuff, where I get a binary file in EBCDIC format (yes it’s still out there) which contains the call data records, and I was suppose to do some mapping. It became interesting when the Call End Date needs to be calculated, by using the Call Start Date and Call Duration.
So I resorted to GregorianCalendar class in Java where I could add seconds to existing date. So I just passed all the information I had to the constructor to create the date object.
When I looked at the output file even though I was handling a file generated in April, the date was May. Then of course when I looked at the API, it had
month - the value used to set the MONTH time field in the calendar. Month value is 0-based. e.g., 0 for January.
I don’t think programmatically it would have been very difficult for anyone who designed the API to make the months 1 based instead of zero based, but it looks like having zero based months comes from C language time.h library days.
I was once asked to do an evaluation between two open source products. Before I went into analyzing the technical merits of each of them and drawing up the conclusion, I considered some of the non-technical attributes of each project. Here they are,
Project Success: How many real live projects are using the product actively? You can gather this information from the product web site itself, web search, white papers, case studies, etc…
If there is a mailing list for the product it might turn out to be a good place to get an idea of its usage. (Check the from mail addresses of the problems being posted, especially the domain name. if see a question from email@example.com you can be pretty sure somecompany is evaluating or using the product.)
Support(not online support or service level agreements): Another main attribute you got to evaluate is what I call the “Getting Stuck Factor”. That is if you get stuck, how many possible options are there to get out of it. While I was starting to use struts I survived only with the mailing list archives they had. There were some 700k mails and every problem I encountered had been already asked and answered. I didn’t have to fire a single mail to the list. Check whether the product has Forms, mailing list, weblogs and more than anything else how active they are (no of post per day). Most of the lists, you will have developers themselves taking some time off to answer the questions. That might be an indication that people who develop really care of the product being used and widely accepted.
Design: When you think about design, before getting into technical details, check the track record of the product lead (the lead designer). If you are evaluating OpenAdapter, “Bill Barnett” who designed it has previously implemented a successful project called Distributed Object Integration Team, which is also in the same domain. Check how many other developers are actively contributing to the project, because open source developer always put their reputation on the line, before contributing to a project they will always see whether its worth attaching their reputation with that project. That will be good indication for future of that project.
Project Stability: You can consider the releases. The industry accepted release cycle is about 18 months for every major release. If a project has released its first version in 2001 and if there are no new versions till now then either the project just meets all the needs of the users in the first release itself(highly unlikely) or the project it not active anymore. However, this will be just an alarm which you have to further investigate.
Community: Check whether the product is backed by a community.
Learning curve: Write a small sample or deploy the sample application and check out the learning curve. Moreover how many useful hits you get when you search for tutorials and articles on that product matters. Check how many other sites are having resources (tutorial, samples, articles) on the product other than the product home page, because that will show how many people have used it. For someone to write about it they should have used it extensively, and most of the time it will be for a project they were working on.
Resource Availability: If its just couple of people going to work on the product then this shouldn’t be a issue, but if you are going to open source product in one of your major project and almost every developer in that project will be using it, then you have to consider training, how easy it is to learn, whether you can hire skilled people. If you calculate you will need people with 1 year experience, then look at the project and see when the first stable release was made and you can do the math I guess.
These are not always the primary attributes you will be looking at when you choose a product, specially the commercial products. Also keep in mind this post doesn’t talk about how to evaluate products on its technical merits.
If you have anything to add to this list, use the comment section.
1. I have not been blogging lately. No internet at home. For some reason, I have not been able to get the modem work at home. At office I don’t have the time to write anything. There is so much to write about and being used to blogging now I even feel guilty for not being able to blog.
2. Over IMs it looks like I am the one who “always” sends the first message to some of my friends. Even though I don’t mind doing that, sometimes I feel like I am forcing them to talk to me. Even though there is nothing to prove that, the question remains in my head, “Do they really want to talk to me?” or “they just talk because I always say hi?”. I will never know I guess.