84 ms·
Python has brought computer programming to a vast new audience
- drpgq 8y agoPython is certainly way better for a layman trying to do small things than C++
- whatever1 8y agoTrue, but for me that python was my 4th CL (after fortran, c, c++), there were lots of gotchas, specially with implicit type conversions, mutable classes, and passing by value / reference which all seemed quite arbitrary in my first steps. Maybe for a complete beginner these are no-issues.
- llukas 8y agoCan you explain implicit type conversions problems in python?
- whatever1 8y agoIt is not a problem, it was just non expected behavior for someone trained in strong typed languages. For example, you want to calculate the performance of your ML algorithm by counting the correct predictions / total. My expectation was that the result of a division of integers, would be a float, specially if the modulo is not 0.
- ufo 8y agoThe division operator was one of the things that changed in Python3. In Python2 the (/) with integer arguments is integer division, rounded down. Python3 introduced (//) for integer division and now (/) always does floating-point division.
- cma 8y agoThat's how it is in python 3.
- JoBrad 8y agoI think this was actually addressed and back-ported to 2.2+, with PEP 238. https://www.python.org/dev/peps/pep-0238/ https://www.python.org/dev/peps/pep-0238/
- contravariant 8y agoThat's not an implicit type conversion, that's just a different convention for what '/' should do on integers.
- ambrice 8y agoIn what strongly typed language does the division of two integers result in a float?
- dwheeler 8y agoMany languages are not strongly typed (where "strongly typed" means "variables must be predeclared with their types (though they may be inferred)"). If your only experience is with strongly-typed languages, then MANY things about Python will be different, because Python is one of many languages that is not strongly typed. For example, in Scheme (a Lisp), a division (/) presented with exact input values and a non-zero denominator will produce an exact value (an integer or rational). E.g., (/ 1 2) produces the exact fraction 1 divided by 2, and not 0. In addition, both Scheme and Python have different ideas of what an "integer" is, e.g., both are happy to compute the exact value of 2 to the 9999 power. There's no requirement that "integer" correspond to the underlying machine integer.
- kjeetgill 8y agoDouble check me on this, but I'm pretty sure your definition of strong types is wrong; that's static typing. Python is strongly typed but not staticly. Weak typing is more like 1 == "1" is true. Aka implicit parsing or casting.
- ufo 8y agoWeak vs strong typing doesn't have a standard mathematical definition but you are correct that it is usually has to do with implicit type conversions.
- kazinator 8y agoDecades ago, the Pascal camp hijacked the term for the requirement of explicit conversions in a static language. Pascal would be strongly typed because for instance, characters and integers will not inter-operate without chr and ord, and also floating and integer conversions must be explicit. This is in contrast with something weakly typed like C. The weakness in C can be a problem. For instance, a floating to integer conversion that is out of range of the target type invokes undefined behavior. Also, when in range, it can produce a value not equal to the original integer, due to lack of precision. So an innocuous statement like f = i; that passes static type checks without any required diagnostics can go wrong. If a cast were required to make the diagnostic go away, then that at least creates a visible record in the program text that a dangerous conversion is taking place. Another use of "strongly typed" in the realm of Pascal is that it refers to name equivalence for type alias definitions. The C typedef mechanism is weakly typed because "typedef int user_id_t" doens't create a new type; user_id_t is the same thing as int, such that a pointer to user_id_t is compatible with pointer to int and so on.
- samatman 8y agoThat result should be a ratio, surely
- cma 8y agobools can be silently converted to int. 1 + true is ok, but 1 + "true" throws. Sometimes you do want to do math on bools, but it would avoid a class of errors if they would make you wrap them in 'int(the_boolean_variable)'.
- politician 8y ago> Sometimes you do want to do math on bools.. Can you provide a concrete example for when this would be useful? I assume you're not talking about binary arithmetic.
- duckerude 8y agosum(x > 3 for x in iterable) True == 1, False == 0, so this counts how many items in iterable are greater than 3. But I think that's the only non-dirty way I've used it, and if that wasn't possible a trivial count() function could do the job. If I remember correctly, bool subclasses int mostly for compatibility with pre-existing conventions. People were already defining their own "True = 1" and "False = 0" constants before they became part of the language.
- cma 8y agoIf it wasn't possible you could still do: sum(x > 3 for int(x) in iterable) And avoid a class of errors in other places.
- qznc 8y agoImplicit string and unicode conversions were confusing in Python 2. True + True evaluates to 2, although that is technically not a type conversion.
- meowface 8y agoTrue + True is still 2 in Python 3.
- sputknick 8y agoVery appropriate timing. My son wanted to learn programming, so we started yesterday with python, using Jupyter notebooks on Azure (notebooks.azure.com). No setup, easy to create little code snippets, and he can do it all from his Chromebook. Python is intuitive, simple, useful; best first language in my opinion.
- throwaway5752 8y agoI remember hating the whitespace thing so much when I started with Python circa 2.4, but have really come to love the language in a lot of domains since then. A huge, huge "thank you" to Mr. van Rossum for creating this quirky language that I've become so fond of and for the countless hours of his life he's given to the project.
- irishcoffee 8y agofrom __future__ import braces I hated the white-space thing until I discovered that. For whatever reason this made me get over myself and learn to love the tab/space argument that is somewhat akin to the vi/emacs argument.
- throwaway5752 8y agoI know that now. 2.4 was a long time ago... there is some serious wisdom behind that decision/PEP-8/"import this" that took me a while to appreciate. Humans beings are the weak link in developing software, and language decisions that nudge towards highly readable code are productivity decisions.
- Waterluvian 8y agoYou monster. Not a chance.
- mockingbirdy 8y agoOh, I see. I use spaces and vim (I do, but who cares). Let's start a flamewar. /s Every time I think about tabs/spaces, I think about that episode in Silicon Valley [1]. Hilariously accurate, I have the exact same feeling when somebody uses the mouse to copy something or navigate. The cringe makes me feel alive (I guess this is the ultimate reason for those flamewars. And neurotic tendencies, of course). [1]: https://youtu.be/SsoOG6ZeyUI https://youtu.be/SsoOG6ZeyUI
- aidos 8y agoHaha. When we watched that episode my wife was like, “...wait, what, is that a real thing?!” Only true computer geeks could possibly understand.
- ufo 8y agoThe Brian analogy was a surprisingly apt way to explain the PEP 572 kerfuffle
- elorant 8y agoThe great advantage of Python is the vast amount of libraries out there for pretty much anything you can think of. As a C# developer that's the one thing, and probably the only, that I envy from Python.
- helthanatos 8y agoI really dislike converting Python to a different language. What type is this? Go 5 libraries down to find out ;)
- politician 8y agoThat's a common misunderstanding. Python's type system is in the unit tests necessary to ensure the code is doing what it should. This is a boon because all of the behavioral rules are co-located for efficient reference. ;)
- xapata 8y agoIt's more a traits system than a type system. Who cares if it's a list so long as I can append to it?
- bow_ 8y agoBack when I was getting more serious about programming (2010-ish), I had to decide between Perl vs Python as those two were the most widely used in my domain (bioinformatics). I remember one of the argument for Perl was exactly this: the vast number of libraries in CPAN. You would be able to do tasks much quicker because you would just need to install these libraries and go on with your tasks. Still, I decided to go with Python because it made so many 'click' for me about programming in general + because of its REPL, among other things. It turned out to be one of the best decisions I have ever made :).
- vgy7ujm 8y agoMeh.. try Perl.
- lainproliant 8y agoWhen I was younger I used Perl for a lot of the things that I use Python for today: websites, command line tools, and one-off scripts. It's not a bad tool, and it has real strengths, especially for short one-off scripts. I was in the pedantic "meaningful whitespace is evil" camp back then, so I avoided Python. Then I got an internship in a house that used Python. That forced me to give Python a real try and I got over the whitespace thing... I learned that for all intents and purposes this language I had been scoffing was a better tool for many of my usual Perl use cases and more thanks to its extensive standard library.
- EGreg 8y agoWhy?
- vgy7ujm 8y agoPeel makes me happy, Python makes me want to go to sleep.
- random_upvoter 8y agoFor me it's somewhat strange that it is universally presented as a beginner's language. Python would be hugely confusing to me if I didn't keep the underlying C model -- dynamically allocated objects with reference counts -- in mind at all time. Together with a lot of protocol that is largely arbitrary.
- tdb7893 8y agoI've met a lot of people who have programmed simple things in python without understanding the memory model at all so for most people it doesn't seem to be a large impediment.
- xxpor 8y agoTo me that would only be relevant if I'm doing super performance sensitive stuff, and if that's the case I wouldn't be using Python. I've been programming in both C and Python for years and never once have I had to consider reference counting in Python.
- criddell 8y agoWould you also find Excel macros hugely confusing if you didn't know the underlying C model? Because I think that's the level of programming that the masses are doing.
- ummonk 8y agoIn all this time I didn’t even know python uses reference counting instead of tracing gc...
- pm90 8y agoPython is a great language to start programming in. My biggest frustration with traditional programming languages (well, C/Java mostly) was just how much upfront effort and understand is required to do useful stuff. Whereas with python it is pretty easy to whip up a script, read input and transform it into output in real time etc. That said, I think its also important for Python programmers to dabble at least a little bit with Java to really understand how OOP works. Python does have OOP but it has certain quirks which can confuse newcomers. Java helped to clarify my understanding of OOP a lot, even though I've only used it marginally.
- kjeetgill 8y agoI'm going to chime in to 100% agree with you. I'm a big fan of both of those languages and their respective ecosystems. I'm in love with the idea that there a good case of polyglot (biglot?) program synergy between the two. Keep your eyes open on Jython and GraalPython!
- meowface 8y agoOther than interfaces and generics (which would make no sense to add in Python, since it's dynamically typed), can you name some OOP features Java has that Python doesn't have?
- Alex3917 8y ago> can you name some OOP features Java has that Python doesn't have? Encapsulation. In Python you can write code in an OO style and benefit from inheritance, but it’s really only good for people writing libraries and frameworks. For end user code, objects are best avoided because they can pick up state in unexpected ways, which leads to problems that are extremely difficult to debug.
- deleted 8y ago[deleted]
- meowface 8y agoCould you give some examples? What encapsulation features does Java have that Python doesn't? You can get private methods with double underscores. It's true that attributes in Python objects are all public by default and in Java you have to be more explicit to get public attributes, so maybe that counts, but otherwise what do you mean by "objects can pick up state in unexpected ways"?
- lainproliant 8y agoNot only is Python easy to learn for beginners, it allows for some deeply expressive constructs and patterns that are difficult or impossible in other languages. This is why even though I started with C/C++ and Java pays the bills, Python is where my heart is. Thanks Guido.
- Scarbutt 8y agoWell yes, if you come from C/C++/Java, Python is going to feel that way ;)
- dfee 8y agoThere seems to be a sentiment that Python is a kids language - but I think of Python as a language that scales with your experience. You can do some really interesting and complex things and I’m really appreciative of my deep understanding of the language through a decade of heavy use, open source contribution, and project ownership. Recently I released a package which allows you to dynamically create or change function signatures and went deep into `typing` and `inspect`, and found the experience rewarding. https://pypi.org/project/python-forge/ https://pypi.org/project/python-forge/
- tomnipotent 8y ago> There seems to be a sentiment that Python is a kids language I only hear this from developers that have never used Python or work in problem domains where the language is genuinely not better (e.g. low-latency distributed services, embedded devices/IoT sensors). I've scaled Python & PHP web apps to a hundred million monthly visitors on Top 20 US destinations on very limited hardware (6-10 machines). It's surprising how much you can get out of the language if you know how to take advantage of the strengths.
- antt 8y agoEven IoT sensors are easier to program with micropython. What I find worrying is the the language is changing to suit those people, e.g. type hints, rather than teaching them learning to use the language. You don't complain you can't use a hammer as a screw driver, you just don't use a hammer.
- StavrosK 8y agoI agree that sensors are easier with Micropython and will use that if I can (unfortunately the C++/Arduino ecosystem is much, much larger). However, type hints are a fantastic feature and I can't recommend them enough to anyone who writes software for a living. It makes maintenance at least an order of magnitude easier.
- 8y ago
- danso 8y ago> But in the past 12 months Google users in America have searched for Python more often than for Kim Kardashian, a reality-TV star. This seemed so unlikely that I thought the Economist had incorrectly used the Google Trends comparison tool, but they are right: https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F05z1_,%2Fm%2F0261x8t https://trends.google.com/trends/explore?geo=US&q=%2Fm%2F05z... The gap is even bigger when you consider a worldwide audience (i.e. one less focused on American gossip): https://trends.google.com/trends/explore?q=%2Fm%2F05z1_,%2Fm%2F0261x8t https://trends.google.com/trends/explore?q=%2Fm%2F05z1_,%2Fm...
- chatmasta 8y agoTo be fair, a single python dev is going to search for queries about python dozens of times per day. Even the most ardent Kardashian fan is unlikely to search for Kardashians in any volume even close to that.
- StavrosK 8y agoI find your lack of dedication disheartening.
- kjeetgill 8y agoIf we're using Google to approximate mind share them it's skewed way farther than that. Nobody who follows the then is sitting doing Google searches. They're already following them on Snapchat, Facebook, Insta, and Twitter. You only get searches with breaking tmz news. ... I say this with detailed observations of my girlfriend's media habits.
- rossdavidh 8y agoI put in Beyoncé (with or without accent) and Kylie Jenner, and Python still looks higher on most days. Surprising.
- riazrizvi 8y agoThe thing I love most about the language is its conciseness, on several levels. It's syntactically concise because of its use of whitespace and indentation instead of curly braces. Expressions are often concise because of things like list slicing and list expressions. It can be linguistically concise, because it is so easy to fiddle with the data model of your classes, to customize their behavior at a deeper level. For example, it is so quick to design a suite of classes that have algebraic operators, which leads to elegant mathematical expressions of your custom GUI objects for example. But you can also change the way classes are instantiated by overriding Class.__new__ which I've used to make powerful libraries that are a joy to use. Further elegance can be added through creative use of the flexible argument passing machinery, and the lovely way that functions are also objects. Your application architecture tends to be concise because there are so many existing libraries, you can often design your application at a more interesting higher level. For example, you don't have to worry about the size of int's. My big regret with Python 3.0 is that the scoping rules in list expressions changed to prohibit modification of variables in surrounding scope. This degraded the utility of list expressions. The work around is so long-winded. Besides the odd gripe here and there, the language really gives me a warm glow.
- hellofunk 8y ago> My big regret with Python 3.0 is that the scoping rules in list expressions changed to prohibit modification of variables in surrounding scope. This degraded the utility of list expressions. The work around is so long-winded. Can you elaborate? I'm not sure what this is referring to.
- duckerude 8y agoIn Python 2, "[x for x in range(10)]; print(x)" prints 9. x is available outside the list comprehension. In Python 3, it raises a NameError, because the x in "print(x)" is not defined. It's contained in the list comprehension. But I don't know a good use of the Python 2 behavior.
- eesmith 8y agoIn Python 2.x the loop variable is part of the containing scope: >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> [a*2 for a in (1,2,3)] [2, 4, 6] >>> a 3 In Python 3.x, it is not: >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> [a*2 for a in (1,2,3)] [2, 4, 6] >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined It is sometimes useful to know why something failed. The following Python 2 code will not work in Python 3: >>> import math >>> try: ... values = [math.sqrt(x) for x in (1, 2, -3, 4)] ... except ValueError: ... print("cannot compute sqrt(%r)" % x) ... cannot compute sqrt(-3) I have mostly found this feature of Python 2 to be useful on the interactive shell, when trying to diagnose what caused an error in my list comprehension. Eg. >>> with open("tmp.dat") as input_file: ... fields = [line.split()[3] for line in input_file] ... Traceback (most recent call last): File "<stdin>", line 2, in <module> IndexError: list index out of range >>> line 'one two three\n' Oops, there are only 3 columns, not 4.
- andreygrehov 8y agoFor some reason, I never liked Python. I don't know... its classes look weird with all those self, __init__, etc. The __init__.py for packages is also a strange choice to me. It has classes, but no interfaces. The language is even slower than PHP. Does Python have type hinting? What all the hype is about? I just don't get it.
- danso 8y agoWhat other language are you comparing Python's flaws and tradeoffs to?
- andreygrehov 8y agoJava, PHP, C#, heck, even JavaScript/ES[6,7]. I feel like Python has a lot of its own ways of doing things, whereas a more idiomatic approach is imho a better way to go. Why the hell in the world would you call a class constructor as __init__? Pretty much every popular OOP language does it either by naming a constructor the same name as the class name or through some form of a `construct` notation. Why `self` and not `this`? I mean, I know that the language has a very low entry barrier, but wouldn't it make sense to design it in a more traditional way? if __name__ == '__main__': main() Code like that just doesn't make any sense to me.
- danso 8y ago> whereas a more idiomatic approach is imho a better way to go. I don't know what you mean by "idiomatic approach". That phrase, I thought, refers to languages that are highly opinionated about using a specific style -- this philosophy is encoded in Python's philosophy: https://www.python.org/dev/peps/pep-0020/ https://www.python.org/dev/peps/pep-0020/ There should be one-- and preferably only one --obvious way to do it. > Pretty much every popular OOP language does it either by naming a constructor the same name as the class name or through some form of a `construct` notation Seems kind of arbitrary to complain about the constructor keyword `__init__` when the constructor word for pre-ES6 JS, C, Perl, Ruby varies between prototype, constructor, __construct(), and new. Not sure how you say Python's use of `__init__` is somehow worse. As for why `self`, no idea, but seems to be a pretty easy convention to figure out. As for the complaint about the `if __name__ == '__main__':`, to which language are you referring to that has a more self-evident way of encapsulating that functionality?
- KirinDave 8y agoRead the comments here. Look at the diversity of opinions and the number of them that, while professing love for Python, directly contradict each other. Python is verbose|concise, simple|advanced, disciplined|experimental, modern|classical. It goes to show: something doesn't need to be actually-better. It doesn't need to be actually-simpler. It doesn't need to make your job easier or better. It needs to make people think it does that. Python is not, in any way, revolutionary. Several contemporaries exist with similar design constraints. But Python persists because it's created a community that considers itself hygienic for avoiding any other aspect of programming. And by doing this, it can be superlative in any aspect it wants to be. It simply conjures the worst example from any given competitor and those are, by proxy, pushed onto all of them. Did we see a glowing review of how Javascript did this? No. Javascript, despite being the most deployed programming environment family in human history, didn't do this. Python did. Because it says so, over and over. Even if you disagree with that assessment, I think Python has had a lot less to do with pushing python to new audiences. Its community has projected it outward with an impressive degree of vigor over the years, forcing it on more and more people.
- danso 8y ago> It goes to show: something doesn't need to be actually-better. It doesn't need to be actually-simpler. It doesn't need to make your job easier or better. It needs to make people think it does that. I don't agree with that takeaway. You ask us to consider all the diversity of opinions here, but then you evaluate them out of context, what one person says about Python is not necessarily in reference to the metrics that another has laid out, hence, they don't "directly contradict each other". To claim that "oh you all just think Python is less verbose than Java, but it's all hype and no fact" is utter absurdity. You seem to have had bad experience that make you think Pythonistas are the tech world's Jehovah Witnesses, when plenty of other programmers will make the same case against Javascript (especially in the Node.js context). Why do you think Python, or any programming language, has to be "revolutionary" -- or engage in cultmindthink -- for it to become popular? edit: added "or engage in cultmindthink"
- KirinDave 8y ago
- mockingbirdy 8y agoAm I the only who thinks that "90% of American parents want their kids to be computer scientists" is rather unsettling? The market is currently full of people who are in for the money and will continue to be. It will be filled with people until supply meets demand. That the salaries will drop significantly is a natural result of this. We had this pork cycle for teachers, doctors and other highly trained people. No one is benefitting from too many people who drive the prices down (although I'm not gonna say something as an employer, companies are happy about it - the profit margin will shrink but this can be compensated for using scaling). Those that are in for the money will leave (or continue to suffer in an unfulfilling job) and those that have passion can't sustain themselves (we can see this trend in indie game development today).
- crack-the-code 8y agoIs there strong evidence that this will happen anytime soon? I've heard many arguments that claim this wouldn't happen anytime soon, particularly because of the level of difficulty and the required determination.
- mockingbirdy 8y agoI don't know the situation in the US, but here in Germany the companies always say "Oh no, we don't have enough computer scientists" and continue to pay low salaries. Many people thought that CS grads were needed and chose it, but they earn average salaries and sometimes even have to fight for the good seats. Our definition of skill shortage is that there are only 3 applicants for one open position. This means a skill shortage doesn't mean there's no one. It means that there are 3 people hoping for the job, but the companies would love to see as many as they can so they can push the salaries down. > particularly because of the level of difficulty and the required determination Maybe my imagination is limited, but I think there's a finite set of things we need until it gets exponentially harder to make big leaps (all industrial nations suffer from this phenomenon in advanced sectors) - basically the law of diminishing marginal returns [1]. And we will continue to improve the developer experience so it gets easier to build computer programs. [1]: https://www.investopedia.com/terms/l/lawofdiminishingmarginalreturn.asp https://www.investopedia.com/terms/l/lawofdiminishingmargina...
- lordnacho 8y agoSomeone else said this on HN: Python is the second best language in almost every field of computing. That's why there's a library for everything in Python. It's limitations are also not terrible for most people. If you want super fast, you will know how to do that some other way. If you just want simple and easy to read, you use Python.
- m45t3r 8y agoYep, a truly Jack of All Trades, Master of None. And this is fine.
- qubax 8y ago> Someone else said this on HN: Python is the second best language in almost every field of computing. It isn't. Frankly, it isn't even top 3 in any "field of computing" depending on how you define "field of computing". What python has going for it is the evangelists who do a great job of spreading the word and of course funding - they have lots of money backing the language. Also, being an interpreted language, it has a much lower barrier to entry. I'm not much of a fan of python and its block syntax - I very much prefer braces or markers delineating the beginning and end of code blocks. Also, python wants to be everything ( functional, OO, imperative, etc ) and hence is the worst language to learn programming language topics in my humble opinion. My hope is that python will serve as a "gateway drug" to other languages like ruby, ML, C/C++, SQL, etc. So that people will learn what programming and languages are rather using python as a glorified calculator which I'm sure many are doing.
- kankanaads786 8y agoIt's really interesting. I am a beginner to python an just read the above article. it's really interesting and I too enjoy coding with python.
- oh-kumudo 8y agoPython's core strength, among the half dozen of language I used in daily work, is that it is simple and focus on easy human expressiveness. It is the best example of 'simple is hard' when done right. Its core abstractions are carefully selected and weaved in a way, using them to organize/orchestrate your thoughts is just natural and fluid. Huge thanks to Guido for presenting the world such a meticulously crafted work.
- devin 8y agopython -c "import this"
- taeric 8y agoThis seems misspoken. Python hasn't necessarily brought computer programming to a new audience. A new audience is being brought to computer programming. They just happen to be given python as their first steps. There is nothing intrinsic to python that is helping these use cases. Some people like it. Some people don't. I have not seen studies showing any real advantage or disadvantage to it. Do those exist, and I've just missed them?
- xapata 8y agoPerhaps. Or perhaps programming instructors like Python better. When I taught statistics, R was more popular and featureful for the task than Python, yet I chose to teach my students Python.
- taeric 8y agoIf the competition is R, I can see how python is a pretty language. I think R still has prettier charts, with ggplot. However, there can be little argument that it is a peculiar language. That said, I don't see much that python really has going for it in the pretty scenario, either. Most of the examples that make it worth looking at get ugly as quickly as most any other programming language. And the error messages are no more helpful than any of a myriad other languages. None of which is to say I think it is bad. Just I suspect it is getting credit for some intrinsic quality that doesn't really exist. It is getting used because it is the language people know is getting used.
- xapata 8y agoNot as any other language, but as any recently designed language. They (almost) all have good REPLs and a decent variety of data structures. It's easy to compare Python against C or Java and say how great it is, but against Rust or Dart, maybe not so great. However, popularity has its own benefits. Still, compare against Go. There's a major difference in philosophy of deployment. Python's modularity causes dev ops problems, but it also means that any user can monkey patch whatever they need. With Go you need access to the original source, which isn't necessarily provided.
- ucarion 8y agoIn case anyone else was confused by the literary reference, "one with Nineveh and Tyre" is from Kipling's "Recessional": https://en.wikipedia.org/wiki/Recessional_(poem) https://en.wikipedia.org/wiki/Recessional_(poem) Which, I think, is the poem that made "lest we forget" a well-known phrase (though the original is from the Bible). Nineveh (now Mosul, Iraq) and Tyre (in Lebanon) were great cities of their time, but now mostly known for their ruins. In Britain, they're commonly used as symbols of foregone empires.
- MarkMMullin 8y agoTo me, Python has represented the nice friendly face one can put on the mean nasty stuff written in C++
- siddboots 8y agoI think this comparison [1] in particular explains a lot of Python's continued success over the past 5-10 years. For a very long time, CRUD back-end programming was one of the biggest draws of new users to Python. In the last couple of years, interactive data analysis has completely overtaken it. [1] https://trends.google.com/trends/explore?date=all&geo=US&q=%2Fm%2F06y_qx,%2Fm%2F0rphppq https://trends.google.com/trends/explore?date=all&geo=US&q=%...
- timb07 8y agoNice reference to Karel Čapek's "R.U.R." (https://en.wikipedia.org/wiki/R.U.R. https://en.wikipedia.org/wiki/R.U.R.).
- yontherubicon 8y agoArchive link for losers like me who can't get past the paywall: http://archive.is/8mRZ0 http://archive.is/8mRZ0
- deleted 8y ago[deleted]
- SilverSlash 8y agoI just love Python. It's my favorite programming language for many reasons but one of them is writing python never feels like the language is working against you. Python always feels like it's helping you.