Why Linked Lists Are an Interview Staple - <AUTHOR> https://mobile.twitter.com/hillelogram/status/962424365819277312 <comment><USER2> Very interesting thread -- if you're the type of person who comes to the comments before deciding whether to read, I recommend it.

I'd also like to point out that today in 2019, linked lists perform like absolute dog shit in many real-world contexts even where they have the best big-O notation.

Somebody jumping straight to a solution based on linked lists without at least mentioning memory latency is a sure-fire sign that they have never done detailed CPU performance work. (Which is not necessarily a requirement for most programmers, but it's one piece of signal among others).

<comment><USER3> I can't read the link, because twitter links never work on my phone... always 'something went wrong' and saying I am rate limited.

<comment><USER4> As far as I can tell, this is some sort of thing that Twitter does to Safari users because it can't fingerprint them well and thinks it might be abuse.

<comment><USER5> Thanks for the hint. That could be the reason I get this on nightly since .. about four weeks (or six weeks? something like that). Seems to concede with the time the new privacy protections went on by default.

<comment><USER6> It's not recent - I've had this for years.

<comment><USER7> I've only just noticed it, but mostly because I've forced myself not to install the Twitter app nor login to my account on the particular device I've been experiencing all these "Something Went Wrong" errors. I assumed it was a "feature" to encourage people to login to the app caused from a bug somewhere in the ad stack, and this seems to corroborate that hunch.

</comment></comment></comment></comment></comment></comment><comment><USER8> Yo, author here. One thing I should really clarify is that while it's a nice sounding argument, my research was pretty haphazard- looking at TIOBE and C programming and extrapolating from there. I recently started doing more thorough research- interviewing people, reading way too many Usenet archives, stuff like that. Based on that I'm _pretty sure_ the main argument still holds, but the story is a bit more complex than the tweetstorm makes it seem. And there's a few sources I haven't dug into yet. Who knows, maybe one of them will completely refute me!

I plan on doing a full writeup, but I gotta finish the research first! And if it turns out that I was completely wrong, then I'll write a postmortem instead :)

<comment><USER9> I suspect it was also a way to make sure people had and remembered a formal CS education. Data structures classes were standard in CS curriculum until at least the late-2000s, and linked lists were definitely one of the topics. To that end, I've been asked other data structure questions around trees and stacks as well — I view all those as a proxy for "so prove to me you remember your second year CS classes."

<comment><USER10> What does that help prove though? That I have a good memory? There are better data structures in pretty much all standard libraries out there for your flavor of language. I am sure that my 2nd year CS class didn't go into the nuances of the coding of the linked list. If I remember correctly it was just make sure you can write one by the end of the week and turn it in.

<comment><USER11> > What does that help prove though?

It's a weak filter for "recent grad", and along with other individually weak filters a tool for under-the-radar age discrimination.

<comment><USER2> Well it is correlated with being a recent CS grad, just like, for example, knowing that d(sin(x))/dx = cos(x) is correlated with being a recent math or engineering grad.

But that's certainly not what it actually measures, which is basic knowledge about data structures. It just so happens that being a recent CS grad _is_ statistically correlated with knowledge about data structures.

But it's certainly not a necessary condition. I am not any sort of CS grad, recent or otherwise, and I still know how to implement a linked list, because I learn things on my own, and refresh my memory about things I forget over time.

</comment></comment></comment></comment></comment><comment><USER12> I've always thought that in that aspect hardware interviews are much better. The typical approach I've seen is to give someone a PCB and just ask them "tell me everything you can figure out from this device".

I've always wanted to test how well that would work for software interviews:

\- print some pages with the source file of a toy project

\- give the interviewee a pen and just ask "tell me all you can about this code"

<comment><USER13> One of my best interview experiences was exactly that. The interviewer handed me a printed out class and said "tell me what this does, any mistakes you see, and any little improvements that you think could be made."

I got the job and later confirmed it was a class that was actually in the software I would be working on, not some toy class he came up with.

He also asked me a handful of technical questions and had me go over some source code I brought in, but that was about it. At one point he even said, "I know enough to know you can do the job, but now I'm curious what you really know." And asked me some no pressure really low level questions. When I said I didn't know the answer to something he'd spend a couple of minutes explaining the concept to me.

I walked out of that interview having learned a few new things about my field. A couple of them have stuck with me over a decade later.

And the guy was a grizzled veteran who was the lead on some massive mainstream projects I pretty much guarantee you've heard of. He's probably the most knowledgeable programmer I've ever met.

I've never had anyone try going over actual with me since, in probably a couple dozen interviews, and I don't understand why. It seemed very effective.

</comment></comment><comment><USER14> I've interviewed a lot of people, and I've asked LL questions, besides other algorithmic questions, and mostly I ask these questions to new grads with no much experience. The reason is, if you don't have much work experience, what else would I ask you, it's something that you've been learning about recently in your CS degree, and I want to see if you can apply what you learned.

If you have work experience that is relevant, or don't have a CS degree, I'll ask something else.

For me I feel that a lot of people don't understand that an interview is a conversation, feel free to think out loud, ask questions, and ask for help. I want to see your thinking process, I don't really care about the actual solution.

<comment><USER15> Thanks. Unfortunately this is not the case always. I explicitly start interviews telling I'm not academically trained in CS even though I've been practically coding for decades, and I tell them if they ask some "in paper" CS question, I might not answer well. People still ask me to do merge sort - which frankly isn't even in theory that hard - but I think I've subconsciously refused to learn a sorting algorithm just so I can answer a stupid interview question (the day I need to optimize a sorting problem myself I'll learn it hopefully). Whenever the person still insists on asking this without any help, he also comes off as a douche who can only see in black and white.

Should I suck it up and learn these things to do better in interviews? Maybe. But thankfully this handicap became a nice filter and I'm in a nice job where people value real experience and "getting things done" more than linked lists and merge sort, so won't need to worry about dealing with these folk for a long time hopefully.

<comment><USER16> This is why I'm not going to apply for Google any time soon. Their entire hiring process seems to revolve around how much CS trivia you memorised at school.

</comment></comment></comment><comment><USER17> Every time the topic of algorithmic questions in interviews come up I am left wondering if these questions are really as hard as they are made out to be.

I would expect most programmers who are not just plumbing together existing technology to be able to implement push,pop,... for linked lists without having to study. You have to do harder things as part of regular programming.

> take "determine if a linked list has a cycle in it."

I do think that this question if asked without any support if they get stuck is a bad question. You would be relying on the interviewee to either be aware of that research, require that they have the spark of insight, or allow a very suboptimal program.

That said, just being aware of the general solution (two pointers moving at different speeds) is enough for me to be confident I could make a solution.

<comment><USER18> > I am left wondering if these questions are really as hard as they are made > out to be

It's not really about how hard they are, and more about:

"Ive never once in my career had to use this on the job, why is it asked in an interview, thats stupid!".

That's usually the answer you'll get. But I think that answer contains a lot more info than what we can gather from it at first glance.

First, good places will give you hints about what the interview might contain long before you show up. If it's for one of the well known big techs, the questions are all over the internet. They know this. The question essentially amounts to: "Can you make sure you know something about computer science if we ask you to know it". If your answer is "No, that's not worth my time, I'm better than this!", well, I can see why someone wouldn't hire you.

The second part, is that it is a self fulfilling prophecy. 20 years ago, a typical team was mostly CS majors, with the occasional odd one out who didn't (I was one of those odd ones out). That means if you didn't know it, it didn't really matter. You could just turn around and bounce it off one of your colleagues. If you made a mistake, they'd catch it. Today however, especially in fields like frontend development, its extremely likely ZERO person in the team has a CS background, or the 1-2 people who did don't remember anything from their college years. That means some problems quickly fall in the category of "This isn't worth trying, let's use a 3rd party solution or wait until the one expert in the company does it for us".

Thus, self fulfilling prophecy: you don't need to know these things because the industry punted on the problems you'd need these things to solve, or deferred them to other departments. Web apps, for example, are often very animation light, or low on more advanced graphics, because no one knows the math to make these things happen anymore aside from using a library to make a pretty chart. Since your competitors are in the same boat, there's no pressure to change that. And then those folks feel its dumb to ask these questions in interviews (They don't need it!), and the cycle keeps going.

"Why would I need these if Im building forms in javascript all day!". Well, maybe if more people in the team knew how to do more than build forms, we could try and build something fancier than forms.

<comment><USER19> _This isn 't worth trying, let's use a 3rd party solution_

You act as if this is bad thing. The last thing I want is another bespoke logging solution or ORM.

You can't imagine the times I gladly ripped out my own bespoke solution for a third party one after finding one was available.

No sane company hires experienced developers to "develop". They hire developers to have a breadth of industry knowledge to know when to build and when to outsource the "undifferentiated heavy lifting". During the last few years, both companies I've worked for both in an architect level positions have never blinked at solutions that cost money over costing developer time in both development and maintenance.

 _Web apps, for example, are often very animation light, or low on more advanced graphics.... Well, maybe if more people in the team knew how to do more than build forms, we could try and build something fancier than forms._

Again you act like this is a bad thing. I came into a company where the dev leads were younger and relatively fresh CS grads and even the manager of the department was relatively young. He was the founder of the company before it got acquired.

They had so many ideas about the "right" way to do things and spent so much time arguing about how many angels can dance on the head of a pin they couldn't ship software for crap.

You see the same thing at Google. After two decades, billions of dollars, untold cancelled projects and with all the smart people they have, almost all of their revenue still comes from advertising.

I saw so many head scratching overengineered custom developed systems that could have been done a lot simpler if they had had any real world experience.

On the opposite end, I was hired two years ago with a mandate partially to migrate all of the bespoke, complicated systems and use managed services/use third party packages where ever possible.

<comment><USER18> > act as if this is bad thing. The last thing I want is another bespoke > logging solution or ORM.

I didn't quite capture the nuance of what I meant. Sorry about that. Of course if a third party does what you want go for it. But in the situations I'm thinking of, sometimes it's not and people just force their requirements into a suboptimal model. Form validation libs are an obvious example. High level chart libs are another think highchart vs D3)

<comment><USER19> Business decisions are often made based on forcing requirements onto a commercial third party solution that gets you 90% there instead of spending money up front and in ongoing maintenance to get 100% there. If your company isn't going to have a competitive advantage, make enough money or save enough money to make that 10% difference worth it, the sacrifice is often worth it.

How many companies adjust their entire process around Salesforce, some Oracle enterprise solution, or project management software?

</comment></comment></comment></comment></comment><comment><USER20> Linked lists were also more applicable during that time.

The PC world was just starting to move away from segmented architecture to 32-bit linear addressing. With 64K segments, you were limited in how big an array could be since it required contiguous memory. However, with linked lists, since memory did not have to be contiguous, you were only limited by available memory instead of 64K segments.

In addition, during the late 80's, early 90's the relative difference between memory and CPU was much less than it is today. Because of this, iterating a link list did not have quite the cost relative to iterating an array that it does today.

Nowadays, linked lists are a much more specialty structure rather than the first thing you reach for when you want to store a bunch of stuff.

</comment><comment><USER21> Here is the unroll.

[https://threadreaderapp.com/thread/962424365819277312.html](https://threadreaderapp.com/thread/962424365819277312.html)

PS: After twitter started suffocating their app ecosystem, I can not find an app that does threads well (at least on Android). So unroll helps a lot in worthy threads.

<comment><USER22> Thanks. I find it annoying when people write essays on Twitter.

</comment></comment><comment><USER23> The basic linked list algorithms are simple enough that a software engineer -- certainly one with a CS degree -- ought to be able to implement them from first principles. And the point of the interview question isn't specifically whether the interviewee can implement a simple linked list algorithm from first principles, it's whether the interviewee can implement _anything_ from first principles.

<comment><USER24> The question on the interviewee's mind is whether the interview is a proxy for first principles ability or whether they really want you to implement such- and-such exactly correctly. In principle I agree with you -- I had the conversation recently that I have no idea how to implement a red-black tree anymore and would probably fail a "balance a red-black tree when inserting X" type of question, even though I had to do it perfectly in C++ in school. I'm not even sure which color has which constraint by convention. But I more or less remember the constraints, and as I talked through it I sort of remembered how the constraints leads to self-balancing (and an approach to do it). Given time and a responsive interviewer who can answer even dumb questions like "red-black trees are defined to be binary trees right?" I could probably produce something on a whiteboard, but I have my C++ code somewhere and I'm pretty certain I couldn't reproduce that precisely on a whiteboard. What I could do would satisfy some interviewers probably, but would not satisfy others.

On the interviewer side of the table, if there's a particular property I want to test for, then I'll try and test for it directly if it's possible. One such property was "ability to make changes to a program one didn't write and can't fit entirely in one's head" since that's the majority of employed work (especially at larger companies) and I've had successes testing that directly on intern candidates by having them do just that in a stripped down version of part of some front-end code.

There are a lot of employed devs who seem to struggle with first principles. I don't think it's a good thing and would want to filter on it for a company I controlled from the start... But if we want to test for that specifically, I'm not convinced data structure questions are a good way to do it. Since discrete math should be a standard part of the curricula, I think asking for some proofs of certain theorems given certain axioms and reminders of the rules of inference would be more fruitful. But that would likely be even less popular than linked list style questions. In the limit what I'd really be most satisfied by in terms of having nice proxy measures on cognitive abilities like first-principles reasoning, (system|task|...) decomposition, etc. would be testing IQ and big-5 personality traits directly, plus interviewees should only have to do it once (or at infrequent intervals) rather than every company having their own process, though I think legally you'd have to pay the Wonderlic tax to do it.

<comment><USER25> So where do I fit? (Very) High IQ, max openness, min consciensouseness.

You can also game big 5 and IQ.

<comment><USER24> If you could game big 5 and IQ the way people game other things, the world would look a lot different... this isn't to say that on an old static test like [http://iqtest.dk/main.swf](http://iqtest.dk/main.swf) you couldn't give someone the answers or train them to perform better on raven matrices but active researchers and I assume companies like Wonderlic aren't asleep on that sort of thing.

If it were my company I'd take all the high IQ people I could get. I'd probably learn to filter on other things too at the risk of everything blowing up, but getting a lot of smart people together can also lead to amazing stuff (that may not benefit me/the company, but hey). High conscientiousness is a bonus for get-(business-relevant)-stuff-done efficiency, but I don't think it's a hard requirement. I'm not "min" in conscientiousness but I am a slacker below average, nevertheless I seem to get by and have generally kept bosses/teams happy with my output levels.

I think you fit at a lot of companies that don't take those things into account, too. High IQ alone is a big advantage for a lot of the other measures (or gaming such measures) companies like to use. Though you might find a lot of the work dull and/or feel lonely if there aren't any local peers to chat with at your level. On the other hand tech salaries are high; I used to think I might fall into a pattern of "work 1-3 years, take a year or two off depleting savings, go back to work..." but then I realized if I just stretch myself for a long enough continuous period (which isn't actually that long) I ought to be able to "retire" and only go back to working for the Man by choice.

</comment></comment></comment></comment><comment><USER26> Getting asked to do any kind of fancy datastructure algorithm from memory would put me off your company. It has very little correlation with any real- world task. I'm very experienced and get a lot of shit done with high-load systems requiring careful resource management, but I couldn't be bothered with this. My portfolio should show you that I can do things.

<comment><USER27> Curious...assuming you're employed in a technical role did your interview not include a technical interview that with data structure or algorithm qs?

<comment><USER26> The last 3 technical roles I've been in over the last 8 years or so used realistic technical tasks for the technical tests. It was grounded in actually making something useful work. Intensive CPU/memory optimization is usually the last thing to optimize in a system which is inefficient. When you do get to it, you do it on a case-by-case basis with careful reference to the latest work on efficiency in that particular sub-domain, not by instantly recalling university lectures from 20 years ago. And by the way, the right solution for CPU/Memory optimizations is never linked lists. I think the best technical test you can do is pay your potential candidate to come and do a ticket with your team. You actually get to see what working with them is like, as well as practical ability. Failing that, give them some time to create a practical solution to something a bit tricky, and see what their overall approach is like, when given time to do it with stackoverflow etc. available to them, because that's what real life is like.

<comment><USER28> Calling someone to work with your team is not scalable. It usually is preceded by resume filtering which can be influenced by human biases.

</comment></comment></comment></comment><comment><USER29> I like how he casually asserts that most of "us" don't program in C even though C and C++ are the #2 and #3 languages in the TIOBE Index today, after Java. It's fifty times more popular than Rust or whatever trend he thinks his friends are chasing.

<comment><USER28> The way TIOBE index ranks, a lot of C and C++ numbers are due to uni courses dealing with it. But it is definitely much more used than something like than Rust.

<comment><USER29> Sure the TIOBE Index is flawed. I wouldn't have even mentioned it but it forms the basis of his argument.

<comment><USER8> Yeah it absolutely sucks as a measure. You're better off manually counting languages that appear in job postings. That gives you a better breakdown of what people were actually hiring for.

</comment></comment></comment></comment><comment><USER30> Sites like HackerRank and TripleByte do a great job of telling me whether a candidate has been studying to pass interview questions on HackerRank and TripleByte.

They do very little to tell me whether, in the words of Joel Spolsky, they are "smart and gets things done."

<comment><USER31> I'm going through the Triplebyte process right now (I passed their interview last month and have just started the bit where I talk with companies this week) and that is not at all what they seemed to be testing. Their famous quiz seemed to mostly be checking if you have any idea what you're doing[1], and their two-hour interview[2] spent less than ten minutes on data structures. I muddled through that bit by saying things that sounded plausible (with lots of disclaimers that that was what I was doing and that I had no experience with low-level code) and still passed it with flying colors. Having gone through this process I would say that having some experience and being able to write practical code is probably the best way to prepare, and studying interview questions would probably be fairly ineffective.

[1] One of the incorrect answers was to use a factory function that passed the data to an assembly line interface which put it in a package class and shipped it to the user interface.

[2] [https://triplebyte.com/interview_guide](https://triplebyte.com/interview_guide)

<comment><USER30> Thanks for this - I'm actually more familiar with more pure coder test approaches like HackerRank and just mentioned TripleByte in the same breath because they've been advertising their coding test heavily in parts of SF I see (proving that at least some ad dollars do work to some extent).

</comment></comment></comment><comment><USER32> I personally find this content delivery method, where a small essay is split into tweet blocks with links and unrelated imagery, very annoying to read and ultimately disrespectful to the reader.

<comment><USER33> Normally I find it frustrating to read a blog post as a sequence of tweets, too, but in this case it seems appropriate.

(It doubles as a metaphor for why linked lists are generally a poorly performing data structure on modern architectures.)

</comment></comment><comment><USER34> For developer roles these days I tend to ask candidates what are the main differences between Lists and Sets.

It's an quick question to weed out most weaker candidates, and is more relevant to the nature of our development: using data structures rather than reinventing them.

<comment><USER15> People get this wrong? Like CS majors??

<comment><USER24> Interview enough people and you'll get people with Masters or PhDs in computer science failing what seem to be trivial problems. Like FizzBuzz trivial. You can find anecdotes on HN and other places...

My own personal worst experience is limited to a Masters in Physics who couldn't code at all, code-like experience was limited to some sort of software tool that some PMs might use to create acceptance tests. Though I think a lot of these cases are just indications of a bigger problem higher up, like HR or the hiring manager not adequately setting expectations of the job role, or just not doing basic screening.

<comment><USER35> I once asked a person with an MSCS what a string was and they didn't know. I think it might be a language barrier thing so I asked the difference between an array of characters and a string and again, no answer.

</comment></comment></comment></comment><comment><USER36> To those who ask this type of question: What's been your experience with people you hired this way?

Did everyone you hired who did well on these questions turn out to be good hires? If not, why not?

If you took a chance and hired someone that maybe didn't do a great job on these questions, did they turn out to be a good hire anyway? If so, why?

<comment><USER35> I don't know with just this one question compared to others, but as part of a suite of what I classify as "technical thinking questions" I think it's predicted well programmers who are mid level and up who can figure out problems independent from languages or vendor solutions.

I never actually care about the literal code written and usually just ask for pseudo code to understand the logic of how walk through it. So it will fit on a white board or maybe sheet of paper and take maybe 5 minutes or 10 minutes with commentary.

I think it's better if the candidate has never actually written a linked list.

Similar questions I ask are "write a database connection pool" or fizz buzz.

They are parts screening as a surprising number of applicants can't write loops or even if statements, which is weird. And part seeing how they ask questions to figure out what's important requirements or assumptions or limitations.

It's probably worse, in my mind, to write out amazing code without asking questions than to sketch out simple statements asking "how important is multi- threading" or "what libraries can I use" or "where will this get called from?"

I don't have an empirical litmus test from this, but for a few candidates who sucked at this but still got the job, I regretted it. Although one or two moved within the org out of programming to business analysis and project management and did, I think, a good job.

</comment></comment><comment><USER37> Nothing like having to spend most of a time-limited interview going over beginner coding and not touch on the actual skills required for the position.

<comment><USER38> You wouldn't do it if beginner coding wasn't required for the job.

<comment><USER37> It's a generic interview for a generic job at a generic company and then they ask you why you want to work there. What do you love about Generic Inc.?

<comment><USER39> Given the high demand for software devs, why on earth would you accept an interview at a company and role you feel are generic?

</comment></comment></comment></comment><comment><USER40> I love this type of analysis / retrospective. Ive done 100s of technical interviews and so far there are a handful of questions that stand out as highlighting great candidates.

\- the interviewer writes a simple c program that compiles and asks the candidate what it does. The best example is an app that dereferences null. Good developers see it right away and answer "segfault".

\- ask someone to do something requiring managing delays, recursion, and error handling. Its wild how few people can handle this who have been developing for 5+ years.

<comment><USER41> I think its potentially bad the common thinking I've seen where an interviewer ( and I've fallen into this trap ) thinks "whoa! X years of development and they can't do that! _shakes head slowly_ ". It's more a failure of the interviewer to find out what the X years of experience entailed. They could be insanely good at something really useful and just haven't coded many things like your random coding problem.

<comment><USER42> At a technical but non programming job someone once told me "Man he doesn't know what X is!"

My response, "The only reason I know that is because of that bug of ours that keeps coming up..."

Some things just happen more some places and other things don't.

</comment></comment></comment><comment><USER43> Genuine question - who builds linked lists from scratch today ? The only place I found where you had to build a linked list was in LRU cache.

Also who writes LRU cache from scratch as you have it already available in Redis ?

What exactly does the understanding of LinkedLists prove - I mean I love linked lists not because of their usefulness, because they are easy to reason about and learn in somewhat an adaptive way. Other than that I'm curious to know the actual usefulness of this skill as mostly you are using lists, deques etc.

<comment><USER44> Linked lists allow you to keep track of the order of items when you can't control their location for one reason or another, and tend to show up as one part of a more complex structure—

For example, many garbage collectors use them to keep track of memory regions that have been freed and can now be reused. I expect that they're used extensively in file system design to keep track of which blocks belong to which file (if any). Maybe you need to keep track of multiple different sort orders over a single set of objects.

</comment></comment><comment><USER45> This all tracks with my memory and experience (dev since the 90s).

The other point that's missing to explain why it is so common is that one of the early Spolsky articles that got a lot of attention at the time (early 2000's) and was very influential asserted that the two areas of programming that seemed to "separate the men from the boys", so to speak, were pointers and recursion. Ie, independent of how long someone had been programming or what language/domain they mostly worked in, there was a tangible rift between developers who deeply understood and could use those concepts and those who didn't. If someone was comfortable with pointers and recursion, it was considered a safe bet that they could pick up pretty much any other concept/language/whatever without much trouble. Implementing linked lists was a good demonstration that you could probably deal with the basic concept of pointers.

Spolsky's argument was probably also born from the same experience of the industry at the time. Before the first big dotcom boom, pretty much anyone applying for a programming job who had a CS degree or previous job as a programmer could mostly be assumed to be basically competent. It wasn't a lucrative field so it self-selected for people who could understand "difficult" concepts like that. Anyone who struggled too hard with those would've changed majors or found easier work for better pay. It was mostly HR and managers doing hiring and it mostly worked out because of that natural filtering. After the dotcom boom, when programmers were seen to have high salaries or become early millionaires, the market was flooded with developers with inflated resumes that could talk their way past non-technical interviewers but really had only "programmed" some HTML before and would struggle to write a hello world program in Perl.

</comment><comment><USER27> I don't really see a problem with LL questions. There's only so many linked list question variations and they are a simpler subset of trees/graphs, which are useful and have more real world applications.

If I was interviewing I would be much happier if I was asked a LL question over a tree or graph problem.

</comment><comment><USER46> In the 80s, I overused double link-lists in Turbo Pascal. It was my quick-and- dirty database block-storage of choice (minimize memory usage). Then I learned about indexing and switched to dictionaries, btrees or red-black trees for most things.

</comment><comment><USER47> This feels very post-hoc justification-ey. glibc has had data structures for a good long while. I don't think they offer linked list, but it's not a particularly useful datastructure compared to say, a hashtable.

<comment><USER48> But a hash table using separate chaining requires linked lists, so still pretty fundamental.

<comment><USER49> And linked lists are the backbone of most persistent data structures and are commonly used as a build block for a ton of things, like LRU caches, queues, ...

<comment><USER50> I agree w/ the LRU, but isn't a vector more efficient for building a queue? (You use it as a ring-buffer. Push/pop are O(1) (amortized for push), and it interacts well with the CPU cache since the memory is contiguous. And you get O(1) indexing, too.)

Then there's the rather interesting datastructure that C++ has, std::deque, which seems to get implemented as a vector of pointers to vectors. Still O(1) push/pop/index.

</comment></comment></comment></comment><comment><USER51> I like to ask questions that involve implementing some small bit of logic on top of a tree or graph data structure. Like the linked list questions, these questions aren't as much testing problem solving or data structures as they are testing whether you've recognized the trees/graphs in the data you worked with recently || you remember working with those data structures from college (which side of the || you fall on depends on your experience level). They're a "can you code" question with a little bit of abstract thinking thrown in.

</comment><comment><USER52> Citation needed..

Is there any reference showing that this is the reason that people were asking about linked lists?

There is the old joke that organic chemistry saved more lives than penicillin by preventing dumb people from reaching med school. It's a silly joke but it rests on some correlation between the kind of thinking needed for this course and needed to be successful doctor or medical student. If anything there is probably a stronger correlation between the kind of thinking needed for basic algorithms and data structure questions and the thinking needed to be a strong programmer.

<comment><USER53> Not to be a downer on your joke, but if we had more doctors, medical care might be cheaper, which would also save lives.

<comment><USER35> More doctors who kill people is probably a bad idea.

I had a joke about bad PMs...if you can be replaced by a spreadsheet in a shared folder you are probably a bad PM.

I think having tons of bad doctors is probably a worse way to solve the high price if medical care than just having better shifting of work within healthcare to apps, therapists, telemedicine, and nurses.

Great PMs are awesome and way less important than great doctors since usually people don't die from non-great PMs.

</comment></comment></comment><comment><USER54> > I suspect this is because a large block of programmers were asked it and > continued to ask it, unaware of how deeply tied to the historical context > the question actually was.

Bad hires are expensive and false negatives are lost opportunity. The industry is constantly looking for ways to improve its hiring. No old practice is off limits.

Google no longer asks brainteasers [1]. Rumor has it Facebook discourages dynamic programming now [2].

Yet somehow the author assumes that nobody ever thought to question the Linked List because tee-hee unlike him we're all naive lemmings.

No, we do iterate on all our questions and remove the ones that don't correlate well with results. We just continue to find linked lists to be a decent predictor for now, at least no worse than other DS.

I do agree that all-or-nothing questions like cycle detection are poor, but those kinds can be found in all data structures.

[1] [https://qz.com/96206/google-admits-those-infamous- braintease...](https://qz.com/96206/google-admits-those-infamous-brainteasers- were-completely-useless-for-hiring/)

[2] [https://www.teamblind.com/article/DP-questions-at- Facebook-i...](https://www.teamblind.com/article/DP-questions-at-Facebook- interview-rKhirgq2)

<comment><USER55> This is great

</comment></comment><comment><USER56> I think it's interesting that "can you write a LL" allegedly made for a "hard to fake" signal.

</comment><comment><USER57> To play the devil's advocate:

> In other words, back in the 90's "how do you reverse a linked list" isn't > about "algorithmic thinking" or "data structures", it's _have you coded in > C_. If you have, the question is trivial. If you haven't, the question was > (ideally) impossible.

It is still an interesting excercise to see if someone can code reversing a string (array) and a linked-list, because they form the basic building block of many other data structures, like hash-maps and trees. I doubt it has anything to do with _clang_ , per second, than a fizzbuzz to relatively difficult problems of solving for Graphs, for instance. So absolutely, reversing a linked-list does have everything to do with data-structures.

> Take "determine if a linked list has a cycle in it." The solution people are > supposed to come up with, "Tortoise and Hare", was AFAICT published in a > heavily-cited 1967 research paper. You're asking a candidate to reinvent CS > research in 30 minutes!

Well, multi-threading was a decade long research, if not more. Do you then expect folks interviewing for Android Development, say, not know about critical sections, race conditions, mutual exclusion, re-entrant locks et al because these were ironed out over decades and decades of research? Guess not.

> Removed from the historical context, linked lists got rebranded as "problem > solving skills". But this seems the opposite of what you'd expect from the > original questions: if you're testing language familiarity, you DON'T want > people to be able to fake it!

Sure, except if people got interviewed for language familiarity, one would open a different can of worms. For instance, here's the internal details abt trees and lists in Clojure (iirc): [https://idea.popcount.org/2012-07-25-introduction-to- hamt/](https://idea.popcount.org/2012-07-25-introduction-to-hamt/) and Rust's HashTable: [https://abseil.io/blog/20180927-swisstables](https://abseil.io/blog/20180927-swisstables) How many folks could answer that? But I bet if we were testing for language familiarity, these are the kinds of questions that'd creep in, which are even arduous than the linked-lists.

Be careful for what you wish for. Solving the great tech interview problem isn't straight forward, given by the numerous heated discussions over it over the years, even here on news.yc:

"How to not hire a software engineer" [https://news.ycombinator.com/item?id=19541617](https://news.ycombinator.com/item?id=19541617)

"60m interviews aren't enough" [https://news.ycombinator.com/item?id=19811063](https://news.ycombinator.com/item?id=19811063)

"What do best interviewers have in common" [https://news.ycombinator.com/item?id=15819198](https://news.ycombinator.com/item?id=15819198)

<comment><USER58> There's a big difference between testing whether someone _already knows_ something vs. whether they can figure it out on the fly.

The tortise-and-hare algorithm conflates the two: if you've already heard of it, it's quite simple to implement. If not, it takes a flash of insight to consider having two pointers chase each other through the list, one moving multiplicatively faster than the other. I'd bet that flash didn't come to Floyd in the first 15 minutes he spent on the problem—-which certainly wasn't under pressure in an interview.

<comment><USER57> Sure. The problem with the argument I wanted to highlight wasn't the _puzzle_ nature of the solution, but the fact that the OP chose to instead focus on the _research_ angle. I mean CSP, Actor Model, Lisp have strong foundations that took a lot of research... as did everything else from Type Systems to Linkers to Compilers. That said, I get your point too, I might have misunderstood OP.

</comment></comment></comment><comment><USER59> Because they're pretty much babby's first data structure. When I was a kid and I needed to store the bag o' sprites for my first Windows 3.x game engine (don't ask), I had the BRILLIANT idea to store pointers to the previous and next sprite in each sprite, thus creating a doubly linked list with no formal CS experience, nor exposure to that particular data structure. If somebody knows thing one about programming that isn't dinking around in BASIC, it's going to be linked lists.</comment>


Free, legal downloads of every Beatles song - <AUTHOR> http://www.boingboing.net/2009/01/05/free-legal-downloads.html

<comment><AUTHOR> This is the first time that the catalog of the Beatles is legally downloadable. Gotta love loopholes.</comment>


Ask HN: Co-founders living in different countries - <AUTHOR> Let's say I have an idea for a startup and that I want to find a co-founder to help me with developing and launching it to the market. Let's also assume that I live in a developing country (e.g., Brazil) and that I want to register the company in the US. Is it too inconvenient for co-founders to live in different countries? If anyone has experience with this or has done something similar, your thoughts and opinions are more than welcome! <comment><USER2> Day to day working will probably be fine. Me and my cofounder live in different countries and sometimes only meet every 6 months, the rest is Skype. Share agreements (who owns what in the company) are pretty universal and they account for shareholders in other countries. But dealing with the tax office founders might need a tax id in the country the company is based. Thus legally for example I'm the only person allowed to sign many documents. That's my experience from Europe, I don't know much about US limited companies.</comment>


Sudoku solvers vs TDD vs Peter Norvig - <AUTHOR> http://ravimohan.blogspot.com/2007/04/learning-from-sudoku-solvers.html

<comment><USER2> I am not sure how this is relevant to startups? Very amusing post (and comments) but still very irrelevant in _this_ forum imo</comment>


The Major Labels Are Trying to Sell Spotify for $10 Billion, Sources Say - <AUTHOR> http://www.digitalmusicnews.com/permalink/2014/06/11/major-labels-trying-sell-spotify-10-billion-sources-say

<comment><USER2> Pretty sure the labels are giving Spotify sweetheart licensing deals right now to boost a business in which they're a stakeholder, but once they're not invested in the business they have every incentive to put the screws to the new owner by jacking up licensing fees. I've heard that Hulu is the same kind of deal.

<comment><USER3> Google offered perhaps $4B for hulu, predicated on long term, and perhaps exclusive, licensing [1] (this doesn't mention a price; I seem to remember reading it at the time but can't find a link). The content owners said no, which gives away the whole game -- wait a couple years, then take the screws to the owners for licensing deals.

[1] [http://allthingsd.com/20110906/google-goes-big-with-its- hulu...](http://allthingsd.com/20110906/google-goes-big-with-its-hulu-bid/)

<comment><USER4> IIRC Fred Wilson completely devalued Hulu (like 0 value) stating "it has no rights to any of it's content". Can't find the source at the moment. Anyone know?

</comment></comment></comment><comment><USER5> Replace "labels" with "networks," and "Spotify" with "Hulu," and we've read this story 100 times. It hasn't really ever worked out for them.

</comment><comment><USER6> Can anyone think of a company with deep enough pockets to afford $10b that would actually want Spotify?

Because there doesn't seem to be an obvious fit to me.

<comment><USER7> Amazon just launched their own music service. I can easily see someone like Microsoft trying to jump in and buy Spotify to create their own version.

<comment><USER8> They have had their own version for years in [http://www.xbox.com/music](http://www.xbox.com/music).

<comment><USER9> In fact, Microsoft was one of the first major players in the streaming subscription market. Before Google Play Music Pass, before Spotify, there was the Zune Pass. It was a sweeter deal back then, $10/mo for all you can eat and you got $10 in credit for songs every month that you could keep even after you cancelled your subscription. Basically pre-pay for 10 songs every month and you get the entire streaming catalog.

Rhapsody was the only competitor at the time that I knew of. The Zune Pass service didn't really catch on because, well... you needed a Zune.

<comment><USER10> $14.99/mo, though at one time I was offered $100/year, should gave grabbed it. The credit plan was discontinued and only the $10/mo for streaming/no credits is currently offered as an xbox music pass. I was grandfathered in and still receive the monthly credits to this day. Usually it's a scramble at the end of the month to use the credits since they don't roll over. Overall, it's a good deal though. Bit clunky though since you can stream music using the latest clients (HTML, xbox, ios) but must use old Zune software to purchase it.

</comment></comment></comment></comment></comment><comment><USER11> Spotify will just be pure shit after that when it comes true. Flooding people with unnecessary ads and pushing their own artists, will fail this app.

My cancellation of subscription and removal of this app as well.</comment>


Advanced Algebra textbooks - <AUTHOR> http://www.math.stonybrook.edu/~aknapp/download.html <comment><USER2> I don't like the typical definition-theorem-proof approach of most textbook in mathematics, including these. It's great for a classroom, no good for self- study. As an alternative, I highly recommend _A Book of Abstract Algebra_ by Pinter. If you work through that first, you may actually enjoy these two later.

<comment><USER3> Can't agree more. Definition-theorem-proof type of textbooks is way too clean. They don't tell you how ideas came to be or why they mattered. In other words, it's hard for students to learn the intuitions behind the ideas. I wish there are list of "XXX from Ground-Up" type of books that show readers a list of problems, struggles of people trying to solve them, and how ideas emerge from the numerous attempts. Leslie's paper Paxos Made Simple was written in that way. A few chapters of Kleinberg's Algorithm Design were written in that way too.

<comment><USER4> I think math classes should be paired with history more. My probability professor often offered historical context (for example, the Poisson distribution first being used to model deaths due to horse kicks in the Prussian army) to the ideas we discussed, and the stories were often both interesting and insightful.

<comment><USER5> I've been refreshing on Calculus and I found that Kline's book was good at application as well as a bit of history, at least I never got the history part at University and I found it very interesting.

[http://store.doverpublications.com/0486404536.html](http://store.doverpublications.com/0486404536.html)

</comment></comment></comment></comment><comment><USER6> The best undergrad algebra textbook I've studied is _Algebra_ by Mac Lane and Birkhoff (3rd edition! the previous editions aren't quite as good and substantially different; i haven't seen the 4th edition and it is out of print so /shrug). I've used multiple books both in self-study and class and this book is, to me, in a league of its own. Not only does _Algebra_ teach modern algebra, it teaches one to think like a modern algebraist, and not like just any modern algebraist, but like Saunders Mac Lane who was pretty great at algebra.

As an example of _Algebra_ 's approach, take the isomorphism theorems [1]. Now many undergraduate textbooks (like Dummit and Foote) will prove these theorems by manipulating cosets and deal with gross "implementation details" at the level of sets. Mac Lane insists otherwise: The only time you have to manipulate cosets is in order to construct the quotient G/N of a group G by one of its normal subgroups N. Once you have constructed this group and proved its _universal property_ , the isomorphism theorems can be proved without ever mentioning cosets again. What is that universal property? It has two parts: First is that there is a morphism p from G to G/N which sends all of N to the identity in G/N. Second is that _any_ morphism f from G to _any_ group L that sends all of N to the identity in L necessarily factors _uniquely up to isomorphism_ as a composition of morphisms g ∘ p. This is the essence of a quotient group.

Mac Lane's approach is to apprehend the essence of what is studied while discarding as much of the set theoretic husk as is possible. It is algebra in its purest form, accessible to and transformative of the mind of an undergraduate. Reading this book is a recurring joy to me.

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

<comment><USER7> Do you have any suggestions on other topics and books in math? This books is amazing.

<comment><USER6> Math is too big. Got a particular desire?

</comment></comment></comment><comment><USER8> Eh, is this supposed to be a good book because I have no idea why the definitions aren't clearly marked and indexed. I only checked the chapter about Group Theory but I was not impressed. Maybe for a quick review of the topic it might be enough but for a beginner it seems that it is not rigorous. The definitions could be much more clear explicit. And there is no reason why they should not be indexed.

</comment><comment><USER9> Book titles like these are just more evidence that some mathematicians don't understand (or willfully misconstrue) the meaning of words like "basic" or "introduction".

"Basic Algebra" means "material typically covered in late middle or early high school".

<comment><USER6> I disagree. The word "introduction" immediately introduces ambiguity: Introduction to whom? An introduction to the aspiring physicist will certainly look drastically different from one to a high school student or an undergraduate mathematics student, but they all have reasonable need of an introduction to abstract algebra.

<comment><USER9> > they all have reasonable need of an introduction to abstract algebra.

Then the word "abstract" should appear in the title.

<comment><USER6> Well, can't argue with that.

</comment></comment></comment></comment><comment><USER10> Somewhat unrelated, but I enjoy the logical dependence chart. It's nice to see the ordering of the topics. Rather than trying to figure that out for oneself

</comment><comment><USER11> I thought it was only a fancy book. But it turns out to be a serious one. I will read this book, especially the advanced one.

<comment><USER11> FYI, [http://www.genealogy.ams.org/id.php?id=8127](http://www.genealogy.ams.org/id.php?id=8127)

</comment></comment><comment><USER12> I'm by no means a typography nerd, but the font used in both PDFs is really bad. Not only is it visually unpleasant; most importantly, it is genuinely hard to read.

<comment><USER9> Looks like Times to me. It's a standard mathematical font, and anyway is more pleasant and easier to read than the abominable Computer Modern fonts.

<comment><USER13> Can you elaborate on that? I find computer modern much more pleasant to read than Times.

<comment><USER9> It's an inferior clone of Monotype Modern, just like Arial is an inferior clone of Helvetica.

In terms of being easier to read, I find the extreme contrast between thick and thin strokes does not work well on a screen.</comment></comment></comment></comment>


Skype for Linux 4.2 - <AUTHOR> http://blogs.skype.com/2013/05/20/skype-for-linux-4-2/#fbid=r7t5eeq0pj0 <comment><USER2> I haven't installed this on my debian box, because I know it will install a bunch of 32 bit packages that I don't need otherwise.

</comment><comment><USER3> With the abundance of other video calling solutions on Linux that are cross platform is this just dead on arrival with Microsoft being able to read all of your messages?

<comment><USER4> I think you misunderstand the Network Effect.

I can assure you that I try every new release of Jitsi, and while they are definitely improving, let's not call it a Skype replacement just yet.</comment></comment>


Wanderfly has officially launched - <AUTHOR> http://blog.wanderfly.com/2010/10/19/hello-world/

<comment><USER2> If you want feedback, you should make it easy. Not require the user to jump through hoops. I wanted to send feedback, but I don't have, or want, another account somewhere on the web. Just let me type what I want to say and read the email. If you want to organize similar feedback, you can do that on your end.

I can't even get the site to work reliably. It appears to chose times and budgets on its own regardless what values I enter. It also changes times and budgets regularly during the browsing process.

Also seems to call just about anything "Fine Dining," including a taco place and a BBQ joint.

The site looks really pretty and the concept is cool, but I think the launch was quite premature.</comment>


Siemens contractor pleads guilty to planting logic bomb in company spreadsheets - <AUTHOR> https://www.zdnet.com/article/siemens-contractor-pleads-guilty-to-planting-logic-bomb-in-company-spreadsheets/ <comment><USER2> I'm surprised to see this is a prison term kind of situation.

We're talking about the choice of an algorithm in a spreadsheet delivered by a contractor being a criminal offense. It's not like that's _impossible_ but it seems a lot more like a contractual issue at first glance. I mean fundamentally it's a string of ones and zeros, it's a piece of software.

What if he says that it was his policy to put an expiration into all his software deliverables? How is this, as a _criminal legal matter_ different from a company that disables a piece of software without a support contract in place, or similar?

It seems a lot like a contractual issue, a discrepancy between what he delivered and what they expected, with monetary damages as the legal remedy. What am I missing here?

EDIT: Upon reading a little more about it it's a Federal charge, which seems even more insane. I can't find the actual complaint to see if it's a CFAA charge but it looks that way.

This looks a lot like yet another case of "person vs. giant multinational billion plus dollar company" on a computer issue, which means massive Federal charges for some reason, along the lines of Sergey Aleynikov, Aaron Schwartz, or Weev.

<comment><USER3> IANAL

It looks like he was hired as a contractor to work on their internal systems (i.e. the spreadsheet) rather than licensing a product to them. If as is likely the bank owned the spreadsheet, he's purposefully modified it without permission to malfunction after a certain date - that's why it would be a criminal matter, he's been told "you can access these internal systems to incorporate functionality x", and has additionally gone in and planted malicious functionality.

When you license software that disables functionality without a current license, it's legal because you have no right to use that software without the license. If you own the copyright to some software and someone you'd hired to work on it goes and sneaks in a logic bomb to make themselves indispensable, I think you have every right to be pretty peeved.

<comment><USER4> > he's purposefully modified it without permission to malfunction after a > certain date - that's why it would be a criminal matter

It is more than that. He purposefully modified it to expire in a time frame and in a method other developers would fine unreasonable and did so for personal profits. Then he took advantage of that modification.

Most the software I make has a problem in it when we reach the year 10,000AD. But we would all agree that is a reasonable issue that I shouldn't be found liable (it would be a massive achievement to even be remembered as a footnote come 10,000AD).

</comment></comment></comment><comment><USER5> > Tinley's chances for a no prison sentence are slim. In 2006, a former UBS > PaineWebber worker was sentenced to eight years in prison for planting a > logic bomb on the company's network and betting its stock would go down.

I don't know if the courts will see it the same way, but to me it seems that Tinley's crime is a lot less severe. That other case was stock manipulation, which has the potential to cause much larger losses for other uninvolved parties. The only effects of Tinley's action is stealing his fee directly from Siemens plus whatever loss results from the spreadsheets briefly not working (which couldn't have been that great if they didn't just get them rewritten).

</comment><comment><USER6> > _But while Tinley 's files worked for years, they started malfunctioning > around 2014. According to court documents, Tinley planted so-called "logic > bombs" that would trigger after a certain date, and crash the files._

> _Every time the scripts would crash, Siemens would call Tinley, who 'd fix > the files for a fee._

I wonder what the code looked like. Is it obviously nefarious, like

        if (date() > '2018-01-01') { exit(); }

or can it be chalked up to laziness, like

        for(date in range('2000-01-01', '2018-12-31')) { process(date); // TODO, this should be moved out of this spreadsheet

<comment><USER7> They don't like to include meaningful details like that because they are likely exculpatory. Much better to use loaded and meaningless terms like "logic bomb". People already hate and distrust programmers, programmers who "plant bombs" makes for good prosecutorial business.

</comment></comment><comment><USER8> If this spreadsheet had this type of business impact why was it in excel in the first place? Where was the version control? Why did a contractor have administrative password to such a heavily business dependent process?

This article speaks volumes about their internal IT Governance and process.

<comment><USER9> Excel is/was a popular tool at the highest level in various industries, including finance. A frequently shared anecdote:

[https://baselinescenario.com/2013/02/09/the-importance-of- ex...](https://baselinescenario.com/2013/02/09/the-importance-of-excel/)

> _JPMorgan's Chief Investment Office needed a new value-at-risk (VaR) model > for the synthetic credit portfolio (the one that blew up) and assigned a > quantitative whiz ("a London-based quantitative expert, mathematician and > model developer" who previously worked at a company that built analytical > models) to create it. The new model "operated through a series of Excel > spreadsheets, which had to be completed manually, by a process of copying > and pasting data from one spreadsheet to another." The internal Model Review > Group identified this problem as well as a few others, but approved the > model, while saying that it should be automated and another significant flaw > should be fixed._ * After the London Whale trade blew up, the Model Review > Group discovered that the model had not been automated and found several > other errors... _

<comment><USER10> That's why this is such a great article: Manual Work is a Bug ([https://queue.acm.org/detail.cfm?id=3197520](https://queue.acm.org/detail.cfm?id=3197520))

It creates the mindset of, let me do a little everyday to make this a more automated process.

<comment><USER11> I did this when I started my first full time role out of college with great success. I was responsible for tons of reports that were manual and tedious. My goal was to improve something about the process every time I did the report. It could be as little as making the label I looked for bold, or as big as refactoring and automating the entire thing. In the same way, I made standard work improvements.

That turned ~4 hrs/day of reports into an automated system, gave me a good understanding of how the various systems and reports work together, and helped me get my first promotion.

I've moved on to a new role where I'm doing the same thing on a process which has been void of substantial improvements for 3+ years. There's always something, and I can remove a bit more time with every automation iteration.

<comment><USER9> When I was working in academia, early on I decided I would finally buckle down and learn proper devops and scripting (e.g. how to do things at the command- line) and had the luxury of having all the time I wanted to bikeshed on automating the collation process (never did master Make syntax though!).

The csvkit toolset – particularly `in2csv` [0] and `csvsql`, which, respectively, can be used to extract CSV from Excel sheets and import/insert directly into sqlite – make frequent appearances in my daily work these days.

Though admittedly, I don't know what options there are to distangle spreadsheets that aren't just data (e.g. intertwined formulas).

[0] [https://csvkit.readthedocs.io/en/1.0.3/scripts/in2csv.html](https://csvkit.readthedocs.io/en/1.0.3/scripts/in2csv.html)

[1] [https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html](https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html)

</comment></comment></comment></comment></comment><comment><USER12> _the scheme fell apart when Tinley was out of town, and had to hand over an administrative password for the spreadsheets to Siemens ' IT staff, so they could fix the buggy scripts_

This is like the story of the accountant who never goes on vacation, but when she finally does it turns out she had been skimming money.

<comment><USER13> My company does contract work for a big corporate and in my case they don't generally _want_ access to the code - they'd rather just call me up when there's a problem as I'm not unreasonable with fees, generally available, and I know my work inside and out.

Of course if I'm away and there's an emergency they have everything they need to modify it themselves, including the in-house skills. I wouldn't do anything nefarious like this, but I can relate to the situation of them not wanting/needing day-to-day access to the code.

<comment><USER14> From the bit of time I did consulting or having to take over the previous consultant work, it's amazing how many companies just don't bother to save the source code, let alone a build script or a start script. They couldn't care less about the software that was produced, they're buying butts in seats.

</comment></comment></comment><comment> ga-vu This.. does not seem like an optimal way to run a business on Siemens' part. What happened if this guy got hit by a bus?

</comment><comment><USER15> There will _always_ be business managers that put their company's crown jewels into a complex spreadsheet managed by an amateur or semi-pro. With millions of dollars flowing through the pipes surrounding them, they will make ignorant technical decisions just to save $1000.

It's analogous to being able to hire a full-time personal physician, and then self-diagnosing all your medical problems with quartz crystals and pendulums, and not even the free and reputable medical information sources.

We routinely give out free advice, such as:

      - Make backups.
      - ...including an off-site backup.
      - Use source control.
      - Don't trust inputs.
      - Run tests.

Maybe we can add to this, "if your company has permanent in-house developers, use them" and "synchronize your personal calendar with your logic bomb schedule".

</comment><comment><USER16> Calling this a logic 'bomb' seems kind of silly and designed to make it sound worse than it is. Looks like he put a time lock on it or something to guarantee that they'd have to call him every once in a while. It's absurd that they let him leave a password on the files after he left the company.

<comment><USER17> It's a intentional failure designed to trigger after a certain amount of time... sounds like a "bomb" to me.

<comment><USER18> Sounds like "Apple's business model" to me

</comment></comment></comment><comment><USER19> Sounds a lot like a software license with an expiration date.

I guess the main difference is that corporations have the leverage to force consumers (or employees) to accept their license terms no matter how lopsided they are, whereas the opposite is never true and so this surreptitious method was required.

<comment><USER20> If he included the timeout in his contract this wouldn't be a case and the comparison would be true. Instead what was happening was the 'logic bomb' would trigger and suddenly the sheet would be buggy, he would be called to fix the bug, change the trigger to a later date and charge the company saying he fixed it.

</comment></comment><comment><USER21> My question is, why is Siemens using spreadsheets and macros to manage equipment?

This, in my opinion, is a real problem. There's too much patch work trying to generate spreadsheets from other documents through macros and it's most likely a security risk.

I worked for a company that was moving away from using Office products for report management for this very reason. We have databases and it's 2019.

In fact, there's entire services that track assets already built that are infinitely better than spreadsheet generation.

<comment><USER22> I'll go on the record here and say that this exact comment will remain appropriate and relevant in 2029 and possibly still in 2039

<comment><USER21> Yup, crap software practices stick around for a long time. Which is why lack of standards is frustrating and we'll never learn from mistakes.

</comment></comment></comment><comment><USER23> Even back when I learned COBOL there were stories of programmers who intentionally created Abends so an operator would call them up with an error code, they tell them to hit enter, program resumes and they can claim callout pay.

<comment><USER24> Lol I haven't heard "abend" in years, thanks for the flashback!

</comment></comment><comment><USER25> Wish we had more info. I could see a scenario where he actually meant to do this with good intentions, not malicious ones. Maybe he had some information like, the spreadsheet data would be WAY out of date and cause issues every couple of years (just a contrived example). In that case, he would have to fix it anyway. But still that would beg the question, why didn't he tell IT/management?

I think ten years is way too much. Maybe like 3-5 if he had malicious intent. (not a lawyer)

</comment><comment><USER26> You would think he would make sure to be home when his logic bomb was set to go off.

</comment><comment><USER27> Crucial business stuff in a spreadsheet (let me guess, Visual Basic?) secured with a shared password (let me guess, over plain text email?).

I think that the persons who need attention are the managers who let things like this to happen, not the contractors who they hire as scapegoats.

<comment><USER28> This guy isn't a scapegoat.

Managers might be negligent, but he is still responsible for his illegal actions.

</comment></comment><comment><USER29> This doesn't seem much different than planned obsolescence to be honest.

If he had done this to 100 companies, then he would be considered an enterprise, not a criminal.

<comment><USER30> Sometimes it is also called SaaS.

</comment></comment><comment><USER31> wait a second Siemens made a deal to have some software running inside their infrastructure without having the code open right away, that is a major rookie mistake.

<comment><USER32> Given that this was a spreadsheet it's more likely that someone hired the contractor directly without going through IT. When things were burning and IT was begrudgingly brought in to fix things they weren't predisposed to be kind. No rookies involved. Just the normal corporate IT dynamic where things move too slow so get hacked around with Excel and other kludges and everything works until it doesn't.

<comment><USER33> The article says that the spreadsheets were protected by a password that the contractor did not initially hand over. So yes, that was a oversight of Siemens.

<comment><USER34> "Protected" office documents are the rough equivalent of putting up a 'Do Not Enter' sign and are just as trivial to bypass. If anyone had really cared enough to want to see the code, they could have.

</comment></comment></comment></comment><comment><USER35> It's pretty pathetic that a company is leaning on spreadsheets to survive. If your company is so terrible that it can't transcribe old printed out copies of spreadsheets, and has to subsist on formulas created by some "MS Office Guru" working a night job, then your dependency is your fault.

How is this not simply ad-hoc DRM by another name?

What's the difference between an expiring file format and Microsoft's operating system being shipped with vulnerabilities that require automatic update patches and refusing support for old versions of XP?

<comment><USER2> I'll give you a dollar if you can name a major company that could survive more than an hour if it woke up and found out all its spreadsheets had been deleted.

<comment><USER21> There's probably a lot of them. But it's mostly due to ignorance and lack of trying other avenues. It's very easy for companies to manage orders and inventory in actual systems designed for the task in this day and age. Ones that provide an actual web interface that's accessible anywhere and generate data from a database.</comment></comment></comment>


OpenRoss – fast, scalable, on-demand image resizer - <AUTHOR> http://developers.lyst.com/data/images/2014/06/23/openross/

<comment><USER2> There's also thumbor ([https://github.com/thumbor/thumbor](https://github.com/thumbor/thumbor)). It's a very mature implementation of this type of server and has been very battle-tested ([https://github.com/thumbor/thumbor/wiki/Who%27s-using- it](https://github.com/thumbor/thumbor/wiki/Who%27s-using-it)).

At globo.com we have near a billion images (we are a big portal). Can you imagine pre-generating that many images every time a new format gets added?

We serve everything with thumbor with a Varnish cache in front of it and we're very happy with it. It has enabled our designers to work with any image size they can think of.

If you guys need more info, please check thumbor's docs: [https://github.com/thumbor/thumbor/wiki/](https://github.com/thumbor/thumbor/wiki/)

<comment><USER3> Is the amount of traffic the site gets worth billions of images?

<comment><USER2> Definitely... We get around 50M page views/day in our website. And since we are a media company we need to have a storage of images from celebrities, sports and news in general.

</comment></comment></comment><comment><USER4> I'm a fan of pilbox [1]. It's "fast" (builds off of OpenCV + Tornado), easy to understand and does much more than just image resizing. Also, it should be simpler to deploy than OpenRoss - since it doesn't bake in nginx, you can deploy it to Heroku (which is what we do), or behind Amazon's ELB.

We use it on a fairly large production site, and it works fine. If you throw it behind CloudFront or some other CDN that supports cache busting, it's plenty fast.

1: [https://github.com/agschwender/pilbox](https://github.com/agschwender/pilbox)

</comment><comment><USER5> I just built a very simple version of this in about 100 lines of go, using [http://github.com/disintegration/imaging](http://github.com/disintegration/imaging) for the image processing.

I was surprised how... latent downloading from S3 is, and how it didn't seem to matter if I was running on Digital Ocean or EC2, downloading the image from S3 was always the slowest part. (Digital Ocean was actually faster!)

It takes about a second to process an image, but it is cached in front of CloudFront similar to the article.

Any tips for improving the latency from S3?

</comment><comment><USER6> I've worked with systems that pre-size images on creation, and I'd much rather work with a system like this that resizes and caches on demand.

You never know when you're going to need a new size (the introduction of retina images a few years ago doubled the dimensions of images you need to serve for example, and your design team is likely to come up with new size requirements occasionally as well) and backfilling to resize millions of images is a big pain and costs a lot in terms of storage.

</comment><comment><USER7> This architecture can definitely save a bundle on storage costs but usually it runs into slowness when resizing, or, run into problems with image quality when resizing repeatedly.

22ms for a GraphicsMagick resize is quite fast. I'm curious what the average input and output sizes were used when computing that number?

</comment><comment><USER8> [http://imageshack.us/pages/resize/](http://imageshack.us/pages/resize/) \-- Our Imagizer cluster does 6 Gbps at the moment thats 750MBytes/sec all day long, its fast and scalable ;)

[https://imageshack.com/discover](https://imageshack.com/discover) All of the images here are rendered with Imagizer; We store all originals in our HBASE/Hadoop cluser, while Imagizer does on-demand tranformations.

It works with non-imageshack links too:

[http://imagizer.imageshack.us/v2/500x500q90/http://actionfor...](http://imagizer.imageshack.us/v2/500x500q90/http://actionforspace.com/wp- content/uploads/2014/04/star-trek-voyager-ship-hd-wallpaper-background.jpg)

</comment><comment><USER9> Why not skip the backend completely and just use nginx + cdn?

(Have nginx proxy_pass to S3 and image_filter the response)

[http://nginx.org/en/docs/http/ngx_http_image_filter_module.h...](http://nginx.org/en/docs/http/ngx_http_image_filter_module.html)

<comment><AUTHOR> The CDN does not have all sizes of images. We use the ondemand resizer+cache because we may modify our website design in the future and need a new image size. Serving the exact image size makes our pages faster to render and saves bandwidth. Plus that image filter is quite limited and doesn't handle compositing.

</comment></comment><comment><USER10> At populr.me, we use a variation on the architecture described here. One difference is that we cache resized images to S3, rather than to on-disk cache. This enables all servers to share the cache. Otherwise, when a new server is brought online, it doesn't benefit from the cache, so for a time, every request it receives incurs the most costly path of source image retrieval and resizing.

An added benefit to caching to S3 is that since S3 won't run out of space, we can cache rendered images for longer (we use S3 lifecycle to keep cache expiration simple). The scaled images tend to be smaller than the source images, so the retrieval from S3 is pretty fast. Over the past week, retrieving scaled images from S3 has cost ~46ms versus ~84ms for the larger source images.

</comment><comment><USER11> I'm curious to know how people feel about offline (pre-transformed) vs. on- demand transformations. Are there any HN'ers out there that have worked on a site with a large set of images, and have an opinion on this? Adobe's Scene7 product works in an offline mode as far as I can tell, and seems to have captured a large segment of retail companies with product catalogs.

<comment><USER12> I had worked for a social network, and our system provides a function to let user upload their photo then transform it to some fixed size of original one. We did have pre-transformed and on-demand too. Pre-transformed for the image that's most viewed by user, like new feed's photo (720x720), large photo (1024x768), and the origin one (if user's screen is detected as big screen), we have to resize it asap. Other sizes, like thumbnail, we do on-demand transform using nginx resize filter plugins, and caching using varnish and/or traffic server. That system have been working well until this time. I would say on-demand transformation is good idea, since you don't have to store resized-image that's never viewed by any user, so you save your storage. But that idea must be implemented well, very well if you're going to serve million users.

</comment></comment><comment><USER13> As a healthy feedback - the correct architecture sits right below your nose, since you already have all of the components.

You should pre-process images in your scraping cycles, and not when a client comes to request it.

In this way, your "scale" is always predefined, bounded, expected, and much smaller - defined by your scraping scale and not user scale.

Good luck!

<comment><USER14> Isn't that what they started with, and decided against? "In our infancy, we saved all product images with 10 preset sizes, and then rendered the image which was nearest in size to what we required. As we grew, this solution became unwieldy for the levels of traffic we were experiencing and nor was it appropriate for our mobile app."

<comment><USER15> They say that, but there's one giant missing ", because..." in that paragraph.

They never explain why they render in 10 sizes (why don't they know which sizes they need), and why is loading one of those sizes on a mobile app not feasible.

It's stated like that and left hanging in the air.

Either their use case is very weird, or they're deliberately vague for some reason only they know about.

Also to clarify why 10 sizes is weird, normally what you'd do is double the width/height of your images with every size (so quadruple the pixels), same as one does with mip-maps. Or with icons.

Let's say the smallest sensible size is 128x128 (minimum needed to discern a product, and easy to downsize from there, won't get much smaller at good quality).

So we have 128, 256, 512, 1024, 2048, that's 5 sizes. And I'm pretty sure the images they need aren't over 2048x.

So 10 sizes is just pointless.

And with OpenRoss, doing cropping and adding whitespace at the server, producing pointless image duplicates, is senseless. Even the most crippled client-side technique can do the cropping and whitespace for you (yeah, even html).

This screams "we didn't think this through much".

<comment><AUTHOR> When the site was originally designed, there were only 4 or 5 sizes, one for the feed, one for the product page, one for related products, one for thumbnails, etc.

As the design changed, extra sizes got added to the image processing, and as with most early stage start-ups, it worked therefore there was no need to fix it.

We eventually ended up in the position of having 2.5M products all with preprocessed images of certain sizes from our design history. As we wanted more flexibility with design, but also knew that a lot of our images would have a very low likelihood of being accessed (fashion items have single runs and are never remade in future seasons), a big batch process didn't seem appropriate. Additionally, it would mean storing several different copies of images in our S3 bucket, even if we knew the product would not likely be seen again.

A more attractive solution (at least to us) was to do the hybrid approach, where we would resize on demand, and then cache for a long time. This way, we only do the processing for images that need it, in almost a functionally identical way to large scale batch processing, but the process is demand-led.

<comment><USER13> But the nice thing is - using a storage solution where you don't pay for what you don't use.

</comment></comment></comment></comment></comment><comment><USER16> Based on all the links to similar apps in this thread, writing an image- resizing service to sit behind a CDN seems to be a right of passage. My creation from a couple years ago: [https://bitbucket.org/btubbs/thumpy/src](https://bitbucket.org/btubbs/thumpy/src)

It's still running happily in production.

</comment><comment><USER17> I would love to see a golang version of this.

<comment><USER18> Maybe these:

[https://github.com/ReshNesh/pixlserv](https://github.com/ReshNesh/pixlserv)

[https://github.com/emicklei/karina](https://github.com/emicklei/karina)

</comment></comment><comment><USER19> You should definitely limit the sizes that can be generated otherwise with URLs like [http://host/WIDTH/HEIGHT/MODE/path/to/image](http://host/WIDTH/HEIGHT/MODE/path/to/image) it's pretty easy to mildly DDOS you.

</comment><comment><USER20> At first I thought OpenRoss was a new competitor to GraphicsMagick and ImageMagick, but it's just a Twisted plugin. The title should be changed.

<comment><USER21> The title is fine. It just says image resizing. Image/GraphicsMagick are a whole different ballgame.

</comment></comment><comment><USER22> Looks like you built your own [http://cloudinary.com](http://cloudinary.com) but with less features

</comment><comment><USER15> At scale, processing thousands of highly granular items (images) in any way is an embarrassingly parallel task even in its most crude and naive implementation.

So claiming "fast", ok, but claiming "scalable" feels like a redundant buzzword, a bit hand-wavey.

When you make such generic claims, be quick to explain what you mean, or people will not treat you seriously.

<comment><USER23> Yeah what i was thinking. There is no state to be managed. Its just a pipeline which doesnt not anything more than more machines to handles more load. Its relatively easy to implement.</comment></comment>


Surprising properties of C null pointer constants - <AUTHOR> https://kristerw.blogspot.com/2016/08/surprising-properties-of-c-null-pointer.html <comment><USER2> How much interest would there be in a cleaned up C?

A non-backward-compatible very-close-to-c dialect with a lot of these tricky corner cases removed? Made a bit more ergonomic overall?

It would still be abi compatible and easily integrated into C projects (same headers, declarations, etc).

I know of some more ambitious attempts at a saner C and why they failed.

But every time I write something to work with C 's legacy rules I wonder "why can't this just be a little better".

I'm not talking new language better. Just a new dialect of C that compiler could easily support, perhaps with a directive in a C source file. It could even transpile to C for compilers that didn't support it.

Something like what C would be without the legacy cruft.

Would anyone use it but me?

<comment><USER3> The problem with this idea is C is an advanced language requiring one to be very careful with memory (referencing, allocation, deallocation, etc). If we are to keep C in its essence with well-defined behavior, managing memory still seems to be part of the job description.

I think what you are describing is Rust, Go, C++11 RAII with reference counting, Objective-C with ARC. I like to think of C as an abstraction of assembly. Of course, the above languages often use libraries or OS APIs implemented with C function calls (as well as having resource handles); these library functions may not always have a nice wrapper around them.

C is a very concise, barebones and syntactically simple language. I think some of the problem is that there is a lot of behavior that is not well-defined resulting in different interpretations in different compilers. I think there are proposals to make C more standardized.

I think C++11 has made great moves to being consistent across all compilers. Having a thread library that is cross-platform, for example, is a very good move.

<comment><USER2> Nope. I'm specifically describing only the rough edges of C.

Things like defining a NULL pointer to convert from any zero value.

Nothing as ambitious as a nrw language, like I said above.

I want a modern version of exaxtly what C is, without some of these undefined or implementation defined legacy warts.

And I understand that defining some things may make the program barely measurably slower. Someone can opt in to raw C if they care. It could even be in the same file... Think scoped "pragma overflow" directives that last for the lexical scope to get raw speed by opting out of defined semantics.

<comment><USER4> I guess what you really want is what Microsoft is trying to resolve with Checked C in order to bridge the C gap with C++.

Here's the link if you are interested: [https://github.com/Microsoft/CheckedC](https://github.com/Microsoft/CheckedC)

<comment><USER2> I don't think so; Checked C looks to be focusing on array bounds checking and adds new syntax, new pointer types, etc.

I want to focus on cleaning up C as it is. I don't want a new syntax or new semantics outside of defining some/most of what is undefined today.

<comment><USER4> I would be more than interested to see a demo code using pseudo-language to explain exactly the concept you have in mind.

That would be more than interesting for lots of us and you never know; we might get something out of it and why not implement it as a FOSS project?

<comment><USER2> The friendly C and boring C proposals are quite close to what I'm thinking of. I was sad to see friendly C abandoned.

I hope to find the time shortly to take a stab at something along those lines.</comment></comment></comment></comment></comment></comment></comment>


They Have, Right Now, Another You - <AUTHOR> http://www.nybooks.com/articles/2016/12/22/they-have-right-now-another-you/ <comment><USER2> The idea that Facebook and other services may allow the proliferation of erroneous doppelgänger profiles more attractive to advertisers than the real versions is very interesting. How would this be tested? By seeing if there is any bias in ad-targeting misfires?</comment>


Show HN: Discover for Telegram – a list of interesting Telegram groups - <AUTHOR> http://groups.svenvdz.com <comment><AUTHOR> Hey Hackers!,

I created Discover because I found it difficult to find new Telegram groups. I hope you like it and if you know a cool group, please add it.

Thanks, Sven van der Zee

<comment><USER2> An interesting project. I navigated to the page and clicked on a link. Unfortunately, my browser does not recognize the

      tg//...

protocol. Not sure what the workaround is.

Good luck.

<comment><AUTHOR> The tg:// protocol is for telegram only. If you download the telegram app it will work.</comment></comment></comment>


Software is a long con - <AUTHOR> https://www.emptywheel.net/2017/09/14/software-is-a-long-con/ <comment><USER2> Hmm — fake analogy. Bridge fall down would be more on the scale of, a software install stopped all service permanently, self erased, and could never be restarted.

Real software quality issues are more like re paving, painting, new cables, scraping off rust, closing for inspection — and slow commute traffic over the bridge.

Argument by analogy is just sophistry, the real argument is to precisely account for the total economic cost of defects, and what the cost would be to correct them. But that is a lot more effort than I have ever seen in a blog post.

</comment><comment><USER3> "Hey guys!" he said. "So it looks like there's a crew of Russian bridge destroyers with hammers and lighters who are running around in the middle of the night setting fires to bridges and knocking off braces with hammers. They started in Ukraine but they're spreading around the world now, and we don't know if our bridges are safe. They've studied bridges carefully and they seem to be good at finding where they're most flammable and which braces to knock off with their hammer."

<comment><USER3> "Maybe we need to make them out of non-flammable material and rivet them instead of using exposed braces and clamps." this is a great analogy to make you see our software problem in a new light.

</comment></comment><comment><USER4> Computer software does not exist in isolation; it is built upon layers and layers of abstractions, starting from hardware and ending with your framework/language of choice, resulting in a system so complex that no person alive is able to grok it in it's entirety. Bugs can be found in any of these hundreds of separate but interoperating layers, and no entity it's going to assume full liability for this entire construct.

A better analogy would be if the bridge was interconnected with every other piece of infrastructure in it's environment, from the buildings in vicinity to the ground it's built on, and all of these were in continuous shift and transformation. No sane engineer would take full responsibility for designing and building such a bridge.

And I haven't even touched on the subject of money and it's implications. "Whereas physics is math with the constraint of reality, software engineering is math with the constraint of money."

</comment><comment><USER5> The argument falls apart when you ask: are you willing to pay 10 times as much (or start paying something at all) to use your software.

Software development is an economic activity, and as long as there are incentives to ship first with the most functionality regardless of quality, we will continue to ship insecure and broken software.

Don't blame the engineers, blame the system.

<comment><USER6> This is why I don't think of programmers as engineers.

</comment></comment><comment><USER7> > OK, obviously it's not bridges I'm talking about, it's software.

Actually, you're talking about neither but are merely trying to create a narrative.

</comment><comment><USER8> Too many words. Try communicating the point as succinctly as you possibly can.</comment>


The secret algorithm one VC firm uses to pick entrepreneurs - <AUTHOR> http://gigaom.com/2012/12/23/the-secret-algorithm-one-vc-firm-uses-to-vet-entrepreneurs/ <comment><USER2> > We get the age of cellphone number through a process called cellphone > underwriting, which reveals all of the above and more, and which is > perfectly legal but secretive enough that I won't reveal how it works. At > the end of the day, we're looking for entrepreneurs who are young, stable, > middle class, and who have the support of family and friends networks — and > the age of the cellphone number tells us all those things.

> So, I take the approximate age of a founder's cellphone number and then > during due diligence, I get a stat: The average time of their first phone > call in the day. If you and your entrepreneur team are making and taking > calls at 6:30 a.m PT, you're probably talking with people back East and > there's a 50-50 shot you're making north of a million in revenues.

This smells like complete bullshit. There are no other (relevant) Google results for "cellphone underwriting": <https://www.google.com/search?q=cellphone+underwriting> (add the quotes yourself, they're being removed by HN's comment code)

GigaOM has really gone to the dogs.

<comment><USER3> It seems their algorithm has codified age discrimination. It's a shame really that this is a component of their strategy.

<comment><USER4> Except that their algorithm, overall, seems like a failed strategy.

</comment></comment></comment><comment><USER5> I didn't see one thing in there about evaluating the business. That said, assuming that this isn't a prank post, perhaps this kind of reasoning is behind the fact that many great ideas flounder for lack of funding while many bad ones do get funding. Perhaps the VC's behind those ventures aren't looking at the business at all - they are just looking at the age of the founders' cell phone numbers.

I do believe that alot of this kind of thing goes on though. I invented some authentication technology back in 2004 and couldn't get anyone to take me seriously. After a former friend of mine with serious credibility in the tech investor community came along and formed a business around it, he was instantly able to raise money and soon thereafter sold it for $64 million (incidentally, he screwed me out of the $13 million I was supposed to get, but that's a story for another day). The point is that great technology often goes nowhere until the "right" people are behind it - which probably does all of us a serious disservice.

Rather than rejecting great technology with what the investor believes are weak founders for arbitrary reasons, they should keep teams of what they consider to be great founders around to help those "weak" teams with great ideas.

</comment><comment><USER6> This sounds more like augury than algorithm.

Unless they have any stats to show me (which I doubt), I'm concluding that there's nothing scientific or even logical about any of these "secrets".

If you claim your method is based on statistics, show me some statistics. This article is the antithesis of the Moneyball approach.

<comment><USER7> Came here to say this. Show us results, not something that sounds like it was pulled out of thin air.

</comment></comment><comment><USER4> I found that terrifically lame, right from the moment when they injected "big data" into Moneyball. Yes there's statistics in Sabermetrics, but I'm pretty sure you can fit all the data in a relatively small amount of storage, like a usb key.

<comment><USER8> Yep. I wouldn't want a VC firm that didn't understand the difference between data and "big data". Good thing I wouldn't pass their tests.

</comment></comment><comment><USER9> It's dangerous to make the comparison to Moneyball when none of the factors used in this "algorithm" track cleanly to measurable statistics that are indicative to future success like you have with sports.

There is also nothing in this algorithm that seems to account for scrappiness, determination, ability to take hard hits, and a host of other intangibles that make someone a good entrepreneur. I'm not sure you can measure that algorithmically, other than possibly from past entrepreneurial experience, although that's a story better told by the entrepreneur rather than some arbitrary proxy.

If I ever take VC, I hope it's from a VC that believes in me, my team, and what we're doing, and not just whether I fit into their mold of what they think an entrepreneur should look like.

<comment><USER10> Agreed, Moneyball works because of the vast amount of data that is collectable in baseball. Even more fluid sports like basketball and football have a hard time applying algorithms to player ratings (though it's beginning to happen).

While I do think there are probably some useful objective ways to measure entrepreneurs, unless someone has enough data points under his or her belt the "Moneyball" approach is never going to give reliable results.

</comment></comment><comment><USER11> I really need to waste less time reading total shit on HN.

</comment><comment><USER12> Is this a joke? I seriously can't tell

<comment><USER13> It's a joke, but it's possible neither GigaOm nor the author is in on it.

It's a pseudonym for Larry Chiang, a MLM/credit score/etc. promoter who I believe has some kind of fraught relationship with YC.</comment></comment>


A smart object to help you through grief might be less dumb than it sounds - <AUTHOR> https://thenextweb.com/apps/2017/03/13/a-smart-object-to-help-you-through-grief-might-be-less-dumb-than-it-sounds/ <comment><AUTHOR> Just finished up my pre-need (that's service, coffin, vault and transportation), headstone, burial plot and escrow account for opening (that's a backhoe). Do it now: it's cheaper to negotiate these costs now and less burdensome to your family. Also, leave an always current inventory of wills, trusts, passwords, keys, assets and accounts where survivors can easily find them. Leave specific instructions for what you'd like done with social media accounts and decide whom gets what ahead-of-time. Finally, don't put any children on bank accounts, make it payable upon death. Prevent, as much as possible, squabbling about money and/or property should someone die or become incapacitated.

PS: opt-in as an organ donor, where applicable.</comment>