Python Creator Guido van Rossum Leaves Google For Dropbox
New submitter mrvan writes "Guido van Rossum, the proclaimed Python Benevolent Dictator For Life, has left Google to work for Dropbox. In their announcement, Dropbox says they relied heavily on Python from the beginning, citing a mix of simplicity, flexibility, and elegance, and are excited to have GvR on the team. While this is, without a doubt, good news for Dropbox, the big question is what this will mean for Python (and for Google)."
I've always like skydrive a lot more than dropbox due to it's more lax restrictions. Nothing to do with the programming language whatsoever.
It means they need to pay more or offer better perks to keep their employees.
Can Dropbox really pay more than Google can for Guido?
What's more elegant and nicer in Python than PHP?
Python isn't a fractal of bad design.
I'm a big python fan. It encourages elegant and readable code and has a good library and community. The lack of static typing hurts a bit in now having good static checking ("compiler errors") and IDE autocomplete, but it also means that you can scrap tehe 90% of code that java forces you to write to declare and then work around interfaces and abstraction layers :-)
I haven't written PHP the last 10 years, so I can't really compare to state of the art, but I felt that PHP encourages sloppy programming and lack of separation of concerns by sticking a lot of business logic in the presentation layer. But that be more about the language being used by a lot of people without formal programming training than about the language itself.
What do you mean? Skydrive has a 2GB limit on filesize (just found this out the other day, when trying to store a 3 GB encrypted backup there). On Dropbox the only limit is your available storage. (I have 10 GB:) ) Skydrive has no differential sync. Change 1 byte in a 2GB file, it uploads the whole thing again. Dropbox breaks down the files in (I think) 4 MB pieces, uploads only what changed. I'm in no way affiliated with Dropbox, I just think it's more flexible. It's true that Skydrive offers more free storage space though.
.sig: No such file or directory
And what did he use to do at Google? Did he work on Python only in his spare time or did Google pay him to hack on it?
Why? Maybe he just wanted a change, and wasn't especially concerned about the pay - people do that you know. Sometimes job satisfaction is what does it. Sometimes a fresh set of challenges. Money is severely over-rated as a driver.
The fact that the language is predictable and not error-prone out the ass, for one.
PHP is exceptions wrapped in a language.
I moved away from that crap the instant I found out how buggy that crapware is.
A language developed by people who didn't even understand the difference between == and === has lost all hope of being taken seriously.
And the fact that they even ARGUED against it is even more annoying.
I know it gets linked ALL THE TIME in anything relating to languages, but it really needs to be read by every single person ever.
PHP seriously needs to die already. It CANNOT be fixed.
To use the tools in a box example, PHP is like hammering a nail with a sandwich. It is literally pointless and fruitless to even bother, because all you will end up with is pain, anger and annoyance in the end, and maybe literal bleeding hands after you smash either your keyboard, wall or monitor in frustration at how a language can somehow be worse than Visual Basic.
PHP - a fractal of bad design
Quite right. And don't forget about LAN sync. Dropbox clearly is technically more advanced than Skydrive. The only handicap I see with Dropbox is the lack of some sort of permission system when you share folders. Or at least a read-only setting.
I've always loved PHP - it gives flexibity and I just love coding using it. But I know many people love Python too. What's more elegant and nicer in Python than PHP?
I've always like skydrive a lot more than dropbox due to it's more lax restrictions. Nothing to do with the programming language whatsoever.
I too prefer to skydive rather than program in PHP. Personal preference, I suppose...
If you want news from today, you have to come back tomorrow.
GvR is not a dictator. This move should not matter to someone who wants to leave their creation run free.
Well... I'm comfortable with creating archive parts, so I don't really pay attention to file size limits. Maybe lax restrictions wasn't the best description, but usability and integration with windows is great. It's the first desktop "drive" folder that I've used that works and I've been trying with them ever since google came out and somebody wrote a parts app to upload files to the 2gb they gave you back then. I also like the interface a lot more (yaya windows tiles), dropbox looks very business oriented and I could use a little less of that. Another perk is that it's my windows live account, which is one less account for me to remember. P.S. It's not supported on Linux to the best of my knowledge, limiting options, google drive is going to be an interesting one to see.
Please, God, cannot somebody please take that stupid abomination of a language Python out in back and shoot it in the head until dead. I have never used a less friendly piece of Monkey Pus than the "language" Python.
Best I'm aware, Python was important for Google long before Guido got hired by Google. He was the cherry on the pie, if anything.
As such, it means absolutely nothing for Google, bar that they lost someone who they may have wanted to keep in-house.
and break every script they have
When I first saw the original Python's closure, I didn't know whether to laugh or cry. When I learned about the original Python's garbage collector, I just shook my head. I haven't looked at Python since.
Please, God, cannot somebody please take that stupid abomination of a language Python out in back and shoot it in the head until dead. I have never used a less friendly piece of Monkey Pus than the "language" Python.
A fan og PHP, are you? It shows!
If you want news from today, you have to come back tomorrow.
I've professionally programmed in both Python and PHP. There's no reasonable competition - Python wins hands down.
A few of the advantages of Python over PHP:
filtered = [x for x in unfiltered where x.foo=="bar"]
In PHP the same thing looks like:
$filtered = array_filter($unfiltered, function($x) { return $x->foo == "bar"; });
I am officially gone from
Python has been conceived as a general purpose programming language. PHP is web markup templating language. You can still do other programming in it, but it just doesn't suits well.
Is that with or without a parachute? Because falling out of an airplane to a grizzy death doesn't sound so bad after you've been programming PHP all day.
There's no -1 for "I don't get it."
Be positive. We can let python live.
But more importantly, what should we use instead?
I work for Google.
Let me just say that you're full of shit.
First of all, python is just as much in use now as before. Secondly, it will continue to be so.
Secondly - fired? Nope.
> The fact that the language is predictable and not error-prone out the ass, for one.
That's a matter of understanding, not design flaws. If you would kindly put forth what you think "design" should provide, your assertions might seem credible as they could be compared to implementation.
> I know it gets linked ALL THE TIME in anything relating to languages, but it really needs to be read by every single person ever.
Opinions don't matter. There's no evidence that any of the criticisms made are poor design choices when you can't quantify what's important. Saying "this is done better a different way" is not an argument. It's more of the same nonsense that has been posted on the web since the 90's where language usage judgements are stacked onto others' opinions and are presented as facts. Grow up.
> It CANNOT be fixed.
You're using hyperbole again. Making nonsensical statements is typical of anti-php rhetoric. Most telling is the rest of the post which is more rhetoric as you've got nothing to offer but pointing to a blog post that you think is important because you're too weak minded to understand the implications of your own views so you have latched on to someone else who you think is smarter and more eloquent.
Dropbox clearly is technically more advanced than Skydrive.
I think I would agree that Dropbox is more technically advanced; however, I would say that Skydrive (for good or ill) is also more ingrained into the Microsoft technology stack. Office 2013, SharePoint 2013, and (I think) Windows 8 have the ability to use it. In Office I think it is the default now which will probably trip a few people when they go to browse for their file and mistakenly saved it on Skydrive instead of their local box.
SSC
Is that with or without a parachute? Because falling out of an airplane to a grizzy death doesn't sound so bad after you've been programming PHP all day.
You think PHP is bad? Why in my day we used COM with VB and C++, uphill both ways.
But just try telling that to kids these days. They'll never believe you.
XML is a known as a key material required to create SMD: Software of Mass Destruction
In my case, was that Google are moving away from Python. Also see the last answer here:-
http://stackoverflow.com/questions/2560310/heavy-usage-of-python-at-google
Perhaps there are some anonymous Googlers out there that are brave enough to comment?
Are Google's Python projects becoming Go projects?
Dude, I disagree with this statement. Why? Because the choice of where to place business logic lies entirely on the coder. It isn't an attribute you'll find tied to a system just because it employs a particular a language, in this case PHP as you say. The same can be said about Microsoft's Visual Basic as used on its JET DB engine found in MS Access.
There could be more to this story, given the interest from the Linux community.
There is an on-going discussion, or rather expression of frustration with Google, going on in the Google groups regarding Google Drive and the lack of support for Linux See here: https://productforums.google.com/forum/#!topic/drive/j_SmC6bMsEo/discussion%5B276-300%5D
Could that be the reason behind the departure?
$filtered = array_filter($unfiltered, function($x) { return $x->foo == "bar"; });
Which looks a little like how Python would look without list comprehensions:
The worse part is that lambdas, such as your function($x) { return $x->foo == "bar"; }, are a fairly recent addition to PHP (5.3 series IIRC). This wouldn't be so bad, seeing as PHP 5.3 is three years old, except that shared web hosts have tended not to make it easy to run multiple PHP versions side by side for different applications or even to migrate a whole site to a newer version of PHP.
So... file sharing companies like dropbox are getting litigated out of business and shut down by the feds left and right... and yes, I see pirated shit on dropbox accounts all the time... but Google is poised to be one of the most powerful companies and history... that just seems foolish. Of course, he might know something we don't...
Google replacing Python with Go in large parts of the company. Do you have documentation for that? (I am really interested, because that would be an interesting event).
But I don't think Python ever had an important job at Google. I can't even name any of their important projects which are done in Python.
We are all Anonymous Coward right?
In defense of PHP, Python and Ruby suck in their own ways too -- plain and simple. Maybe not as much [... See] "Python: teaching kids and biting bits don't mix" by yosefk
If the hex() change and the division operator are the only "warts" in Python, then it at least has PHP beat. One of the warts that yosefk complains about (int / int = float) is there just as much in PHP, and unlike Python, PHP doesn't even have a floor division operator.
As to the example motivating that article: I deal with binary files in Python, such as tools to manipulate NES programs and data, and the first thing I do 90 percent of the time when loading a binary file is put it in an array.array('B').
SkyDrive, like SharePoint is just another attempt at Microsoft lock-in. Personally I prefer it when people create suites of products that I *want* to use, not that I *have* to use. The Apple ecosystem is the same.
If you would kindly put forth what you think "design" should provide
Consistent naming conventions for functions in the standard library, for one thing. Some way to protect names of functions defined in a program from colliding with names of functions added to newer versions of the language, for another.
Google replacing Python with Go in large parts of the company. Do you have documentation for that?
I've seen Anonymous Coward postings about this here on Slashdot, but nothing else.
Everything I have ever heard about Python at Google falls into two categories: server management stuff, and YouTube. And what I have heard is that the server management stuff is perpetually locked into an outdated version of Python.
The thing is, Google doesn't spend a lot of time advertising what they are doing internally. They like their secrecy, and there really is no up-side to saying "we are doing less work in Language X and more work in Language Y". All you do is stir up the fanboys.
Since Google Go is a somewhat similar language to Python, except that it has better performance and doesn't rely on white space, it is plausible that Go is gaining acceptance within Google. But I have no inside knowledge.
The major one is Youtube which was unfortunately littered with Python. That is being actively upgraded to Go.
There isn't anyone hunting down every line of Python in the company, but using Python in any new project is dead. Standing up in a meeting suggesting Python as a solution is right down there with Perl or Mono or Visual Basic.
I realize it's only speculation, but that's all we get with Google products. One minute it's a product, the next it's EOL. Or perhaps App Engine stays but the Python support gets phased out in favor of Java. Google products do sometimes lose features over time - the thread on why Google Docs took away table cell merging is a funny read if you get software freedom.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
One word for all you whiny kids today: MFC.
Jesus H. I'd rather pull out my teeth. With pliers.
That's right, teach the controversy, brother!
There is no evidence that a sane and consistent language design is better for developers.
In fact, some people prefer to get different results on 32 and 64-bits architectures, to silently ignore extra arguments to a function, and that the database bindings break depending on locale.
Constantly having to second-guess what syntax the parser will recognize (Will it take foo()[$bar]? Or foo()()? ) is just a bonus. Don't let them come here with their "basic parsing has been a solved problem for over 30 years" opinions.
For the language, not much, as no matter where Guido ends up python is still his baby. And even if he got hit by a bus or something the language will continue on without him.
What does it mean to Guido? Well only he can answer that but i would imagine he was ready for a change in scenery. I dont think he is in it for the money anymore and doesn't have to work unless he wants to.
What does it mean to Google, not much there either, they used it before he got there, and im sure will use it after hes gone.
---- Booth was a patriot ----
I've likED...ITS...but who the fuck cares any more about the spelling, right?
There is a reason that Java forces you to declare and working within the types - that is because they matter.
Protip: you don't actually need to tell that to someone who's complaining about the lack of static typing in any particular language....
dropbox on windows = a magic folder that just works. not much to be business oriented about it.
only problem with it is that it's just not that much free unless you whore ref codes etc. being able to make web links is certainly a plus.
the only complaint I have is that shared folders(with others, like a company group) count against your drive space. that sucks bigtime.
world was created 5 seconds before this post as it is.
ALL old google stuff was done in python. ...
You seem pretty bad informed
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Um, just save your office files in the dropbox folder...
Dropbox, your unencrypted and finite place to store data when you're not near your cell phone that has 16 gigs of flash drive.
Basically the only part of Youtube that has any Python is the templating. Everything else on the backend is done with Java and C/C++.
Dunno, after SWIG, those looked kinda nice.
May Peace Prevail On Earth
Guido wasn't 'here's a box for you crap, you have five minutes before security escorts you out the door" fired. It was closer to 'we don't see a role for you here, quit now and save us both the hassle of having to let you go' type fired.
He has really accomplished nothing since he was hired. And needless to say with Google actively replacing Python in the company with Go, he was acting like a petulant ass.
Google is a strange place to work. It's entirely possible that, by the performance metrics they typically use, it was a mutual parting of the ways; I don't know, and unless you are on the performance review committee for his engineering subgroup, neither do you (and if you are, you should be keeping your mouth shut, instead of posting here, even as an AC). But assuming your theory is correct, don't mistake an organizational inability to effectively utilize his talents with him not having them.
That said, your second paragraph is basically BS. Go never really caught on because it did not have a cross-platform library; the reason was that it insisted on directly trapping its system calls itself, which is great, if you aren't an engineer with a MacBook Pro trying to do work at home, and want the same system call semantics for e.g. "kill" or "sigaction". Hint: at the top of Libc on Mac OS, kill takes 2 parameters; at the user/kernel boundary, it takes 3 so the kernel knows whether it should use traditional Mac OS signal semantics, or use POSIX 1003.1-2001 semantics (same as Linux). Until they drop Mac OS X for Linux (probably still running on Apple hardware), or the Go folks fix their language binding to use LibSystem (Libc) instead of trapping their own system calls, I don't see that changing in favor of Go adoption any time soon.
While Go is an "official language", along with C/C++ there are two others, one of which is Python, and not a lot of work was actually being done in Go. My last major project at Google was exclusively Python, and all of the testing infrastructure for Chrome OS is written in Python. One of the first classes you are offered as part of new employee orientation, apart from "How to use Perforce" is "Python Programming".
Personally, I could see him leaving as being part of the generally publicly announced Larry Page effort to focus Google on working on fewer total projects, and on hiring for specific roles, instead of just hiring everyone who met the right level of smart, and figuring something for them to do afterwards. But frankly, I do not see increased focus fixing what Larry's attempting to fix with it. I suspect this is more likely than your theory.
Either way, I expect his contributions at Dropbox will be valuable to them, and wish him luck there.
Constantly having to second-guess what syntax the parser will recognize (Will it take foo()[$bar]? Or foo()()? ) is just a bonus. Don't let them come here with their "basic parsing has been a solved problem for over 30 years" opinions.
The best part is that they've started to fix that... using a Chinese water torture process of allowing a couple of new constructs with each new 5.x release. Your favourite pet peeve isn't being fixed in the current cycle? No problem, just wait another year, and if you've been a very good girl and you pray to Santa reeeeeaaaaall hard, you might just get that one step closer to where Lisp was in the 19 fucking 50s.
You know, I've gotten used to anti-language screeds being the frustration of the ignorant and lazy compounded with childish exaggerations and intemperance even I boggle at.
But .... wow. Just wow. NULL < -1 && NULL == 0? "0133" == "133" because of implicit string-to-numeric conversions, but 0133 != 133? And the ? : implementation just leaves those examples in the dust.
As always, all IMO. Insert "I think" everywhere grammatically possible.
Since Google Go is a somewhat similar language to Python
Why do people keep saying that? They're nothing alike!
I can't imagine what kind of language you'd be coming from to get that impression.
Python list comprehension method:
filtered = [x for x in unfiltered where x.foo=="bar"]
Or you could just use Python's filter() which is conceptually the same as PHP's version:
filtered = filter(lambda x: x.foo == 'bar', unfiltered)
Python has better syntax than PHP, but this is one of the weaker examples.
Google's search engine was originally in Python, but the company has since moved on to use Java on the front end, C++ on the back end, and Python has been relegated to glue code.
On the other hand, Dropbox has been using Python for its entire stack. I believe they made a few performance related contributions to CPython as well.
Guido is a great engineer (besides being a language designer), and still writes a lot of code. He probably would get more satisfaction working at a growing company where Python is a first class citizen rather than at Google.
Is that with or without a parachute? Because falling out of an airplane to a grizzy death doesn't sound so bad after you've been programming PHP all day.
I take it that you are not a C# programmer? Or maybe you a a Java guy who lost your mind years ago?
If you want news from today, you have to come back tomorrow.
http://xkcd.com/353/
... are leaving Google shortly after getting hired? Could it be that they don't want to get involved with in IP theft??
There is a global lock in the Python interpreter that cannot be easily avoided (http://wiki.python.org/moin/GlobalInterpreterLock). This issue limits the ability to take advantage of parallel computation within the interpreter.
Google has probably long ago realized the limits of the language and has been replacing the technology with GO.
Why is this downvoted? If it's plain wrong, a reply clarifying that would have been better than a downvote!
Python has its own set of problems.... The most recent that I had to contend with is the lack of any decent SOAP library and a lack of a decent postgresql library. It seems to have an abundance of half baked libraries/extensions, and the python 3 fiasco has just made it even worse.
Python is a great language in itself, but getting any real work done with it is an exercise in reinventing the wheel.
Also the advantage of Dropbox is you can share with ANYONE, whether you want to or not.
Perhaps this guy will make it less of a joke. Last I heard you still couldn't revoke Dropbox access from someone you've given it to in the past, even though it gives you the illusion of doing so with a password change page. While that's not as bad as the legendary, but fixed, fuckups in the past of letting people get your stuff without any authentication other than your username, or the even more comical fuckup based on their deduplication where you could request a file by name and get it if somebody else had it, it's still sadly less secure in some ways than the state FTP was in twenty years ago.
Google replacing Python with Go in large parts of the company. Do you have documentation for that?
The grandparent post makes an absurd claim. The Google codebase is a mix of C++, Java, Python, Javascript with a smattering of Go and a custom data analysis language called Sawzall. I would just be utterly flabbergasted if management declared we were switching to only one or two languages. My experience has been that the team writing the code chooses the language (from the above list -- there are some constraints so that people can switch projects) based on the needs of the project.
The last thing you want to do is use it in business because it would be so easy to fuck up and share things with the wrong client.
Yes I know, the fine print says don't use it for anything you wouldn't want to see on the the nightly news, but idiots share commercially sensitive information with it anyway.
In my day, we used C and sometimes assembler.... no, on second thought, you win.
i'm not exactly sure what the context of "what this will mean for Python" -- Google engineers have written millions of lines of code in Python. I can't imagine any scripting language surpassing it at Google, just for the simple fact that they have so "mannnnny" libraries written in Python
Yeah, but that's like comparing some team's MLB third baseman with Arod and saying the former is a much better value.
ARRGGH!!! &$ )!$!@$ !@ !!&*(!#@!!!!!!!!!
I had forgotten all about MFC, until you had to go bring it up again. I'm sure my lack of memory was due to some form of self-defense by my subconscious.
Some things are best left behind, that humanity can move on to enlightenment without having to admit our barbaric past.
DAMN YOU! What is wrong with you man? Do you play Justin Bieber recordings in public too?
I still write my CGI in C, like everything else. C++? Why? Also: What's a "PHP" or a "VB"? And, isn't COM the same as EXE except for the 64k limit?
> There is no evidence that a sane and consistent language design is better for developers.
That is correct. Unless you can cite something? The rest of your post is, personal problems elevated to talking points. Typical.
You know some languages don't have a working implementation at all? Must be broken. Not knowing how a language works on your architecture? Must be broken. Documentation is wrong? Language broken! If an implementation behaves differently with a different configuration, there's nothing wrong. Every language has to deal with this to some extent at some point. Some believe there are "modern language standards" to adhere to, but everyone has a different opinion about what that means as well until we actually get one. Should be coming out soon since you think it's straightforward, amirite?
> Don't let them come here with their "basic parsing has been a solved problem for over 30 years" opinions.
Naming convention is the issue, not parsing. Take a step back and recognize that you spout, what is scientifically baseless, propoganda conveniently sourced by your own opinion.
I'm not.
Also: What's a "PHP" or a "VB"?
A security exploit.
"Little does he know, but there is no 'I' in 'Idiot'!"
The lack of static typing hurts a bit
The understatement of the year. You know a language got a feature wrong when it comprises an inordinate proportion of the compiler error/bugs found. In Pascal it was the missing semicolon, though in that case the compiler caught it. In C it is the change in meaning of = to assignment and == to comparison (though not _that_ common of an error). In Python, more than half of the bugs are either an improper use of a variable or the wrong amount of white space after refactoring some nested code.
Don't get me wrong, I love Python. But weaknesses are weaknesses. The sooner strong typing is added (like Perl did long ago_ the better Python will be.
ARRGGH!!! &$ )!$!@$ !@ !!&*(!#@!!!!!!!!!
Now while writing an entire sharepoint replacement in one line of perl is impressive, it doesn't really constitute a specific argument against MFC.
In Python, more than half of the bugs are either an improper use of a variable or the wrong amount of white space after refactoring some nested code.
I think the white space is mainly a red herring, but you are right that it is annoying to copy-paste code or refactor and have to remember how many spaces to shift a block to the right. In that regard curly braces and select-all + reindent does work easier.
About static typing (I assume that you mean static vs dynamic and not strong vs weak typing?): I think I disagree. I've not looked at how perl did it, so my experience mainly comes from java. But in java you are spending so much time mucking around with interfaces, casting etc. that it becomes a big mess quite soon, and you need an IDE to make any sense of it; while I use python for a non-trivial program (>25kloc in >200 files in ~10 years and 3 rewrites) and a plain old text editor is fine.
The "duck typing" is often misunderstood. In essence, python says that any object which supports a method, say ".count_parts()" implicitly implements the 'count_parts' interface. You can test membership in that class with 'hasattr' and you don't need to do any casting to use it. In java, if you have two classes from different libraries that happen to have the same method (e.g. becuase they both implement the same standard), if they haven't done it right by implementing the right interface (which is often not the case if you deal with 3d party code) it is a huge mess to do polymorphism: you either need to have complex conditional casting and executing, or define some sort of unified wrapper object and wrap them all.
I would love a language that has "implicit" contracts and still a way to better check enforcement, but I wouldn't know how that would look like.
Where I do feel an easy gain could be had is a sort of optional "strict" mode, although seeing pylint as a "compiler" step does that most of the time. It is annoying that typo's can often go unnoticed, making it harder to debug than needed. Also, the cpython compiler/interpreter seems to be missing out on some optimization that could be added with "cython-like" optimizer hints, ie "this thing over here is an int"...
Don't get me wrong, I love Python. But weaknesses are weaknesses.
Weaknesses are weaknesses, but dynamic typing is a choice that has negative and positive consequences. I would love to see ways to reduce the negatives while keeping the positives, but moving over to static typing feels like throwing out the baby with the bath water...
Looks like you have an off-by-one error in your post. So what is it you do at Google?
Don't let them come here with their "basic parsing has been a solved problem for over 30 years" opinions.
Naming convention is the issue, not parsing.
No, the parser not accepting things like foo()() is pretty unambiguously a parsing issue, it won't magically start working if you use a different function name. Did you not read the post you're replying to, or are you just too stupid to understand?
I don't understand Dropbox. It's just a centralized storage solution that allows cross-platform pseudo mounting. What does it do better than FTP ?
I just don't get it.
No you don't.
I think the white space is mainly a red herring,
I used to be a big fan of white spaces and for small projects it is easy to keep in your head the nesting level at which code should be, but when you are editing someone else's code in a 1000 KLOC project it is much more difficult to remember where it should be. As I said it is an inordinately common source of bugs.
But in java you are spending so much time mucking around with interfaces, casting etc. that it becomes a big mess quite soon,
That a consequence of improper polymorphism, not static typing. Again once you get past 100 KLOC it gets very hard to keep types and names straight. You need the compiler/interpreter to flag you went you write ParetoOptimizer instead of ParetoOptimized or some similar type error.
One of the warts that yosefk complains about (int / int = float)
That's not a wart. That's how it's supposed to be.
How it's supposed to be is int / int = fraction. Doing int / int = float is inexact.
Most people working with C-derived languages use some form of block indentation, and large shops usually have coding standards that insist you stick to it rigorously. This means most people already have the tooling in place to enforce indentation
Anyway, my point is that code in languages that use braces for blocks can be sent through lossy channels that collapse whitespace and then reconstructed using an automated tool that applies these coding standards you mention.
When you say a "bag", how big a bag are you talking?
Might it be this bag implemented in Python as collections.Counter?
the other half falls down to misunderstanding PHP.
How about "PHP is bad because it all but encourages programmers to misunderstand it in a way that leads to security breaches?"
Did you know that Apache will execute compiled C binaries and that you can simply read and write from STDIN & STDOUT to do CGI?
I was aware of that, in an environment that gives the user at least as much control as a VPS. But did you know that some providers' cheapest plans do not support C CGI, only PHP? This restriction is part of why I left Go Daddy shared hosting for WebFaction shared hosting.
Do the same on my mobile & tablets too -- Just run full-on Linux. Use compiled "apps" to get's tons more battery life than when it had Android on it.
Which brand of phone and tablet do you use, and where can I try them in a store in the United States? And how much more battery life do your tablets get than the eight hours that I get out of a Nexus 7?
Yeah, the only time I really use Python filter(func, seq) instead of the sugar is when I'm applying a truth function already encapsulated in a named function, or just using filter(None, seq) to remove falsey values.
I don't like where Python has been going recently, and the C-Python implementation has failed to address its technical shortcomings (like the GIL) while introducing a lot of unnecessary b.s. I'm hoping Google is working on a new Python implementation from scratch, and Guido left because he didn't want to be part of such an effort.
The only handicap? How about being able to easily switch between Dropbox accounts? Say by right-clicking the tray icon and choosing a different account. The current method of switching accounts is unreasonably cumbersome.
Write a small module that provides error checking. Always use it. No I/o, including DB, I mean literally NO I/o, except through it. Parameter length checking, character scrubbing, quote imbalance checking, credit card number validation, date validation, range checking, throttling, email validation, URL controls... whatever you need, and you can write it as you need it. If you find you need to make a call to something and you don't have it covered -- then you need it.
Not only is this relatively easy to do, it's instructive and enjoyable work. And you get a heck of a lot of bang for your efforts.
I've fallen off your lawn, and I can't get up.
What's wrong with pgdb (PyGreSQL)? I use that as the basis for my postgreSQL interactions, seems to work fine.
I did write a nice layer on top of it that does things a little differently, but that was the work of a few hours at most, and really just because I like things to work a certain way.
I've fallen off your lawn, and I can't get up.
I suppose that's why SkyDrive also has iOS and Android apps?
Static typing is not actually a hard requirement for autocomplete (and associated features such as refactoring or semantic code navigation). Most advanced Python IDEs have those, and they implement them by doing, effectively, type inference across your entire codebase, and doing type unions / intersections where various paths combine or diverge. The resulting accuracy is basically as good as your code is structured - if you don't do things like assigning completely different types of values with no intersection of members to the same variable on various conditional paths (and why would you?), you get something that's pretty close to what you see for Java or C#. Sometimes even better - e.g. PTVS can track literal values as well as types, so you can do stuff like this:
and you will get code completion dropdown for members of int inside foo.
(I'm a member of PTVS team, and I'll be happy to explain how it all works in more detail if there is interest.)
Go is not at all similar to Python.
I do, however, disagree with Guido's statement that "Python is fast enough". Whether it is or not depends entirely on what you're doing. For my purposes I don't think a 12-core computer optimally programmed in assembler would be "fast enough".
It's faster to write code in Python than in C or C++ or Pascal or Java. But Python isn't "fast enough" unless your program is I/O bound. And it's inability to handle multiple processing uints gracefully is a real problem. (Not that anyone has a decent answer to that except the dataflow people and the pure functional language people.) Multiple core machines are now the rule rather than the exception, so the GIL is no longer acceptable. Even Ruby attempts to address that, though they didn't really follow through after considering their library situation.
Another real problem that I have with Python is it's documentation system. (Again, nobody has a good answer.) The "built-in" documentation system is so bad that I prefer to use Doxygen, which itself isn't great. It's better than Epydoc, but barely. They need a much better system for generating html...one that doesn't create huge amounts of blank space. (Actually, they have a better system, but it only works to generate PDFs.) I know that I could customize it, but I also don't want to spend all my time fiddling with CSS.
N.B.: I've only got one screen and it's not huge, so large blank spaces in the generated documentation are just not acceptable. I need to fit both the current documentation, and the code I'm working with on my screen, and frequently a few other references as well. So the documentation within the code needs to be compact, and so does the generated html display. BOTH
Perhaps it's unfair to pick on Python for problems that nobody has really solved, but it needs to be said over and over until somebody figures out a decent fix.
I think we've pushed this "anyone can grow up to be president" thing too far.
It was an opinion, not a statement, you can tell from the two words that you conveniently cut off from the beginning of the quote. And you also failed to quote the following sentence qualifying the opinion, which conceded the possibility that it could be a result of the type of people who code in PHP. But I suppose your selective quoting gave you something to argue against.
Python has its own set of problems.... The most recent that I had to contend with is the lack of any decent SOAP library and a lack of a decent postgresql library. It seems to have an abundance of half baked libraries/extensions, and the python 3 fiasco has just made it even worse.
Python is a great language in itself, but getting any real work done with it is an exercise in reinventing the wheel.
There are certainly plenty of things that could be better about Python, but you're going to need to be a lot more specific with your rants. What is not decent about psycopg2? What libraries are "half-baked" and why? What exactly is a fiasco about Python 3? If you do a lot of reinventing of the wheel, you may not have encountered the extensive standard library or abundance of good libraries at PyPi.
There was a question on stack overflow a while back where someone asked "what feature do you hate about your favorite language?" or something to that effect. Nice because it didn't ask to slam other languages, but to criticise a favorite. In the responses I learned some quirks of C and C++ (you know, 10[a] instead of a[10] type stuff), IIRC there wasn't much said about Python. But the endless stream of shit people said about PHP left me wondering how such an abomination ever came to be. I can't remember any of them but just concluded I was lucky to never use it.
I'm now having a vague memory about numeric types not existing or something utterly stupid like that, but I honestly don't remember and don't want to.
I do, however, disagree with Guido's statement that "Python is fast enough". Whether it is or not depends entirely on what you're doing. For my purposes I don't think a 12-core computer optimally programmed in assembler would be "fast enough".
It's faster to write code in Python than in C or C++ or Pascal or Java. But Python isn't "fast enough" unless your program is I/O bound. And it's inability to handle multiple processing uints gracefully is a real problem. (Not that anyone has a decent answer to that except the dataflow people and the pure functional language people.) Multiple core machines are now the rule rather than the exception, so the GIL is no longer acceptable. Even Ruby attempts to address that, though they didn't really follow through after considering their library situation.
You're absolutely correct that whether a language implementation is "fast enough" depends totally on the problem being solved. If the program is I/O bound, as most are, Python and many other languages are fast enough. Even if part of the problem is CPU bound, there is usually a lot of code that is not, which is why hybrid C/Python solutions are so common. For example, NumPy can take advantage of multiple CPUs when doing matrix calculations, allowing one do heavy, fast number crunching without writing a line of C.
If you need to do CPU-bound processing in Python code, threads won't help if you're using CPython, but they might if you're using Jython which is JVM implementation that has no GIL. Alternatively, you can use the multiprocessing module which avoids the GIL and a lot of other potential problems with threads at the cost of having to explicitly communicate between processes rather than share data structures directly.
That a consequence of improper polymorphism, not static typing. Again once you get past 100 KLOC it gets very hard to keep types and names straight. You need the compiler/interpreter to flag you went you write ParetoOptimizer instead of ParetoOptimized or some similar type error.
You need something to check for bad names and syntax errors. It doesn't have to be a compiler or interpreter. I run several static code checkers constantly via my editor so I can immediately see if I misspelled a variable name or left off a closing paren or something. If you would run a compiler to check static correctness of C or Java, why not run a checker on Python? There are several commonly used checkers. Here's a discussion comparing their relative merits.
I think the white space is mainly a red herring,
I used to be a big fan of white spaces and for small projects it is easy to keep in your head the nesting level at which code should be, but when you are editing someone else's code in a 1000 KLOC project it is much more difficult to remember where it should be. As I said it is an inordinately common source of bugs.
Are those million lines of code in one module? Is the nesting depth greater than 8? Those are indications of poor code organization regardless of language or block style. If your modules are not too big and code is not too deeply nested, the way the language indicates block structure has little interaction with the overall size of the project. I read and write Python code written by me and others all day long and almost never encounter bugs resulting from white space.
Thanks for understanding my point. I *do* know about Python's multiprocessing modules, but they aren't easy to use. Which is why I'm currently developing in D, despite Python having *MUCH* better libraries. D has a mode of parallelism where I can just say "execute this loop a parallel as you can". (Well, naturally it's a little bit more complicated than that, but that's the essence. I'm stepping through an array and each step is intended to be compatible with changes made by any other. So using numPy isn't the answer, or it doesn't appear to be from what I've read. I'd need to be calling back from numPy into Python all the time. And the Python parallel modes don't appear to do what I want either. A good message passing framework that didn't care what processor the destination was on would be good. A nice dataflow system would be good...but they don't seems to have developed. Probably because they showed up too early, and now they aren't fashionable anymore. But independent processes or threads aren't a good model for what I'm attempting.)
Of course, what I'd really like is a good Python compiler with a strong message-passing module, or possibly a strong dataflow module, that had a better documentation system than Doxygen. (Here, and for me, better means that it uses less screen space to display the documentation. This probably means a system that pops up windows in response to a click on a menu rather than using html. I've seen applications that do it, though, so it's not a pure pipe-dream. Both Qt and wxWidgets can handle this kind of application. Gtk used to be able to, but I'm not sure that it can anymore. OTOH, I'm not at all sure that tcl/tk can handle it. Perhaps I just never got deeply enough into it.) (Note that Sphinx seems to not be a step in the right direction.)
I think we've pushed this "anyone can grow up to be president" thing too far.
You can write unmaintainable code in any language. If the code is well factored, you won't have any problem keeping track of where the indentation should be. If you have a bunch of deeply nested 1000 line functions you'll lose track of it whether it's curly braces, parenthesis or white space.
You can write unmaintainable code in any language.
This is a non-sequitur. It's like saying you can kill someone with paper and with a gun. Sure, I can believe it is possible to fashion a lethal weapon out of paper, but facts are that it is much easier to kill someone with a gun than with a piece of paper.
Same goes for languages. You can write non-readable code in any language, but it is much easier in certain languages than in others.
This much should be obvious unless you are none too bright.
If the code is well factored, you won't have any problem keeping track of where the indentation should be.
Right, blame the user for the software flaws.
You'll note I also pointed out you'll likely lose track of braces in code written that badly in a language that uses them. Especially given that most C programmers use indentation to help keep track of braces.
I don't think non-sequitur means what you think it does.
Braces work in a completely different way than white space.
Say, if I have a C block between braces, and cut and paste something inside it, I'm guaranteed to have that new code be part of the braced block.
Now let's repeat the same exercise with Python. You cut and paste some code but said code happens to be indented shallower than the larger block because it is brought in from a different nested depth, and what happens? your original block and any others indented to the right of the cut and paste code now end where that inserted code begins.
You'll need to correct the indentation in any case. If you just leave it in the C code, it'll work but you're in for some real confusion later when you are revising the code. There's good reason most shops are militant about indentation.
Just like it's an error to accidentally include (or sometimes not include) the brace with the cut/pasted code, it's an error to not correct the indentation in Python.
ARRGGH!!! &$ )!$!@$ !@ !!&*(!#@!!!!!!!!!
Now while writing an entire sharepoint replacement in one line of perl is impressive, it doesn't really constitute a specific argument against MFC.
Not as impressive as bashing two different technologies in a single line of text, while at the same time disdainfully refusing to bash the third, thus showing even deeper contempt for it
This is not my opinion. Actually, it's not even an opinion. And I'm nowhere to be seen near it
You'll need to correct the indentation in any case.
Actually you don't. Any good IDE will do it automatically for you. This is easy in C, impossible in Python.
Paste it in, use the editor to correct the indentation for the whole block at once. Not exactly rocket science.
> No, the parser not accepting things like foo()() is pretty unambiguously a parsing issue, it won't magically start working if you use a different function name. Did you not read the post you're replying to, or are you just too stupid to understand?
Picking a statement out of context to apply to previous statements you made, so you can continue to rant? Your inability to understand what points you are making (versus making up) is the problem.
Picking a statement out of context to apply to previous statements you made, so you can continue to rant?
No, focussing on the most gratuitously wrong part, as opposed to the remaining limp-wristed handwavy apologism. And there's no context that could possibly make that statement that I quoted make any sense.