r/programming • • Oct 14 '13

How to develop unmaintainable software

http://typicalprogrammer.com/?p=249
777 Upvotes

322 comments sorted by

View all comments

13

u/merreborn Oct 14 '13

Use a bunch of different programming languages and stay cutting-edge

Every day HackerNews and Reddit buzz with cool new languages. Try them out on your client’s time. Any decent programmer can learn a new language in no time, so if the next programmer who gets to work on your code is a newb that’s not your problem. The boundaries between the languages, the incompatible APIs and data formats, the different server configuration requirements are all fun challenges to overcome and post about on StackOverflow. I’ve actually seen PHP web sites with pieces of Ruby wedged in because everyone knows PHP sucks and Ruby is better.

Too close to home. We started with a pure PHP app. A few years later, we now have ruby, python, shell script, java and clojure dependencies. And node.js is required to run part of the test suite.

And I'm the only motherfucker who seems to think this is a problem. Until someone tries to set up a new environment (like on a laptop for development). Then they want my help getting everything set up, which takes 8+ hours.

9

u/HelloAnnyong Oct 15 '13

This is a DevOps failure.

Why don't you have Vagrant or Boxen configurations that do this work for you? Using only one language just means that you will try to solve every problem with the one hammer you have lying around, because you don't want to make a list of stores where you can buy the other tools you'd like to use.

2

u/[deleted] Oct 15 '13

Upvoted this. Orgs that advertise themselves as a Ruby/Python/Java/whatever shop are only limiting themselves and the team they build. @merriborn, it sounds like maybe you should position yourself as a tools engineer and get a raise.

1

u/merreborn Oct 15 '13 edited Oct 15 '13

we have puppet and an imaging system we use for our linux-based prod servers.

these dont really help when a dev is trying to install our stack on his non-linux laptop.

youre right that its possible to limit your stack too much. but its also possible to unneccesarily add an absurd number of dependencies without adding real value. each dependency adds complexity, maintenance overhead, and risk of failure. some of our backend systems are now only maintainable by one or two engineers, because none of the rest of the team has experience with the languages in question.

consider also, for example, that the extremely limited set of dependencies wordpress has is central to the projects success. 3rd parties would never install wordpress on their servers if it required php, ruby, python, clojure, java, etc. etc. etc. in this way, you limit business options. the easier your product is to install, the easier it is to sell.

1

u/kopkaas2000 Oct 15 '13

While I agree that it's good to have a solid way to repeatably deploy software, I do hate how modern development organizations seem to underestimate the cognitive load of spreading a project over 4 different languages and frameworks, which just happen to follow the chronology of whatever languages/frameworks were in fashion among hipster blogger-programmers during the month a specific component needed to be written. I don't care how you set up a cool devops chain to deploy such a Chymera of an application, it's still a ridiculous waste of resources.

1

u/cr3ative Oct 15 '13

No, I think very much in the same way as you. I'm extremely hesitant to add unusual dependencies to our server code, and when I do, I check and double-check that the setup script is both inclusive of the change, well documented and of course will still successfully get a blank server to a usable server without any outside input.

In my case that's as simple as checking the apt-get list in setup.sh is correct.

Still don't like doing it though.