David Heinemeier Hansson, creator of Ruby on Rails and Basecamp cofounder, writes about software design, testing, and running a business.
HN links it for his opinionated essays such as Rails is Omakase, which commenters cite by analogy, and for his views on business.
> Because DHH is just one person. And he only has DHH's experiences.
Yep. Uncle Bob is one person, too. tl;dr Think for yourself and don't listen to somebody just because they hurt your feelings.
> To pick a topical example: Is TDD hard in Rails apps because TDD is dead or because Rails makes TDD hard?
This is a misrepresentation of what DHH has said [1], which is that strict adherence to TDD can make your designs worse:
> Over the years, the test-first rhetoric got louder and angrier, though. More mean-spirited. And at times I got sucked into that fundamentalist vortex, feeling bad about not following the true gospel. Then I'd try test-first for a few weeks, only to drop it again when it started hurting my designs.
> Used as a hammer to beat down the nonbelievers, declare them unprofessional and unfit for writing software. A litmus test.
If you watch the conversations between DHH, Martin Fowler, and Kent Beck, it seems to me that they all agree: testing is good, test-driven design can be bad, and mocking everything is bad [2][3].
I took some time last week to re-read Uncle Bob's book, Agile Software Development, Principles, Patterns, and Practices [4], and Kent Beck's book on TDD [5]. There was a huge difference: Uncle Bob focuses on test-driven design, while Kent Beck focuses on test-driven development. Uncle Bob claims that test-driven development (especially through mocks) universally improves your design, because it reduces coupling and enables refactoring. Kent…
The big mistake was trying to provide anything beyond Minimongo on the client side. People are very picky about what front-end frameworks they use on the front end, and typically people who have strong opinions about that are less opinionated about what they use on the back end. I'm firmly in that camp, for instance. I've been a huge fan of Firebase for a while because it frees me from the tedium of having to create another REST application just to talk to a database. If Meteor had, from the beginning, focused on simply being a kick-ass open-source alternative to Firebase they would be killing it right now.
It was a monumental task to try to create something that would please both front-end and back-end web engineers. Another issue with Meteor is that it was envisioned, not extracted. [1] From Rail's creator, DHH: "First, Rails is not my job. I don't want it to be my job. The best frameworks are in my opinion extracted, not envisioned. And the best way to extract is first to actually do."
Meteor was the goal, not an actual, real-world application. Often when this is the case the software ends up solving a bunch of problems that seem logical to solve, but in practice are not actually practical (another framework like this that comes to mind is the notorious famo.us project). Compare this to Rails and React which were forged in the crucible of real, day-to-day development and problem solving.
[1] - http://david.heinemeierhansson.com/posts/6-why-theres-no-rails-inc
I can't recall ever hearing anyone say they "hate Ruby".
Ruby is designed to make programmers happy.
Ruby and Rails are "boring" because they are mature and do their job extremely well, so the cutting-edge devs that helped get them there got bored and moved on to other newer ecosystems.
If you are more interested in getting the project done fast and efficiently and you don't mind doing it someone else's way, then RoR is a good choice.
If you like to do things your own way, then Rails will probably frustrate you because it is very opinionated on how things are done. You can override everything, but some people's personality is more suited for the node.js world that is far less of a framework and more of an ecosystem of libraries.
These are 2 popular posts that will help you figure out if RoR is a personality fit for you:
http://david.heinemeierhansson.com/2012/rails-is-omakase.html
https://medium.com/@timbuchwaldt/rails-is-boring-thats-great-f896e9ab2cb
Go is omakase.
"But there's a fine line between a friendly suggestion and a belligerent diner. That line is usually exposed when the suggestion is declined: "I'm sorry, but hotdogs don't really fit our sushi menu, and while you may not care for unagi, we picked it for a reason. But thanks for the suggestions!". If only most arguments about the menu would stop there.
But they don't, do they? They usually carry on and on. BUT I REALLY DON'T LIKE UNAGI!!! IT'S OFFENDING MY TASTE BUDS THAT IT'S PART OF THE DEFAULT COURSE SETTING. TAKE IT OOOOOOFFFFF!! Okay, buddy, sit down and have a sake." http://david.heinemeierhansson.com/2012/rails-is-omakase.html
Don't get me wrong, I love the language, however, I think about this everytime I read about language proposals being nuked (cough generics).
From the article: "In the year since the elephants left, Feld says circus attendance dropped precipitously."
This is a great lesson to businesses in general - know if your critics are actually your core customers. The overlap between people who protested elephants and the people who attended the circus was pretty small. The company ended up listening to a very vocal minority and then lost a lot of business from the quiet group of customers for whom the elephants were the major draw and who then stopped buying tickets.
This also applies to open source projects and brings to mind DHH's article http://david.heinemeierhansson.com/2012/rails-is-omakase.html
people ... don’t want to change how they write code. They just want tests for it
Have you considered the possibility that those people are right? That's a reasonable conclusion to make if you are seeing lots of otherwise smart people that share an opinion that disagrees with yours.
There are lots of valid reasons to change the style in which you write code. In my mind, fitting somebody's fad testing scheme is not one of them.
Here's a second opinion from a guy who also likes tests, but doesn't think it's a good idea to structure your whole codebase just to accommodate them:
http://david.heinemeierhansson.com/2014/test-induced-design-damage.html