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 endeavour. 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 these people need to develop still goes beyond just coding. They need to develop computational thinking skills to enable them to 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
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.
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.
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.