HN user

mazelife

550 karma
Posts5
Comments116
View on HN

I'm a software engineer working with scientist-turned-programmers, and what I've experienced is also exactly the opposite of the author. The code written by the physicists, geoscientists and data scientists I work with often suffers from the following issues:

* "Big ball of mud" design [0]: No thought given to how the software should be architected or what the entities that comprise the design space of the problem are and how they fit together. The symptoms of this lack of thinking are obvious: multi-thousand-line swiss-army-knife functions, blocks of code repeated in dozens of places with minor variations, and a total lack of composability of any components. This kind of software design (or lack of design, really) ends up causing a serious hit to productivity because it's often useless outside of the narrow problem it was written to solve and because it's exceedingly hard to maintain or add new features to.

* Lack of tests: some of this is that the scientist-turned-programmer doesn't want to "waste time" writing tests, but more often it's that they don't know _how_ to write good tests. Or they have designed the code in such a way (see above) that it's really hard to test. In any case--unsurprisingly--their code tends to be buggy.

* Lack of familiarity with common data structures and algorithms: this often results in overly-complicated brute-force solutions to problems being used when they needn't have and in sub-par performance.

This quote from the author stood out to me:

I claim to have repented, mostly. I try rather hard to keep things boringly simple.

...because it's really odd to me. Writing code that is as simple as it can be is precisely what good programmers do! But in order to get to the simplest possible solution to a non-trivial problem you need to think hard about the design of the code and ensure that the abstractions you implement are the right ones for the problem space. Following the "unix philosophy" of building small, simple components that each do one thing well but are highly composable is undoubtedly the more "boringly simple" approach in terms of the final result, but it's a harder to do (in the sense that it may take more though and more experience) than diving into the problem without thinking and cranking out a big ball of mud. Similarly reaching for the correct data structure or algorithm often results in a massively simpler solution to your problem, but you have to know about it or be willing to research the problem a bit to find it.

The author did at least try to support his thesis with examples of "bad things software engineers do", but a lot of them seem like things that--in almost every organization I've worked at in the last ten years--would definitely be looked down on/would not pass code review. Or are things ("A forest of near-identical names along the lines of DriverController, ControllerManager, DriverManager, ManagerController, controlDriver") that are narrowly tailored to a specific language at a specific window in time.

they care too much about the quality of their work and not enough about getting shit done.

I think the appearance of "I'm just getting shit done" is often a superficial one, because it doesn't factor in the real costs: other scientists and engineers can't use their solutions because they're not designed in a way that makes them work in any other setting than the narrow one they were solving for. Or other scientists and engineers have trouble using the person's solutions because they are hard to understand and badly-documented. Or other scientists and engineers spend time going back and fixing the person's solutions later because they are buggy or slow. The mindset of "let's just get shit done and crank this out as fast as we can" might be fine in a research setting where, once you've solved the problem, you can abandon it and move on to the next thing. But in a commercial setting (i.e. at a company that builds and maintains software critical for the organization to function) this mindset often starts to impose greater and greater maintenance costs over time.

[0] https://en.wikipedia.org/wiki/Anti-pattern#Big_ball_of_mud

Because the music of the past was written in a notation that’s different from that used today, it’s necessary to translate and input every mark of the original score – notes, dynamics and other expressive marks – into a music notation software to produce a modern score that can be easily read by today’s musicians.

I guess the key word is easily read. That score looks perfectly readable to me, although modern musicians might find the spacing somewhat cramped

[he] described an expanding and self-replicating bureaucracy that is growing ever more expensive to maintain

This seems to me a key piece of the problem. Rises in tuition have massively out-paced inflation while salaries for tenured professors have not seen anything even close to that kind of growth in the same time period. In fact most institutions actually employ fewer full-time faculty than they did 20 or 30 years ago. The answer to the question "where is all this money going?" doesn't have a mono-causal explanation, but an ever-expanding self-perpetuating bureaucracy is a significant factor. And it's not just academia; I've heard similar concerns from physician-acquaintances about healthcare. The astonishing growth of middle and executive managers at Johns Hopkins has been an ongoing topic of discussion with department-chair friend of mine for years.

I think we've barely begun to reckon with the costs the MBA-ification of major institutions has had on the overall welfare of the US public.

Yes, a wok is a somewhat strange choice for that dish. I'm not really an "expert" on Pinoy food but my partner is Filipino and I've seen this made many times by him, his family, or even friends of his when we have visited the Philippines and never once did a wok come into it. Either a dutch oven our a large saucepan is what I've seen used, since you really want to cover it so it braises evenly. The sauce is always fairly thin as well, nothing approaching a caramel-y consistency.

I don't get the sense that those varietals will only grow in Guimaras, but the locals will tell you that it's not just the varietal but also the specific soil, micro-climate, and cultivation methods of the island that makes them special. I have no idea to what extent that's true, but while I've had lots of good mangoes all over the Philippines, the ones from Guimaras were definitely the best.

Well in the spirit of a friendly flame war, I'm going to put my stake in the ground and say that Carabao mangoes from the Philippines and specifically the Galila, Tablan, and Fresco varietals from the island of Guimaras are the best in the world. Twice I've been lucky enough to end up in Guimaras--a tiny island off the southern coast of Panay--once I ended up there during the annual Manggahan Festival just by lucky happenstance. And my god, are the mangoes amazing: perfumey, floral, intensely sweet; they're the Sauternes of mangoes.

They are quite delicate and my understanding is that almost all the exports from there end up in Japan. I've certainly never been able to find them on either coast of the US. They've somewhat spoiled me for mangoes now as everything you can get here is rather insipid by contrast.

You managed to perfectly put into words something I was trying to articulate in my own comment on this thread about the limitations I kept running into with open source notation tools as alternatives to Sibelius. They always felt like they traded control for simplicity, which ultimately made them feel like kind of a "toy" rather than a professional tool.

I'm reticent to mention specific engraving problems for fear that a neophyte will take my 10 seconds of examples as a complete set

I could not agree more. Correctly engraving music is hard! If someone wants to get a sense of all the things that a professional-grade tool would need to handle, Gardner Read's "Music Notation: A Manual of Modern Practice" is kind of the gold standard here. 453 pages that solely cover how to correctly notate music. I've been doing this for years and I still consult it fairly regularly.

I've stubbornly stayed on Sibelius 6 for years, but it no longer works on OS X Catalina, so I was pondering biting the bullet and upgrading to 8. But after seeing this...

Does anyone have any recommendations for a _real_ alternative they've used?* I took a look at MuseScore a couple of years ago and the impression I got was that it was fine for casual usage and for producing fairly simple scores, but lacked a lot of features. (I found that to be the case LillyPond as well.) Dorico looks more promising, but I'm curious what people who've used it heavily think.

I didn't even know that Finale was still around, but that was the first notation software I learned. Ironic that the reason Sibelius was able to trounce Finale in the marketplace so many years ago was mainly because the UI was so much easier to use and more intuitive. And now it's succumbed to the same problems.

*Features I'd like to see: parts generation, graphical score options, midi-based entry, and something that offers good default engraving behavior out-of-the-box but also lets you tweak everything to your liking. I typically sketch things out on on paper first, so I care less about "composition features" and more about being able to produce scores that are correct and that allow me to notate everything I would want.

“Black Lives Matter's Effect on Police Lethal Use-of-Force”

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3767097

Give it a read, maybe it will change your mind. Organizations like BLM were formed to organize concerted protest and political pressure at a community-wide level. That is to say, it’s a direct result of people doing what you suggest they do: “people should care about what they do with themselves, their family, and their community first.”

I’ve found Charles Rosen’s book _Arnold Schoenberg_ to be an excellent introduction to the composer. It’s a short, well-written book. Not so much a biography, as an exploration of the music and the various phases of the Schoenberg’s musical language; from the early tonal works, through free atonality, and finally serialism. And the most valuable part for me was the way in which it contextualized serialism in light of everything that had come before in western music, and some of what was to come after, and the way it presents it as a kind of an inevitability for Schoenberg. It’s not heavy on theory and people with only a cursory knowledge of music could get something out of it.

My lawn definitely has it's share of crabgrass which I don't mind. But Kentucky blue grass and clover (both native) seem to do better. Which unfortunately means mowing.

Along with other commenters here, I've given up on trying to have a perfect lawn. As long as it's green, it's fine with me. I'm also trying to gradually reduce the amount of property given over to lawn by a little bit each year as I expand beds of native plants. In my experience here in the Mid-Atlantic region the upkeep in terms of time between a lawn and garden bed is pretty much a 1:1 tradeoff. Occasional weeding and a one-time day spent planting annuals in the Spring is about the same as having to mow every 1.5 weeks.

I dislike the wishy-washy passive construction in their summary graf:

In the massive global network of manufacturers, distributors, sellers, and resellers, it can be nearly impossible to tell who’s actually responsible for getting any given product into your living room.

...because it completely diffuses any sense of responsibility. It's not that "it can be impossible to tell who’s actually responsible." It's that this global network was deliberately designed to make it impossible to hold anyone accountable; as far as Amazon's concerned, that's a feature, not a bug.

The only way this may change is if we change how we pay for our care.

Agree 100% on this. The incentives in a fee-for-service world are just so badly misaligned with the goals of functional healthcare system.

Even the value based programs that CMS has implemented are really fee for service with a look back and adjustments to payments made based on savings that were encountered.

So CMS is acutely aware that merit-based adjustments on top of a fee-for-service model is an incremental improvement (and a very modest increment at that). So within the Medicare's Quality Payments Program, there is MIPS (Merit-based Incentive Payment System) which is exactly what you describe and where most providers default to right now. But there are also several APMs (Alternative Payment Models) that providers can elect to participate in, some of which have full or partially-capitated payment mechanisms where there is a fixed fee per beneficiary, rather than the fee-for-service model. Everything I've heard from CMS suggests that APMs are the future and fee-for-service needs to go away. That's not going to happen over night but MIPS is the narrow end of the wedge to get us there.

Django 2.2 7 years ago

Also #7, "want to use graph databases? noSQL? good luck" Is incorrect. How do I know? I've built a non-trivial Django app with a Neo4J backend. It included an API using Django REST framework. There are some parts of Django that are tied to the ORM, mainly the admin and some generic views. But you can certainly use Django without those pieces.

I hate to sound mean spirited, but I have a hard time being sympathetic to intelligent well educated people who chose to pursue careers that obviously don't pay well.

I think the issue that the author is raising is that in the not-so-distant past, these jobs did pay well. They weren't wildly lucrative, but one could live comfortably as an academic. At some point though things started to change. College costs have massively outpaced inflation in the last two decades [0] and yet with all this extra money sloshing around in the system, salaries for tenured professors have not seen anything even close to that kind of growth in the same time period [1]. In fact most institutions actually employ fewer full-time faculty than they did 20 or 30 years ago, shifting more and more to part-timers and adjuncts [3].

There are a lot of people in this thread saying "it's just supply and demand!" and that's part of the story, but it's not the whole story. Conscious choices were made by university administrators, trustees, and boards to hollow-out and undercut the professorial class, even as they have massively expanded their own bureaucratic and administrative class, gone on building sprees, and spent lavishly on student amenities. I think it's fair for us to question the morality of this and to question whether the result of all this has been a net gain or loss for the cause of higher education.

You chose to study medieval [sic] literature.

That kind of attitude towards the humanities and academia in general is distressing to me, but all too common these days. I think it's also a bit shortsighted as what's happening to academics is part of a larger hollowing-out of the middle class in this country; hardly something to be celebrated. Today it's college professors, but it's not at all unlikely that in a decade or two people will be saying similar things about people who "chose" to study software engineering.

[0] http://www.bloomberg.com/news/articles/2014-11-13/college-tu...

[1] http://nces.ed.gov/programs/digest/d13/tables/dt13_316.10.as...

[2] http://nces.ed.gov/programs/digest/d13/tables/dt13_315.10.as...

It's kind of funny to me that every single one of these more or less came true with one notable exception: "Have you ever carried your medical history in your wallet?" As it stands today, at least in the US, most people's medical history is still fragmented across dozens of proprietary, non-interoperable EMR systems or locked away in paper charts in doctors' offices. I can't think of a single company that's tried to play in the personal health portal space—Google included—that hasn't failed utterly.

Digitization of health data has increased massively since 93' of course, but the landscape is still completely Balkanized and there is a growing body of clinicians who believe healthcare IT is actively making healthcare worse.[1] Put another way, the idea of a complete, centralized, useful medical medical history being available for everyone in the US still seems like a pipe dream. Interesting discussion to be had about how, in this particular industry, progress has been so slow...

[1]https://www.newyorker.com/magazine/2018/11/12/why-doctors-ha... and https://www.nytimes.com/interactive/2018/05/16/magazine/heal... for example

Yeah, it's hard to take anything in this article seriously when you're one line into it and the premise:

"Of the well-known composers of the 19th century, Fryderyk Chopin is the only one whose complete works continue to be played regularly"

...is incorrect. There's not a single composer whose "complete works" get regularly played, and even given Chopin's fairly small catalog (for a major 19th century composer) there are plenty of marginal works that rarely get performed. Considering his long and respected career as a music critic and author, I'm kind of surprised to see Terry Teachout's byline on this.

This gets us classifications all the way from "no starch at all" (i.e. soup) to "non-starch surrounded on all sides by the starch" (i.e. calzone). But I posit the existence of an eighth category... that is to say the inverse of the calzone, which would be "starch surrounded on all sides by a non-starch"? An anti-calzone, if you will. Seems rather rare, but not impossible (e.g. turkey with stuffing).

I think price transparency is a bit of a red herring. That's not to say I don't support the idea of requiring hospitals to be upfront about costs, but it isn't going to fix issues with ER visits referenced in the Vox article. Emergency medical treatment is not really a consumer good, where if you don't like the price your can shop around or just decline to spend money. What's more, there is massive information asymmetry. If a physician diagnoses you with X and recommends treatment Y, you're not in a position to evaluate whether there's some cheaper option Z instead. Price transparency is great for elective care, but most medical treatment is not elective in nature.

A while back our company switched to the "homework" format for evaluating software engineering proficiency because we felt like it took a lot of stress off of candidates to write code in an unfamiliar environment (or worse, on a whiteboard). And I feel like it's worked out really well. But we have pretty strict criteria for any homework problem: it needs to be a simplified/toy version of something we'd actually ask the person to do if hired, and it needs to be something that a qualified candidate could easily complete in an hour.

The code itself is, of course, valuable for helping us to evaluate, but honestly some of the best signals we get come from the open-ended discussion that results from us talking with the candidate about their code when they are done: "imagine this file you're processing is 100TB instead of 100kb? Would you change anything?" or "What if this clean data you've been given to work with had this or that issue, what might you do?"

My only point of disagreement with this article is that it seems to assume that a homework problem has to be really time-consuming or burdensome, but there's no reason that has to be the case. To me employers who are asking candidates to spend hours or days on homework are of a piece with ones who ask people to solve tricky, unrepresentative computer science problems on a whiteboard: they reveal that they don't really know how to interview people and they don't have much respect for their candidates.

When I hear someone (having, by their own description, a front-row seat for these events) reduce the civil-rights movement to this:

“What I saw was a number of bad laws called into question and ultimately removed by acts of courage and wise restraint on the part of the victims of those laws.”

…as though the white-supremacist, apartheid state that existed in the south at the time was nothing more than a few pesky laws that had all gotten cleared up by 1968, I have to seriously question that person’s powers of observation. It’s such an almost perverse misunderstanding of history that it has be deliberate, right? Any time someone starts out with a premise like, “the civil rights movement, like a spiritual oil spill, left a vast residue of guilt in its wake,” and then proceeds from there, you know it’s going to be a long read.

Sure, there’s an attempt to graft some sort of philosophical backbone to the piece through this (nonsensical) distinction he makes between “appeal[s] to conscience” and ”appeal[s] to guilt,” but it’s confusingly handled and doesn’t go anywhere. Mainly what stands out for me is the relentless lack of empathy that runs throughout this article, which is really more in the way of a rant the a serious argument, anyway.

I think there’s a philosophical and moral argument to be had about victimhood, and the problematic nature of it, but you need to argue honestly. One sentence after he glibly absolves the government of responsibility for the AIDS crisis, he says, “whereas once the idea was to shake off victimhood through courage and organization, nowadays the idea seems to be to enjoy it for its emotional effects,” as though ACT UP never existed. In other words, you can make an argument, but you don’t get to rewrite or erase history that’s inconvenient to your thesis, which he does consistently. It’s disappointing this made it to the front page of HN, it’s a pretty unpleasant, dishonest piece of writing.

Seconded on the Aeropress. It beats the French press, which it most closely resembles, in pretty much every metric: you can grind the coffee more finely which gives you better extraction, and you can use less of it to get coffee of the same strength. It's also faster and easier to clean up. And to my palate, it just tastes better.

Before I even read the article, I wondered how may of the bugs detected would be due to JavaScript's implicit type coercion rather than specifically dynamic vs. static typing issues. Sadly the article doesn't seems to say, but I thought it telling that the one example they gave:

  function addNumbers(x, y) {
    return x + y
  }
  console.log(addNumbers(3, "0"))
...of a bug that type annotations can detect has nothing to do with dynamic typing! As you point out there are plenty of dynamically typed languages (e.g. Python) where this would raise an exception. Now you could make an argument that in a static vs. dynamic context yo'd be talking about a compile-time vs. a run-time error, but strictly speaking, the bug here (a function returning a nonsensical value) has nothing to do w/ the kind of type checking performed. Static/dynamic typing and strong/weak typing are orthogonal issues and it's a pet peeve of mind when people sort of muddle them together as they do in this article. FWIW, I think there are decent arguments to be made on both sides of static/dynamic divide, but weakly-typed languages have always just felt like a terrible idea to me that allows careless thinking about data types to creep in all to easily.