Ask Slashdot: Will Python Become The Dominant Programming Language? 808
An anonymous reader shares their thoughts on language popuarity:
In the PYPL index, which is based on Google searches and is supposed to be forward looking, the trend is unmistakable. Python is rising fast and Java and others are declining. Combine this with the fact that Python is now the most widely taught language in the universities. In fields such as data science and machine learning, Python is already dominating. "Python where you can, C++ where you must" enterprises are following suit too, especially in data science but for everything else from web development to general purpose computing...
People who complain that you can't build large scale systems without a compiler likely over-rely on the latter and are slaves to IDEs. If you write good unit tests and enforce Test Driven Development, the compiler becomes un-necessary and gets in the way. You are forced to provide too much information to it (also known as boilerplate) and can't quickly refactor code, which is necessary for quick iterations.
The original submission ends with a question: "Is Python going to dominate in the future?" Slashdot readers should have some interesting opinions on this. So leave your own thoughts in the comments. Will Python become the dominant programming language?
People who complain that you can't build large scale systems without a compiler likely over-rely on the latter and are slaves to IDEs. If you write good unit tests and enforce Test Driven Development, the compiler becomes un-necessary and gets in the way. You are forced to provide too much information to it (also known as boilerplate) and can't quickly refactor code, which is necessary for quick iterations.
The original submission ends with a question: "Is Python going to dominate in the future?" Slashdot readers should have some interesting opinions on this. So leave your own thoughts in the comments. Will Python become the dominant programming language?
No (Score:4, Interesting)
No. [wikipedia.org]
Re:No (Score:5, Insightful)
I'm going to say this is a case where Betteridge does NOT rule. Yes, python is not perfect: it is as slow as molasses in execution speed, and has terrible multithreading capability. So what. These imperfections are completely outweighed by its superb readability/understandability/clarity, and the ease with which it can be learned.
No one is going to write an OS or an office suite all in python. But for a large swathe of programming tasks it is ideal. It is a lot more than just a scripting tool like, for example, perl.
Re:No (Score:5, Interesting)
Python is to programming today what Basic was to programming in the 80's. With similar advantages and disadvantages.
Re:No (Score:5, Funny)
I worked with a couple of different varieties of Business Basic between 1986 and 1993. Hewlett-Packard's version was particularly easy to work with.
Basic's two primary advantages in the business office were that
1. it was the first and best developed interpreted language. If your business was successful enough to have a couple of dedicated IT employees, it could afford a minicomputer and could make good use of compiled languages. But compiled languages suck on the PCs that were affordable to small businesses of that time period. The RAM was too tiny and limiting, hard drives were too small and slow for an efficient compiler environment. Some form of Basic was your only way forward.
2. With a good business Basic you could get the point of sales pizzabox PCs generating data for the back office accounting PC while your competitor down the street was still working on how to build a string variable in Pascal. You didn't worry about the other competitors who were trying to use C. Their development cycles were constantly broken as bigger businesses hired away their C programming staff.
Those were the wild and wooly days of cheapernet, LANtastic, and sneakernet, when we were all still buying huge 40 megabyte hard drives that had to be partitioned since DOS was limited to 32 MB. Back when "Windows was a 16-bit GUI running on an 8-bit operating system, written for a 4-bit processor, by a 2 bit company that can't stand 1 bit of competition".
Umm, some things haven't changed that much I guess. I just came across this definition of Windows 10:
Windows 10 (n): A 64-bit "upgrade" to a 32-bit patch for a 16-bit GUI shell running on an 8-bit operating system, written for a 4-bit processor by a 2 bit company that can't stand 1 bit of competition!
I of course use Linux. It's true that during the first decade of switching from Windows to Ubuntu I had a few miserable moments, but now it's all smooth sailing.
Re:No (Score:4, Insightful)
The point of my earlier post got lost in the reverie.
Python is nothing like the Basic of the 1980s. Basic's development was strongly shaped by the limitations of the hardware it was run on. Python's development is shaped by the self-imposed limitations of the minds of its developers. Two very different things.
Re: No (Score:5, Insightful)
The prime weakness of BASIC was goto.
I'd say that the prime weakness was the lack of product types and named objects such as functions and procedures, but that's just me...
Re: No (Score:5, Informative)
Re: No (Score:4, Informative)
Re: (Score:3)
I what era? BBC basic had functions in 1981. The excellent quick basic (basically QBasic but better) had them by 1985. When QBasic was finally released in 1991, every PC from then on had a basic not beholden to line numbers.
Re: No (Score:5, Informative)
There is nothing wrong with GOTO, just as there is nothing wrong with longjmp or branch or break to label, it all depends on how and when you use it.
Re: No (Score:5, Insightful)
The prime weakness of BASIC was goto. I suspect you're just trying to conflated the two because both are popular as teaching languages. Besides that, the two aren't comparable in any way.
Except that python is ALSO useful in the real world.
You think Basic wasn't useful in the real world? You must have been asleep for the latter part of the nineties.
Re: No (Score:4, Insightful)
The two are very comparable. They're both dynamically typed interpreted languages that are commonly used for writing more complex scripts, and some basic things that might be called "applications". They both provide ease of programming, relatively human readable syntax, and both suffer from significant performance issues relative to more on-the-metal solutions.
I'd say the comparison is spot on.
Re:No (Score:5, Insightful)
That, and the fact that python is horribly slow.
So was Java, once. Python has JIT-compiling these days, and thus, like Java, can potentially run faster than static-compiled programs.
What Python doesn't have is strong type enforcement. Unless you pre-compile the whole app, entire source files could be filled with monkey-typed gibberish and until the fateful day came that the defective modules were referenced (say, once a Leap Year), they'd be serpents in the grass.
Even pre-compiling won't help if there are insufficient cues to ensure that you won't be passing a dingus to a module that expects to use a wackdoodle.
Re: (Score:3)
What Python doesn't have is strong type enforcement.
Actually, it does - Python is a strongly typed language, what it isn't, is statically typed.
Re:No (Score:5, Insightful)
What Python doesn't have is strong type enforcement.
Actually, it does - Python is a strongly typed language, what it isn't, is statically typed.
Which means that you have no idea that you passed a dingus instead of a wackadoodle until some codepath that exercises the difference... and then you only find out at run-time, when your production system crashes. Sure, you can argue that this just means your automated tests were deficient, but that's always going to be the case, even when you apply great effort to get to 100% coverage. And you can argue that static typing isn't a perfect solution either, and I would never claim otherwise.
But the combination of TDD and static typing catches more defects than TDD alone, and static typing often enables errors to be caught at the time when they're easiest to fix, compilation. Judicious use of strong static typing enables us to write code that cannot compile unless it's correct. It's unfortunate that the very best popular-language example of this comes from the most powerful footgun language, C++, but that doesn't make it any less true. The C++ templating system, combined with static typing, makes it fairly easy to build infrastructure that allows the compiler to catch huge classes of likely errors. Haskell is an even better example of the tremendous error-correction power of strong and thorough static typing, though it's not likely ever to become popular.
Python is great for rapid prototyping and small scripts, but for large, complex systems I want both TDD and strong typing. At present, Java is probably the best language for such systems, when you consider availability of experienced staff, tooling and native features.
Re:No (Score:4, Informative)
Which means that you have no idea that you passed a dingus instead of a wackadoodle until some codepath that exercises the difference... and then you only find out at run-time, when your production system crashes. Sure, you can argue that this just means your automated tests were deficient, but that's always going to be the case, even when you apply great effort to get to 100% coverage. And you can argue that static typing isn't a perfect solution either, and I would never claim otherwise.
Hey, I never claimed it was good. I just corrected your assertion. Python *is* strongly typed. You absolutely can not pass a dingus instead of a wackadoodle. It will crash with a type error every time. It just will crash, instead of causing a compilation error, making the language strongly dynamically typed, not weakly typed as you asserted.
Re:No (Score:5, Informative)
That's my experience as well. I work in what is now called "data science" (though I've been doing the same stuff for decades, back when it might have been called 'computational physics' or 'statistics' or whatever).
I find that even for initial development past a a hundred or two lines, I now prefer Java. Why? A simple, but universal and ubiquitous answer: just looking up the damn order and meaning of the arguments of a method.
For instance, in python data manipulation, which uses almost universally the Pandas library, built on numpy library, you could need to pass a DataFrame, a Series, or the underlying numpy array, or even lower level a built-in Python list as arguments (and they can be converted back and forth). I now have to look at my code at the called method to see which it was supposed to take and in what position.
With a typical Java IDE, I'd get feedback on the spot (red line) if I used the wrong one and a space would likely bring up the appropriate conversion method or a type-matching object reference.
Python does have many great libraries (though java isn't too bad at all) but I do not at all find it easier or faster to develop once a project is worth setting up a Java devel pipeline. Don't forget the cost to write all those tests which are much more necessary in Python than Java (and yes I have many more run-time errors with Python than Java).
Kotlin is a face-lifted & flab-tucked Java, compatible with all JVM libraries, and Scala is an interesting and sophisticated language with the same.
Personally, Fortran, and I mean modern Fortran 95+ is heavily underrated in usefulness. It still has by far the best array and matrix handling, many excellent intrinsic parallel constructions, an very good and ergonomic syntax (it went from the worst to the best with F90) for its purpose, and of course speed speed speed.
If it had been invented by some well funded Silicon Valley startup with a hipster web designer and partnered with nVidia as their native development platform for CUDA GPUs, it would be the considered the new hotness.
And it solved the Python indentation vs C/Java brace wars correctly: newlines are significant, tabs and space indentation is not.
if (cond) then
statement
else if (cond2) then
statement
else
statement
endif
And there has been academic empirical research on syntax style and errors----that one won. (I think it is also what Ada did).
Re:No (Score:5, Interesting)
> Python has JIT-compiling these days, and thus, like Java, can potentially run faster than static-compiled programs.
Not really. CPython, which is what most people use, is just interpreted. Sure Pypy has a JIT, but it's not that useful because so many libraries don't work with it. And even Pypy is still pretty slow compared to Java. That's not because the authors are bad at writing compilers. It's because Python as a language is really badly suited to JIT compilation.
I'm a big fan of Python and I use it a lot, but I don't think it is or should be "the dominant language". It's good for certain things (single use scripts, chaining together libraries written in other langauges), but bad for others (anything that has to be fast, big code bases with lots of interacting parts). And long term, I think more modern languages like Swift and Kotlin "should" win out. They combine the benefits of Python (fast to write code) with the benefits of Java or C++ (faster execution, static typing).
Re:No (Score:5, Interesting)
Re:No (Score:4, Informative)
You missed FORTRAN. That's often faster than C. If your C is faster than your C++, you can fix it.
Re:No (Score:4, Insightful)
, the typing is quite strongly enforced. Me's thinks you don't know what you're talking about.
The typing is strongly enforced at runtime. We'd like to catch those obvious errors before it runs.
Re:No Python does not have actual threads (Score:4, Informative)
It's a wart, but it shouldn't stop you from getting your parallel computing done. You fire up the multiprocessing module, create as many processes as you think you need, and start crunching. I write most of my longer-running programs this way so that I can take advantage of multiple cores. But that's the beauty of Python - it's easy to avoid premature optimization. Write the script the easiest way first, profile it, and then go after the low-hanging fruit. Worst case, you end up with working code written entirely in C that's been thoroughly prototyped in Python. :)
Re: (Score:3, Interesting)
Version 3 should have come out and the community told that in 18 months version 2 was going to be mothballed. A clear timeline that would have focused minds and moved the language forwards.
Re:No (Score:5, Insightful)
The clusterfuck was not that some stuff broke in version 3 but that the community wasted an inordinate amount of effort and time supporting version 2 and version 3 in parallel, backporting some things, writing shims, maintaining & building two code bases.
Version 3 should have come out and the community told that in 18 months version 2 was going to be mothballed. A clear timeline that would have focused minds and moved the language forwards.
That would have killed both versions. You underestimate the utility of backwards compatibility. Entire sub-optimal technology stacks currently owe their existence to being backwards compatible. The optimal ones with no backwards compatibility didn't make it.
Re:No (Score:5, Insightful)
Entire sub-optimal technology stacks currently owe their existence to being backwards compatible.
The x86 platform being a perfect example of that.
Re: (Score:3)
Re: (Score:3)
Nope, C++ is not a superset of C at all. There's lots of subtle little things that are different in very important ways.
Some examples:
1) void* is not considered implicitly castable to any other pointer type. That means that you need to cast the output of malloc for example.
2) character literals have the type char, rather than int. That means their size is different, and hence programs behave differently.
3) C++ does not require to use the keyword 'struct' in front of structure names. This can subtly chan
Betteridge says: (Score:5, Insightful)
But in all seriousness, is this even for real or just clickbait? Why would we want just one programming language?
Re:Betteridge says: (Score:5, Funny)
To.... rule them all?
Re: (Score:3)
Re: (Score:3)
There is a difference between being the dominate language and the only one.
C has been the dominate language for decades and they were also many other popular languages as well. However dominate language status meant you better know this language because even if it it isn't your bread and butter you will run across it.
However today where hardware is cheap and fast and most software written is web based or cloud based means that many of the advantages of the older language are becoming moot. Now that being t
Re: (Score:3)
The real advantage of Web-Based and Cloud systems is really we are saved from the pain of deployment, not programming time. Deployment on PC's creates a ton of problems. Such as having to make sure the PC is functioning correctly when they are software errors, Dll and other sub systems that come in conflict, then trying to push updates on a wide scale.
In terms of Python vs. C. on System resources is often very minor. And for most applications they may run faster in Python, just because better versions of a
Re: Clickbait is clickbait (Score:5, Insightful)
My college taught had a course that went through every language to teach differences and focused on the fact that there were different tools for different tasks. The core classes however all used java to teach programming principles. I really felt it was the right approach. Learning different tools is necessary as a programmer, but even more important is the proper mindset, patterns, and approaches, regardless of our chosen language. A good programmer can pickup any language and work towards proficiency then mastery.
Re: Betteridge says: (Score:3)
Re: Betteridge says: (Score:5, Funny)
Languages like Lisp or Forth can sustain themselves because of their "all-level" nature. COBOL is is the obvious opposite.
When you mention Lisp, Forth and COBOL instead of Ruby, NodeJS, Haskell, etc. it's probably time to retire.
Re: Betteridge says: (Score:5, Funny)
Re: Betteridge says: (Score:4, Funny)
Re: Betteridge says: (Score:4, Funny)
Surely you mean LISP, not Lisp.
Yeth,
Re:Betteridge says: (Score:5, Funny)
Re: (Score:3)
Why would most of us need more than one programming language?
I find that Python and C combined answer 100% of my programming needs. While C alone can do literally anything at all, as the youngins are quick to point out "there's all those pointers". Some tasks need to be done quickly, other tasks need to run quickly.
Re: (Score:3)
Re: (Score:3)
It seems like we could derive most of the benefits by extending more languages to be able to use... one another. So that if we have a code component written in one language, we can more easily use it in another language. Obviously there are mechanisms for doing this already in many if not most languages, and even some systems. It is (or was?) a standard feature of the AS/400 platform (whatever series they call that now, or did they finally kill it?) that you could link together code from multiple languages
Re: (Score:3)
IBM changed the name to "i series" in 2000 and replaced it with the Power series in 2008. They still offer the software platform (originally OS/400) to run on Power servers, calling it "IBM i"..
Betteridge's law of headlines (Score:5, Funny)
No.
Can you just stop?
I will now end the discussion with the word Hitler.
Re: Betteridge's law of headlines (Score:5, Funny)
You Hillary supporters don't understand Godwin's law.
Re:Betteridge's law of headlines (Score:4, Informative)
I will now end the discussion with the word Hitler.
But he would have totally been on-board with the whole whitespace to delimit things thing ...
No, because meaningful whitespace (Score:5, Insightful)
Enough said. Whitespace which has meaning is just nasty.
Re: (Score:3)
I agree, and so do many therapists.
Re:No, because meaningful whitespace (Score:5, Insightful)
Iseeyourpointinfactifeelthatyoushouldpushforsuchaconcepttobemorewidelyaccepted.
Or, on the other hand, perhaps it is just as valid as any other parsing requirement? Language commands need some form of context, python just happens to choose that one.
The real issues with python are lack of performance scaling within the language (without using extension hacks), and the horrific threading problem. If those were solved then it would be much much much better.
Fwiw I have been developing commercial systems in python for over ten years.
Re:No, because meaningful whitespace (Score:5, Informative)
Re: No, because meaningful whitespace (Score:4, Insightful)
The last programming I know of, other than the joke ones, that had significant white space was Fortran 77. That was due to punch cards. It was due to punch cards that you also could not use lower case letters. F90 discarded white space significance in 1990. Thee years later Guido reinvents it. What next, is he going to force us to use UPPERCASE CHARACTERS?
Re: No, because meaningful whitespace (Score:5, Insightful)
Braces didn't win over whitespace because of C's readability.
Its not about readability: its about not having your code turned into line noise because you accidentally left "hard tabs" enabled in the editor, some idiot hit "reformat" or or mixed DOS and UNIX line endings, or tried to merge code written by some heretic who indented by 3 spaces instead of the 2 spaces carved in stone by His Noodley Appendage.
Like all punctuation, it is a bit of Belt and Braces (haha!) redundancy that removes any ambiguity and which you'll be grateful of should you ever need to reformat your code.
Maybe that's the thing - it appeals to the Sheldon Coopers of this world that code written by anybody who doesn't follow their particular One True Indentation Style (or nests blocks more than 1 deep when they should implement any sequence of more than two lines as a function) can be deemed officially unusable and can't be fixed at a stroke by hitting Escape-meta-whatever.
Re:No, because meaningful whitespace (Score:4, Funny)
Re: No, because meaningful whitespace (Score:3)
Re:No, because meaningful whitespace (Score:5, Insightful)
Agree. Code should not fail to run because of programmer errors that are not visible in the text editor - i.e. a stray tab instead of spaces.
It's also a nightmare copying code snippets, especially from the web - you might as well retype them by the time you've fixed the tab vs. space issues.
Re:No, because meaningful whitespace (Score:5, Insightful)
The difference between wrongly balanced braces and whitespace is that whitespace is invisible. You're literally trying to debug an invisible error - it's indented to the same level, but with a single tab instead of spaces.
Maybe I'm using the wrong editor, but I get annoyed at the number of times it seems to forget that I'm using spaces to indent and adds a tab, throwing off the code. I have to keep running the "convert tabs to spaces" function on it before I save.
OK, I'm an occasional Python programmer, so maybe it annoys me more than someone working with it all day every day. It's just a mental gear shift and annoyance that I could do without compared with every other language I currently use. There's a lot I like about Python, but the whitespace thing is a pain in the arse.
Re: (Score:3)
You're using the wrong editor. Probably an IDE? IDEs are evil.
Personally, I find braces the bad option. Whitespace IS visible, and the interpreter will happily point out where you (or your editor) screwed up. Braces are hard to keep track of, particularly when heavily nested. Of course, if you use whitespace appropriately the braces are much easier to track....
Re:No, because meaningful whitespace (Score:5, Interesting)
You mention "easier readability" but I wonder if Python gets any love among blind developers? I wouldn't want to be counting spaces in my head to determine where I'm at (you'd probably even have to turn on the reading-aloud of spaces, which would just drive me nuts!)
Re: (Score:3)
It's because the indentation happens automatically based on logical structure, not the other way around.
Re: (Score:3)
Which are definitely a problem of the person who wrote them, not with the programming language. And it can easily be fixed by teaching said person to write human-legible code, which includes much more than just proper placement of brackets.
If you have programmers working illegible code, then Python won't save you, because there's about a few hundred things that make code illegible that work just fine in Python.
Re: (Score:3)
Correct indentation, in normal languages, is helpful for the human reader, and is fixable by the computer. In Python, it is mandatory for both, which means the computer can never help. Creating a language that prevents automation, to be used on a tool for automation, seems like sadism to me.
Re:No, because meaningful whitespace (Score:5, Interesting)
Wow, great way to prove the point that C is superior due to the requirement of proper scoping delimiters.
If I have mismatched braces, I can EASILY track that down. I can also de-obfuscate the code above in almost any modern code editor into a readable format.
Python? No, not so much. Not at all, in fact.
Re:No, because meaningful whitespace (Score:5, Insightful)
So:
#include int main(void){int i;for(i=1; i<=100; i++){if(((i%3)||(i%5))== 0) printf("number= %d FizzBuzz\n", i);else if((i%3)==0) printf("number= %d Fizz\n", i);else if((i%5)==0) printf("number= %d Buzz\n", i);else printf("number= %d\n",i);} return 0;}
Actually, that IS superior to using whitespace for indentation, because I ran it through indent on the default settings and got this. [pastebin.com].
If that line of code was python, no tool on earth will figure out the correct formatting. You provide a compelling reason for whitespace to be independent of meaning in the source code.
No (Score:5, Funny)
Re:No (Score:4, Funny)
There are no stupid questions, only stupid people.
eh (Score:3)
Re: (Score:3)
I can easily see it supplanting Java in many situations. My experience is that usually python solutions end up faster and easier to work with than Java ones. Mostly because of the libraries. It is easy to make a cross platform python program that uses native gui libraries, image libraries, numerical libraries etc.
When I have looked at things like simple numerics in Java it gets killed by C++ and by Python since Python programs will normally rely on scipy which will in turn rely in BLAS and LAPACK. From ever
Lol (Score:5, Interesting)
Is that a parody?
"People who complain that you can't build large scale systems without a compiler likely over-rely on the latter and are slaves to IDEs"
Sure, who needs good tools when you can just do the work of the compiler yourself?
I'm pretty sure - the day will come where even the author will be bored of checking datatypes and constraints in unit tests that have to cover all possible runtime paths. For me the future will be a language with a really strong type system, that can be verified by the machine as much as possible. You can't have systems crash after 4 days of number crunching because it finally reached that stupid mistake in one path that was forgotten in the unit tests.
We have computers to do that work for us, not the other way round.
Oh and of course we'll use machine learning as much as possible to automate the automating.
Re:Lol (Score:5, Insightful)
Most of my time is spent working on an app with C++ at the low levels, Python at the high levels, and Perl/JS for web stuff. I am one of two developers who primarily does C++, we have two who primarily do Python, and one who primarily does the web bits. The Python code unsurprisingly does a lot of database operations and IPC, so many of its endpoint types are strings. I am always shocked how many of the Python-domain commits are only to add or remove type conversions that testing missed. That problem is almost entirely absent in C++, with its strong static typing, and in Perl and JS, with their mostly "DWIM" operators and types.
I do not bet on Python being much more than a glue language unless it gets strong compile-type type checking. That may be enough to make it a "dominant" language, because people ship more and more good libraries that can be simply picked up and used by higher-level code, but it will probably never displace other languages without stronger compile-time checks.
Re: (Score:3)
Global Interpreter Lock (Score:3)
Re: (Score:3)
It's still a thing and likely will always be a thing. That said, the multiprocessing [python.org] module makes writing code that can spin up as many processes as you want and allow them all to communicate is relatively painless.
Re: (Score:3)
Maybe true but I just say that I write my fair share of Python scripts using multiprocessing and it works for me. That said, if somebody feels like the GIL is truly getting in the way, there is always IronPython and Jython, neither of which have this restriction. I also believe the PyPy team is working feverishly on getting rid of the GIL in their implementation which among other things is much faster than regular Python thanks to just in time compilation. I've used it for a few things and heartily recommen
Yes and for bad reasons (Score:5, Interesting)
The same reason we had languages such as Basic and Pascal as languages. Namely universities using them in intro classes because they are "easy". So people with no concept of the scale or complexity of commercial software think it is the be all and end all of programming. So you get MBAs mandating Python on their projects even though it is the wrong tool for the job.
Re:Yes and for bad reasons (Score:4, Insightful)
I dunno, I think Pascal was awesome and I would always love to use it. I see absolutely no downside to Pascal.
Depends on the future (Score:3)
Python is easy to pick up and can do anything (on high level) that C can. On the other side, its drawbacks include being an interpreted language, meaning both that whoever wants to run Python scripts has to have the relevant interpreter on his system, which is arguably easier and more likely to work in Linux than Windows and that it will run slower and need more resources than a comparable C program.
So whether Python will become the dominant language will mostly depend on
1) Whether enough people with little to no programming experience feel the urge to create code.
2) Whether enough people can be bothered to install the runtime to run said code.
3) Whether we continue to have no problem wasting resources on inefficient code or whether we move towards more virtualization/containerization where the individual VMs have to do with very little CPU time.
Ruby (Score:3, Insightful)
I should hope not. Ruby is much nicer.
Re:Ruby (Score:5, Informative)
Ruby lover here. I can code Ruby while I sleep, but I felt a bit left out because there are so many awesome Python projects. .... that's about it.
In comparison, there's Rails as awesome Ruby project with a lot of momentum, and
With Ruby knowledge, it's actually pretty easy to grasp Python. There are a few gotchas and the syntax feels a bit boring compared to Ruby, but it's also easier to read other people's code because it's usually more explicit and a bit less dynamic than Ruby.
I still love Ruby, but it's good to be able to write a few lines of Python and release the power of Numpy/Pandas/Sympy/Matplotlib/NetworkX/... It took me about 2 weeks to learn enough Python to use those libraries, and I still learn new stuff every day.
Some parts of Python's syntax are really nice, e.g. list comprehension :
>>> [x**2 for x in range(10) if x % 2 == 1]
[1, 9, 25, 49, 81]
It's completely different than all the Enumerable methods in Ruby, but it's very powerful and quite easy to read after a while.
Python is great for command and control (Score:4, Interesting)
There are lots of good libraries for python that hand off the heavy lifting to c,c++ and fortran. Python works well for gluing these things together.
Python on its own though is quite slow and if you find yourself needing to chain together calls between low level libraries where each call is quite fast the cost of gluing them together can be extreme. However the parts of the code that are seriously CPU bound tend to be fairly small while all the rest of the stuff build no top takes up most of the time to write.
I would say for most software you could do a python wrapper around a C++ core and end up with more maintainable and faster code. In my case I use a python optimization framework around a c++ based simulator. Writing all the optimization code in C++ would be a pain in the neck and provide no real speedup since the current code is not speed bound in the python part anyways. I see the same things in cluster control software when the code that distributes my jobs to the nodes and then gathers the data back and then makes the decisions on the next set of jobs to run accounts for 1% of the total runtime.
I think this will result in better software overall with Python as the core language wrapping high speed libraries. In many cases those libraries already exist, where they don't exist you have to write them.
Re: (Score:3)
I don't want to write a genetic algorithm with automatic switchover to various gradient descent methods based on local properties in any kind of shell script. The python version of that code takes up 1% of the runtime for me and serves as a command and control system for my c++ simulator. The same is true for plotting the results afterwards and evaluating the quality of the results.
Almost all the command and control I am talking about using python for is not something I would EVER consider doing in shell s
LOL (Score:3)
No, dummy, the compiler is a large set of unit tests for you, ready to run, so you don't have to write them yourself. Why wouldn't you use a compiler so you can avoid runtime exceptions/errors? Why would you choose deliberately to postpone that to be checked at runtime or worse: that you have to write checks for all those cases yourself (and you'll miss a lot of them)
The compiler isn't something used by 'slaves of an IDE', but by developers who know a compiler will save them from writing tests for situations already checked by the compiler. Oh, and it generates fast code ahead of time too, so your users don't have to wait for an interpreter to come up with fast code.
Perl... (Score:3)
Re:Perl... (Score:4, Funny)
I find it disturbing that people would want Python to beat Perl.
Women have enough problems with domestic violence. We shouldn't be supporting hitting a woman with a snake.
No, because it's too slow (Score:3)
I admire Python for its toolchain and libraries but it's just way too slow. Even Racket is faster and it's probably still too slow for my current needs. ( I use it for making a prototype first.) By 'slow' I refer to lack of snappiness and long startup times, these bottlenecks cannot be eliminated by writing support libraries in C. The actual algorithms I use don't need much speed, but the user interface and support functions like searching, directory scanning etc. need to be fast. You can fake speed by using a lot of threading in the user interface, but that's complicated, error-prone, and the end result still feels somewhat sluggish.
Ok, I'll bite... (Score:5, Insightful)
Sidestepping interminable arguments about the merits of language A vs language B, and ignoring the flat-out ignorant assertions in the 'anonymous reader's thoughts' about IDEs and compilers, the question is predicated on a culpably ignorant interpretation of the very data they cite.
So here's how PYPL works:
The PYPL PopularitY of Programming Language Index is created by analyzing how often language tutorials are searched on Google.
so... what the data actually show is that relatively more folks want to learn Python these days than C or Java or Haskell (or whatever) — which is scarcely surprising since more non-specialist programmers are learning to code than ever before, and Python is easy to learn and great to teach with for that demographic — what the data definitely do NOT show is that Python is replacing C or Java or Haskell (or whatever) in the production domains in which those languages shine. And it never will.
I don't think so (Score:5, Interesting)
Don't get me wrong, I like Python and have done quite a few things with it, including performance-critical Python classes in C. But I think writing good Python code is something that requires a lot of experience, including with other languages. Python is a language that does not stand in your way to an extreme degree. That means in many cases you have to do things yourself that other languages do for you, for example type checks (yes, they are needed sometimes) and decisions when doing inheritance. Do them wrong or not do them at all and you end up with an unmaintainable mess. There is also quite a bit of stuff you have to test at run-time that compiled languages probably find at compile-time. That requires good testing and a design-by-contract approach helps a lot.
One the other hand, for actual experienced experts, glue-code and "business logic" does not get much better than what Python offers, and embedding C-code is easy once you have understood the idea. It definitely has a long-term future.
It Depends (Score:3)
Interestingly, selecting countries on PYPL shows that Python is #1 in the US, France and UK. India and Germany have Java #1.
Not that it's an indication of anything, really. Right tool for the right job. The projects being worked on in Java probably don't lend themselves well to Python and vice versa.
Dominant? (Score:3)
Should disallow mixing tabs/spaces (Score:5, Interesting)
If Python just disallowed mixing of tabs / spaces in files, it would already be a lot better. Just flag an error as soon as indentations are detected that are not the same style.
To quote a legend... (Score:3, Interesting)
Overconfident bullshit (Score:5, Insightful)
People who complain that you can't build large scale systems without a compiler likely over-rely on the latter and are slaves to IDEs. If you write good unit tests and enforce Test Driven Development, the compiler becomes un-necessary and gets in the way.
Says the guy that never worked on a project with 100+ classes and 100k+ lines of code...
Don't get me wrong, I love python and it's become my main programming language. But hey, I'm a researcher and everything I code doesn't have to do more than producing a few results to put in a paper and then be thrown away and never looked at again.
You know why Java is the top language now? It's not only because it's so easy that many professional applications have been written 15 years ago by dumb interns, but also because it's so robust that these applications can still be maintained by even dumber interns today. You're never going to get that with python (or js, or ruby, or whatever new hype thing you believe is the new messiah).
Javascript? (Score:3)
I thought Javascript was going to rule the world? Dammit...
not without major changes (Score:4, Interesting)
Python's widespread adoption is not due to some magic programming language sauce but network effects. In a sense, Python has taken on a niche similar to Visual Basic. But that's also why Python has such a hard time evolving: you can't improve it much without breaking a lot of its libraries.
Python's biggest limitations, the way it represents objects and limited concurrency, actually already have been addressed in a number of Python re-implementations, but people aren't using those because many extensions and libraries don't quite run in those environments.
So, Python won't become "the" dominant programming language, it will just remain one of of a number of popular programming languages.
If there will be a single dominant programming language eventually, it will probably have to look more like Swif: near native speed, garbage collection, some systems programming features, and yet interactive execution via on-the-fly LLVM compilation.
Re: (Score:3, Funny)
It fills the "smug hipster twat who can't grok lisp" niche perfectly.
Re:What it is used for? (Score:5, Informative)
Java is mainly large enterprise back end systems, and some android, and quite a lot of embedded stuff (nominally what it was invented for), and, worryingly, quite a lot of client side GUI stuff.
C++ is used for legacy systems and where you need speed.
C is used where you need speed, have simple programs and memory constraints, and old fashioned unix software.
C# is for windows programming and .net
Javascript is for browser programming and Node, and some general scripting, where someone has used it as their system's internal scripting language (see also lua)
PHP is used for relatively simple web stuff, because it's easy and works and has wide library support
Python is used for what PHP is by better developers, and has brilliant maths libraries so is increasingly used for anything maths related where esoteric things like matlab and R and F# are unhelpfully niche.
Haskell is used for academic curiosity, and some maths stuff.
Perl is dying out, but is still used for unix automation a fair bit.
modules (Score:3)
So, you can see the attraction of Python for, say a scientist - there are modules for many specialised, mathematical areas, all of which are very difficult to code from scratch, and although there are similar packages for C, C++ and FORTRAN, they are less easy to just pick up and use.
Note that often, the Python modules *are bindings* to the C/C++ & FORTRAN packages.
Python is literally the glue code layer that makes these modules "easy to just pick up".
Re:Dominant where? (Score:5, Insightful)
And is not an important project, so that you will never do branches or merges.
Because merges + significant whitespace = unholy mess you will spend ages debugging after each merge.
Re: (Score:3)
Non-issue. It's no different than agreeing on a nomenclature before starting any other software collaboration. If you don't, you'll get a big mess, regardless of language.
Incorrect - in non-python language I can run an indent program, turning the big mess into a non-existent one. In python your big mess has to be manually fixed by a human.
Re: (Score:3)
But are there Kanji (to use the Japanese term) based programming languages?
My experience working with Japanese coders is that no major language supports arbitrary glyphs. If they did, it would probably be like the early specifications for perl6 with the "Yen" operator and whatnot. The language doesn't construct like Arabic languages.
They just program in ascii with variable names and functions which they sound out to their words. But they can put Kanji or Katakana into comments above lines, and they generally over-comment.
Re: (Score:3)
But I speak EXCLUSIVELY in "Personal Home Page"
Don't you want "Personal Home Page" for your business?
Crap I forgot <?php during some random error handling case and now it's printing all my source code....
die('A lonely, sad, death.');