News for hackers. Stuff that matters.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by d0m on Sunday April 14, 2013 @01:46AM (#5546037)
Time of "Getting that shit done" and cost of long-term maintenance are two of the main reasons why people use Ruby/Python, not for the raw performance. I thought that was an old debate. And anyway, from my experience, Python has never been the cause of the slowness.. It's more about tweaking that DB query, smartly packaging the assets or using a better algorithm. (I know it's not always the case. I.e. If my program has to run in the space where bits could be randomly shifted, some additional thoughts would be needed, obviously.)
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pifflesnort on Sunday April 14, 2013 @02:28AM (#5546112)
> Time of "Getting that shit done" and cost of long-term maintenance are two of the main reasons why people use Ruby/Python, not for the raw performance.

Plenty of other languages "get shit done".

> And anyway, from my experience, Python has never been the cause of the slowness.

Then you're not actually performing performance analysis. Python is S-L-O-W.

I've written large systems in Python. I've profiled them to find the hotspots. I've micro-benchmarked them against implementations in other languages (C, Java). Python lost. Always. By a lot.

So then I had to rewrite critical sections of the Python in C (or accept that we'd need 32 servers instead of 2). Eventually I stopped bothering, and used a different language, because the aggregate cost of a thousand small performance issues (and a few big ones) is actually quite high.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by vidarh on Sunday April 14, 2013 @06:02AM (#5546505)
> Then you're not actually performing performance analysis. Python is S-L-O-W.

You totally miss the point. There are large classes of systems where CPU time in your app is not a significant factor. E.g. my go-to example of this is the first Ruby project I deployed in a production environment:

A queueing middleware server. If we served the queues entirely out of memory we could serve a few million messages a day out of 10% of a single 2005-era Xeon core (and while Ruby doesn't scale across cores, this system could easily spread load by simply running multiple queue processes).But of of that 10%, 90% was spent in kernel space. So even if switching to C (or whatever) were to speed up the user-space part of the code 90%, it would only cut CPU time spent from 10% to 9.1%.

This is fairly typical. If your code is CPU-bound, and it's not CPU bound because of stupid algorithm choices, then things can look very different. The first thing to do is find out if you're CPU or IO bound.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pifflesnort on Sunday April 14, 2013 @10:31AM (#5546956)
> You totally miss the point. There are large classes of systems where CPU time in your app is not a significant factor. E.g. my go-to example of this is the first Ruby project I deployed in a production environment:

This is only true if you ignore response latency as a comparative metric entirely.

> But of of that 10%, 90% was spent in kernel space. So even if switching to C (or whatever) were to speed up the user-space part of the code 90%, it would only cut CPU time spent from 10% to 9.1%.

I'm really curious what you were doing in Ruby that spent 90% of your runtime in the kernel. Having implemented similar middleware, I found that nearly all my runtime was spent just performing basic decoding/encoding of framed packet data, and as a kernel developer, I'm having a hard time imagining what an in memory queue broker could have been doing to incur that overhead

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by vidarh on Monday April 15, 2013 @07:18AM (#5550818)
> This is only true if you ignore response latency as a comparative metric entirely.

Response latency makes scripting language unacceptable for some types of problems. But in my experience very few latency problems I've come across are down to language choice vs. badly written database queries, lack of caching etc., that'd still be unacceptable regardless of language. Basically, the moment a database is involved, that's where you're most likely to see your low latency going out the window.

Of course there are situations where language choice definitively matters in terms of latency. Despite using mostly Ruby now, there are certainly places where I'd use C. E.g. I'd never try to replace Sphinx search with pure Ruby code, for example.

> I'm really curious what you were doing in Ruby that spent 90% of your runtime in the kernel. Having implemented similar middleware, I found that nearly all my runtime was spent just performing basic decoding/encoding of framed packet data, and as a kernel developer, I'm having a hard time imagining what an in memory queue broker could have been doing to incur that overhead

The moment you find yourself "decoding/encoding framed packet data", you have lost if your goal is a really efficient message queue if said decoding/encoding consists of more than check a length field and possibly verify a magic boundary value.

If the userspace part of your queueing system does more than wait on sockets to be available and read/write large-ish blocks, you'll be slow.

Of course there are plenty of situations where you don't get to choose the protocol, and you're stuck doing things the slow way, and sometimes that may make a language like Ruby impractical.

But there are also plenty of situations where in-memory queues are also not acceptable, and the moment you hit disk, the entire performance profile shifts so dramatically that you suddenly often have much more flexibility.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pifflesnort on Monday April 15, 2013 @10:27AM (#5551627)
> Response latency makes scripting language unacceptable for some types of problems. But in my experience very few latency problems I've come across are down to language choice vs. badly written database queries, lack of caching etc.

5 ms you save in your runtime -- for free, without any work on your part -- is 5 ms longer you can now afford to spend waiting on the database.

> But there are also plenty of situations where in-memory queues are also not acceptable, and the moment you hit disk, the entire performance profile shifts so dramatically that you suddenly often have much more flexibility.

I can only disagree here. I view CPU cycles and memory as a bank account. If you waste them on an inefficient runtime, you can't spend them elsewhere, and there are always places where they can be spent.

Excluding huge sections of the problem domain -- such as "decoding/encoding framed packet data" -- is a cop-out. There's no valid reason for it, unless you're going to go so far as to claim that Ruby/Python et al increase developer efficiency over other language's baselines so dramatically that it outweighs the gross inefficiency of the languages.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by scott_w on Sunday April 14, 2013 @03:03AM (#5546185)
I think you missed the point. There are plenty of use cases where Python isn't the cause of slowness.

It doesn't matter if C is 100x faster than Python if your app is running 49/50 seconds running SQL queries.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @06:45AM (#5546564)
No. But it DOES matter to me than Python restricts you to using it for those cases, whereas I would want (and could technically be able to) use it for far more stuff.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pekk on Sunday April 14, 2013 @10:28AM (#5546947)
So you prematurely optimize Python out of everything you write, because it might not be suitable for... some use case yet to be determined?
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @12:46PM (#5547349)
No, I don't "prematurely optimize Python out of everything I write".

The exact opposite, I would like to be able to use Python for more stuff but I can't because it's slow.

Nothing about doing it "prematurely" here. I have tried it for specific problems and it was slow. If anything, having built in in Python first is the reverse of "prematurely". And I have, as many programmers have, a very good general idea of where it's slow and what it can be used adequately for without resorting to C.

And what I argued is that people constrain themselves unconsciously, based on that very knowledge, to the kind of projects they do with pure Python.

Nobody writes a AAA game in Python. Nobody tries to build a browser in Python. Nobody writes a performant Apache/Nginx class web-server in Python. Nobody writes a database engine in Python. Etc etc.

(Note for the "Vulcan"-style literal readers: by "nobody" here I mean "not many" / "not a sane person". I'm sure you can find some experimental, bug ridden, half-developed example of all of those done in Python, with maybe 100 users at most. Oh, and I specifically wrote: "pure python").

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by rbanffy on Sunday April 14, 2013 @08:19PM (#5549027)
> Nobody writes a AAA game in Python. Nobody tries to build a browser in Python. Nobody writes a performant Apache/Nginx class web-server in Python. Nobody writes a database engine in Python. Etc etc.

Almost nobody does any of those things regularly. I've written perhaps two ISAPI modules (in C++), one Apache module (in C) and in none of those cases the code I wrote replaced the bottleneck. It was just that that was the "right" place to put the code. I've done performance analysis countless times (the first time was, indeed, to demonstrate moving off VB3's p-code and into Turbo Pascal's native code was going to have a negligible effect on the performance of a client-server application) and I've seen, over and over again, the bottleneck being the network and the database.

For the exceedingly rare case it's not, I agree, Python/Ruby/Perl/Smalltalk is not the best choice.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by voltagex_ on Sunday April 14, 2013 @08:01PM (#5548963)
>Nobody writes a AAA game in Python.

No, but the scripting/UI/mod toolkit for the game might be in Python

>Nobody writes a performant Apache/Nginx class web-server in Python

No, but Python can do quite well serving WSGI to Nginx

>Nobody writes a database engine in Python

No, but Python ORMs work pretty well.

The point I'm trying to make is that I don't think that it's a bad thing that Python sometimes gets relegated to a "support" language.

I think the time of the single language programmer is over. If you need something faster than Python, use something else.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @10:02PM (#5549329)
>The point I'm trying to make is that I don't think that it's a bad thing that Python sometimes gets relegated to a "support" language.

Of course it is bad. It would only be good if the inverse (being able to write the whole thing in Python and get the same speed) would be worse.

But it clearly is not -- hence, it's bad. It might be pragmatic and necessary compromise at the moment, but that doesn't make it "not bad".

>I think the time of the single language programmer is over. If you need something faster than Python, use something else.

On the contrary, multi language projects are a kludge born out of (pragmatic) necessity.

Nothing inherently inevitable (or good) about them.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pwang on Sunday April 14, 2013 @10:27PM (#5549408)
> On the contrary, multi language projects are a kludge born out of (pragmatic) necessity.

> Nothing inherently inevitable (or good) about them.

Um, except that coherent planes/tiers of abstraction is the foundation of robust software engineering. You write languages to a spec; compiler authors emit bytecodes for another spec; hardware engineers optimize transistors and lay traces on silicon to meet yet another spec. Etc.

Multi-language is the only thing that makes the world work today. The closest single-language runtime that exists is FORTH and things like that.

Every other "modern" language where you get to pretend your process has a contiguous address space, or that there even exists a thing such as "process", is s pragmatic compromise between compiler and runtime technology.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Monday April 15, 2013 @08:12AM (#5550994)
>Um, except that coherent planes/tiers of abstraction is the foundation of robust software engineering. You write languages to a spec; compiler authors emit bytecodes for another spec; hardware engineers optimize transistors and lay traces on silicon to meet yet another spec. Etc.

Except that we talk about stuff that should be in the same level of abstraction in the first place. It's not about writing a compiler or OS in Python, or using Python for CPU microcode.

It's about writing the numerical routines in a scientific/statistics package in the same language that you write the core business logic, etc.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by vidarh on Monday April 15, 2013 @07:24AM (#5550831)
> Nobody writes a AAA game in Python. Nobody tries to build a browser in Python. Nobody writes a performant Apache/Nginx class web-server in Python. Nobody writes a database engine in Python. Etc etc.

But most developers do none of those things in the first place, regardless of language.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nostrademons on Sunday April 14, 2013 @04:43AM (#5546350)
"So then I had to rewrite critical sections of the Python in C"

I think that's kinda the point; rewriting critical sections in C is pretty much Working As Intended. That's why it's a scripting language. The point is that you didn't have to write the whole thing in C.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @06:49AM (#5546569)
>I think that's kinda the point; rewriting critical sections in C is pretty much Working As Intended. That's why it's a scripting language.

No, it's pretty much not "Working As Intended".

It's just "Working as we have been used to, because, well, what can you do?".

As V8, IonMonkey, Dart, Smalltalk VMs, LuaJIT, even PyPy etc have showed, nothing prevents Python from being an order of magnitude faster (and sometimes up to two), while remaining just as dynamic.

Rewriting parts of a Python program in C is not a technical necessity due to some (unsurmountable) theoretical limit. It's a technical necessity because of a non optimal interpreter implementation.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pekk on Sunday April 14, 2013 @10:29AM (#5546949)
It isn't a necessity at all. It's an available option.

How would you write PyPy to be "an order of magnitude faster"?

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by fauigerzigerk on Sunday April 14, 2013 @05:29AM (#5546439)
Do you think that most Python developers can write safe C code? I doubt it but I have no data on it either.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nilliams on Sunday April 14, 2013 @05:38AM (#5546459)
A fairly moot point. Do you think most C developers can write safe C code? The 2 I've encountered in my short career basically have no idea what they're doing (which I suspect is partly why they stuck with C instead of exploring alternative languages).
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by fauigerzigerk on Sunday April 14, 2013 @06:06AM (#5546509)
If that were the case it would make the situation even worse. It means the whole "write performance critical parts in C" argument is bogus.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nostrademons on Sunday April 14, 2013 @06:19AM (#5546530)
To answer your original question - no, but there's less C code than the equivalent C-only program, so you're still better off. Or if your argument is that C is a security nightmare (which you won't find much argument from me on), replace C/CPython with Java/Jython.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pcwalton on Sunday April 14, 2013 @01:53PM (#5547560)
You could write performance critical parts in a safer language, though, such as Rust (disclaimer: I work on Rust). C isn't the only option here.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @06:42AM (#5546557)
>And anyway, from my experience, Python has never been the cause of the slowness.. It's more about tweaking that DB query, smartly packaging the assets or using a better algorithm.

That's because you constrain your use of Python in I/O bound problems, like webpages and such. If you had any CPU bound problems, then you would have found Python is quite slow -- and you can get 2-20-100 times the performance in another language.

Python is very slow (compared to what it can be), which is what necessitates tons of workarounds like: C extensions, SWIG, NumPy and SciPy (C, Fortran, etc), Cython, PyPy, etc. A whole cottage industry around Python's slowness. Which is nice to exist, but not an ideal solution: suddenly you have 2 codebases to manage in 2 different languages, makefiles, portability issues, etc etc. All of those are barriers to entry.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pwang on Sunday April 14, 2013 @10:33PM (#5549435)
There are definitely limitations of the implementation of CPython itself, which do not need to be there if the language were willing to ratchet down the dynamism in certain cases. (Even without that, there are potentially implementation avenues that would have permitted better concurrency than the current codebase.)

However, implementation aside, I think it's invalid to assert that the existence of a cottage industry is inherently a sign of weakness; it's also a sign of just how pervasively Python is used. Find me another language that's used as widely, as popularly (i.e. not just two random guys using it that way), and in as many different kind of settings as Python. (Java might be a contender, except that it's not really used for the really high-performance scientific workloads like Python.)

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @09:01AM (#5546792)
This.

Integration is hell. This is a universal fact.

I'd rather pick a tool which doesn't add integration requirements!

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pekk on Sunday April 14, 2013 @10:36AM (#5546969)
Python doesn't add integration requirements. If you want to just use PyPy for something, then use it in good health (without fearing that your e-penis is tiny and will hamper your 'performance' because you didn't do whatever coldtea said is necessary for ULTIMATE SPEED).
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @06:22PM (#5548612)
Why the juvenile mockery about "e-penis" and "ULTIMATE SPEED" and such mocking? Are we 12 year old here?

I made my case explicitly, and it's about technical limitations of CPython that can (and, at some points WILL) be overcome. PyPy is a step in that direction, though not mature yet.

Python, in the form of the standard and most used implementation for scientific, technical etc programming, CPython, DOES add integration requirements.

It necessitates the use of C/Swig/Cython etc extensions for performance critical stuff. And it necessitates it, not because it puts a gun in your head or says so in some contract clause, but in the pragmatic way, that people find it's not fast enough for their needs in pure form.

That's why all the popular related Python projects are not written in pure Python, but in C/Fortran/et al (NumPy etc).

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @02:12AM (#5546085)
Yeah: your real bottlenecks are going to be 1) getting data out of your database and 2) sending packets across the internet. These are 100 times and 1000 times slower than your program, the 10x penalty to use ruby/python instead of C/C++/go/rust isn't going to matter.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @06:53AM (#5546576)
>Yeah: your real bottlenecks are going to be 1) getting data out of your database and 2) sending packets across the internet. These are 100 times and 1000 times slower than your program, the 10x penalty to use ruby/python instead of C/C++/go/rust isn't going to matter.

Only if you're talking about the typical CRUD, website, etc program.

Why should we? People use Python for numerical analysis, scientific computing, etc. Why not let them be able to do that, while still writing in Python (instead of using libraries that delegate to C/Fortran/etc)?

And even a website can do intensive computation work. Why HAVE to write it in 2 languages?

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by anonymous on Sunday April 14, 2013 @09:09AM (#5546806)
The people who use python for numerical analysis use solutions like numpy, with which their programs spend most of their time executing optimised numeric routines.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by yummyfajitas on Sunday April 14, 2013 @11:10AM (#5547061)
If you can structure your program in such a way that all your inner loops are handled by BLAS/LAPACK/FFTW, then python works great.

The sad fact is you can't always do this. Then you are forced to drop down to C/C++/Fortran.

It would be great if you didn't always have to do this.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by travisoliphant on Sunday April 14, 2013 @10:01PM (#5549324)
This is exactly what Numba is designed to help with. And it already works extremely well for such cases. Numba lets you have ease of use (un-typed containers) and speed (with typed-containers) in the same run-time and the same syntax. Here is are some IPython notebooks which illustrate:

https://www.wakari.io/nb/travis/Using_Numba https://www.wakari.io/nb/travis/numba

And the slides from PyCon Talk: https://speakerdeck.com/pyconslides/numba-a-dynamic-python-c...

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by yummyfajitas on Monday April 15, 2013 @09:09AM (#5551251)
Numba is great for numerical expressions, but I'd be surprised if it works for trickier bits.

For example, consider the problem here:

http://arxiv.org/abs/0903.1817

Ultimately I needed to run a math formula on some surfels and connect an edge in a graph if the formula came out True. Following that I had to prune a bunch of edges in the graph. In 2009 (when I did it), I had to drop down to c++. (Admittedly, this was also partly due to a lack of a good python graph lib.)

I'd be very surprised if Numba is helpful with something like that - the branching and complex data structures don't seem like a great fit for it.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pjmlp on Sunday April 14, 2013 @01:27PM (#5547461)
The scientific community seems to be welcoming Julia open arms, given its performance improvements over Python, if you look at the rate code is being ported to such a young language.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pekk on Sunday April 14, 2013 @10:31AM (#5546955)
Do you use Python for numerical analysis, scientific computing, etc.? If so, why are you saying "why not let them be able to do that"? If not, why are you holding forth on Python's unsuitability for these applications without knowing about the available tools?
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @11:50AM (#5547174)
>Do you use Python for numerical analysis, scientific computing, etc.? If so, why are you saying "why not let them be able to do that"?

1) Yes I do (occasionally).

2) Because it applies to everybody, not just me. You surely heard of the plural form of speaking before.

>If not, why are you holding forth on Python's unsuitability for these applications without knowing about the available tools?

I never said Python is "unsuitable for these applications".

On the contrary, I acknowledged that Python IS USED for these applications.

What I said is that the tools you mention (the ones that make it suitable for these applications) are written in other languages, which is kludgy. I'd rather be able to have them written (and modified etc) in Python too.

So, Python + NumPy + etc is suitable for these applications, but Python the interpreted language without external C/Fortran help is not.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @10:36PM (#5549437)
if you're doing numerical analysis, you're doing it offline, not in real-time. And so again, bit-packing doesn't matter. If your space usage grows exponentially, that becomes a problem, but in that case the difference between programming languages is just a multiplier, and is dwarfed by your algorithmic problems.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by wnight on Sunday April 14, 2013 @10:21AM (#5546932)
Why use a hammer and a screwdriver when you can make due with only a hammer?
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by coldtea on Sunday April 14, 2013 @11:57AM (#5547190)
It's even worse than that.

Python and the faster extension languages used are the same kind of tool (well, obviously, both are languages).

So, let's compare them to two hammers.

The difference is Python is made from soft plastic, and while it is light, it only works for softer nails. For harder stuff you need a metallic hammer, which is heavier.

And the sad thing is, the Python-hammer can also be almost as hard as the other hammer while remaining light, it just needs some coating (faster interpreter innards).

So nothing (except besides the man-years of work needed on the interpreter) forbids you to have a hammer both light AND strong (== dynamic and expressive as Python WHILE many times faster).

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by theoj on Sunday April 14, 2013 @02:42AM (#5546139)
You conveniently forgot a key bottleneck: the amount of RAM on your server. That's what determines how many concurrent sessions you can keep running before performance degrades and you need to add another server.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by DigitalJack on Sunday April 14, 2013 @04:47AM (#5546354)
"Conveniently forgot" is a very rude thing to say. Even if you think someone left something out on purpose, your argumentation won't benefit from the usage if that phrase.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by theoj on Sunday April 14, 2013 @11:46AM (#5547164)
Sorry if it came out that way... that was not my intention. I just wanted to highlight a fairly large omission.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by vidarh on Monday April 15, 2013 @07:30AM (#5550850)
I haven't run into a situation where RAM was a limit I cared much about for many years. If you rely on hamstrung VPS's, perhaps, but RAM is cheap. The servers we buy at work rarely have less than 32GB these days, and most can take 384GB or more. A couple can take up to 768GB.

If anything, I work hard to put more stuff in RAM to avoid hitting disk, as even though we have SSD's in all our new servers, disk IO is still inevitably where we hit limits first, followed by CPU. Running out of memory is a rare event, and when it is it is consistently an indication of a bug.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by klibertp on Sunday April 14, 2013 @06:13AM (#5546522)
"the amount of RAM [...] determines how many concurrent sessions you can keep"

I don't understand. Concurrent sessions? Do you mean open connections? Worker threads? What exactly?

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @03:06AM (#5546191)
Yeah, but as a programmer that's not really my domain, and anyway throwing more servers at the problem fixes it, and doesn't require much change in the architecture of most apps.

The maximum speed of the internet, the maximum speed of your database, the maximum speed of your programming language are all basically constants that you can't improve by throwing money at the problem.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by eksith on Sunday April 14, 2013 @03:46AM (#5546240)
That is just plain appalling.

As a programmer, available memory is absolutely your domain or else you're increasing hardware/VM costs for yourself or your employer needlessly. Then you've transferred the cost of increased hardware to host your app/site/whatever off to users.

I can see today bit pinching isn't fashionable as it was long ago when memory wasn't cheap (it's not really "cheap" today either since you're paying proportionally greater per VM than the actual cost), but when a basic tenet like efficiency is ignored because DB all you're doing is compounding the problem.

BTW. Most people already deal with the DB issues with aggressive caching and/or reverse proxy so that still leaves the core application.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by relix on Sunday April 14, 2013 @04:14AM (#5546292)
At an hourly rate of $120, thinking 10 minutes about saving RAM costs my client $20. With that money he could've bought 1GB extra RAM. I'm sure 99.999% of the times the saved RAM, would be less than 1GB. It's a simple cost/benefit equation. If you can save more than 1GB by thinking 10 minutes about it, you're writing shitty code to begin with.

There are times when the benefits are greater, for example when your software is running a million instances, or you're working on a hardware-intensive game, but those are certainly not common case.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by gjm11 on Sunday April 14, 2013 @07:42AM (#5546649)
The cost of 1GB of extra RAM is $20 in a certain range, namely where your system fits fairly comfortably on a single machine.

Once you get past a certain level, though, the cost of the next 1GB isn't $20, it's $20 plus the cost of another computer plus the cost of exploiting multiple machines rather than just running on a single one.

Then it's $20/GB for a while again, then $20 plus the cost of adding another machine, and at a certain point you need to add the cost of dealing with the fact that performance isn't scaling linearly with amount of hardware any more.

That last bit might be a concern only in fairly rare cases. But the first, where you make the transition from needing one machine to get the job done to needing more than one, isn't so rare. And that can be a big, big cost.

(Very similar considerations apply to CPU time, of course. Typically more so.)

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by eksith on Sunday April 14, 2013 @03:11PM (#5547880)
We can't afford hourly rates of $120 and RAM most definitely doesn't just cost $20 when you factor in the inevitable new VM/machine. RAM is critical for maintaining concurrent connections plus there are times you need to keep large datasets in memory to avoid hitting the database.

This casual disregard for resources would explain why a lot of startups run into infrastructure issues so quickly and settle on terrible solutions (or outright snake oil) to mitigate problems that shouldn't exist in the first place.

People need to start realizing that The Cloud is only a metaphor. Hardware isn't intangible and neither is their cost.

Servers don't grow on trees; they live on a rack and grow on electricity and NAND.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by Joeri on Sunday April 14, 2013 @03:40PM (#5547975)
Yes, $20 for the memory, and $200 in time spent getting approval, another $200 to physically install it, because you 'obviously' can't just open up that server as there are procedures fr that kind of stuff, and then $2000 in time wasted by the users while they spent 6 months waiting for that one ram stick to get installed.

It's easy to think everyone has their acts together like facebook or google, but most companies i've dealt with have hardware upgrade processes measured in months or years, not hours or days. You absolutely have to take responsibility for your work as a programmer and make stuff run fast instead of labeling it somebody else's problem.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by rbanffy on Sunday April 14, 2013 @08:26PM (#5549043)
> It's easy to think everyone has their acts together like facebook or google

Well... For those companies, obviously, dynamic languages are not an option. ;-)

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by fleitz on Sunday April 14, 2013 @04:02AM (#5546269)
Most garbage collected languages can't handle all the memory available on modern systems. Hardware costs pale in comparison to revenue and the cost of programmers. (Unless your service is free)

In general if your server is making you money, you'll make more money improving the service than reducing the amount of RAM the service takes to run.

In summary, test the conversion rate of a page/feature/etc, not how much RAM it uses. If you're going to performance optimize, attach a profiler and take the easy wins, don't spend too much time on it unless it's a ridiculous amount of resources or your margins on razor thin.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by fauigerzigerk on Sunday April 14, 2013 @06:04AM (#5546507)
"Hardware costs pale in comparison to revenue and the cost of programmers."

That's not a law of physics. The number of servers you need depends on the number of users you have. The functionality you have to build usually doesn't. So the more users you have, the less true your statement becomes.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by gngeal on Sunday April 14, 2013 @08:57AM (#5546785)
"Most garbage collected languages can't handle all the memory available on modern systems."

I don't think that has anything to do with the languages. I think that has everything to do with the quality of the memory manager implementation, and there is at least one memory manager that does deliver in this respect, namely C4.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @04:35AM (#5546334)
Most apps just don't have computation patterns where RAM usage could even be a problem; most apps are IO-bound in some way. The companies I've worked for have deployed new servers because of high load averages (in the unix-load sense), not because of RAM shortages.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nostrademons on Sunday April 14, 2013 @04:57AM (#5546366)
That's only true because most companies admit defeat before trying: they hit the disk when serving. The big Internet companies (Google, Facebook, LiveJournal, hell, even Hacker News and Plenty of Fish) all serve out of RAM: they keep everything a user is likely to hit in main memory so that a request never needs to perform I/O other than network. In this situation you're absolutely RAM-constrained.

I remember trying to optimize some financial software a couple jobs ago and hitting a brick wall because that's the speed the disk rotates at. We ended up buying an iRAM (battery-backed RAM disk) and sticking the DB on it. You can get this a lot cheaper by avoiding the DB and using a RAM-based architecture if you're willing to sacrifice fault-tolerance under power outages (or if you have some other architectural solution for fault-tolerance, like writing to multiple computers).

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @10:33PM (#5549433)
It's not that they admit defeat, it's that they admit success. Yes, there are ten companies that are pushing hardware so hard that every bit counts again because if it didn't they'd be in danger of exhausting the earth's supply of elemental silicon. But everyone else can make a good living without going there.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by NateDad on Sunday April 14, 2013 @09:42AM (#5546869)
This is terrible. It's your job to know how much memory you're using and not to use too much if you can help it. In many environments it's set at a very low value - desktop, mobile, client-side web apps, embedded. Even in an environment where RAM is cheap and you can scale it as you want... using too much RAM can cause paging issues, cache-miss issues, increase your server startup time, etc. All of these are real world issues that you, as a developer, are responsible for.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by ansgri on Sunday April 14, 2013 @06:13AM (#5546523)
Well, you're talking about making easy things even easier (CRUD web apps connected to DBs; the inherent complexity is low). That's very important for horizontal technology expansion, i.e. 'easy IT everywhere'.

For vertical progress, i.e. making complex things possible, these micro-bottlenecks are important. These same DBs with their query processing and other domains with extremely high inherent complexity would greatly benefit from high-level languages yet still the most difficult parts have to be written in the already difficult C(++).

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by anoncow on Sunday April 14, 2013 @02:47AM (#5546158)
Is Go fast AND human friendly?
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jes5199 on Sunday April 14, 2013 @03:09AM (#5546196)
Some people certainly think so. "Fast" and "Friendly" are both relative concepts, and it's hard to get a definitive answer.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by anoncow on Sunday April 14, 2013 @11:08AM (#5547058)
Is Go as fast as java and as friendly as python?
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by ralfn on Monday April 15, 2013 @04:57AM (#5550456)
Neither. Less friendly ("language complexity") than Python, and less performant than Java (not in the same league).

Its just another trade off. Beyond the hype, it has interesting choices, and some very poor ones. (No algebraic datatypes, conservative exploitable will-break-your-program garbage collector, no tail recursion)

But the trade off between performance, safety and compile time is quite unique, and should be considered its main contribution to the language design space. Its just too bad it ignores every other contribution from the last thirty years. Like how to do a type system, or how to write a garbage collection that survives long run proccesses.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nemothekid on Sunday April 14, 2013 @01:59PM (#5547587)
My experience with Go is that it is as friendly as python. Not a lot of tricks and was incredibly easy to pick up and understand. But FWIW, I don't think its as fast/mature as Java yet.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by afandian on Sunday April 14, 2013 @12:07PM (#5547226)
Yes.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @05:13AM (#5546395)
Both of those are subjective.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jacobmarble on Sunday April 14, 2013 @01:53AM (#5546045)
True, the author doesn't really address "effort to get shit done", but Others have commented on this and there seems to be consensus around "Go is a very human readable/writable language".

Anyone know of a human read/write-ability comparison of programming languages?

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by antiterra on Sunday April 14, 2013 @02:35AM (#5546132)
Isn't that a useless comparison? Chinese, Tamil and Estonian are all extremely human read/writeable, so much that children can write them. However, it's likely at least one of them is indecipherable to you.

Perhaps the metric you're more interested in is the difficulty in learning to read/write decent code in a particular language. Of course, this difficulty can vary based on what other languages the learner is already familiar with.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by jesstaa on Sunday April 14, 2013 @05:13AM (#5546398)
Chinese is often even indecipherable to the Chinese and because of this there have been many attempts to simplify it. There is a subset that people actually use and the rest is avoided.

This is a similar case with languages like C++, Ruby and Python. The languages are terrifyingly complex, but the subset that most people use is reasonably usable. If you stray outside this subset there be dragons.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by danenania on Sunday April 14, 2013 @06:59AM (#5546585)
I see your point about C++, but I don't think anything in Ruby or Python could be described as "terrifyingly complex". They give you plenty of rope to hang yourself in various ways, but that's a different issue than language complexity.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pjmlp on Sunday April 14, 2013 @01:28PM (#5547464)
The libraries are quite huge, for blue collar developers.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by rat87 on Monday April 15, 2013 @05:42AM (#5550581)
some of the dsl's might be hard to decode
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by zachrose on Sunday April 14, 2013 @02:28AM (#5546111)
Depends on the human! (One end of the spectrum is a DSL customized to the concepts and patterns of domain experts.)
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by RegRegReg on Sunday April 14, 2013 @08:23AM (#5546730)
Exactly, if you want shit done you need to use Ruby/Python. If you want actual stuff done you use something else.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @05:29AM (#5546438)
Actually I find the opposite. Python is easy for quick wins but from a maintenance, performance and reliability perspective it rapidly falls off a cliff. If your code propels your business then these concerns need to be considered up front.

Even off the shelf functionality doesnt have the same time/complexity properties as say c#, java or go resulting in a fairly basic algorithm reaching ridiculous time constraints very quickly.

As for CRUD type apps, you are probably right but its the bits that aren't CRUD which add the most value to your product.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by danenania on Sunday April 14, 2013 @07:06AM (#5546594)
"As for CRUD type apps, you are probably right but its the bits that aren't CRUD which add the most value to your product."

I'm sympathetic to your point, but I don't think this is necessarily true. What adds the most value to a product is determined by economics. It has nothing to do with whether an app is doing basic crud or nlp wizardry underneath, just whether it does something people find useful. There are tons of basic crud apps out there making people millionaires.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by stickfigure on Sunday April 14, 2013 @12:20PM (#5547264)
There are tons of basic crud apps out there making people millionaires.

Name three.

Economics drives both demand and supply. CRUD apps are easy to make; the market for most CRUD-only apps is heavily saturated with competitors, so the differentiating value of your application is not likely to be your ability to perform CRUD operations. Put it this way - if you come up with a CRUD app that does something staggeringly valuable, expect strong competitors in days not years. Your chance to make millions is small.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by chc on Sunday April 14, 2013 @09:42PM (#5549263)
I heard about this Facebook thing the other day. They seem to be doing all right for themselves.
Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @09:00AM (#5546788)
Perhaps my point wasn't quite described as well as it could have been. What I meant to say was:

What distinguishes your product is not how it stores or presents the data but what value it derives or extracts from that data.

Most CRUD apps are just a form of lock in which provide no value past storing your stuff in one place. That covers pretty much the entire enterprise software space and most trendy startups these days.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nilliams on Sunday April 14, 2013 @05:55AM (#5546490)
If there really are business-critical parts of the app that are too slow a good developer will drop down to C (as noted by others). That doesn't negate the reasons for using Python for the rest of the app.

Your mentions of maintenance and reliability in the opening sentence are unfounded. What makes a Python app less so than the same app written in any other language? Surely it comes down to the developer. A well-factored app written in Python (with tests) is going to be far more maintainable than a big ball of mud written in C. The choice of language has little to do with it.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @08:57AM (#5546784)
I didn't mention C :)

I wouldn't drop down to C ever at application level. There is virtually no need to do this these days without introducing more risks from a security and memory perspective and the inevitable situation of "integration hell". I'd rather throw it in a JVM than drop to C. Then again if I started with a JVM I wouldn't have the problem to start with as it solves both ends of the problem. The CLR is equally applicable here. Go hits the mark too.

From my experience here dealing with a massive 100kloc python project. Python maintenance:

a) Horrible to refactor. I mean really horrible. You don't get everything right the first time and when it comes to fixing that it's hell.

b) no type safety or contracts which is hell when working with other developers.

c) indentation issues which are totally horrible at merge time as it introduces a shit ton more work to do.

Reliability:

a) Some algorithms don't scale the same way as they do in other languages due to the points the article raises. It gets to the point that for something in Java is O(N), it can approach O(N^2) due to all the dict fudging and copying which is not good.

b) It's slow anyway - I mean really slow. If something feels slow, it is slow. PyPy may fix this but (c) below causes an issue as well.

c) Optimisations aren't consistent across python versions (consider how crappy IO was in the first py3k drop).

I wouldn't use Python for a new project now. The only utility I see is quick disposable bits of glue.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by nilliams on Sunday April 14, 2013 @09:31AM (#5546852)
Thanks for elaborating and I hope you also realise I was just using C as an example of another language (a type-safe one). I think a lot of us have encountered 'big ball of mud C code-bases' in our careers which is what tends to spring to mind for me when anyone is discussing code maintainability.

>> Horrible to refactor. I mean really horrible. You don't get everything right the first time and when it comes to fixing that it's hell

I think dynamic languages like Python and Ruby are an absolute joy to refactor. There is generally less code-junk to be worrying about when making refactorings. I realise this is subjective however, I think it's difficult to make a serious case that any one language is easier to refactor than another. Granted, the refactoring tools in IDEs for Ruby/Python etc. are much more limited than say C#.

I hope you won't mind if I don't get into the indentation or type safety arguments. They've been done to death! :)

I think we're in agreement that if you need something to be really fast you should use a different language. I just don't think that's a reason to not use Python for the rest of your app. And of course as others have pointed out the vast majority of us are not writing apps that require super fast algorithms, we're all far too busy doing the same CRUD stuff over and over right :)

I appreciate your insight on a 100kloc Python project though, I have to admit I've not encountered anything of that size. At work we have a much smaller codebase that has already gotten out-of-hand but I believe that's entirely due to the developer responsible, not the language.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by NateDad on Sunday April 14, 2013 @10:00AM (#5546899)
The problem with refactoring dynamic languages is that it's very hard for static code checking to let you know when you've missed a spot.

For example, what functions take class Foo that should now expect class Bar? What functions called method Baz, that now should call Bat?

Static typing makes all of that trivial. You know with certainty, when you've hit all the right spots, because the code won't compile otherwise. Also, a lot of that refactoring can be done automatically through tooling. "Replace all calls of Foo.Baz() with Bar.Bat()". Trivial, done... and it's often impossible to do the same thing in dynamic languages. You have to rely on tests catching everything... and how many of those tests need to be updated now, too? What's testing your tests?

I love dynamic languages, don't get me wrong... but refactoring large code based is way easier to get correct in statically typed languages.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by vidarh on Monday April 15, 2013 @07:35AM (#5550869)
If you need to touch a lot of places for refactoring on a regular basis, that should tell you you're not doing something optimally. If you write your tests so they are dependent on internal details of the other code, that's a warning sign too. Add to that, that at least in my experience, my Ruby code bases tends to end up far smaller than my old equivalent C code, and the problem tends to be a lot smaller than one might imagine.

Yes, you need testing discipline, but you need that with static languages too - if you think you're ok just because the compiler didn't complain.... Well, that's just a false sense of security.

Re:What's Going On (on "Why Python, Ruby, and Javascript are... by pointyhatuk on Sunday April 14, 2013 @10:06AM (#5546907)
My point entirely :)