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?