It is Not Growing Like a Tree
by Benjamin Jonson
It is not growing like a tree
In bulk doth make Man better be;
Or standing long an oak, three hundred year,
To fall a log at last, dry, bald, and sere:
A lily of a day
Is fairer far in May,
Although it fall and die that night -
It was the plant and flower of light.
In small proportions we just beauties see;
And in short measures life may perfect be.
The other day I met a director from a very renouned software firm. General discussion went on around with exchange of pleasantries. And he remarked that I have changed quite a few companies in a short period of my career. I was generally asking him how his career has been in his esteemed company and here are somethings from his statement which kind of stunned me.
I have worked in my current company for 14 years. There are 200 people reporting to me. We have a great culture of having both Individual Contributor and management career tracks. This dual track works very well in his team while it is not very successful elsewhere and blaah blaah...
I just felt asking him a reference of a senior individual contributor in his team. Anyway, I dare not ask that. That's his life and his team. But, what I realized if in a great company like where the person is working if definition of success for him is 14 years of service and a director tag and 200 people reporting to him, I guess there is something really unusual happening. Will this impress an outsider like me or is it to substantiate his own ego. Secondly, if a person's definition of success is 200 people reporting to him how can an individual contributor enjoy such an environment. Well, I am an outsider, why do I bother? We had couple of minutes of additional discussion and I thanked him for spending the time with me and bade good bye.
A brief description of Sambit's interests and activities. Views expressed here are author's personal views and do not reflect the views of author's current or any previous employers.
Sunday, March 26, 2006
Monday, February 27, 2006
Fundamentals of the C Programming Language
The C Programming Language is one of the few programming languages that redefined a programmer's outlook to programming computers in late 70s and early 80s. But, it's important to point out why is C different from others. It's well known fact that it has the simplicity of a standard functional programming language yet has the power of a system programming language. Following are a set of features which differentiates C from others.
Functions vs. Sub-routine
Everything in C is a function. The question comes now is what is a function? A function is a partial program that can take certain inputs and return an output. Subroutine is a modular piece of code that may or may not take any input and certainly will not return any output. C eliminated all this distinction by providing
Pass by Value
Unlike other programming languages C has no pass by reference concept. Everything that needs to be passed to the function has to be passed by value. What if you need an in/out parameter to a function. C does not have any direct answer to that. However, C definitely has a solution in terms of passing the memory address of the location to the function.
Support for Pointers
Pointers are the saving grace for a language that is a pure pass by value language. Pointers are a round about means of achieving a pass by reference alternative. However, pointers are beyond that actually. Pointers in most architectures actually expose out the exact process memory location to the user. This is an important and useful feature as the address can be obtained and be input to a piece of assembly methods for direct memory operations.
Dynamic Memory Allocation
Memory management which is pretty popular in today's languages were still a big requirement during the days of C. C provided dynamic memory allocation in its standard library implementation which can be used to allocate memory on an as required basis. Memory allocation and resizing gives enormous flexibility in designing programs which do not hog all the memory during program start up.
Abstract Data Design
Ability to design abstract data structures are a very useful feature with C. The following are some of the useful methods of designing abstract data structures.
1. Typedef
2. Struct
3. Bitsets
4. Bit operands and macros
Pre-processor
One of the most disliked features of C yet the most useful as well. Of course pre-processors being compile time constructs do not help a developer during debugging phase. However, this is one of the most useful features for designing generics, inlining and other such programming principles.
Use of C may be declining off late in comparison to C++ or Java, yet it will always be used as a base language that has made significant changes in the way programmers think today.
Functions vs. Sub-routine
Everything in C is a function. The question comes now is what is a function? A function is a partial program that can take certain inputs and return an output. Subroutine is a modular piece of code that may or may not take any input and certainly will not return any output. C eliminated all this distinction by providing
voidwhich would mean no input or no output.
Pass by Value
Unlike other programming languages C has no pass by reference concept. Everything that needs to be passed to the function has to be passed by value. What if you need an in/out parameter to a function. C does not have any direct answer to that. However, C definitely has a solution in terms of passing the memory address of the location to the function.
Support for Pointers
Pointers are the saving grace for a language that is a pure pass by value language. Pointers are a round about means of achieving a pass by reference alternative. However, pointers are beyond that actually. Pointers in most architectures actually expose out the exact process memory location to the user. This is an important and useful feature as the address can be obtained and be input to a piece of assembly methods for direct memory operations.
Dynamic Memory Allocation
Memory management which is pretty popular in today's languages were still a big requirement during the days of C. C provided dynamic memory allocation in its standard library implementation which can be used to allocate memory on an as required basis. Memory allocation and resizing gives enormous flexibility in designing programs which do not hog all the memory during program start up.
Abstract Data Design
Ability to design abstract data structures are a very useful feature with C. The following are some of the useful methods of designing abstract data structures.
1. Typedef
2. Struct
3. Bitsets
4. Bit operands and macros
Pre-processor
One of the most disliked features of C yet the most useful as well. Of course pre-processors being compile time constructs do not help a developer during debugging phase. However, this is one of the most useful features for designing generics, inlining and other such programming principles.
Use of C may be declining off late in comparison to C++ or Java, yet it will always be used as a base language that has made significant changes in the way programmers think today.
Subscribe to:
Posts (Atom)