An (practical) introduction to programming (in python)

I have been learning python for almost two years now, mostly for astronomy oriented research projects but over the course of the last semester, for a more diverse set of academic questions, as part of a course. I have come across quite a few nuggets that have helped make my life easier while working on python. Looking at the big picture, I have always liked writing about the things that I learn and I feel that only after writing about what I have learnt, in a meaningful and relatable fashion, do I really understand the topic. Quite a few of you might've come across how asking questions out loud, even if it is to a wall, helps understanding the question and see it from a different perspective. Trying to teach someone else what you have learnt will need you to arrange and order things in your head, so that it makes sense to the other person and I don't have to tell you how this will help you understand the topic better as well. Coming back, I have been trying to put together the gist of what I have been learning over the last couple of years, programming in python.

Right off the bat, I have run into a problem. I am a learn-on-the-go kinda guy, learning things as and when they are needed. As I had no introduction whatsoever to programming in python, I started on the python prompt. It is not the easiest not the most helpful way to start programming in python. Only after a couple of months did I start running python code from files. Eventually, I came across ipython notebook and I have been using it for my programming needs ever since. The reason I am mentioning this is to point out the difference between working in python and having a python working environment. I was working in python from the python prompt. Now I am using a python working environment. The difference might not be obvious for someone just beginning to learn a programming language but believe me, it will in a couple of months. It might be hard for people comfortable programming in C to understand this difference because I don't know of many working environments in C, other than for Visual Studio. A working environment in C is a text editor and a compiler. A working environment in python will be a text editor, a python interpreter, extra libraries which are commonly used but not available with the standard python installation, visual elements to show what the figures generated look like and what data is loaded. And maybe more. And given the number of working environments in python (anaconda, canopy, pycharm, ipython, spyder), it's hard to choose one for a beginner. And if I start an introductory article talking about working environments instead of talking about things like loops, variable definitions, function operations and classes, things that they can relate to, people will lose interest fast, really really fast.

I wonder how many people stopped reading this post after they started reading the earlier paragraph. Well, you get my point. After talking about working environments, it's pretty straight forward to me. The two important things for scientific computing, or for any kind of computing for that matter, are to take inputs and give outputs. I used to pull my hair out trying to figure out why the Hello World program is omnipresent in programming textbooks and only now do I understand that it helps one understand how to give an output. I am of the opinion that it is not the best way to teach how to do so. Taking raw input from the user or taking input from files and printing output onto a terminal or printing output to a file should be among the first things taught. Following this, it seems logical to teach people how to store the data which was given to the program as input, in the form of independent variables or in the form of arrays. Use of loops, comparison statements, convenience functions follow which would help us operate on the input data to perform mathematical operations to finally get the output. Introducing the user to libraries that have convenience functions predefined, such as functions that measure the sum of all elements in an array or measure the standard deviation.

That is what I have in mind. A practical approach to programming languages, specifically oriented towards scientific computing. I have a very crude version of what I have rambled on about so far on my github repository here. Any questions or suggestions are welcome and are highly appreciated.

Popular posts from this blog

Animation using GNUPlot

Pandas download statistics, PyPI and Google BigQuery - Daily downloads and downloads by latest version

Adaptive step size Runge-Kutta method