Netlify, a sevice for quickly rolling out static websites, raises $2.1M - <AUTHOR> https://techcrunch.com/2016/08/17/netlify-a-sevice-for-quickly-rolling-out-static-websites-raises-2-1m/ <comment><USER2> Pretty cool. We were recently discussing how a service like this could exist. Excited to try it out.

One suggestion - on the Signup page, you ask for a lot of permissions right away from Github. I think it would be better if you just collected profile/email address and then when I started exploring a little more and working to get my first site deployed, only then ask for the additional permissions.

<comment><USER3> Thanks!

Signup permissions is definitely something we need to work on more. We optimized them at the beginning to give people the best experience possible, but we'll definitely iterate to allow using Netlify with less permissions. We just need to find the right workflow to still keep it as simple and powerful as possible.

<comment><USER2> Just to follow up. I have a hugo site that has a pretty custom directory layout. I managed to sign up and get it provisioned with letsencrypt already. Definitely cool.

</comment></comment></comment><comment><USER4> I think I'm not understanding what it does, but why does it cost $9/mo/site to serve some static content? Isn't that basically free nowadays?

I guess my question is "what does Netlify do that GitHub pages doesn't"?

<comment><USER3> Netlify CTO here (so I'm very biased).

These are some things that you can do with our Pages tier _FREE_ , that you cannot do with GH Pages:

\- We don't restrict people to only one static site generator, like Jekyll. You have use whatever with our Continuous Deployment.

\- Automatic rollbacks at the CDN level. If you push a broken site, you don't need to stress about fixing the issue, pushing again, and waiting until the changes are published again. We have a big button that says "Rollback". Clicking that, our CDN automatically purges your site and promotes the good version you want. After that, you can spend as much time as you want writing a proper fix.

\- Deploy Previews for Pull Requests hosted live. We build each pull request and put it in a subdomain so you can collaborate building sites much easily. Blog post announcement: [https://www.netlify.com/blog/2016/07/20/introducing- deploy-p...](https://www.netlify.com/blog/2016/07/20/introducing-deploy- previews-in-netlify/)

\- Automatic provisioning and renewals of Let's Encrypt certificates for custom domains. If you have a custom domain, we do that for you, you don't have to worry about anything.

\- Free custom domains, you have to have a paid subscription with GitHub if you want to use your own domain.

As I said again, those things are FREE with our initial plan, $0.

Happy to answer more questions if you have more.

<comment><USER5> Edit: I know the parent comments are comparing to Github. I thought that it would be useful to let people know about Gitlab's offering.

It appears Gitlab provides support for custom domains on their hosted Gitlab solution as well as support for different site generators via their Gitlab CI solution. It is probably not as easy to use as Netlify though.

[http://docs.gitlab.com/ee/pages/README.html#gitlab-pages- on-...](http://docs.gitlab.com/ee/pages/README.html#gitlab-pages-on-gitlabcom)

<comment><USER4> I love Gitlab and use it for all my projects, I should try their Pages at some point (although I don't use GH pages either, it was just the offering I was more familiar with from hearing about it).

EDIT: Just tried it, I can't believe how easy it was. Literally just add a CI task that outputs a "pages" artifact.

</comment></comment></comment></comment><comment><USER6> Congrats! And thanks for adding GitLab integration [https://www.netlify.com/blog/2016/07/13/gitlab- integration](https://www.netlify.com/blog/2016/07/13/gitlab-integration)

<comment><USER3> Thanks Sid!

It was actually very easy to integrate. Thanks for making the API so easy to use.

<comment><USER6> You're welcome, glad to hear that.

</comment></comment></comment><comment><USER7> We use them for our middleman based website. They are fantastic from a performance and support standpoint.

</comment><comment><USER8> Doesn't Firebase hosting do this already - SSL, CDN, push from the command- line - for free?

Pubstorm, too.

<comment><USER9> Don't forget [https://zeit.co/now](https://zeit.co/now)

The biggest difference seems to be the caching

<comment><USER10> Zeit is an awesome product that I use as well for my node APIs in tandem with my Static stuff on Netlify. I wish the deploy limits were a bit higher in the free plan, 20 is so low :(

however Netlify has no limits on builds :)

</comment></comment></comment><comment><USER11> At first I didn't understand the difference between Netlify vs. Jekyll / Hugo + s3_website [1] + S3/CloudFront + git. Admittedly, (1) the OP does a terrible job differentiating the two, and (2) there's significant overlap. Netlify is built for "dynamic" static websites, or rather JavaScript applications (whether they be single-page or not, it doesn't matter). It serves up a static page, and the JS and APIs do the rest.

So, for anyone who wants a basic breakdown between Netlify's features, and Jekyll + s3_website + S3/CloudFront + git/GitHub, here's the list of things BOTH support:

\- Continuous Deployment

\- Custom Domains / Domain Redirects / Domain Aliases

\- Domain Redirects

\- SSL (letsencrypt-s3front helps here [2])

\- Redirects / Reverse Proxying (s3_website helps here with x-amz-redirect- location header [3])

\- Headers / Custom Headers / Basic Auth

\- Versioning and Rollbacks (handled with git)

Here's the list of things ONLY Netlify supports:

\- GeoIP / language-based redirects (on their Enterprise Plan for $1,000/month)

\- Form submissions [4]

\- Analytics snippet injection [5] (albeit a little unnecessary for most developers)

\- Atomic deploys [6]

\- Prerending [7] (one of the most important and useful features)

Please, correct anything that's wrong.

Netlify's killer feature, for me, looks like prerending: rendering JS pages with a headless browser to help with SEO, with no work on the developer's end, is awesome! However, Netlify strikes me as far too expensive at $9/$49/$399/$1k per month. Especially with developers as their target market. That's too much for what little extra features it does offer.

Here's to hoping they can continue to differentiate themselves more.

[1]: [https://github.com/laurilehmijoki/s3_website](https://github.com/laurilehmijoki/s3_website)

[2]: [https://github.com/dlapiduz/letsencrypt-s3front](https://github.com/dlapiduz/letsencrypt-s3front)

[3]: [http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to- page-r...](http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page- redirect.html)

[4]: [https://www.netlify.com/docs/form- handling](https://www.netlify.com/docs/form-handling)

[5]: [https://www.netlify.com/docs/inject-analytics- snippets](https://www.netlify.com/docs/inject-analytics-snippets)

[6]: [https://www.netlify.com/docs/versioning-and- rollbacks](https://www.netlify.com/docs/versioning-and-rollbacks)

[7]: [https://www.netlify.com/docs/prerendering](https://www.netlify.com/docs/prerendering)

EDIT: formatting

<comment><USER12> We have a pretty extensive comparison here of S3 vs Netlify:

[https://www.netlify.com/blog/2015/03/06/comparing-netlify- an...](https://www.netlify.com/blog/2015/03/06/comparing-netlify-and-s3)

You're completely forgetting Continuous deployment in your comparison, which is a pretty big part of the modern static workflow. This includes things like pushing branches to different URLs, having a way to previewing pull requests, caching dependencies between runs, etc, etc... It's a huge part of our service.

Apart from that, if you ever work with static publishing and a CDN, and actually tried making the CDN cache your HTML assets, you'll instantly run into problems with instant cache invalidation and atomic deploys. You'll never run into these issues with netlify.

Rollbacks are possible with git, but previewing any version you've any deployed at any time are not something you can do.

Even basic things, like getting both your naked domain and the wwww domain to work correctly will often take developer time on that platform (how much do you bill your time at? Hopefully more than $49/month).

As for cost - our free plan is super generous and cover pretty much every thing you'll get with the alternative setup you mention. And for personal projects or open source projects we even give away our Pro plan for free!

The people that pay for our plans are typically not developers but their clients or employers who care about the best performance, highest uptime, and fastest speed of development.

<comment><USER11> Appreciate you taking the time to respond. It seems like you're targeting two different markets (developers & their clients/employers), and having to construct two different product stories. Of course, what appeals to the developer market doesn't necessarily appeal to their client/employers and vice versa.

I'm speaking as a freelance developer that's firmly in your target market, charging well in excess of $49/month, and delivering three static websites in the past month for clients, one being the University of Leiden. I understand very well what you're trying to solve, and pointed out the places where your product is superior.

Right now, it feels like your product is heavily slanted towards developers. And it feels like that's who you're asking to pay for the service. My clients couldn't careless about API proxying, deeper Git integration, or auto-building any branch to unique deploy URLs, even if that makes sense to me as a developer. They're not going to be working with those things. They wouldn't accept me saddling a $49/month charge upon them AFTER I've delivered the project and all they want to do is run a one-off script to deploy the website for minor updates to content over the next 3-5 years.

What I'm saying is, yes, Netlify makes it easier and eliminates servers for pre-rendering and form submissions. That fits the SaaS model. But I think you're missing out on another part of the market: the people willing to pay a one-off license per site for your deployment software, i.e., setup S3/CloudFront, SSL with Let's Encrypt, domain handling, a nice deployment pre- processing pipeline, preview past versions locally in browser, etc. in an automated fashion and then allow them to push updates with one command. That's what my clients want, and that's what I deliver to them. They'd be willing to pay $49, once, for that script (folded into their invoice).

<comment><USER12> If you don't need the features on the $49 dollar plan - why not just set them up with the free plan or the basic plan?

The people that pay for the $49/$349 or $1000 are typically clients with projects that are not simple "static sites". Typically these sites includes content management and requires a build to run everytime and editor triggers a change. They're often .com's for companies that always ends up needing proxying because they have legacy apps behind different URL

Other clients have in-house dev teams and run their main web application on Netlify with constant updates in different branches and pull requests, and Netlify lets them collabarote across these.

Again others just have large global presences and care about having someone to escalate to if there's a problem with a launch, any uptime, certificate, configuration issue or the like.

Those are the one that needs and use our Pro/Global/Enterprise tiers.</comment></comment></comment></comment>


Out of Osama's Death, A Fake Quotation is Born - <AUTHOR> http://www.theatlantic.com/national/archive/2011/05/out-of-osamas-death-a-fake-quotation-is-born/238220/

<comment><USER2> The Mark Twain quotation that has been making the rounds today, "I've never wished a man dead, but I have read some obituaries with great pleasure" also appears to be fake. (That is more to be expected, as Mark Twain is the favorite attribution for newly made-up quotations in English.) I checked Snopes for that one, but it's too new to be on Snopes, I think, and anyway isn't in Google Books either. A response by one of my friends on Facebook to today's flurry of quotes was this status message: "People believe anything they read on the internet if it fits their preconceived notions." -- Thomas Jefferson.

The Atlantic author did some reasonable checking for the purported King quotation. "Searching Martin Luther King Jr. quote pages for the word "enemy" does not turn up this quote, only things that probably wouldn't go over nearly so well, like 'Love is the only force capable of transforming an enemy to a friend.' I'm pretty sure that this quote, too, is fake."

For a book-length work on tracing quotations, which I bought years ago, see The Quote Sleuth.

[http://www.amazon.com/Quote-Sleuth-Manual-Tracer- Quotations/...](http://www.amazon.com/Quote-Sleuth-Manual-Tracer- Quotations/dp/0252016955)

<comment><USER3> I admit to posting that quote on my wall; for same. However, to try and make up for it I did a bit of research. Clarence Darrow is quoted as saying: "I have never killed a man, but I have read many obituaries with great pleasure." Sounds a lot alike?

</comment></comment><comment><USER4> Looks like most of it IS an MLK Jr. quote, just not the first sentence. See, for example, [http://www.quotesstar.com/quotes/r/returning-hate-for- hate-m...](http://www.quotesstar.com/quotes/r/returning-hate-for-hate- multiplies-159261.html)

</comment><comment><USER5> Penn invented the quote, sort of.

First: <https://twitter.com/#!/pennjillette/status/65132242770464769>

Followup: <https://twitter.com/#!/pennjillette/status/65246380024807424>

<comment><USER6> Further, he attributes this site:

[http://www.goodreads.com/author/quotes/23924.Martin_Luther_K...](http://www.goodreads.com/author/quotes/23924.Martin_Luther_King_Jr_)

[Edit] Sorry, no.. He retweets the attribution, and admits the full quote is likely false.

[Edit] Further, here is the user who added this quote to the site.. Err, just 2 hours ago. <http://www.goodreads.com/user/show/5286778-tatyana>

</comment></comment><comment><USER7> Google allows you to search up to a certain date. The results up to April 30th remove much of this latest "resurgence" of the quote, but it's still pretty much saturated with quotes about Bin Laden, a lot of the dates are just wrong and confusing Google.

I still don't see anything definitive attributing the quote to MLK

<http://bit.ly/kC6VIR> <\- Google Search to April 30th.

</comment><comment><USER8> Interesting, but extremely shallow work by the author. You checked some quote sites? That's the extent of the research done for this piece? Not taking into account the idea that they are maybe just misattributing it?

<comment><USER8> I don't understand why this comment was downvoted. The author, in the updated post to this article, said "I was wrong." [http://www.theatlantic.com/national/archive/2011/05/anatomy-...](http://www.theatlantic.com/national/archive/2011/05/anatomy- of-a-fake-quotation/238257/)

Unsurprisingly, it was not maliciously intended, it was just misattributed. As McArdle acknowledges, a facebook user had posted the first sentence, followed by the King quotation in quotations marks. When retweeted, the quotation marks were dropped (apparently to fit Twitter's character limit, according to McArdle).

You might think that its unfair criticism of an author for sharing a quick thought on a blog, or for making a mistake. You would be wrong. This post by McArdle is only one of many instances of her doing extremely poor research/lying in her posts for the Atlantic. An MIT Prof has dedicated pages upon pages to demonstrating how poor of a journalist McArdle is: "... the key point is that McArdle makes a lot of stuff up, and hence is untrustworthy across the board: why should you believe any argument from someone whom, everytime you check closely, gets even the little stuff wrong — and I agree with that."

and "It is now...simple prudence to assume that any fact she presents is, as she puts it, "a hypothetical" unless footnoted and checked."

[http://inversesquare.wordpress.com/2009/10/07/its-not- that-m...](http://inversesquare.wordpress.com/2009/10/07/its-not-that-mcardle- cant-read-its-that-she-cant-wont-think-part-one/)

It should come as no surprise that McArdle has whole hosts of people, entire websites _dedicated to her being fired_. To slack up on McArdle is to tolerate shoddy journalism not based in the facts.

</comment></comment><comment><AUTHOR> These things are fascinating to me. They're like mind-viruses...hacking our belief systems so effectively that they spread with amazing speed and ease, and persist with incredible resilience.

<comment><USER9> You'ce going to love the word "meme", then. <http://en.wikipedia.org/wiki/Meme>

<comment><AUTHOR> I had no idea there was so much work on the subject. Thanks!

<comment><USER10> Astonishingly not mentioned on Wikipedia, is the novel "Snow Crash", which deals with this _exactly_ as a 'mind virus'.

It's also a great work of science fiction in it's own right (predicting Second Life, for example).</comment></comment></comment></comment>


Sex differences in ability tilt in the right tail of cognitive abilities - <AUTHOR> https://www.sciencedirect.com/science/article/pii/S0160289617301241 <comment><USER2> According to the NLRB, citing something like this in a memorandum at someplace like Google is discriminatory "junk science."

<comment><USER3> I would imagine that has a lot to do with what you cite it to support. The conclusions here are weak where innate ability is concerned, yet I suspect that's where you were headed. I can cite studies showing worse outcomes for African Americans for example, but I'd be a deceptive ass if I tried to pawn that of as proof off innate differences.

<comment><USER2> _I can cite studies showing worse outcomes for African Americans for example, but I'd be a deceptive ass if I tried to pawn that of as proof off innate differences._

If one considers studies from around the world, across many cultures, it's pretty clear to me that there's no IQ huge disadvantage to having African genetics. Nigerian immigrants are presently kicking ass and even outdoing Asians. Immigrant from many Caribbean backgrounds do very well. Also cited by myself elsewhere, there's a study that found that the African American children of US servicepeople in Germany was basically the same as their classmates. Whatever's the cause of lowered IQs in underprivileged African American children in the US, it's not genetic.

Historical IQ studies suggest that immigrant groups can raise their average IQs by a lot. Historical studies of such groups also indicate that the degree of group assimilation and participation in society versus group isolation can have huge effects on the wealth of the group. A pattern that arises again and again, are elites of some such groups that keep their group isolated to retain subgroup power. This pattern can cause the same ethnic group to have widely disparate economic success in different parts of the world. (German immigrant communities are a good example of this phenomenon.)

The above is discussed in Thomas Sowell's _Migrations and Cultures_.

<comment><USER4> > If one considers studies from around the world, across many cultures, it's > pretty clear to me that there's no IQ huge disadvantage to having African > genetics. Nigerian immigrants are presently kicking ass and even outdoing > Asians. Immigrant from many Caribbean backgrounds do very well. Also cited > by myself elsewhere, there's a study that found that the African American > children of US servicepeople in Germany was basically the same as their > classmates.

Please share sources.

<comment><USER2> The above is discussed in Thomas Sowell's _Migrations and Cultures._

An overarching theme in Thomas Sowell's books: The world is ruled by human capital, that is: cultures and people's ideas of how the world is and should be. Thinkers like Jordan Peterson would add that the world is also ruled by various forces working below the level of consciousness, for which humans have developed religion and art to try and deal with -- which also fall under the rubric of culture.

I think it's Culture which is the dominant factor, and this is a great foundation of hope. It means that all of the greatest accomplishments of human civilizations are available to all peoples, given enough effort to transform one's understanding and way of life. Such is the power of culture, that this effort may take generations to accomplish. History bears this out. If the descendants of Irish peasants (who, during the potato famine could start out 1/2 to 1/4th as wealthy as the average US slave) could arrive at their current place in modern society, then there's basically nothing that cultural transmission can't accomplish, given enough resources and time.

</comment></comment></comment></comment></comment><comment><USER5> For anyone interested in additional research and debate on this topic, I'd recommend watching Pinker and Spelke's excellent debate on Youtube. As some might remember, in 2005 Larry Summers was fired from Harvard for making similar comments regarding right tail cognitive abilities. Pinker/Spelke lay out great points on both sides of the issue.

Sex Differences in Cognitive Abilities by Diane Halpern is another important work in this subject. It was published back in 1986, so the research on topic has been going on for decades. During that time, virtually every piece of research supports the claim that innate differences in mental abilities exist between the sexes. The extent of those differences is hard to measure, but this new paper is nothing new. It's just adding more support to an already large body of evidence.

</comment><comment><USER6> They've published in the past the 30 year results in 2010 for anyone who's interested to see if there are any major differences.

[https://www.psychologytoday.com/sites/default/files/attachme...](https://www.psychologytoday.com/sites/default/files/attachments/56143/sex- differences-in-the-right-tail-cognitive-abilities.pdf)

</comment><comment><USER7> The thing to remember about data is, it only says exactly what it says. And what it says is this: sex of an individual somehow correlates with the measure of cognitive ability used in the study.

The hidden variable here is a dominating one: the sex of the individual and how they have been socialized to practice certain skills over others. This varies by where they spent their developmental years, how their parents brought them or denied them certain opportunities, how the skills they developed align with or diverge from the test they took, and other invisible influences.

</comment><comment><USER8> man you really have to catch these stories quick before they're blasted off the front page, i was hoping for some discussion but it looks like these stories get buried either by mass flagging or an admin.

<comment><AUTHOR> Yeah it's a shame. I thought the comments on this one were pretty civil and reasonable.

</comment></comment><comment><USER9> Mirror: [https://www.dropbox.com/s/ctuft161j42r46f/2018-wai.pdf?dl=0](https://www.dropbox.com/s/ctuft161j42r46f/2018-wai.pdf?dl=0)

</comment><comment><USER10> Research like this fails to give us any insights about the difference between Nature vs Nurture.

It's highly likely men and women are conditioned and encouraged from an early age by their parents to take interest in things which the parent believes fits their gender role.

<comment><USER11> There are several areas of research that show there are biologically deterministic differences between males and females.

Female new born babies focus on faces more than males do. Males focus more on mechanical mobiles than females. [https://www.theguardian.com/education/2003/apr/17/research.h...](https://www.theguardian.com/education/2003/apr/17/research.highereducation)

Male Monkeys prefer boy toys while female monkeys prefer girl toys. [https://www.newscientist.com/article/dn13596-male-monkeys- pr...](https://www.newscientist.com/article/dn13596-male-monkeys-prefer-boys- toys/)

</comment></comment><comment><USER3> It is worth pointing out that "ability" here is being measured by standardized tests, such as SAT and ACT. This could reflect underlying differences between sexes, or that by the time people are categorized as being in the top 5% social/cultural bias has already had an effect.

<comment><USER2> The measurement of general intelligence is just about the most strongly predictive tool in Psychology.

Here's some things from Thomas Sowell's _Migrations and Cultures_ that people don't know about intelligence as measured by groups. Polish and Italian immigrant communities went from the mid-80's average IQ to over 100 over the 1st half of the 20th century. Poles had increased their average IQ to 108. In another study, African American children of US service people growing up in Germany had the same average IQs as their classmates.

So could factors outside of genetics, like culture, have powerful effects on IQ? It certainly looks like it. Advocates of Social Justice should be looking for what these factors are. Whatever those factors are, not seeking to deliver them to underprivileged groups is like letting lead get into the water of Flint Michigan: It can mean huge differences in the IQs of growing children. Instead, what I see from the far left, is the willful suppression of such information. If it doesn't fit the political agenda and narrative, then it's a-priori a product of bigotry or bias of some kind. Sorry, but that strikes me as cynical and very odd. It's almost like someone cares more about power than the welfare of the underprivileged.

More on the specific topic of the op, the SAT and ACT certainly don't measure everything. Perhaps there is some kind of bias in workplace culture that puts too much emphasis on the skills well measured by such tests, while other kinds of skills are underappreciated? My intuitive sense, considering what tech is like, is that it's probably true.

<comment><USER3> Measurement of general intelligence isn't part of this study.

<comment><USER2> I thought that ACT and SAT scores were used as a proxy for the measurement of general intelligence.

<comment><USER12> Proxy is the key word here. There are many more biases in SAT, ACT, than most general intelligence tests.

<comment><USER2> [citation needed]

A lot of criticism about intelligence tests are ideologically driven, because underprivileged groups score low, and in many regions that have suffered the most from colonialism, underprivileged groups score low. I think that what we will find is that being underprivileged affects intelligence quite strongly.

Sephardic Jews were at the center of worldwide Jewish culture. Their cultural contributions and success in society would suggest that as a population they were probably quite intelligent during their heyday. Today, Ashkenazi Jews are known to have a high average group IQ, higher than current day Sephardic Jews.

I suspect that ideological knee-jerk fear driven suppression of IQ research on underprivileged groups is keeping our society from realizing interventions which can help groups by driving up their average IQ scores. We have historical evidence from the US that underprivileged groups with below average IQs can be changed.

</comment></comment></comment></comment></comment></comment><comment><USER13> I'm tempted to put this in the same bucket as "the bell curve" that it uncovered a factoid, but one which shifts the centre overlap of two curves by a statistically significant (ie, measureable) amount, but does not strongly suggest that close to normal people on average have a difference which matters a damn.

Many of us outside google believe that google employs too many people who _think_ they are Mensa, and so self-identify in the far right side. Sorry guys, but I hate to tell you this: your own curves probably don't support your arguments: you're all well within normal.

TL;DR _no, this doesn 't support the diversity memo_

<comment><USER2> _TL;DR no, this doesn 't support the diversity memo_

[citation needed]

What you say seems to generally contradict findings in psychology and common sense.

[http://www.iqcomparisonsite.com/Occupations.aspx](http://www.iqcomparisonsite.com/Occupations.aspx)

[https://www.quora.com/Whats-the-average-IQ-of-a-Google- engin...](https://www.quora.com/Whats-the-average-IQ-of-a-Google- engineer/answer/Jake-Nicholson-16?share=19ec7d8e&srid=TPm)

Maybe Googlers don't have to all be in Mensa. However, having more general intelligence is a good predictor of success in many tech fields.

<comment><USER13> Those are weak cites (ok: so I gave none) -one has bars wide enough to drive a low-IQ truck through. The other is "I went to IQ camp and here is my cornflake box toy" response.

Having GI is good for engineering, sure. But having maths higher than verbal skills, I think its in the margins. You want both, and people with both, and with determination and good teaching will go far. I believe good teaching and a drive to success outweighs almost everything else.

(not an engineer. I looked at my competencies and decided not to make bridges, I didn't want the burdens which come with being wrong about the bridge building)

<comment><USER2> _Those are weak cites (ok: so I gave none)_

The preponderance of the evidence is against you, but I'm not versed in grabbing psych links.

 _I believe good teaching and a drive to success outweighs almost everything else._

That is very powerful. I would partly agree, in that those are very powerful. I think Liana K makes a very good case that there is something societal going on.

[https://www.youtube.com/watch?v=BIRvtA2JIIA](https://www.youtube.com/watch?v=BIRvtA2JIIA)

However, there seems to be a "Scandinavian Paradox" for attitudes regarding Math as well:

[http://journals.plos.org/plosone/article?id=10.1371/journal....](http://journals.plos.org/plosone/article?id=10.1371/journal.pone.0153857)</comment></comment></comment></comment>


Steve Mann physicaly assaulted by McDonald's staff for wearing Digital Eye Glass - <AUTHOR> http://eyetap.blogspot.com/2012/07/physical-assault-by-mcdonalds-for.html

<comment><USER2> <http://news.ycombinator.com/item?id=4252955></comment>


Torvalds' quote about good programmers - <AUTHOR> http://programmers.stackexchange.com/questions/163185/torvalds-quote-about-good-programmer <comment><USER2> This is one of the few programming quotes that is not just abstract crap, but one thing you can use to improve your programming skills 10x IMHO.

Something like 10 years ago I was lucky enough that a guy told me and explained me this stuff, that I was starting to understand myself btw, and programming suddenly changed for me. If you get the data structures right, the first effect is that the code becomes _much_ simpler to write. It's not hard that you drop 50% of the whole code needed just because you created better data structures (here better means: more suitable to describe and operate on the problem). Or something that looked super-hard to do suddenly starts to be trivial because the representation is the right one.

<comment><USER3> any concrete examples you can point to?

<comment><USER4> Suppose you want to manage the marital status of some people. You could have one data structure, here a table in a database, where you keep (name, status) tuples. This is bad, for many reason: what if someone changes name? If you need to allow undoing, how can you know which was the previous status before "maried" has been entered (widow? Single?)

A better data structure here is an event table (who, did what, when), then not only you know the marital status but you know where it comes from, and can build much more on this data.

<comment><USER5> You're completely neglecting how the data will be used, by using an rcs like data storage of deltas you penalize the common case of wanting to query the current state efficiently.

A better way would be to store a person table without name and a marital status but use it a a primary key into a detail table that has multiple rows for any individual along with dates so you have a row representing the persons state, married, name from, to.

But there are also about a dozen othe better solutions than the one you describe.

<comment><USER4> What you describe is just a denormalization of my solution. You are already optimizing a proposal that was designed as a very short example of a better data structure. That's absurd. If you need to access often the current marital status you can cache it, store it on the client, use a materialized view, write it in a file along with other info, etc.

I would advice personally against the plain denormalization you propose (if I understood it well), because it means your application logic will have to handle it, and your data structure will not produce a very simple straight forward code that is the appendage of good data structure.

<comment><USER6> If you want to keep marital status history, then the marital status is a SCD [0]

With Rails-like conventions, here's a minimalist Type II SCD definition:

        +</comment></comment></comment></comment></comment></comment><comment>--+    +</comment><comment></comment><comment>-----+    +</comment><comment>----+
        | people | -> | people_statuses | <- | statuses |
        +</comment><comment>--+    +</comment><comment></comment><comment>-----+    +</comment><comment>----+
        | - id   |    | - id            |    | - id     |
        | - name |    | - person_id     |    | - label  |
        +</comment><comment>--+    | - status_id     |    +</comment><comment>----+
                      | - until         |
                      +</comment><comment></comment><comment>-----+

where person_statuses.until is the last date where this relationship is valid.

The logic follows from the data structure definition in a natural manner.

'WHERE person_statuses.until IS NULL' will immediately give you the last status of someone/everyone. You can trivially update one's status by UPDATEing 'until' and INSERTing a new record, wrapped in a transaction. Additionally, you can use until as a guard WHERE clause for such an update to implement a form of optimistic locking.

You can also add a column relating a person to another. With a slightly more complex query you can easily make the relation symmetric and remove the need for 'duplicate' reciprocal records.

Handling name changes and preserving navigable history in the people table is not much harder.

The wikipedia page about SCDs gives interesting cases.

[0] <http://en.wikipedia.org/wiki/Slowly_changing_dimension>

<comment><USER4> That's interesting, thanks. I still wonder if a simpler event table is not a better data structure, mostly because it is a read write only structure, no need for updates. Granted, getting the current status is a bit slower but keeping pointers to the latest event plus chaining events can fix it.

</comment></comment><comment><USER7> Absolutely right. I was lucky enough to learn this in college. Although, I did not learn it from the CS professors but rather my physics prof. He was a champion for a language called APL and he actually cut a deal with the CS department to accept credits for taking an APL class he was teaching as a substitute for the FORTRAN class. APL was an amazing mind-opening experience.

Throughout the APL 101 and 102 courses he would repeat this mantra: "Work on your data representation first. Once you have fully understood how to represent your data start thinking about how to manage it with code."

He would throw this at us permanently. At the time it sounded like our Physics prof had lost his marbles (he was a very, shall we say, eccentric guy). It would take a few years after college for me to realize the value of that advise.

Put another way, our business is managing data of some sort. Whether you work on embedded systems or web applications, you are always dealing with data. You can make your programs far more complicated than necessary by neglecting to choose the right (or a good) representation of your problem space (data).

I equate it to designing an assembly line. Anyone who's watched a show like "How it's Made" cannot escape the realization that efficient manufacturing requires engineering an efficient assembly process. Sometimes far more engineering work goes into the design of the manufacturing process and equipment than the part that is actually being made. The end result is that the plant run efficiently and with fewer defects than alternative methods.

In programming, data representation can make the difference between a quality, stable, bug-free and easy to maintain application and an absolute mess that is hard to program, maintain and extend.

<comment><USER8> Your prof was onto something that seems to be very in the zeitgeist today. To "understood how to represent your data" you have to understand what it is you're trying to represent. Eric Evans popularized this notion with Domain- Driven Design.

If you follow this line of thinking far enough, you realize that computer programming is just applied analytic philosophy. You have your metamodel (logic/programming language) and then you build your model (ontology/software).

I really like your assembly line metaphor. Knowing that a "customer" has a name and email address is almost of no importance compared to understanding how the "customer" information arrives, the actions around the "customer," and the end result of the actions. That's the assembly line.

<comment><USER7> I think that, to some degree, becoming an effective APL programmer almost required becoming good at data representation. If you want to do things the "APL way" you have to think about structures that work well with array, matrix and tensor processing ideas. When you could represent your data in the most optimal way you could sometimes write a function with only a few operators that could do what needed to be done to that data.

This means that, to some extent, data representation might have several local minima (in terms of being optimal) with each population of possible representations exists around the language or toolset you are going to use to process this data.

What I mean is that the optimal data representation for an embedded system (as an example) written in assembler might be different than that of the same system written in C or Forth.

I don't use APL very much any more. Back when I did I was also programming in Forth, C and Assembler. I know that the decisions I would make --in terms of optimal data representation-- varied from language to language. This is partly true because each language, in my case, was being used to deal with different problem domains. For example, APL could do high-level computations while Forth was great for low-level, real-time stuff.

<comment><USER9> Interesting comments. I've been working with an APL-derivative and this sounds similar to how I have been thinking about things. It's a matter of massaging the data to get in into a certain representation, e.g. a matrix, then from there it's very, very easy to work with using APL. As you say a few operators is all you need. The code is very terse. Very powerful. The real work seems to be shaping the data into the right representation first, a matrix. I use non- APL-descendent programs, the usual UNIX utilities, to do this for now.

<comment><USER7> Right. I remember having fun with this doing an APL application to aid in DNA sequencing. There were a number of ways to represent the data provided by the sequencer. At one point it almost became a game to see how small of an expression one could create to process the data by changing the representation.

With APL one has to be careful not to create monsters that cause geometric expansion in memory needs.

If the data set is large and the expressions processing the data cause frequent expansion into matrices or tensors (n-dimensional data structures where n > 2) one could end-up with geometric or exponential memory requirements. This, again, is another case of having to understand and fit data representation to the programming language AND the approach one will use to work with the data.

While languages like APL can be great, they can be disastrous in the hands of a programmer who does not understand what might be going on at a lower level. Sometimes there's nothing better than good-old low-level C.

</comment></comment></comment></comment></comment><comment><USER10> You can normally fix bad code - fixing bad data structures is not usually easy or even possible.

It's why I've still not fully bought in to 'release early release often'.

I prefer to defer releasing for production use until really satisfied with the structures - this way you have no barrier to ripping the foundations up.

If not 100% comfortable with the model - prototype a bare metal improved one (schemaless DBs ftw) - if it feels better start pasting what logic/tests you can salvage from the earlier version and move on.

<comment><USER11> I'm in the position of maintaining a legacy codebase. I feel like I've shown up half-way through a game of Jenga and management still wants me to play the game with the same speed as the guy who played the 1st half.

Meanwhile, he's been promoted to start work on a brand-new Jenga tower since he's demonstrated such remarkable success in the past.

I just want everyone to stop playing Jenga.

<comment><USER12> I've always, only half-snarkily, said that if you have never had to maintain/modify someone else's code then you probably write code like an asshole. Writing code that is both easy to understand and maintain _and_ correct can be difficult, lots of people just go for the latter.

Unfortunately as you pointed out, especially in large companies, people can get promoted before the deficiencies of their previous work become clear. This leads to people never learning because the feedback loop is too long, or worse, they never deal with their past code so are oblivious to all its shortcomings and just think they are awesome. Also management tends to reward based on accomplishments today without an eye for costs to be born down the road, which gives perverse incentives to "get it done" programmers who leave mountains of technical debt in their wake for others to deal with.

<comment> loup-vaillant > _Writing code that is both easy to understand and maintain and correct can > be difficult, lots of people just go for the latter._

They _believe_ they go for the latter, but actually they don't. If their code was easy to understand and correct, it would have fewer defects to begin with.

Your second paragraph I totally agree with. I've dealt with such code. Sometimes, I can halve its volume simply by applying local correctness- preserving transformations. That is, without even knowing what the code is doing. I even spotted some bugs in the process.

<comment><USER13> 'correct' is always only about a given specification, that is right for a limited period of time, assuming needs are well understood. It is very well possible to write satisfactory code one day that becomes inadequate the next.

I won't deny the presence of bugs though, there is endless evidence that bugs always exist.

<comment><USER12> Correct, I was talking mainly about code that 'works' (i.e. is 'correct', for the given spec) but is highly sub-optimal, confusing, tightly coupled with other code, etc...

</comment></comment></comment></comment></comment></comment><comment><USER14> This is approximately the same reason as why I start out writing most of my programs by creating a bunch of types, and why I find dynamic programming languages uncomfortable to use.

I'm less and less a fan of the ceremony of object orientation, but I think there's a lot to be said for having a succinct formalized statement of your data structures up front. Once you understand the data structures, the code is usually easy to follow. The hardest times I've had comprehending code in my career, apart from disassembly, have been from undocumented C unions.

<comment><USER15> "This is approximately the same reason as why I start out writing most of my programs by creating a bunch of types, and why I find dynamic programming languages uncomfortable to use."

Classes. There are your types. Python has them. Ruby has them. Javascript has them. . . .

<comment><USER14> If you can't see see the qualitative difference between algebraic data types and Javascript classes, there's no point discussing things.

<comment><USER16> Precisely. If you think that classes are all that you are ever going to need then you should read up on the Expression Problem

<http://c2.com/cgi/wiki?ExpressionProblem>

</comment></comment></comment></comment><comment><USER11> Next week on Hacker News: Bad Programmers worry about their code. Good programmers ship.

"Bad programmers [technique A on programming KPI metric N1]. Good programmers [technique B on programming KPI metric N1]."

Responses: Someone will ask, "What about metric N2?" And someone will say, "What about technique C?" Someone will post a personal anecdote showing that people really underestimate the value of A. Someone will respond to that by posting a hyperlink to an anecdote that shows technique B really is what matters.

<comment><USER17> 10 people learn about techniques A, B, and C who didn't before. 10 other people start thinking in terms of metrics N1 and N2 who weren't before. We learn and improve collectively. I think that is a pretty amazing thing about the internet and boards like this.

That's not to say that some things don't get passed around _a lot_ , but that's generally because they're worthwhile enough to make sure that everyone gets a look.

<comment><USER11> I agree 100%.

To me, one of the downsides of many internet discussion is that it seems complicated issues get reduced to a single dimension just to get enough traction to have the conversation. And then most of the conversation is between the camps that have internalized and accepted the simplified mental model of the problem and those that haven't. Maybe that's is a good thing for the reasons you highlight.

In my opinion, it feels like we are fishing with a bigger net, but we aren't fishing any deeper now than we were 3 years ago.

<comment><USER18> _> In my opinion, it feels like we are fishing with a bigger net, but we aren't fishing any deeper now than we were 3 years ago._

Well, who's fault is that? Pick a perspective and follow it deeply, write about it, and fish deeper. All it requires is commitment.

You could certainly pick a worse position that the OP's! Data is far more important than code - although I fear that this point is obscured by the "web service" trend that tends to spread data across many legal/economic/technical 'zones of control'.

Anyway, I hope that rather than just lament the state of things, that you take action to change it, at least for yourself.

</comment></comment></comment></comment><comment><USER19> To paraphrase, if I may, a novice imagines that the goal of programming is to create code which solves a problem. This is true, but limited. The real goal is to create an abstract model which can be used to solve a problem and then to implement that model in code.

<comment><USER20> I really hope that people reading this know to apply Ockham's Razor to their abstract models (lest they write a lot of AbstractSingletonProxyFactoryBeans).

</comment></comment><comment><USER21> I see a program as a _theory_ , a theory of the problem it solves. You can see how well it generalises, if it is needlessly complicated (Occam)... and in some magical moments, you'll find it predicting phenomena you hadn't explicitly anticipated.

So I think a program's conceptualisation of a problem is the most important thing - more important than data structures or code. Though, data structures are usually closer to it, by representing the concepts you model.

However, it's really hard to get these things right. Linus created both his great successes (linux and git) after experience with similar systems (unix/minix and bitkeeper). Being able to play with an implementation, experience its strengths and weaknesses, gives you a concrete base to use, reason with, push against, and come up with new insights - it's enormously helpful in _seeing_ the problem.

But that's a grand vision - I wonder if Linus is also talking about programming in the small, each step of the way, as a low-level pragmatic guide. I don't like git's interface or docs much, but the concepts are great, it is implemented really well, very few bugs, and even on ancient hardware boy is it fast.

</comment><comment><USER22> This is Normalization rearing its head. A properly normalized database can be extended without needing refactoring and does not have modification anomalies. There is a formal process to normalization. There is no such equivalent in code, but a poorly normalized data model virtually guarantees that any code wrapped around it will be messy. Conversely, mediocre code wrapped around a clean data model (less common in the wild) is much more amenable to incremental improvement.

</comment><comment><USER23> "good data structures make the code very easy to design and maintain, whereas the best code can't make up for poor data structures."

Quite a nice summary, courtesy of <http://programmers.stackexchange.com/a/163195/31774>

</comment><comment><USER24> This brings up a burning question that I have been pondering for a while. I still don't get how to properly design good APIs. I have been programming but as a scientific research not as a professional developer, and I have found I cannot remember how to use my code a day after writing that code.

Take my current project as an example. I have some samples, each of which are observations along a sequence of non-overlapping segments. My objective is to extract observations over arbitrary intervals for all samples. So I have a segment defined as a pair of start and end position plus its observation, a sample as a vector of segments, and all samples as a dictionary of samples. There are various utility functions to make segments, collect samples, and scan individual samples. The problem is I have to remember all three levels of data structures to use this code. I wonder whether it is better to define an interface for those data structures as well so I just need to remember the interface. My objections to formal definition of interfaces is that everything is so simple and obvious and formal interfaces smack of overengineering.

I got to this point because in my previous projects I put every identifiable thing as a class and found too much coupling in classes and convoluted interfaces.

<comment><USER25> Hi, I used to have a similar problem: seeing that when I do architectures they become difficult to maintain. Or difficult to talk about, to be honest, I don't understand your second paragraph :)

What really helped me is the approach to program API-driven. Don't start with your algorithms but start with what kind of functions you probably need and what would be the easiest way to use them. (In fact this is not so far from this data-centric approach as the most basic functions of APIs are usually function to retrieve or modify data.)

Try to read some good code from one of your favorite open-source projects. At some point some code may catch your attention because it's so simple and elegant. Why is it so elegant? Often because the underlying structures are just simple and made from common-sense. Don't over-engineer stuff, the simpler solution is often superior to the full-featured solution. And often you should ask yourself: do I really need this features currently to show some progresS? Shouldn't I not rather post-pone it?

<comment><USER24> All good advice. Right now I only write out major tasks and outlines of procedures to achieve them. Maybe I first should abstract out core data structures and operations on them. I will try that.

</comment></comment></comment><comment><USER26> This is similar to the rule of representation from the Unix philosophy, covered here: <http://www.faqs.org/docs/artu/ch01s06.html>

"Rule of Representation: Fold knowledge into data so program logic can be stupid and robust."

</comment><comment><USER27> This seems to apply to all kinds of "writing" (symbol sequence generation), from math to poetry, though the terms differ, e.g.:

      Bad novelists worry about the plot. Good novelists worry
      about the characters and their relationships.

<comment><USER28> That's more a value judgement. As Samuel Johnson said, "No man but a blockhead ever wrote, except for money." "Bad" novelists who worry about the plot can make a lot of money.

</comment></comment><comment><USER29> Algorithms + Data Structures = Programs

A 1976 book written by Niklaus Wirth, designer of Pascal

[http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_...](http://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs)

<comment><USER30> ... and then there is user interface, debugging, support for various formats, documentation, and other mostly boring stuff.

</comment></comment><comment><USER31> So you are at some "Source" and you want to get to the required "Destination"(goal) -- what do you do ???? --- you plan your journey well. Let your plan take into considerations all the possibilities --- all pros an cons.

Good Programmers - well they plan; understand the requirements of the problem; case study or analyze the problem space; consider all(or most) of the possibilities to reach their goal(destination); then make a design (create a plan) and decide on the path(s) to be taken i.e. choose data structures, algorithms, programming language, and other factors. Having understood the pros and cons of their design; they begin to code. This process generally works most of the time; but there are times when you go mid way and then change the design or might consider another alternative(like data-structures); this generally happens when you've missed some problem space to analyze earlier while planning. None-the-less; planning well ahead of time; before you begin coding helps get a good product and helps save a lot of time, money and effort.

Bad programmers on the other hand know about their Destination(goal) but do not know how to get there; they simply jump into coding hoping that they would someday get to their destination. This too works, but it takes more time; and when one realizes that one has made a mistake; it becomes very difficult to come up with a new plan to move forward from that point. The product loses its quality. Often you land up starting again from square zero.

</comment><comment><USER32> IMHO: That's why good programmers love Lisp.

Lisp is all about data structures. Data can be expressed so easily no matter how complex it is. Lisp coding is merely writing minimum code to handle data structures. Even code is data. So it's no problem to extend Lisp with new commands. That's precisely coding around data.

In Java or C# however you have a lot of libraries to handle data but you don't have such freedom of data expression. You have to write a lot of code to express and handle complex data.

</comment><comment><USER33> there's quite a similar quote on photography

 _"Amateurs worry about equipment, professionals worry about money, masters worry about light"_

<comment><USER34> The ending changes the whole thing:

"... I just take pictures."

Programming, motherfucker.

</comment></comment><comment><USER35> My only problem with this quote is it equates "new" programmers with "bad" programmers. Yes if you still have these problems after 10 years of professional work, then you're a bad programmer, but if you show these symptoms after 6 months it just means you're still learning. There's got to be a better way of stating this.

<comment><USER36> A new programmer _is_ a bad programmer. There's no shame in that. In fact it's better for a new programmer to realise that; the worst programmers are those that don't even realise they are bad.

A new programmer may still be learning, but that doesn't mean they aren't bad. It just means they are bad now, and hopefully won't be bad later.

<comment><USER32> Even an experienced programmer can still be a bad programmer.

I realized that myself when I learned Ada. You cannot imagine how humbling an Ada compiler can be :-) This is possibly the reason why Ada is not popular at all. It exposes how bad you really are. Java, C#, and even C++ are much more tolerant and can easily give you the illusion of being a good programmer

I am experienced in really many programming styles and languages. Ada and Lisp and their programming paradigms advanced my programming skills the most. Ada, because of its merciless requirement of discipline, and Lisp because it teached me to focus on data instead of code.

</comment></comment></comment><comment><USER37> I always do it the other way around (when starting software from scratch):

0\. write the simplest mock/pseudo-code I can think of for the business logic that needs to be implemented

1\. extract from this ideal code the data structure that it needs in order to actually be so simple and write real code that implements these ideal data structures

2\. write the real code that actually does the work

I think Linus means the same thing, but he doesn't get it that in order to imagine those "perfect data structures" he has to start with some idea of the code that will be using them, otherwise they will not be "perfect" for his program. I'm sure he's just smart enough to go through my "0" step in his mind without actually writing things down.

It's an obvious case of very smart people omitting the steps that are obvious/implicit to them when expressing their ideas to "lesser minds"...

</comment><comment><USER38> Maybe this is a dumb quesion , but I don't get how you would write code without thinking about your data structures?

Most of the code I write is manipulating a data structure in some way, I have no idea how I would even know where to begin with at least some idea about which structure I should be using.

<comment><USER39> The data structure you choose will have a profound impact on the code you write, so choose wisely.

</comment></comment><comment><USER40> I think this can be distilled down to: "bad programmers worry about how, good programmers worry about why"

</comment><comment><USER41> I've seen this is numerous areas.

Think about business analysis... Let's say you're analyzing the best way to support Marketing at a consumer products company like Colgate. If you start with fancy windows, or the latest technology, you won't help the business nearly as much as if you think through the data needs of the business first, and then worry about presentation later. The data model outlasts the presentation software.

Consider doing a webpage. It's much better to think about what you want to show (the HTML) first, and worry about style (CSS) and scripting (pick your tool) after.

This isn't to say coding isn't important too. You need programming skills to get what you need in the end. It's that data is the foundation. A poor data model reflects either an overly complex or unthought business model.

</comment><comment><USER42> This can be viewed as a corollary to Perlis's "It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures." [<http://www.cs.yale.edu/quotes.html>]

</comment><comment><USER43> <http://www.amazon.co.uk/gp/aw/d/0521663504>

functional data structures - how to bend your brain in a functional world - nearly twenty years old. Still have to take a run up to read it

</comment><comment><USER44> I find myself writing new functions and updating existing ones a lot more often than having to add new columns or tables to my database schema. This is probably true for all well designed systems. If you need to change your schema every time you need to change your code, its a clear sign you are a very bad developer.

quality of code indicator = [code changes] / [database schema changes]

Related quote:

"Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowcharts; they'll be obvious." (Fred Brooks)

</comment><comment><USER45> it occurs to me that when you're programming functionally, especially in a functional language, you must think about your data's structure and types first (or fight a whole lot with the language). if linus is correct, could a strength of FP be that it naturally herds its users down the path of the 'good programmer'?

</comment><comment><USER46> This is the first time I've clicked on a StackExchange thread and not seen "closed - not a real question".

<comment><USER47> give it time...

</comment></comment><comment><USER48> I believe Rich Hickey believes in keeping data really simple and writing the code around that. Could someone explain this philosophy to me?

<comment> iso8859-1 Watch "Simple made Easy" or something like that. I think there is no contradiction, Rich Hickey probably just thinks the least complex efficient data organization is the simple one. I don't think Rich Hickey is saying that you can't use AMQ's or other "fancy" stuff :)

</comment></comment><comment><USER49> Posting these stackexchange questions to HN is the best way of getting them closed as "unconstructive", whatever that means.

<comment><USER50> This question is on the programmers stack exchange, which is supposed to be for questions that cause discussion.

</comment></comment><comment><USER51> I think he meant that it is better not to worry about the code since it will stink no matter what you do...

</comment><comment><USER52> The problem with code quality is that there's so much AND-ing that most people give up on understanding this massively difficult problem that is as much social and industrial as it is technical.

One of the first things you learn about systems is that parallel dependencies (OR-gates) are better than serial dependencies (AND-gates). The first has redundancy, the second has multiple single points of failure. That's also true with regard to how people manage their careers. Naive people will "yes, sir" and put their eggs into one basket. More savvy people network across the company so that if things go bad where they are, they have options.

To have code quality, you need people who are good at writing code AND reasonable system designs AND competent understanding of the relevant data structures AND a culture (of the company or project) that values and protects code quality. All of these are relatively uncommon, the result being that quality code is damn rare.

<comment><USER18> This is a very pessimistic view, because it doesn't allow for any process that could possibly change the state of affairs.

The fact is that one person armed with clear understanding of quality code can be the seed of change. Even under siege from bad data structures and opaque processes, it is possible for a programmer to carve out a small niche, to normalize (at least in his mind) the system he's been given to modify, and apply his knowledge correctly.

If he can execute projects quickly and relatively error-free, this programmer will do well in any organization, and he will probably be given a team of his own, and that team will probably be a good one, and the codebase will continue to change slowly, organically.

If the programmer leaves, then the bad code will grow again. That is the nature of life!

In any event, I just want to emphasize that there is great value in understanding and doing good work, even if (perhaps especially if) the constraints you're working under don't encourage it. YOU are the seed of change.

</comment></comment><comment><USER53> Algorithms, data-structures and code quality (ability to quickly understand and change) are three dimensions of the same thing, neither could be neglected.

Or to put it another way - algorithms are the plot, representation are your characters, and code is your language. One or two of three aren't enough.

Code is very good investment, it must be as short and simple as possible, but not too much. There must be a balance, compromise between volume, verbosity and meaning, as in a good poetry. The heuristic here is 'less is more'.

This must be not confused with languages. Bad, unreadable code could be written in any language, but some over-hyped languages are bloated and messy from the birth.

</comment><comment><USER54> This article was posted here a while ago:

[http://www.dodgycoder.net/2012/07/old-school-developers- achi...](http://www.dodgycoder.net/2012/07/old-school-developers-achieving- lot.html)

It mentions that Ken Thompson "starts his projects by designing the data structures and then works bottom up".

Adapting this approach solved several problems I was having during development.

<comment><USER55> A similar technique that's among my favorites: _Write the inner loop first._

Useful in graphics work, perhaps not so much if writing a Web server or database engine.

</comment></comment><comment><USER56> He's dissing OO there.

<comment><USER28> I was wondering when someone would point out that a number of OO programmers have no idea what a data structure is.</comment></comment>


Benefits and Use Cases of White Label Crypto Exchange Software - <AUTHOR> https://medium.com/espayexchangespace/benefits-and-use-cases-of-white-label-crypto-exchange-software-2641301dc33b <comment><USER2> If I setup a White Label Crypto Exchange, how do I get my cut?

When my White Label Crypto Exchange gets hacked, can I blame EspayX?</comment>


Batesian Mimicry: Why Copycats Are Successful - <AUTHOR> https://www.farnamstreetblog.com/2016/12/batesian-mimicry/ <comment><USER2> Well, if current evolutionary theories are correct, it's not quite mimicry. It's not like one snake see the other poisonous snake scaring off predator and decides it too wants to look like that. Rather, its convergence [0] [1]. This helps with reproductive success so its numbers goes up.

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

[0] the tendency of unrelated animals and plants to evolve superficially similar characteristics under similar environmental conditions.

[1] [https://www.sciencedaily.com/terms/convergent_evolution.htm](https://www.sciencedaily.com/terms/convergent_evolution.htm)</comment>


The Essential Bradbury (2018) - <AUTHOR> http://www.samweller.net/bradbury-1/2018/11/29/the-essential-bradbury <comment><USER2> There's a fantastic Bradbury interview/documentary here:

[https://www.youtube.com/watch?v=PF3uZf4G3Lo](https://www.youtube.com/watch?v=PF3uZf4G3Lo)

<comment><USER3> Very touching, thanks.

</comment></comment><comment><USER4> Man I miss Ray Bradbury. Can anyone recommend any authors who carry the torch?

<comment><USER5> You may like Gaiman's short stories.

</comment></comment><comment><USER6> Looks like this only has #25 through #20.</comment>


Show HN: Sitegraph, the way to track anything in your application - <AUTHOR> https://sitegraph.net

<comment><USER2> Whilst I agree that I could indeed use GA for this, there is often merit in a simple, easy-to-use service that gives me that quick overview. I hate checking Google Analytics on my phone for example, but I'd probably pay a few bucks for a nice overview, and alerts etc. Keep going!

<comment><AUTHOR> Thanks for the kind words of support!

</comment></comment><comment><USER3> What's the unique value prop here? How is this different than using Event tracking in Google Analytics?

</comment><comment><USER4> Take a look at Google Analytics: Events. The same thing but for free.</comment>


How a team of young people helped rebuild healthcare.gov - <AUTHOR> http://www.theatlantic.com/technology/archive/2015/07/the-secret-startup-saved-healthcare-gov-the-worst-website-in-america/397784/?single_page=true <comment><USER2> Not to take anything away from the "young people" \-- who are ages 28+ -- but this article over-sensationalizes their accomplishments.

      "The MPL team had three great technical accomplishments over its 16-
      month-long life. First, it served as a crack team which understood the
      infrastructure of the site and could resolve small issues as they arose.
      Second, it built an insurance application, called App2, which signed up
      new users in less than half the time of the original app. Finally, it
      replaced the website's crashy login system with a functional (and much
      less expensive) one of its own design."

I know the author wants a "startup" narrative, but these aren't groundbreaking accomplishments, let alone the fact #1's silly.

      "It did most of this while living together in an unremarkable McMansion in suburban
      Maryland."

I don't understand why this matters.

      "So the team that started by performing bug fixes on a sprawling, struggling mass
      of code ended by writing critical, efficient infrastructure for the government.
      Yet what the MPL team accomplished philosophically may be even more important:
      It helped teach government bureaucrats how to think about building websites in 2015."

The author tried too hard to overlay a ScrappyStartup™ narrative. This argument is absurd.

edit: stephengillie called it in his "submarine" comment below (see: [http://www.paulgraham.com/submarine.html](http://www.paulgraham.com/submarine.html))

<comment><USER3> > It helped teach government bureaucrats how to think about building websites > in 2015.

I think this is true. Governments and corporate's are starting to see that you don't need to go with GenericAdAgency12 anymore to get shit-hot, well-made websites going. This project was a textbook example of this.

</comment></comment><comment><USER4> "Fixing" government web has nothing to do with young people. I contracted for 5 years for the Department of Defense doing full stack web. Yes, most people I worked with were double my age or more, but many of them are very talented and eager to implement new technology.

The problem is the massive, unbelievable amount of red tape to get things done. Software stacks and browsers have to get approval and re-approvals, a years-long process. Code has to be written in something stable, not something trendy. The programmers spend more time writing documents and attending meetings than coding. There are meetings about meetings and the layers of management are infinitely recursive (managers for the managers).

Start-up culture and tech trends just don't work at the scale of government, for much the same reasons massive corporations move glacially. Just add even more layers of management, congress, civil service employees that cannot be fired, and tax dollars to the mix.

I enjoyed my time working in government web, but "youth" isn't really an answer.

<comment><USER5> Speaking as an old, I think youth is part of the answer. One of the things I have to really work at as I get older is unlearning the things that used to be true. Given the pace of technological change, younger people have an advantage in that they have less to unlearn.

> Start-up culture and tech trends just don't work at the scale of government, > for much the same reasons massive corporations move glacially.

This is good example of an old truth that needs some unlearning. Old corporations move glacially. Some new ones work differently, though.

Government can also work differently. The folks at 18F and the US Digital Service are demonstrating that in ways both large and small. Indeed, when I was looking at a USDS job, a White House advisor told me plainly that agile, iterative approaches were _clearly better_ for government because they were much more effective at risk reduction than producing piles of documents ever could be.

<comment><USER6> > Government can also work differently. The folks at 18F and the US Digital > Service are demonstrating that in ways both large and small. Indeed, when I > was looking at a USDS job, a White House advisor told me plainly that agile, > iterative approaches were clearly better for government because they were > much more effective at risk reduction than producing piles of documents ever > could be.

Is there a reason you didn't take the USDS job?

</comment></comment></comment><comment><USER7> I applaud the accomplishments of these people. But I don't like the narrative because it is misleading. Lets change context with a nice metaphor and reframe the discussion...

"how a team of immigrants helped bring in a strawberry harvest"

The success of this team is based on a relationship between two things: 1) eagerness to prove one self 2) willingness to suffer pain in order to prove one self

Having worked with a number of them, my experience has been that building things from scratch in big bureaucracies (that aren't software companies) is basically impossible. To much group think inevitably destroys the scoping process.

The teams that have impressed me in big bureaucracies tend to operate in the following manner: -take/buy something off the shelf that meets 60% of the requirements -use a team of seasoned project managers and engineers who have seen the darkest gloomiest bloodiest field of battle to incrementally patch and beat that software into the inflexible mold of their bureaucracy

This strategy usually works surprisingly well, but it is like comparing steering a slow moving container ship to a speed boat. It's part of the reason that the agile SaaS market is so successful and profitable.

I first went to work with an organization where a planning meeting was discussing a new feature. Because of my startup culture experience I asked a PM after the meeting "this sounds cool should I whip up a prototype tonight". The project manager laughed and said "this feature set is on the roadmap for 2014 (two years out at the time), we wanted your input but you should be focusing on your existing ticket pipeline". When you consider the scope of the organization the things that they were doing with their core platform was pretty incredible.

That being said it drove me personally nuts, and I quit.

</comment><comment><USER8> As usual, a fix-it team does 80% of the work in 20% of the time for 5% of the money.

<comment><USER9> I think often fix-it-teams are allowed to do things the regulars are not allowed to do. I have seen several projects where pretty much everybody (except maybe the top managers) knew what's wrong but wasn't allowed to make changes.

Then some crack team (Accenture or "young people") comes in, gets permission to make the necessary changes and gets all the credit.

</comment></comment><comment><USER10> Is there any more information about the inner workings of the failed healthcare.gov site? It's quite interesting to read how horribly wrong they got it.

<comment><USER11> This has to be the 10th submarine piece I've seen about healthcare.gov.

<comment><USER10> They all seem to be light on the technical reasons though.

</comment></comment></comment><comment><USER12> "The old system responded to requests somewhere between two and 10 long seconds; the new one takes 30 milliseconds, on average."

Wow, 30 milliseconds. Subtract out the RTT, and you have app request times on the order of 5ms. Outstanding. And impossible.

<comment><USER13> When Blekko was serving web traffic if it came from the primary index and was cached (a repeat request) it was served up in under a millisecond. I learned at Google to never under estimate what sort of performance you could get reading the result out of the memory of a nearby computer. 10,000 computers with 96GB each on them can easily keep 640TB of data ready to return very very quickly. Its even faster if you have your own zero copy TCP/IP layer (right from client memory into the network interface card).

For an example of scale, 10,000 nodes with 96GB each costs less than $30M dollars. The government spent billions on the healthcare.gov project.

</comment></comment><comment><USER14> So progressive!

</comment><comment><USER15> ugh. Youth worship again. fuck these people.

<comment><USER16> Not just youth worship, youth genius worship.

Having been subjected to the government's definition of "agile" before[1], I can tell you that nearly everyone who was at least barely competent technically[2] thought the processes were asinine. The problem is that nobody could convince the government customers and non-technical management of this. The government in particular was bad, as their reps (GS and contractor) often came in with a dictatorial, know-it-all attitude about the problems they were hiring us to solve.

This team managed to do what they did because they were outsiders brought in specifically to fix a high-profile fuck-up. I'm willing to bet that most of what they did was suggested at some point by people who worked on the broken system, but it was shot down. The success of the second effort was primarily political.

[1] The Gantt chart bit brought back memories that made me want to throw things.

[2] Despite stereotypes to the contrary, most developers and engineers working at government contractors are at least barely competent. Contractors with mature engineering orgs (Raytheon, Boeing, Lockheed, etc) are better as they tend to force the fuck-ups out pretty quickly.

<comment><USER5> > This team managed to do what they did because they were outsiders brought in > specifically to fix a high-profile fuck-up.

This is true. But having recently talked with a number of people at 18F and the USDS, I think the enormous scale of the high-profile fuckup is serving as a great example to persuade people that things should be done differently.

For example, note that the government is trying to change the purchasing processes that drive heavyweight methods and delivery of monoliths:

[https://18f.gsa.gov/2015/01/08/creating-a-federal- marketplac...](https://18f.gsa.gov/2015/01/08/creating-a-federal-marketplace- for-agile-delivery-services/)

<comment><USER16> The government is really making strides to improve technical acquisition, and acquisition in general. The original healthcare.gov semms to have been a wake- up call that will permanently stick and improve government service delivery. I would actually like to do a tour at some point, but I don't think they would take me.

Having said that, there is one three-letter monolith that commands the plurality of the Federal budget and shows absolutely no inclinations to change. They have resisted intrusion by USDS and 18F thus far, and I can tell you from direct experience that their information systems and policies are atrocious. Hopefully 18F, USDS, and similar efforts can eventually penetrate the Five-Sided Playpen, but it is going to be a long, hard slog.

</comment></comment></comment></comment><comment><USER17> I love healthcare.gov.

For the first time in decades the entire country experienced exactly the government they elected and are paying for. And the beauty of it is that it could not be hidden away, spun or silenced.

What's sad is to see an article such as this one pushing the idea that it was fixed...a "Mission Accomplished" message of sorts. The truth of the matter is that dozens of people should have been fired and a number of them should have ended-up in jail.

Nothing has been fixed. Sure, the website is better but the organization is still being run by he same incompetent morons who created the problem in the first place. That's the problem. And, yes, a bunch of young people can help fix it without writing a line of code by using their brains to vote rather than cargo cult and emotion.</comment>


Movie Recommendation API from Filmaster Went Live - <AUTHOR> http://www.linuxtoday.com/news_story.php3?ltsn=2011-01-30-002-35-MM-DV

<comment><USER3> Very interesting -- but there is more information in the original blog post:

[http://blog.filmaster.com/filmaster-unveils-movie- recommenda...](http://blog.filmaster.com/filmaster-unveils-movie- recommendation-api/)

How rich is their catalog, though? They apparently exist only since 2008; search does not seem to work very well and is very slow.

As an example, this movie:

<http://filmaster.com/film/criminal/>

<http://www.imdb.com/title/tt0362526/> on IMDB

which is a kind of B-movie but great (and I believe sort of well-known), has "no description yet"...

Is anyone using filmaster.com that could comment?

<comment><USER4> We haven't really officially started promoting Filmaster.com, yet - <USER2> for the final iPhone app (March) and the design (April) before that. Filmaster.pl is pretty strong in Poland, thus there are lots of posters, synopses and films added by users but some do not have English versions yet. It will come as thanks to some open source contributors (the site backend is 100% free software) have written importers from The Movie DB and Wikipedia. We'll be rolling out more new features soo so it's best to follow us on twitter: <http://twitter.com/filmaster> and subscribe to the blog to stay up to date.

</comment></comment><comment><USER5> gr8 project!!!</comment>