Reviewed: January 2017
This book is very ambitious, attempting to teach programming to first year undergraduates of any scientific discipline. It not only aims to introduce basic programming concepts, but also recursion, object oriented programming and the fundamentals of algorithms and data structures. I believe this would be challenging for a computer science student within an introductory course let alone a student from another subject, especially if using this book for self study in addition to their own workload. However, this book generally explains these concepts well and contains some interesting problems from a range of application areas, including mathematics; physics and biology.
A problem encountered by most beginner Python programmers is that Python 2 is still widely used alongside Python 3. The two versions having significant differences, such as print being changed to a function and the behaviour of the division operator on two integers. The authors go out of their way to ensure this book is compatible with both versions. Unfortunately, the approach they take is to write their own "std" modules which the student must download and use to accomplish even basic tasks, without being clearly instructed to do so. Even the hello world program requires the module "stdio" for the function "writeln". This could have been avoided by using the future module. This standard Python 2 module allows the use of the print function and can change the division operator to be equivalent to Python 3. The standard Python functions, i.e. without using the authors modules, are not discussed. This continues throughout the book, even where the module functions simply call built-in functions.
If this book was written using Python libraries; built-in data types; and, where required, common external libraries such as NumPy and SciPy it would be a very good introduction to programming in Python. As it is this book is a good introduction to several programming topics in the authors non-standard version of Python, after which the student must invest more time and effort to learn the actual Python programming language.