The term agile programming is well known for developers. It is equal to continuous delivery, user driven bugtracking and version control systems. The problem with agile programming is, that even it its agile, it is not flexible enough. The problem is that in many so called agile projects the wrong programming language is used, notably C, C++ and Java. Somebody may argue, that these are industry standard programming languages and there is no alternative available. The better idea is to separate between agile programming and agile prototyping. Programming means to use one of the mentioned industry standard languages for writing software, for example to write in Java a business application. Before this can be done a step before is needed called gui prototyping. Using Java for creating prototypes is not the best choice. Better tools are painting programs like gimp, Excel spreadsheets and last but not least Python. All these files can be managed by agile paradigm too, that means it make sense to create a bug report for a malfunction excel spreadsheet or a non-working Python script. The difference to normal programming is, that in most cases no binary files are generated. That means, no standalone application is there instead the development process stays within the prototype.
Let us define who agile prototyping looks in reality. It is a git folder which contains Pythons scripts, plain text files, some word documents, PNG images and perhaps some bash scripts. That means, it is not programming in a classical sense which means to create C++ and C files which gets compiled into binary files, but it is the pre-step before the code can be written. Agile prototyping isn’t done by programmers, but by design experts within the marketing department. What they are doing is to convert customer requirements into a mockup. This mockup is very slow (Python is at least 30x times slower than a C++ program) or in case of an Excel spreadsheet it is called “no code”, that means it is simply a table with numbers in it and some formulas. The new thing in agile prototyping is, that this design step isn’t ignored but can be seen as an important part of the overall project. I would guess, that prototyping needs 90% of the total project time. That means, software development has nothing to do with creating C++ code, but with creating lots of prototypes.
Let us define what Python is. Sometimes it is called a programming language like Java. But it isn’t. Python scripts are a mess. They run very small, they are ready for install in a production environment and a python3 script will not run very well with python2. Also many libraries doesn’t make sense and it is not possible to create a fast library with Python sourcecode. That means, in professional software development, Python is a no go. It is similar to a matlab script or a visual basic macro. But Python has a major feature: it is great for creating throw away prototypes. That means, to create on the fly a GUI, asking for comments and then reprogram everything from scratch.
Suppose, a prototype was created, what is the next step? Surprisingly it is very easy to convert a prototype into runable software. If a Python GUI is already there and some spreadsheets it’s no problem for the programmers to convert this into a C++ application which runs very fast and compiles into executable code. The task can’t be done autonomously, but compared to create a C++ app from scratch it is easy going. The reason is, that in the prototype all important decisions are made. The GUI is fixed, the algorithms are known, the interfaces are clear. All what the programmer has to do, is to create for that specification an efficient C++ code. If he has done so, this application can be delivered to the end user. It can be installed with a package manager and will run very fast on a PC. In contrast, it’s not recommended to deliver a prototype to the enduser, because this is often buggy and the performance is poor.
I think it’s important to see Python and C++ as different kind of tools. Python is great for GUI design and documenting algorithms, while C++ is great for creating fast running code which runs on any device.
Low fidelity prototyping
Game designers are creating wireframe models for brainstorming. The idea is to reduce the invested time to a minimum and focus on the general concept. The result is some kind of game, but it has a abstract form. From a critical standpoint everything is wrong with an animated wireframe realized in Python. At first, the wireframe doesn’t look realistic, secondly the Python language provides only a small frames per second, and third no sound is there. But for a prototype it is ok.