Judy arrays are patented - <AUTHOR> http://en.wikipedia.org/wiki/Judy_array#Drawbacks <comment><USER2> Unless you are a patent lawyer/expert specifically in someone's employ, pointing out that in your layman's opinion that "something appears to be patented" isn't doing anyone any favors, and may in fact be harming them.

Patents use their own specific, strange language. The claims, as modified by other precedents, only apply in certain specific situations which may be different than what a casual reading would imply. And, for any of dozens of reasons the holder may not be interested in ever trying to enforce the patent.

So simply by raising the possibility, causing attention to be drawn, and uninformed discussions to be spawned, people's time is being wasted. If they become uneasy, or start spending engineering effort to 'work around' something that they hardly understand and that may never be enforced, more time is wasted.

And by getting more eyes on the fuzzy patent, you may have put more people/projects at risk of treble damages for 'willful infringement', in the rare case where the patent is actually enforced later, or undermined their ability to make a case for obviousness (because many teams came up with the same approach without seeing the patent).

The better policy is to ignore such "appears to be patented" reports, unless and until there's a credible threat from the holder(s) to enforce in specific ways, as checked by experts. Let these patents (and panicked overbroad interpretations) wither away in unenforced obscurity.

<comment><USER3> The fact that it takes a lawyer to even guess whether a patent applies, and that the typical strategy is to keep a low profile and hope nobody notices, is itself a serious flaw in the patent system. Any system in which it's impossible to predict ahead of time what is safe or legal is broken.

<comment><USER4> Not to mention the fact that engineers are routinely advised to never read patents, since doing so would increase liability when they inevitably independently reinvent the same obvious idea.

<comment><USER5> Humans are a learning algorithm in a body. Very, very few learning algorithms incorporate original thought, because it's computationally expensive. Extremely, extremely expensive. Genetic algorithms are close to the only ones and the best reason to use generic algorithms is when you have no example data whatsoever, and even with datacenters full of machines, a lot of patience is required. Otherwise, genetic algorithms are going to get clobbered in performance by almost every other algorithm.

Which brings me to my point : imho the chances that humans are capable of real original thought is nil. Don't get me wrong, humans are very capable of creatively combining ideas from very different disciplines and non-human sources to arrive at surprising insights and works. But I'm pretty sure humans are not in fact capable of creating something out of nothing, even when it comes to intellectual works.

</comment></comment></comment></comment><comment><USER6> At the same time, Doug Baskins, the author of Judy, open sourced an implementation under the LGPL [1]. This license insists "that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license." [2]

[1] <http://judy.sourceforge.net/downloads/10minutes.htm>

[2] <http://www.gnu.org/licenses/lgpl-2.1.html>

</comment><comment><USER7> You can patent a data structure!? Seriously? This is straight up an abstract idea. I think non-abstract patents are beneficial and help society. This is just plain idiocy.

<comment><USER8> Regarding patents, people always complain a particular patent couldn't have been granted because it's not novel enough, anyone could have thought it, or that it's math.

Patent law is a black-on-white subject, either you support it or not. It's impossible to grant _some_ patents under subjective premises and be fair at the same time.

<comment><USER7> As others have said, it is not black and white. You can support patents on "things" and not patents on "ideas." There's a big difference.

I can tell you mathematically how a windmill grinds corn but that does not make my description into a windmill. On the other hand, laying down the mathematical description of a Judy Array IS the array itself!

<comment><USER8> You're saying the description of how a windmill works is not a description of _a_ windmill, while the description of how the array works is _a_ array.

How is that true? Isn't a description a model [1], never the thing itself?

[1] <http://en.wikipedia.org/wiki/Conceptual_model>

</comment></comment></comment></comment><comment><USER9> Since the article has been updated and the "Drawbacks" section removed, here's the diff showing the original contents of the "Drawbacks" section that the story linked to, along with the deletion by user Fintler:

[http://en.wikipedia.org/w/index.php?title=Judy_array&dif...](http://en.wikipedia.org/w/index.php?title=Judy_array&diff=532589496&oldid=531806885)

"Removed speculation that this subject is related to the referenced patent. Wikipedia is not a crystal ball or a place to discuss how the law MAY be applied."

</comment><comment><USER10> It's released under the LGPL, according to its COPYING file, by HP. I am pretty sure that means the patent doesn't matter; HP is granting you a license to use it.

<comment><USER11> Strictly speaking the LGPL is a license that relates to copyright, not patenting. A separate patent license would also be required, unless you use a copyright license that also includes patent terms (I haven't reviewed LGPL in awhile to confirm, and obviously you need to specify about what exact version of LGPL you're referring to anyways).

<comment><USER12> Any GPL (any version) explicitly forbids distributing the software with external conditions restricting its ability to be redistributed. That puts it at odds with almost any conceivable patent license.

<comment><USER11> I think you're underestimating the creativity of patent lawyers a bit.

For instance, just off the top of my head, consider this: "OK, you can distribute the source all you want, but as soon as you compile it, you've created a patented product, the binary of which you _can't_ distribute."

After all, the patent itself is supposed to give all the description one needs of how to implement the patented invention, it's when you fix the patent into something real that you violate the patent.

Edit: What drove me to mentioning the separateness of patents and copyright was some of the discussion around GPLv3, e.g. [http://fsfe.org/campaigns/gplv3/patents-and- gplv3.en.html#Ex...](http://fsfe.org/campaigns/gplv3/patents-and- gplv3.en.html#Explicit-patent-grant)

</comment></comment></comment></comment><comment><USER13> As well as the doubly-linked list [http://www.google.com/patents?id=Szh4AAAAEBAJ&printsec=a...](http://www.google.com/patents?id=Szh4AAAAEBAJ&printsec=abstract#v=onepage&q&f=false)

<comment><USER14> This is insane. The US patent system is beyond retarded.

</comment></comment><comment><USER15> I actually asked about this on the mailing list some time ago: <http://comments.gmane.org/gmane.comp.lib.judy.devel/244>

tl;dr: patent was done for defensive reasons.

</comment><comment><USER16> This has been true for quite a long time, and IIRC is why they're not more widely used. That and they're pretty complicated to implement properly.

<comment><USER17> They are only better for some workloads and not others. e.g., they are excellent for accessing data in-order, but are worse than a very simple hash table for random access:

[http://preshing.com/20130107/this-hash-table-is-faster- than-...](http://preshing.com/20130107/this-hash-table-is-faster-than-a-judy- array)

(yes, this hash table is vulnerable to timing attacks; point is, for many workloads Judy brings in considerable complexity but is actually inferior to other solutions).

<comment><USER18> Just an aside, but man, that's a refreshingly readable and pleasant article...

</comment></comment></comment><comment><USER19> Are we talking about the implementation is patented? Or the algorithm itself is patented?

You can't patent an algorithm, at least not in the U.S. The expression of an algorithm can be patented. Patent lawyers often tell people to replace an algorithm with a system, which is an expression of the algorithm.

<comment><USER20> Patents tend to be written like " _any_ system that implements algorithm X" and " _any_ machine-readable medium containing software that implements algorithm X", which is equivalent to a patent on the algorithm itself.

</comment></comment><comment><USER21> In case of patent lawyers, break glass and extract HAT-trie or crit-bit tree.

</comment><comment><USER22> using System.Collections.Patented;

</comment><comment><USER14> That's no problem, actually, even if it is patented, because Judy Array is not a concise algorithm or a data structure, but instead a compilation of a number of well-known unpatented data structures and algorithms, so you can basically change a couple of algorithms used there, and get out of the patent.</comment>


Microsoft OneDrive storage changes - <AUTHOR> https://support.office.com/en-us/article/Microsoft-OneDrive-storage-changes-bf91132d-d0cb-4cbb-96ba-86278c5c1c2f?WT.mc_id=PART_OneDrive-Unknown_OneRM_StorageChanges_FAQ&ui=en-US&rs=en-US&ad=US <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=10497389](https://news.ycombinator.com/item?id=10497389)

</comment><comment><USER3> This is when your projections for costs do not match reality and you have to cut down on costs of freemium plans! May be good for share holders but definitely not for users.</comment>


Can a simple algebra test predict programming aptitude? - <AUTHOR> http://www.codeup.com/can-a-simple-algebra-test-predict-programming-aptitude/ <comment><USER2> Why do you care about it in the first place? Also what is your definition of good programmer? Just make a function? Make a class? Make a big app?

IMO you don't need to learn too much math before programming to be a good programmer. Basic operations are good enough, if you need more you learn as you go, you'll never know what you need. Lazy learning, like lazy variable loading.

The test you are making are more like problem solving which is closer to what programming is and not math. Of course basic math (+, -, /, *), but what it really matters is knowing what operations to do. The operation itself is the easier part.

A better test would be to make a chose between which approach to take to solve a problem and explain the rational behind. That is what will define a good programmer.

Also what better indicator you want than programming itself? You'll never make a choice based on this.

Also one thing is to figure out how to solve "here are 3 consecutive integers with a sum of 69. What are they?" than solving "here are X consecutive integers with a sum of Y. What are they?". Same in "Adriana's age is 1/3rd of her dad's age. If her dad is 36 years old, how old is Adriana?" vs "W's age is X of Y's age. If Y is Z years old, how old is W?". The complexity increases a lot.

<comment><USER3> I disagree with many of your points.

First, the algorithmic part of programming is a lot like doing algebra. So much so that algebra is an important part of any serious CS syllabus. Clearly "writing a function or a class" is not the skill they are testing here, but problem-solving.

Knowing how to solve simple algebraic problems engages your "problem solving" skills in a similar way as solving something by writing a program. Note that algebra is not "basic math (+,-,/,*)" like you said. Algebra, like programming, requires the ability to understand and write abstractions, and to figure out how to approach a problem.

> Also what better indicator you want than programming itself?

They clearly want to establish a correlation between something else and programming. This is interesting in itself.

<comment><USER4> IMO, what algebra and programming have in common is simply abstraction, so people in the mindset of recognizing patterns to which abstraction can be applied tend to do better as programmers / automation engineers in general.

<comment><USER5> Algebra and programming are very, very similar. Algebra [1] deals with formal languages and their rewrite rules in general. Programming is dealing with a certain (but yet very wide) class of formal languages and an extremely wide variety of rewrite rules (i.e., algebras).

It does not matter that nobody is using, say, a term "refactoring algebra", but it is still, essentially, an algebra.

[1] Here I'm referring to a generic meaning of "algebra", as in [https://en.wikipedia.org/wiki/Universal_algebra](https://en.wikipedia.org/wiki/Universal_algebra)

</comment></comment></comment></comment><comment><USER6> For an article about math, they seem surprisingly weak at differentiating between causation and correlation.

 _It's fairly common for incoming Computer Science majors to ask the question, "Why do I have to learn all this math if I just want to learn to program?" The correlation above suggests a possible answer: The ability to understand basic mathematics is likely correlated with the ability to "think algorithmically," which is well-known to be a foundational skill for expert programmers._

If it's just a weak (as the chart suggests) correlation, it doesn't mean learning one will make you better at the other. And if you do assume causality - it can go either way. Perhaps learning math makes you better at programming. Perhaps learning programming makes you better at math.

My 2 cents... It's more complicated because there are other things involved. Perhaps it's the nerd gene that makes people who like computers also more likely to play D&D and be in band. (I was a card carrying member) Does one of these 5 variables cause the other, or are they all part of the same thing?

<comment><USER7> Should if you are going into a CE or CS course not have learnt to code at school before going to university English lit or classics students are expected to be able to read.

I learnt to program when I was 13 and that was in the middle stream at my upper school

<comment><USER8> This is highly dependent on your opportunity. As hard as it is to find qualified math and english teachers prior to the college level, think how hard it would be to find programming instruction.

That is to say, when I was in school before university there was no choice for studying programming _.

_ There was but it was offered at a private religious school/camp, not via the public schools.

<comment><USER7> This was in a comprehensive i.e. a bog standard school and was in the middle i.e. vocational stream - possibly the approach of having specialisation at the middle and upper school works better for feeding children into UNI/Vocational track.

<comment><USER8> Right, so the bog standard schools you had the opportunity to attend offered something mine (and many others) do not. As someone who is always looking for good developers I certainly don't want to limit the number of people who can learn CS to only those who happened to live somewhere that offered programming at the public school level.

<comment><USER7> possibly not fetishizing CS over a more useful general introduction to programming might help.

I haven't had to do any of the big O stuff in anger but I have had to make sure a major telcos billing system reconciled.

</comment></comment></comment></comment></comment></comment><comment><USER9> If there is one thing that has always bothered me, is people evaluating student's prowess in "Computer Science" (which is not programming, shame on you) by having them learn your normal run-of-the-mill programming language/paradigm like Javascript, Python, PHP and whatnot and then claim they are not apt to program because they cannot solve problems or handle variables, mutability, etc etc.

There are A LOT of different programming/automation paradigms in the world, lots of different languages, declarative, functional, OOP, imperative, logic, etc etc, maybe some of these students just can't get the convoluted mutable and unsafe structure of a Python or Java program but they might grok and appreciate the safety and simplicity of ML/Haskell or the flexibility of Lisp, why would you turn them down in such a way or force them through a path they don't really need to go through?

During my first year of Bachelor Computer Science at University we had introduction to programming in Scheme. It was a mind-expanding experience to me, I already knew how to program in C, Java, C++ and C# with a bit of PHP/Javascript back then and I was much ahead most of my peers but still I sat at the computer, trying to earn this alien language to me, and luckily I was humble enough to force myself through it and adapt my mind to a different paradigm. I know for certain that a lot of my friends and colleagues who already knew how to program struggled hard on that exam and some had to re- take it the following year (Which was unfortunately changed to C++ and they managed to pass without troubles) simply because they didn't think Scheme was a "real" programming language or useful at all. It was just too different from their previous experience.

What's even more interesting, I know some people from that class who had never touched a programming language before and weren't particularly strong at math. Those people are the ones I recall enjoying the course the most, they found it the easiest among all the other courses we had and passed it with excellent grades. Simply because their mind was apparently better wired for such paradigm and they had no preconceptions or prejudices that prevented them from learning it properly.

So my bottom line is, what makes you think that some people might not just have a "differently wired" brain that makes them think more easily with a different non-imperative paradigm for programming?

<comment> guard-of-terra Recursion is as hard as mutable state to grasp if not harder. We might find a few people who can do one thing sligtly better than the other one, but not complete blanks.

<comment><USER10> In 35 years of programming across platforms and languages covering embedded to web applications it is my opinion that recursion is dangerous and useless. There is no way I would use recursion to evaluate how good a programmer might be. To quote the movie: "Frankly dear, I don't give a damn".

<comment><USER11> Why?

<comment><USER10> Just in case this is what you were trying to understand:

[https://www.google.com/search?q=recursion+is+dangerous&rlz=1...](https://www.google.com/search?q=recursion+is+dangerous&rlz=1C9BKJA_enUS590US591&oq=recursion+is+danger&aqs=chrome.1.69i57j0&sourceid=chrome- mobile&espv=1&ie=UTF-8&hl=en-US)

[http://m.slashdot.org/story/198499](http://m.slashdot.org/story/198499)

You can certainly dig up more information. For me, and this is just my opinion based on 35 years of software and hardware engineering, recursion is a neat academic idea but in the real world it is useless and dangerous.

<comment><USER11> I'm seeing stack overflows (not a problem with tail-call optimization) as the biggest problem here. There are equally dangerous problems, though. Buffer overflows are a very real concern, especially in embedded software; but that doesn't mean that people don't ever use pointers. Everything about software has risks. Yes, they probably shouldn't have used recursion there in that car; but honestly, it's just a stack. Enough calls and some state could have been frozen. They should have put mitigations in place to stop the potential for a stack overflow to have actual, detrimental results. Do you refuse to ever make a function call for fear that you might be at the top of the stack somehow? After all, how can you know that you haven't accidentally created a state machine with function calls and are at the peak of it now, and end up causing the same problem. Recursion may have been the final manifestation, but it's certainly not the only place that failed.

I argue against your thought that recursion is useless, as well. It's a natural and intuitive solution for a lot of problems. The very concept of a dynamic programming solution starts with a recurrence relationship. It starts with recursion. Sorting algorithms are intutively recursive in many cases, Quicksort and Mergesort are just two examples.

And, 'dangerous' is an interesting term. I understand you've worked in embedded systems and hardware, and so those things are often critical systems that have to be super secure and completely bug free. Not every system is like that, though.

I want to understand why you believe that recursion is both useless and dangerous. Could you give some broad examples of the dangers of recursion from your years of experience?

<comment><USER12> It's trivial to blow the stack even on languages with tail call optimization.

<comment><USER5> Ok, try to blow the stack in a stackless language implementation.

<comment><USER12> F(x) = F(x) + F(x)

Eventually you hit OOM or some death limit even on a stackless language.

<comment><USER5> This is a memory leak now, not a stack overflow.

<comment><USER12> Thus demonstrating a finite stack. "Stackless" just a more efficent way to use memory. You could get the same things from dynamicly allocating and dealocating stack space as needed.

Put another way, allocating 1GB of stack space on a machine with 2GB of RAM is at worst the equivelent of using a stackless lanugage on a machine limited 1 GB of RAM.

PS: It's actually worse as stackless languages are stricly slower than actually having the equivelent stack space pre alocated and you need to put an pointer for each stack call pluss overhead for alocating memory.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> The scatter plots don't show that strong a correlation.

From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one.

<comment><USER14> Yes it is algebra. Take second problem for instance.

X + (x + 1) + (x+ 2) = 69. Solve for x.

<comment><USER15> Or just recognize that three _consecutive_ numbers mean you divide by three and get the median of the three numbers. So 69/3-1, 69/3, 69/3+1, giving 22, 23, 24. No algebra involved, you just need to interpret the problem and build a tiny model in your head. Exactly like (some kinds of) programming.

<comment><USER16> That's exactly how I solved it. I'd consider myself a pretty decent programmer, but I did poorly in algebra and calculus at middle, high school, and university level.

Give me "x + (x + 1) + (x + 2) = 69" and I wouldn't know where to start. I could probably turn that word problem into that equation, but I would have no idea how to actually solve the equation algebraically.

But given the word problem alone I knew to divide by 3 and add the neighboring numbers. Now, actually dividing by 3 I'd need to use a calculator or spend a lot of time with a pencil and paper, but at least I knew the steps to solve it.

I'm awful at rote math and mental math, which is why I'm thankful I can make the computer do it for me.

<comment><USER17> Are you saying that if the word problem was "2 consecutive numbers and a third number that was five higher than the second number" you'd be unable to solve it?

"Tricks" work for simple cases. Algebra works for all cases.

<comment><USER18> Yeah, I would be unable to solve it, given that I'm pretty sure there is no solution if we assume that "consecutive" implies integers (and I'd be curious what 'consecutive' means if we don't).

If instead we made it "2 consecutive numbers and a third number that was five higher than the second number add up to 70" (i.e., 21 + 22 + 27), that's easily solved using 'tricks'. Really, the trick mention (which is what I did in my head, too) is just a rephrasing of the algebra. That is, I would subtract 4 off of the thing that is 5 higher (so that it's now 1 higher; the problem is now the same, get 3 consecutive integers), subtract 4 off of the number I'm trying to get (so 66), so the problem is now 3 consecutive integers that equal 66, and solve the same way (66/3 = 22, so -> 21, 22, 23), and then just add the four back in to the highest (21, 22, 27).

<comment><USER17> You're right, my mistake. That "five higher" should have been "four higher".

The thing is that your solution _is_ the algebraic solution. You're simplifying an equation by balancing both sides, when you subtract four. Just from our perspective, you simplify to a still difficult state, instead of the easiest possible state.

Algebra is just a way of formally stating what you did, and then offering some simplifications that speed up the process. Or offering more powerful methods that making solving more difficult problems easier.

<comment><USER18> 'The thing is that your solution is the algebraic solution'

I agree. That's why I said

'Really, the trick mention(ed) ... is just a rephrasing of the algebra'

Just because you do number juggling in your head rather than write it formulaically doesn't make it an inferior technique, or make it not algebra, which was my point.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Does a "simple algebra test" correlate with IQ? Does "programming aptitude" (whatever the hell that is meant to be) correlate with IQ? The headline would then follow.

I know this is a socially unacceptable opinion but I think those correlations exist.

<comment><USER20> Codeup CEO here. We actually did some brief testing with classical IQ tests and saw two problems:

1) IQ tests are really long and expensive, so difficult to implement

2) They didn't correlate with performance as well as algebra.

<comment><USER19> I've read your answer about your methodology of gauging "programming aptitude" and I'm worried it might be susceptible to your judges' biases - it being purely subjective. I'll put more faith in your point number 2 if you come up with a more objective measure.

<comment><USER20> Agreed that an objective measurement would be ideal and this is second best.

However, we've had a hard time creating or locating an objective measurement of general programming skill. As demonstrated by the industry's non-use of standardized tests for programming, I don't think anyone else has either.

If you have a lead on something, would love to see it.

<comment><USER21> Trying to create an accurate measurement of programming skill is far more difficult than looking for correlation on tests compared with some other subjective measure.

This misguided attempt at instrumenting "skill" could prevent highly capable individuals from entering the field who don't have a solid math foundation, for societal or other reasons.

<comment><USER22> OTOH, identifying a decent mathematical thinking background as a predictor of CS potential is a pretty big win at a societal level. Teaching math is relatively cheap; you don't even have to buy computers...

</comment></comment></comment></comment></comment></comment><comment><USER23> This article is built on a fundamentally invalid premise:

> 30-60% of CS college majors have failed their Introduction to Computer > Science course because they simply could not learn to program.

This "You either have it or you don't" mindset is strikingly elitist. I simply don't buy the idea that there are people out there who absolutely cannot learn to program. I mean, put someone on a desert island and tell them they can't leave until they can write a program that uses a linked list, and I'm pretty sure most people would be able to get off the island eventually.

Of course, that doesn't mean that some people can learn to code more easily than others. But I'd be willing to posit that the vast majority of people could learn to code given enough time and the proper instruction.

<comment><USER11> This StackExchange seems to have a pretty good overview on this very question: [http://programmers.stackexchange.com/questions/163631/has- no...](http://programmers.stackexchange.com/questions/163631/has-not-everyone- can-be-a-programmer-been-studied)

There is a No True Scotsman argument that arives here "Well, if someone later became a programmer, despite failing those tests earlier, then clearly they were skilled at becoming a programmer" blah blah; but it is still an interesting phenomenon. And yes, there will be outliers, of course; and there will be people that gradually mull their brain to change the way it thinks; but, it is still an interesting phenomenon.

I bet we could see this in other fields, too, it's just that programming is presently the hotness.

(edit: added more)

As for elitism. What is elitist about it if that /is/ true? Oh no, Billy can't program, but he's great with cars. Sarah sucks at linked lists, but she has a better understanding of the human body than any of her peers in the ICU. And so on.

</comment></comment><comment><USER24> I am not great at higher level Math (calculus) and I'm good with algebra but I do not think I'd consider those good predictors. I feel like what allows me to program is strong spatial reasoning. Doing a quick google search I found this: [http://www.quora.com/Whats-the-nature-of-the-relationship- if...](http://www.quora.com/Whats-the-nature-of-the-relationship-if-any- between-high-spatial-reasoning-skills-and-programming-aptitude)

Probably just anecdotal but curious to know what others feel about spatial reasoning? I think specially with object oriented programming it is helpful to be able to visualize all of the 'actors' in your head and how they relate/intertwine.

<comment><USER25> I would also agree that spatial reasoning is key to strong programming ability. Most data structures are best understood through spatial reasoning, for example. But I would also say that spatial reasoning is key to mathematical ability. I'm actually surprised that you would consider yourself strong with spatial reasoning but had trouble with calculus. Perhaps you just had a bad teacher or lacked proper motivation?

<comment><USER8> I'm terrible at spatial reasoning but have no problem with formal logic. I'd also like to think I have strong programming ability (of course we don't know how to measure that).

Spatial reasoning is a key mathematical ability for certain classes of problems (a big chunk of calculus as you mention) but helps not at all with another big class of mathematics (set theory for instance).

Finally, to you data structures are best understood via spatial reasoning, but there is nothing actually spatial about data structures so that is probably most likely just your own preference for modeling them.

<comment><USER25> I'm sure my bias plays a role, but I would disagree that there's nothing spatial about data structures. Linked lists, trees, heaps, etc, all have the characteristic property of a geometric interpretation: a natural notion of "distance" inherent in their definitions.

<comment><USER7> Set Theory?

</comment></comment></comment></comment></comment><comment><USER26> What? Where's the correlation? The data looks like a random scatter plot to me. It reminds me of this Physics report from ages ago...

[http://pages.cs.wisc.edu/~kovar/hall.html](http://pages.cs.wisc.edu/~kovar/hall.html)

<comment> mark-r I think you can deduce _some_ correlation just by noting that the upper left and lower right parts of the graphs are relatively empty. Certainly there are statistical tests that would be more concrete. You can see some figures in the bottom right corners, but they're never discussed in the text.

</comment></comment><comment><USER27> An R^2 value of 0.33 does not even come close implying linear correlation.

<comment><USER28> This is the most important comment in this dramatically overwrought thread. The post's own data analysis refutes its hypothesis unambiguously.

</comment></comment><comment><USER29> Basic algerbra is used all the time in programming. It's part of a programmer's fundamental skill set. Of course, somebody who already has that particular skill will definitely have the advantage in a short programming course. It's like starting a 100m sprint with a 3 second head start. It says nothing, however, about who will be the better programmer over the long term. So I don't think their test is a good predictor of programming aptitude.

</comment><comment><USER30> I'll reply to a specific comment already made as a subcomment here, to comment about the larger issues that have come up in several top-level replies in this thread.

 _I don 't think such a hypothesis is awkward but I doubt high IQ as an excellent predictor for an individuals performance in tasks that are not IQ tests. As a layman when it comes to psychology I think IQ measures some things but the way the brain works, no real world task a person does is exactly like those IQ tests._

The interesting blog post submitted here is talking about the bread and butter of "industrial and organizational psychology," namely about how to select individuals for a training program. There are three generations of published research on this topic already, and there is a huge amount of ongoing research on this topic, because organizations all over the world want to figure out how to select successful applicants when there are more applicants than places in school or work programs.

The short answer is that there is a HUGE body of research to show that the single best hiring process you can use for hiring a worker, if you want to get a worker who will perform well on the job, is to use an IQ test for hiring.[1] The long answer is that some other applicant characteristics matter too, of course, but the single best thing to look at in a job applicant is "general mental ability." Work-sample tests are also very good for hiring for specific jobs, and are grossly underused in hiring in the United States.

To the point of the interesting submitted blog post, one always has to be empirical about these issues. The people running the bootcamp so far have found data that suggests that the algebra test they have tried is a bit more revelatory than the IQ test they tried, and less expensive besides. One response to that might be to suggest a test like the Wonderlic test (an inexpensive IQ test designed for company hiring procedures) but in the end, results matter. If empirically at this bootcamp, the algebra test works better than some other selection procedure, it doesn't even really matter why it works, just that it serves the bootcamp's purpose of identifying successful students from among multiple applicants. The data set is still small. I am very glad that the blog post includes a scatterplot of the data. More bivariate data should be shown that way, in blog posts on dozens of topics.

[1] My FAQ post on company hiring procedures, which I am still revising to put on my personal website after composing it for Hacker News, provides references for this and some commentary on legal issues in hiring.

[https://news.ycombinator.com/item?id=4613413#up_4613543](https://news.ycombinator.com/item?id=4613413#up_4613543)

<comment><USER31>
      there is a HUGE body of research to show that the
      single best hiring process you can use for hiring
      a worker

The best process, assuming you have to use a single process for every job in the world? Or the best process even when hiring for a specific role?

I can understand IQ being the best choice if you had to judge poets, plumbers, town planners, golf instructors, programmers, salespeople and warehouse workers using the same process. But surely if you're exclusively hiring for one of those roles, you'd want to test their domain-specific knowledge?

<comment><USER32> As was written above:

> Work-sample tests are also very good for hiring for specific jobs, and are > grossly underused in hiring in the United States.

<comment><USER31> But isn't essentially all hiring for a specific job?

<comment><USER30> Industrial and organizational psychologists have researched this issue, with hundreds of studies spanning most different kinds of jobs in most developed countries now published. A work-sample test is especially strong for spotting people who need to do something right away after they are hired. For any worker who may need to learn new things on the job--and that is a lot of different kinds of workers, in a lot of different industries, and almost all managers--a "general mental ability" test adds to the predictive validity of selection applicants who will do well on the job over time as industry conditions and market pressures and technologies change.

</comment></comment></comment></comment></comment><comment><USER33> I can't dispute the author's statistics, after all, they're just a function of the data. But looking at the first graph, it seems like a generous interpretation of "predict." The anticipated signal-to-noise for any individual student looks like it would be pretty poor.

One other thought occurs to me. Would the same algebra test produce similar correlations with courses such as English and History, when adjusted for the differences in overall pass rates for those subjects?

It seems odd that something as interesting as programming isn't introduced until college. That seems like accepting students as music majors, who have never played music before. If I had my druthers, computation and simplistic programming would be part of the mainstream K-12 curriculum.

</comment><comment><USER34> >It's fairly common for incoming Computer Science majors to ask the question, "Why do I have to learn all this math if I just want to learn to program?"

Well, there's the reason you have a high drop-out rate in CS. People don't know what it is! Computer Science is not a vocational program. Computer Science is not computer programming.

If someone had talked to these kids asking "Why do I have to learn all this math if I just want to learn to program?" and told them "You don't have to learn all this math if you just want to learn to program" before they became CS majors, then they might not have become a CS major in the first place.

<comment><USER35> And, likely, some good computer scientists would be lost to the world. You should also ask them why they want to learn programming. Many of them will answer they want to become programmers, while they do not have a clear picture of what that entails (it is not code writing all the time, most programmers do not write games in languages they chose, a lot, despite the fact that it is a job where all workers can automate repetitive jobs, a lot of the work is repetitive, etc)

Maybe, once they realize what is the difference between programming and computer science, they prefer computer science. Problem is you cannot learn them the difference in a few weeks; it takes years to sink in.

So, what do you let them do in the mean time? Waiting is a waste of the years in which learning is easiest for them. So, do we let some grown-up decide who likely will make a good computer scientist, or do we let many more start on that trajectory and see how far they get?

I think the latter is the better choice, if we also provide smooth ways to move from one to he other.

[slightly related: I once read a teacher in a nursing school state: _" when they come in, all the boys want to ride an ambulance, and all the girls want to work with kids. We have to work a bit on that in the first year"_]

</comment></comment><comment><USER36> Most programming jobs involve a lot of algebra. You have variables, you do arithmetic to those variables, you apply functions. It's not a great surprise to me that if you are good at high school algebra, you can probably learn how to program.

You might not be a great programmer, but you'll be able to do it.

<comment><USER37> An algebra is just a system of rules.

Being good at number rules (school algebra) does not have much to do with being good at state rules (code algebra).

I'd say there's more correlation between _functional_ programming and school algebra, if anything.

<comment><USER3> Being good at a set of abstract formal rules is probably at least _some kind_ of indicator that you'll be good at another set of abstract formal rules.

<comment><USER37> Having recently taken a battery of psychological tests that measure several different cognitive functions, I am one living example that that is not the case.

<comment><USER3> How can you be an example that what I said "is not the case"? Are you saying that because _you_ are not similarly good in two different sets of abstract formal systems, that this isn't a good indicator _in general_?

</comment></comment></comment></comment></comment><comment><USER38> Lot of people in here offering cheap opinions, while mgirdley's team has done the actual work. They're not saying that the kinda of algebra test they're proposing is foolpoof, perfect, subjectivity-free, or even the best way of testing for programming aptitude.

What they _are_ saying is that the test is an efficient, effective way to do it, with better ROI than IQ tests.

It doesn't actually matter _why_ that's the case, though Animats' suggestion seems plausible: "From the test questions, this isn't an "algebra test". It's a word problem decoding test. That's appropriate to programming, where you have to go from an informal specification of the problem to a formal one."

</comment><comment><USER39> I think that many people have difficulty learning to code in college because many of them aren't that enthusiastic about it. At least anecdotally, many people at my school are in computer science because that's where the zeitgeist is. If it was the eighties they'd be getting ready for law school.

I think that people would do much better in intro CS classes if we could get rid of some of the hype around programming and tech in general, and treat it like other courses. That way, far more of the students would be genuinely interested in the subject.

</comment><comment><USER40> I'm very good at Algebraic math. But I don't think an algebraic test will show programming aptitude. While algebraic and calculus analysis are a form of problem solving that works incredibly well. It is by no means the fastest, or most eloquent way of solving a problem. Its just a single tool that a problem solver can use.

The main thing I fall back on is Heron's Problem. The classic algebraic/analytical solution is to find the local minimum of a function. Which works, this method isn't flashy yet completely functional. It requires no insight, just mentally vomiting something you learned in high school/college.

The geometric solution is far simpler, and offers insights into the foundation of trigonometry. Its really so simple and eloquent you feel like an brutish idiot doing a long form analysis.

I offer this because tools are merely tools, and math supplies many tools. You wouldn't hire a finish carpenter just based on his/her ability to swing a sledge hammer would you? I mean s/he will have to swing a hammer, but will it have to be a sledge hammer? Will they have to use a nail gun? Screw driver? I hope they are proficient in all of these tools, and since I'm outsourcing my time to them, I hope they know which tool to use at which time.

</comment><comment><USER41> The correlation doesn't seem particularly strong, but the dependent variable here isn't right. It's a stack ranking that's forced to a normal distribution. A normal distribution might be appropriate if they randomly selected US citizens to join the program, but they don't. Students self-select to apply and they reject the bottom 66% of applicants. The resulting talent profile is far from being normally distributed.

</comment><comment><USER42> You can correlate most anything with most anything. I'm not saying don't try, just to don't give correlations much credence in and of themselves. Thinking globally, what are the odds a coincidence doesn't happen? And when you exclude outliers, you may be excluding the most profound subjects, just as when you include non-outliers, the subjects may not be able to generalize outside the system of measurement.

</comment><comment><USER43> > Despite hours of studying and tutoring, most of these underperforming > students struggle with, and many ultimately give up on, programming as a > career

They should follow the lead of those who figure out earlier they're not cut out for programming: embellish the CV with fake study, and go straight into the workforce as a programmer. Or they could get transferred into programming from some user department pitching to bring a "valuable user perspective" to IT. Or grease up some IT manager after-hours who'll bring them in as contractor with "special skills not readily available in the labor market" to bypass the usual HR checks and aptitude filters. Or if they're not of the same ethnicity as the HR personnel, send in a double to sit the aptitude test for them, knowing HR staff don't check applicant ID's too closely because they know no-one's going to make it through to an IT interview if they do. Most HR staff and IT managers just want the staff count up, they don't care whether they're productive or detrimental to the projects. If they have staff they have people to blame.

</comment><comment><USER44> So I guess the real underlying message they are trying to say is, if a student can't pass an algebra test, they probably can't learn to program, so don't even bother trying to teach it to them. A more generalized form of the hypothesis is that: most people can't learn how to program.

Both forms of the hypothesis are pretty easy to refute and have already been refuted. See [http://code.org](http://code.org) and [http://madewithcode.com](http://madewithcode.com) for example. I just taught 2nd graders programming yesterday who don't even know how to divide, let alone any algebra.

And of course, there's always the radical idea that maybe you could actually teach them some algebra skills in the context of programming tasks. Just like some calculus students may need some remedial instruction and support.

Luckily, there's a whole field of research with several articles on this very topic. The field is called computer science education. See SIGCSE, for example: [http://www.sigcse.org/](http://www.sigcse.org/)

In fact, the field has already researched and debated this issue before, as well. There was a controversial article called "The camel has two humps" in 2006 that made the same claim as this post that a simple aptitude test could predict whether someone could learn how to program or not. The article (which was never even officially published) was later retracted: [http://retractionwatch.com/2014/07/18/the-camel-doesnt- have-...](http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-two- humps-programming-aptitude-test-canned-for-overzealous-conclusion/)

<comment><USER20> I don't think that's the message.

We are focused on making people professional, employable programmers. While I agree that everyone can play with scratch or build a basic webpage, that's different than the programming skills required to be employed in most dev jobs today.

(Codeup CEO here.)

</comment></comment><comment><USER45> An older study suggests :

 _In both genders,performance on Mathematics was found to be the best predictor in programming ability,followed by performance on a spatial test._

[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.110...](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.110.9842&rep=rep1&type=pdf)

</comment><comment><USER46> Surely the confidence bands in the plot aren't 95% confidence intervals...

[http://uhlbcmcbx4a4vt1d.zippykid.netdna-cdn.com/wp- content/u...](http://uhlbcmcbx4a4vt1d.zippykid.netdna-cdn.com/wp- content/uploads/2014/12/898x640xPredictProgrammingAptitude1.png.pagespeed.ic.KzRMOyK9kJ.png)

</comment><comment><USER47> R-Squared of 0.33?? Not a great fit, considering the sample size.

<comment><USER48> An R^2 of 0.33 is a fairly decent correlation for a study involving human subjects. It's obviously not perfect, but the authors are not claiming that it's perfect.

</comment></comment><comment><USER49> How is programming aptitude measured and defined?

<comment><USER20> Codeup CEO here: it's the instructors evaluating the students based on their interactions with then and answering the question: how capable is this person of building quality web applications?

<comment><USER50> That is so subjective that it should be ignored. I've interviewed people who interviewed very well but in practice they failed at basic computer programming concepts and implementations.

<comment><USER8> We simply do not have an objective measure for program quality and thus do not have an objective measure for programming aptitude.

In the face of this problem we can either give up and not try to measure anything, or we can use an obviously subjective measure and understand where the weaknesses are.

</comment></comment></comment></comment><comment><USER51> I'd be interested to see more questions from the test, but from the examples given I'd say s/algebra test/problem solving test/ is in order.

In that light, the findings become less surprising---still interesting though, since we can test math-word-problem-solving ability quite easily with pen and paper. Could this mean my KhanAcademy math achievements are a better hiring signal than my github?

In terms of hiring, it certainly makes more sense for candidates to pass a 1h test rather than expect them to "prove themselves" by solving a week-long coding challenge...

</comment><comment><USER52> [http://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines](http://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines)

<comment><USER53> you're conflating that with graham's submarines, showing a mere correlation, not causation.

</comment></comment><comment><USER54> _we've possibly found a simple method for sorting out the ninja programmers from the less capable programmers_

Can we please stop calling them ninja/rockstar/etc programmers and simply use "professional programmers" or "master developers"? This language is cute when you're 16, I guess, but personally I don't want to be compared to a middle- ages asian hitman for hire.

</comment><comment><USER55> Aptitude tests really annoy me. At least for me, when I was told that I was bad at math, it discouraged me and I didn't pursue it. Later when I was all grown up and decided to go back to school, I really applied myself and it turns out I was pretty good at physics and math, despite my aptitude when I was a teen.

</comment><comment><USER56> I'll only comment on the opening line and the research it points to about the failure rate in intro to Computer Science. The author of the codeup piece immediately jumps to the conclusion that it's an inability on the part of the failing students to be able to learn to program (a detail that the study linked doesn't comment on). However, my first reaction is that if the failure rate is higher than we want, it means we either (1) aren't teaching the class well; or (2) the students are coming in without proper preparation.

Many students coming into an intro to CS class are already programming whizzes, and then there are others who have no experience with programming at all. So, already the instructor is in an impossible situation. Do you bore the promising kids with the major head start, risking losing future good students? Or do you ramp the class up to their speed and risk losing the kids who didn't come in already knowing the material? Obviously, most departments and instructors will, wittingly or not, choose the latter.

</comment><comment><USER57> All of this is predicated on the idea that programming is solving sexy math problems.

Reality is that most programming is taking bits out of one bucket, combining them, and dropping them into some other bucket. It's the digital equivalent of shovel work.

</comment><comment><USER58> "Programming"?

What kind of "programming"?

What "ability"?

Ability to write space-O(my_god * n) sorting algorithms? Ability to duct-tape queries to an ill-documented SOAP webservice and upsert the return into a Your-Boss-Normal-Form database schema? Ability to brutally optimize the runtime of a really hairy numerical analysis algorithm? Ability to design a centralized data pipeline architecture and lead 12 hackers during the implementation and migration? Ability to find the off-the-shelf OSS project that solves the first 50% of the problem instead?

I was watching the news the other day on TV, which is something I almost never do, and there was a segment about the educative value of tablets, smartphones and laptops for teenagers and children. The value of the freely available information on the internet was discussed, along with the quality of free and... not free educative and scientific applications, and the ill effects of such devices on people's attention span, and... That's it.

Example devices included many, many Apple products, a few off-the-shelf Android devices. A Windows machine running MS Word.

Same ideology regarding technology in education: locked-down workstations with user-friendly applications, internet access which blocks every port except for 80 and 443.

A relentless and sustained effort to erase everything but the topmost layer of the IT stack. Locked-down devices. People come to me asking me to remove viruses, to speed up their old XP machines fraught with annoyware. No Windows license, don't want to pay for one, don't want Linux. Computers run on magic, right? How can you know that programming stuff and not be able to remove all that _bad magic_ from my computer. Computer Science students who can't find the slash on their keyboards. People who see computers as a monolithic entity rather than a brittle but transparent stack of conceptually distinct layers. The new generation of systems administrators, can't scp a tar at the other end of the lab.

A teacher spending three hours explaining red-black trees to a class scrolling down 9gag; students, diploma in hand, who aren't entirely sure what's the difference between an array and a hash, who are not sure of what happens when one puts an array in another array, in PHP, after 120 hours spent theoretically writing PHP.

Computer Science students convinced that Linux is 100% not worth learning, in any way, because nobody uses it.

This is how the knowledge economy dies.

<comment><USER59> This is one of the most epic rants I've read on HN in quite a while. Thank you for the comedy, but it's unclear how anything beyond the first couple of paragraphs relates to the discussion here. You're saying that our education system produces ill-prepared CS graduates right? What does that have to do with the correlation between an algebra test and programming aptitude?

<comment><USER58> 1) it was a rant that I needed to make

2) what the exact fuck is "programming aptitude" anyways? The article defines it as "having good grades in a CS program". Which is part of why I needed to rant against CS education.

</comment></comment></comment><comment><USER60> Appreciate the idea behind the article which may have value, but the data types seem ordinal? 1.0-4.0? is that trying to mirror US GPA system. Normalized based on what? p-values are an archaic only useful for MBAs and Med students.

<comment><USER20> We presumed and used a normal distribution for each class.

The numbers were arbitrary. Just what felt easier to understand for the staff.

<comment><USER60> Normality on ordinal scale data. You've done the equivalent calling functions expecting numeric input with ordinal data. [https://en.wikipedia.org/wiki/Ordinal_data](https://en.wikipedia.org/wiki/Ordinal_data)

</comment></comment></comment><comment> m-photonic Don't have the study handy, but measures of working memory such as the OSPAN were found to predict proficiency in a programming course even better than an algebra test that participants also took.

</comment><comment><USER61> It would be interesting to administer these algebra tests to junior/mid/senior level programmers currently in the field.

</comment><comment><USER62> One thing I'm a little uncertain of is the ideology behind these kinds of things, it seems like the primary purpose here is to keep people out of the field.

Also I think those are some pretty weak quantitative results, and good exhibits for argument against p-values.

<comment><USER63> Why do you think the results are quantitatively weak? My first critique is just the small sample size with ~60 students and the tests, which appear to be different between the students.

<comment><USER64> The OP alluded to p-values, and I think this may be relevant:

       https://www.youtube.com/watch?v=5OL1RqHrZQ8

(In short: p-values are pretty much useless as an indicator of "this experiment can be reproduced".)

Not that this necessarily refutes the original article, I just thought it might be relevant to discussion.

<comment><USER48> If you look in the methods, the experiment has been successfully reproduced twice after the initial trial with distinct cohorts of students.

</comment></comment></comment></comment><comment><USER65> Is the complete algebra test available somewhere?

</comment><comment><USER66> no

</comment><comment><USER67> No.

</comment><comment><USER68> I really don't want to sound rude, but this sounds like a classic case of correlation not causality, and I could see the consequences really hurting some people.

I am REALLY terrible at algebra (to the extent that I am borderline LD in math), and I have completed a degree in CS and hold a steady job as a software engineer. And I am definitely not the only one. Ask a room full of developers how many are bad at math, and I guarantee the results will surprise you. On the other hand, I know a plenty of folks I went through school with that were math majors so good at algebra they could do full page derivations piss drunk without at hitch. And yet, they would take an intro java course and be totally lost. If they didn't get a java intro class, how do you think they would have done with something as algorithmic as an assembly language, a functional language, or understanding the nuts and bolts like Turing machines and automata?

Algorithmic thinking is definitely an important part of programming, but it is just that, only a part. And quite a few types of development don't emphasize that sort of thinking. I could perhaps see this being a PARTIAL solution for areas where one would be doing a lot of functional programming, but the vast majority of the job market these days is still OOP.

This could really quash the job prospects of programmers who are perfectly capable of writing quality code but are poor with algebra.

<comment><USER69> I don't think the author claimed causality. He's interested in prediction, for which correlation is perfectly well-suited.

Also, nobody is claiming that the correlation is perfect. You can perfectly well see outliers in his graphs, but outliers don't disprove the correlation.

<comment><USER68> Fair point, but showing these graphs complete with the outliers gives a very poor platform to base handing out algebra tests in interviews without establishing causality.

<comment><USER70> > very poor platform to base handing out algebra tests in interviews without > establishing causality

Why?

It probably shouldn't be your only criterion, but if it has a high correlation, why wouldn't that be sufficient for handing out algebra tests?

A high correlation corresponds to predictive power, even if it's not a causal relationship.

<comment><USER71> I think the point being made is that there are probably predictors which have many orders of magnitude more predictive power (e.g. work experience, education, interview questions, programming exercise, available source code, etc.).

The male gender is probably correlated to programming ability as well due to the fact that there are more male programmers but it's not a very useful predictor.

<comment><USER72> Predictors for a school to apply? I wouldn't bet on it. None of your suggestions seem fit.

Also, for a job it's probably a better predictor than a resume.

<comment><USER71> > Predictors for a school to apply?

First, it was suggested that this test should be used for programming job interviews. Second, why would a school who teaches programming care if students had programming ability? If you answer it is because the school wants to maintain a reputation of producing good programmers (hence adding value to the students' resumes), it contradicts your statement that this test is a better predictor than a resume. Otherwise, people would just study algebra instead of going to that school.

<comment><USER72> The author uses it as a predictor for acceptance at a school.

For the way, he was around the thread explaining that he can train a limited number of people, and that some of them not learning is wasteful and uninspiring.</comment></comment></comment></comment></comment></comment></comment></comment>


Towards In-Baggage Suspicious Object Detection Using Commodity WiFi [pdf] - <AUTHOR> http://www.winlab.rutgers.edu/~yychen/papers/Towards%20In%20baggage%20Suspicious%20Object%20Detection%20Using%20Commodity%20WiFi.pdf <comment><USER2> _In particular, to identify different materials, we exploit the WiFi signals transmitting through or bypassing the object, which result in different characteristics (i.e., absorption, refraction and reflection) in the CSI complex values from antennas and their differences. Additionally, we extract the signal reflected by the object from CSI to estimate its shape (e.g., width and height) or volume based on the finding that the strength of the reflected signal is proportional to the reflection area of the object._

Wow, can I do this at home?</comment>


A Random Walk Through Ada (2014) - <AUTHOR> http://cowlark.com/2014-04-27-ada/index.html <comment><USER2> Every time I see something on Ada, it seems like a really nice language. Easy to read, easy to write, performance seems to be there with C++, easy (?) to interface with C, multi-threading seems to be somewhat easy too...

So, what's the deal, where's the catch? Why people aren't jumping on it like they do with, I don't know, Rust?

<comment><USER3> It doesn't have that novelty factor. One could ask similar questions about D, which has for a long time positioned itself as a friendlier C++, but hasn't had any of the buzz that Rust or Go or Nim, etc have garnered.

<comment><USER2> A bit tangential, but I did (heavily so) jumped into D before D2 and kind of got burned with that. I married D1 which was more in-line with "a better C" and then everyone decided D2 was the way to go, which was more "a better C++". It was to be expected though since language was in flux a lot at the time.

Ada is a stable language though. I get what goatlover and Avshalom here are talking about here. That it's not fashionable (anymore). If we remove ourselves from that, are there any specific technical reasons why Ada hasn't been picked up by, let's say, C++ programmers? That is, audience that needs performance, yet also a nicer and safer language.

With Lisp(s) there was a long period of basically having to pay for a good implementation and runtime deployments to Franz for Allegro if you wanted to do something well on desktop. I recall only Nichimen with Mirai and Nendo doing it, and it was fabulous. Makes you think about what would happen if tooling was free at the time, or at least more affordable.

From everything I've seen, so far, Ada seems to be technically ready language to do game development, where probably most of language-curious crowd lives these days. I'm not sure about mobile support though (gcc on Android or whatever it is on iOS).

Every now and then I take a week of spare/hobby time and endeavour into new and weird technical spaces. Maybe, my next one will be in Ada space.

<comment><USER4> Lisp on Windows has a long tradition, but all useful implementations with platform integration and good GUI support for it were and still are commercial.

Corman CL. Cheap. Native. Abandoned and now open source / free.

Golden Common Lisp. mid-price, lots of functionality. No longer competitive.

Procyon CL. Expensive. Bought by Franz and taken from the market and used to develop a first Allegro CL for Windows offering.

LispWorks. Expensive.

Allegro CL: Expensive. Lots of functionality. Nowadays a merge of the former Windows and Unix versions.

There are free ones like Clozure CL, GCL, SBCL. But most of them lack platform integration.

Btw., Nendo was written in C++.

<comment><USER2> I didn't know Nendo was C++. Somehow I thought since Mirai was Allegro that Nendo was also. TIL! Mirai was so ahead of its time, and I remember people were boasting Lisp had a lot to do with it (small team, big features and lots of them!). Of course, team was amazing - that was the primary reason.

SBCL kind of got better over the years though.

<comment><USER4> Nendo was originally developed in C++ for the Nintendo 64 system. It wasn't released there, but as a Wintel application.

> Mirai was so ahead of its time.

Mirai is actually based on earlier code: N-World from Nichimen, which was a port of S-Graphics of Symbolics, which was written in the early 1980s.

[http://lispm.de/symbolics-3/symbolics-3.html](http://lispm.de/symbolics-3/symbolics-3.html)

> SBCL kind of got better over the years though.

If you look at CL Windows applications, they are either written in a custom Common Lisp implementation or Allegro CL / LispWorks.

Free software / open source Lisp has never supported Windows very well. Most of the time the Lisp was running without much integration and very little support for the Microsoft eco-system. Companies tried to target the market of Windows users. Open source / free software Lisp developers were never particular interested in Windows for their own use

</comment></comment></comment></comment></comment></comment><comment><USER5> (Reposting from lobste.rs)

It's a shame there wasn't more information on the tools Ada provides for concurrency - I haven't seen another language which gives you as much flexibility and power to write safe concurrent code. It's much more heavy weight than some other languages in some ways, but gives you very strong guarantees you don't get elsewhere.

It also would've been nice to talk a bit about some of the features which make it particularly well suited for embedded systems:

* things like the ravenscare profile which give you a safe subset of the language using statically allocated never terminating threads

* the ability to select the scheduling algorithm (including ones with task priorities which are used to avoid the possibility of deadlocks completely - see the priority ceiling protocol for more details)

* the ability to address specific memory locations being built into the language, not just casting ints to pointers like you would in C

* full control over how elements on records are laid out, including endianness, this is essential with the previous feature when you're dealing with memory mapped IO registers for controlling hardware

* the ability to define that certain data types can only be used at certain specific memory locations (see [https://cs.anu.edu.au/courses/comp4330/Lectures/RTES-03%20In...](https://cs.anu.edu.au/courses/comp4330/Lectures/RTES-03%20Interfaces.01.pdf) "pages" 314 - 332)

For anyone who's had to write code to interface with hardware on micro controllers, they're probably wetting themselves with excitement by now, doing this in C relies on the compiler doing what you think it will, which there's no guarantee of because the ability to use many of the features is implementation defined, if defined at all.

ANU's COMP4330, which these slides come from, is an excellent resource for learning more about both Ada and real time systems in general: [https://cs.anu.edu.au/courses/comp4330/1-Lectures- Contents.h...](https://cs.anu.edu.au/courses/comp4330/1-Lectures- Contents.html)

<comment><USER6> A really nice book on the topic is "Concurrent and Real-Time Programming in Ada".

<comment><USER7> Another one is "High Integrity Software: The SPARK Approach to Safety and Security".

</comment></comment></comment><comment><USER8> Another cool thing in Ada world: SPARK.

[https://en.wikipedia.org/wiki/SPARK_(programming_language)](https://en.wikipedia.org/wiki/SPARK_\(programming_language\))

</comment><comment> ar-nelson This really makes me want to try Ada, if I could find a good fit for its low- level features (game development, maybe?)

The biggest thing that would make it annoying to write in is the verbose syntax--it's like the worst of Java, VB, and Standard ML. And yet, that same verbosity makes it kind of nice to read.

I think there's an inherent friction between "write-friendly" and "read- friendly" languages. It would be nice to have a language with a few different "dialects" (the way Ruby often has several equivalent ways to write certain constructs), such that a programmer could write the initial code in an extremely terse language, then run a formatter and get back a beautifully- formatted, much more verbose form of the same code.

<comment><USER2> Verbosity leaves me on the edge as well. But then I look at the promise of what Ada brings. It would mean trading in a bit more writing time for a possibility of a lot less debugging time.

<comment><USER9> Anecdotally, it's vastly reduced debugging time in my own personal projects. My most notable problems have all turned out to be the result of things like using the wrong input, or misunderstanding some external spec. At first it was actually a little unnerving that things weren't breaking, but with time I've come to expect that. I came from C++, where I always joked that if things appeared to work correctly the first time around something serious was broken.

It's not free though. You do end up spending more time getting the compiler to actually accept your code. With time I've gotten much better at this, although at first it could be quite a fight. But a compiler error is so much nicer than a bug, so I do think it's very worth it.

And when it comes to coding, how long it takes to type is pretty irrelevant as long as you can type half decently. Typing the code is really the easiest part.

</comment></comment></comment><comment><USER10> I haven't learned Ada yet, but I've heard praise and eulogies from HN a few times it has been mentioned in recent years.

At first pass, it appears to have a lot of unnecessary keywords, and the semicolon terminator (at first pass) seems arbitrarily required.

Is it really that great of a language? What does it provide that FORTRAN, C, and/or Julia don't provide in terms of speed, or Python in terms of readability?

<comment><USER11> The advantage of Ada is that it's meant to be an incredibly safe language.

That's why blocks have to end with the block type (e.g. if...end if)

This is to ensure that you haven't accidentally nested things wrong. It also has runtime bounds checking for arrays, ranged variables, no multi-line comments, safer pointer handling etc.

At the time, it was definitely one of the safest languages to use.

Fortran is a real pain to read or write, and is designed more scientific computing than applications. C is terribly unsafe (hence why buffer overflows are the most common security vulnerability).

</comment></comment><comment><USER12> Quick note others may find useful. I found this offputting: the idiomatic mixture of upper/lower case and underscores in the syntax. Unnecessary cognitive overload. I've just done a quick test with current gnat and this works: you can just write everything in lower-case.

</comment><comment><USER13> this is a really good feature that i've never seen elsewhere:

> For extra robustness you can name blocks and use the name when closing them. > In the above example, I could end the procedure with end Program.

</comment><comment><USER14> So, the question I have is:

What is the OSS compiler for Ada that works on Linux and OS X?

<comment><USER2> I'm just going through the motions. GCC has FSF GNAT which I wan't on macOS, but in order to compile gcc with ada support you need to have GNAT already.

So, what I'm doing now is: download GPL GNAT from Ada Core here: [http://libre.adacore.com/download/](http://libre.adacore.com/download/) and build your gcc, as usual, with ada support from that. Then you can use FSF GNAT gcc. You can even compile again with FSF gcc to make it double sure it's working.

Apparently, FSF GNAT version is what you want in order to make commercial software since it has a runtime license, which Ada Core version doesn't. You would have to pay for Pro version. Someone correct me if I'm wrong.

</comment></comment><comment><USER15> Needs a 2014 in the title.

<comment><USER16> Ada 2012 is still the most recent standard.

<comment><USER17> The language is pretty old. I'm not sure it needs a huge amount of extra features. They added full OO support awhile back, although its probably not necessary for a lot of embedded projects. There's a company (Ada Core I think) that keeps their products up to date.

<comment><USER18> Indeed, that company is Ada Core, and their pricing page tells you everything you need to know about why you're not using Ada:

""" All of our products are available as annual subscriptions... For general inquiries regarding our products and solutions or to learn how you can apply for an evaluation, please contact firstname.lastname@example.com.

Use the following form to receive a price quote. Please fill it out as completely as possible so we can provide you with the most accurate pricing information. """ \-- [http://www.adacore.com/gnatpro/pricing](http://www.adacore.com/gnatpro/pricing)

In other words, standard Enterprise Pricing: "if you have to ask, you can't afford it."

<comment><USER16> Of course on the other hand

      sudo apt-get install gnat</comment></comment></comment></comment></comment>


Engine Yard experiencing serious downtimes - <AUTHOR> http://engineyard.wordpress.com/ <comment><USER2> Hi,

We are very sorry for Friday's downtime on one of our clusters in Sacramento.

We take downtime seriously and we learn from each incident. Yesterday's incident appears to be the result of a software malfunction in 2 or more of 4 switches that handle traffic between a group of servers and their SAN shelves. The switches are from Extreme Networks, which has a good reputation, and they are helping us debug error logs.

Organizationally, we are making changes to reduce the incidence of such problems and to always improve how we deal with them in the future. We're expanding the group that focuses on infrastructure design and management. This group looks at ways to improve our technology (design and vendor choices) and human processes. For instance, one of the top people in that group visited a SAN vendor earlier this week to review their latest offerings.

If you were affected by this downtime, please contact your account manager to discuss service credits. If you don't know your account manager, please send an email to 'email@example.com' and your message will reach them.

Thanks for being our customer, and again, sorry for the downtime. Believe me, when I hear about downtime while on a week off with my dad coming this weekend, it is not pleasant - it actually hurts!

\--- Lance Walley, CEO \--- Engine Yard

</comment><comment><USER3> Disclaimer: My company's an EngineYard customer.

1) In our experience, EngineYard has provided amazing customer service 100% of the time. They helped us debug some very nasty problems with connections, server set-ups, proxies (not EY proxies, proxies that our customers had installed), IE download header craptasticness, etc. It's like having a team of 24/7, very knowledgeable Rails sys admins.

2) The infrastructure they provide is top notch. The database is blazing fast, so's the SAN. Bandwidth is rock-solid. Putting together a similarly performant setup would take weeks of our time - which we'd much rather spend on developing our product.

3) Downtime is inevitable on any host. Anyone who tells you that their data centre will never go down is lying. Whole data centres do go down. UPS's fail. Software issues develop. It's part of the job. If you can't deal with it, don't get into web start-ups. Get this into your head: shit happens. The real question is not whether there is downtime, but how quickly they get things back up.

In this case, they figured out the cause of the failure within an hour and started bringing customer slices back up 20 minutes later. All customers were back up within about 4 hours. I think that's pretty good.

4) If you really can't afford to have any downtime at all, then you set up your site in two separate data centres, with a failover between the two. If you did that, then this issue won't have affected you, except for increasing load a little.

I'm not saying EngineYard are perfect, but for that price, I believe they're the best damn rails host you can find anywhere.

</comment><comment><USER4> We're hosted with EY for one reason: When the shit hits the fan (which it will) - I want an army of rocket scientists at my back figuring out what's up. I have just that and I'm as happy as can be.

</comment><comment><USER5> Signed up with EY last month. Frankly, our experience has been disappointing so far. We haven't gone live yet on our EY slices yet-this makes me nervous as well.

<comment><USER6> What haven't you liked?

</comment></comment><comment><USER7> We just pulled the trigger for EY this week, should be migrating to our "slices" within 7-10 days.

Things like this make me nervous..

</comment><comment><USER8> the blog seems a little light on details, have they discovered the root cause?

<comment><USER9> Hello there. Thought I'd follow up as we have some additional news from our vendor.

The fact that this "should not have happened" doesn't help our customers out, and doesn't make us feel particularly better about the incident we had on Friday.

Just one of our six clusters was affected, but it was a bad day for customers on that cluster, and for that I personally apologize to them.

We're working hard to make sure that this issue is entirely resolved on this, and our other clusters as well, providing Extreme with the core dumps they've requested.

Details below:

\</comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>----

08/16/2008 03:53:58.16 <Noti:EPM.wd_warm_reset> Slot-1: Changing to watchdog warm reset mode

08/16/2008 03:09:42.05 <Warn:DM.Warning> Slot-2: Slot-3 FAILED (2) Error on Slot-3

08/16/2008 03:09:38.62 <Warn:DM.Warning> Slot-2: Slot-3 FAILED (1) Error on Slot-3

08/16/2008 03:09:29.23 <Warn:DM.Warning> Slot-1: Slot-3 FAILED (2) Conduit receive error encountered

08/16/2008 03:09:25.17 <Warn:DM.Warning> Slot-1: Slot-3 FAILED (1) Conduit receive error encountered

08/16/2008 03:09:25.17 <Warn:DM.Warning> Slot-1: System Error 0: Conduit receive error encountered

08/16/2008 03:08:22.29 <Warn:DM.Warning> Slot-1: Slot-4 FAILED (1)

08/16/2008 03:08:02.94 <Warn:DM.Warning> Slot-1: Slot-4 FAILED (1)

\</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>----

The above warning messages are caused by "System memory depletion" and "watchdog timer" triggered "restarting slot 3 and 4. After crashed, slot 3 and 4 created "core dump file". We need that files for detail investigation.</comment>


Elon Musk doubles down on universal basic income: 'It's going to be necessary' - <AUTHOR> http://finance.yahoo.com/news/elon-musk-doubles-down-universal-175300665.html <comment><USER2> Andrew Ng has a view on this. People should be paid to get learn:

[https://youtu.be/21EiKfQYZXc?t=1h1m57s](https://youtu.be/21EiKfQYZXc?t=1h1m57s)</comment>


Singapore scientists teleport lemonade over the internet - <AUTHOR> https://www.cnet.com/news/teleport-lemonade-over-the-internet-singapore-scientists/ <comment><USER2> "Scientists communicate sour taste over the internet" is a more accurate and less bait-y title.

</comment><comment><USER3> Could this cut down on sweeteners?</comment>


SixTripz – 6 travel ideas, real quick - <AUTHOR> http://sixtripz.com/ <comment><AUTHOR> SixTripz taps into the destinations we have added over the years at travelindicator.com, (presently over 900) to offer 6 travel ideas.

No more, no less...

Give it a spin.</comment>


Google Refused to Even Show Up to Senate Hearing on Election Meddling - <AUTHOR> https://medium.com/futuresin/the-senate-select-committee-on-intelligence-left-a-chair-empty-after-google-executives-declined-5965cf1bdbb3 <comment><USER2> Why would they bother?

They control the information flow for most of the world.

They know every little secret place you've been.

They know every website you shouldn't have visited.

They know every text, call, and email you've ever sent.

Besides they're lobbyist paid for the VIP service.</comment>


Switching from the Facebook API to the Google+ API - <AUTHOR> https://developers.google.com/+/best-practices/facebook

<comment><AUTHOR> I wrote this when I was an intern over the summer, questions and comments obviously welcome.</comment>


Arachni free, open-source web vulnerability scanner now available for Windows - <AUTHOR> http://arachni-scanner.com/blog/windows-package-and-rest-service-now-in-the-nightlies/ <comment><AUTHOR> I am finding that Arachni is an amazing learning tool! One of its best features is how well the vulnerabilities are documented! Just an example:

\---

Cookie set for parent domain in Cookie,

at [http://www.domain.com/sitemap.xml](http://www.domain.com/sitemap.xml) – found by [http://www.domain.com/sitemap.xml](http://www.domain.com/sitemap.xml) (Default profile).

Informational severity.

HTTP by itself is a stateless protocol. Therefore the server is unable to determine which requests are performed by which client, and which clients are authenticated or unauthenticated.

The use of HTTP cookies within the headers, allows a web server to identify each individual client and can therefore determine which clients hold valid authentication, from those that do not. These are known as session cookies.

When a cookie is set by the server (sent the header of an HTTP response) there are several flags that can be set to configure the properties of the cookie and how it is to be handled by the browser.

One of these flags represents the host, or domain. for which the cookie can be used.

When the cookie is set for the parent domain, rather than the host, this could indicate that the same cookie could be used to access other hosts within that domain. While there are many legitimate reasons for this, it could also be misconfiguration expanding the possible surface of attacks.

[link to CVE (Common Vulnerabilities and Exposures website)]

\---</comment>


On finding a technical co-founder - <AUTHOR> http://chintanparikh.github.io/blog/2014/01/04/on-finding-a-technical-co-founder/

<comment><USER3> On the other side, I recently wrote a blogpost about finding a technical co- founder: [http://www.seedcamp.com/2013/12/guest-post-how-i-finally- fou...](http://www.seedcamp.com/2013/12/guest-post-how-i-finally-found-a- technical-co-founder-and-got-accepted-to-seedcamp-by-steven-renwick.html)

I did not learn to code and I did find someone I did not previously know (from Palantir too!).

<comment><AUTHOR> Love it. I think things definitely change once you're out of college.

</comment></comment><comment><USER4> Definitely agree, if you're in college and thinking about being an entrepreneur, take some computer science classes. Even if you don't learn web dev specifically, you'll learn the principles and meet some technical people.

<comment><USER5> I think an important point to note is that it would also significantly improve one's ability to assess the magnitude of a project. See [http://martingryner.com/no-i-wont-be-your-technical-co- found...](http://martingryner.com/no-i-wont-be-your-technical-co-founder/) (I'm aware this piece was one of many inspirations for the original post).

</comment></comment><comment><USER6> Logical advice, good post. One nitpick:

>I'm not sure how easy this skill is to develop, and I'd argue it's almost certainly harder to develop than technical ability.

Perhaps where technical ability is narrowly defined as general web development. Just like sales and dealing with people, technical ability delves down into its own rabbit hole that can take years (decades) to master.

</comment><comment><USER7> good call. def agree with many of the points presented. Having listened to many college startup pitches, I'm bias towards founders who can at least code/build their MVP. It puts things into more realistic perspective - <USER2> least they know how difficult (or easy?) it is to do what they want to do.

</comment><comment><USER8> Why do so many force the idea of taking on a co-founder?

<comment><USER9> I agree. Have a look at this video for proof of the fallacy: [http://www.youtube.com/watch?v=u8qgehH3kEQ](http://www.youtube.com/watch?v=u8qgehH3kEQ)

<comment><USER8> Yes, being a solo-founder is a total mind-f __* but, the journey is well worth it! Don 't give up no matter what anyone else says or suggests. Break free from social-conditioning and group-think. There really are no rules!

</comment></comment></comment><comment><USER10> Techical co-founder for what? Is this for a web/mobile startup. It all depends on your startup's industry.</comment>


Safe to use co-working space? - <AUTHOR> My co-working space has remained open and I'm considering going for a brief break from cabin fever. Even before Coronavirus hit, there was no problem grabbing a desk 6+ feet from others. Since even fewer members are going these days, I feel it could be OK if I just simply wipe down the desk and wash my hands regularly.<p>What would you do? Thanks. <comment><USER2> Stay away. There are still many ways to interact with people and surfaces they have touched.

If you feel like leaving your apartment, go outside, not into an office.

</comment><comment><USER3> NO!!!! Go outside. Not to an office. It's not safe.</comment>