Monday, April 21, 2014

The 8 Fallacies of Distributed Computing

The 8 Fallacies of Distributed Computing: In 1994, Peter Deutsch and others at Sun Microsystem drafted assumptions architects and designers of distributed systems are likely to make, which prove wrong in the long run. These are:

1. The network is reliable.
2. Latency is zero.
3. Bandwidth is infinite.
4. The network is secure.
5. Topology doesn't change.
6. There is one administrator.
7. Transport cost is zero.
8. The network is homogeneous.

These fallacies help keep in mind that distributed systems are different, and they do hold even after the 20 years that passed

1. Arnon Rotem-Gal-Oz has nicely elaborated these 8 fallacies with examples: Fallacies of Distributed Computing Explained (PDF) and Fallacies of massively distributed computing
2. Bobby Woolf added some more comments to Fallacies of Distributed Computing
4. Arnon Rotem-Gal-Oz has added 3 more fallacies for Massively Distributed Computing: Fallacies of massively distributed computing

1. Instances are free
2. Instances have identities
3. Map/Reduce is a panacea


On Service-Oriented Architecture (SOA) and Microservices

While researching on this SOA subject I found the following definitions more appropriate.

Service: The means by which the needs of a consumer are brought together which the capabilities of a provider.

Capability: A real-world effect that a service provider is able to provide to a service consumer

Service-Oriented Architecture: Service-Oriented architecture is a paradigm for organising and utilising distributed capabilities that may be under the control of different ownership domains. It provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations.

1. There is good, small, concise e-book found on InfoQ written by Steve Enterprise SOA Adoption Strategies (PDF)

2. There is a complete reference model for SOA: OASIS Reference Model for SOA (PDF)

3. A related subject Microservices Architecture by Martin Fowler: Microservices

4. Steve claims Microservices are as same as SOA and is just another term:
Microservices is SOA for those who know what SOA is and Microservices ad SOA and: Microservices Money for Old Rope...

5. Arnon Rotem-Gal-Oz on Microservices: Services, Microservices, Nanoservices - oh my!

6. Udi Dahan's response on Martin Fowler's Microservices: On the Microservices thing


Wednesday, April 16, 2014

Interview Question - "What do you want to do?"

I do lot of interviews in these days. Interviewing also gets outsourced today. I'm on one of those assignments and I do interviews for very very big companies. While I do follow some pattern based on the job role and the technologies required for the specific job and experience level, I do have some common questions which I ask and watch keenly what the candidate tells about it.

One of the these common questions is "What do you want to do?" is one of the very important question. I do very keen and observe closely what the candidate thinks about this question and what answer he give.

I do ask this question just after general introduction questions. Based on the answer to this question I will know about the candidate much more than he thinks about the job and he s enthusiasm and future plans and his interests and passion about doing something in life.


Friday, April 4, 2014

Basic programming theory: The 3 main constructs of a computer program

At a low level, structured programs are composed of simple program flow constructs. These are Sequence, Selection and Iteration (SSI). I often refer them in short with SSI in my regular communication with my peers.

Sequence: One Step at a Time. Executing the program code (or algorithm) line by line, one at a time. e.g. Line 1, line 2 and line 3 and so on... An ordered execution of program statements one by one successively without skipping any step.

Selection: It is like Branching - given a criteria, change the path through the program. The execution sequence is controlled using ‘if’ or ‘if else’ or 'switch'. The 'if'' or 'switch' statement is a testing a condition evaluating a variable etc. to control and change the execution of the program depending the environment. A sequence of program/algorithm lines can be formed as a 'selection block' and can be executed or skipped depending on the condition composed with if/switch.

Iteration (and Recursion) a.k.a Repetition or Looping: Do something multiple times until/while a criteria (program reached to a certain state) is met or a fixed number of times using for statement. Iteration is typically used to refer to collections and arrays of variables and data. Iteration means to visit every item in the collection/array, usually in order but it may be in an irregular order, however each item is visited only once. Counting from 1 to 10, you are iterating over the first 10 numbers.

A sequence of program/algorithm lines can be formed as a block known as 'iteration block' and can be executed for a given number of times, based on certain conditions. Some times it is necessary to perform same step for a number of times. If same statement is written repetitively, it will increase program size. To avoid this problem, iteration is used. The statement written in iteration block is executed for a given number of times, based on certain condition.

Note: Recursion is the process a procedure goes through when one of the steps of the procedure involves invoking the procedure itself.