The reason people burn out on open source - <AUTHOR> https://github.com/steveklabnik/emoji/issues/23 <comment><USER2> Same reason people burn out on Hacker News.

Independent developer consultants, as a demographic, significantly skews towards a larger-than-average number of people who were never surrounded by a good professional office culture. Many never learned the benefits or skills of writing in ways that won't be interpreted as mean. In fact, many pride themselves in trying to be the opposite of a professional behaving office person. Toxic culture, loves to point out the tiniest flaws in everyone else's work and don't care or realize that doing so is hurting others.

Case in point, Hacker News was a much happier place that was more receptive to positively responding to people sharing their work, back when it was Startup News. Inviting in all kinds of hackers, ended up bringing in the worst of the worst segment of the demographic.

I love doing developer consulting, I know many awesome consultants who behave great, but the average behavior of the demographic as a whole is is really bad.

<comment><USER3> > Inviting in all kinds of hackers, ended up bringing in the worst of the > worst segment of the demographic

If you think the current HN crowd is the "worst of the worst" of the demographic, you need to get way, way out of your microbubble.

... and with an elitist attitude like that, don't think you're exempt of that demographic either.

<comment><USER4> You say 'elitist' like it's a bad thing...

</comment></comment></comment><comment><USER5> Maintainer of Capistrano here, I've been close to FOSS burnout a couple of times, and more often than I would like people catch the sharp end of my tongue. I can count on one hand how many issues have been opened with a corresponding PR, and from those, barely any ever come with tests, or acknowledge the stuff in the CONTRIBUTING file (Github includes a "Before opening this issue, check this project's guidelines). Fortunately there are couple of people who consistently tackle issues that the lazy people have opened, and submit super high quality PRs with unit and functional tests, documentation and entries in the CHANGELOG. These people are the main reason that I still work on FOSS.

My solution was to make heavy use of labels at GH, the "needs more info" and "feature request" ones are obnoxious colours. Second to that, I bought a TextExpander licence, and setup a bunch of macros `notanissue` which expands to:

> Closing because I'm not sure this is an issue, if you are convinced that > this is really a bug, please feel free to re-open the issue and add more > information (your versions (Ruby, Cap, etc), your Capfile, your logs, and > relevant sections out of your Gemfile) > Otherwise support is done via the > mailing list > ([https://groups.google.com/forum/#!forum/capistrano](https://groups.google.com/forum/#!forum/capistrano)) > or at StackOverflow > ([http://stackoverflow.com/questions/tagged/capistrano](http://stackoverflow.com/questions/tagged/capistrano)) > with questions tagged `capistrano`.

And a number of others 'contrib' for contribution guidelines when a PR is in conflict with them, etc.

It's helped lighten the load a lot, and now tend to invest heavily in grooming the issue list, and keeping things neat and tidy at GH. I dare guess, when I'm awake 90% of the issues are classified, or closed within 5 minutes of being opened, this has helped a lot with the feeling of pressure and constant nagging with which I've previously suffered.

Of course, maintaining a large project is a burden, but it comes with career and profile benefits.

<comment><USER6> Thanks for your hard work on the project! You have improved the lives of many working programmers. What are you looking for for the future of Capistrano?

The problem and major benefit to github is how easy it is to contribute. Sometimes it's like a high maintenance low paying customer vs. a high paying customer that treats you like a professional and gets out of your way I guess.

<comment><USER5> Actually we're planning to keep improving it, I factored out the SSH driver into SSHKit ([http://github.com/capistrano/sshkit](http://github.com/capistrano/sshkit)) when I did the v3 rewrite. Right now we are founding a company, and hiring a team to build Harrow, the tool we all wish existed to tidy up some of the workflow loose ends, and bring some order (whilst maintaining flexibility) to what might otherwise being DevOps chaos. Find it (not launched yet) at [https://www.harrow.io/](https://www.harrow.io/). One of our goals for Harrow is to open source that as well as running a hosted service, and using the revenue and expertise to follow the (exceptional) Hashicorp example of building a commercial FOSS company to build excellent, useful software, whilst defining new standards, and providing all the tools people didn't know they needed.

Of course we know that Docker, and Rocket, and to an extent more of the AWS tools are automating a lot of these processes, but for every problem they solve, some people can't use them, and we're counting on "script things, run them in a repeatable environment, share the scripts, and results with your team" theme won't go away for a while (ever?), as most of what we do, even with all these modern deployment tools is still programmer duck-tape.

<comment><USER7> (Late to the conversation - I've had this tab open that long!)

I just wanted to ask your opinion on the docker comment - I think tools that make repeatable builds will always be necessary (even if only to make the first docker instance of your immutable server).

Or is there some other theme at play I so not understand that means this idea is old hat?

</comment></comment></comment></comment><comment><USER8> I'm maintaining a small open source mobile app. The app is fairly popular and well liked.

However, there are also a lot of people who just send comments to the app store that the app is useless without feature x or is total crap if I don't change something.

Nowadays, I get anxiety when I just think that I should go to the app store and read the latest comments.

I understand that open source is about community and things should be made together. However, I haven't really got any contributions except few language translations.

I'm getting tired of the app and sadly it will be the last open source software I'll release under my own name. From now on, I'll just dump the source to somewhere and forget about it. Or keep the source closed.

Writing software, even open source software, should be fun. It shouldn't mean that one person writes everything and others complain that it isn't enough.

<comment><USER9> If you get anxiety when you to have read what others think about your app, your problems are somewhere else.. mostly taking into account that you're uploading it to the app store, a place where almost nobody knows what open source is and they don't even care.

</comment></comment><comment><USER10> Hey all. I'm on psudo-vacation, so I'm just going to leave this one comment and not read the rest of this thread or respond to anyone:

1\. This was a few weeks ago, but I literally woke up, grabbed my phone, checked my email, and had this sitting in my inbox. Not exactly a great way to start your day.

2\. Said person eventually apologized to me, and apparently didn't understand what open source meant or something? I don't hate him or anything. We all have bad days. I'm not perfect either.

3\. The reason that this gem is missing those emoji is twofold: I cannot distribute copies of Apple Color Emoji due to licensing, as I mentioned in the issue. IANAL, but gemoji is infringing on Apple's IP. I'm not willing to do that. For more on this issue: [http://words.steveklabnik.com/emoji- licensing](http://words.steveklabnik.com/emoji-licensing) Secondly, for some reason, Phantom Open Emoji doesn't have the full set.

4\. If you're willing to infringe on Apple's IP, you can use your own images, and then it all just works.

5\. It states in the second line of the README that this uses Phantom Open Emoji, contradicting what the author said in the issue.

6\. I actually have issues open to integrate Twemoji and Emoji One, which I assume have the full set?

Burnout on open source is real, and many, many days, I feel like it's all take and no give. If you run a company, please give your employees time to contribute back to the libraries you use. It scares me how much of the world runs on top of stuff that people basically do in their free time. It's not sustainable.

(an addendum: thank $DIETY GitHub lets you lock issues nowadays, or I'm sure this would be filled with terrible .gifs)

<comment><USER11> In the US, rasterized font representations are not copyrightable, in contrast to vector representations. Emoji are very clearly a font, and Apple uses a rasterized format, so using Apple color emoji is fine in the US.

[http://en.m.wikipedia.org/wiki/Intellectual_property_protect...](http://en.m.wikipedia.org/wiki/Intellectual_property_protection_of_typefaces)

<comment><USER12> That's a leap that's far from guaranteed by the cases summarized in your link. A court or the copyright office could just as easily say "just as the latest digital outline fonts have elements that can be protected as software, emoji have elements that can be protected as visual art."

<comment><USER13> But this person's username is _emojiofficer_ , that clearly means they're the official emoji officer and they must be right...

</comment></comment></comment></comment><comment><USER14> The user who filed that bug is Jake Lodwick, co-founder of Vimeo:

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

<comment><USER15> Anyone else feel uncomfortable by the above comment.

<comment><USER16> Not really, I think both guys in the issue discussion are obviously very smart, and I can identify with their respective frustrations.

I do think Jake's comments are a little harsh as the README refers to Phantom Open Emoji in the 2nd paragraph -- however if I had just spent hours debugging something like this, making an annoyed issue on GitHub could be the outcome.

</comment></comment></comment><comment><USER17> Yet he mocked the existence of a open source project not that long ago

[https://harthur.wordpress.com/2013/01/24/771/](https://harthur.wordpress.com/2013/01/24/771/)

<comment><USER18> I remember this controversy. [https://news.ycombinator.com/item?id=5106767](https://news.ycombinator.com/item?id=5106767)

Edit: See also: steveklabnik's apology. [http://blog.steveklabnik.com/posts/2013-01-23-node](http://blog.steveklabnik.com/posts/2013-01-23-node)

</comment></comment><comment><USER19> This is the same strategy I've used in open source projects. Handling the report is annoying, but then having to go spend time fixing the issue to help someone who is being an ass is soul draining. And it only encourages them and other people to be an ass to get what they want.

So I call them out and close or delete the issue, and if they get frustrated because of that, great! This doesn't mean I won't fix the issue eventually, just on my own terms without giving that person the satisfaction. Makes me feel a lot better.

</comment><comment><USER20> Contrast with this where someone puts up a short bit of code on Github and is mocked for it: [https://news.ycombinator.com/item?id=5106767#up_5106935](https://news.ycombinator.com/item?id=5106767#up_5106935)

<comment><USER21> This is a much better example. Heather put up code, Klabnik was an asshole to her. He really doesn't deserve sympathy for whining when a user asks that his readme expose the lack of functionality of his project.

That's actually a legitimate bug report, even if not delivered with sufficient kissing of Steve's ass.

What Steven did to Heather, however, is pretty typical of him. It's the way he treated me in our one interaction online.

<comment><USER22> Well, the readme _does_ expose the lack of functionality in the first line. It links to the underlying library which explicitly states that it's an incomplete set.

Also, because somebody behaved like an asshole in a different situation does not grant me the permission to behave like an ass in a different situation.

</comment></comment></comment><comment><USER23> > I like your gem otherwise, but it's called "emoji", implying that it's __the > __Ruby library for handling those characters.

That's not the first time I've encountered this assumption. I can believe that it makes sense, if you're will to willing to play the part of the layman user: "I want emojis, so I'll just do: gem install emoji"

However, I don't think it's too unreasonable for people with some basic level of experience to understand that there's no central authority granting library names. If it were a core library that came with the interpreter, sure, it's fair to expect that that is the library you're supposed to use. When you get into community-sourced libraries, names are just granted on a first-come, first-served basis for whatever service is hosting them.

<comment><USER24> > When you get into community-sourced libraries, names are just granted on a > first-come, first-served basis for whatever service is hosting them.

Maybe they shouldn't be.

I dislike Apache being called httpd in yum, as compared to apache2 in apt. I can see how a package called markdown wouldn't be a port of the original, but CommonMark, and that would be misleading, too.

If a package managing system doesn't care, it loses some pride in my eye.

</comment></comment><comment><USER25> The point I don't get is why he complains about that gem when he obviously found an alternative that better suited his needs. Why for heaven's sake not just use this but raise an issue. If we all started raising issues for for something beeing "not what I was looking for" github would be bursting at the seams. Is he really moping about the fact that the readme does not provide a full list of ALL emojis and whether they are supported? And why is a emoji gem required to work with "massage" and "satellite"?

</comment><comment><USER26> Pertinent follow-up. Jake was naive about open source norms.

See twitter conversations: [https://twitter.com/jonathanwallace/status/53368051800961433...](https://twitter.com/jonathanwallace/status/533680518009614336) [https://twitter.com/jonathanwallace/status/53367933259062886...](https://twitter.com/jonathanwallace/status/533679332590628864)

<comment><USER27> Maybe naive, but also impolite. Opening an issue with a passive-aggressive tone isn't likely to be productive.

<comment><USER28> That's really the problem here. Ignorance is excusable, especially in someone who hasn't got a lot of experience yet. _Rude_ ignorance is never so, especially around a library on Github where, if it's really that big a damn deal to you, you can always just fork, edit a big "THIS IS NOT APPLE COLOR EMOJI" note into the readme, open a PR, and see what happens.

</comment></comment></comment><comment><USER29> I recently got a bad review of one of my free WP plugins. The same guy published negative reviews for 3-4 other plugins also in row in the next days. Apparently some people are just mentally disturbed. If you think the emoji issue report was rude, have some fun with these "reviews"

[https://wordpress.org/support/topic/everybody-thinks-they- kn...](https://wordpress.org/support/topic/everybody-thinks-they-know-how-to- make-a-job-board?replies=1)

[https://wordpress.org/support/topic/bad-and- misleading?repli...](https://wordpress.org/support/topic/bad-and- misleading?replies=1)

[https://wordpress.org/support/topic/bait-plugin-for- google?r...](https://wordpress.org/support/topic/bait-plugin-for- google?replies=2)

[https://wordpress.org/support/topic/no-support-weak- plugin?r...](https://wordpress.org/support/topic/no-support-weak- plugin?replies=3) (I made the mistake to answer him which resulted in another set of awesomeness).

You just have to develop think skin. I'm still learning this slowly.

<comment><USER30> > I've yet to find any plugin (Free) that actually performs functions of a job > board.

That is some intense entitlement right there.

</comment></comment><comment><USER31> FWIW - the guy in question (Lake Jodwick) did apologize for his behavior:

[https://twitter.com/jakelodwick/status/533777782484897792](https://twitter.com/jakelodwick/status/533777782484897792)

</comment><comment><USER32> I don't find the opening post to be rude. Jake Lodwick simply states that he's wasted a lot of time tracking down a known limitation that should have been listed in the docs, and that he feels Labnik could try a bit harder to avoid wasting other people's time. Probably Jake was frustrated there. It's not something I'd consider worth posting, but he was hardly abusive.

Then, Labnik's post is pointlessly emotional and irrelevant, making a big deal out of a simple complaint. I feel like working with people like him would be more likely to make me burn out on open source. The author is acting dramatic and overreacting to a relatively mild comment.

</comment><comment><USER33> Sounds a great deal like what I've gone through in my attempts to evangelize Tcl as of late.

[http://morderwerk.de/Spoken.png](http://morderwerk.de/Spoken.png)

[http://morderwerk.de/He%20really.png](http://morderwerk.de/He%20really.png)

[http://morderwerk.de/hates%20potheads.png](http://morderwerk.de/hates%20potheads.png)

[http://xan.pw/twitter/](http://xan.pw/twitter/)

</comment><comment><USER34> I'm guilty of some severe cases of bike shedding bug reports back in my blunder years. Within my small model of reality I couldn't grasp why people wouldn't implement minor feature xy as it would have costed them seemingly only 10 minutes of their time. I appologize to anyone who had to deal with these.

</comment><comment><USER35> Regardless of the specifics of this case, I do feel like there is such a thing as "burning out on open source", a topic which is of interest to me at this point. I would like to read other people insights about this, this would probably help me better at setting proper boundaries in my own projects.

I found myself often struggling to deal with this kind of issue: How to be sure whether you are being used (possibly not even on purpose), or whether the issue raised really benefit the whole project?

On one hand we don't want to be used, on the other hand, we don't want to chill contributions of good ideas. It can be tough sometimes to assess properly (keeping in mind we all have bad days on top of all this).

<comment><USER36> I had a similar "open source burnout" recently. Since you asked for it, there is a blog post I wrote which might be of interest: [http://nxlog- ce.sourceforge.net/why-the-gpl-does-not-work](http://nxlog- ce.sourceforge.net/why-the-gpl-does-not-work)

<comment><USER35> I don't relate to your blog post. I am definitely not second guessing my use of GPL. That is another topic than the one here as far as I am concerned.

</comment></comment></comment><comment><USER37> I maintain the gitignore.io repo with about 900 stars and thankfully the contributors aren't as snarky. I will say that the users of gitignore.io are probably more on the technical side, but it just seems like Jake is not familiar with the culture of FOSS. That being said, He's a 'customer' of your 'product' and even though his delivery isn't the best, there may be something you can take away from suggestion.

When I'm evaluating a FOSS project, the first thing I try and do if I find something wrong is see if there is a way I can fix it and submit a PR. Then if it looks like it's out of my scope, I'll file a bug or look for another project.

For gitignore.io, I often take product decisions from the community, but I like to have a discussion about what the best course of action is. I still have open issues in my backlog that I just haven't found an elegant solution to yet. Thankfully gitignore.io has a small enough feature scope that you can't do much with it, otherwise i'm sure the project would become overbearing very quickly.

</comment><comment><USER38> I'm not sure I understand, what is there to see in this link?

Is there some underlying message to all this? Oh well, the issue was handled poorly or maybe the guy just went too far with this accusations, so what?

How'd this get to the front page?:O

<comment><USER39> I think it's the entitled aspect of some open source users this is demonstrating.

They expect everything to be the way they want it. they want all opensourced stuff to be polished, supported and free, without wanting to help out or chiping in.

<comment><USER40> >they want all opensourced stuff to be polished

That would be nice though.

Why would you release something to the public and put your name on it if it's lazily done?

<comment><USER39> This would be ideal, but in my experience evaluating some open source libraries, they were clearly works in progress or abandoned. I think people had good intentions when putting the stuff out there.

Maybe because github is free for public open source, stuff gets put out there before its polished?

</comment></comment></comment></comment><comment><USER41> Wow.

I'm honestly kind of happy right now that none of my projects are very popular....

</comment><comment><USER42> Remind me about this issue [https://github.com/olragon/meteor- handsontable/issues/6](https://github.com/olragon/meteor- handsontable/issues/6)

</comment><comment><USER43> Why can't everyone be nice to each other? </naive>

</comment><comment><USER44> Basic queuing theory says that if the rate at which issues are opened exceeds the rate at which they are closed (which is easy to do if the project is popular), the number of open issues will grow without bound. The result is that most bugs filed against any popular project can't be acted on. A good UI would help people understand this and set expectations accordingly. It's still very useful to have a database of known limitations and workarounds.

</comment><comment><USER25> The point I don't get is why he complains about that gem when he obviously found an alternative that better suited his needs. Why for heaven's sake not just use this but raise an issue. If we all started raising issues for something being "not what I was looking for" github would be bursting at the seams.

</comment><comment><USER45> Yes it's hard at times, I especially have trouble maintaining Django-Facebook as both of those dependencies change so freakingly fast. Let me know if you want to help out :) [https://github.com/tschellenbach/Django- facebook](https://github.com/tschellenbach/Django-facebook)

</comment><comment><USER46> AKA:

Tech Support Customers

Solution:

[http://www.despair.com/apathy.html](http://www.despair.com/apathy.html)

\---

In commercial software tech support is probably the biggest draw of energy, but is harder to ignore them than in volunteer-based efforts (like open source, tech forums, blogs, etc).

</comment><comment><USER47> There are many, many activities, paid and unpaid, in which people get confronted with entitled a-holes on a regular basis.

This is not unique to open source, or tech in general. This is a generic social issue.

</comment><comment><USER48> The reason I stopped being the maintainer on a popular jQuery library was the wave after wave of incompetent folks asking me to do their work for them. I don't mean mere API questions, or asking things around how the plugin works or does what it does. These were entire "Integrate this for me" questions. People unwilling to do the bare minimum of work. No matter how many examples or how much documentation, these folks flat out wouldn't do their own work. Beyond that, most of these weren't being asked by some 12-year old learning to code, these people would link to their commercial site and expect me to "Give them teh codez"

In retrospect, I should have taken the hard-line approach and directed everyone to StackOverflow and limit GitHub to an issue tracker. When it came to assholes making asshole comments and requests, I had no problem telling them to stick their overbearing request where the sun doesn't shine. Of course those folks were few and far in between.

<comment><USER49> If you ever want to go back in OSS development, include a disclaimer that you are more than willing to integrate it into their site, at your usual rate of $X00 dollars per hour, with a minimum of $Y hours.

The worst that might happen is that somebody takes you up on that.

<comment><USER50> That does not really help - people he's talking about simply do not read and do not care about what you did. Going through bunch of soul-sucking emails/messages/issues every day, even if you do not answer, is a huge demotivator for any public development work :/

<comment><USER51> Could it be a good idea to create a service where people can help with FOSS projects by being the 'intercept' between messages and the maintainers? I feel to inexperienced to help out with actual coding, but helping out with support emails or tickets (and only forwarding those that seem useful) is something I could see myself doing, for example.

And I could imagine that after helping out in this way for a while, I'd feel more inclined or more self-confident to start helping out with code.

Or does this already exist?

<comment><USER22> I don't think that such a service exists, but you can still do some of that. Pick any open source project you like, hang out on their tracker and IRC channel and answer questions. You might not have the permissions required to actually close issues, but you can certainly do some grunt work: Try to reproduce an issue, give concise description in a comment, create a PR with a test case etc.

IRC channels are a good place to start if you know a little about the usage, but not much about the actual code: Answer beginner level questions first. For any moderately complex project there's always tons of these. And when you feel confident, move forward to more complicated ones. It's a great way to learn.

</comment></comment></comment></comment></comment><comment><USER52> A pull request where two guys acted like jackasses towards each other, and where we instinctively try to pick sides based on our past experiences and beliefs.

I think really thinking on why I'm siding with one person almost immediately despite not having much context in this is really revealing and maybe not a little unpleasant.

<comment><USER53> One of the guys wrote something and published it as open source. The other got to use it for free but still complains with an inappropriate tone. Hard not to side with the first one by default.

<comment><USER54> Offering incomplete software as open source doesn't make it any less incomplete. Are we giving out blue ribbons for participation now?

<comment><USER55> What the hell does "complete" even mean? No software is ever "complete".

Literally every open source license says something along the lines of "there are probably bugs and stuff; it's not my problem".

I really can't even comprehend this mindset of "unless it'll work for people without issues, don't put it on github".

<comment><USER56> Also, since when was there a definitive list of "over-animated emoticons" that one had to fulfil?

</comment></comment></comment></comment></comment><comment><USER57> By the way... what is the raison d'etre of this gem? I just don't get why anyone think it's a good idea to replace a character with an image. It's like to replace all "e" characters in this comment with a .png congaing a fancy custom "e"...

<comment><USER58> > It's like to replace all "e" characters in this comment with a .png congaing > a fancy custom "e"...

So, uh, like Web Fonts, then?

<comment><USER57> you mean "in a totally different way", do you?

you are comparing a gem replacing, in a string with html content, a text fragment with an '<img />' tag, with a way to load and apply custom font from a remote location to a web page text region.

While, closing one eye, the effect of the two solution are similar, the solutions are totally different from the technological point of view, from the abstraction layer when they are applied to the practical implications (try to do a simple cut-n-paste from the browser to a text editor, for example)

<comment><USER58> I know they're technically different; what I wanted to point out is that it's not such a far-fetched idea.

</comment></comment></comment></comment><comment><USER54> You may take issue with Mr. Lodwick's tone, but he's not wrong. This gem is incomplete, and for a gem occupying the namespace "emoji", I think it's reasonable to expect the full, standard set of emoji. Passing the buck to another open source library is irresponsible and, frankly, lazy.

Perhaps the maintainer _should_ burn out, and let someone take over the gem who'll commit to feature-completeness.

<comment><USER59> > Perhaps the maintainer _should_ burn out

I find this comment in poor taste. A burnout is not something I wish to anyone.

<comment><USER54> To clarify: by "burn out" I'm referring to becoming tired with a project. I'd hope that the maintainer would simply move on to another project.

<comment><USER13> What do you mean by "move on"? I'm sure Steve hasn't been spending the majority of his finite amount of time since he put the emoji gem code up on github working only on the emoji gem.

</comment></comment></comment></comment><comment><USER60> Replying with an attack and closing comments is definitely something a douchebag would do. Free or opensource doesn't mean you get to be irresponsible about what you release or maintain, if your project has some caveats they should be listed explicitly.

<comment><USER13> Actually, it does-- have you ever even READ the MIT license?

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</comment></comment>


It's a federal crime to visit a website after being told not to visit it - <AUTHOR> https://www.washingtonpost.com/news/volokh-conspiracy/wp/2016/07/12/9th-circuit-its-a-federal-crime-to-visit-a-website-after-being-told-not-to-visit-it/ <comment><USER2> [http://by-visiting-you-are-guilty-under-cfaa.com/](http://by-visiting-you- are-guilty-under-cfaa.com/)

</comment><comment><USER3> Does it go the other way? Is it a federal crime for a website to gather information about me after I've told them to stop doing so?</comment>


Mathematica home edition, finally. $300. - <AUTHOR> http://www.wolfram.com/products/mathematicahomeedition/qa.html

<comment><USER2> I own a very old student version of Mathematica, not that I can use it, since transferring it to a new machine was beyond my technical abilities, thanks to their copy protection.

At $300 I would buy it, even though I have no specific need, it is a great application.

But I'd hate to spend $300 and only be able to install it exactly once.

</comment><comment><USER3> On a side note, the scrapbook of the company history is very interesting (a startup story beginning >20 years ago with one guy)...

[http://www.wolfram.com/company/scrapbook/page02.html#1988_St...](http://www.wolfram.com/company/scrapbook/page02.html#1988_StoryGetsOut)

</comment><comment><USER4> Not in the UK tho, WTF!? I have been badgering Wolfram about this for _years!_

<comment><USER5> Yeah, I was really pleased when I saw the headline, and then - only for the US/Canadian market. :-( I'm guessing it has something to do with being able to identify whether a credit card is linked to a person or an organisation. Does anyone know the details of how that works?

<comment><USER4> Wolfram do have a UK presence tho', I've spoken to people in their office here (and have just emailed them about this). So there's no reason they couldn't do whatever checks they do here too.

I'm using Sage at home at the moment which is fairly impressive in its own right, but it's not the same. Check it out: <http://www.sagemath.org/>

</comment></comment></comment><comment><USER6> how is Mathematica compared to Matlab? As I understand Mathematica is for all kinds of math while Matlab is basically only matrix and linear algebra- stuff(with a lot of libraries for applications of that).

Is Mathematica as good as Matlab for linear algebra?

<comment><USER7> for plotting, matlab is a bit 'lower level' where you map a function over a range and then plot the list of return values

for linear algebra, matlab is more succinct, it has "'" transpose and "^-1" for inverse, so you can type x = A' _(A_ A')^-1*b

<comment><USER8> You can do that in _Mathematica_ , too: <http://documents.wolfram.com/mathematica/functions/Transpose>

_Mathematica_ has an extensive set of typesetting shortcuts. You just need to know where to look.

</comment></comment></comment><comment><USER9> I dumped Mathematica many, many years ago when they turned evil and started making it stop working after a month if you haven't registered it.

<comment><USER4> What did you switch to?

</comment></comment><comment><USER10> I was trying to avoid reading Hacker News more than once a day but I was glad I saw this on my second visit! :)

</comment><comment><USER11> Can someone please make a joke about a new kind of science or how celluar automata solves every problem in every field? (I couldn't think of any)

But seriously, what can I do with mathematica? Should I buy this?

<comment><USER12> Mathematica is a very powerful Lisp-based programming language(without user- visible s-expressions). It is (to an extent) designed for numerical/symbolic math; there are a lot of libraries available for that.

However, they've added a lot of other libraries, for things like image processing, etc.

It is a very powerful system, however somewhat limited by poor market penetration (nothing else uses it, so only people with Mathematica could use it).

<comment><USER13> A friend of mine who's a physicist claims that he's so used to Mathematica that he uses it for everyday scripting tasks, the way other people use Tcl or Perl.

<comment><USER14> I came across a web page made in mathematica once...

<comment><USER15> Yeah - I met a chap at an openbase conference in 2005 that was using it for professional web-application development. I've been intrigued by the idea ever since. I'd be interested to hear more stories from people who really leverage it like this.

<comment><USER16> I use mathematica for general scripting tasks. It takes a little hackery to do things like use it in a pipeline and such: <http://ai.eecs.umich.edu/people/dreeves/mash/mash.pl>

</comment></comment></comment></comment></comment></comment><comment><USER17> Can you do all the image/signal processing stuff with the home edition? <http://news.ycombinator.com/item?id=382986>

<comment><USER18> The answer is right there on the linked page.

Q: How is Mathematica Home Edition different from the professional version of Mathematica?

Mathematica Home Edition is a fully functional version of Mathematica Professional with the same features.

<comment><USER19> I'm sorry, I'm probably missing the point. Why is it the same product with the same features but with a different name?

<comment><USER12> The problem with Mathematica for serious development is that you need Mathematica to run the stuff. So if you write a gadget/utility, only people with Mathematica can run it.

This is an attempt to get deeper penetration into the hobbyist market.

<comment><USER20> You can freely distribute your UI-based 'gadgets' and what not using Mathematica Player, which is a free download. <http://www.wolfram.com/products/player/>

</comment></comment></comment></comment></comment><comment><USER21> sweet! Now I need a project so I can put my money where my mouth is: <http://news.ycombinator.com/item?id=369109>

<comment><USER22> I'm enjoying working through [http://www.amazon.com/Illustrating-Evolutionary- Computation-...](http://www.amazon.com/Illustrating-Evolutionary-Computation- Mathematica-Intelligence/dp/1558606378) .

</comment></comment><comment><USER23> Doesn't the Mathematica for the Classroom version have additional notebooks that produce classroom handouts conveniently? I see that it has an even lower price for eligible teachers.

</comment><comment><USER24> "We are sorry, but this item is not currently available for your region."

My region is Northern California. Hmmm...

<comment><USER25> Are you proxied?

</comment></comment><comment><USER26> Great price compared to the Pro edition. How does Mathematica compare with R for statistics?</comment>


What happened to Steam Machines? - <AUTHOR> http://www.pcgamer.com/what-happened-to-steam-machines/ <comment><USER2> Didn't SteamOS mostly become a hedge against Microsoft locking away first class access to their platform for Games from competitors like Valve and the titles they help sell/publish for developers?

In the years since SteamOS first launched the open source hardware drivers have also gotten much better. Valve continues to contribute towards better OpenGL and Vulkan (note, mis-spelled as a distinct brand name) support (new features, hitting current contemporary hardware support levels/etc).

The biggest issue that I can see is the number of development studios that only target Windows (currently 90+% of the market share); it tends to be better if they use a development kit that also allows for builds on other platforms, but if the developer doesn't have basic automated testing on either a Mac or Linux/BSD/etc system of some other kind then platform specific bugs easily slip in.

<comment><USER3> 90+% without Linux? That's not how it feels like, though. Maybe it's because the genres I play are accidentally also the genres with the most Linux support, but it feels like beside the odd game here and there or an older incarnation of a game I like, everything is on Linux. And with most engines providing the easy choice to add another OS to build for, the numbers should be growing even more.

<comment><USER4> I also don't think it feels like 90+% these days. My own steam profile says 144/323 games support Linux, plus I've got some number more Linux capable games from bundles that I never imported into Steam but either played on desktop or in some cases the mobile version. (Then there's the "classic" Linux games from the dark ages that I really liked a lot like Battle for Wesnoth, Tremulous, and BZFlag.)

Of course of the steam ones, I've encountered several that either flat out didn't work on my system (probably the hardest part of shipping linux binaries is testing for many distros and setups, SteamOS/Ubuntu gets you most of the way there though) or they worked poorly. So most of my gaming is still in Windows 7 but I don't really use that OS for other stuff. Of those 144, I've played maybe half of them (my backlog is huge..) but mostly not on Linux. Either because they didn't support it when I played (Half-Life games as probably the oldest example) or I tried and it didn't work [well] or I just didn't even bother trying.

Even for the engines that don't support one-click Linux (or Mac) builds, it's not an insurmountable effort to support Linux, and if the game was already targeting multiple consoles+PC they've probably abstracted most platform specific stuff already. So it's just an economic issue. A lot of the technological issues have been mitigated or gone away.

</comment></comment></comment><comment><USER5> The number of games in my steam library that have Linux/Mac support now is over 100 versus a few years ago where it was maybe 10 games. My gaming PC died a week ago, and I started looking into getting a new pc. But the thing is I don't feel forced to do a Windows machine to have a gaming PC. I don't play many AAA games, and am considering going with a Linux build.

I think the healthier ecosystem for non-windows games is what Value was going for. And it hasn't stopped shifting towards that direction.

</comment><comment><USER6> The thing that happened with Steam Machines is the same thing that happened with Linux-based netbooks.

In the netbook case, vendors needed something that would run on lower spec hardware, and would be cheap enough to not be a major component of the machine's price. Windows Vista was to resource heavy, and expensive. But then Microsoft responded by re-releasing XP, for something like $10, but only for netbooks, so a couple of the advantages of Linux had evaporated.

Steam Machines were a response to Windows 8, and the direction that Microsoft was heading. After Steam on Linux became a reality, Microsoft responded by making Windows 10 more palatable than Win 8.

<comment><USER7> You also had Intel move in with Atom, and the two of them combined basically put down a stringent definition of what a netbook was supposed to be.

This in large part to avoid Netbooks eating into their lucrative ultra- portable platform that corporations kept buying for their road warriors.

The fear being that corporations would switch to Netbooks with a mobile data connection and simply access corporate computing resources using Citrix or similar.

Note btw that this was much the same idea that Google had when they first started pushing Chromebooks, to the point that one of their big launch demos were the ability to run Citrix.

Never mind that this also mothballed any plans for Android beyond phones. As seen with how even the 3.x "tablet" UI, that was perfectly adapted for landscape use, was gradually rolled back.

</comment></comment><comment><USER8> Disclaimer: I can't stand the Windows hegemony, period, much less their dominance of PC gaming (and I'm sure Gabe felt similarly).

Valve will need to dump a lot of money into driver optimization for 3D hardware in order to make this work. Windows 3D driver optimization, like it or not, is top-notch. I believe early demos of games on SteamOS were running at something like half the framerate (or less) vs. exact same game running on Windows on the same hardware.

There is also the matter of "is it a PC, or is it a console?" since the inertia of people's brains doesn't really have a defined space to put something in-between into.

</comment><comment><USER3> What's really stopping us here? For quite some time it was graphics drivers support: [https://www.youtube.com/watch?v=IVpOyKCNZYw](https://www.youtube.com/watch?v=IVpOyKCNZYw)

Is this still the case? I hear from many people that at least on Ubuntu that's no problem anymore. Are the graphics cards still overheating? Any experience in that area?

And yes, Valve could've done things better, but it's not that bad, that you couldn't do anything with at. As said, at least on Ubuntu with Steam gaming should be fine. And if we got one thing from Steam it's that more and more games are deployed for Linux as well.

Really, why hasn't it lifted off now? Is it really that users are so stupid that they don't see a $0 offer is better than a $100 offer for an OS? Hard to believe.

<comment><USER9> Not really. That $100 offer comes with better performance, support, and GPU drivers; users do care enough about those.

<comment><USER3> Is that still the case? Last I checked the graphics support was there. Exactly in this time frame since SteamOS announcement they pushed NVidia and friends to provide better Linux support as well.

<comment><USER10> Yes, it's still the case. The Linux support is far better than it was a few years ago, but not even remotely comparable - NVidia (and I think AMD too, but I have a NVidia card) provide a new Windows driver with specific optimizations for almost every AA to AAA game. For example: The last Linux driver in the "short lived" branch came out at 09.05., the last Windows driver 29.06

<comment><USER3> I see. Sad to hear that.

<comment><USER11> I always assumed the best approach would actually to have a console-hardware emulation for gaming.

</comment></comment></comment></comment></comment></comment><comment><USER12> I'm pretty sure that Valve rushed it, botched it and now it's waiting to have something substantial before giving it another go. They have been putting a lot of work on improving Linux as a gaming platform, so I'm fairly confident it isn't just something to keep MS at bay.

</comment><comment><USER13> SteamOS is based on Debian last I heard. Not that many games for Linux and at least 90 percent of video game companies target Windows. Until Linux gets more support, SteamOS will not be viable enough for people to buy.

Anyone remember the Indrema that was Linux based? It had some of the same problems.

<comment><USER3> > Until Linux gets more support, SteamOS will not be viable enough for people > to buy.

I don't see why this argument is reasonable. Windows is currently costing you about $100. Linux is currently costing you exactly $0. Linux has come so far, I doubt there is any area where it doesn't make you at least 80% satisfied. So the choice would save you about $80 of value, two triple A games in a Steam sale.

And I don't know what your choice of games are, but while there may be really 90% of steam product listings without Windows support most people also wouldn't buy/play about 90% of the products. If you look at the interesting games the feeling is more like 80% of what we need is there as well. And the rest will certainly follow once the user demand for Linux is there.

So, please continue to think what the real reason for not switching is. The providers would certainly follow. Most already have a Linux deployment pipeline ready and just wait for users to ask for it.

<comment><USER13> Ok a better argument would be that GPU companies put driver priority on Windows drivers and don't do too much for Linux.

Some popular games like Civilization VI have been ported to Linux but they run better on Windows and faster for some reason. I suspect the Windows drivers are better optimized. I triple boot Linux Mint, Windows 7 Pro, and Windows 10 Pro. Linux Mint seems to play the Civ 6 game slower than 10 or 7.

<comment><USER14> Depending on your hardware (of course), many AAA games run fantastically well on Linux. I'm playing Mad Max for example, and it runs beautifully on a GTX960M, great framerate and no glitches that I can see.

</comment></comment></comment></comment><comment><USER15> Valve is a lot like a small version of Alphabet in that there are no adults around to make sure people are dilligently finishing and polishing products.

I say this as an developer myself. After a 20 year career of working on other people's businesses and struggling to put my own things together, the whole, "we'll make amazing things if we just get away from management" thing is a gigantic, unproductive trap of thinking. Few programmers have the necessary self-awareness of their own limitations to stick to a problem all the way through to the end.

<comment><USER3> I work in a big corp's software science department and this is really how it feels like. Lots of awesome ideas, but everything is just 40%-60% done. And you can't really blame budget or upper management for this, since in our industry it's totally fine to come 10 years late to the party. In this market segment you may still be the first.

<comment><USER4> You should have lunch with the non-science department guys and see where they're at. I would bet it's pretty similar, not everything but lots of things only 40-60% done, PMs and some devs have lots of awesome ideas that can't all squeeze into the next planning horizon. The difference is things at least get shipped in that state and worked on incrementally with lots of flags to hide the roughest edges, ideally at some point things are worked on enough and declared 90+% "done" and only worked on in maintenance mode but there's always new things shipping half-baked.

</comment></comment></comment><comment><USER16> GNU/Linux and BSDs aren't a platform for gaming, it is quite easy to see on their conferences.

One goes to WWDC and BUILD, even Google IO, there are always a few tracks related to game development, libraries and debugging tooling.

GNU/Linux and BSDs are all about file systems, kernel drivers, license advocacy.

When graphics get talked about, it is usually about X, Wayland or how to get vendors to release specs, hardly motivating for professional game developers.

I eventually came to realize that regarding gaming, the OS X/Windows comunities are closer to what Amiga and Atari ST were, than GNU/Linux and BSDs will ever be.

<comment><USER14> > _GNU /Linux and BSDs aren't a platform for gaming_

My huge library of GOG, HumbleBundle and Steam games, some of which are AAA titles, begs to differ.</comment></comment>


Glitch by TinySpeck. Flickr founder's gaming startup. - <AUTHOR> http://glitch.com/

<comment><USER2> I wonder if this game will turn into a photo sharing site, like the first one?

<comment><AUTHOR> It's more likely that this might have morphed from game never ending.

</comment></comment><comment><USER3> From the looks of the teaser, looks like it could be similar to Little Big Planet, which has been a hit on the PS3.</comment>


Memorizing a programing language using spaced repetition software   - <AUTHOR> http://sivers.org/srs <comment><USER2> As others have mentioned, its less about the syntax of a language and more about the plethora of libraries that is the real boon when it comes to using a programming language. It has been said that the majority of a tough problem is worked out unconsciously. If we eschew memorization for "just in time" methods, we are essentially putting a hard limit on the type and difficulty of problems we're capable of solving.

I personally think the amount of library functions memorized is the biggest difference between average programmers and the so-called 10x programmers. An extremely high level of fluency with a programming language environment is invaluable when it comes to efficiency and code quality. It is analogous to conversing in a language where one has to look up every other word compared to a native speaker who has a deep fluency. It's not just a matter of speed; the depth and quality of thought is orders of magnitude greater in the fluent speaker. The more of the heavy lifting you can do unconsciously, a vastly higher level of output one is able to produce for the same amount of mental effort. We accept this in just about every profession, yet we resist when it comes to programming. Personally, I'm glad my doctor memorizes a large amount of the facts he uses in his day-to-day work.

It is unfortunate that just about every new language brings with it a new set of standard libraries that we must learn to use effectively. We give up so much expertise and efficiency when we don't allow ourselves to build up a high level of familiarity with them. I can imagine a future where there is a standard library of methods that every programmer attempts to memorize and that every new programming language is programmed specifically for this standard library. We are already seeing this with language frameworks like the JVM and .NET, but we need to go even further. Hopefully libraries themselves will be created specifically to be easy to memorize.

<comment><USER3> The problem is that languages and especially libraries change too frequently. A doctor can learn the name of every bone in the body and that knowledge will for the rest of his life. In programming, there are very few things that will still be the same in 20+ years and we have no idea what those things are. It depends on the field but things can change so much within 2 or 3 years that its just not worth memorizing everything.

<comment><USER4> The timespan of change doesn't matter; the question, as always, is whether the benefits outweigh the cost.

Now, the cost is approximately <5 minutes per flashcard to give you roughly 95% recall (more details: <http://www.gwern.net/Spaced%20repetition#what-to- add> ); so the question is, does not knowing something you could've put into a flashcard - the consequences of not knowing it, the time it takes to look it up, whether you will even know to look it up, etc - outweighs the cost of a few minutes' review over that time period.

I think for a lot of stuff this can be true: shell scripting is not going away in 20 years, for example. If you're programming in it routinely, a language you will use for only 10 years can be worth memorizing for a while. If you're using a tool every day for the next year, there's going to be a lot worth memorizing there too.

</comment></comment></comment><comment><USER5> Thanks for posting this.

I hope this format is useful to you guys. I actually spent the last two days making a video of this, with screen recordings of using Anki and such, and then felt it's a lot more efficient to just get the info on a static HTML page instead.

Any advice appreciated.

\- Derek

<comment><USER6> In our extensive user testing we have seen our users make great gains by using SRS. In blind Ruby coding tests we have seen users complete them faster with more confidence in their abilities and results they generate. Got some great data and numbers on exactly how much advantage learning this way gives you. Plan to release it when we launch in a couple of weeks. We are <http://www.codesonic.com/> by the way.

<comment><USER7> > In blind Ruby coding tests we have seen users complete them faster with more > confidence in their abilities and results they generate.

Are these users' results actually better? In other words, is their higher level of confidence justified?

<comment><USER6> Yes, it's pretty obvious that the SRS makes a significant difference to the abilities of the users. There seem to be several gains but the biggest are

1\. time saved looking things up 2\. knowing what is possible and what tools you have at your disposal built right into the language.

</comment></comment></comment></comment><comment><USER8> I was a contributor to Anki and one of the earlier language learning bloggers who wrote about spaced repetition for Chinese learning. One thing I noticed at that time was that those of us Chinese learners who were programmers went _crazy_ about spaced repetition... some went so far as to SRS at the exclusion of actual reading. Other language learners blogging about SRS, often weren't so thrilled about the concept.

[http://www.sinosplice.com/life/archives/2009/08/06/the- space...](http://www.sinosplice.com/life/archives/2009/08/06/the-spaced- repetition-party)

At this point, I'm seeing the same thing again, but distributed to a larger group of people. Everybody and their cousins are making SRS programs for learning languages, often Chinese, and that giddy feeling I had when encountering the idea of SRS seems to be all over the place!

How I wish I could explain that the context matters and they'd learn faster by actually using these discrete chunks of knowledge in context! That reviewing decontextualized data is a poor way to synthesize most thing! But who would listen? I wouldn't have 4 years ago.

SRS is seductive. It's amazingly good for things in which there is a set number of essentially unrelated pieces of information to memorize (e.g. 5000 common Chinese characters), but it's terrible for learning something more nuanced (e.g. how to read Chinese). I do still keep it as a tool, but it's a special purpose one.

<comment><USER9> But can't you also use SRS with larger chunks? I think that's what the All Japanese All The Time author does and he's fairly confident about the results.

<comment><USER8> Putting whole sentences into an SRS definitely beats isolated words, but it's still not a replacement for actual reading.

The AJATT guy was big on SRS, but he was also watching _hours_ of Japanese TV each day and even playing Japanese music and various other MP3s in his sleep. He got the requisite comprehensible input. He achieved a good level of language skill, but for the time he put in it wasn't exceptional.

L2 acquisition linguists generally agree that the important thing is "massive comprehensible input". This could be reading or listening. There is disagreement on whether if input _alone_ is enough-- hardliners such as Krashen would say yes, others would say no. However, there's little disagreement that input is the most important factor. And an SRS will never keep up with actually reading a book when it comes to input.

3 years ago, I was that guy with a huge SRS deck, reading AJATT and writing my own blog about it. If you're unconvinced with the above, all I can say is make your huge SRS deck, do it daily and then come back in a few years and let me know how it went.

<comment><USER9> Haha, no, I believe you! Just curious to hear another perspective on it... and I had forgotten that he was getting hours of passive input in addition.

It just always sounded interesting because I had reasonable success with flashcards for single words. In retrospect, that was before I had the ability to read even short stories, so maybe I am remembering the utility of them wrong, or they seemed useful because the alternative was nothing.

</comment></comment></comment></comment><comment><USER10> This is a good post that I'm glad to see refers to a lot of the work done on the subject of memorisation and it would be very useful for vocabulary building in language acquisition (amongst other things).

I can't see the utility for programming languages (compared to human languages) however as the grammar and vocabulary of programming languages are tiny in comparison. The best way to learn them is to write something with them (IMHO). The available libraries are of course broader but the subset you use tends to differ from person to person and actual use will tend to reinforce what you most often use.

<comment><USER11> The "vocabulary" in a programming language isn't really the reserved words.

It's the _libraries_. Deep recall of the standard library of any major language would probably improve programming fluency a lot -- and it might improve code quality too.

I wrote an honours research proposal on this; email me (see profile) if you want a copy.

<comment><USER12> Having seen a lot of code that duplicates basic functionality of libraries used in the project I'm working on, just writing code might even be counterproductive as opposed to a systematic way of learning the libraries and their usage in the project, reinforcing bad behaviour.

<comment><USER11> Right. In my proposal on the topic, I proposed dividing a freshman CS class into two groups. One group would use spaced repetition, the second wouldn't.

To compare the groups, I proposed using a few common metrics (SLOC, cyclomatic complexity, Halstead's metrics) to get a gauge of the different _size_ of solutions. My guess was that a more "fluent" student would write shorter and simpler programs simply by not needing to reinvent.

<comment><USER13> But (in reference to the parent topic of learning libraries vs. learning language primitives) shouldn't freshman CS students be mostly NOT using library functions? For example the classic exercises in sorting, learning various sorting algorithms, or manipulation of tree structures, matrices, etc. if you're just using library functions you aren't really learning what's going on.

Not really commenting on spaced repetition here, that should be helpful in either case.

<comment><USER11> It depends a lot on the structure of the course.

At my university the freshman course was, for two years, taught in Haskell. To my eternal shame I managed to dodge most of the first year with a fistful of RPLs, so I never got to sample it.

The result was that lots of students dropped out of computer science and went elsewhere. More than had when being taught something else.

So they switched back to a intro course based on Java (which is their main teaching language for the first two years, C is the second language which is picked up in the 2nd half of the first year). Then you go on to bog-standard Data Structures & Algos / Computational Structures courses, Algo course etc etc which is where you learn the ins and outs of sorting, trees and so forth. Or, in my case, you barely do so because you are a lazy student who didn't do his homework.

The upshot is that you wind up spending most of the intro course teaching the mechanics of Java and motivating students with "interesting" examples. Various graphical geegaws, basically. In such cases students usually aren't using the standard lib, they're using a provided library.

</comment></comment></comment></comment></comment></comment><comment><USER14> I've been doing this for almost a year and I agree it accelerates programming languages/libraries learning. Not having to switch between my text editor and the language/library reference lets me focus on the hard problems.

As a programming languages geek, a few months ago a realized that every time I came back to a language that I had learned earlier, I'd forgotten a good chunk of it, rendering all my efforts in vain. So I started using Anki. Here are a few tips from my experience:

\- Koans[0] are great as source material. They're available in almost every mainstream language, the problems are usually solvable in less than a minute and you can just copy & paste.

\- Always open your repl and type your answer. Otherwise you're not really thinking about the problem but just memorizing the answer.

[0] [https://github.com/search?q=koans&ref=commandbar](https://github.com/search?q=koans&ref=commandbar)

*Edit: BTW, I've got lots of Ruby, Python, Clojure, Erlang/OTP and a few Dylan flash cards, if anyone's interested.

<comment><USER15> Interested, in particular the Python ones! Do they go over the Python standard library and "pythonic" idioms?

Maybe you could put them on github, perhaps?

Only a few weeks ago I first read about the spaced repetition technique, and my first thought was "what would I want to memorize? maybe I could use this to learn the parameters and usage of Python (or some other language)'s standard library" ... and there it is, on HN, including someone offering a set of flash cards, saving me that work :)

Although creating one's own flash cards is a good first step in learning, I wonder how good it is (in that particular regard) to someone already reasonably familiar with the standard library, just wanting to save time by less looking up in the docs?

</comment></comment><comment><USER16> I have been programming for the last 15 years and I still sometimes look things up, even in languages I use daily. I would not really change this, since if I use it often I will remember it - - and if not, it's just one search away. I think memorizing random facts is a really bad way to become a better programmer - - much better ways is to solve problems and read expert code (via ex. GitHub).

Regarding the memorization technique I am unsure if this is the most effective way of remembering things. The book "Moonwalking with Einstein: The Art and Science of Remembering Everything" presents a lot of tricks on how to memorize things that could be more effective than the method described in this article.

<comment><USER17> If anything the most important skills are the "meta" ones - being able to judge search results quickly for their credibility and knowing what vocabulary to use.

And it is a good idea to look things up every now and then because they change. In the olden days if you wanted to open a file you just did it. Nowadays you have to consider things like TOCTOU, process credentials, character sets, permissions to require/set, virtual locations (eg "My Documents", localization), quotas, race conditions, fsyncs and renaming of temporary files etc. Heck even adding two integers can result in security flaws if not done carefully

<comment><USER18> Absolutely about the change point. It's also valuable to understand why things have changed, memorization is not going to help you with that, but you should be able to at least notice that things have changed and be able to conceptualize why they have.

</comment></comment></comment><comment><USER19> Once you know a few languages, picking one up in the same family isn't that hard. The biggest challenges, for me, when picking up a new language is to:

1) Learn to write idiomatic code.

2) Learn the name of the library functions, so your flow isn't constantly interrupted by looking for what you need.

1) I think, can only be done through reading other people's code. But I've previously thought about doing 2) by using spaced repetition.

<comment><USER20> _2) Learn the name of the library functions, so your flow isn't constantly interrupted by looking for what you need._

Eh, this isn't necessary. I've been programming (and continuously making a concerted effort to expand my programming knowledge) for more than a decade, and memorization of anything simply hasn't been very helpful.

For example I have no idea what Python's regex syntax/library function is, even though I've used it a dozen times in the past. But that doesn't matter: alt-tab to chrome, ctrl-N, "python regexp", stackoverflow pops up with an example, copy-paste, done. Five to ten seconds, max. Far from breaking my flow, it's become an integral part of it.

Zed is the same way, for what it's worth. He talks about it in a Peepcode screencast. "I memorize concepts, not names."

<comment><USER19> If you don't memorize anything you'll be going to stack overflow for everything. If you spend 10 seconds everytime you need to get the first char of a string, a substring, create an array etc you'll be wasting an awful amount of time. Knowing the core functions is a huge timesaver. Python's regexp functions are arguably not 'core' library functions.

<comment><USER20> _If you spend 10 seconds everytime you need to get the first char of a string, a substring, create an array etc you'll be wasting an awful amount of time._

Not at all. You only need to do it once for the current program you're writing. Now you have a working example to refer back to, within the program. So the lookup time only comes into play the first time you need to do a certain thing. It's a negligible constant factor (about a couple minutes in total per program, and without interrupting flow).

Also, being prejudiced against those who have a bad memory is not helpful.

 _Knowing the core functions is a huge timesaver._

Not really. By using Google effectively, it's possible to be productive in any language without knowing any of the core functions.

</comment></comment></comment></comment><comment><USER21> This seems counter-productive to me -- you're going to be spending a lot of time memorizing functions you'll never use.

If you just look up function when you need them, you'll memorize the most important ones you use over time, no special practice needed.

So I really can't see how this isn't the worst form of "premature optimization". I guess it's fun if you've got nothing better to do, but I'd never recommend it.

(But I'm not saying you shouldn't read through a language and its libraries so you know what's there _conceptually_. That's a good thing to do, so you know what to look up later.)

</comment><comment><USER22> Seems like a less than efficient way to learn and remember a programming language. Unlike natural languages, we can write programs with programming languages. We can run these programs, and if they still work, then they're probably still correct*. You can't do that with written/natural language.

As far as remembering programming language constructs and vocabulary, the way to do it is do projects. You use what you learned, and naturally, you're going to come back to it when you have to fix a bug or implement a new feature. All the while, you're building something good, too.

Another thing. If you're using a well-designed language, the concepts will incrementally build on themselves. They won't just be a bucket of orthogonal concepts, (like PHP, which seems to be mentioned in the article). Therefore, by learning fundamentals, you can more easily understand and decipher more advanced concepts. So, maybe you did forget what something does. But after a few minutes entering commands into a repl, you fully understand it again, because of your crystallized knowledge of other concepts.

I can't imagine a worse way to learn a new programming language than brute memorization.

<comment><USER23> What you say is true. But the way the human memory works makes the PHP library thing a non-issue. Even if it's badly designed, even if it's not well made, you will probably remember it in the same time frame. Maybe a little slower but not much. That's the flexibility of the humain brain for you. It's not picky at all. I'm a C++ programmer but I remember myself learning and remembering the PHP functions very fast a few years ago. The PHP library is just a bunch of stuff put together and yet I still remember a lot of them today. Even the parameter names. Even in spoken languages this applies. In French, you have to memorize the spelling of every word if you want to write without making too many mistakes because the spelling of most of the words doesn't make any sense sometimes. Sometimes the word is coherent with the sound, sometimes the word has mute characters, sometimes the word is bizzare because it comes from Old French... You have to remember everything. Ok maybe I shouldn't have picked French because we do have a big problem about dixlexia and the average teen douchebag can't even spell the word poker.

</comment></comment><comment><USER24> Oddly enough, I've tried SR multiple times in the past, with very bad outcomes. For example, if I added 10 new english words on day 1 (english is my second language), I would only recall ~10-20% the day after.

Then a few days ago I started reading The Memory Book which really emphasizes on _visualizing_ things, making correlations, etc. The effort of visualizing and using imagination really made a difference: in one hour I memorized the list of 50 states forward and backward with almost 100% accuracy after 2-3 days (I had never head of some states before).

Quickly after I realized that my limited english vocabulary was also the weakness in this system, so I started visualizing and adding new words to Anki once again. The result is that my recalling after 24 hours is close to 80-90% for new words, which is encouraging.

I've been doing this for ~1 week, so take it with a grain of salt, but for me it seems that visualizing the words _and_ using SR is helping. It takes 3 times the effort, but as long as I remember things, I don't care.

The idea of applying the system to programming sounds interesting, and definitely worth a try.

<comment><USER11> The Loci Method?

It's a well respected way of storing information. But (drawing a terrible analogy) it's a linked list, not a hash.

It's hard to perform a random lookup on something 2/3rds of the way through your mental tour.

SRS works on the well understood phenomena of repeated exposure and tested recall. They're very good at imprinting atomic information even if that information has no context whatsoever. The original research was done with randomly chosen letters.

<comment><USER24> To solve the hash problem you can use association and substitution. For example, while learning the word bowler the other day I imagined a bowl that served as a "tana" (my first language translation) for animals. It's a ridiculous association but it kinda works. The nice thing is that I then put words on Anki too.

</comment></comment></comment><comment><USER25> When I was 12 years old I had a family friend-let's call him James. James was the son of my dad's best friend, and I saw him as a bit of an elder brother figure. I followed him around and tried to copy anything I saw him do, usually unsuccessfully. One day I saw James make a website. Naturally, I had to start making websites, so I whined at my dad until he bought me the _HTML Black Book_ , and read the thousand-page tome cover to cover in a weekend-pretty much the exact opposite of the "find a project first" approach. Then I started making websites.

Having read the entire book was incredibly helpful. Anytime I thought of a feature I wanted to add, or wanted to rearrange the site in a certain way, I knew how to do it-or at least, I knew that there was some pattern that would easily solve exactly what I wanted to do. I made sites for myself, for my school, for my friends-and they were decent. Not fabulous, but my sites were a lot easier to update and maintain than the site my school's $250/hour consultant had built (tables were visibly different on each content page!)

I used the same approach when I finally started writing code professionally 10 years later. In one case I solved a problem in 17 minutes that my coworkers had spent months trying to solve, because I knew that there was an existing function that did exactly what they were looking for. These things were surprisingly hard to find in Google, but having near-encyclopedic knowledge of the language's features made it a lot easier. Instead of searching for a general problem in an obscure language, I knew the exact function name I was searching for and only had to look up syntax.

Memorization is incredibly useful, even in a problem-solving discipline like programming. And having an encyclopedic knowledge of your language is extremely rewarding when you remember a simple way to solve a complex problem :)

</comment><comment><USER6> We are working in this space. <http://www.codesonic.com/> . Spaced repetition software just for coders. Launching in a couple of weeks.

</comment><comment><USER26> I'm working on an coder app that uses SRS. More like 'Twitter for code, with SRS'. I want to 'follow' people who produce good cards, and get their feedback on the cards I make. This would make it superior to just having a snippets.txt file that I eventually import into Anki. Killer search, with tags, would make it better than github gist (although this will be integrated)...

Oh, and the scheduler is taylor made for code (code chunks usage is different from word usage, which means the equation parameters optimized for word learning won't work).

Contact me if you want to know more (see profile).

</comment><comment><USER27> Interleaved and spaced practice is a very powerful learning and knowledge retention technique. Some of recent findings in cognitive science has given credence to this approach. If anyone is interested here is the link to one of the research papers.

[http://uweb.rc.usf.edu/~drohrer/pdfs/Taylor&Rohrer2010AC...](http://uweb.rc.usf.edu/~drohrer/pdfs/Taylor&Rohrer2010ACP.pdf)

I think memorization doesn't really help understand the fundamentals of any topic. Rote memorization can only get you so far. As concepts get harder and complex, dependence on mere memorization leaves a lot of holes in the understanding of any subject matter.

Specifically in programming, syntax or semantics form just a minor part of overall problem solving exercise. Efficient and effective programming requires repeated use of concepts or paradigms in solutions for diverse problems. Our brain is much more effective in registering and recalling facts or knowledge when that piece of knowledge is exercised in diverse scenarios.

I am a co-founder of Lymboo Math (<http://www.lymboo.com>), an online math practice program for elementary school children. We built the curriculum that follows the natural learning sequence of math concepts. On top of the comprehensive curriculum we implemented a practice structure that relies on interleaved and spaced practice. Students practice daily on individual topics until they are proficient in that topic. Then they move on to subsequent topics along the prerequisites-based curriculum. Throughout the program the system automatically incorporates spiral reviews of previous topics at regular intervals of time to effectively cement all the acquired knowledge.

What we have found is that children easily forget what they have learned just a weeks earlier, and their performance degrades in the initial mixed spiral reviews. However, as they continue the cycle of (learn--practice--review)*, they show improved performance in subsequent spiral reviews.

Mixed spiral reviews model interleaved (mix of topics) and spaced (in time) practice to enhance our context-switching skills. The neurons in the brain make new connections and store patterns that aid in quick and fluent recall of knowledge.

Interleaved and spaced learning techniques are more than just for memorization.

<comment><USER4> > I think memorization doesn't really help understand the fundamentals of any > topic. Rote memorization can only get you so far. As concepts get harder and > complex, dependence on mere memorization leaves a lot of holes in the > understanding of any subject matter.

The existing research says that spaced repetition helps with abstracting and generalizing understanding as well as 'rote memorization': <http://www.gwern.net/Spaced%20repetition#abstraction>

<comment><USER13> Abstracting and generalizing, and understanding advanced concepts, is impossible if you don't have the fundamentals memorized.

<comment><USER27> I look at the role 'rote memorization' plays very differently from what spaced and interleaved repetition does. Rote memorization is short-lived because the kind of patterns and associations that the brain builds internally is not that strong. Our brains 'remember' well when a piece of knowledge (for the lack of a better word) is repeatedly encountered in diverse settings. More the associations the better we remember and recall.

It is true that without a good understanding of fundamentals the advanced concepts will be difficult to comprehend. But, rote memorization should not be construed as something that lays a strong foundation of fundamentals. Even if we are able to recall basic concepts 'learned' via rote memorization, their applicability to understanding advanced concepts is very limited.

</comment></comment></comment></comment><comment><USER28> Very interesting idea, I think it could be very useful. Hopefully we'll see some community spring up around this idea and start sharing some anki decks for their favorite languages. I know I'll certainly start working on a couple of my own.

One idea for further expansion: go beyond just having specific language syntax, and also include cards on more generic algorithms and data strucutres. You could key it by time and space complexity, invariants, maybe also a pseudocode implementation.

<comment><USER5> Very nice idea.

I forgot to mention the deck-sharing point:

It's pretty important to learn the material yourself first, then use the cards as a reminder of what you learned. When you go through someone else's deck, there's no context.

But I could see how, if you already knew a language, then going through someone else's quiz questions might keep you on your toes more than your own quiz questions.

</comment></comment><comment><USER29> Sounds like SuperMemo <http://www.supermemo.com/> by Piotr Wozniak ([http://en.wikipedia.org/wiki/Piotr_Wo%C5%BAniak_%28researche...](http://en.wikipedia.org/wiki/Piotr_Wo%C5%BAniak_%28researcher%29)). Piotr has been working on computer-aided spaced repetition since 1987. He's got a lot of data on his website. He was written up in WIRED magazine a few years ago.

</comment><comment><USER30> Reminds me of the 'Janki Method':

<http://www.jackkinsella.ie/2011/12/05/janki-method.html>

</comment><comment><USER31> Here's a link to someone's flash card for learning web-dev(variety of subjects, 6000 cards) :

[http://www.oxbridgenotes.co.uk/other/web_development_flashca...](http://www.oxbridgenotes.co.uk/other/web_development_flashcards)

Here's a link to a blog post by him describing the technique for programming:

<http://www.jackkinsella.ie/2011/12/05/janki-method.html>

</comment><comment><USER32> I do exactly the same thing with email + followupthen. This means no need to remember to load up Anki everyday and practice. It comes straight to your inbox. Wrote about this here: [http://thameera.wordpress.com/2013/01/06/spaced- repetition-l...](http://thameera.wordpress.com/2013/01/06/spaced-repetition- like-a-boss/)

</comment><comment><USER33> Frequency analysis of human language shows that word usage follows a Power law distribution (Zipf's Law) which, for example, means that:

      * the 75 most common words make up 40% of occurrences
      * the 200 most common words make up 50% of occurrences
      * the 524 most common words make up 60% of occurrences
      * the 1257 most common words make up 70% of occurrences
      * the 2925 most common words make up 80% of occurrences

Speculatively, similar frequency analyses of library calls in various codebases for a programming language may reveal a similar long-tail distribution. This would provide a list of high frequency library routines that would be worth memorising - with clearly diminishing returns as the vocabulary grows.

This kind of analysis would also point at important targets for optimisation, simplification and parallelisation as well as direct the efforts of library implementers for new languages.

</comment><comment><USER34> ...this could only make sense if you want to maintain fluency in _programming languages that you are not using regularly_. And why on earth would you want to maintain fluency in a language you are not using?! It's not as if you'll forget the basic concepts.

IMHO, if you want to maintain fluency in a programming language you're not using, say to keep your knowledge of C and C++ fresh while you're working in higher level language, you should _keep contributing to a bunch of open-source projects written in that language_ , same as for natural languages you need to keep conversing with people that speak it or at least watching movies in it. Otherwise you'll end up knowing and artificial subset of that language that's useless for real work... And the plus is that having the os projects contributions in your resume will keep you employable for future work in that language.

</comment><comment><USER35> There is a website that use the same concept to teach you languages, world capitals, even Vim or shell commands and you can create your own courses. I use it to learn mandarin, it's really useful. (<http://memrise.com>)

</comment><comment><USER36> Mnemosyne is the best spaced repetition software out there. Free and open source too.

<comment><USER37> I prefer <http://exponwords.com/> Lean, free, open source, web based, works well on mobile. I use it every day, mostly to learn German. (I know the author.)

</comment></comment><comment><USER38> I have been doing this for a while; I wrote a blog post about it:

[http://www.writemoretests.com/2012/02/how-to-remember- everyt...](http://www.writemoretests.com/2012/02/how-to-remember-everything- ever-and-forever.html)

</comment><comment><USER39> I do not see the point of using SRS in something like programming.

Unlike a human natural language, there is little value in trying to _memorise_ extreme details without the trial of placing them in an application context. As for new concepts, the value flows from the mere effort of initial understanding and any consequent usage. Meanwhile, the core of a programming language is almost always easily learned just by using it directly.

Of course, an SRS usage as described could be _very_ useful for other contexts, e.g. remembering programming code snippets or concepts for the purpose of interviews.

</comment><comment><USER40> I'm going to give it a try. There are certain programming languages that I use rather unfrequently like python or bash script. But when it comes to the point that I need to use them, I allways realize that I tend to forget so many useful commands and API calls, so I have to look'em up once again and again. My point to this phenomenon is, that when I'v just looked up a (in my eyes) complicated unix command e.g., that at this very moment I know that I won't remember it two or three days later. This tool might be a good help to note them down and help me to memorize them.

</comment><comment><USER41> I've been memorizing parts of Ruby with this method while reading "The Well Grounded Rubyist." You can import all my Ruby flashcards into Anki. Hope they help. Please email me if they do (email is in profile).

[https://docs.google.com/folder/d/0B_WU5GXujPOVSl9WajFaaWlCTG...](https://docs.google.com/folder/d/0B_WU5GXujPOVSl9WajFaaWlCTGc/edit)

</comment><comment><USER42> Great article. I've made a chrome extension for making it easy to capture learning from internet and do spaced repetition. Check out <http://memobutton.com>

<comment><USER43> Nice - is it possible to combine it with existing SRS-systems? (I'm using Mnemosyne, so it would need to be possible to export the data in the mnemosyne xml format or as a tab separated text file)

</comment></comment><comment><USER44> This is something I've thought about for so long!!!

It's one of the coolest things I've seen in years!!!

</comment><comment><USER45> The examples you give are idiosyncrasies that shouldn't be in your code base in the first place (IMHO). These are things that vary from language to language and trusting yourself and others who are going to be reading your code to keep track of them correctly is not a good idea.

        a = 5 + '5'

Ignoring the lack of a sigil, in PHP, a = 10.

In Python, this fails to typecheck.

In Javascript, as you note, a = '55'.

(I used an interpreter for each of these languages to verify this)

For me, I could potentially see the usefulness for this in two things: the various meanings of the 'this' keyword in Javascript and the positioning system for CSS. I always have to look that stuff up. Never seems to stick.

Otherwise, the 'factoids' I have 'memorized' are all out of necessity and come from repeated usage. I don't consciously memorize anything.

<comment><USER46> Yeah, the `new Array...` questions as well - they should all be trick questions with the answer _"don't use the Array() form"_.

</comment></comment><comment><USER47> This is the same as learning kung-fu moves by staring at pictures of them.</comment>