> There is some innate affinity for computer programming which you must be born with, and cannot be taught.
This being a falsehood is a matter of considerable debate, and it's impossible to prove (There are certainly some people with very low ability for computer programming, to the point of effectively useless. How would you prove this was entirely nurture and not nature?). This is a not a good candidate for a "list of falsehoods" article.
Nobody will argue that there are certain things you must be born with in order to learn to program. If you are born without a brain - literally without the brain organ - you likely will not end up a successful programmer. This is an absurd reduction, but the point is that there is a necessarily a set of physiological properties one must possess to program. The question is then whether a small group of people possess them, or whether a much larger group do. I err on the side of the latter; while there are definitely aspects of programming today that are pretty inaccessible (I’m looking at you, arcane Unix shell conventions and invocations), the fundamental practice of reducing abstract tasks into fundamental steps is a skill that I believe most humans have the ability to learn.
From a purely logical point of view, it might not belong on a falsehoods list, but it would sit very well on a "useless notions" list, right before "anyone can be taught to program".
A strong opinion is one that makes an assertion and allows for decision making. It’s a little cheeky but the point is that having an opinion is important in making decisions, but be willing to change your opinion in light of new information.
"No, we're definitely not doing that."
"But boss, the vendor just announced (xyz tidbit)".
"Okay, we are definitely doing that."
So it was "strong" because of the word "definite" (it was clear a decision was made) but in fact was open to change in light of the new information? (because it only took a small tidbit to change it)
Not quite, it’s not about the forcefulness it’s about the assertion. It’s also not about the size of information required to overturn. It’s more about the humility of accepting your previous opinion was wrong.
For example, we might have the opinion at our company that REST is the way to build communications over a stateless connection. If a team presents a reason to build RPC and makes a case, it’s allowed to do it.
Another example might be style conventions. Strong opinions here lead to consistently written code. But in some cases a new style will work better and we can change direction. Or a different style fits this file better than all others.
We don’t want to be so hemmed in by our opinions so as to be inflexible to different approaches to the same problem. But that doesn’t mean having no opinion.
Thank you for giving two examples (REST, and style conventions). I was hoping to get examples from you but didn't ask.
I think actually both examples you gave show that the opinion was not "weakly" held: for REST, you mention "if a team presents a reason... and makes a case". For style conventions, likewise, "we can change direction" but the whole point of a uniform style guide is that the style convention itself has huge momentum and can be changed only if there is a very specific case where it "fits better" (your words).
So it seems what we're really saying is something like "we know what we think, but we think about what we 'know'." (I tried to be pithy but came up a bit short.)
Is that a fair summary? That it's about both assertively knowing something, but also being ready to rethink it (if there is a case)?
There's such thing as an uncompilable language, so in the universe of all programming languages, the set of compilable languages is the compliment.
But the article isn't talking about that. It's referring to the canonical implementations used by each language, which is occasionally, but rarely, both compiled and non-compiled.
Do you have an example of a language that can be interpreted but not compiled (formally a language such that there exists a valid program that can be interpreted but not compiled into machine language)?
Kernel cannot be reasonably compiled because compound operatives can depend entirely on user input data. For example, the presence of string->symbol means that a user could insert a custom operator into an environment at runtime then evaluate the expression to which it refers. There's now way to account for this at some theoretical 'compile time', unless you're JIT compiling after every external input, which I'm pretty sure is what we'd call interpretation.
So it can't be statically compiled, although it doesn't require an interpreter provided a full language compiler is part of the runtime of compiled programs whose input can update the code...
> at least the outcome of integer maths is always defined.
Assuming you mean “integer arithmetic”, the answer is a resounding yes, it's well-defined. Of course, so-called “machine integers” are not a faithful model of the integers, and, in particular, so-called “signed integers” in C aren't a faithful model of anything nice.
I have no idea what you mean by “who”. In any case, let's trace the conversation back to the original topic:
(0) Integer arithmetic is well-defined. Nonstandard models of arithmetic are just that - models. The well-definedness of a theory doesn't depend on the existence of a unique model.
(1) The fact you're programming a computer doesn't magically change the properties of the integers. It is even possible to have a data type for integers! (Not in C, though.)
... which is just an idiotic question to ask. The answer is ultimately uninteresting because it is essentially nothing more than a reflection of the definitions used in evaluating the question.
The interesting question is whether the decisions and actions of a gun manufacturer can influence the well-being of humans, and even more importantly, how they do so, as it is just obvious that they can, and in the consequence how gun manufacturers should behave if they are to maximize their positive impact on humanity.
And if we accept that developers are "engineers" (no arguments about chartered or PE status) then the IEEE is quite clear that engineers do have do behave in an ethical way.
IEEE might say that but they're not the definitive authority on age old ethics debates. If you know you're programming ransomware, that's one thing, but it's not always so black and white.
They are for engineering just as the BMA or AMA are for doctors - just because you ain't a CE /PE doesn't mean you should not follow the same precepts.
Terrible list. Lots of things are straw men, or just wrong. And do we really need another one of these lists? Next we'll be back to "X considered harmful". Ugh.
Could you please not respond to what you feel is a bad article by posting a bad comment? I understand the temptation, but there's no information here, and we're hoping for a little better than "ugh".
I don't see why I should have to really. Have you heard the argument that bullshit is a lot easier to create than to refute?
Anyway fine:
> There is some innate affinity for computer programming which you must be born with, and cannot be taught.
Clearly true. Anyone who has been to a non-profit educational school knows there are some people you simply could not reach to program. Of course more people could program than do, but that isn't what he said.
> Compiled languages are always faster
Nobody sane would claim this. People say compiled languages are generally faster, which is true. Besides his link refuting this is to Java, which is compiled! (Just In Time).
> at least the outcome of integer maths is always defined
Yes it is in nearly every programming language.
> every computer on sale today (2017) uses two’s complement notation for negative numbers.
To a rounding error, yes this is true. His link is to a computer from the 60s. Seriously.
> every computer on sale today uses a register width that’s a multiple of eight bits.
Again, probably 99.9999999% do. Actually... Probably more.
That depends on the function of the knife. If the knife is meant for buttering bread, then obviously no. If you're creating a combat knife then absolutely, yes.
Which is precisely the point made in the article. It's not about what you're making, it's about what you're making it for.
The problem is that in programming, if you build a halfway decent butter-knife, the NSA will use it to pry open your window and eavesdrop on you with it, the CIA will torture people with it, and various dictatorships will stab dissidents in the eyes with it.
It's not like bad actors only use Obviously Evil Software. They use many of the same tools we use for similar tasks. The more general software is, the more bad actors are using it, too.
Now, sure, if you're working on Disposition Matrix 2.0 assassinating selection system, or a botnet framework, the moral and ethical fallout is obvious. Short of that, things quickly get a lot murkier, and at some point, the creators of, say, gcc just aren't to blame for every harmful thing compiled with it. At some point, it's simply not a falsehood.
you're suggesting that if i make a knife for buttering bread and it kills someone because i was careless in my creating of the knife, there is "obviously" no ethical impact because my intent was good?
and this leads to my real point. find me 1 programmer who perpetuates this myth that there exists an engineer who says its impossible for their job to invoke ethics.
funny that the top of this list says it's a "falsehood programmers believe" yet not a single person here wants to take that side. either it's painfully obvious or it's not a myth. pick one.
Probably? knife makers decisions have ethical impacts. Specifically with regards to safe hilts, metal hardness, and where they are sold. A brittle blade that was made to save money but shatters and slices flesh on a bone was an ethical impact.
A decision about whether to make kitchen or tactical blades also has ethical impacts. Making a non-reflective tactical assault blade with a knuckle grip and claiming that you did not think about it’s uses is a little silly right?
> A brittle blade that was made to save money but shatters and slices flesh on a bone was an ethical impact.
by that logic, basically every decision we ever make has an ethical impact. which is probably true but kind of watered down.
> Making a non-reflective tactical assault blade with a knuckle grip and claiming that you did not think about it’s uses is a little silly right?
most certainly. therefor, it would also be a little silly to act like knife makers consider ethics of their job a "falsehood".
you can't have your cake and eat it too. either it's so obvious that that programmers are subject to ethics that THERE IS NO MYTH and no one actually believes this, or the myth exists for a reason.
the fact that i might disagree with it (never said i did by the way), would suggest that others might disagree with it, would suggest it is definitively controversial.
a lot of the country would argue that gun makers don't have too much an ethical concern when building guns. surely you have heard the phrase "guns don't kill people". and so how dare me try and apply that argument here on their behalf.
i think the easiest way to point out the controversy in the statement is that NO ONE HERE SEEMS TO BELIEVE IT? SO HOW IS IT A "FALSEHOOD PROGRAMMERS BELIEVE"?
> the fact that i might disagree with it (never said i did by the way), would suggest that others might disagree with it, would suggest it is definitively controversial.
In other words, there are no non-controversial statements, as you can always find someone who disagrees and use them as supposed evidence that there are others who also disagree which thus makes every statement ever definitively controversial?
That doesn't sound like a useful definition of "controversial" to me, and certainly not like what people commonly understand it to mean.
> a lot of the country would argue that gun makers don't have too much an ethical concern when building guns. perhaps you have heard the phrase "guns don't kill people". and so i don't think it's crazy to reapply that argument here.
But that is a discussion about concern, not about impact. Whether gun makers are concerned about the impact of their actions does not have any influence whatsoever on whether or not their actions do in fact have an impact.
Mind you also that the same people who use "guns don't kill people" will usually point out that guns will be used for good, such as stopping criminals, which is explicitly an argument that uses the ethical impact of a gun maker's decision to justify their freedom to make and sell guns--so either they are in fact acknowledging that their decisions have an ethical impact.
> i think the easiest way to point out the controversy in the statement is that NO ONE HERE SEEMS TO BELIEVE IT? SO HOW IS IT A "FALSEHOOD PROGRAMMERS BELIEVE"?
Well, on the one hand, people can believe falsehoods simply because they haven't ever reflected on why they believe them, in which case there is possibly no controversy, but simply confusion.
But also, if I accept your implication that "falsehood believed by others" is maybe somewhat of a synonym for "controvery", is your complaint then that a list of falsehoods/controversies starts with ... a falsehood/controversy?
your first point regarding "no non-controversial statements" points out a flaw in my logic that i hope we can move past to my example.
i try to illustrate, that the graph of `ACTIONS <-> PEOPLE + TOOLS <-> MAKERS OF TOOLS` has been an obviously controversial one in the past as applied to weaponry, using guns as an example. so why should it not be equally controversial for any profession? the tool is variable.
which you answer with your last point: "guns don't kill people" and an admittance of ethical responsibility are not mutually exclusive. and maybe there has never been a controversy like i am suggesting. which is a great point and presses me to reiterate: where is this programmer who does not believe his job has ethical implications?
and IF IT IS a falsehood programmers believe: you think telling some number of programmers they are ethically insufficient could not possibly lead to a controversial discussion?
> which you answer with your last point: "guns don't kill people" and an admittance of ethical responsibility are not mutually exclusive.
I would say it's admittance of ethical impact rather than ethical responsibility, and the apparent controversy actually is just a huge mess of confusion with very little substance that mostly results from people rationalizing away their responsibility by selectively pretending lack of impact.
The thing is, "Whether I produce weapons has no causal connection to people suffering, and I should be allowed to produce weapons because it helps to prevent criminals from making people suffer" is self-contradictory, you cannot actually believe both of those statements at the same time. "Whether I produce weapons has a causal connection to people suffering but I am not responsible for my contributions because others do contribute as well" would be consistent but obviously fallacious (who else could possibly be responsible for your contribution?).
There is a genuine discussion to be had about whether specific actions have a net positive or negative ethical impact, and that can get complicated fast, depending on the action at hand. But the supposed controversy usually is about the simple assertion that indirection and cooperation removes responsibility, though it is expressed in a way that suggests that it removes the causal connection, which is nothing more than a strategy to rationalize, not really something that you can have a controversial discussion about.
> and maybe there has never been a controversy like i am suggesting. which is a great point and presses me to reiterate: where is this programmer who does not believe his job has ethical implications?
Well, that is ultimately difficult to say, because you have to go by what people say, and people usually don't say that literally. But more often than not you see people even here on HN who use arguments of the form "but that was his job", "but he had to earn money" in a context where it seems pretty clear that they think that that trumps all ethical concerns as to the impact their actions have on other people. Whether they actually somehow think that their actions have no ethical impact, or just that they aren't responsible for their impact, is difficult to know.
> and IF IT IS a falsehood programmers believe: you think telling some number of programmers they are ethically insufficient could not possibly lead to a controversial discussion?
Well, possibly, but see above: That could essentially be said about all points on that list. It's somewhat in the nature of a list of "falsehoods people believe" that there could be contradicting voices. So if that is what you mean by "controversial", then I don't understand what your complaint is and why you are picking out that specific statement from the list?!
This being a falsehood is a matter of considerable debate, and it's impossible to prove (There are certainly some people with very low ability for computer programming, to the point of effectively useless. How would you prove this was entirely nurture and not nature?). This is a not a good candidate for a "list of falsehoods" article.