| ▲ | bri3d 3 days ago |
| I think the author almost contradicts themselves; they reach the salient-but-obvious conclusion that rewriting a product is almost always a bad idea and that rewriting a product only to change programming language is _always_ a bad idea, that tribalism is a poor decisionmaking framework, and that leadership by arbitrary decree is stupid. Great! These are age-old lessons that people somehow seem to forget, so seeing them reiterated is fine. Then they turn around and claim that choosing a programming language is the most important thing you can do, and that you'll need to Like and Subscribe to learn more about it... I've been through tens of rewrite projects, successful and unsuccessful, and seen projects and products at almost every scale, and I cannot agree that programming language choice is a primary driver in a product's success or failure. Even extending this thesis from language to framework and ecosystem, where there's perhaps a _tiny_ bit of signal, still doesn't really lead to a meaningful conversation. The main driver of a project's success is almost always driven by: the composition of employees working on the project, and the competence of the people architecting the project. Don't get me wrong - to an extent, some languages (especially more niche ones) drive hiring and what kind of employee you get, but this effect is dwarfed by who works on the project and how well it's managed. |
|
| ▲ | ludicity 3 days ago | parent | next [-] |
| This is a good take. In the consulting context, I've quickly realized that most problems at a business can be broken down into "this will destroy the project on its own" and "this is an annoyance to a good engineer". Language choice is basically always in the latter category, whereas poor management or one egotist is frequently in the former. Like, my team doesn't know anything about Java, but we COULD ship in Java if forced to. We can't ship if the feedback loop is a 30-minute CI pipeline because there is no way to have a local dev environment. |
| |
| ▲ | Ocerge 3 days ago | parent [-] | | My team ships with a multi-hour CI pipeline that works 50% of the time and effectively zero local development. It's awful in almost every way developer experience-wise, but rock bottom is deeper than you think! | | |
| ▲ | seemaze 3 days ago | parent | next [-] | | Lol, that sums up the human experience. You should sell bumper stickers: "Rock bottom is deeper than you think!" | |
| ▲ | skydhash 3 days ago | parent | prev | next [-] | | I had local development in a previous job, but you had to start a whole Kubernetes cluster. No unit tests, but a whole suite of e2e tests. And forget about debuggers as it was all microservices. | | |
| ▲ | pjmlp a day ago | parent | next [-] | | When using Java or .NET, it is possible to plug debuggers into microservices, but that needs to be taken into account when designing their Dockerfiles. Just as heads up for others. | |
| ▲ | fragmede 2 days ago | parent | prev [-] | | They may not have existed back then, but between kind, and either Tilt or Skaffold, it's at least not as bad as it once was. |
| |
| ▲ | connicpu 2 days ago | parent | prev | next [-] | | My team reimplemented a stripped down binary of what our primary service does just so we could run it on our local machines. Otherwise it would take up well over 100GB of RAM. Iteration was a lot more annoying before we did that :) | |
| ▲ | bluGill 3 days ago | parent | prev [-] | | I remember being there and the large amount of work many people did to make things better. Dig in for a few years and you can too. |
|
|
|
| ▲ | OkayPhysicist 3 days ago | parent | prev | next [-] |
| In my experience, a language switch rewrite can be a benefit only when switching from a dead ecosystem to a living one. For example, migrating a web app from a language that predates Unicode to something that won't require a bunch of scaffolding around every user input sometimes is worth it. Moving from LABVIEW to a real programming language that integrated with remotely modern development tooling was worth it. Switching from C++ to Rust? Probably not. |
| |
| ▲ | imtringued 2 days ago | parent | next [-] | | Your final example feels wrong. Rust provides features that are basically unmatched by the fast majority of C++ and Rust competitors. I've also been soured enough on C++ to the point where rewriting an entire ecosystem in Rust seems like less effort than to figure out how to make the decrepit C++ one work for my purposes. You spend weeks trying to install a C++ library only to realize that it is not fit for purpose and then you spend another week on the next one, until you've tried most of them and realized they are all kind of bad in one way or another. Even if they worked as advertised, you're already going far beyond the intended use cases of the existing libraries so why limit yourself by the past? | | |
| ▲ | OkayPhysicist 2 days ago | parent | next [-] | | Don't get me wrong: Starting a new project, I'd choose Rust hands-down. But rewriting a massive project is a massive investment, and unless there is something extremely deficient in the language you're currently using, that there isn't sufficient tooling to work around, it's probably not worth it. | |
| ▲ | pjmlp a day ago | parent | prev | next [-] | | Sure, if we forget about the ecosystem in industry standards, IDE tooling, libraries, and training costs in existing industries where C++ is the standard. Comparing language grammars on their own isn't enough any longer. | |
| ▲ | cozzyd 2 days ago | parent | prev [-] | | what C++ libraries take weeks to install?
It's true that C++ compile times are atrocious but even that is over the top :). |
| |
| ▲ | bmitc 3 days ago | parent | prev | next [-] | | > Moving from LABVIEW to a real programming language ... Switching from C++ to Rust? Probably not. Weird. LabVIEW is a real programming language. And both LabVIEW and Rust make entire classes of bugs that you often hit in C++ go away, especially for concurrent programs. > remotely modern development tooling I would make the argument that it is the tooling, i.e., Git and Diff, that is ancient and not remotely modern. Continually demanding that anything worth source controlling is text-based, and even further line-based, is as antiquated as it gets. | | |
| ▲ | bri3d 3 days ago | parent | next [-] | | > Continually demanding that anything worth source controlling is text-based, and even further line-based, is as antiquated as it gets. Do you have examples of working version control for non-text programs, including the ability to combine work from two parallel workstreams (aka, merge)? I worked for a long time at probably one of the largest companies using non-text based programming and version control was never even close to solved, and my subsequent forays into the literature when I worked in the "no code workflow" space still came up empty handed for working solutions here. We always fell back to "try to represent the structure of the change in some text-based way." | |
| ▲ | OkayPhysicist 2 days ago | parent | prev [-] | | Spoken like someone who's never worked on a large-scale LABVIEW system. A moderately sized codebase (equivalent to a project with a million-odd lines of code) ends up with a project containing tens if not hundreds of thousands of files. Each file opens up two windows, so if you're working on anything nontrivial you're going to have dozens and dozens of windows open at a time. Compiling such a project takes upwards of an hour, and you can't rely on the interpreter environment because it has observably different behavior than the resulting builds (oh, and the compilation process happens in the same process as the IDE, so that's completely bricked during that hour or two). No one ever names their wires, so there's no variable names anywhere. To see the name of a subvi (think function), you have to hover over it. Sure there's a little picture, but that just means instead of just merely naming my functions I have to draw a little picture. Don't even get me started on wire routing, which is a crucial, manual process for any vi of non-trivial complexity. Then there's the fundamental engine bugs, which National Instruments' response to hearing about is approximately "get fucked". Like, for example, the GUI rendering breaking in subtle ways when Windows has an update queued. Imagine getting a bug report that consists of "We can't do feature X", and trying desperately to figure out if your code is wrong, or if your customer's just an idiot, only to discover that 0.1% of the buttons in your project just... don't exist sometimes. Then there's version control, which is rudimentary at best. In order to compare two files, you need to load both files, which even with lazy loading takes what feels like an eternity. Merges? No automation whatsoever. Every merge is manual. Extremely useful features (like metaprogramming, which is important because of just how miserable writing LABVIEW is) are locked behind shoving obscure keys into ini files like "ABANDONALLHOPEYEWHOENTERHERE=1" or "SuperSecretPrivateSpecialStuff=true" (That second one is real). Don't get me wrong, LabVIEW has its place as a way to hack together a little control panel to talk to some instruments. But anyone suggesting adding a subvi should be shot, and the project should be rewritten in a real programming language. | | |
| ▲ | bmitc 2 days ago | parent [-] | | > Spoken like someone who's never worked on a large-scale LABVIEW system. That's exactly false. I've single-handedly developed multi-thousand VI projects on different systems, including heavily using the OOP system and actor frameworks. |
|
| |
| ▲ | tcfhgj 3 days ago | parent | prev [-] | | > Switching from C++ to Rust? Probably not. Counter example: https://fishshell.com/blog/rustport/ | | |
| ▲ | bri3d 3 days ago | parent [-] | | FWIW, this was an intelligent rewrite, piece by piece. This is the only way I have ever seen "rewrite it in X" ever work. Fish also isn't a commercial product, so the calculus is a little different. |
|
|
|
| ▲ | WalterBright 3 days ago | parent | prev | next [-] |
| > I cannot agree that programming language choice is a primary driver in a product's success or failure I've rewritten a very large and complex macro assembler program into C. The original developers were gone. Nobody would touch that assembler code. I volunteered. The result was a program that could be maintained and could be ported to multiple diverse platforms needed by the company. I tried to port Optlink (a linker for Win32) from assembler into C. It failed because the market for Win32 programming died, and so I abandoned the project. My Empire game started out in BASIC. Then it was converted to FORTRAN, then PDP-11 assembler, then C on the PC, then D. |
|
| ▲ | seneca 3 days ago | parent | prev | next [-] |
| This is really the heart of it: > Don't get me wrong - to an extent, some languages (especially more niche ones) drive hiring and what kind of employee you get In my experience, the community around a given language is going to significantly influence the sort of typical applicant you get for a job working in that language. Those profile vary a surprising amount, especially for, as you say, niche languages, but also for "beginner" languages. I have seen businesses significantly harmed because they hired what I would term language specific technicians instead of engineers. That's a failure of leader, certainly, but that failure is a lot more likely for certain languages. |
| |
| ▲ | bri3d 3 days ago | parent [-] | | > they hired what I would term language specific technicians instead of engineers. I have seen this too, and I really like the way you phrased it - I think I'll use that in the future! I do think it's an easier trap to fall into with some languages, but I still don't think the language really drives it. I worked on a large-scale Rust project that could probably have been a Go project a while ago and while Language Technicians were a big hiring hazard, after we got one or two we both learned how to manage them and stopped hiring that type of employee (since they weren't what our project needed) and things evened out and were successful in Rust. | | |
| ▲ | seneca 3 days ago | parent | next [-] | | > I do think it's an easier trap to fall into with some languages, but I still don't think the language really drives it. Yeah, in the end poor hiring practices drive it. The language you choose just makes the probability of that failure possibility higher or lower. > I worked on a large-scale Rust project that could probably have been a Go project a while ago and while Language Technicians were a big hiring hazard, after we got one or two we both learned how to manage them and stopped hiring that type of employee (since they weren't what our project needed) and things evened out and were successful in Rust. That tracks with my experience, for sure. Once you learn to spot it, you can mitigate it. | | |
| ▲ | pdimitar 21 hours ago | parent [-] | | Can you give us a bit more details? I'm intrigued by what was spotted and how did it obstruct the company's mission. |
| |
| ▲ | zzrrt 3 days ago | parent | prev [-] | | How is a language technician in Rust even born? I imagine C, Java, Python technicians come from school or other educational materials, but there’s no significant number of people with Rust as a first language, right? Were they just Rust fanatics unwilling to consider other languages? | | |
| ▲ | bri3d 3 days ago | parent [-] | | I'm not even sure "fanatic" was the right word, as most of them actually had a pretty measured take on the state of Rust and were not the sort of aggressive evangelists that people sometimes associate with the language. They were just way more interested in exploring/iterating on/consuming the programming language itself, rather than using it to actually solve business problems. I suppose depending on the connotation of the word "technician" we might be discussing separate people, although it's almost a horseshoe effect where they both loop around into not moving a project forward. |
|
|
|
|
| ▲ | jolt42 3 days ago | parent | prev | next [-] |
| Java didn't exist when I originally wrote C++ code. When it did come around it was easily 4x improvement for a good amount of development (eg. enterprise software). I think you need like 4x+ to be worth switching, and I don't see that between many languages. I do see it between libraries/frameworks though. I think a lot of the problem of switching isn't so much the language, but relearning all the undocumented lessons that were learned the hard way the first time around. |
| |
| ▲ | trenchpilgrim 3 days ago | parent | next [-] | | In my experience so far most languages I've encountered have been similar enough that language choice mostly comes down to "Does it have the APIs I need" and "Do I like the tooling." There are a handful of exceptions where the capabilities of the language are fundamentally different enough to provide a competitive edge. - Systems languages with manual memory management, like C or Zig, where real-time/low-latency performance is important. - Rust and its borrow checker, as an alternative to manual memory management. - A strongly FP influenced language such as a Lisp or Haskell. Especially Lisp macros. Exceptionally good for working with structured data in cases where purity is more important than performance. - The BEAM/OTP architecture for distributed systems (Erlang/Elixir). - Languages with good CUDA/PTX/Vulkan support, for programs that need the GPU. - Assembly. This was a much bigger deal in the past before compilers got good. Today good mostly for educational purposes. | |
| ▲ | abraae 3 days ago | parent | prev [-] | | I had the same experience. I was put in charge of a large ERP rewrite in C++. Being woefully unprepared we dived in and, based on the issues the existing C codes had, the first thing we built was a memory management framework - what I realized much later was basically garbage collection. It worked very well. When Java came along its garbage collection blew my mind. I agree with the 4x factor. |
|
|
| ▲ | jerf 3 days ago | parent | prev | next [-] |
| "I cannot agree that programming language choice is a primary driver in a product's success or failure" I've seen it. There are definitely incorrect language choices for certain projects. It would be fair to say that these cases are themselves often exceptions. Many projects can be equally well accomplished by teams skilled in any language. But there is definitely a set of problems for which you can make incorrect language decisions. I'm going to exaggerate to make the point in an attempt to avoid too much argument about whether or the language would be suitable, but: You do not sit down to write an industry-leading, high-performance database whose top-level implementation language is Python. If your project spec involves running code provided at runtime by users, Go is a fairly poor choice. You can make things a lot harder for yourself trying to be too insistent about what language you'll do your mobile development in, rather than just accepting that there's a very dominant choice in those spaces. I've also seen projects I couldn't prove to you beyond a shadow of a doubt failed due to language selection, but I am fairly certain the project I saw that chose Scala failed primarily for the choice of Scala where it was a bad fit, both technically and for the skillsets of the engineers involved. I've also seen projects nearly fail because they chose databases incorrectly, which I would submit is a fairly similar thing. Mostly because of choosing a NoSQL database "because fast" when they should have used a relational DB. The projects in question didn't fail because they were able to switch in time, but it was a close thing. Part of "the composition of the employees of a project" being responsible for its success is that good engineers pick at least a decent solution to a problem from day one. The aforementioned DB problem, for instance, should have been obvious from the very beginning that it was not the correct choice in their case. There are absolutely wrong choices, that can crash projects both quickly and slowly. |
| |
| ▲ | pyrale 3 days ago | parent | next [-] | | > I've seen it. There are definitely incorrect language choices for certain projects. I guess we can all agree that writing your web application using a fortran framework to generate JS code is a bad idea. But if you pick tfa's second example, picking Go vs. Rust for a new project, the language choice is secondary. Both languages were likely fine unless the project as a specific library requirement. The main criteria to make the choice was likely whether the team had developers with some experience in that language, and whether using that language would make them feel dead inside in the morning when they check in ; and I'm pretty sure developers can be found that make either choice a great choice. The point tfa's making, that picking a language defines culture, the hiring pipeline etc. is fitting neither the first example (team already there, and a rewrite is almost always a bad choice) nor the second example (team also already there, and the culture with them. Pipeline therefore irrelevant). | | |
| ▲ | jerf 3 days ago | parent [-] | | In my first post, the example I really wanted to use was people picking Go for their top-end, competitive-with-anything-in-the-market database. I choose Python just because anyone who would argue that is a good choice is clearly not someone who is in a position to see reason. But I think Go is a serious mistake... it's just one that lets you get to market, unlike Python which never would. But it's still going to end up holding back the company that makes that decision in the end. | | |
| ▲ | Animats 3 days ago | parent [-] | | > the example I really wanted to use was people picking Go for their top-end, competitive-with-anything-in-the-market database. You mean they're writing their own database? Why? That's a huge job and available databases are pretty good. There are multiple open-source choices, all of which work. If they think they're going to compete with Oracle, they need to read the history of Oracle. | | |
| ▲ | jandrewrogers 3 days ago | parent | next [-] | | There are many workloads for which all available database engines are poor. If you have one of those workloads and the esoteric technical expertise, it is entirely plausible to improve performance, scale, etc metrics by 10-100x versus whatever is currently available in the market. 10-100x is qualitative if that is central to your business. Of course, almost no one should attempt this. The number of people with the technical expertise to pull it off successfully is much, much smaller than the number of companies with workloads that would benefit from this. It doesn't have to be an exotic workload. Sometimes the market is just full of weak implementations e.g. graph databases. | |
| ▲ | jaggederest 3 days ago | parent | prev [-] | | There are at least a dozen new databases in the market making decent money that were started this decade. They're just not competing with Oracle. | | |
| ▲ | bluGill 3 days ago | parent [-] | | A large part of success is picking a goal that is obtainable. |
|
|
|
| |
| ▲ | tyleo 3 days ago | parent | prev | next [-] | | While I’ve seen bad technology chosen for projects, it seemed at root more a problem with the people choosing it than the technology itself. | | |
| ▲ | jerf 3 days ago | parent | next [-] | | Absolutely agree. People made the bad decisions. But the bad choices existed. People who don't understand the bad choices are bad choices, or worse, think that there is no possible way there is a bad choice, are far more likely to end up being those people who made bad decisions then people who understand that the decisions mattered. Don't go running around telling people that they can dig the Panama Canal with three toothpicks and a spare weekend, and if they fail, well by golly they just didn't have enough grit and gumption like us awesome folks who could have done it with only two. Tool choice matters. In fact I can hardly process how anyone can be an engineer and think that it doesn't, let alone how they can think it's some sort of engineering wisdom to claim that it doesn't matter what tools you use to do a project. Of course, picking the tool is only the moment the project may fail. It is not the moment the project succeeds; there's still a lot of using it correctly that will be necessary and plenty of further opportunities to fail even with the correct tool. But at least success is within the range of possibilities. You can forstall that possibility entirely on day one with incorrect tool choices. | | |
| ▲ | hn_acc1 3 days ago | parent | next [-] | | Sure, people with ZERO enterprise experience might say - hey, let's write our <main software> in PHP - I had a lot of fun 15 years ago with that, and I'm sure we can make it work.. That's the "3 toothpicks" in your example. But is anyone REASONABLY competent going to do that? They might pick C/C++, Go, Rust, Java, etc. Those aren't a choice between "bulldozers and toothpicks" - they are more akin to choosing between Caterpillar, Volvo or Hitachi as the vendor of choice for construction equipment. They may have some gaps in their specific list of equipment, they may charge too much for one specific tool, your workers may have experience with one, not the other, etc.. Your example should be the textbook definition of a strawman argument.. | |
| ▲ | bri3d 3 days ago | parent | prev [-] | | > Tool choice matters. In fact I can hardly process how anyone can be an engineer and think that it doesn't, let alone how they can think it's some sort of engineering wisdom to claim that it doesn't matter what tools you use to do a project Just to be clear, I wasn't trying to claim this; tooling certainly matters, at the very least, for the happiness and welfare of an engineering team! But, the article tries to claim things like "choosing a programming language is the single most expensive economic decision your company will make" and outside of a few extreme edge cases, I just can't agree with that particular thesis. Even the examples of bad decision-making you pose in your sibling comments, like writing a database in Go or "almost failing" by using sketchy niche datastores, are actually examples of this exact thing: these projects made huge engineering mistakes only to achieve some level of success as a business. Would they have been more successful if they made better engineering decisions? Possibly, but again, language and framework just was not the most important decision or factor driving an outcome. I'm not saying that means we shouldn't care about making good engineering choices; there are easy ways to do things and hard ways to do things, and certainly I'm going to advocate for and work with people and at companies that favor the easy ways to do things. But when it comes to overall outcomes, I'll stand by having seen far more projects sacrificed to analysis paralysis, rewrites, rewrite-related hand wringing, and language/tooling hubris than sabotaged by poor language and framework choices. |
| |
| ▲ | lproven 2 days ago | parent | prev [-] | | > a problem with the people choosing it than the technology itself. Which is, I think, the key point of the OP's article. And my response to this is: We need objective, scientific, real-world measurements of PL efficiency, so that informed judgements can be made free of cognitive bias. This is how science works. Especially medicine. But programmers seem to feel that they are above this stuff. | | |
| ▲ | geodel 2 days ago | parent [-] | | > But programmers seem to feel that they are above this stuff. No, programmers are quite below this stuff. Budgets for medical research, treatments, trials are way more than IT budgets. And for typical IT project the underlying point is even if requirements were wrong, changed halfway , software is malleable enough, to be changed, refactored. And all while it can remain in use even during change cycle. |
|
| |
| ▲ | elchananHaas 3 days ago | parent | prev | next [-] | | I would say, though, that for most programs any one of the most popular languages would do the trick. By this I mean Java, Go, C#. Javascript, Python, C++. All of those are general purpose multi-paradigm languages that you can code almost anything in. That being said, some programs can only be written in one of those. Browser code is JS exclusive, low-level needs C++, secure code needs not C++. Machine Learning needs Python and high performance can't use Python. Some Windows things need C#. Those cases are the obvious ones where there is basically no choice. Beyond those, it is mostly about the team. | | |
| ▲ | lproven 2 days ago | parent [-] | | > I would say, though, that for most programs any one of the most popular languages would do the trick Which of course ignores and contradicts the primary lesson of the chap who founded this company and pays for this website. https://paulgraham.com/avg.html |
| |
| ▲ | binary132 3 days ago | parent | prev | next [-] | | I’m having a hard time envisioning a project that could be killed by choosing Scala that wasn’t actually killed by bad engineering. Scala is pretty easy to write Just Simpler Java in…. | | |
| ▲ | JuniperMesos 2 days ago | parent | next [-] | | I would say that Scala is more complicated than Java because it introduces a number of useful new features to a JVM language. | |
| ▲ | cozzyd 2 days ago | parent | prev | next [-] | | Perhaps it's running on a semi-embedded system... | |
| ▲ | xwolfi 2 days ago | parent | prev [-] | | The fact that it's simpler Java makes it a good candidate for failure: it tries to remove from the code enough to make it hard to maintain. |
| |
| ▲ | lproven 2 days ago | parent | prev | next [-] | | > There are definitely incorrect language choices for certain projects. There is an entire book about it which documents the problems in lavish detail, and it's generally hailed as a classic and a must-read. https://www.dreamingincode.com/ | |
| ▲ | 3 days ago | parent | prev | next [-] | | [deleted] | |
| ▲ | bdangubic 3 days ago | parent | prev [-] | | great team can write amazon clone in fortran. bad team cannot write todo list clone in… well anything :) it is (almost) always people and (almost) never language/framework/… | | |
| ▲ | jerf 3 days ago | parent [-] | | The great team would not have written the Amazon clone in Fortran. There is no engineering justification for such a choice, and "we are swaggeringly awesome engineers who can conquer anything" is not even remotely an engineering justification. | | |
| ▲ | jll29 3 days ago | parent | next [-] | | The parent article's point, though, is that choice of programming language is often NOT driven by justified choices, but is a foregone conclusion because it is part of the identity ("I am/want to be a XY developer.") of someone influential (e.g. tech lead, CTO, VP Eng). One argument I would like to add to this original debate is that I have observed two types of developers: one type tries to stick to one programming language for everything (e.g. Java) and tries to write everythin in that language. They are specialist and they may accrue deep knowledge of the language versions, APIs and IDE(s). Another type of developer, in contrast, maintains active knowledge of a dozen programming languages (C/C++, Java/Kotlin, Python, bash, Rust, Go, PHP, JavaScript, ...), and is capable of delivering projects in each. They'd pick a language suitable for the task and stick with it for a project. They won't know any single language as intimately as the first type, but they benefit by virtue of their choice of language being more appropriate to the given project. | | |
| ▲ | bdangubic 2 days ago | parent [-] | | keep in mind though that size of the organization/team/... matters greatly. I have been involved with tens of projects over the course of my career (3 decades) and have encountered numerous scenarios where the choice of languages/technologies/... is already made, company-wide. I have seen this especially in companies that do a lot of contracting work. If apps are built say on top of springboot services and angular front-ends and we have 200 developers that specifically learned and know those technologies (along with myriad of internal libraries etc built on top of those technologies) swapping people between the projects becomes a non-event (or even adding few bodies to meet deliverables). |
| |
| ▲ | bluGill 3 days ago | parent | prev [-] | | If you are starting from scratch fortran is a bad choice. However if you have a fortran project that keeps getting more features you may become an amazon clone along the way | | |
| ▲ | bdangubic 2 days ago | parent [-] | | I was of course being facetious mentioning fortran but given a choice between working with an amazing group of people on a project which has a completely wrong tech/frameworks/... stack for the job at hand (e.g. fortran to built an e-commerce website) vs. working with average/subpar team utilizing some amazing stack, I'd choose the former any day of the week and twice on Sunday |
|
|
|
|
|
| ▲ | dev_l1x_be 3 days ago | parent | prev | next [-] |
| I think rewriting something in another language can be a great idea, especially if $CURRENT_LANG does not have a sane way of configuring its features. https://discord.com/blog/why-discord-is-switching-from-go-to... |
|
| ▲ | fabian2k 3 days ago | parent | prev | next [-] |
| It's not an issue as long as you use a mainstream language, but using a language or framework that will be perceived as a dead end can hurt your chances to hire and retain people. If you're a large or prestigious enough employer you can probably compensate that as long as you're willing to train people. Programming language alone should almost never be a big enough issue to force a rewrite, but if you already have serious other issues that force huge changes you might as well look at it at the same time. |
|
| ▲ | tyleo 3 days ago | parent | prev | next [-] |
| > The main driver of a project's success is almost always driven by: the composition of employees working on the project, and the competence of the people architecting the project. This is my experience too. I’d go a bit further and say the leads are the primary driver of success. Because ultimately, if the composition of the people on a project is incorrect, it’s the lead’s responsibility to realize and change it. |
|
| ▲ | asveikau 3 days ago | parent | prev | next [-] |
| > rewriting a product only to change programming language is _always_ a bad idea, There are of course a few scenarios where changing the programming language is a more defensible, less "always wrong" kind of thing. An extreme case would be something like a COBOL system that needs maintenance and you have trouble finding people who can do it. |
| |
| ▲ | FuckButtons 3 days ago | parent [-] | | Or if you’ve written the mvp in python and realize you have to meet some performance metric that is 100x what your system is capable of. | | |
| ▲ | roguecoder 2 days ago | parent [-] | | It is bizarre how popular Python is for a language that is as poorly operationalized and encourages such poor architecture choices. I would argue that the number of successful companies with Python code bases is the best evidence that language choice doesn't matter. |
|
|
|
| ▲ | _sharp 3 days ago | parent | prev | next [-] |
| The point of the article was to choose your language based on economic impact, rather than technical debates that are a facade of an engineer's identity beliefs. With that pov, I don't see any contradiction by saying the language is an important decision, and rewriting your project in a new language is probably a bad idea. |
|
| ▲ | mamcx 3 days ago | parent | prev | next [-] |
| > I cannot agree that programming language choice is a primary driver in a product's success or failure.... This and similar are common ideas for the people that never see the real whole world of programming, and maybe have the fortune of be in the "startup" circles. I see the opposite, and is very good predictor to know how bad a product or a team is, using the programming language AND the main DB engine, but that is because I live in the world of "enterprise" code where for example: * I'm called to do a rewrite * I see the screenshot of the main app * I guess correctly was made with vb (first big alarm) (how I know: I never see in my circle anybody that do vb, php, c, c++ anything resembling a sane UI. BTW just the use of colors was enough to guess) * I worry, but confirm, that use Access as the main db * I discover that part of the data was ALSO in a excel file, that is used with the equivalent of "joins", and was not surprised to see things like this Even without knowing more about the people that do it, that is far enough signals to guess much. BTW, there are very good predictors, if Use: MySql, MonGo, Php, Js (almost whatever you wanna add here in terms of frameworks), VB, Perl, Android (aka: Java android and android itself without using iOS alongside), is likely terrible. Then Java or C# taking turns how much worse, but not as bad as the ones before. I sweat if somebody say it use C or C++. Probably enough to straight refuse to take the project. Any use of not-obscure tech in this sector and is a good predictor to be more or less not-that-bad. BTW: Also complex infra and related boilerplate is now probably a stronger predictor after some langs like python, go, typescript and more modern java/kotlin/c# has spread (and also more pg and much less nosql, but too much "cloud") |
| |
| ▲ | Zak 3 days ago | parent | next [-] | | I'm reminded of Paul Graham writing > the CTO couldn't be a first rate hacker, because to become an eminent [Windows] NT developer he would have had to use NT voluntarily, multiple times, and I couldn't imagine a great hacker doing that https://www.paulgraham.com/gh.html | | |
| ▲ | pjmlp a day ago | parent [-] | | Meanwhile Valve has to make use of Proton, because the CTOs of game studios prefer to ignore GNU/Linux existence as gaming platform. Maybe first rate hackers don't play games. /s | | |
| ▲ | Zak a day ago | parent [-] | | Maybe first rate hackers aren't a large market for games. Maybe long-term binary compatibility has created difficulties for game studios. Maybe Windows isn't as unusable as it was in 1995. | | |
| ▲ | pjmlp a day ago | parent [-] | | It was usable enough in 1995 for the same game studios. | | |
| ▲ | Zak a day ago | parent [-] | | Games in 1995 were targeting DOS and Windows 95, not Windows NT. They were doing so because that's what was on the majority of consumer PCs, and their objective was to sell games. People selecting a server-side OS and dev tools didn't have to worry about what ran on end user machines. If you look hard enough, you'll find exceptions of course. I think Ebay was built on Windows servers, but in the late 1990s, building your web startup on Windows was a sign that your technical leadership had bad taste and a competitor would run circles around you. | | |
| ▲ | pjmlp a day ago | parent [-] | | Still it was Windows, and not first rate hackers operating systems. |
|
|
|
|
| |
| ▲ | necovek 3 days ago | parent | prev | next [-] | | If you are called in to rewrite the project, I would say this signals a successful project: it was built in whatever tech stack a midling engineering team had competency in, it originally worked well but started struggling with more scale/needs/updates, and it is still worth enough to invest in rewriting it. Yes, you may not enjoy turning a legacy system that works into a nicely architected system, but the ones that get to that phase are clear successes IMO. Contrast this with systems which had nice, clean, maintainable architecture from day one but bit the dust two years later. The original article is a silly shill, as engineering managers have looked at economic cost of choosing a language and other technology since... forever. And some of that "invisible" discussion happens visibly too (I've done that a number of times: "how do we keep our engineers motivated who want to explore a new hyped tech stack vs the cost of them being slower or leaving the company"). | | |
| ▲ | worik 2 days ago | parent [-] | | Yes. And because time to first release is often the difference between prosper and fail It is not enough to be the best. You need to be the first |
| |
| ▲ | binary132 3 days ago | parent | prev [-] | | I think you’re confusing cause and effect. The cause here is bad engineering. The effect is bad architecture and unmaintainable software. |
|
|
| ▲ | hshdhdhehd 3 days ago | parent | prev | next [-] |
| Language choices does make a decent difference to time spent, bugs, extensibility. Id guess a 20-100% tax for choosing the wrong language. However most of the time the best language is the one the team knows well. Caveat to that is if the threading model or performance doesnt suit. Or company platform engineering reasons (e.g. availability of platform libraries). |
| |
| ▲ | pdimitar 3 hours ago | parent | next [-] | | > Caveat to that is if the threading model or performance doesnt suit. So, this goes for ~70% of all projects ever and ~95% PLs ever? I would have been a staff Golang engineer, if not a VP of Eng even, somewhere at this point if I didn't fall in love with Erlang's concurrency & parallelism implementation. I am kind of still offended by the entire IT area that we have multicore CPUs for what, 20 years now, and we still don't make true physical parallelism a first-class citizen in all of our mainstream PLs. Looking at you, Python, and looking at you, Golang, with your ability to crash the program for sending to a closed channel, and looking at you Rust for making async needlessly complex. (RE: Python, yeah yeah, "GIL is going away next release" and stuff. With that tempo they'll catch up with Golang by 2050.) | |
| ▲ | roguecoder 2 days ago | parent | prev [-] | | Frameworks are a major contributor to these dynamics, which is a little unfair to blame on the language, but I've seen orders of magnitude difference. I had one time it was faster for the three of us to rewrite a web app in Rails than to make the Play framework accomplish what we wanted it to accomplish, even though none of the three of us had ever worked in Ruby before. Rewriting four months of work took two weeks because Rails neatly supported what we were doing and so much could be generated. We ended up with better test coverage too. | | |
| ▲ | pdimitar 3 hours ago | parent [-] | | You are correct but nothing can be done about it IMO. PLs live and die by their "killer apps" and that is most of the time the framework du jour. There are refreshing exceptions here and there but there's also something to be said about whether it's a good thing that frameworks don't dominate a certain PL (like Golang; everything is very readable if verbose but one does get tired of generating the same boilerplate all the time). |
|
|
|
| ▲ | tbrownaw 3 days ago | parent | prev | next [-] |
| > and that leadership by arbitrary decree is stupid. Great! These are age-old lessons To some extent! There are also cases where any decision is better than no decision, and all the options are good enough that it's not worth the delay to argue about them. |
| |
| ▲ | pdimitar 3 hours ago | parent [-] | | > any decision is better than no decision Where does that fit, in a company where there's only one techie? Not sure I get your comment here. Also "good enough" is a very, very tempting and treacherous mistress... |
|
|
| ▲ | mpweiher 3 days ago | parent | prev | next [-] |
| > I cannot agree that programming language choice is a primary driver in a product's success or failure A possible reason for this is that our current languages are way too similar to make a difference. Even most of the ones we think of as radically different. |
|
| ▲ | zeroq 3 days ago | parent | prev [-] |
| It's not a contradiction if you assume that (a) language choice is critical and (b) rewrites are doomed to be failures. Having that said I agree that language/platform is a "non technical requirement" in 90% of real world cases. You pick what you know or in more industrious scenarios - what's available on the market or what's the most cost effective. But people are indeed irrational about programming languages. There's tribalism, stereotypes and preconceptions. Most notable is probably PHP, language for human failures and shit projects. As if same exact project written in Java was suppose to be of higher philosophical value. But it's something you can't deny. I've been asked in non ironic way by a (non technical) founder investor if I could recommend him Rails programmers, because he read about it and it's suppose to be great. I asked him about specifics of his new project and he said he doesn't have an idea yet, but it has to be in Rails. Go figure. |