Speaking as a data scientist and not a software engineer, I think Jupyter is incredibly valuable and I've been excited to see it develop pretty quickly in the few years I've been using it.
I agree with you that it's not a tool for writing software. It's probably best thought of as a really good REPL. And there are tons of uses cases for just that (at least in my discipline): analyzing an experiment, pulling data from a DB and plotting it, sharing boilerplate code, sharing analyses.
Sometimes I use it to test something out in isolation—something that I want to see functioning outside of the larger context of a production system—or to run a local version of an application, but that's not my primary use case.
You correctly observe that it's not a good fit for the tasks you have at hand, but I hope the above illustrates that there are lots of tasks that it's a great tool for.
I understand what you're saying. I agree that there are situations where it's very useful, and I defer to you as having more recent experience regarding what those are. However, it isn't just the "tasks that I have at hand". Half of my point is that, even in data science contexts, one ought often to minimize the amount of work done in a notebook. To take your scenarios, I agree with "pulling data from a DB and plotting it". But I don't agree with "analyzing an experiment". I may not do data science now, but I did before. "Analyzing an experiment" involves debugging, and it is important that the analysis is correct, and repeatable for publication/distribution. So I do maintain that for any non-throwaway code, everyone is well-served by embracing traditional engineering discipline for the debugging and verification challenges that will inevitably crop up.
I agree with you that it's not a tool for writing software. It's probably best thought of as a really good REPL. And there are tons of uses cases for just that (at least in my discipline): analyzing an experiment, pulling data from a DB and plotting it, sharing boilerplate code, sharing analyses.
Sometimes I use it to test something out in isolation—something that I want to see functioning outside of the larger context of a production system—or to run a local version of an application, but that's not my primary use case.
You correctly observe that it's not a good fit for the tasks you have at hand, but I hope the above illustrates that there are lots of tasks that it's a great tool for.