Hacker News new | past | comments | ask | show | jobs | submit login

> As always, it's a matter of using the right tool for the job.

Nice in theory. In practice a manager will ask you to build A, then later they will ask you to add B and C, and these components should interact seamlessly of course. If you chose your language based on A, then you might get stuck on B and C.




Some of my favorite organizations have been the ones where someone senior picked a very tiny number of "official" languages early on, and established clear rules about when to use which. Some examples:

- "Our web apps get written in Typescript."

- "Our data science gets written in Python."

- "Our inner loops get written as Rust CLI tools that contain no business logic." (Or whatever. It depends on the problem domain.)

This works because TypeScript, Python and Rust are all very good at certain tasks, but they're each also fine general-purpose languages with lots of third party libraries. If you do somehow wind up writing a webserver in Python, you'll be fine. Of course, something like Haskell is a deeper commitment with more tradeoffs, and it's the wrong answer for most organizations. (But if I were mathematically modeling the pricing of complex derivative contracts, Haskell would make the list.)

But this is why good senior people with taste are so useful, and why competent technical management is worth its weight in gold. Sometimes you want a toolbox with 2 or 3 well-chosen, versatile tools. And sometimes you get organizations that try to pound in nails with a screwdriver.


It sort of makes sense. If things can still change. Have you never been at a company where the above list was:

Our web apps get written in Perl (later added: with jQuery for FE interactivity)

Our data science gets written in Oracle stored procedures

Our core business logic is written in Oracle stored procedures!

Fat clients are written in Smalltalk

These were arguably even sort of well chosen at the time. (I won't say which company this was as that would identify me and I changed some details but this is a real life example)


In such an environment, there is usually next generation after next generation of these software types, with upgraded (or at least updated) basic technological choices. Some of these choices are recent and possibly bleeding edge, some are old and possibly only good at that time, some prove misguided immediately or in hindsight.

For example I've seen:

  - COM and ASP.Net to Java and JSF (general web apps)
  - Forté 4GL (look it up, it was very interesting) to J2EE (general enterprise software)
  - MIDP Java to React Native, following mobile phone evolution (mobile app front ends of general enterprise software)
  - HTML frame messes to Java applets to JavaScript interactivity (high profile public web site)
  - ColdFusion, or something of the sort, to Sharepoint (another high profile public web site)
  - SharePoint to a BPEL workflow engine (important workflow-oriented application)


People keep dismissing COM, unaware that all major Windows APIs since Vista are COM based, even WinRT.

Not using COM for native programming on Windows is being stuck with Windows XP.


In my case there were true believers using their own COM components to complicate the architecture of web apps and web services, without the slightest interest for Windows APIs beyond "we are stuck with a fun server OS".


I was somewhat involved in this process at an org I worked at, the thing is, some languages really are the best tool for the job, and trying to build something in the wrong language can really hurt software quality or reliability. That said, I agree you should still try to standardise to a reasonable degree.


You mean, your manager calls you for an embedded software project, and next thing you know you have to turn your code into an user facing web application?


Stranger things have happened. At a previous job there was a 20+ year old codebase that targeted embedded Windows CE, which it was requested to be used as the backend of a mobile app. The solution was a bit Heath Robinson, but you could remote desktop onto the server and watch the windows flicker as they processed web requests as if they were input sequences.

Was this mad? Yes. Was it quicker to market than a rewrite? Yes.


Translation note: "Heath Robinson" is pronounced "Rube Goldberg" in en/us.


Also, if things do move this far away from the original vision -- and it can happen especially in a start-up -- that's a rare case where "total rewrite" is a valid software engineering strategy that can deliver benefits out-weighing its cost.

I've done a few total rewrites now, and the only one I am sure was a good idea was for this reason (DPX, the Java re-implementation of Garlik's core software before it was purchased by Experian Consumer Services many years ago).


I have worked for someone that believes you should rewrite every five years or so, just do the current team knows how it works and also do not needed stuff can fall away. I think it presupposes enough modularity that you can do it without having everything in the org have to change.


Business logic features are rarely constrained by the choice of language. All that really changes are probability of implementation error and ease of implementation. I’ve rarely had the experience that a particular business capability is easy in one language and hard in another language, but vice versa for a different feature.


Are you mentally defining "business logic" as the 20 or so lines of code in a program that are completely independent of all input, output, OS libraries, and frameworks?

Pretty much every app, driver, and framework I've worked on across the web, desktop, and mobile has been mostly glue holding different components together. Choosing a different language would require a nearly-complete rewrite in every case except for a tiny section of independent interesting logic (and of course, if you arbitrarily picked some meme language for your "business logic" you'd have to write more glue code to attach it to the rest of your software..)


It sounds like the kind of code we're writing is very different. I'm definitely not just gluing things together, and 90% of the stuff I am gluing uses some kind of language-agnostic interface like JSON over HTTP.


Most of my code is probably glue code. My largest consideration is making things scale, which makes the glue code larger and more complex.

Anywhere you're e.g. dealing with an eventually consistent database... that is not business logic, that is all glue code that exploded due to scaling concerns.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: