Wednesday, December 28, 2011

A Strategy to gain Knowledge

While contemplating about learning strategies , I came across a good technique

Try to find out areas of our ignorance.

Do you need to be #1 to be the best ?

A person was accusing me that arrogance regarding programming skills are bit more in me than necessary. Then , he began to take different skills of my skill-set and began to compare with some people we know and I found that there are guys better than me in each of the stuff he has mentioned.

After ten minutes of his verbal "abuse" , I told him the following

"I am not first in anything. but,I am good in all" !!!




Monday, December 12, 2011

Cognitive "Blindness" - a disease among programmers

The Art,Craft and Science of  Software engineering is getting sophisticated because of new programming languatges arriving on the scene. Recently, a renaissance has happened because of the arrival of languages like Scala,Ruby,Groovy,Erlang (into the mainstream) and rapid evolution of C#. Even C++ has fallen into the "trap" of fat libraries and esoteric language features.

To make sense out of this cacophony,I stepped back a bit and thought about it and modern languages can be approximated with a quasi-quantitative equation as given below

       Modern Languages = Object Oriented Programming +
                                        Functional Programming +
                                        Meta Programming +
                                        Declarative Programming +
                                        (Static Type Inference Or Dynamic typing ) +
                                        Language Level Concurrency

Honestly speaking,I was skeptical about the "power" of these languages and this feeling is rampant among most programmers which I am in touch with. I have shipped software using C/C++,C#,Java ( mainstream static languages )  and has worked with Python,Perl,Bash ( as scripting languages ). My introduction to programming was with Clipper ( which had most of the features of these languages !!! ) . I have written a LISP interpreter,learned Scheme (through EOPL and SICP ) and an avid student of programing paradigms (Imperative,Functional and Logic languages).

I have come across most of the elements of these modern languages. But,never got "converted" into them. One particular incident changed all. I purchased a book by the title "DSLs in Action" and it's examples were in Ruby,Scala and Groovy. While reading this book,I also purchased "Seven Languages in Seven weeks" by Bruce tate.

I have got a feeling that learning these new programming languages can enhance your ability as a programmer. Of late,I have started feeling that this convergence has the potential to make our programs much more reliable. 

Once I got convinced about these innovations,I started speaking to people about the new revolution happening in the arena of Software Engineering. This made me aware of a new phenomena in software engineering practitioners community.

Almost all of them have blind spots as far as their cognitive awareness about computer programming is concerned.

Here are some mainstream programming languages and the probable "blindness"

C/C++ - I still live in 1970s
----------------------------------
Stereotypes:-I consider these guys as malloc/calloc/realloc/free people. From an abstraction point of view,this is too much machine centric. A vast majority of them use only the K&R C subset of C++. Another set of people use only pre-1998 features of the C++ language. Because these guys are having an affair with base features of the language, they are blind to most of the development happening in the outside world. It is very hard to converse with this group regarding new abstractions.

Exceptions :- People who really knows Standard Template Library (STL),Template meta-programming , boost libraries and C++ 2011 are the only set of people who are aware about the changes happening outside the immediate world. If you take a look at it,there are only "three" people in this group viz Bjarne Stroustrup,Herb Sutter and Andrei Alexandrescu. Of course, their followers who contribute or implement these libraries as well.

Suggestions:- Learn Modern C++ Programming Techniques (Andrei Alexandrescu's book is a must) , Template meta-programming is good,but it is not the solution for every thing. There are reflective languages out there. Learn either Java or C# to purify yourself. Also try to pick Groovy,Scala or Ruby.

Java - I do not know my future
--------------------------------------
Stereotypes :- Most of them are stuck in year 2000 mindset. After Generics,nothing has happened and the center of the world is POJO,ORM,XML and Code fluff. They do not know much about Operating Systems and life starts and ends with Java.

Exceptions:- Some step into Scala,Jython,JRuby or Groovy by choice or chance. The guys who are concerned with rapid evolution of C#,see these languages as a substituite. Still,legacy of codebase haunts them.

Suggestions:- Learn C++ and underlying OS,Flirt with JNI,learn Groovy or Scala and see what is brewing in C#

C# - I do not know what to do with what I have got
----------------------------------------------------------------
Stereotypes:- I want to acess DB and happy to use If/else/while/loop/select/update constructs of the language. All languages features are for Redmond people to implement their tools ( The Visual Studio !)
and some people who want to make a living through confusion.

Exceptions:- The guys who were forced to migrate from C++ and some people who are fascinated with
Functional features of the language.

Suggestions:- Learn C++ and Win32,Try to flirt with Mono on Linux,read about Scala,Groovy or write programs with some of them. You have got the best language in the world ( because of "shameless" borrowing of the features from all the programming languages ) and try to understand that.

Python/Perl/PHP etc - I want to finish my task,do not bother me
-------------------------------------------------------------------------
Sterotypes:- I am focused on finishing my application or automating my tasks. I am mostly bothered about making a livelihood out of this.

Exceptions:- People who choose these development platforms as a faster way to develop software and also aware about the C interface,library eco systems etc.

Suggestions:- Learn a semi-compiled language ( Java or C# ) , learn to interface your scripting system with C/C++. Also try to learn Ruby.


I think,It will take years before programmers think alike. Probably,they never will. Should they?















Sunday, December 11, 2011

On a Vaccation and It's aftermath

Currently , I am on a vaccation and in a position to decide what to do on a day to day basis. I am learning Physically based Rendering Techniques to improve my Computer Graphics Knowledge.

To learn these topics , One needs to be good in Differential Geometry, Radiometry, Photometry,Numerical techniques,Probability and Intersection calculations. As a start,from last week,I started learning Vector Calculus by consulting Various books. While searching my shelf,I stumbled upon my copy of Feynman's lectures on Physics and to my suprise,he has dealt the topic in a intuitive manner
in his Book #2. Thanks to that book and Advanced Engeneering Mathematics (Erwin Kreyszig

) , I now know what is meant by Gradient,Divergence, Curl , Green's Theorom,Stokes Theorom, Gauss Theorom,Solid Angle,Laplacian Operator inutitively and mathematically. The Knowledge gained from the book was really helpful in reading "Realistic Image Synthesis using Photon mapping" and now I know the rationale behind the Jim Kajiya's Rendering Equation.

I am struggling with following books

               1) Vector Calculus ( Marsden , Tromba )
               2) Advanced Engineering Mathematics (Erwin Kreyszig)

               3) Realistic Image Synthesis using Photon Mapping (Henrik Wann Jensen )
               4) Physically Based Rendering ( Matt Phar , Greg Humphreys )
               5) Radiosity - a Programmer's perspective ( Ian Ashdown )
               6) Feynman's lectures on Physics
               7) Geometric Tools for Computer Graphics ( David Eberley,Philip Schneider )
               8)  Mathematical tools in Computer Graphics with C# implementations

I had these books with me for at least three years and now, I am getting time and motivation to go through it. When I purchased those books,I never thought I will be able to use those algorithms. In the month of October 2011,I visited the Munich Office of  Real Time Technologies (http://rtt.ag/ )  and the time spend there motivated me to study these techniques in a systematic manner.



Wednesday, December 07, 2011

The DAMned People , Xian Priests and Islamic money

The controversy over the Mullaperiyar Dam is spiraling into a issue where emotions will dominate reason and average people are caught up in the issue. The issue has triggered sleeplessness in lot of people including the kids and It will be a problem for people who cross into Tamilnadu, to travel to Bangalore etc.

Yesterday,I happen to chance upon a person who sees a wider plot in the "DAM" game. The river  Periyar flows through the areas which are traditionally dominated by the Kerala Congress party. It is a well known fact that the Kerala Congress party is backed by various Churches in the Central Kerala. They are worried that a group of men with connections in the middle east are foraying into their bastion and buying properties in the areas dominated by the party.

By raking up the Dam issue to a high pitch ( he agrees that safety concerns are real ) , a group of people are interested in protecting their haven and people on both sides of the border are caught up in the issue.


Personally,I am really worried about the Safety of the dam ( Since I happen to live on the banks of Periyar ) and have resigned to the fate.