Know more and connect with me on [Linkedin Profile].

Monday, October 31, 2005

Interview Plan

I am going to have an interview one month from now, it is so important for me to make the switch, although the I already moved from being a c++/java programmer to be a project manager, but the only chance to work abroad in US or Canada is to have a technical job. So welcome back to technology, especially I moved to management career just for a better salary, as management in our country earns better salary.

Although exciting, I will not be shocked if failed, I just will do my best and I have a complete one month to prepare myself, in all cases I will not lose anything, just reviewing my technical knowledge and skills.

But as you know, I have to have a plan, so let us start:
First we have to make task list:

Task List:

- OOP [done, I will just make a final review later]
- Data structures and algorithms
- C++
- C# and ANS.NET [sadly, most of my experience is with java not C#, but no problem]
- English [as English is my second language, I have to improve my vocabulary and conversation skills]
English is the only one that have to be practiced daily basis, news have to be read in English, stress on grammar, and daily I must listen to some English especially US technical English.

I have difficulty making structured plan to myself, however it is somewhat easy in my work to create a plan for a certain project! But I have to do.

Tasks size estimation:

- OOP [done, took 5h (hours), another 1h for review]
- UML [4h]
- SQL [3h, 1h]
- Data structures and algorithms [20h]
- C++ [10h]
- C# and ANS.NET [30h]
- English listening [40h ]
- English grammar [20h]
- Design for my critical applications [10h]

to be continued...

Sunday, October 30, 2005

OOP Fundamental Concepts

OOP (Object Oriented Programming):
As opposed to the procedural arrangement of code, OOP is organizing code into classes and objects that imitate real world.

Fundamental concepts:

Abstraction: Focusing on the essential characteristics of some object while ignoring the unnecessary details, relative to the perspective of the viewer.

Encapsulation: Each object exposes an interface that specifies how other objects may interact with it, so the internal state can't be changed in unexpected way. Essentially hiding the implementation complexities and details.
With encapsulation, a class can be reimplemented without system side effects as long as the class interface is not broken.

Modularity: The act of partitioning a program into individual components. This will reduce program complexity, even some modules can be changed without side effects as long as the interface remain fixed.

Hierarchy: the mapped relationships of sub- and super-classes is known as a hierarchy. This can be visualized as an upside-down tree, the top of which is known as the root.

Persistence: The ability of some object to save state across time.

Links: One object to use the services of another object.

Aggregation: The containment of an object to another object as one of its members.

Aggregation & Composition: Aggregation differs from ordinary composition in that it does not imply ownership. In composition, when the owning object is destroyed, so are the contained objects. In aggregation, this is not necessarily true. For example, a university owns various departments (e.g., chemistry), and each department has a number of professors. If the university closes, the departments will no longer exist, but the professors in those departments will. Therefore, a University can be seen as a composition of departments, whereas departments have an aggregation of professors. In C++ we can say the university contains departments objects by value, but contains pointer to professors.

Sometimes aggregation is referred to as composition when the distinction between ordinary composition and aggregation is unimportant.

Using Relationship:
An object function that instantiate objects from other classes and use their services within the scope of the function.

Access Control: The class define access control to its members, so members that related to internal implementation should have restricted access from the outside world.

Polymorphisms: An object can represent many types as long as they belong to a common superclass, so that sending a message to the object will give different action depending on the actual value of the variable at the moment. Without this feature we will end up having a big switch case to decide which object-function to call.

Polymorphic Function: multiple function definitions with different parameters with same name.

Multiple Polymorphisms: Using a virtual function as in c++, you can make polymophism, making the parameter itself a polymorphic object will give us the opportunity to create multiple polymorphism to any degree. Suppose we have a virtual draw function that draw a circle, or rectangle based on the actual subclass of the object, suppose we want to draw on many media types such as Printer or Screen, we can make Printer and Screen as a subclass of Device and send an object of it to the original draw function. Now the function will draw on the exact Device based on two things: the exact object, rect or circle and the exact device, Printer or Screen.

Overloading: Overloading allows multiple functions taking different types to be defined with the same name.

Interface: Specify one or more abstract method signatures, used by subclasses.

Subclasses and superclasses: Classes are often related in some way. The most popular of these relations is inheritance, which involves subclasses and superclasses, also known respectively as child classes (or derived classes) and parent classes (or base classes).

* This is the basics from my point of view, sure I am affected with my c++/java experience, any comments?

2) Object Oriented Analysis and Design with Applications by Grady Booch

Friday, October 28, 2005

Amazing Ajax Application,

gmail !

Using AJAX technologies, you can feel the same experience of Desktop application with a web based application. Really a killer to Desktop email applications. With 2.5 Giga, it seems I will never need more space. I have more than one email account, now I am reading all of them through gmail and really enjoying it.

I just have a problem with Arabic encoding, I sometimes receive Arabic incorrectly, but I still have a work around, just click "More options" then "Message text garbled?" to see the Arabic email correctly.

I hope this problem resolved at gmail, but I have no way to report it to Google, any help?