8 ms·
Despite being a joke, I know it's the "Ha Ha Only Serious" [0] sort. I can't help but think this is severely biased by the trends of "enterprise software," wher
by reikonomusha 5y ago
Despite being a joke, I know it's the "Ha Ha Only Serious" [0] sort. I can't help but think this is severely biased by the trends of "enterprise software," where you eventually "give up", and clock your 9–5 writing if+for making a fine living, but erroneously pass that off as a mature, Jedi-like way of thinking about programming, like the meme suggests. (And, consequently, you spend no less time debugging hairy, nested, imperative conditionals with for-loops that are off-by-1.)
I have no beef with if+for, but a large part of the reason they're "goto tools", if you will, is because industry is slow to assimilate many state-of-the-art ideas, sometimes by as much as 40 years.
Simpler building blocks does not necessarily mean simpler solution. If only!
[0] https://en.m.wiktionary.org/wiki/ha_ha_only_serious https://en.m.wiktionary.org/wiki/ha_ha_only_serious
- engineeringwoke 5y ago> debugging hairy, nested, imperative conditionals with for-loops that are off-by-1 Isn't this just a complicated case of ifs and fors?
- reikonomusha 5y agoSure, but the word "just" is doing a lot of work. It seems to be where a code base of uncomplicated ifs and fors leads to asymptotically, because both of those constructs don't prohibit you in any way from sneaking in "just another line" to either of them.
- 8ytecoder 5y agoIt’s just so sad that the lowest common denominator has become the standard now. When I first learnt Clojure it entirely changed the way I think and solve problems. The code really was elegant. Obviously, it can only be read by someone who can also understand programming beyond ifs and fors. That’s a non-starter in most environments - enterprise or otherwise. Funny enough, I see most innovations coming from consultants who do the same work for multiple companies and realise the repeating patterns and extract an abstraction.
- sharken 5y agoIfs and fors are the easiest concepts to explain to non-developers, so it makes sense to start there. I wouldn't say that they are the standard now, but using and mastering all features in a language is hard. Add to that design patterns, classes and code layout it becomes a full-time job to keep up. I have been in contact with code most of my professional life, but still isn't comfortable writing large amounts of code. The simple reason is that i don't do it full-time. Here are the features in C# just to illustrate how complex a programming language is. https://www.c-sharpcorner.com/article/c-sharp-versions/ https://www.c-sharpcorner.com/article/c-sharp-versions/
- qsort 5y agoI agree that modern software development for non-full time developers is brutal, several of my data scientist colleagues are remarkably brilliant people and yet they struggle with some more advanced programming concepts. However, most of those features are relatively standard and are more conceptual than syntactical in nature. Bashing people because they don't know stuff is stupid and counterproductive, but I shouldn't be forced to code in the programming equivalent of roman numerals just because someone else can't be properly fucked to understand lambdas or interfaces or generics, all stuff that's literally covered in your run-of-the-mill CS 101 course. It all boils down to having enough humility and empathy to understand that other people are not, in fact, the same as us.
- 8ytecoder 5y agoThat’s what I mean. Each language has a different syntax and it takes a while to gain mastery over it and that’s fine. But there are concepts that are immediately portable to multiple language.
- tonyedgecombe 5y agoC# was good enough for me at version 4.0. I use many of the newer features but they seem to be well into the law of diminishing returns now.
- nerdponx 5y agoMeh, most business logic really is "if" and "foreach". That doesn't mean it's not complicated, as you say. But all that category theory stuff, at the end of the day, really is just an attempt to manage the complexity of lots of conditional branching and iteration.
- _y5hn 5y agoIf and loop aren't mathematical in the same sense as set theory and set operations are.
- Sharlin 5y ago> they're "goto tools" I see what you did there.
- usrbinbash 5y ago>I have no beef with if+for, but a large part of the reason they're "goto tools", if you will, is because industry is slow to assimilate many state-of-the-art ideas, sometimes by as much as 40 years. For assimilation to happen, the state-of-the-art solution also has to result in a net gain over the existing solution, and the higher the differential in complexity between the two, the bigger that gain has to be.
- reikonomusha 5y agoAnd, these days, "net gain" in an industrial context is typically tied to almost no aspect of the quality of the code, but more to the management of large groups of people, as well as stability and growth of the business.
- gopher_space 5y agoFunctionally, this looks like selling off your client base and closing the doors rather than rewriting internal tools that mostly still work. There's no "rubber meets the road" in OPs position because there's no cost in their calculations.
- xyzzy_plugh 5y ago> you eventually "give up", and clock your 9–5 writing if+for making a fine living, but erroneously pass that off as a mature This comment sure indicates to me where you most likely are on the curve. In all seriousness, I think this is considerably off the mark. After enough experience you realize that expressivity and convenience are antipatterns and don't actually simplify things but are harbingers of complexity, bugs, tech debt, even the downfall of organizations and products. Saying it is all ifs and for-loops is completely true. Everything else, all the abstractions and high level features, are just sugar. I try to keep a healthy and balanced diet, myself. > industry is slow to assimilate most state-of-the-art ideas, sometimes by as much as 40 years. Most of those ideas are terrible. The industry is so incredibly young and has experienced so much change over those 40 years that I have a hard time accepting the notion that the industry is slow to adopt. The reason the old building blocks are still popular is because they are a thin abstraction over how computers work, and ultimately that is at the root of everything we do.
- reikonomusha 5y agoReally, there are no if+for, just compare and jump. Why don't we use what the metal uses, instead of these "expressive abstractions"? If+for have no deeper foundational significance in the construction of programs or computations, literally, than say a lambda function. But because the latter is unfamiliar, it's spoken about in the same manner you present: as if it is some highly abstract, complicating, high-level feature (when truly that take is just baloney).
- mbot5324 5y ago> as if it is some highly abstract, complicating, high-level feature But symbol calculus is a highly abstract, complicating, high-level system assembled out more reality-based systems beneath it. If it seems simple to you, you're just under the curse of knowledge.
- reikonomusha 5y agoI'm not sure what a "symbol calculus" is. Do you mean "lambda calculus"? I think that's a lot less complicated and abstract than a fabled machine with an infinite tape that's controlled by a transition graph of symbolic states. :) And I don't know what a "reality-based system" is.
- phendrenad2 5y ago> is because industry is slow to assimilate many state-of-the-art ideas, sometimes by as much as 40 years How convenient that the software industry is about 40 years old. So these ideas should "break through" this invisible arbitrary corporate waiting area into the limelight any day now, right?
- reikonomusha 5y agoThey are breaking though. For instance, Python just got (a very limited form of) pattern matching. It has been A Good Idea since at least the 1970s. Garbage collection has been known since the 1950s but only became "mainstream" in Java.
- enneff 5y agoWhat this really means that once you get to a certain level of experience and seniority the actual code you write in the small is pretty much irrelevant. What matters is the overall architecture of what you’re building: the data structures and APIs. The challenge becomes about working together as a team, and with other teams within your ecosystem. Sophisticated language constructs don’t actually help you solve those problems, and imo their benefit is marginal where they do help.
- drugones 5y agoThis! With at additional level of abstraction you could say “goto jumps”, but “if and loops” gives an commonly understandable logic for everyone; deeper abstractions increase reading complexities, while higher abstraction is achieved via functions and overall architecture. Scaling up those “if and loops” is the challenge as a team or a single, with the common goals being to keep the software under control.
- filoeleven 5y agoI view map/filter as better abstractions than for loops, and do not consider them to be sophisticated language constructs. They correlate with descriptions of a program’s goals much more naturally than for loops do: get the name of each user, remove everyone under 21, only show accounts with positive balances, etc. Reduce is more arguable, but I think it also applies: show the total amount of money in all of this user’s accounts. “If” however seems pretty fundamental.
- rsj_hn 5y agoThere are a lot of sophisticated problems dealing with enterprise software even in higher languages and even in situations where things like performance or resource usage is not a primary concern. For example, how do you handle authorization, logging, and how do you make the code maintainable? That's a really tough problem that requires a lot of thought about the overall system design. And of course it's always a lie to say that performance and resource usage aren't a concern -- they're not a concern until they are.
- perl4ever 5y agoThe significance of off-by-one errors depends on whether you predictably get a runtime error on the first execution, or not.