← Back to context

Comment by impendia

2 years ago

I am an academic mathematician, and I've noticed a huge culture difference between academia (at least in mathematics) and software development.

In the software world, it seems to be universally accepted that everything will change, all of the time, and one needs to keep up. If your dependencies break, it's your responsibility to update those too. Hence software "maintenance", which requires a lot of effort.

In my world, maintenance is not a concern. If I write a paper, then once it's done it's done. Academic papers, too, have dependencies: "By Theorem 3.4 of Jones and Smith [14], we can conclude that every quasiregular foozle is blahblah, and therefore..." You don't have to worry that Jones and Smith are going to rewrite their paper, change their definition of "quasiregular", or renumber everything.

Different cultures. Personally, I prefer my own.

I am a programmer with 22 years of practice and I stand with you.

The churn gets very tiring at one point and you begin to suspect that the people who impose it on you actually have no clue what they're doing and are taking the easy way out because they want to clock out for the week. Which I do understand but pretending that it's for the good of everyone is obviously bogus.

IMO all you scientist folks should work closely with a few programmers and sysadmins and have them author you tools to bring up and down various environments. It's easy and it's much more churn-proof than what we currently do.

I am still in the process of authoring a script to bring up my dev environment everywhere I go, I need to iron out a few kinks in the initial bootstrap (as in, OS and Linux-distro specific ways to install several critically important tools before installing everything else) and I'll just provision a few laptops at home and a VM in the cloud and be done with it.

It's annoying but ultimately a worth investment. Look into it and ask your dev friends.

> I am an academic mathematician, and I've noticed a huge culture difference between academia (at least in mathematics) and software development.

> In the software world, it seems to be universally accepted that everything will change, all of the time, and one needs to keep up. If your dependencies break, it's your responsibility to update those too. Hence software "maintenance", which requires a lot of effort.

> In my world, maintenance is not a concern. If I write a paper, then once it's done it's done. Academic papers, too, have dependencies: "By Theorem 3.4 of Jones and Smith [14], we can conclude that every quasiregular foozle is blahblah, and therefore..." You don't have to worry that Jones and Smith are going to rewrite their paper, change their definition of "quasiregular", or renumber everything.

> Different cultures. Personally, I prefer my own.

Those are the problem with SW developers: they don't have a concept of a finished product and (some of them) never finish the product.

  • Because our software is generally not deployed into "finished" environments. Even the Voyager probes get software updates to deal with their changing environments and hardware!

I think this is somewhat unfair. Software doesn’t “require” maintenance anymore than anything else does. If you’re happy with the state of the world as it exists at the moment in time you create the software, it will continue to run that way for as long as you have working hardware to run it on. A compiled application on a computer with a frozen set of software is just as permanent as any academic paper.

The problem is most people aren’t happy with stuff being the same way forever. They want new things and new updates, and that requires changes which in turn creates maintenance.

Software maintenance is less comparable to a single academic paper than it is to the entire field of academia. Sure Freud's papers are all exactly as they were when he published, but if you want to be in the field of psychology you’re going to have a bad time if that’s the most recent version of your academic “software stack”

  • From what I've read on HN, software certainly requires maintenance if you're hoping that others will buy or use what you've developed. That's the comparison I'm trying to make.

    > The problem is most people aren’t happy with stuff being the same way forever. They want new things and new updates

    I agree, from what I can tell. Personally I'd prefer that software UI not change nearly as often as it does, but I concede that I'm apparently in the minority.

  • Perhaps if the software is more isolated? Many good points here, and I absolutely can avoid a lot of maintenance by my choice of languages and libraries, BUT just being online (or even on-network) forces quite a bit of maintenance.

    I'm generally writing web apps, requiring me to keep up with a stream of security updates just to stay online: browsers deprecated TLS 1.0 and 1.1 [1], browsers require TLS certificates to be renewed ~annually, languages only fix security vulnerabilities for the last few releases, etc. Even linux kernels are getting shorter support going forward. [3]

    [1] https://security.stackexchange.com/questions/237688/when-wil...

    [2] https://www.digicert.com/faq/public-trust-and-certificates/h...

    [3] https://www.linuxjournal.com/content/linux-kernel-reduction-...

    • I feel like all of this falls under "people don't want stuff to stay the same". Being online at all is a commitment to being in an ever changing environment, especially with respect to security and encryption. Fixing security vulnerabilities is declining to accept software as it is. Likewise, kernel support only matters if you're upgrading the hardware. To use an extreme example, you can (provided the hardware itself is still working) take a C64 from the 80's, plug it into the wall and use it as if it were 1984 all day long. Everything will work just fine. You might not be able to connect to any BBS anymore, but that isn't because the software required changes or maintenance to keep working, but because society itself changed and no one offers a C64 compatible dial-up BBS. To bring it to a physical analogy again, your 1950's encyclopedia set won't have anything to say about the internet or cellular technology, but that's not because your encyclopedia doesn't work any more, it's because the world around it has changed.

Formal mathematics is the ONLY aspect of human life where you can get something “right” and it doesnt change.

Supremely unrealistic expectation anywhere else

I think you missed the point of reproducibility. If a stack is maintained with the mindset of reproducibility, then it will do exactly what you said, that it will never change and always works and don’t need to be maintained.

If the software stack is reproducible, then you decouple that to the environment and hence upgrading the OS shouldn’t break it.

(That said it is very difficult to be 100% reproducible, eg your hardware can change from x64 to arm64… that’s why people are suggesting docker. I don’t like docker in the sense that it is a lazy approach to make things reproducible. But the guarantee there is very high.)

> Different cultures. Personally, I prefer my own.

For science, not really - what use is the GP's partner's data if it cannot be reproduced?

I know, I know ... scientists go ahead and publish non-reproducible studies anyway, but it's widely acknowledged as bad science.

For scientists, containers seem to be a much more important than just about anything else, especially for publications, because reproducibility is at the core of the work being done.