Python's great because it's easy to read, quick to get started with, and mostly intelligently designed. The two main types, lists and dictionaries, are part of the syntax, so instead of writing: "LinkedList<Integer> a = new LinkedList<Integer>(); a.add(1)" (Java), implementing your own or looking for a library (C), or whatever the hell it is in C... in python, it's just: "a = [1]". The same is true of dictionaries (HashTables in other languages), and many other basic operations (Reading / writing files, quickly saving objects, basic parallel programming...). The complexity is abstracted away, which makes nicely for quickly jumping in to making something that just works. This all is a debt, to some extent though. You'll learn about time complexity and why you might want you want to represent a "list" using one of many structures (Arrays, linked lists, doubly linked lists, skip lists, binary trees, ...). You'll learn about 32-bit integers and floating point approximation and realize that 1.0 isn't exactly equal to 1.000000000000000000000000000000001 and the latter might pop up when you weren't expecting it. You'll learn about the stack, memory allocation, and garbage collection and compilers and JIT compilers and realize python was never designed to be the speediest car on the block. If you stick with it long enough, all these debts will eventually need to be repaid. But in the meantime it's pretty nice as a way to get a hang of making simple things that works while you learn about the places where there be dragons. I came in the C++ -> C -> Java -> Python -> Lisp -> Assembly route, and while it's definitely helpful to know certain aspects of each, my opinion is that it's much more satisfying and easier to learn when you get a full program or two working before you start worrying about registers and caches and memory leaks.