Wednesday, December 6, 2017

Monday, May 8, 2017

1960's till '80 saw the birth of programming languages like COBOL, PASCAL, C, PROLOG, SQL, BASIC, SMALLTALK. Then came '80s and a paradigm shift occurred and we got Object Oriented Technology and saw the birth of C++, Objective C, etc. Then came '90s and the age of internet started. New programming languages like Java, R, Haskel, Python, Javascript came in the horizon. Then 2000s came and support for concurrent programming, distributed programming, meta programming and aspect oriented programming became essential and we got languages like C#, SCALA, Go, DART, SWIFT. In the meantime people like me who started their IT journey with C++, VC++, MFC, VB on Windows platform had to realign their skillsets to match the market demand and started working on Mobility, Cloud etc. Now another shift in the market demand will see the rise in technologists working on AI, Computer Vision, IOT, Industrial IOT, predictive analytics and so on. So you see for an IT engineer there is no time to rest... He has to upskill himself continuously or else he will become obsolete... Its not easy but thats what the market demands... No wonder IT people in India who are in the age bracket of 40-55 and probably started their IT career on Windows based desktop applications and could not float well with the everchanging IT skills are feeling the heat now... The kind of job profile these people have is sometimes more managerial and people management than playing with technology... Naturally we are experiencing the massive job cuts for these category of people... Without the proper social support it will be really difficult...

We will also have to see if our academic institutions are capable of handling this change management... I am not sure but when i last saw the question papaer of GATE exmas of CS in 2011, it mainly concentrated on procedural language like C. Even when i train undergraduate students, they say they are becoming master in C to qualify the GATE exam. I know C is omnipresent but with the change in the IT scenario other aspects of software designing using Object Oriented Programming or Aspect oriented Programming should also take a major part in the question paper... The reason is that the students will mostly use languages other than C for their day-to-day work in the industry...

I may be wrong but this is my observation vis-a-vis the current IT scene of India...

Thursday, March 16, 2017

I am on the path of upskilling myself. Hence have started learning about Machine Learning, Computer Vision, Artificial Intelligence and all other related things. Here are the two videos that i did while learning Computer Vision. The first is experimenting the use of Gaussian Filter to remove noise using Octave. And the second is using the same principle but in the Android environment using OpenCV.

Thursday, February 9, 2017

When i look at my progress as a software developer who came into this world from a different engineering background, i clearly see few major stages of learning process and i think many of the engineers who came into software from a background other than CS would agree to it... First i had to learn the concepts of programming language... And mind it, had it been procedural languages of earlier days, it would have been one story... But with the advent of OOAD the whole ballgame of learning programming concept had changed... To work independently i not only had to master the syntactical parts of the languages like C++ or Java but also the concepts of OOPS... Here i had to learn from varied parts of a language starting from VTBLE in C++ to inheritance concepts to alignment in memory of an user defined data type and data structure... And believe me its not easy... It took years to master only this part of the learning curve...Then i had to master subjects like UML and Design Pattern to wisely apply my OOAD knowledge for a practical purpose... And again it took a lot of perseverance to do this... Then i had to know about a OOPS framework and figure out where my OOPS knowledge may fit... For me i started my software journey with the Microsoft MFC/VC++ framework...

However this was just the beginning... After learning the nitty gritty of a language, and by nitty gritty i mean even understanding the compilation error, i had to delve into the world of OS and had to pick up the real CS areas like threads, process, multithreaded application, thread synchronization, scheduler and other concepts... And then i became a little useful in the real software developement...

In the meantime, i wanted to foray into a specific domain like mobile domain, and for that i had to constantly search for what is going on in this space... it was not easy to mix up the telecommunication part of the industry with the software that drives that telecommunication world... i never got a chance to go into the core telecom side of the software and their management but i was lucky enough to be a part of the mobile apps world... And even after coming into the mobile world i had to switch over from a Symbian C++ engineer to an Android/Java engineer... And to learn Android at a basic minimal level i had to burn lot of midnight oil in front of Google to decipher the Android framework code like the Android service internals, Android mediaplayer framework or Android Asynctask nitty gritty etc... It took lot of patience and perseverance to master only a little portion of Android...

I have learnt lot of things by standing on the shoulders of Giant like Google. I always suggest my students that to learn real software, they need to dig into the source code of different frameworks. For example, when i started going through the GoF design pattern book back in 2004, i used to delve into the MFC/VC++ source code to figure out the implementation of different design pattern. Thus i learnt how the Doc-View architecture resembles to the Observer Pattern. Or when i dug into the MFC's command routing source code and initially thought that its an example of Command Pattern because the term Command Routing, but then i figured out that its just an example of Chain of Responsibility design pattern. And believe me, when a software engineer understands these design sides of a framework, his joy is no less than that of a scientist.

Let me give you another example. When i started my journey in Symbian C++/S60 framework, all the Symbian books used to describe about the Active Object. But i never got the idea exactly how this whole thing is working although i was aware of Asynchronous ans Synchronous programming concept. Then in USA at NOKIA i got some time to dig into this part of Symbian S60 framework and figured out that in the Client-Server architecture, when the server finishes the task handled over to it by the client, it notifies the client through an InterProcess communication message passing system(actually the function is called Complete and this belongs to the RMessage2 class of Symbian/S60 framework), the whole thing became absolutely clear to me.

And in recent times (not exactly recent but in 2013) when i dug into the source code of Asynctask of Android and analysed the SerialExecutor function, the whole concept of Asynctask became clear to me. I am saying all these things to convey the message that to learn real software one has to look into the source code and analyze it.

And these days when i am upskilling myself with the knowledge of Aritificial Intelligence, Machine Learning, Computer Vision and related subjects, i am again going through the old engineering concepts of mathematics and statistics like Matrices, bell curve, Gaussian noise, Gaussian filter, Gradient Descent Algorithm and so many things... However this is just the tip of the iceberg vis-a-vis Computer Vision and AI... i know i have to go a long way to be useful in this world of computation... But frankly speaking the real joy of learning has started... i no longer worry about the programming syntax, but the real picture of the end technology...

Tuesday, January 10, 2017

Wednesday, June 22, 2016

Since the day of July 1991 when the GSM network was first made operational in Finland lot of things have changed. In earlier days of Mobile Communication, the communication part was important and it was the most challenging part of mobile computing. Lots of research had taken place to develop Mobile Switching Center, Base Station Controller etc. Not only that, lots of inputs have been made to define how the different MSC’s will communicate with each other and how the interfaces between different parts of the network elements like Um, Abis, B interface, C interface will function. In those days, stresses were given to define Traffic Channel and Signalling Channel. Common Control Channel (CCCH) or Dedicated Control Channel (DCCH) were more important than the mobile device itself. Modulation and technologies like Frequency Hopping Spread Spectrum were more important than the voice and data itself. But days have changed. Once the telecommunication part of the mobile computing is more or less established and the OFCN is laid down, the focus is now on the usefulness of the data and the voice itself or what we do with the data that are being transmitted over the network. The focus has shifted from the network part to the mobile device part. And with the advent of smartphones, it is the Apps that have become more important than any other parts of the mobile ecosystem. The apps have created a complete paradigm shift in the mobility world and it is taking the world of mobility to a different concepts altogether. From late 2007 to approximately 2010 were the years when mobile apps became multi billion dollar business. And it forced every organization to take a policy that is called Mobility First policy. It means that for each and every service that a company offers, it first takes care of the mobile platform. And the latest paradigm shift in the mobility world is the mobile social computing. We have seen the proliferation of social apps like Facebook, Google Plus, Instagram, LinkedIn, Twitter and so many others and i can say that these apps are shaping the behaviors of the mobile users.

With this ever changing mobile world the engineers also had to align themselves accordingly. For example i started my career as a Telecommunication engineer in SIEMENS India and now working on Android platform after working on other mobile OS like Symbian S60. And to do that i had to unlearn many things related to mobile network world and relearn software like C++, Java, Design Pattern, UML and such things. So here i am now. I was able to successfully transform myself from a telecommunication engineer to a mobile software engineer and presently working on Android. Probably many people of my age who started their career in 1994-95, have undergone such transformation. There were always some teething problems in this change management, but i feel happy that i have seen the world of mobile telecommunication changing in front of my eyes…..

Share

Total Pageviews

About Me

A passionate software engineer, husband of a loving wife and doting father of an adorable kid. Professionally I can best describe myself as a curious programmer and a code digger having interests in OOAD, C++, Java, Android, Scrum. I am a self-taught software engineer whose education background did not give much information about modern day software. However, with the help of God and Google, i have been able to overcome that shortcoming. After the Android came into the market, i started enjoying the opensource software. By digging into the Android source code, i have learnt many aspects of software design and development which,i am sure, will help me in the long run. I believe that programming is a great job. When one finds out why a piece of software has been designed the way it is, may be from a designer's perspective, the joy of that finding is no less than that of a scientist. Philosophically i believe in the following simple fact of life... "To win is no more than this...To rise each time you fall...". Last but not the least, i am on an endless journey to know myself. As it is wisely said, " Knowing thyself is knowing God".....

Training offered by me...

I offer training on various IT related subjects including Android, Core Java, C++, UML & Design Pattern, Microservices using Java-Jax RS, SpringBoot and Python Flask and have already trained more than 2000 people including professionals and students. If interested, please contact me on +91 9748185282 or email me at som.mukhopadhyay[AT]gmail[DOT]com