Skip to main content

Chipping In ....

My cousin, who was in class X, once sought some guidance from me to complete his computer assignment - to write a Java program for bubble sort. Having been out of touch with "classic programming assignments" since some time - I wanted to refresh my understanding of bubble sort. So I asked him to explain it to me - he started blurting out the code in Java. I stopped him "Hold on! Let's not get into the code. First tell me what you do in bubble sort?"

To my surprise he couldn't tell me in plain English what he meant by bubble sort. When I delved deeper I realized that the problem was more fundamental - Java was the first programming language that he was learning and his study of programming started with understanding Objects and Classes rather than algorithms and logic.

I had observed the same problem with some batch mates in Engineering. But their case was more accidental than by design because Computer Science was not a core subject in their schools. However, for my cousin it is more by design that study of computer programming starts with a language as complex as Java (this is usually preceded by study of MS Office or Coral Draw).

The problem with this approach is that students are exposed to advanced software development techniques (like OOP) even before being told why and what is the expected result from their use. It is like teaching a student the Pythagoras theorem before basic geometry.

IMHO, the study of programming should proceed in the order of increasing complexity of programming logic and its relationship with the real world. Programming has 3 basic concepts - structured flow of instructions, data abstraction & storage and data presentation. These 3 parts correspond to the 3 components - the machine, the real world and their relationship.

The first thing that a naive student needs to understand is that in order to use a machine for problem solving, one must 'talk' to it in a language that it understands. I am not referring to Language Syntax but the ability to think in a structured manner. While the traditional means to learn this would be flow-charts and algorithms, they are often boring for students as one cannot 'run' algorithms and flow charts and see the results.

Hence, I think the best language to start learning programming is BASIC. Simple syntax, English like commands and semi-structured constructs make it an ideal choice. It combines the ease of algorithms with compiler readable instruction set. In addition, the fact that BASIC has no ability to interact with databases means that it follows the most basic concept of computer science - GIGO (Garbage In Garbage Out) - to the tee.

Another benefit of BASIC is that in spite of being an unstructured language, it introduces you to the basic constructs used in all high-level languages like loops and input/output commands. I learnt BASIC from a book called Chipping In - it was a fun book illustrated with cartoons to explain the 'flow' of sample programs. Unfortunately, the book isn't available in the markets any more and this post is my tribute to the book.

Anyway- back to programming - if someone wants to progress further towards system programming, it is important to learn about handling memory and addresses - the best way to learn which Assembly programming. However, often people are told to learn 'C' instead, which I feel complicates things because the concepts of pointers in C are extremely difficult to understand without the knowledge of how memory is manipulated through raw addresses. However, once you have manipulated memory addresses and registers in assembly language, the otherwise complex concepts of pointers seem quite easy.

For those who want to progress towards application development however should understand Objects and Classes along with database concepts and SQL. Though to build simple applications, IDEs like Visual Basic coupled with Access databases offer much simpler options - complex software cannot be built without OOP concepts. Suites like VC++ and other more complex development environments are essentially based on OOP.

Another area which many youngsters might consider to learn immediately after BASIC is web-based programming in JavaScript + HTML further progressing towards AJAX and server side languages like ASP and PHP. Increasingly most application frontends are web-based and one would rather learn these than Desktop environments like VB and VC.
It is only here that I would appreciate Java - especially applets for offering a middle ground of a GUI/front-end + OOP language. However, in the age of Web2.0 Apps the relevance of Java is questionable.

In fact Web2.0 also fundamentally challenges all concepts of software development and project management. For those who would want to delve deeper into the effects of Web2.0 on software project management - Getting Real by 37 signals is a good book. The book is available free to read online or you can buy a PDF for $19.

Comments

  1. one word... apt.

    very true... i m faced this exact scenario with my bro...

    ReplyDelete

Post a Comment

Popular posts from this blog

How will travel industry transform post-Covid

Unlike philosophers, journalists and teenagers, the world of entrepreneurship does not permit the luxury of gazing into a crystal ball to predict the future. An entrepreneur’s world is instead made of MVPs (Minimum Viable Product), A/B Tests, launching products, features or services and gauging / measuring their reception in the market to arrive at verifiable truths which can drive the business forward. Which is why I have never written about my musings or hypothesis about travel industry – we usually either seek customer feedback or launch an MVPised version and gather market feedback. However, with Covid-19 travel bans across the globe, the industry is currently stuck – while a lot of industry reports and journalistic conjectures are out, there’s no definitive answer to the way forward. Besides there is no way to test your hypothesis since even the traveller does not know what they will do when skies open. So, I decided to don my blogger hat and take the luxury of crystal gazing

A Guide to Privacy on Social Media [apps]

The recent announcement by WhatsApp to update its privacy terms - and 'accept or leave the app' stance - led to an exodus of users from Whastapp to competing, privacy-conscious apps such as Telegram or Signal. A week after the exodus began, Whatsapp clarified its stance - and WhatsApp's CEO went about providing a long Twitter clarification . And then, many returned, many who considered moving stayed put on Whatsapp. This post is meant for those who are still sitting on the fence - it clarifies questions like: What is this all about? What do I do? Is Whatsapp safe? I've heard Telegram is Russian - so how is it safer than Whatsapp? I can't move because my business contacts are on Whastapp - how do I secure myself? PS: I've modeled this post based on several conversations I've had with friends and family on this subject, dealing with the chain of questions they ask, then objections they raise, then clarifications they seek - and finally the change resistance

Ekla Chalo re

Watched "Bose- The forgotten Hero" on Saturday. Gem of a movie and probably the best of Shyam Benegal. Subhash Chandra Bose has always been an inspiring character in the history for the youth. This post however is not about the movie, its about the lead song 'Tanha Rahee' which is based on the poem 'Ekla Chalo Re' by Gurudev Rabindranath Tagore. I had pasted the English translation of this poem on my blog earlier. http://the-complete-man.blogspot.com/2004/12/tsunami-times_30.html However, yesterday I found the original bengali text of the poem and found that the meaning in the above translation was not exact. So I have endeavourer (with the help of Shubham ) to re-translate it into English and Hindi by myself. Here is the output of my work: Bengali Jodi Tor Dak Soone Keu Na Asse Tobe Ekla Chalo re Ekla Chalo Ekla Chalo Ekla Chalore Jodi Keu Katha Na Kai Ore Ore O Abhaga Jodi Sabai Thake Mukh Firae Sabai Kare Bhay Tabe Paran Khule O Tui Mukh Fute Tor Maner Kath