11 ms·
I would like the definition of "boring". Most of my day job is spent reading C++ (I write some, too) and it is more terrifying than boring. Understanding when
by sgeisenh 5y ago
I would like the definition of "boring".
Most of my day job is spent reading C++ (I write some, too) and it is more terrifying than boring. Understanding when certain errors can (and do) occur and when to optimize for performance over readability is really, really hard.
I believe that Rust, Go and TypeScript have gained a lot of popularity because they are boring to read. Even OCaml has gained a ton of popularity because it is boring to read.
C, C++, python and JavaScript: not boring to read, you constantly need to be on your toes.
- Jtsummers 5y agoIt's partially covered in the first link on the page: https://mcfunley.com/choose-boring-technology https://mcfunley.com/choose-boring-technology. A specific quality described there would be languages that have fewer unknown unknowns, a lack of surprises. C, C++, Java (the three he picks) have relatively few surprises. Either by virtue of design (here I'd say both C and Java) or total industry experience with the language (C++, C, Java). Ubiquity might be another consideration. A lot of other languages could probably be added to the list on that criteria. Another would be how common it is, especially for a particular domain. In my field (embedded, safety critical, real-time) it would seem like Rust would be a great choice, but it's not common and there are both technical and logistical hurdles preventing its use (for fielding, at least, for proofs of concept it's viable and that could lead to its use in fielded systems later). I'm constrained to C, C++, and maybe Ada. Fortran has been phased out, but would've been one of the boring languages for this domain up to about 20 years ago (for a new project).
- nielsbot 5y agoNot really what you meant, but I personally have never found C++ programming to be without surprises of some sort: easy to make mistakes which are hard to find, having to agree on which C++ features/paradigms to adopt in your codebase, willy-nilly exceptions, constant appearance of new language features, etc.
- smackeyacky 5y agoI think C++ is full of surprises, especially inersection of where macros and class templates collide. I don't think I ever saw more surprising behaviour from a language than c++, although most of the horrible surprises were cfront related and I hope they are gone now.
- baby 5y agoI agree that Golang is more in the boring side. OCaml, Rust, and ts though?
- toastal 5y agoAnecdotely, I read by first top-to-bottom OCaml source last month and it made me question what I had been writing (PureScript and a bit of Haskell) because it was so simple and easy to read by not getting into the type classes weeds. It has just the right amount of features, like ADTs and pattern matching, without too much for the average reader. It's not as terse, but that can be an advantage.
- Zababa 5y agoFrom my experience with TS, it usually goes from JS with types (what I usually write) to something that looks like a class-based language like Java or C# (for example Angular). Most of the decisions in TS make sense if you consider that the goal is to be able to statically type the existing JS ecosystem. It's boring compared to some of the alternatives like Resript or Elm in that it's just another layer on JS rather than a new way of doing things. For Rust, it's another kind of boring. The language may be new, but lots of libraries are there. If you want to do something, you can usually pull a few libaries, read the (usually great) documentation, write some glue code and your problem is solved. In that way the experience is usually close to Go. OCaml is another kind of boring. It's less "crazy" than something like Haskell or Scala. It's really stable, code from 20+ years ago can compile just fine. You can write most of your code as plain functions and data structures but you still have the object and module systems if you need them. Even when they bring big changes to the language such as removing the GIL and adding multicore, they work hard to make sure that existing code won't break and single core performance won't suffer too much. My point with all of that is that boring means different things to different people. People identities are stongly tied to the language they use (I talk a bit more about that here https://news.ycombinator.com/item?id=28256211 https://news.ycombinator.com/item?id=28256211). People talking about "boring" languages is probably a reaction to people talking about "exciting" languages and trying their identities to them. Someone says he learned Haskell, I feel inferior because he knows Haskell and JS and I only know JS, but I can counter that by saying that I "focus on the product" and "solve real problems" with "boring languages". I like the irony that on the same website, there is an article about "Keeping your identity small" (http://www.paulgraham.com/identity.html http://www.paulgraham.com/identity.html) and how people that don't use Lisp can't even understand why Lisp is better (http://www.paulgraham.com/avg.html http://www.paulgraham.com/avg.html).
- zinekeller 5y agoI think that when he means "boring", it's something that is relatively mature and the pitfalls are well-known. Despite C/C++ being (in my own opinion) dangerous to use and relatively hard-to-maintain, you already know where are the failure points etc. While Rust and Go (for example) are now a bit more mature, there are still some unknowns and (solvable) limitations (for example compilers in non-ARM embedded systems).
- vp8989 5y agoAgreed. Some new languages actually have the inherent capacity to be much more boring than incumbents, once the requisite work has been done to flesh out their ecosystems and make them familiar to people.
- d3nj4l 5y agoI agree with this - I don't think there's any way to define "boring" that doesn't fall apart after examination. Is it age? Lisp (whichever flavour you like) has been around forever and I'd wager very few consider it boring, likewise for Haskell and the MLs. Ecosystem? ditto. Predictability? The MLs are probably better here than C++, as you mention. Real world usage? Gee, we're talking about this on a website written in a Lisp! It seems to me that "boring" is an reverse-pejorative for "C/C++/Java" - which I think is ridiculous, because even in 2015 Ruby and Python should've assumed "boring" status by all means, and the author even sort of acknowledges this! I understand the word as used in "Use Boring Tech" has a certain instinctive resonance to most people, but in all usages I think we should replace it with familiar. What's familiar varies from person to person, team to team, and also doesn't serve as a pejorative to anything else. Pick what you're used to if the goal isn't to experiment.
- silisili 5y agoIf there's one thing I've learned on the topic in my life and career, it's that everything written should be written for the reader, not the writer. Perl, C, and C++ are very much for the writer. To some extent, Rust also. Python and Go are good for the reader. These aren't exhaustive lists, just what I'm familiar with. Admittedly, Python is tricky because it looks simple(boring) at first glance, but lets one use a lot of magic. My daughter is learning cursive and it just reminded me how much I blasted hate it. I can write it fine, reading it is a tossup. It's solely a shortcut for the writer, at the expense of reading. But anything of importance is read thousands or millions more times than it's written. In programming especially, the easier to read the better, no matter how verbose and boring the language. I think we'll get there, when we all quit pretending we're too clever to write that way.
- lmm 5y agoI find people make the mistake of thinking about how long it takes them to read 20 lines rather than how long it takes them to read x piece of functionality. (Of course it's much harder to compare the latter, but that's like the drunk searching for his keys under the streetlamp rather than where he dropped them). If there's a dense 200 lines of Haskell (or APL) takes you a week to understand, does that mean that Haskell is hard to read? Well, maybe, but if those 200 lines are replacing 20,000 lines of Go, then maybe not.
- silisili 5y ago>If there's a dense 200 lines of Haskell (or APL) takes you a week to understand, does that mean that Haskell is hard to read. IMO, Yes! If you put a mental onus on folks to understand x before you understand y, there's no telling how deep the rabbit hole goes. Why not use asm? Why can't you understand pointer arithmetic? The more you increase the mental requirements of the reader, the worse. I used to be the opposite. I used to write smart C code and feel good about it. Because it was fun and challenging to write, which is what we all desire. With age(mostly) and experience, I realize how much of a mistake that was, if not for others, then older me. To play off your example, list comprehensions are a nice one liner. In Python, you can do in one line what Go takes 10x more lines for. I still prefer Go, despite it feeling like shackles at time to write.
- tikhonj 5y agoIn my experience "boring" means "popular"—usually in the "you wouldn't get fired for choosing IBM" sense[1]. But somehow "use popular technologies even if they're bad" is not a convincing thesis! [1]: Follow-up thought experiment: how many people should have been fired for choosing IBM?
- otabdeveloper4 5y ago> C, C++, python and JavaScript Coincidentally, also the languages actually used to make real-world software. (As opposed to self-congratulatory blog posts.) If Rust or Ocaml ever get to the point when they're the tool for actually keeping the software ecosystems alive, they'll be terrifying too. (It's not a problem with the languages; software is terrifying, that's a core property of software engineering and no amount of language abstraction will ever make the terror go away.) P.S. I've been mentoring software developers for decades, and in my opinion the psychological ability to deal with the terror is the #1 predictor for success in the software industry.
- Zababa 5y agoCould you elaborate a bit on the terror part please? That's the first time I've heard someone mention that, and it seems interesting.
- otabdeveloper4 5y agoHard to explain, but programming elicits a visceral reaction in most people. Something about the infinite and fractal nature of information complexity growth, I think. :) (Probably also what makes it fun and addictive when you ride that tiger.)
- skocznymroczny 5y agoI think everyone has their own definition of boring. For example I wouldn't call C++ boring, but would call C boring. Java would also be a boring language. For me a boring language is a language that has a single paradigm, and there's one way to implement most stuff. With C and Java, there is little room for making "fun" code, you just write lines and make it work. Java forces you into the OOP paradigm and every problem is just a few design patterns away. With C++ you can have a lot of fun with OOP, templates, compile-time magic, old C APIs, new C++ APIs, even if you solve the same problem, two codebases in C++ will look completely different.