When it's all said and done with, software needs to be consistent and meet the expectations of its users.
If it does that, the question of a framework or high level documentation or user stories don't matter. Those are tools used to help achieve the above govals, but if you can do so without the use of the tools then the tools aren't all that useful for that particular project.
I sometimes think people miss the forest for the trees. I make the same argument about tests and TDD, the goal isn't tests, the goal is stable, maintainable software. If you can do that without tests, then you don't need tests, and that's ok.
I don't know, I used to feel that way but over the last few years I've changed my mind. The reason is because I got a hosting company as a client and I've seen some shit.
I've written the tools they use for automated VPS creation/deployment. The wrench in the works is that this company offers the ability to install/configure a lot of different pieces of software and software combinations, not just the usual to get enough going for the customer to log into the VPS. Slowly over the last few years I've started to realize my trust and hope in software that isn't written by me has plummeted as a direct result of this experience. I'm talking about software with a configuration web API where only half the confurable options will actually configure via the given web API and instead you find yourself tracking down and diving into the individual files and updating those instead (and figuring out how to restart their services such that they don't overwrite your changes and accept them). It's just not acceptable, and they charge money for that implementation. I've been told that one of the major features in their new version is that their own web app will start calling the web API so their implementations will actually work in this version. Am I the only one who finds that a ridiculous feature?
long story short, I think there's an assumption in your post that the people writing the software give a shit about correctness and ease of use, when in reality a lot of software only cares about getting money in their pocket. If that means shipping with a web API that's broken and announcing the proper functioning of said API as a feature for the next version, then so be it.
What ends up happening is that you, as a developer, have to deal with the bad decisions made by other people and at some point you start preferring to just write it yourself. To give you an example, PoSH SSH (Powershell SSH). Version 1.6 had no timeout functionality, so it was possible for an SSH session to never end. 1.7 added a timeout functionality, only the default timeout was set to 60 seconds, you can only change the timeout on a session basis, and it's not possible to get back the old 1.6 behavior of having no timeout (sending a timeout of 0 just immediately returns with a timeout error). The best you can do is set the timeout to Int.Max.
The thing is, most of the differences are a bit of a pain, but nothing more, except for the decision to change the default behavior in 1.7 to be different than 1.6. This guarantees that anyone who upgrades gets rocked by this change. And for no good reason. If someone wants a shorter timeout in 1.7, they can make that adjustment while they're writing new code. It's just a bad decision made out of convenience and probably some emotional feeling of "goodness" that results from the default behavior being "right" or "correct" with the new timeout behavior.
Another issue in 1.7 is that if the connection goes away, it will hang until the timout gets hit. I went diving into the code to see what was going on, and in their busy wait loop they never actually check if the session breaks unexpectedly, so if it does break it sits in that loop until the timeout is hit. I discovered this because my automated tools were SSHing into some linux VPS's and issueing a restart command. But because the timeout is on a session basis rather than command basis, it isn't as simple as just adjusting the timeout. I had to actually start maintaining my own version (I did report the issue to PoSSH SSH, but I don't think it's been fixed).
In general, the quality of the PoSH SSH library is such that I'm actually in the middle of changing from PoSSH SSH to the putty tools for my SSH/SCP needs. It's actually more consistent for me to escape and parse the cmd input/output than it is for me to use PoSH SSH, and that's damning.
I'm not asking for 9 9's of availability from these libraries, but my personal goal when I write code is for it to work consistently, and to be loud in its failures so we know that more work is needed to work consistently. But PoSH SSH's design is such that it's easier to meet those goals using external CLI tools than to use the Powershell library.
This turned into a bit of a rant, but this is something that's been on my mind more and more over the past few years as I find myself dealing with such a myriad of different pieces of software with this client.
Why are you thinking about free speech in terms of things that need to be penalized (or rewarded)?
I encourage everyone to avoid answering that question, it presupposes that the mindset that resulted in such a question is valid on some level and worthy of engagement.
More or less agreed so far. Even worse, its also missing the "natural" component.
You can judge on consistency by using some empathy and substituting in Jews, progressives, and Muslims to select some arbitrary left wing groups as opposed to the right wing groups initially named. For people with empathy (and a bit of wisdom) regardless of which side they're on, they can see that its a fundamentally immoral method of argument, regardless of who is picked as today's trendy victim of the sophistry. How can something moral and worthy rely specifically on not using empathy? The response to civilization getting punched in the face by a right fist a century ago should be something like "turn the other cheek" not having bad guys propose "punch back left handed, maybe harder and using computers this time". You're not going to win with a strategy that boils down to being nazis, but more specifically left wing nazis so that means we're not only OK but we're great because I'm sure the other side shares our views that they're deplorable and if we just call them racists or bigots one more time then they'll finally start voting for us. That was quite an empathy fail in the recent election strategy. We tried left wing authoritarianism last century a couple times and it failed every time. Oddly enough it turns out people hate being genocided regardless of being told its to help the left or the right. Theoretically and pragmatically WRT empathy, mislabeling "natural" is just a bad strategy, gonna fail.
Another way its not "natural" is confusing groupthink with observing actual nature or wisdom. For example, today left wing progressive views are extremely popular, near universal in some subgroups echo chambers, in the 30s in Germany somewhat further right views were more popular. Popularity contest results are very interesting but has nothing to do with morality and ethics and right and wrong and the correct way to live a good life. Is the truth of the world that the Earth is flat or round? Did the earth change shape before and after Columbus or just the groupthink? Is the logically efficient and dependable way to determine the result of 2 + 2, to vote on it? In summary don't confuse merely measuring groupthink vs observations and analysis of actual "nature".
So not bad, given a two word phrase "natural selection" its gotten at least three gaping philosophical holes shot thru it.
> It seems like a reading micro-optimization to me, though.
It's a "reading micro-optimization" in the same way that not littering your code with comments is a "reading micro-optimization".
It makes you pause and interrupts your flow of thought as you contemplate something not directly related to what you were modeling in your head 2 seconds ago.
I don't think it's the same. I'm not arguing against code cleanliness or good practices. Code readability matters. I favor concise, expressive languages over verbose ones for precisely this reason.
Littering your code with comments IS a huge readability problem. You are forced to filter them out to find the real code, since they are mostly garbage, but you can never be sure you aren't skipping some vital bit of information. Likewise, boilerplate and needless ceremony obscure the intent of the code, so they are obstacles to be reduced in good, clean code.
Contrast this with writing Yoda conditions. They are no big deal. They interrupt your flow of thought exactly once: the first time you encounter them. If your train of thought is interrupted every time you encounter them, you are way too novice a programmer. So I think this is a really minor issue in the sea of software complexity; so minor, in fact, that it seems bizarre to me to mention it.
I think whether to use Yoda conditions, much like the placement of braces or the number of whitespaces for indentation, are the stuff of flamewars and endless argument because they are the kind of things we programmers love to obsess about, but they are really not very important.
please stop following me around dang. One would think you would be warning the person who implied I was a novice programmer, but that would require consistency and fairness.
either ban me or leave me alone until I do something that's actually ban worthy please.
And to be clear, so there is no confusion here.
Your guidelines state the following:
> When disagreeing, please reply to the argument instead of calling names. E.g. "That is idiotic; 1 + 1 is 2, not 3" can be shortened to "1 + 1 is 2, not 3."
According to your guidelines, his comment:
> If your train of thought is interrupted every time you encounter them, you are way too novice a programmer.
Should have been something such as:
> If your train of thought is interrupted every time you encounter them you probably don't see yoda conditionals very often.
Please, do me favor, go warn him as well.
consistency and fairness.
Or just ban me since we both know that's what you want to do.
I apologize if I offended you. I didn't mean "you" as in "you, mreiland", but as in a generic "you". I can no longer edit my post, but I've no problem if an admin edits that part to make it more explicitly general.
My use of "you" was the same as yours when you said "it makes you pause and interrupts your train of thought"; I didn't take it to mean you were referring to me specifically! Unfortunately written language is prone to this kind of misunderstandings :(
I have no issues with the way you worded that, I would have defended you had dang stepped in to complain about it (and in fact I've done exactly that in the past, which is when dang started harassing me). I was more pointing out the hypocrisy of dang.
I ended the conversation for exactly the reason I cited, a distinct lack of imagination. Anyone who immediately reaches for "you must be a novice programmer" isn't really someone I'm interested in conversing with.
Especially since anyone who stopped to think about it for more than two seconds would realize a "novice programmer" would find the yoda conditionals easier specifically because they're still learning to read code.
No one in their right mind would claim an adult reader would be better at having random bits of text in their novels read from right to left in the middle of their left to right text. Most reasonable people are going to agree that it's easier for a young person just learning to read to pick up on that.
Yet there you were, making exactly that claim for programming.
It indicated a reactionary comment with a complete lack of critical thinking on your part and I just have no interest in spending my time speaking with a person whose thought processes work in that manner.
And if that offends you, then so be it. I personally do think you were simply being passive aggressive and that's why you didn't stop to think about what you were actually saying.
Which is your right to do, and I would defend you for it. But it doesn't mean I'm willing to continue engaging you.
Your comments suggest that you feel this is personal. It isn't. You just need to follow the rules like
everyone else.
Inconsistencies in HN moderation are random
side-effects of the impossibility of reading all the threads. You're
welcome to bring them to our attention, but please don't take them
personally.
It's more subtle than that. People act as if developers are all a clean slate, which isn't true.
developers have personalities with differing values. That super productive developer may just not value the flexibility of the code due to his personality coupled with that developers personal experience.
That developer will absolutely shine in some environments and be abysmal in others since there are absolutely environments where flexibility isn't an overriding concern.
As you get more experience you learn to be more explicit about your decisions, but you'll still have your preferences and your defaults and it takes a certain threshold for you to move away from said preferences and defaults.
except that it can get you banned or harassed. I had deng(dang?) follow me around, and he (she?) was obviously prepping for a ban.
At one point he wholesale deleted a comment of mine because it was widely misinterpreted in a sexist way (I clarified to multiple people, but it wasn't enough apparently). The sad part is the only ones being sexist were the ones interpreting it that way, I was personally shocked that so many people thought I was being sexist.
And that was just the last time he stepped in, he had been threatening me repeatedly, and why? My best guess is either
a) because I was having a conversation with another poster in which he came in and bitched at them, only I defended that poster, or
b) after I was "flag bombed" (I think that's the term?) for having an opinion many didn't like [1].
I'm not sure which because they were both a part of the same thread, but immediately after I started seeing deng everywhere, threatening me repeatedly. I've been online long enough to know what being targetted by a mod looks like.
This idea that you shouldn't be self censoring on HN is naive. It means you haven't attracted deng's ire (or one of the other mods) or said something that was truly an "unsafe" minority opinion.
There's apparently another person who won't allow linking from HN I believe? I don't know the full story behind that, but I can absolutely understand that person's opinion of HN.
HN is honestly one of the oppressive environments for actual discourse I've seen and that's not a joke. The only site I can think of off the top of my head that's unequivocally worse is hubski.com.
The poster who spoke about 4chan is spot on. You can optimize for good discussion or you can optimize for feel good politeness, but you can't optimize for both. Most communities attempt to balance it, but HN leans far to the side of feel good politeness. You don't actually come to HN for discussion, you come to HN to make comments on random things that pop up. Unfortunately, some mistake that for discussion, but I'm of the opinion those folks don't actually understand what a good discussion is.
To end this post, I'm just going to say I find your opinion to be horrifically naive. Even now I know the reaction is going to be folks piling on to tell me how great a person deng is, and I'll find myself taking another multi-month long hiatus from HN until deng (once again) forgets about me.
I've been online for entirely too long.
[1] The poster I defended took issue with my opinion and we were going round and round about it and deng apparently thought he was getting too heated. I was the recipient of said "heat" and I disagreed.
I never said I like PHP. I use it daily for work and hate it. I was just refuting something on a factual basis -- PHP's "standard library" is absolutely enormous.
We run almost everything on Wordpress and still make fun of PHP. And JS. And Java. And ObjC. And Ruby. And Python. Every language has its share of problems and sometimes you just have to vent.
Sure, but: "we make fun of every language/every language has its share of problems, etc." is a completely different statement/message than "everybody makes fun of PHP" -- which singles it out as some huge abnormality...
If it does that, the question of a framework or high level documentation or user stories don't matter. Those are tools used to help achieve the above govals, but if you can do so without the use of the tools then the tools aren't all that useful for that particular project.
I sometimes think people miss the forest for the trees. I make the same argument about tests and TDD, the goal isn't tests, the goal is stable, maintainable software. If you can do that without tests, then you don't need tests, and that's ok.