12/02/2018 11:18am
Indeed! [LINK]
08/02/2018 4:07pm
The advert video for @iros_2018 is really good! I wish robots really served coffee at the conference [LINK]
07/02/2018 10:10am
RT @NatureEcoEvo: Cockroach and termite genomes reveal molecular basis of termite eusociality [LINK] [LINK]
06/02/2018 1:29pm
Robotics for Nuclear Environments - a really cool website for a really cool project that I am currently a part of a… [LINK]
02/02/2018 8:09pm
RT @RIFBristol: Everything you need to know about Bristol’s sci-tech scene [LINK] via @siliconrepublic [LINK]

[How Coding in Python Might Be Bad For You]

Added on 10/04/2016
Tags: Java :: C++ :: ActionScript

Python questionmark logoWith the growing power of computers, scientists across all fields are starting to appreciate computer modelling as a valuable tool for their research. A particularly favoured language is Python, as it is easy to get into compared to other, strongly typed and compiled languages, like C++. Consequently, because of Python's popularity, there is a great number of code libraries and tools one can use for free. I myself use Python for analysis and visualisation of simulation results (I write my simulations in C++ though). I have also been exposed to using Python during a couple of commercial projects.

The momentum that Python has these days, both in science and in the software development industry, worries me. I have seen many programs and have worked with many programmers during my career as a software developer. I often struggle to explain to fellow scientists and programmers why I think Python is bad. Today, I would like to share the following analogy:

Imagine that you are writing an essay for a coursework during your degree. There are good and bad courses and there are good and bad teachers. I'd like to argue that coding in Python is like writing a really bad essay and getting away with it. Here is why:

1. No structure

No structureYou are allowed to write your essay with any structure you want. You skip an introduction and go straight to your main arguments. You then mention a couple of references in the end. You get a B, which in your mind validates this approach to writing essays.

In Python, it is very easy for your code to become a mess, especially if you are accustomed to the fluidity that Python allows. There is no pre-scribed structure to a program - you can write in-line code, you can put it into functions or into classes. What can end up happening in bigger projects is that there is a mixture of everything. This makes it really hard
to read and maintain complex programs.

2. You are allowed to redefine words and say things that are not true

You are allowed to redefine words and say things that are not trueIn your essay on African animals, you say that termites are social insects and than rhinos are mammals. A few pages later, you claim that ants are really stones and that rhinos can fly. You get an A - what a creative way of thinking about reality!

In python, a variable can change its data type during run time. Or, a parameter to a fuction can take on any data type, determined at a run time. Consider the following code snippet:

def whichWeekDayIsIt(date):
   A function that returns name of the week
   day, based on a date.

It is simple enough to understand the function signature right? Yes, until someone changes the body of the function to cover cases when date is not a single date, but a list of dates. You can then end up calling the function as

myDay = whichWeekDayIsIt(date = [01022016, 02022016])
The parameter name 'date' looses its original meaning (a similar thing would happen if you changed the parameter name to 'dates' and then wanted to call it with a single date, not a list). Because variables have no datatypes, you basically either have to call variables in a very generic way, defeating the purpose of naming them, or call them in a way that is only partially true.

The second problem with having no data type is that when it comes to passing variables into functions, you have to rely purely on documentation of that function to determine what you should pass in (which, more times than I am comfortable with, is missing in open-source libraries). Alternatively, you have to look into the body of that function to see how a particular parameter is used and to deduce what data type your variable should have. This is sometimes really difficult.

3. The meaning of words changes based on the amount of spaces in front of them

The meaning of words changes based on the amount of spaces in front of themEveryone makes mistakes during typing. But in the essay for this course, a word " dog" that has one space in front of it means a dog, while the phrase " dog" (two spaces) means a flying saucer. Unfortunately, your word editor does not highlight multiple spaces as an error, which means you end up writing about UFOs, while what you really wanted to do is describe your pet dog.

This is one of the most annoying things about Python for me - indentation, i.e., the use of white spaces at the beginning of code lines, defines what part of the program a line belongs to. It is isn't just the fact that it slows coding down during "dirty-editing" of new code. This reliance on indentation alone is potentially dangerous, as it allows you to create logical bugs that are difficult to spot. Consider the following code snippet:

numOfDrivers = 0
for car in cars:
   print("car {}".format(car))
   numOfDrivers += 1

The number of drivers will be equal to the number of cars. Now imagine you are editing the code and you make the following indentation mistake:

numOfDrivers = 0
for car in cars:
   print("car {}".format(car))
   print("something else")
numOfDrivers += 1

The number of drivers will now be 1. It is possible that you will not realise this mistake until your code delivers unexpected results. In the worse case scenario, you will never go back to your code and you will make incorrect conclusions based on your results. For example: "For every ten cars, there is one driver, we must have self-driving cars on the road!"

Let's compare this to what happens in other languages, like C++, Java, etc.:

numOfDrivers = 0;
for (i=0; i<cars.length(); i++) {
   print("car {}".format(car))
   print("something else")
numOfDrivers += 1;

Here, the same mistake of unindenting the line that counts the number of drivers was made. However, because the code has a stronger structure and uses the curly brackets { } to identify the code block in the for loop, the resulting number of drivers will still be correct.

4. The only feedback you get is that you failed or passes your course

The only feedback you get is that you failed or passes your courseYou cannot ask your course coordinator about your research for the essay, because he is too lazy to answer his emails. You spend weeks writing your essay, submit it and fail the course when it's too late to change anything.

Python has no compiler. It means that you can simply run a Python program without the extra step of turning code into an executable file. Yes, it may be faster to develop (small) applications this way. But in the long run, it actually makes you less productive. I lost count of how many times my program failed after an hour or so of running, because of some simple typo that a compiler could have picked up straight away.

5. Lack of control over volume

Lack of control over volumeYou need to print your essay to hand it in and you are allowed any formatting you like. Because you have absolutely no idea about how printing works, your essay ends up being triple spaced, with headings that span across pages. When you print it, it takes up a whole room.

Python leaks memory badly. Have you ever tried running a program that takes a few hours to execute and produces a lot of graphs using matplotlib? Python, like other languages that use a garbage collector, was designed based on the philosophy that it is the computer, not the programmer, that should decide how memory is allocated and when it is freed up.

What this means in practise is that it's very hard to optimise memory usage. Sure, things run smoothly for simple programs that show off a Hello world message and maybe calculate a few things. For a scientific application though, that requires complex computations and uses big data, this can become a problem very quickly.

6. Each sheet of paper is from a different manufacturer. Your printer dies horribly.

Your printer dies horriblyBecause you do not produce your own printing paper, and because paper is really hard to find in bulk, you have to go on the Internet and buy individuals sheets (so you can print out your thousand-page essay). Some paper manufacturers are very bad at their job but no one knows about it. One partcular sheet had stone fragments in it and broke your printer.

It is very common in Python to use libraries, mainly so that your application production is faster, or because some people truly know better how to write code. However, the curse of open-source applies to program libraries too. Not everyone knows how to code efficiently. Almost no one, from my experience, knows how to document things properly.

A python application may be using 20 other libraries to do what it's supposed to (because, let's face it, Python by itself doesn't support much). You end up installing libraries all the time, especially when you pick up someone else's project. Libraries often depend on other libraries than depend on other libraries. My laptop has become a mess since I started coding in Python, I must have installed at least 30 libraries to finally get some code running.

Secondly, most libraries are made by people like us, who are simply trying to get by writing code for their own application. Some of those people are kind enough to want to share their code, but they often do not go the extra mile to make their code usable in general. Poor documentation, lack of naming conventions, and other bad coding practises are very common.

7. You are in a community of false novel writers

You are in a community of false novel writersYour fellow classmates also have to write their essays. As do many other people on the Internet. It feels to them like they are writing a novel, or even a trilogy, and they often truly believe that they are professional novelists capable of producing masterpieces. In really, some of them have never even seen a novel.

The Python community feels very strange to me personally. Python claims to be a language to fit all purposes, it is functional, it is object-oriented, it is for simple utility scripts and it is used for working with big data. I have particular experience in Object-Oriented programming (OO) and I have seen OO in Python, C++, Java, Objective-C, ActionScript, JavaScript, PHP, etc. Like in PHP, for example, OO in Python is not fully implemented. For example, encapsulation, one of the basic principles in OO is non-existant in Python. The fact that you can create objects in a language does not make it a proper OO language.

And that's ok, when everyone understands what a language is suitable for. PHP programmers will not claim that their language is for anything else than coding web sites. Python programmers, however, seem to think that their language is the answer to everything. If they remain within their niche community, they will never learn aspects of coding that are not present in Python, but are important in general.


Just like any other programming language, there are things that Python is good at and things it is bad at. I find it a great tool for writing initial exploration code, or small scripts to maintain large numbers of files and directories. Also, I use matplotlib extensively as it can produce some really nice graphs with relative ease.

The reason I have a problem with Python in general is how it is used. I do not find it efficient and I therefore find it difficult to understand why people want to teach it to data scientists. I do not find it well structured and because of the reasons I list above, I think it encourages bad coding practises. That's fine if you are coding small applications alone. But for a big project, Python code can become a big mess very quickly, unless there is an experienced programmer to guide the development process.

In science, I think it is up to the people with a richer software engineering background to encourage others to learn good coding practise and to use languages more appropriate for big applications (like C++, Java, C, etc.). Yes, it is hard to get started with those languages. It is hard to understand memory management and it takes years to build up a sense of what is good and what is bad coding practise. But in the long run, more structured languages provide a safer and a more robust environment for turning ideas into computer programs. Let's not write bad essays and pretend they are best-selling novels. Let's build up our skills slowly from the ground up, so that when we finally want to write those big novels, we can do so properly. 

Did this article interest you? Have a look at these!

pyCreeper: A python library for making plots easily and cleanly.

Object Oriented Software Development (In Python): Tips on making clean OO code in Python

Image sources (in order as they appear on the page):



Thanks for your comment Gastel, I sometimes feel the same way, like I'm too old because I don't agree with the new stuff. I ask myself if I am missing something. But then I remember that I am only 30 and that not everything that is newer is necessarily better :)

Python code CAN still be good, as I mentioned in the article, and I think my pyCreeper library, linked above, is an example of good structure and documentation. However, in my opinion, many of the pro-Python arguments come from lack of understanding of computers and from a desire for convenience rather than from a paradigm shift to something genuinely better.

Thank you for your article. As a c++ programmer for more than 20 years I've found that I really can't stand Python (but since I'm currently working to a reinforcement learning project I can't avoid it since most of the projects around are python based). I was wondering if it was just me, maybe after so many years I've become too inflexible towards new languages and approaches (ie. I'm too old). Well, you article could have been written by me, I think exactly the same things and for the same reasons. I feel a bit younger now. Thank you :)

That is a very good point you raise Dr Who. Also, a very good idea to let students compare the two languages directly. If I ever get the chance, I'm going to do that myself.
Dr Who
All those great Python Libraries, as well as the Python interpreter, are written in C++ or C. Many Python libraries are just the C++ library in and of itself. No one re-invented the wheel, as in that is not time efficient or Labour efficient. If it’s not broke, just put a new face on it.

I challenged my students to write the same data analysis program in C++ and Python. Python version took hours to run. C++ did it in seconds.
Chuck jones
Python is great. You are an idiot

{Please enable JavaScript in order to post comments}

[You might also be intested in...]

Top 5 Things I Wish I Knew When I Started a PhD
In a short moment self-reflection, I made a list of the five most important things that doing research with a lot of data has taught me. And I learned the hard way - wasting a lot of time and energy re-doing things instead of being smart about it at the beginning. Note to self: I should read this once a year or so.
Creeper :: Getting Started
This tutorial helps you to create your own Java project with Creeper. As an alternative solution, you could simply download Creeper with the Demo project and rewrite class and package names within net.lenkaspace.creeper.demo to suit your own needs.
A small compiler script for C with GCC
One of my favourite classes at the moment is the one where they teach us C. Knowing C already, it is a nice relaxation for Monday morning...
V-REP, Gazebo or ARGoS? A robot simulators comparison
Let’s have a look at three commonly used open-source simulators for robotics: V-REP, Gazebo and ARGoS, to find out which one suits your project the best.
Designing Effective Roadmaps for Robotics Innovation
Automated factories, autonomous delivery drones, self-driving cars: these and similar technologies will soon touch every aspect of our lives. An engaging discussion about how these technologies are regulated and innovated took place at the IROS 2017 conference.
The Information-Cost-Reward framework for understanding robot swarm foraging
The Information-Cost-Reward (ICR) framework relates the way in which robots obtain and share information about where work needs to be done to the swarm’s ability to exploit that information in order to perform work efficiently in the context of a particular task and environment.