The Surprising Number of Programmers Who Can't Program - <AUTHOR> https://letterstoanewdeveloper.com/2019/08/23/the-surprising-number-of-programmers-who-cant-program/ <comment><USER3> This also fails to point out the surprising number of developers who know their algorithms, know every "coding question" for whiteboard interviews, can copy and paste a ton of code off of StackOverflow to create a quick mockup but also still don't know how to code.

I've known some very talented developers who could never pass a standard software engineering interview but if you give them a week to create a project they'll have something to you that works.

I've also known some very talented interviewers who have never completed a project from start to finish.

I think we just need to all agree that interviewing is hard for Software Engineering and no one has a good solution for it yet. I am constantly on the lookout for someone who finds something that is both effective and doesn't waste a ton of time for both the interviewer and interviewee.

<comment><USER4> Here's mine:

1\. I ask about prior experience, following up on any interesting resume items or comments. I try to act like a "biographer" (per the book "Who") and just learn their story.

2\. I ask them to describe data flow in a basic web app. If I push this UI submit button, explain the progression of data from the client to the database.

3\. I ask for an explanation of core concepts of the framework I'm interviewing for or any one they've used.

4\. I ask about version control concepts and some specific git commands.

5\. I ask about prior team practices, e.g. what types of meetings they have and what the interviewee thinks of their effectiveness.

6\. I ask about their knowledge of ops/DevOps, e.g. explain how a pipeline works.

7\. I ask about basic CS/object orientation/language concepts, e.g. static vs. dynamic typing.

8\. I ask what their most interesting project or story was and why it resonated with them.

9\. I ask what their toughest debug was and how they solved it.

10\. I ask about their experience with testing and opinions on how best to do it.

Between all that you get a pretty decent picture of what level they're at and what is their capacity to learn.

<comment><USER5> My problem with this style of interview, is that someone like me, who is a mediocre programmer, but stellar communicator will fare MUCH better than someone who is a brilliant programmer but poor communicator.

I spend lots of time reading about smart people's opinions on programming, and will be able to recite that knowledge and play it off as my own hard-earned experience. I could talk for an hour about tradeoffs between Vagrant and Docker, without ever having spent more than a few hours actually working with Docker.

If the interviewer is really sharp they could maybe dig deep enough until they see that there's nothing beneath the surface, but I suspect most wouldn't do so even if they were capable.

<comment><USER4> It depends on what you need. If I need a Docker expert, you can be sure I'll tailor my interview to a Docker deep dive with very precise and detailed questions about commands, concepts, etc. The first step in any interview process should be to think very clearly about what you need and to then adjust any template you have to those needs.

<comment><USER5> Yeah, I was mostly thinking in the context of a junior role. Generally bullshitting of any kind will be caught out. My point is not that someone could bullshit their way through an interview of this style. It's rather that I think it unfairly favours people with a lot of general and high-level knowledge, over someone with strong fundamentals.

</comment></comment></comment></comment></comment><comment><USER6> When I was running hiring at a previous startup, we ran into this issue often. When I proposed adding FizzBuzz to our screening process, I got a fair amount of pushback from the team that it was a waste of the candidates' time.

Once we'd actually started using it, though, we found it filtered between 20-30% of our applicant pool, even when we let them use literally any language they desired, presumably their strongest.

However, it usually only filtered fresh grads (CS students from top-10 schools). Those with previous work experience almost never had a problem.

<comment><USER7> That's the thing... you feel fizzbuzz is effective but the fact that it filtered out CS students from top 10 schools says more about the test then it does the student.

Think about it, it takes way more work, way more intelligence to get into and graduate from a top 10 school then it does to learn how to pass a fizzbuzz test.

I can 100% tell you that ALL CS grads from top 10 schools can pass fizz buzz given a day to do it. That being said I can also say literally most of your coworkers who are administering the fizz buzz test will not be able to ever attend a top 10 school given a lifetime to prepare.

It is incredulous to me that people can literally dismiss an MIT candidate because he didn't pass a fizzbuzz test. Do you not realize that it is 100x easier to learn programming then it is to get into MIT?

People need to get it through their heads. Programming is actually really, really easy. That's why there's so many people who can learn how to do it without going to college. But instead I see most people thinking that they are so intelligent they didn't need to go to college because they can just learn programming.... That may be partially true, but most of what I see is actually just people learning programming because they COULDN'T get into university.

But it still begs the question... what is making an MIT student fail a fizzbuzz test? It's like failing to recite a paragraph out loud with zero stuttering to an audience who is judging your future career. How could one possibly be so stupid and not stutter? If you stutter it must mean you can't speak english, just like how if you fail a fizzbuzz test is must mean you can't program.

To be honest I don't know why so many programmers fail. But I'm honestly pretty sure fizzbuzz is so dreadfully easy that there is some other factor that is influencing this high failure rate.

<comment><USER8> > To be honest I don't know why so many programmers fail.

Because many people are not capable of programming.

More importantly, the school you go to has nothing to do with your capability of a programmer. I worked with quite a few people in my CS department who couldn't program their way out of a paper bag. Most were still very bright people who I assume figured out successful careers.

I suspect a lot of the recent CS grads who can't do fizzbuzz end up following careers that don't require programming.

It's also important to understand that Computer Science is not Software Engineering. Computer Science is fundamentally a mathematical field. Don't conflate the two.

<comment><USER7> >Because many people are not capable of programming.

You think too highly of the field. Programming is easy. Everyone, and I mean everyone can do it and eventually become good at it, especially fizz buzz.

>I suspect a lot of the recent CS grads who can't do fizzbuzz end up following careers that don't require programming.

Nah, more than likely they learn the fizzbuzz question and still become programmers because programming is easy. It takes time to learn programming like it takes time to become good at basic algebra or calculus, but literally anyone can do it.

>It's also important to understand that Computer Science is not Software Engineering. Computer Science is fundamentally a mathematical field. Don't conflate the two.

The two fields are intricately related. Most junior devs who lack the academic rigor like to separate the fields into a dichotomy and use this dichotomy as an excuse to justify the lack of expertise on the academic side.

After a certain amount of time you'll realize that all of programming is rehashing the same concepts over and over again just in a new framework/language. To gain deeper insight into the nature of computer programming and engineering and to actually become better, the dichotomy must be eliminated. In the upper echelons of Software engineering, people will realize that computer science and software engineering merge to become the same thing. Juniors have yet to realize this.

Take this for example. Did you know that a unit test does not guarantee correctness of a function? To guarantee correctness of a function you'd have to write a unit test for every possible input of a function. Did you know that computer science offers a way to do prove your program 100% correct without writing a single unit test? This is an example of a merger of engineering and theory. A computer is a deterministic machine amenable to proof yet we choose to treat it like a black box and test it as it was a chaotic system that needs to be tamed. There are advantages and disadvantages to both methodologies but I illustrate this here to show you that SE and CS are in fact different aspects of the same thing.

<comment><USER8> Computer Science has very little to do with unit testing.

Look at things like theoretical computer science and category theory. The word "class" comes right out of basic category theory. (You don't need any category theory to program a computer, but it directly influenced object oriented programming.)

And, if you think programming is easy, consider yourself lucky. Take the time to learn some soft skills. Maybe you'll understand your downvotes.

<comment><USER7> > Take the time to learn some soft skills. Maybe you'll understand your > downvotes.

lol, I'm not here to win votes. This is the internet. This comment alone shows a lack of soft skills on your side. Except for when the person I'm communicating with chooses to get personal I never get personal when I talk about things on the internet and I never hold back either, that's part of the appeal of being here. I can tell what I believe to be the truth without concern for your feelings. Despite the lack of concern for your feelings I do make deliberate effort to not attack YOU directly. I am aware that the things I say may piss people off but in all I'm just here to talk about the topic at hand without worrying about real world stuff like your feelings.

>Look at things like theoretical computer science and category theory. The word "class" comes right out of basic category theory. (You don't need any category theory to program a computer, but it directly influenced object oriented programming.)

OOP was invented before anyone knew that category theory had anything to do with computer science. Class most likely comes from set theory. Also if you work with category theory or languages that implement the theory you'd know that the morphism is central to the theory not the object. In other words it has much more to do with Functional programming then it does with OOP. OOP has virtually no theoretical basis and it fits into category theory in a very awkward way.

>Computer Science has very little to do with unit testing.

It does. I'm literally talking about how it does have to do with theory.

In computer science there are two ways to verify 100% correctness of a function. You either prove it correct given an initial condition and a final condition. Or you unit test every possible input with the associated output. Software Engineering chooses to go with neither approach. Software engineering chooses to go with a tiny subset of all possible unit tests and hopes that the correctness of that subset of tests correlates with the correctness of the entire domain. This is a more applied math (aka statistical) approach to verification that increases confidence but does not verify the program to be correct. (This is also debatable how much statistical rigor unit tests have as its a usually done with a very ad-hoc approach... unit tests are usually too few in number and highly biased).

All of this is part of Computer Science. You will note that the paragraph above uses the word "unit testing" Software Engineering is simply application of said theory or application of no theory but they can be one in the same.

>And, if you think programming is easy, consider yourself lucky.

I hear parents talking all the time about trying to teach their kids programming. Internet tutorials are all over the place. It's easy in the sense that mostly everyone can learn it. It's not easy in the sense that it does require a lot of effort.

What's hard is quantum physics. You ever hear of an internet tutorial that will teach you all of quantum physics? An udemy course that will cover all you need to know? Ever hear parents trying to teach their kid about quantum physics? Quantum physics is hard, programming is not.

</comment></comment></comment></comment></comment></comment><comment><USER9> I've seen this first-hand both in interviewing and on the job. I expect it in interviews, but I never thought I'd see it from a colleague.

I once worked with someone who refused to use loops. He would write everything out... Thousands of copy-pasted lines with incrementing values... He'd often insist that things only deal with certain numbers of inputs for this reason. E.g. he had a bulk data transfer tool that would only transfer 10 items. If you had less than ten, you had to make dummy files. If you had more than 10, you were supposed to use it multiple times. He was also considered "a key technical leader", and constantly lauded by management. He was in his late 20's and had a CS degree from a relatively well-known school. I'm a geologist, so I was constantly told I "just didn't know anything about programming" when I'd ask why. (I suspect he thought it was an optimization, but he never explained.)

This was at a company that's a household name (though not a tech company). I suppose the moral of the story is to be careful about assuming that experience implies a certain level of competence.

<comment><USER10> > who refused to use loops. He would write everything out... Thousands of > copy-pasted lines with incrementing values

You're fucking joking us right? I've seen bad stuff but this is far, far beyond what I consider credible incompetence. You aren't serious?

(Edit: you mention being a geologist. Happens something similar occurred - <USER2> was being uber'd by a geologist (he described himself thus) who could talk at length and very knowledgeably about the geopolitics of oil price and reservoir modelling, all fascinating stuff to me. But he mentioned a fossil that he could barely describe beyond being 'like a snail with bits coming off'. I offered that it was an ammonite and he seemed unfamiliar with the word. Also seemed to struggle to know what bauxite was when I raised it. I found those lacunae rather strange).

<comment><USER9> It's not quite as crazy as it sounds. It was a case of laziness and a belief that he was smarter than the compiler, rather than a lack of knowledge of basic flow control.

For context, the "ten-item-only data transfer tool" was a plugin to a much larger piece of software with a Qt-based gui. He copy-pasted an example from the vendor that used a QLineEdit input widget ten times because he couldn't be bothered to look up how to use a QListWidget or something similar.

The "avoidance of loops" I was referring to was mostly in the inner loops of volumetric image processing routines. A lot of things we worked on were domain-specific operations that are vaguely analogous to a convolution -- there's usually a moving window operation. He'd happily loop over the volume, but insist on writing the inner loop (the actual moving window) as repeated copy-pasted lines.

He was basically doing manual loop unrolling, which could actually make sense in this context. (The codebase was C masquerading as C++.)

However, the compiler was perfectly capable of optimizing a loop for the exact use cases he was working with. There was zero benefit manually unrolling a nested loop for a 5x5x11 or 3x3x7 window (in once case he did it for a 25x25x51 window -- 31k lines of C++... Generated with Perl... Yeah...)

On the geology note, palentology is actually a fairly niche field. I wouldn't assume that every geologist has taken a paleo class. It's usually on the "take 3 of these 5" requirement list in undergrad, and it's not something you take at a graduate level unless that's your specialty. I certainly took a couple paleo/evolutionary biology classes, but it's useful for what I used to do. It wouldn't shock me if someone primarily doing reservoir modeling didn't know what an ammonite was.

<comment><USER10> Ah, thanks for the loopy explanation.

Actually any loop unrolling to that extent is counterproductive as it will simply burst the instruction cache, which causes expensive reloads from further down the cache hierarchy, whereas loops can be minimal or even zero overhead. I'd be really curious to know how much performance that cost.

re. ammonites, ok, thanks for explanation!

</comment></comment></comment></comment><comment> non-entity I now consider myself one of these people. I've written and shipped a number of business applications, but have little understanding of CS concepts and was unable to complete some leetcode problems I tried a while back. Unfortunately, I find myself mentally unable to keep focus and and attention to properly learn. I've looked at going back to school as well, but cost make it impossible.

Anecdotally, i recently became semi_obsessed with operating systems and OS development.I tried to pick up C wanting to do some kernel development on NetBSD and thought it would be easy, given the familiar syntax, u just needed to learn pointer logic/ arithmetic. I was finally defeated after trying to write a program with multidimensional arrays and working with them decayed down to pointers. At the same time, though, I _need_ a new job asap, so I've given up on the interesting stuff and am back to learning stuff for employability reasons only

<comment><USER11> > I now consider myself one of these people. I've written and shipped a number > of business applications, but have little understanding of CS concepts and > was unable to complete some leetcode problems I tried a while back.

I don't think fizzbuzz == leetcode? I thought fizzbuzz was like super basic can you write a for loop type question.

[https://blog.codinghorror.com/why-cant-programmers- program/](https://blog.codinghorror.com/why-cant-programmers-program/)

I think it's pretty common for people to not be able to do leetcode. I learned the concepts in college and usually did very well in class. I didn't even bother preparing for interviews and could still pass.

However, after working for a while I don't think I'd be able to do them anymore, or at least not at the speed which is expected.

<comment> non-entity A fizzbuzz is something in could easily write. I think I was working on some binary tree problems at the time

</comment></comment></comment><comment><USER12> Whats more surprising is the number of programmers who defend this, i.e. claiming that questions like Fizzbuzz filter out good programmers due to interview pressure or whatever. It's a simple loop, folks. Writing code _and talking about it_ is the job, and if you can't do that you can't do the job.

EDIT: Contrary to what some believe, there is no programmer who you simply hand requirements to and then they take those requirements to a dark room, produce programs that fulfill those requirements, and then reappear and hand you the programs, all in silence without looking you in the eye. Programmers need to be able to _communicate_ about the code they're writing to collect requirements, explain problems, etc., and if social anxiety keeps them from doing that, social anxiety keeps them from doing their job.

<comment><USER13> Do you have any good data on this? Maybe those people are right!

<comment><USER12> A programmer is someone who programs. If one cannot program they cannot be a programmer. It doesn't take a degree in data science to figure this out.

</comment></comment></comment><comment><USER14> If so many well paid people at big companies can't do it, maybe that's an indicator that it's absolutely not a good screen at all, that there are far better screens that can be used to weigh developer worth, and you're just so far down the rabbit hole that you can't see what's clearly obvious: once you get past the arbitrary tech hoops most developers only need about 30% of their entire skillset to be programming skill to be of great value to a business.

No one screens for understanding complex business domains, breaking risky big scope tasks down into iterative low risk steps, leading meetings / conversations where you have to rethink complex tech requirements into non- technical speak.

<comment><USER7> I agree, but the test is also dreadfully easy. Literally it's hard to see why anyone would fail.

The more interesting question is why did they fail? Why is this a bad barometer or what is making this a bad barometer despite it being so easy?

If you took a career software engineer that would otherwise fail a fizzbuzz interview and put him alone in a room with a computer for an unlimited amount of available time and made it known that he's just solving a fizzbuzz question for fun and not being judged for a future career... I'm willing to bet that he will could walk out of that room in reasonable time with a working fizzbuzz.

If you did this for 100 individuals with the exact same credentials as the person above I'm pretty sure you could get 99 people who walk out of that room with a working fizz buzz in reasonable time.

</comment></comment><comment><USER15> As a software developer, I spend much, much more time reading code, trying to understand code, looking for bugs in code, and tweaking existing code, than I do writing totally new software applications. Although I agree it is surprising that many people can't reason through fizzbuzz, it is very possible to make valuable contribution to a code base in a language that you don't have the syntax for the "main" function memorized.

<comment><USER16> It's definitely possible to make some other contribution, but not as a "programmer". I can't imagine giving a task to someone who can't construct a basic for loop and a conditional statement.

</comment></comment><comment><USER17> "I've been working since the 90s and I never attempted to do FizzBuzz. Is it really relevant?"

So, when stating "can't do FizzBuzz in interview" I think there are two meanings: (1) Candidate attempts to do it, writes some code in language X with some (many) syntax errors and some logic errors and (2) Cannot do anything _at all_ , i.e. candidate there's no response and the onscreen cursor does not move (usually this is a phone interview). My experience with candidates I've seen is that the ratio of (1) to (2) is about equal!

Depending on the number and the of errors, (1) could be worrisome but the issue that people generally bring up in discussions on FizzBuzz is the utter incredulity of (2).

I'm mechanically challenged and have never changed a tire, yet , if asked to do so, will make some movements that are roughly aligned with the goal, albeit may be laughable to more knowledgeable people. Ditto for cooking a simple dish, e.g. spaghetti. I think this residual knowledge is acquired by osmosis through being around people (or watching TV) doing the task.

So, the most unnerving aspect of (2) to me is that it shows that the candidate does not even has this residual knowledge about programming.

<comment><USER18> As a counterpoint, your real-world equivalent example is kind of bad. A normal person who had never changed a tire and got a flat would, as step #1, Google or YouTube "how to change a tire" and follow the steps. Or perhaps look in the owner's manual. Randomly rummaging around in your trunk and trying to puzzle out how to use a bottle jack and get the lug nuts off/on correctly is a poor way to go about it. Similarly, in real-world programming if you get to a requirement to do something you've never seen before, the first step most programmers I've worked with would take is looking up potential solutions that already exist.

The problem, of course, is that if you're in the middle of an interview and someone throws a programming problem at you, your first instinct to go look up potential solutions would generally lose you the job opportunity. A better test of real-world skill needed would be to give them some variant of fizzbuzz code then ask them what it does, or put a bug in it and ask them to find the bug and fix it based on the expected output of the function.

</comment></comment><comment><USER19> Let's assume everyone gets a job in industry.

Those people who couldn't program their way out of a paper bag in the first interview probably went on to solve whatever issue it is they were having that day (nerves, not ever having heard of modulo etc) and subsequently get more practiced by at least the 3rd interview. All of a sudden they can magically program.

I just don't buy the premise that these people can't program, get rejected from every interview, give up and drop out of industry.

I'd say the vast majority of them get jobs. And you're hiring filter can't calibrate for how the previous interviews have set the current candidate up for your interview.

If you could be a fly on the wall for every interview the candidate you just hired had done, there would likely be some in which you would have assessed "this person isn't capable of doing the job".

The signal/noise ratio in hiring is abysmal.

<comment><USER20> I can usually tell when I lose an interviewer. They stop paying attention and start fiddling with their smartphone.

Every time I start a new job hunt, I have to fail a few interviews before I get practiced up again.

<comment><USER19> Exactly.

Since interviewing is a skill and interview skill is used as a proxy for job skill and interview skill is a function of recent interview experience, job experience, and your mix of personality traits, and only two of those are roughly stable. Job experience is a slowly changing dimension, but recent interview experience changes very rapidly and it has a huge effect on interview skill, and the interviewer has no way to calibrate for it. Instead they always try to calibrate for job experience. Interviewers also don't have any hope of calibrating for your mix of personality traits.

The whole thing is basically a crapshoot. But I take comfort in that. I don't ever feel bad if I get rejected. I just see the process as essentially random.

</comment></comment></comment><comment><USER21> Was a fairly new engineer, when an engineer with a few years of experiencein the office, who was taking classes on the employer's dime towards a masters degree, asked me for assistance.

She was trying to run a C program she'd created, but it wouldn't run. I asked if she'd compiled it. She asked what a compiler was.

How can a person could survive in an office where C was the main language, and be taking courses that assumed familiarity with C, and still not know what a compiler is?

Turned out she was very skilled at taking credit for other people's work.

<comment><USER22> To be honest such scenario is not so hard to imagine. When I think of my studies, it was probably some introduction to Java, we learned how to use javac during first lesson, but never used it since, because we just clicked button in IDE. Someone who missed the lesson, might never noticed he misses basics.

With advanced build systems in some companies, someone who arrives from scripting language, is shown build system and told to look up the syntax might not ever realize the gap in his knowledge and at the same time might even be productive part of the team.

</comment></comment><comment><USER23> > FizzBuzz [...] You wouldn't believe how many people can't do it.

This is so true. IME, less than 50% of applicants can even get close. Mostly due to not remembering or even knowing about the modulo operator or a suitable workaround.

<comment><USER24> If mod isn't something needed for whatever their normal work is, is it a valid test? Or are you potentially throwing away otherwise good candidates because of it?

<comment><USER25> In my experience one sees roughly similar results with:

"Write a function which counts the number of a's in the input string."

"We will give you an array of words. Print out each word which appears more than 3 times in the array."

"We will give you two arrays of words. Print out each word which is in exactly one of the arrays."

It's not _just_ the mod operator. These are toy problems for difficulty but they're _not_ "implement the rules to a children's game"; with a few seconds of effort you can describe a boringly plausible business reason for having to implement them during a fairly pedestrian career.

<comment><USER26> Bear with my potentially dumb solution, but i'm trying to understand what an interviewer would look for in answering questions like these. For the third, in python, could you make both sets and print the symmetric difference? Does this (a) demonstrate practical knowledge of python or (b) necessitate a follow up from the interview to provide a solution that does more of the "work"?

<comment><USER27> Since these are riffs on fizzbuzz, the goal is just to evaluate whether a candidate can use programming to solve these at all, i.e. whether they can 1) think through how to accomplish a basic task with some data and code, and 2) implement it in a language they know.

The goal of fizzbuzz in a phone screen should not be to see if someone can solve it in an optimal memory-efficient framework-idiomatic way. Clever syntax and data structure use is lovely, but these are really about finding whether someone can use a 'for' loop and an 'if' condition.

</comment></comment></comment></comment></comment><comment><USER28> I've grown fond of using:

      </comment><comment></comment><comment></comment><comment>

      def alpha(n):
          if(n <= 1):
              return n
          else:
              return(alpha(n-1) + alpha(n-2))

      what is alpha(5)?
      </comment><comment></comment><comment>-----

Instead of fizz. They don't have to recognize that it is fib or do it in their head, on paper is fine. No perfect syntax under pressure to worry about. I feel okay with an easy smile, handshake and thank you for your time when I get that confused/embarrassed/angry look like I've just asked them to translate hieroglyphics. Works out nicely.

</comment><comment><USER29> While I agree there are some people who just can't program, I think it's worth pointing out that in many cases, the candidate who simply cannot FizzBuzz in one interview, will do so (or other similar tests) perfectly well after a few interviews. Have you even blanked out on something you knew the day before the test? Most people have. Some (not all) of these interview bombs, are by people who know perfectly well how to program, but can't do it in an interview (until they've done a few interviews and get over that).

</comment><comment><USER30> Reading this article and these comments made my imposter syndrome just fade away! I can't imagine how a student could make it through a CS program and not be able to fizzbuzz.

</comment><comment><USER31> I was just thinking about programming and how to get better at it today.

I think a huge crutch for a lot of people is the immediate feedback loop execution gives you. Rather than truly understand the api we're using, I think there's sometimes a tendency for programmers to just skim, try a function call, and see what the repl/executable or w/e does, and to roll with that. While this works for getting things done it doesn't really improve your understanding. I think practicing programming without the feedback loops the computer provides, e.g. based on documentation and reasoning alone, is a great way to become better and more disciplined. You can do this with pseudocode, whiteboards, or even with actual languages, forcing yourself to write complete programs/features before turning to the repl instead of a piecemeal write then verify approach.

</comment><comment><USER32> This is basically just a hacker news comment, but instead on someone's blog.

</comment><comment><USER33> I failed at FizzBuzz in a coding interview, my first coding interview in fact. It wasn't because I don't know what modulo is or couldn't forgive out the core logic... I just completely choked and my mind went blank. I made a function using a switch operator, but I couldn't figure out how to do a for loop or apply. Hot Shame!

I work well under pressure. I generally have no issues with speaking in public or performing; I majored in music in college. My programming skills have lots of room for improvement, but that hasn't stopped me from writing lots of useful, maintainable, performant code.

It sucked to fail at FizzBuzz. I've been working at my algorithms and syntax, but also trying to code in front of others as much as possible.

<comment><USER34> Exactly. Even when I am typing something with a friendly coworker causally looking over my shoulder, I tend to make way more mistakes then I would if I was by myself.

I've been interviewing a lot of people, and it is very, very important to make them feel as comfortable and as much at ease as possible in couple of first minutes etc. Otherwise you're going to be testing their stress resistance, and not creative thinking. And it is just impossible to completely remove the stress.

</comment></comment><comment><USER35> This sort of finding always makes me wonder if the issue is that there are somehow loads of programmers who have apparently had long careers who can't program or if there is something wrong with the method of determining it?

With quotes like:

> So, as someone who spends maybe 20% of their time hiring, it's still a very > effective screen. You wouldn't believe how many people can't do it. People > at big companies, respected places. It's surprising.

Shouldn't people start questioning the validity of their method?

</comment><comment> enahs-sf I regularly do technical phone screens at my company and it is amazing the number of people with masters degrees or very pedigreed backgrounds who are unable to solve a relatively simple problem. I think part of it is performance anxiety being put on the spot, but I have noticed that asking anyone to write java or c++ without an IDE is very akin to taking a fish out of the water.

<comment><USER36> Maybe I'm in the minority for the HN community, but even I would struggle to write Java without an IDE. I've done it before and compiled manually using javac, but if someone asked me to do that in an interview I might struggle. The IDE just does too much in java, from generating boilerplate code, to managing packages and imports, and autocompletion.

Maybe that's the reason I've almost never done interview questions in java. I always use python/javascript, because I write those with VIM, even though, until recently I did only a small percentage of my professional programming with those languages.

<comment> enahs-sf definitely. Tools like coderpad naturally lend themselves to dynamically typed languages.

</comment></comment></comment><comment><USER37> In the workplace we don't write katas, thats all there is to it... We have tools that we are able to offload most of the specificity required for real programming => Code examples, Documentation, Stack Overflow, IDEs, etc. ... This is both efficient and lazy.

There's also nuance to the "fizzBuzz" thing that people always leave out when they say that developers can't do "a simple fizzBuzz". Things like => It needs to be done on a whiteboard w/o syntax errors, they give FizzBuzz a significant variation, a requirement is slipped in to have fizzBuzz print on the same line when 15s come up, tons of things that make "a simple fizzBuzz" not so simple to pass if people aren't paying attention.

Gun to their head, IDE in hand, and stack overflow at their beckon, the vast majority of those programmers wouldn't have a problem stringing together fizzBuzz... but thats not really the question being asked in an interview now is it?

</comment><comment><USER38> I am one of the people who was involved in the original discussion twelve years ago.

It is incorrect to say that there are a surprising number of programmers who can't program something as simple as FizzBuzz. The vast, vast, vast majority of working programmers have no trouble with such ridiculously simple toy problems.

However, although the overall proportion of self-identified programmers who can't program FizzBuzz is very, very small, the proportion of job applicants who can't program FizzBuzz is surprisingly large.

The entirety of the "surprise" as originally described was that the percentage is so out-of-whack. But once you think about it, it is not so difficult to understand why this may be so.

Competent programmers spend most of their careers working, not interviewing. If they are looking for a job, they tend to only go to a few interviews. Whereas, incompetent programmers spend more time looking for jobs, and when they are looking, they tend to apply over and over and over again to job after job after job.

So every company that has an opening gets "spammed" with the same couple of hundred applications from the same people the are applying for job after job after job. And many of them can't program FizzBuzz.

Whereas, the few competent people looking for a job tend to get an interview or two through referrals, then get an offer, accept it, and they are back in the workforce. But the couple of hundred applicants who can't program FizzBuzz shoulder grimly on, applying for the next job opening they find.

The net result is that if you have a job opening, you might have to filter out 90 or 95% of the applicants as "no-hopers," but that does not mean that 90% or even 9% or even 0.9% of programmers cannot program FizzBuzz.

TL;DR: The sample of programmers applying for a job is not representative of the set of all programmers, not even close.

<comment><USER39> I am someone who has changed development jobs quite a lot, far more than the average for my seniority.

Skill in software engineering can't just be measured by skill at writing the language, and this is trending forward faster and faster. The really accomplished engineer is one who has experienced many teams, many managers, many processes, and many deployments.

The accomplished engineer is opinionated about testing methods and about code readability, because he has suffered under many misconceptions about these things and taken the time to consider the alternatives.

<comment><USER38> Even if you change jobs frequently, and take long sabbaticals (I took a year off for the birth of my first child, and another to write one of my books), you probably still spend much, much, much more time working than actively seeking jobs from strangers.

</comment></comment></comment><comment><USER40> Re: FizzBuzz, one factor could be that it's deeply procedural/imperative in nature. Whereas HTML, CSS, and functional programming styles (which rule the JS world and quite a few others right now), have you thinking declaratively. If, like me, that's most of what you've been doing for the past couple years, FizzBuzz may take you a second because you have to dust off a different way of thinking. If you _learned_ on declarative/functional stuff - in a web dev bootcamp for example - and never had exposure to anything outside of those practical skills, you may be totally lost.

Is that a bad thing? Probably. Computers are, at their base, imperative. So it's important to have a grasp on that way of thinking. But does it mean these people who've held "programming" jobs are frauds who don't know how to program at all? Not necessarily, I don't think.

<comment><USER41> If that's the case, you can solve FizzBuzz using a declarative style in JavaScript, surely? It's pretty trivial in Haskell, which is declarative all over.

<comment><USER40> It's a little more natural in languages like Haskell and Python that have range generators; JS doesn't. You can do a hack where you initialize a sized array and then map over its indices, but that's unusual.

Part of it may have been that the problem description I read used very imperative language. It didn't say "return a list of Fizz, Buzz, and FizzBuzz", it said "for each number that's ___, print X". Very side-effect-y.

<comment><USER40> Another thing is modulus. I know off the top of my head that mod == 0 means a number is divisible by another number because we used it all the time in my college programming assignments. People without a formal background may not even know what modulus is; there are lots of programming domains where it's not really useful.

<comment><USER42> > there are lots of programming domains where it's not really useful.

Off the top of my head, I can't think of any.

Even if all you're doing is a simple CRUD app, alternating attributes on a list you're outputting to HTML is easily done with `if i % 2`.

<comment><USER40> I'd do that particular case with CSS

In five years since graduating I haven't used modulus outside of toy code challenges

</comment></comment></comment></comment></comment></comment><comment><USER43> This is fairly common.

I've seen the tech tests we receive from potential candidates and they are for the most part appaling. Our technical test is incredibly simple as well and they can do it at home in their own time.

Imagine something as simple as write a console app where you have a class that represents an Account. Write a function to debit and credit an amount that value and have a property to return the balance and a property to show if the value is negative.

The amount of code we see that looks something like:

        public class Account
        {
            public decimal Balance { get; set; }
            public bool IsNegative { get; set; }
            public void Debit(decimal amount)
            {
               Balance = Balance - amount;
               if(Balance < 0)
                 IsNegative = true;
            }

            public void Credit(decimal amount)
            {
               Balance = Balance + amount;
               if(Balance >= 0)
                 IsNegative = false;
            }
        }

In fact we've seen that almost line for line more than once and they get an hour to do it. Worse, we've seen stuff that can't even compile!

I've wanted something harder for a while as a filter and we changed the test to write a very basic WEB API. The tests you get back are equally hopeless.

When you finally get a test that looks somewhat acceptable and they get an interview, they invariably are awful in the interview if you ask them anything other than the most basic of questions.

We are still looking. Getting someone you can give a problem to and they can't be left alone for a reasonable period of time, with minimum of hand holding, and they will come back with a working, implemented solution is so hard.

If these programmers that can't program drop out of the industry, then great. Maybe we will eventually raise the bar for what it means to be a programmer that we will get some decent software.

<comment><USER44> It would be helpful for the junior folks among us (and those still learning) if you explained a bit about why that code is so terrible.

<comment><USER43> Sure,

Well first off.

IsNegative and Balance are idependantly mutable.

I could do this:

         var account = new Account();
         account.Balance = 500;
         account.IsNegative = true;

Or

        var account = new Account();
        account.Balance = 500;
        account.Credit(-600);

Now Balance is - 100 and IsNegative is false.

Or vice versa for both.

I would expect anyone applying for a job that is asking for 5+ years of experience to pick up on something as basic as this.

<comment><USER45> That was your criterion?

OK... so you're complaining that the coder could use the api to violate an invariant. I've worked with millions of lines of code and this is certainly not a criterion I'd use to evaluate a serious programmer. Many codes I work with permit this sort of behavior (I guarantee you can mess up using the C library this way).

</comment></comment></comment></comment><comment><USER46> I managed software developers for many years at a fairly well known software company, where the first gateway for a hire was an advanced Math or CS degree with an undergraduate gpa of 3.5 or higher from a tough school (undergrade gpa because we felt that was more indicative of raw talent or work ethic than graduate gpa). This was followed by rigorous testing in logic and programming. Even after all that I found there were still between 10-20% of hires who could not code. Many with Masters or PhDs in Computer Science.

My theory is that coding is kind of like carrying a tune in music - either you have it or you don't. It's not an intelligence issue or a matter of education. These were bright folks. There is a mysterious innate ability that you must have to begin with, and some just don't.

</comment><comment><USER47> The biggest thing that has jumped out at me is there seems to be a whole generation of programmers that can't troubleshoot or debug. Some of the requests for help from devs that I get is troubling to say the least. Talking with people at my user group meetings it's becoming worse and worse.

My theory is that I'm the last of a generation of developers who learned to program without the Internet. I started learning QBasic when I was 8 and progressed through C++, Perl and .NET. Back then you HAD to learn to break problems down and use logic to troubleshoot. You couldn't just Google the problem.

Google and StackOverflow are great resources but you have to understand how to approach and break down problems if you ever want to be a good developer.

</comment><comment><USER48> Some basic level of programming and problem solving test is reasonable. What I find unreasonable - and which I am currently experiencing - are tests where the description is so convoluted or poor that the challenge becomes understanding the problem... not solving it.

All that said, I think you better measure a programmer/developer by asking some questions. Knowing syntax is the last step. But knowing how to break a problem up and which approaches to take in solving it, especially if there are constraints stated, is far more interesting. It's basically like asking the programmer to describe the program they would write.

Let's say the problem is, "Find the first 1000 prime numbers." The solution is less than 10 lines of code in most languages, but there's plenty to talk about.

I(nterviewer): How would you approach this problem?

C(andidate): Can I use the "prime" Ruby gem?

I: Well, it's good that you know it exists, but let's assume you can't.

C: I first need to define a function that, given a number, will return if the number is a prime.

C: Then I need to loop 1000 times, checking each successive integer (starting from 1) with the is_prime?() function. If it's prime, I print it.

C: Then I increment to the next integer and return to the top of the loop.

I: How did you determine if the number was prime?

C: The simple approach is just to loop from 2 to n-1 (the number we are checking), testing to find out if the number is evenly divisible by the loop index. If it is evenly divisible, then it is not prime. Otherwise, it is prime.

I: Great. What if I asked for the first million primes? Is there anything you would do differently?

C: I would improve the is_prime? algorithm. Blah blah blah, go from 2 to n/2 (or is it square root of n?) Etc. And if that was still too slow, I would research efficient prime algorithms and implement one.

This will tell you if someone can program - even if they have never typed on a keyboard. Programming isn't about typing, it's about being able to define the steps needed to solve a problem.

</comment><comment><USER49> Not everybody is good at performing under pressure on problems that come with ambiguous artificially imposed rules that you have to guess. I remember solving a problem that involved manipulating a list. There was an improvement to my algorithm that involved calling list.sort() before performing a slightly more efficient version of what I was doing. I didn't think calling built-in sorting algorithms was allowed. That's typically one of the implicit rules, until it's not, and you just have to figure out when it is and when it's not a rule.

<comment><USER32> This is why talking is critical during an interview. Typically my answer to any interview question starts with "I'd Google to find code that already solved the problem, but I'm assuming you want to see my implemention? Cool, and, can I use lodash/jQuery? No? Ok, so you're interested in my ability to transform data, let me just ..."

</comment></comment><comment><USER50> For those here who question the relevance of the modulus operator to computer programming, recall that the machines implement _modular arithmetic_.

[https://en.wikipedia.org/wiki/Modular_arithmetic](https://en.wikipedia.org/wiki/Modular_arithmetic)

I won't comment on whether it is a good or bad thing that one can consider oneself a computer programmer† _without_ being cognizant of modular arithmetic.

†to the degree that one is applying to be paid for it.

</comment><comment><USER51> That's why I think practicing "leetcoding" is totally worth it. A significant amount of senior applicants fail easy codingbat level questions. Being proficient at easy level algorithm questions will usually push you to the front of candidates at non FAANGs. I've had interview panels tell me I was the first person who could solve basic palindrome and "best time to buy/sell stock" type questions.

</comment><comment><USER52> I think articles like this are harmful to new developers. Hearing people make proclamations like these, saying everyone sucks while also not mentioning what it means to be good, is only going to make people anxious and second guess themselves. As someone who became a developer after studying a non-cs topic in college, I always worry about what skills I might be lacking compared to my peers, and this shit just isn't helpful.

<comment><USER53> I always thought "fizzbuzz" was sort of an obnoxious "gotcha" sort of test - it's actually a test of whether or not you're familiar with the "%" operator. I wouldn't have a problem with it myself, but I can easily imagine spending an awfully long time coding without ever coming across a modulus operation, especially if you didn't have a CS/math type background. OTOH, I posted on here a few weeks back that I had a co-worker who expected candidates to come up with the binary search algorithm in an interview setting, which I thought was unreasonable, and most of the commenters thought I wasn't being harsh enough… maybe I have low standards?

However, we can talk about overuse of the "singleton pattern" abomination…

</comment></comment><comment><USER54> And on the other hand you get programmers who refuse to do a whiteboard problem, etc.

I've been a programmer for years! Why can't you just believe me!?

</comment><comment><USER55> I feel like I'm the exact opposite. I'm much better at deriving algorithms and CS concepts on the spot than memorizing the latest flavor of the month webtool or language. Why am I working as a software QA if there are so many developers that can't do this type of critical thinking? Perhaps I will just start applying for stuff.

</comment><comment><USER48> Somewhere there's also an essay, "The Surprising Number of Managers Who Can't Manage".

</comment><comment><USER56> My biggest problem with challenges like this in interviews is that sometimes they give you a problem to solve through, say, pure OoP when the challenge itself can be better approached using other paradigms (i.e. functional, or if the problem is very data centric, plain old SQL!)

</comment><comment><USER57> A lot of devs are surprised you are asking then questions. I've had architects shake and not even write a for loop on an amature level whiteboard question. It's not a computer I think is the issue. It's also sloppy and they didn't get a job.

</comment><comment><USER58> I honestly don't understand the backlash for the Software Engineering interview process. I hardly program in my current role but I still make an effort to stay fresh. Spend some time on Leetcode weekly doing practice problems and you'll be fine, it's not hard.

<comment><USER59> Really? So monkey see monkey do? Leetcode doesn't represent much of anything to do with 99.9% of software development jobs. Mostly we're not solving puzzles, we're talking with stakeholders, designing systems, working with co- workers, architecting solution and building systems with code. Leetcode is an absolutely terrible way to evaluate any of that.

<comment><USER58> Leetcode covers data structures and patterns for efficiently using data structures. Most of the 'puzzles' could easily be isomorphisms for real life problems programmers encounter. I don't think it's a waste of time and it will make you a better programmer.

The responsibilities you bring up are valid but meaningless if core concepts are neglected or misunderstood.

</comment></comment></comment><comment><USER60> I can write FizzBuzz, but otherwise I found it to be something that you usually use a rarely used operator (in my field, webdev) for.

Either you:

1\. Use modulo 2

2\. Bitwise AND with 1

3\. Divide as x and check if floor(x) == x

4\. Swap variables

And probably there are other ways as well. I have just disproven myself I think.

</comment><comment><USER50> I still recall the first time an interviewer wanted me to write FizzBuzz. I thought he was joking. I mean he had to convince me he was serious. It's a weird old world.

</comment><comment><USER61> How many mathematicians can do long division? Perhaps we are crippled by our tools and the high level of abstraction from the basics we work at.

<comment><USER62> I think fizzbuzz-level logic is so simple it's not really abstracted away when programming. No matter how many nice libraries you have you can't avoid writing loops and if checks.

</comment></comment><comment><USER63> In defense of programmers who "can't program":

Is FizzBuzz done with the benefit of Google?

I ask this because, while the program is straightforward, different languages have different division functions, and you want to make sure you have the one with a remainder.

You also want to get the OR and AND operator right. (Is it "or", "|", "||"?)

Now, I've used all these many times, but in an interview, you may just forget for whatever reason. I don't think I would, but I imagine someone competent could.

Like DHH, for instance:

[https://twitter.com/dhh/status/834146806594433025](https://twitter.com/dhh/status/834146806594433025)

Or curated here:

[https://theoutline.com/post/1166/programmers-are- confessing-...](https://theoutline.com/post/1166/programmers-are-confessing- their-coding-sins-to-protest-a-broken-job-interview-process?zd=1&zi=uafs5tet)

</comment><comment><USER64> 11 year, self taught programmer here. Chem engineer by degree.

I had to program for eng 101, engineering 280 mechatronics, and our senior design.

I'm not a programmer by degree, but I was often the only one in group projects that understood what needed to get done.

I don't know what I missed out on. I've wrote AI since college and created embedded systems.

Programming feels unlimited.

But what don't I know? Security? Faster algorithms? I don't know what I don't know.

<comment><USER65> Take an introductory data structure and algorithms class. Now that you have some real world work experience, they will be very relevant.

</comment></comment><comment><USER66> #ruby

1.upto(100) do |i|

      if i % 5 == 0 and i % 3 == 0

        puts "FizzBuzz"

      elsif i % 5 == 0

        puts "Buzz"

      elsif i % 3 == 0

        puts "Fizz"

      else

        puts i

      end

end

<comment><USER67> I just made this horrible JS one-liner:

        Array(100).fill(0).map((x, i) => i % 15 === 0 ? 'FizzBuzz' : (i % 5 === 0 ? 'Buzz' : (i % 3 === 0 ? 'Fizz' : i)))</comment></comment>


Firefox to add Tor Browser anti-fingerprinting technique called letterboxing - <AUTHOR> https://www.zdnet.com/article/firefox-to-add-tor-browser-anti-fingerprinting-technique-called-letterboxing/ <comment><USER2> Every time there's something about online privacy with browsers, it's mostly Firefox or Safari. I wondered if Chrome had resisting fingerprinting on its radar (guessing that it wouldn't be in Google's interests to add any feature that would thwart profiling users online), and I found this [1] confirming my guess (emphasis mine):

> Since we don't believe it's feasible to provide some mode of Chrome that can > truly prevent passive fingerprinting, _we will mark all related bugs and > feature requests as WontFix._

I haven't read all the analyses in the links in that article, but this sounds defeatist and lazy, much unlike a stance that Chromium would take on security or performance on the web.

Contrast the above with what this article says about Firefox:

> Firefox's upcoming letterboxing feature is part of a larger project that > started in 2016, called Tor Uplift.

> Part of Tor Uplift, Mozilla developers have been slowly porting privacy- > hardening features developed originally for the Tor Browser and integrating > them into Firefox.

If you value online privacy, your best choice is Firefox (though it requires some additional manual configuration). Safari comes second (its extensions directory could use more love). _The choice where you can add more of your influence to is Firefox — by using it, evangelizing it and by donating (if feasible) to it._

[1]: [https://chromium.googlesource.com/chromium/src/+/master/docs...](https://chromium.googlesource.com/chromium/src/+/master/docs/security/faq.md#Why- isnt-passive-browser-fingerprinting-including-passive-cookies_in-Chromes- threat-model)

<comment><USER3> Here's a good comparison: Android Chrome's user agent:

Mozilla/5.0 (Linux; Android 6.0.1; SM-G928F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36

Versus Android Firefox's user agent: Mozilla/5.0 (Android 9; Mobile; rv:66.0) Gecko/66.0 Firefox/66.0

Note how the Chrome browser announces your phone model and software build version to the world.

With regional models with carrier customised software builds, simply the user agent can be used to fingerprint a user.

<comment><USER4> Yup it's disgusting. Even in private mode sites know it's me with my build version and ip.

<comment><USER5> To be honest most people are confused about "private mode", I agree there should be privacy options enabled by default with it, but the reality is pretty much "no browser history will be stored (locally) and your session / cookies will be isolated between private mode and "normal mode"

<comment><USER6> Indeed. It's intended as a method of watching porn without having it pop up in the address autocomplete later when your kids are trying to go to the Peppa Pig website.

</comment></comment></comment></comment></comment><comment><USER7> > The general idea is that "letterboxing" will mask the window's real > dimensions by keeping the window width and height at multiples of 200px and > 100px during the resize operation --generating the same window dimensions > for all users-- and then adding a "gray space" at the top, bottom, left, or > right of the current page.

> The advertising code, which listens to window resize events, then reads the > generic dimensions, sends the data to its server, and only after does > Firefox remove the "gray spaces" using a smooth animation a few milliseconds > later.

Would using a setTimeout() on the window resize event bypass this? Send the data 20-50ms after resize is completed giving enough time for the letterboxing stuff to go away revealing the actual dimensions, or something? They say it only blocks the dimensions _during_ the resize event and FF removes the letterboxing "a few ms later"

<comment><USER8> Presumably the implementation is smarter than being defeated by this easy trick, but I too wonder how it works.

> Finally, an extra zoom was applied to the viewport in fullscreen and > maximized modes to use as much of the screen as possible and minimize the > size of the empty margins. In that case, the window had a "letterbox" > (margins at top and bottom only) or "pillbox" (margins at left and right > only) appearance. window.devicePixelRatio was always spoofed to 1.0 even > when device pixels != CSS pixels.

So presumably the window size is not being reset to real size - firefox just does a smart zoomin. In other words the fake size remains throughout entire session.

<comment><USER9> > Presumably the implementation is smarter than being defeated by this easy > trick, but I too wonder how it works.

I wouldn't make too many assumptions. Browser vendors have overlooked seemingly "simple" things in the past [1].

[1]: [https://news.ycombinator.com/item?id=13329525](https://news.ycombinator.com/item?id=13329525)

</comment></comment></comment><comment><USER10> I recommend the privacy.resistFingerpriting about:config mentioned. It's been available for a while and does other things too, like changing your user agent.

<comment><USER11> I've been using _privacy.resistFingerprinting_ for a while and also recommend it, but there is one major "side effect": your reCAPTCHA score will drop to 0.1 making many websites really tedious to use. It's a price I'm willing to pay though...

<comment><USER10> reCAPTCHA is a Google thing so it gets blocked in my browser already anyway (by uMatrix). If I need to load it to see a website, I close the tab immediately and go somewhere else.

<comment><USER12> You need reCAPTCHA to log into HN (or at least I do when I'm working from some parts of the middle east)

<comment><USER13> I use a mobile app and have gotten errors saying I need to solve a captcha. Since I can't do that on this app, it just means I'll stop commenting for a couple days until HN decides to stop bothering me.

That's happened twice, and it really hasn't been a big deal. I've never actually done a captcha for HN, it's just not worth it to me.

<comment><AUTHOR> Which HN app are you using? Materialistic (Android) and Hackers (iOS) have worked for me with no CAPTCHA issues, even with a VPN.

[https://github.com/hidroh/materialistic](https://github.com/hidroh/materialistic)

[https://github.com/weiran/Hackers](https://github.com/weiran/Hackers)

</comment></comment></comment></comment></comment></comment><comment><USER14> I try enabling this occasionally, but it causes my zoom preference to be forgotten for each site after I close the tab. Seems to be intentional ([https://bugzilla.mozilla.org/show_bug.cgi?id=1369357](https://bugzilla.mozilla.org/show_bug.cgi?id=1369357)).

I need zoom to not ruin my eyes - is it just too hard to mask the true zoom?

With the letterboxing, it seems like it would mostly not do anything when using a tiling WM with fixed splits. Does that sound right?

<comment><USER15> > it seems like it would mostly not do anything when using a tiling WM with > fixed splits

In the bug report [1] it says:

> We haven't yet landed this feature in Tor Browser for at a few reasons: > \- > ... > \- * Tiling window managers on Linux are hard to detect. Any > implementation will need to behave appropriately for those.

So it appears they are still working on that.

[1] [https://bugzilla.mozilla.org/show_bug.cgi?id=1407366](https://bugzilla.mozilla.org/show_bug.cgi?id=1407366)

</comment></comment><comment><USER16> This is horrible from a UX perspective. There are many fingerprinting techniques besides this. I don't see how adding a user hostile behaviour will help.

<comment> move-on-by What else can they do to decrease the effectiveness of increasingly hostile trackers?

<comment><USER16> Easy way to do ad networks host blocking. The real problem is canvas fingerprinting, but that's an inherent issue of the whole graphics stack so everything depends on your freak-out factor.

</comment></comment></comment><comment><USER17> Maybe firefox should also install ublock origin by default?

This isn't just for some power users- it will increase their share among regular people whose pages will load even faster making Firefox popular.

Or are they waiting until the user share falls below 5%? Maybe they should listen to Andy grove and prepare now.

<comment><USER18> They should turn fingerprinting to max and install uBlock origin by default.

It might mean millions of FF users would suddenly struggle with captchas, but it might also mean that site creators just stop using reCaptcha and similar.

<comment><USER19> Or, most 'regular' users will switch to Chrome because reCAPTCHAs work better in that browser. Firefox needs to make sure they're not going to ruin the user experience by breaking sites like this

</comment></comment></comment><comment><USER20> Nice but the more you want privacy the more CAPTCHA Google will throw at you.

<comment><USER21> Google isn't going to bother the general public like that, that's limited to small groups like techs who block the canvas fingerprinting. Do you think Google is going to spam people that use the Safari default intelligent tracking protection?

</comment></comment><comment><USER22> But I've already got code in my xmonad.hs that clamps firefox windows to common monitor sizes?

It's truly unfortunate that browsers just punted on security, dumping endless amounts of sensitive information into a purported sandbox. Why bother developing something with a secure mindset to begin with, when you can just band-aid on patches later?! It's the sendmail/ActiveX philosophy all over again, only now with network effects.

</comment><comment><USER23> Why can't the ad industry just accept that there are some people out there who don't want to see ads and wouldn't click on one to begin with? Then they can honor Do Not Track and those who choose to work in adtech can start working on things that are more productive to their business.

<comment><USER24> Ads are not always for clicking. If you don't want to see ads than you should pay for content or leave.

<comment><USER25> I'll take the third option: blocking every single ad and making my browser as untrackable as possible.

</comment></comment></comment><comment><USER26> I've been using FF with resistFinterprinting on since it was available. Letterboxing does break a lot of websites and apps, sometimes making them unusable due to incorrect positioning and scaling of the elements.

</comment><comment><USER27> If Firefox could make their Dev tools as good as Chrome's, I would switch immediately.

<comment><USER28> Firefox is already valuable for browsing on mobile phone, where there is not much space on screen to have Dev console anyway. I recommend trying Firefox Mobile

<comment><USER29> Firefox on Android won my heart with extension support, which means I can have an ad blocker (uBlock Origin, no less) without root

</comment></comment></comment><comment><USER30> At this point Firefox should just merge with Tor if they want to market themselves as the pro-privacy browser. Right now I just use Chrome when I'm using my real identity for work and shopping and social media anyway as it's a very good browser and supported everywhere and has an open source version through Chromium.

When I need actual privacy, I just use Tor which supports most sites and is way more protective of my privacy than firefox. May switch to Brave in the future for this use case as they're adding Tor support but right now Chrome + Tor every once in a while works best for me.

<comment><USER31> >May switch to Brave in the future

In the futur? Tor tabs are already a feature of Brave, as of today

<comment><USER30> It wasn't last time I tried on Linux. Thanks for the headsup.

</comment></comment></comment><comment><USER32> How will that not break most of js positioning done on window.resize?

<comment><USER33> Is there any legitimate reason for it? Besides playing pong with browser windows.

</comment></comment><comment><USER34> The Tor Uplift process later continued in Firefox 55 when Mozilla added a Tor Browser feature known as First-Party Isolation (FPI), which worked by separating cookies on a per-domain basis, preventing ad trackers from using cookies to track users across the Internet. This feature is now at the heart of Project Fission and will morph into a Chrome-like "site isolation" feature for Firefox.

This is just factually incorrect.

</comment><comment><USER35> Why not simply allow the user to control the js apis that are available/enabled, kind of like the camera/mic permissions? If sites simply cannot use the mouse events or window size events, they won't be able to fingerprint. This grey box alternative seems like a complicated hack.

<comment><USER36> The problem is this will straight up crash many important sites. In the battle between usability and privacy, usability wins. Just try disabling javascript or cookies and see how long you last.

</comment></comment><comment><USER37> If it helps defeat tracking then I'd like an option to snap to pre-defined sizes as I resize the window.

</comment><comment><USER10> This is awesome. Other things I'd like to see added directly to Firefox are things like Ad and script blocking, HTTPS everywhere, and maybe something like a Tor button so that I don't have to rely on third parties for these critical privacy features.

</comment><comment><USER38> What's the canvas fingerprinting one do? From what I (very poorly) understand, Tor returns a constant number for fingerprint requests. Can this be done for other requests?

<comment><AUTHOR> It prompts the user to decline a site from accessing data from the Canvas API. This data can uniquely identify the user's computer. The Firefox feature is identical to the one from the Tor Browser.

Screenshot: [https://thehackernews.com/2017/10/canvas-browser- fingerprint...](https://thehackernews.com/2017/10/canvas-browser-fingerprint- blocker.html)

[https://www.torproject.org/projects/torbrowser/design/](https://www.torproject.org/projects/torbrowser/design/) (see the "HTML5 Canvas Image Extraction" section)

[https://gitweb.torproject.org/tor- browser.git/commit/?h=tor-...](https://gitweb.torproject.org/tor- browser.git/commit/?h=tor- browser-52.5.2esr-7.0-2&id=196354d7951a48b4e6f5309d2a8e46962fff9d5f)

[https://developer.mozilla.org/en- US/docs/Web/API/Canvas_API](https://developer.mozilla.org/en- US/docs/Web/API/Canvas_API)

<comment><USER38> Thanks, those look like good reads. So I see in my version of FF that it is enabled as true but I don't recall ever seeing a prompt.

I would love to see a blog post about some of these features and why things are difficult.

</comment></comment></comment><comment><USER39> I'm using Brave for a while they have a function to surf the web through Tor network

which seems pretty safe

I'm glad to hear the Firefox also give a lot of value to privacy

</comment><comment><USER40> Why not just download/use Tor Browser?

<comment><USER41> If changes are included upstream, that reduces the maintenance burden.

</comment></comment><comment><USER42> While I welcome another way to fight the constant tracking that we've come to know and love, this is, in my case, a break of workflow [1].

I do responsive web design, and spend a considerable amount of time resizing my browser window as a "cheap" way of previewing how it would look on narrower screens. Having the resize snap to multiples of 100 or 200px would make this experience horrible. Disabling it on localhost (where you're supposedly in control of what goes in and out the browser) could be a solution.

[1] [https://xkcd.com/1172/](https://xkcd.com/1172/)

<comment><USER43> Why not use the built-in mobile preview tool that allows you to set custom dimensions?

<comment><USER42> I also use that, but I find it faster and more straightforward to just drag the window edge, especially when devtools are not opened. One example is using browser and editor side-by-side on a single macOS split-full-screen.

<comment><USER44> You can open responsive mode via a keyboard shortcut without needing the dev tools open; on Windows it's Ctrl+Shift+M, no idea about macOS but it's doubtless easy to look up.

<comment><USER10> It's the same shortcut on Linux and *BSD and probably everywhere.

</comment></comment></comment></comment></comment><comment><USER45> > Firefox's letterboxing support doesn't only work when resizing a browser > window but also works when users are maximizing the browser window, or > entering in fullscreen mode

Brilliant. All you have to do is change your window size for every site you visit.

<comment><USER46> The reason it's fingerprint resistant is because lots of other people will have the same reported screen size. Not because a different screen size is reported to different sites.</comment></comment>


C++ Modules Might Be Dead-on-Arrival - <AUTHOR> https://vector-of-bool.github.io/2019/01/27/modules-doa.html <comment><USER2> Any change in the 20ish months since that article was published?</comment>


33/ZHTTP - HTTP Request-Reply over ZeroMQ - <AUTHOR> http://rfc.zeromq.org/spec:33

<comment><USER2> Oh now that is nice

You could build a whole web server around this. Might be fun</comment>


'99.9999%' uptime – it's an illusion - <AUTHOR> https://hackernoon.com/99-9999-uptime-it-s-an-illusion-49f1bdf74ba1 <comment><USER2> Three words: Disaster recovery site. That's saved our butts so many times. We fail over then work on resolution and RCA.

I am a systems admin at a large multi national company. Downtime can run in the billions per hour. I've only ever seen billion dollar downtime once in eight years, and it was for a few hours only. The DBAs delayed the failover decision, God knows why. They should have done that immediately.

We have strict change controls and auditing so that the disaster recovery site always acts like it should, just like prod. Replication always occurs and when it fails it gets attention. Failover is regularly tested. Good governance makes all the difference.

This article describes a failure of governance. It is a management issue.

Edit: And governance is free. Replication is now within reach of even super tight budgets. See my reply below. So small companies can do this, which was my intended point.

<comment><USER3> For those of us running smaller companies, it might not be a management issue, it's a budget issue.

The company probably doesn't have the budget to support a $billion uptime organization with proper "governance"

But I does sound like five 9's is possible in your case.

Edit: just saw author is claiming "six 9's" is impossible ... maybe

<comment><USER2> I am also running a side business with a tight budget. Governance is free, and nowadays multiple sites are cheap. Create an identical setup, use replication, strong change controls, and test failover. Monitor replication failures. If you do it on an AWS instance it costs little until needed. I believe CPU can be scaled up or down as needed? Just pay for storage.

Also use solid versioning, tested backups, have a tested backout strategy with a secondary remediation path for all changes. Paranoia is cheap :-)

Someone might say, "It's more work." And paging engineers at 3am isn't work? Would you rather burn out your engineers or have them relaxed and focused on responding to a replication issue at 2pm? :-) You know what they say about an ounce of prevention.

</comment></comment></comment><comment><USER4> However, there _feels like_ exceptions - I'm on my 10th year of using Dreamhost. Here was my tweet to them:

"My 10th anniversary of using @DreamHost – hosting over 60 domains with zero downtime thus far. Can I just say it's one of the greatest tools in my life? Their site: bit.ly/2kl6Vr2"

Is it zero downtime? Probably not but my sites haven't seen an outage that I recall. Amazing support too.

<comment><USER5> I have had downtime with their email on many occasions but never their web hosting.

</comment></comment><comment><USER6> What seems to have happened here is that the six nines up-time was calculated/predicted on the basis of no common cause failures, of which it appears this scenario depicts.

Taking into account common cause failures (which are often as a result of root causes by human factors) your six nines can very easily be more like three or four nines.

As a functional safety engineer that applies IEC61508/61511 for a living this is a common problem and addressed by diversity in systems, achieving the same goal in redundant systems by different hardware/software means.

Airbus and Space Shuttle flight controls do a similar thing with multiple CPUs of different types with software implemented to the same spec by different teams, in some cases different languages.

Not saying this is what they should be doing in their case as the mission is not so critical, but if you really want five or six nines this becomes extremely difficult with limited diversity in hardware and software.

</comment><comment><USER7> Stories like this make me so glad that the software I sell runs locally, on the clients computer.

For me there's never been a bug so bad it couldn't wait until monday morning.

</comment><comment><USER8> maybe if your 'app' is entropy in the universe.</comment>


Show HN the updated version of too-long-didnt-read.com - <AUTHOR>

Hi again!
In this thread http://news.ycombinator.com/item?id=2171135 I was lucky to have interesting feedbacks. I incorporated some of them this morning, I think you will like it:
* No more need to sign in with a Twitter account to create a summary
* The latest summaries are on the homepage
* All summaries are accessible, with a pagination
Edit:
A summary I like: http://www.too-long-didnt-read.com/ropcyu#summary_4 <comment><AUTHOR> Some clickable links:

The previous thread: <http://news.ycombinator.com/item?id=2171135>

The website: <http://www.too-long-didnt-read.com/></comment>


Last Night I Experienced Silicon Valley - <AUTHOR> http://blog.carlmercier.com/2011/11/11/last-night-i-experienced-silicon-valley/

<comment><USER2> Thanks for sharing, I think the take away is that the SF Bay area manages to maintain a entrepreneur density that is high enough for these sorts of things to happen. Its important to remember that its a momentum thing, I believe that once you get past a certain tipping point there will be a bubbly pool of entrepreneurs, but there are things that can poison that reaction as well; things like non-compete agreements, tight/non-existent capital, and too much secrecy.

</comment><comment><USER3> "If you are an entrepreneur outside of Silicon Valley and don't visit the Bay Area on a regular basis, you are way behind."

Come on. There are successful entrepreneurs based all over the world. The Valley is not a requirement.

<comment><AUTHOR> You are completely missing my point. Scarcity is the problem in other cities.

</comment></comment><comment><USER4> This is actually almost exactly PG's reasoning on why Silicon Valley will always beat NY in his YCNYC speech. Including the random walk by of ron conway.

</comment><comment><USER5> a very very interesting tagline. out of honest curiosity it occurred to me that tagline of this blog can mean many things: tagline: me = entrepreneur + hacker also implies me - entrepreneur = hacker me - hacker = entrepreneur do you agree that all three meaning are consistent to your context?

<comment><AUTHOR> Did anybody ever tell you that you tend to over think things? lol! :)

I guess all your variations also apply, but that was never intended.

</comment></comment><comment><USER6> cliffs: Silicon Valley is great because there are a lot of tech entrepreneurs to get advice from and share with.</comment>


First Cryptocurrency Freight Deal Takes Russian Wheat to Turkey - <AUTHOR> https://www.bloomberg.com/news/articles/2018-01-23/first-cryptocurrency-freight-deal-takes-russian-wheat-to-turkey <comment><USER2> Russian companies taking a leap of faith into crypto. Why am I not surprised ...</comment>


Solved: The Mystery of the Expansion of the Universe - <AUTHOR> https://phys.org/news/2020-03-mystery-expansion-universe.html <comment><USER2> Misleading headline. It's a _hypothesis_ that seems to reconcile two different ways of calculating the Hubble constant (that describes the universe's expansion), that has previously been at odds with each other</comment>


Stay Packages - <AUTHOR> http://www.avc.com/a_vc/2010/04/stay-compensation.html <comment><USER2> Makes sense. It's no more of a bribe than the "bribe" your employer gives you to come into work everyday.

</comment><comment><USER3> _Excellent_.

This sage advice (which is obvious, but I've never seen it elsewhere ... granted, it's now more of an issue since the IPO market is _dead_ ) plus some other things he's said in this general area of technical (or at least non- founder) talent, suggests to me that Fred Wilson really gets it. Too bad he loves NYC ^_^.

</comment><comment><USER4> Stay! Good dog.

<comment><USER4> Youv'e been downvoted. Give hand. Good dog.

</comment></comment><comment><USER5> Money is a poor motivator and has been countlessly documented as such.

If a (sinking) company (like palm) relies on this to keep their talent, then they are clearly drowning.

IMHO, Most employees are in this to see if they get a significant job title increase (status).

<comment><USER6> Impending sale is a unique situation where some of the other motivators are in serious doubt (control, status, etc.). No one can be credibly offered the other motivators when there's a chance of complete ownership change in the near future. ("The new owner might promote you; they might fire you. We can't guarantee either outcome because what we're selling is the option value.")

None of the studies of motivation I've seen have specifically addressed such a situation. They concern motivating _good_ work, not _sticking around through a foreseen ownership discontinuity_.

A stay package may not make people happy and productive, but it does _contractually_ keep them around, giving the new owners a reasonable chance of receiving the knowhow and functioning business, before eventually making their own personnel/motivation decisions.

(That's why even though Fred Wilson is right about the stay packages' propriety and value, I don't think there's anything wrong with calling them 'bribes'. That's a vivid analogy for the sort of purchased-but-not- necessarily-enthusiastic compliance they can achieve.)

<comment><USER5> agreed on all points.</comment></comment></comment>


Dithering Process, Return of the Obra Dinn (2017) - <AUTHOR> https://forums.tigsource.com/index.php?topic=40832.msg1363742&repost=1#msg1363742 <comment><AUTHOR> Came across this in a thread on Reddit. It's been discussed on HN before as well but I think it's worthy of being resubmitted.

Previous discussion: [https://news.ycombinator.com/item?id=15766249](https://news.ycombinator.com/item?id=15766249)

In that discussion multiple people said that they preferred the non-stabilized dithering, and they argued that that is "how it was" on the old 1-bit Macs.

"The original effect is how it's supposed to look and how it would have looked on an old computer with 1-bit graphics." says one commenter.

I think these comments are missing the forest for the trees.

It's not about faithful recreation, it's about artistic inspiration and invoking certain feelings.

See also the talk "8 Bit & '8 Bitish' Graphics - Outside the Box" by artist Mark Ferrari. [https://www.youtube.com/watch?v=aMcJ1Jvtef0](https://www.youtube.com/watch?v=aMcJ1Jvtef0)

If you artificially constrain yourself too much, your game will suffer and no- one will want to play it. On the other hand, if you can give a nod to the past and a feeling of nostalgia but at the same time acknowledge that we _have_ had progress, and incorporate that progress in your game, then there is potential for a game that is actually fun to play.</comment>


Tell HN: Verizon quietly deleted my YahooMail inbox after 1 year of inactivity - <AUTHOR> Hi HN, like a lot of people, I had an old YahooMail account which I was not using much. I logged in after many months to realize that whole inbox was gone. Looks like they have added it in Terms & conditions.
But they didn't bother to send any notification to my primary/secondary email account or to my linked phone number.
Of course I made mistakes too, and I don't feel entitled to their service, but I am feeling terrible and never going to use any of Verizon's service again.
Just wanted to give a reminder to folks, if you have any old YahooMail account, please back it up, and/or login to it at least couple of times in a year. <comment><USER2> I've had my Yahoo Mail account since 1995 or 1996, at that time I thought it'd be cool to have a @yahoo.com address. Last month I looked in my inbox and I noticed I only had emails dating back to January 2001. The same in other folders. Thanks, Verizon!

<comment><USER3> You are lucky that you still have your emails since 2001. In my case Verizon wipes my whole inbox.

</comment></comment><comment><USER4> I've learnt the lesson the hard way that owning your own domain and pointing MX records to an email provider whose service you pay for directly is the only sane approach.

That way, the service provider is obligated to provide you service, and if they ever pull any shenanigans, you just point your DNS somewhere better.

</comment><comment><USER5> I use an older, non-cloud version of MailWasher to monitor my eMail accounts (and using a hack to make it use TLS 1.2, which it never supported). This means that I touch all my Webmail accounts on a daily basis, even if it is only over IMAP or pseudo-IMAP.

There are other programs out there that can do something similar (so you can maintain your Webmail accounts without manually logging on), so there are options available. I just prefer MailWasher because of its ability to preview, and I run an older one because it's non-cloud and doesn't store my login credentials on their servers.

</comment><comment><USER6> Whats the best way to backup old yahoo or gmail accounts?

<comment><USER7> In my opinion, the best way to regularly back up an e-mail account -- so long as it supports IMAP4 -- is by using something a tool such as OfflineIMAP [0] (my preference) or imapsync [1].

Install it, configure it, perform an initial sync, set up a cronjob to have it sync automatically once a day or whatever, and make sure that the local directory it is being sync'd to is included in your regular system backups, then forget about it.

If you're running Linux or macOS, one or both of the above are likely just an "(apt|brew|yum) install" away.

\---

[0]: [https://github.com/OfflineIMAP/offlineimap](https://github.com/OfflineIMAP/offlineimap)

[1]: [https://github.com/imapsync/imapsync](https://github.com/imapsync/imapsync)

</comment></comment><comment><USER8> It happened to me last week. I was so pissed. Completely unbelievable. Zero notifications to my other email accounts. Hope Yahoo finally goes bankrupt.

<comment><USER3> Hope "Verizon" goes bankrupt ;)

</comment></comment><comment><USER9> Had that happen to me to an old hotmail account that I used when I was a teenager. Sucks to lose that much history, and not sure how it makes sense for a business to alienate a user so much.

<comment><USER3> They are launching some new Yahoo phone service while doing this to so many users. What a stupid idea.

</comment></comment><comment><USER10> The old Yahoo! did this to me a few years ago. The first time I reopened the account. The second one I just left ...

<comment><AUTHOR> It was my first email account ever, I would have been a paying customer if they asked. Or I would have been able to atleast download some important documents and pictures.

But they didn't even send a single warning or notification. I was also not aware when they added the inactive account policy to their terms.

Very stupid policy, whoever at Yahoo/Verizon made this decision.</comment></comment>