Hacker News new | past | comments | ask | show | jobs | submit login
[flagged] Falsehoods programmers believe about programming (sicpers.info)
32 points by semanticist on Dec 10, 2017 | hide | past | favorite | 59 comments



> 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".


I have this hypothesis that everything I believe is wrong. Probably best not to cling too tightly to beliefs.


There’s a quote in the back of my head which my google-fu has failed to find a source for, but is probably a rephrase of George E. P. Box.

“Everything you know is wrong, but some of it is useful for approximation.”


I thought you were going to end your sentence like this:

>I have this hypothesis that everything I believe is wrong. Probably best not to cling too tightly to that hypothesis.


Maybe unrelated, but one of my favorite sayings is "moderation in all things, including moderation".


Strong opinions, loosely held.


Can you explain this? What is a "strong opinion" then?


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.


So it is like a boss who says,

  "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)

Is this what you're describing?


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)?


Absolutely, I like the way you put it.


I interpret it as taking the best possible decision at some moment but not being afraid to change it when new data is available.

(Substitute decision with belief)


> Compiled languages are always faster.

More like: there is such a thing as a "compiled language".


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...

Interesting... very meta :-)


That points to an article saying java is sometimes faster than c++. Maybe I'm just being dumb but isn't java compiled too?


You see some people refer to Java as a compiled language because of its compilation to byte code

You see other people point out that Java is not a compiled language as it’s only converted to byte code.

This is one of the few tech pedantic debates where I’ve chosen to not pick sides


I think the author must have meant AOT compiled.


> 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.


> Assuming you mean “integer arithmetic”, the answer is a resounding yes, it's well-defined.

Given that the topic of this article was falsehoods about programming—no, the author did not mean "integer arithmetic".

However, even in the case of mathematics, this isn't true—there are a lot of non-standard models of arithmetic, and which you choose depends on what you're trying to do with it: https://en.wikipedia.org/wiki/Non-standard_model_of_arithmet...


> However, even in the case of mathematics, this isn't true—there are a lot of non-standard models of arithmetic

Believe it or not, there are people who use actual integers in computer programming. Not everyone is stuck with C and its ilk.

> However, even in the case of mathematics, this isn't true—there are a lot of non-standard models of arithmetic

Meaning is to be found in the axioms themselves, not in models.


> Meaning is to be found in the axioms themselves, not in models.

Yep, and all of them are incomplete.


https://en.wikipedia.org/wiki/True_arithmetic would like to have a word with you.

(Of course, it's not recursively axiomatizable.)


> Of course, it's not recursively axiomatizable.

Then again, who is these days?


> Then again, who is these days?

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.)


What is the result of INT_MIN / -1 ?


There was a point to using “so-called” and scare quotes around “signed integers”. Find it.

Hint: There's no such thing as a “minimum integer”.


List of article themes that are played out



bug-free computer hardware is completely deterministic

This. The CPU has been a chaos box for at least the past 17 years. If not longer.


Not a good sign when the very first item is entirely subjective.


So, you think it is entirely subjective that programming has an ethical impact, and objectively it doesn't?


A classic way it's phrased is "is a gun manufacturer responsible for murder?" It's an age old debate with a lot of people arguing either side.


... 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.


However you define your ethics, programming covers such a large spectrum that you can't objectively assert those areas never intersect.


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.

I could go on.


Lists considered harmful.


"Swift is a good language"


[flagged]


You're breaking many guidelines with this comment and if you don't stop we'll ban this account.

https://news.ycombinator.com/newsguidelines.html


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.


so if i can repurpose someone else's example:

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.


> well that's certainly a controversial way to start a list.

So, what is controversial about that statement? (Note: the fact that you might disagree with it does not make it controversial.)

> does being a knife maker have the same ethical impact?

That presumably depends on the specific circumstances?

Would you say that the decisions of knife makers could not possibly have an ethical impact?


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?


thank you for a thoughtful response.

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?!




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: