Thursday, December 30, 2010

"God damnit, there's no more Pengins!"



Yay! After two days of tackling, today I have a Mac OS X running on a vmware workstation on my Windows 7! Now along with Ubuntu, I have a Snow Leopard and a humble Win7, which turns my Thinkpad into the fellowship of the operating systems. Though Ubuntu is my all-time-favorite OS, Snow Leopard is like a mistress who is there to give you just you need, in my case it's iPhone development. I'll start rolling with Pragmatic Bookshelf's iPhone SDK Development book, and see where it's going. Wihiii :D

Wednesday, December 22, 2010

Monthly interests


Here comes the monthly interest list of mine:
* Mercurial
* Static code analyzers and profilers for C#
* Tezer Ozlu
* John Shade from PragPub

How to not suck at a technical interview when you're the interviewer


Today we met a guy with 17 years of experience in software development processes, in a job interview. Since we were on the interviewer side, I did not think of a good question to ask him since I thought whatever I’d ask would seem funny and needless. But people on stackoverflow have shared some thoughts about it.
What they say is, you can ask them the questions that you’ve been struggling with for a long time or that you cannot come up with a good solution and see if their answers satisfy you.
One of the other recommendations is that you can ask them to explain some problems & concepts that are blurry to you and see if their answers are meaningful to you and make you understand what you want to learn clearly.
I think these are great ideas. I love SO. Really.

Projecting



I have like a total of 3-4 years of experience in software engineering and the last 1.5 of them is in my current job. Based on my last 1.5 year’s experience, here are some quality points of a software project from my point of view: (Not all of them are applicable to all types of projects, of course)

  • Can log files supply the really needed information? Can it help to understand a problem without debugging? Are log files easy to collect and send to other people?
  • Does the project have a simulator or some other forms of test code?
  • Is there a mechanism that will infer possible problems? For example, if a module is not aware of its erroneous behaviour, is there an outside module that checks the status of some things and then decides that the implemented module is not doing its job?
  • Can the module retry failed operations?
  • Can the module rollback if it crashes in the middle of performing an operation? Can it revert back to a stable state, without needing to be restarted?
  • Are the error messages informative to the end users? Are they able to direct the end users to right path?
  • After recovery from a crash, can the module process previous data or perform previous jobs using a correct logic?
  • If the module is an executable running by a scheduler, does it end after it finishes its job?
  • If this executable is needed to be running just as a single instance and if a scheduler is running it, when it’s scheduled one more time before the first one finishes its job, can the second job be re-scheduled automatically?
  • Are there jobs in the module that are repeated unnecessarily?
  • Does the module return back the resources it had used, when it’s done?
  • If there are time dependent processes, can the module perform correctly when the time zone changes?
  • If the module accepts input from the outside, can it perform correctly in all kinds of character sets and encodings?
  • When a process is taking long, is the end-user informed? Can the user interface stay responsive?
  • Can the end-user do what he wants in the possible shortest way?
  • Does the system do the maintenance of it’s output data, like database records, physical files, etc…?
  • Is the required default configuration supplied with the project setup?
  • Can the configurations be done through a single interface?
  • Are CPU and memory usage at acceptable levels?
  • Does the project balance the requirements of concurrency and integrity? Because for example, to keep a system’s data in integrity, you should use transactions or some other kinds of mechanisms. But transaction sizes are important for concurrency due to locking issues.
I’ll get back here when I add more experience to my humble portfolio :]
.widget { margin-top: 30px; margin-bottom: 30px; }