Recs.
Updated
SpecsUpdate
Pros
Pro Comes with extensive libraries
Python ships with a large standard library, including modules for everything from writing graphical applications, running servers, and doing unit testing. This means that beginners won't need to spend time searching for tools and libraries just to get started on their projects.
Pro Clear syntax
Python's syntax is very clear and readable, making it excellent for beginners. The lack of extra characters like semicolons and curly braces reduces distractions, letting beginners focus on the meaning of the code. Significant whitespace also means that all code is properly and consistently indented.
The language also uses natural english words such as 'and' and 'or', meaning that beginners need to learn fewer obscure symbols. On top of this, Python's dynamic type system means that code isn't cluttered with type information, which would further distract beginners from what the code is doing.
Pro Multipurpose
Python is heavily used in education sector, web and internet development, scientific and numeric computing as well as in big data and machine learning algorithms development.
The depth and breadth of Python makes it the language of choice in education and research sector and students across the globe use Python for learning programming and building research projects.
Pro Lots of tutorials
Python's popularity and beginner friendliness has led to a wealth of tutorials and example code on the internet. This means that when beginners have questions, they're very likely to be able to find an answer on their own just by searching. This is an advantage over some languages that are not as popular or covered as in-depth by its users.
Pro Emphasis on readability
Easy to read even for people who don’t know the language.
Pro All objects including functions are first-class objects
Functions have attributes and can be referenced and assigned to variables. As Guido points out in his blog, "One of my goals for Python was to make it so that all objects were 'first class.' By this, I meant that I wanted all objects that could be named in the language (e.g., integers, strings, functions, classes, modules, methods, etc.) to have equal status. That is, they can be assigned to variables, placed in lists, stored in dictionaries, passed as arguments, and so forth."
Pro Good documentation
The Python community has put a lot of work into creating excellent documentation filled with plain english describing functionality. Contrast this with other languages, such as Java, where documentation often contains a dry enumeration of the API.
As a random example, consider GUI toolkit documentation - the tkinter documentation reads almost like a blog article, answering questions such as 'How do I...', whereas Java's Swing documentation contains dry descriptions that effectively reiterate the implementation code. On top of this, most functions contain 'Doc Strings', which mean that documentation is often immediately available, without even the need to search the internet.
Pro Good language for beginners
Simple syntax and the ability to execute code using the interpreter make it easier for beginners to learn and experiment, but it also means that experienced programmers can be more productive with Python, as well.
Pro One right way to do things
One of the Guiding Principles of Python is that there should be only one obvious way to do things. This is helpful for beginners because it means that there is likely a best answer for questions about how things should be done.
Pro Advanced community projects
There are outstanding projects being actively developed in Python. Projects such as the following to name a random four:
- Django: a high-level Python Web framework that encourages rapid development and clean, pragmatic design.
- iPython: a rich architecture for interactive computing with shells, a notebook and which is embeddable as well as wrapping and able to wrap libraries written in other languages.
- Mercurial: a free, distributed source control management tool. It efficiently handles projects of any size and offers an easy and intuitive interface.
- PyPy: a fast, compliant alternative implementation of the Python language (2.7.3 and 3.2.3) with several advantages and distinct features including a Just-in-Time compiler for speed, reduced memory use, sandboxing, micro-threads for massive concurrency, ...
When you move on from being a learner you can still stay with Python for those advanced tasks.
Pro Easy to get started
On top of the wealth of tutorials and documentation, and the fact that it ships with a sizeable standard library, Python also ships with both an IDE (Integrated Development Environment: A graphical environment for editing running and debugging your code); as well as a text-based live interpreter. Both help users to get started trying out code immediately, and give users immediate feedback that aids learning.
Pro Easy to find jobs
Python's popularity also means that it's commonly in use in production at many companies - it's even one of the primary languages in use at Google. Furthermore, as a concise scripting language, it's very commonly used for smaller tasks, as an alternative to shell scripts.
Python was also designed to make it easy to interface with other languages such as C, and so it is often used as 'glue code' between components written in other languages.
Pro Static typing via mypy
Python's syntax supports optional type annotations for use with a third-party static type checker, which can catch a certain class of bugs at compile time. This also makes it easier for beginners to gradually transition to statically typed languages instead of wrestling with the compiler from the start.
Pro Good introduction to data structures
Python's built-in support and syntax for common collections such as lists, dictionaries, and sets, as well as supporting features like list comprehensions, foreach loops, map, filter, and others, makes their use much easier to get into for beginners. Python's support for Object Orient Programming, but with dynamic typing, also makes the topic of Data Structures much more accessible, as it takes the focus off of more tedious aspects, such as type casting and explicitly defined interfaces.
Python's convention of only hiding methods through prefacing them with underscores further takes the focus off of details such as Access Modifiers common in languages such as Java and C++, allowing beginners to focus on the core concepts, without much worry for language specific implementation details.
Pro Supports various programming paradigms
Python supports three 'styles' of programming:
- Procedural programming.
- Object orientated programming.
- Functional programming.
All three styles can be seamlessly interchanged and can be learnt in harmony in Python rather than being forced into one point of view, which is helpful for easing confusion over the debate amongst programmers over which programming paradigm is best, as developers will get the chance to try all of them.
Pro Mandatory indentation
No holy wars about which indentation style is best. No wasted time managing brackets, semicolons, or other redundant garbage.
Pro Import Turtle
Do something visually interesting in minutes by using the turtle standard library package.
Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzig and Seymour Papert in 1966.
Imagine a robotic turtle starting at (0, 0) in the x-y plane. After an import turtle, give it the command turtle.forward(15), and it moves (on-screen!) 15 pixels in the direction it is facing, drawing a line as it moves. Give it the command turtle.right(25), and it rotates in-place 25 degrees clockwise.
Turtle can draw intricate shapes using programs that repeat simple moves.
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
Pro Type hinting
The current version of Python has built-in syntax for both function and variable annotations--for optional static (compile-time) typing via third-party tools like mypy and PyCharm IDE.
Pro Interpreters for JS, Microtontrollers, .Net , Java & others
Python is not limited to just be cross platform. It goes far beyond all high level languages since it can run on top of several other frameworks & architectures :
Examples of interpreters:
- Standard (PC Win/Lin/Mac, ARM, Raspberry, Smartphones): CPython usually, but some more specialized for smartphones: Kyvi, QPython, ...
- Web Browser JS : Brython, PyJS,
- .Net : IronPython
- Java: Jython
- Microcontrollers with WiFi like ESP8266 or ESP32: MicroPython
- Can be statically compiled (instead of interpreted) with Cython. (Do not mix up with cPython)
With python, you're sure your code can run (almost) everywhere, from 2€ computers to the most expensives.
So, for instance, with Jython you can access the Java libraries with Python language.
Cons
Con Arbitrary semantic quirks
The language suffers from issues with non-systematic language semantics, such as differentiation between functions and methods; operators and functions; inconsistencies in default scope behavior (conflation of variable assignment and declaration--global vs nonlocal, and class declarations don't quite have lexical scope.); a mixture of statements and expressions with unclear standards for what kinds of operations get to be an expression and which are only statements, and weird issues like no statements in lambdas.
Con Bad performance
Python, like many interpreted and untyped languages, is fairly slow compared to compiled languages like C, C++ or Java. Sometimes this won't matter, but when it does you're talking about twenty times slower than C/C++ and ten times slower than Java on average.
Con Language fragmentation
A large subset of the Python community still uses / relies upon Python 2, which is considered a legacy implementation by the Python authors. Some libraries still have varying degrees of support depending on which version of Python you use. There are syntactical differences between the versions.
Con Improper closures
Lambdas are limited to single-expression statements, and functions that close over local variables easily invalidate references, limiting their capability for maintaining state. Other functional languages that implement closures do not have any of these limitations (or they are comparatively so substantially relaxed as to not make a difference.)
Con Inelegant and messy language design
The first impression given by well-chosen Python sample code is quite attractive. However, very soon a lack of unifying philosophy / theory behind the language starts to show more and more. This includes issues with OOP such as lack of consistency in the use of object methods vs. functions (e.g., is it x.sort() or sorted(x), or both for lists?), made worse by too many functions in global name space. Method names via mangling and the init(self) look and feel like features just bolted on an existing simpler language.
Con Limited support for functional programming
While Python imports some very useful and elegant bits and pieces from FP (such as list comprehensions, higher-order functions such as map and filter), the language's support for FP falls short of the expectations raised by included features. For example, no tail call optimisation or proper lambdas. Referential transparency can be destroyed in unexpected ways even when it seems to be guaranteed. Function composition is not built into the core language. Etc.
Con Sacrifices principles for beginner-friendliness
Python tries hard to look like imperative pseudocode. This is great for simple scripts, but for more advanced applications one would often wish for a bit more depth-oriented design with enforcement of standards. Python tends to be procedural at the small scale, OO at the large scale and occasionally functional when it's deemed elegant, but this doesn't always latch together very well. The “English-like” syntax often make it difficult to understand how something works precisely.
Con The process of shipping/distributing software is reatively complicated
Once you have you program the process of having a way to send it to others to use is fragile and fragmented. Python is still looking for the right solution for this with still differences in opinion. These differences are a huge counter to Python's mantra of "There should be one-- and preferably only one --obvious way to do it."
Con Might not be very future-proof
Lots of features that will probably be crucial as time goes (good support for parallelism for example) are missing or are not that well-supported in Python. Since 2.x and 3.x still exist, be prepared to switch if something makes 3.x take off in the future.
Con Does not teach you about data types
Since Python is a dynamically typed language, you don't have to learn about data types if you start using Python as your first language. Data types being one of the most important concepts in programming. This also will cause trouble in the long run when you will have to (inevitably) learn and work with a statically typed language because you will be forced to learn the type system from scratch.
Con Hard to debug other people's code
As the structure of Python code is based on conventions many developers are not following them and so it is difficult to follow/extract the design of not trivial application from the code. While this is a con, I see it in other languages as well. It seems to depend on the programmer. Most people don't learn conventions first, they just start programming. Unless you work for someone who insists you follow the conventions, you will probably go with what you like. You might never look at the conventions.
Con The elegant design is not translated to numerical applications
Python is popular for data science, but there it's not really used as Python but just as a user interface for NumPy, which is basically Matlab-in-a-library. Python numerical code thus features much of the same bad design as Matlab scripts: inscrutable everything-is-an-array signatures, confusion about row vectors vs. column vectors etc..
If all you want is a free and open source version of Matlab, check out Octave, which has nearly 1:1 compatibility with Matlab.
Con Too opinionated for a general-purpose programming language
While it's a good language to learn and use after you have mastered a couple of other less rigid programming languages, it's definitely not good for first-time learners. Both the language itself and its community have made it quite clear that you should do everything the "Pythonic way" to get the best results, that it feels more like an opinionated framework instead of a general-purpose programming language, which means if you are a first-time learner and getting too "tuned" to the "Pythonic way" it will be much harder for you to learn other less-opinionated languages compared to the other way around. Like any programming languages and/or frameworks, I'd recommend first-time learners to learn less opinionated ones first to open up your mind, then learn some of the more opinionated ones to increase productivity for specific fields of works.
After all, programming languages are just some utilities for the human mind to interface with the computers, and there are more suitable tools for different tasks, and you should master the "Pythonic way" (after you already have adequate experience in computer programming) instead of locking your mind too close to the "Pythonic way" as a first-time learner.
Con Multi-threading can introduce unwanted complexity
Although the principals of multi-threading in Python are good, the simplicity can be deceptive and multi-threaded applications are not always easy to create when multiple additional factors are accounted for. Multi-thread processes have to be explicitly created manually.
Con Mandatory indentation
While proper formatting is essential for any programmer, beginners often have trouble understanding the need and lack the discipline to do it. Add to that all those editors that randomly convert N spaces (usually 8) to tabs and you get an instant disaster.
More importantly, the semantic significance of leading whitespace and newlines forces a line-oriented syntax on a language that also requires more verbosity than strictly necessary, without some of the syntactic sugar convenience of languages like Ruby that can help keep line length down. As a result, it can get difficult at times to maximize readability of conceptually complex operations by breaking up those operations in relatively digestible chunks.
Con Moving large blocks of code in whitespace sensitive languages is scary
Quoting inventor of the V language: "V's syntax is cleaner with fewer rules. Lack of significant whitespace improves readability and maintainability of large code bases and makes generating code much easier. From my experience of working with a huge Python code base, moving large blocks of code in whitespace sensitive languages is scary."
Con Worst language design ever
Instead of sticking to a certain paradigm, the original writer of the language couldn't make up his mind, and took something from everywhere, but messing it up as he went by. This is possibly one of the worst balanced languages ever. People who pollute their mind with Python and think it's the next best thing after sliced bread, will have to un-learn a lot of garbage 'pythonesque' habits to actually learn how to program. It's not because the academic world uses it a lot, that it's a good language. It says something about the inability of the academic world to write decent code, actually.
Recommendations
Comments
Flagged Pros + Cons
Pro Easy syntax. Easy to learn, hard to master
On top of the wealth of tutorials and documentation, and the fact that it ships with a sizeable standard library, Python also ships with both an IDE (Integrated Development Environment: A graphical environment for editing running and debugging your code); as well as a text-based live interpreter. Both help users to get started trying out code immediately, and give users immediate feedback that aids learning.
Pro Easy to learn, More to Go
It is very easy to learn and it has community support and many categories available.