So what is Python? Chances you are asking yourself this. You may have found this book because you want to learn to program but don’t know anything about programming languages. Or you may have heard of programming languages like C, C++, C#, or Java and want to know what Python is and how it compares to “big name” languages. Well, hopefully I can explain it for you.
Python Concepts
If your not interested in the the hows and whys of Python, feel free to skip to the next chapter. In this chapter I will try to explain to the read why I think Python is one of the best languages available and why it’s a great one to start programming with.
Dynamic vs Static Types
Python is a dynamic-typed language. Many other languages are static typed, such as C/C++ and Java. A static typed language requires the programmer to explicitly tell the computer what type of “thing” each data value is. For example, in C if you had a variable the was to contain the price of something, you would have to declare the variable as a “float” type. This tells the compiler that the only data that can be used for that variable must be a floating point number, i.e. a number with a decimal point. If any other data value was assigned to that variable, the compiler would give an error when trying to compile the program.
Python, however, doesn’t require this. You simply give your variables names and assign values to them. The interpreter takes care of keeping track of what kinds of objects your program is using. This also means that you can change the size of the values as you develop the program. Say you have another decimal number you need in your program. With a static typed language, you have to decide the memory size the variable can take when you first initialize that variable. A double is a floating point value that can handle a much larger number than a normal float (the actual memory sizes depend on the operating environment). If you declare a variable to be a float but later on assign a value that is too big to it, your program will fail; you will have to go back and change that variable to be a double.
With Python, it doesn’t matter. You simply give it whatever number you want and Python will take care of manipulating it as needed. It even works for derived values. For example, say you are dividing two numbers. One is a floating point number and one is an integer. Python realizes that it’s more accurate to keep track of decimals so it automatically calculates the result as a floating point number. Here’s what it would look like in the Python interpreter.
>>> 6.0 / 2
3.0
>>> 6 / 2.0
3.0
As you can see, it doesn’t matter which value is on top or bottom; Python “sees” that a float is being used and gives the output as a decimal value.
Interpreted vs. Compiled
Many “traditional” languages are compiled, meaning the source code the developer writes is converted into machine language by the compiler. Compiled languages are usually used for low-level programming (such as device drivers and other hardware interaction) and faster processing, e.g. video games.
Because the language is pre-converted to machine code, it can be processed by the computer much quicker because the compiler has already checked the code for errors and other issues that can cause the program to fail. The compiler won’t catch all errors but it does help. The caveat to using a compiler is that compiling can be a time consuming task; the actual compiling time can take several minutes to hours to complete depending on the program. If errors are found, the developer has to find and fix them then rerun the compiler; this cycle continues until the program works correctly.
Python is considered an interpreted language. It doesn’t have a compiler; the interpreter processes the code line by line and creates a bytecode. Bytecode is an in-between “language” that isn’t quite machine code but it isn’t the source code. Because of this in-between state, bytecode is more transferable between operating systems than machine code; this helps Python be cross-platform. Java is another language that uses bytecodes.
However, because Python uses an interpreter rather than compiler, the code processing can be slower. The bytecode still has to be “deciphered” for use by the processor, which takes additional time. But the benefit to this is that the programmer can immediately see the results of his code. He doesn’t have to wait for the compiler to decide if there is a syntax error somewhere that causes the program to crash.
Prototyping
Because of interpretation, Python and similar languages are used for rapid application development and program prototyping. For example, a simple program can be created in just a few hours and shown to a customer in the same visit.
Programmers can repeatedly modify the program and see the results quickly. This allows them to try different ideas and see which one is best without investing a lot of time on dead-ends. This also applies to creating graphical user interfaces (GUIs). Simple “sketches” can be laid out in minutes because Python not only has several different GUI libraries available but also includes a simple library by default.
Another benefit of not having a compiler is that errors are immediately generated by the Python interpreter. Depending on the developing environment, it will automatically read through your code as you develop it and notify you of syntax errors. Logic errors won’t be pointed out but a simple mouse click will launch the program and show you final product. If something isn’t right, you can simply make the change and click the launch button again.
Procedural vs. Object-Oriented Programming
Python is somewhat unique in that you have two choices when developing your programs: procedural programming or object-oriented. As a matter of fact, you can mix the two in the same program.
Briefly, procedural programming is a step-by-step process of developing the program in a somewhat linear fashion. Functions (sometimes called subroutines) are called by the program at times to perform some processing, then control is returned back to the main program. C is a procedural language.
Object-oriented programming (OOP) is just that: programming with objects. Objects are created by distinct units of programming logic; variables and methods (an OOP term for functions) are combined into objects that do a particular thing. For example, you could model a robot and each body part would be a separate object, capable of doing different things but still part of the overall object. OOP is also heavily used in GUI development.
Personally, I feel procedural programming is easier to learn, especially at first. The thought process is mostly straightforward and essentially linear. I never understood OOP until I started learning Python; it can be a difficult thing to wrap your head around, especially when you are still figuring out how to get your program to work in the first place.
Procedural programming and OOP will be discussed in more depth later in the book. Each will get their own chapters and hopefully you will see how they build upon familiar concepts.