Skip to main content

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

Animation using GNUPlotI've been trying to create an animation depicting a quasar spectrum moving across the 5 SDSS pass bands with respect to redshift. It is important to visualise what emission lines are moving in and out of bands to be able to understand the color-redshift plots and the changes in it.
I've tried doing this using the animate function in matplotlib, python but i wasn't able to make it work - meaning i worked on it for a couple of days and then i gave up, not having found solutions for my problems on the internet.
And then i came across this site, where the gunn-peterson trough and the lyman alpha forest have been depicted - in a beautiful manner. And this got me interested in using js and d3 to do the animations and make it dynamic - using sliders etc.
In the meanwhile, i thought i'd look up and see if there was a way to create animations in gnuplot and whoopdedoo, what do i find but nirvana!

In the image, you see 5 static curves and one dynam…

on MOOCs.

For those of you who don't know, MOOC stands for Massively Open Online Course.

The internet is an awesome thing. It's making education free for all. Well, mostly free. But it's surprising at the width and depth of courses being offered online. And it looks like they are also having an impact on students, especially those from universities that are not top ranked. Students in all parts of the world can now get a first class education experience, thanks to courses offered by Stanford, MIT, Caltech, etc.

I'm talking about MOOCs because one of my new year resolutions is to take online courses, atleast 2 per semester (6 months). And I've chosen the following two courses on edX - Analyzing Big Data with Microsoft R Server and Data Science Essentials for now. I looked at courses on Coursera but I couldn't find any which was worthy and free. There are a lot more MOOC providers out there but let's start here. And I feel like the two courses are relevant to where I …

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

Inspired by this blog post :, I wanted to play around with Google BigQuery myself. And the blog post is pretty awesome because it has sample queries. I mix and matched the examples mentioned on the blog post, intent on answering two questions - 
1. How many people download the Pandas library on a daily basis? Actually, if you think about it, it's more of a question of how many times was the pandas library downloaded in a single day, because the same person could've downloaded multiple times. Or a bot could've.
This was just a fun first query/question.
2. What is the adoption rate of different versions of the Pandas library? You might have come across similar graphs which show the adoption rate of various versions of Windows.
Answering this question is actually important because the developers should have an idea of what the most popular versions are, see whether or not users are adopting new features/changes they provide…