Monday, 25 June 2018

Its not just about learning how to code




These days there is a proliferation of books and courses with the goal of teaching people how to code. These courses usually promise the student that at the end of their study they will have sufficient knowledge of computer programming to be able to create powerful software applications. At the end of the course the student is made to create some toy program that does some simple task and with this achievement, the student is overwhelmed with success at their endeavor. Sooner or later when faced with some real world problem or code the student is usually clueless and many doubt if they really learnt anything from this coding camps.


There is nothing wrong with just learning how to code. It is a very useful skill that develops the ability to think rationally and systematically which is what many people without any proper mathematical training sorely lack. But should we stop at just learning how to code? Most of the time this is enough for the person who doesn’t want to go into software engineering as a career because software engineering is a whole different ball game from just learning how to code.
There are other people who learn to code with a higher purpose in mind but do not necessarily hope to reach the level of a software engineer. These people are just interested in using the computer to solve some problem related to their jobs, especially if they are in any of the sciences. The skill this people need to develop still goes beyond just coding. They need to develop computational thinking skills to enable them express their problems in a form that can be solved using programming.
Computational thinking can be seen as exploratory programming where the goal is not to create a software system, but rather to use programming as a tool to explore the solution to a problem that has a computational bent.
You can do computational thinking in any general programming language but it is going to be clumsy in a compiled language. The best kind of language for doing computational thinking would be an interpreted one, that is one that skips the entire compile cycle needed in compiled languages.
Apart from having an interpreted language to work with, one must also have access to an interactive programming environment. It’s not really fun to do computational thinking by writing code in a typical file and running it on the command line even in an interpreted language. It is usually better to do computational thinking in an interactive environment like the IDLE (Interactive Development Environment) of Python or you can go for the Jupyter environment of Anaconda, which is a Python mega-system.
The interactive interface for doing most computational thinking is called a notebook which was originally invented for the Wolfram Mathematica system. Personally I do my computational thinking in the Wolfram system because it is less quirky and very sophisticated. Everything is built-in and you don’t need to do any Import before using any of the functionality like you would do in a Python based system. You just call on a function name and there you have it! Another strength of the Wolfram system is a much more sophisticated system of visualization much better than the basic Matplotlib available for Python.
People engaged in exploratory programming want to visualize many things efficiently and beautifully which is where Wolfram Mathematica beats many other systems out there, because it was originally invented to do the kind of exploratory programming many people in technical fields like doing.
Interface manipulation vs Computation
JavaScript is eating the world by storm this days! It is very hard to escape JavaScript and associated libraries or frameworks when you want to do any kind of web interface these days. For most people the most important thing they want to design is some app front end and when they choose to do this the default thing to learn apart from HTML and CSS is JavaScript. Throw in some application framework like Angular and React and you have a fully interactive Mobile/Web application.
If this is the only thing you want to learn then some coding school will take you far, but I would recommend doing many courses on the same topics to really go beyond the individual perspective of the instructor to a much more general understanding of the subject. Also I would advise that you first of all learn JavaScript as a language before delving into a specific application framework. This is very important so that you don’t mistake the conventions of the framework you are interested in for the general programming language you call JavaScript itself.
If you want to do computation, then you are in for a different party and thus you will not get very far with learning only how to code. There are so many fields you will need to have knowledge about or at least master in order to build full software systems that go beyond manipulating data for display on some interface to actually solving computational problems, the stuff that programming was invented for.
For an application like Instagram or Google search, the frontend which you view on your mobile or web client has a lot of JavaScript magic and other display related stuff going on. You can go very far by just learning the basics of coding in those coding academies that teach you how to code, but to consider what is going on in the backend as Google responds to your queries and performs an enormous amount of computation in order to find the relevant sites out of the trillions out there that could be relevant to your search? You must go beyond just learning how to code into some kind of full blow computer science curriculum.
Come to think of it, this is where the real money is: solving hard computational problems! No coding school experience with short-form highly summarized lectures will be able to make you a Facebook or Google ready computer programmer. You will need to either formally or informally go through some kind of computer science which will involve you learning stuff from Algorithms to Discrete math, multiple programming languages, Computer architecture and even Artificial intelligence and Machine learning techniques.
Many new programmers are being misled into thinking that knowing HTML, CSS and JavaScript from some coding academy and calling themselves Full Stack developers after that will make them a Zuckerberg of Facebook or a Larry Page of Google. Well bad news for them, they are actually working towards becoming full stack Web developers and not full stack software engineers in any sense. Becoming a full stack web developer even goes beyond learning HTML, CSS and JavaScript, you will have to learn a lot of associated technologies like HTTP, REST, some kind of database system like mongoDB, etc.
It is because of this misconception that I decided to write a book: How To Learn Programming: Navigating the dense jungle of Computing,Software and Technology. In just 389 pages I summarize a major chunk of the tech-world, laying a path through which the newbie can learn what is needed to develop software that does real computation and thus solves some real world problem that could lead to either a large salary at a major firm or creating a company for sharing your solution to the world in the form of a software or hardware product.
There is no need to duplicate content from that book here but I cannot just end this post without mentioning that if you are thinking that you need to go back to college in order to be a real software engineer then you are not exactly right. If you think you need to do that, then there is no problem but if you want to consider the best way to educate yourself informally then MIT OCW is the place to go to. There you will see the entire computer science curriculum of the prestigious institution, Massachusetts Institute of Technology (MIT) offered for free! This includes full in-class video lectures and other text lecture materials including handouts.
This is actually how I learnt most of my computer science and having gone through some coding academies I think MIT OCW is the best approach to learn computer science on your own. In my book, I go into some details of why you should follow the MIT approach listing courses that are very important. A more exhaustive list of CS related courses that might interest you are available at the MIT OCW website.
Computer programming is an exciting and rewarding activity and I hope that you desire to learn and master it to greater depths and not just scheme the surface.  

No comments:

Post a Comment