Tricky Programming Concepts Aren't - <AUTHOR> http://evincarofautumn.blogspot.com/2011/09/tricky-programming-concepts-arent.html <comment><USER2> I'm on board with his basic pedagogical point: don't tell people you expect them to struggle.

I'm concerned that he's going a little too far in the other direction, though. It's great to come up with a simple or even tautological explanation for concepts. However, those explanations don't address the nuances of why those concepts challenge people in practice. And telling someone it's easy when s/he actually is struggling is just as dangerous.

When I was learning C, I absolutely understood that a pointer pointed to something, and I wasn't bogged down by people telling me it was hard. That didn't stop me from dereferencing null pointers, returning addresses to variables on the stack, getting confused when someone added to a pointer, etc. The aptitude that Joel wrote about and Jon derides isn't the aptitude of applying a metaphor to code. It's the aptitude of coalscing a set of program behaviors into a mental abstraction that is more than "a pointer points."

<comment><USER3> I spent hours trying to help a friend in college "get" enough assembly language to not fail a class. I had already done assembly language development professionally and had previously gotten an A+ in the class, so I understood the concepts well, and I explained them from a dozen different directions.

I don't care what the OP says. This guy was simply not capable of understanding the concepts. Maybe at some level he was, and he had some kind of psychological blinders on that prevented him from getting what I was saying, but he really, really didn't get even the most basic concepts. And when it comes down to it, it doesn't matter whether he has some innate ability that he can't tap -- if he can't do it, even with lots of help, then he can't do it.

While I was helping him, others from the lab came over repeatedly to ask me for help, assuming I was the lab assistant. I WAS able to help a half dozen other students understand their program.

It was his third attempt at taking the class. He finally gave up and changed his major, IIRC.

<comment><USER4> Was it x86? That's a darn shame if so. I'm not sure /I/ could learn that, and I have used several simpler ones.

<comment><USER3> No, not x86. I actually can't remember the actual CPU it was. Something I'd never heard of, nor run across since. Maybe an IBM mini CPU? We would log into the computer via terminals and build and test that way. This was in the late 80s.

I remember that it was a pretty straightforward architecture, though. Something like 68000, which I knew already, but it was even more orthogonal with respect to addressing modes. I think it had 16 32-bit registers, and you could use any as an address to load data from, complete with offset for easy manipulation of data structures.

I do know x86, and while the 8086 was designed by idiots, it's not that hard to get the basics. Segment registers are a PITA, but as long as you're using 32-bit mode and not accessing more than 4Gb at a time, you can mostly ignore them. I've had to deal with something similar in another architecture, and you just end up with abstractions that hide the details as much as possible. Same as coding anything else that's nontrivial, really.

</comment></comment></comment></comment><comment><USER5> I'd like some actual empirical evidence that saying "this is tricky" or "this is difficult" actually de-motivates ("turns off") students. It might, but I can also plausibly imagine the reverse. What if you say "oh, this will be easy and fun!" and then they have trouble with it? IMHO, that might send the message that they're just dumb. At least when you say "it's tricky" and they struggle they may not think it's their fault and might be willing to keep trying.

I think you could spin a lot of plausible pedagogical theories, but I'd be more interested in seeing some actual evidence.

<comment> dorian-graph > What if you say "oh, this will be easy and fun!"

That is same problem as saying "Oh, this is hard and tricky." The author didn't seem to suggest to tell students things are easy, which is misleading and harmful, but rather he used the example of art teachers where the students are not told that things are easy but rather they need to practice and put in a lot of effort. Hell, he didn't say the word 'easy' once in his blog entry.

Lecturers and many others seem almost afraid to say "You're going to have to work hard." and then stand by that statement.

I'm currently at university and I've seen exactly what he has said. Lecturers and students saying x is hard and tricky and for most of the other students here that seems to have demotivated them. I think the current schooling system here in Australia and in other countries in the world where I've spent time or have friends from is horribly flawed in many ways and what this blog entry about is just one of those flaws.

<comment><USER6> I wonder if any of that has to be said at all? What if a lecturer did not set this prejudice upfront at all? However helpful emotions are in the learning process, saying "this is tricky" or "this is easy" is not going to help. Instead, play on other emotions. Explain the theory, show real life examples, simple tricks, stuff like that, surprise them. But don't say "this is hard" or "this is easy". Let them decide.

</comment></comment></comment><comment><USER7> This seems to be creating a false dichotomy in the original argument. It's not that there are some people who _can't_ understand concepts like pointers and recursion, but having taught programming to several crops of complete neophytes, I've discovered there are some concepts that some people get right away, and others don't[1]. My response to this isn't to write off the people who don't get it, it's to work harder with them, but that doesn't change the fact that given two people with the same explicit programming background[2], and exposed to the same lectures, a fraction of them will need further work. It's this kind of concept that I call tricky.

[1] I'll fully grant the possibility that I'm teaching them in a sub-optimal way. But very few people have the luxury to learn from the optimal teacher.

[2] It's conceivable that some people have had experiences and training that, while not formally programming, have nevertheless taught them the abstraction and logical reasoning skills that are necessary to understand core programming concepts.

<comment><USER8> He's not creating a false dichotomy to attack--he's responding to Joel Spoelsky's post, and Spoelsky creates a very clear dichotomy of smart and not- smart in his post

"I've seen that the 100% Java schools have started churning out quite a few CS graduates who are _simply not smart enough_ to work as programmers on anything more sophisticated than Yet Another Java Accounting Application, although they did manage to squeak through the newly-dumbed-down coursework...I used to be able to tell the smart kids because they could rip through a recursive algorithm in seconds, or implement linked-list manipulation functions using pointers as fast as they could write on the whiteboard. But with a JavaSchool Grad, I can't tell if they're struggling with these problems because they are undereducated or if they're struggling with these problems because _they don't actually have that special part of the brain_ that they're going to need to do great programming work. Paul Graham calls them Blub Programmers."

</comment></comment><comment><USER9> I'd love to see more programming abstractions described in simple, no nonsense terms. I think that, as programmers, we often get so used to our own jargon that we unconsciously create a non-trivial barrier to entry.

For extreme examples, try digging into some of Haskell's features -- I still have no idea what arrows are, but I've been given the impression that they're advanced and hard to understand -- or reading some of the discussions on Lambda the Ultimate. It usually turns out that the concepts are surprisingly simple, but it takes a lot of sifting through academic language to figure it out.

<comment><USER10> If you learn something like haskell from books instead of blogs, the explanations are usually much much more comprehensive and cogent. Both _Learn You a Haskell_ and _Real World Haskell_ are excellent in that respect.

I find more and more that blogs are great for discussing things you already have deep knowledge of, or of finding leads to resources for learning them (book recommendations, etc.), but there's no comparison to books for really learning something well.

Blogs are just too piecemeal, and the articles are usually written in a few days or a week, versus up to a year or more for books. Hence the quality of pedagogy is just much higher with books than blogs.

<comment><AUTHOR> I found Learn You a Haskell unexciting; it was more useful for me to hang out with my Haskell-programming acquaintances, read a lot of code, and get my hands dirty using it than it was to just read and play with examples.

Even as someone who writes a technical blog, I'll agree that blogs aren't the best medium for disseminating learning materials. That's what proper online documentation and books are for: specialised topics, in long form. I can write 50 1000-word blog entries and help people on more topics, but fewer people per topic, or I can write one 50,000-word book and reach many people on just the one.

<comment><USER10> Yeah, blogs are great for discussing edge cases and the like with people who already know the topic, that books don't have room to cover.

And of course, neither books nor blogs nor language references, etc. substitute for actually sitting down and programming something challenging. But they can help reduce the amount of initial time wasted on trial and error, get you using the language idiomatically, and get you up to speed on language- specific best-practices faster.

<comment><USER11> Not to mention field reports getting something working - especially useful when an API of a library is not so obvious and the documentation is lacking. EG Rails-centric documentation but using Sinatra.

Although the time could arguably be spent more productively improving said documentation, sometimes an informal tone (which may not be appopriate in docs) can help to dissolve frustrations..

</comment></comment></comment></comment></comment><comment><USER12> Let me get this off my chest: pointers are NOT hard. If every 16 year old with weed can talk about representation and meaning, every CompSci student can grok pointers.

Managing code with pointers is hard, but grasping the concept is easy.

Closures are far more confusing.

I didn't learn regular expressions for a very long time because people said they were hard. That was stupid. It took me a couple of days to get good at them.

<comment><USER13> Thanks for the excellent introduction to my next topic: An important function of programming education is to teach people _which things other people often find difficult_. Because intuition is not a reliable guide. And the secret to all effective communication -- which certainly includes programming, as well as writing and teaching -- is to write stuff that your audience can understand.

When the teacher says "this is tricky", consider the possibility that they aren't merely trying to motivate the students. It might just be a simple statement of fact: _There's a significant population that doesn't get this at first glance, and you have to know that, regardless of whether you get it yourself or not._

<comment><USER14> > Thanks for the excellent introduction to my next topic: An important > function of programming education is to teach people which things other > people often find difficult.

Why? In my mind, managing student psychology is more important than conveying meta-facts. If a student will learn slower if you tell them that other people find something hard, _then don't tell them that._ As a bonus, the meta-fact might become less true.

</comment></comment></comment><comment><USER15> People try so hard to find excuses why some people can't understand some concepts, such as pointers. It's all an attempt to avoid just admitting that some people aren't capable.

I've spent much time tutoring people on various subjects, programming, physics, math. And the fact is there are just some people who can't grasp certain concepts. From my observations I think the culprit is a poor ability to integrate information into a single mental model. I've seen this many times. Someone can understand concept A, B, C in isolation, but when you try to guide them into combining the three to solve a problem they break down.

I think this really goes to the heart of intelligence. More intelligent people can integrate more information at a single time. This is probably related to working memory (there isn't a single place in your head where working memory functions, but its spread out). Tough concepts like pointers exemplify this. You need to understand the memory model, accessing a memory location, using that info to index back into the memory array, and how the syntax of the language supports these actions.

Analogies can help as it reduces the amount of info you have to hold in your head, but its not a replacement for understanding what it actually is. I think its time to admit that there is an intelligence barrier to some concepts that some people don't cross.

</comment><comment><USER16> I'm sure I have said similar things before when teaching students. I have no problem with these concepts because I've dealt with them for years.

What I mean when I say such things is that I have a mental model of the student's current understanding. That mental model is based off of what I have taught them, and the understanding they have demonstrated through questions and assignments. When I try to think about this concept with just those tools, I think it may be difficult to understand.

I always try to build a bridge from their current mental model (or, more accurately, my mental model _of_ their mental model) to the mental model required to understand this new concept. If I have difficulty building that bridge, then I think it is a "tricky concept" for them.

<comment><USER17> Thank you. I think this is a responsible, reasonable approach. "This is going to be tough" is a reliable signal from instructor to instructed that we need to pay close attention, because this next part won't be easy.

</comment></comment><comment><USER18> _A pointer points. A reference refers. These are the same thing._

Except they aren't the same thing in many programming languages. In particular C++.

 _To implement a linked list, just open your eyes and think about what the term means: it is a list, and at each place there must be a thing, and the address of the next thing if there is one._

This is one example of a type that you probably won't use a reference in C++ (at least not a mutable linked list).

The thing the author did was actually swapped out one analogy for another, although unknowingly. To really get away from analogy is to point out that there are values stored in memory locations (determining the value uses metadata associated with memory locations). You can use those values literally, or you can use them as an index into other memory locations -- and then recurse (to tie both concepts together).

<comment><AUTHOR> A pointer is a particular kind of reference (a value type that enables indirection), and C++ references are another (not very different) kind. A reference in C++ amounts to an immutable pointer.

Also, I didn't swap analogies: I traded analogy for metaphor. (A reference in a computer program is a conceptual reference in the real world.)

<comment><USER19> > A reference in C++ amounts to an immutable pointer.

"Amounts to" is a phrase that lets you say pretty much anything. Eg: A pointer amounts to an int.

If you are going to say that it amounts to an immutable pointer, you should at least add a caveat about how int *const x; would be different from int& x;

<comment><USER20> > Eg: A pointer amounts to an int.

Is there a reason why this analogy is invalid? I found it to be quite useful in using, understanding and explaining C pointers.

<comment><USER21> This is a really good example of an explanation that is correct in the basics, but almost completely incorrect and potentially dangerous when taken more in- depth.

Pointers are not ints. First off, pointers are unsigned data types. Also, on 32-bit systems, they're 32-bit unsigned longs, and on 64-bit systems, they're 64-bit unsigned long longs.

Both of those are incredibly important to understand, especially because the first can lead to very weird bugs with unsigned/signed comparisons or addition. I recently ran into a bug that involved that. 50% of the time, the program crashed with an incorrect memory address error. The other half, it worked completely fine. It turned out that we were casting a couple of pointers to signed values before doing some range checking. The cast converted them to hugely negative values, which broke the comparison check and sent us down a completely incorrect code path.

The second is important when dealing with structure and class allocation sizes.

<comment><USER19> > Pointers are not ints. First off, pointers are unsigned data types. Also, on > 32-bit systems, they're 32-bit unsigned longs, and on 64-bit systems, > they're 64-bit unsigned long longs.

Just want to point out that "int" is not a fixed defined size in C++ either, it just has a minimum size. You equally cannot depend on the size of int or void*.

<comment><USER21> This is true in regards to the C++ spec. An int data type is up to 32-bits. For old 16-bit architectures, an int and void* are both 16 bits. For more modern architectures and compilers(anything on a 32-bit processor or higher), ints are assumed to be 32-bit signed integers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> OK, instead of saying "this is tricky" people should say, "this will take some practice." I got pointers right away but it took a lot of practice to use them without error.

<comment><USER23> The author completely missed the point about why teachers say "this is tricky". It's not about telling students to pay attention, they do that if they want. And it's certainly not about telling people it's so hard they need not bother.

It is _to make it OK for students to not understand right away and not feel bad about asking questions._

<comment><AUTHOR> I was trying to be brief, but that is essentially what I meant to say...perhaps I'll edit to clarify that. I think the effect is still the same, though, regardless of the motivation behind the phrase.

</comment></comment></comment><comment><USER24> Experience has shown me that there are people who just won't get these concepts. I don't know if they decided it was hard and gave up or what.

Example: Shortly before a final exam for an undergraduate introductory course on logic, there was a student behind me who said "I still don't get this De Morgan thing"

This was something that was covered in the first week, it was impossible to do about 90% of the work in the class without it and has got to be at least as obvious as pointers and recursion. The student was trying in the class and went to office hours, study groups, etc.

I still don't have a good explanation for how someone can't grasp De Morgan's laws in under an hour, much less after 16 weeks of class.

<comment><USER25> I don't think the difficulty stems from an inherent inability to learn a concept. I think the difficulty occurs largely because of two factors: lack of interest and intimidation.

Have you ever had to read something unfamiliar that you found incredibly boring (think reading a patent application)? You end up reading the same page over and over but you absorb very little of the information. Your mind just moves through the words but doesn't make the effort to understand what was being read. This occurs simply because you don't have enough interest in the material at hand.

Seeing how intimidation can factor in this is a bit more difficult. You can usually see this by watching someone try to solve something that they think they can't solve. A lot of times people in this situation make a lot of half hearted a attempts but rarely follow through. I think this is similar to how people struggle when they are put in a situation where they need to make a really open ended decision and get overwhelmed by the options.

Edit: clarity

</comment></comment><comment><USER26> It's good to see someone bluntly take apart common misconceptions.

<comment><USER27> Agreed, that was refreshing (and affirming).

As the great teacher, Richard Feynman puts it: "if you can't explain something to a first year student, then you haven't really understood it"

<comment><USER28> Doesn't this underscore the argument _against_ the OP? If Feymnan is correct, this means that many CS teachers don't really understand these concepts that they tell their students to be "tricky."

So, if numerous professionals are having trouble understanding a concept - or, they believe they understand something when they really don't, which is actually _worse_ \- then that seems to me to be empirical evidence arguing that said concept is probably difficult.

And of course you can make the argument that it just happens to be the case that these concepts are easy and society has just happened to promote a bunch of morons into professional positions, but I think that is the more difficult hypothesis to prove.

<comment><AUTHOR> Feynman is wrong. Understanding something (technical skill) doesn't automatically make you good at explaining it (communication skill). Being poor at explaining something does not necessarily betray incomplete understanding.

<comment><USER29> Feynman is not wrong. Technical skill does not equal understanding something. Consider an idiot savant who is technically proficient at playing piano but can't string two words together. These definitions of 'understand' may help: 1\. Perceive the intended meaning of (words, a language, or speaker): "he could usually make himself understood"; "she understood what he was saying". 2\. Perceive the significance, explanation, or cause of (something): "she didn't really understand the situation". [http://www.google.com/search?aq=f&q=define%3Aunderstand](http://www.google.com/search?aq=f&q=define%3Aunderstand)

</comment></comment></comment></comment></comment><comment><USER30> Has the author ever tried to teach anyone pointers? Who had never heard of them before? I've introduced several people to pointers, and while they aren't "hard" in the sense that it takes them months of hard labor to understand, there's a reason they have the reputation they do.

I personally love pointers, and have a bad habit of trying to do my own memory management with them.

<comment><USER31> IMHO, the only problem with teach pointers is that professors try to dress them up. Not understanding a pointer typically means not understanding the basics of the underlying hardware. This touches on one of the common problems today is that software has been split away from the hardware that runs it.

I'm certainly not saying that anyone who writes software needs to know the ins and outs of a modern CPU, but basic knowledge of how a computer works (memory, CPU, DMA, mmio, etc...) is what's often missing when talking about low level programming concepts.

</comment></comment><comment><USER32> Since even the most high-level concept, explained correctly, can be absorbed and applied by any person of average intelligence, I will be very interested when the author (or, y'know, anyone) posts such an explanation of motivic cohomology.

</comment><comment><USER33> Of course, there are plenty of _actual_ tricky programming concepts: closures, tail recursion, coroutines, memory management, concurrency, regular expression matching, caching, algorithmic complexity, naming things...

<comment><USER34> Another commenter made a great point that knowing how and when to use these things is likely more difficult, but having a good grasp of the concepts is important. Here is a minute of me stabbing at analogies:

Coroutines: A subroutine is a basement which you go down into and come up from via the same door. A coroutine, by contrast, is an adjacent room with several doors and you can leave temporarily even if you're not completely done in there (of course, you must re-enter whichever door you previously left; not a perfect analogy).

Concurrency: doing multiple things at once. In a kitchen, concurrent actions work best when the cooks either don't share resources or have clever schemes for ensuring there is always an alternative activity to perform if resources are in use. This can be as simple as getting on a list for the knife, or blender, or what-have-you, and you'll be called when it's open.

Caching: I dislike going to the grocery store every time I am hungry so I cache things I will need to make shorter trips on average. How much you cache at once is important to determine.

Regular expression matching: This isn't what I'm trying to find, this is a description of what I'm trying to find.

<comment><AUTHOR> Coroutines are more like reading multiple books, leaving bookmarks behind and returning to them as needed. I think of caching like moving the resources you're working with to be near at hand so it takes less time to get to them.

(When you're painting, for example, you keep pencil, eraser, brush, paints, and palette nearby, because they're in active use and it would take awhile to fetch them every time you needed them.)

Your other examples are great though. I worked in a kitchen for a couple of years and it's definitely all about concurrency.

<comment><USER34> That's what I was grasping for with caching, and I think I got carried away thinking about preemptive caching and conflated an idea with a common use.

Either way, thanks. And, your article is fucking brilliant. I might ape its style soon in a few "Learn Perl" articles of my own.

</comment></comment></comment></comment><comment><USER35> lol, I love the guy who commented: "Awesome post. Now do monads please?"

<comment><USER36> Monads are a lot like pointers in that the Dictionary definition is rather simple. It is the implications and proper use that takes dedication and practice.

</comment></comment><comment><USER17> Completely disagree with you. There is nothing more demotivating and infuriating than a professor breezing through challenging material with no acknowledgement that it is difficult.

If I'm learning a semester's worth of new things, and in there 10-20% is going to be discontinuously difficult, I want the prof to acknowledge that fact. I hate feeling like an idiot, and an acknowledgement that a particular topic requires a manner or mode of thinking orthogonal to what I'm used to helps a lot.

<comment><AUTHOR> You're disagreeing with something I didn't say. A professor should not "breeze through" anything. I just said they shouldn't set up students with preconceptions of difficulty.

</comment></comment><comment><USER37> Phew.. I haven't tried to teach programming to anyone yet, but i think it would be a good idea to ask the student to point to some object. Then point to a different object. Then explaining to them that they are asking the computer to do the same thing as moving their hand and index finger. *- Ofcourse, it may not be practical in a big class, and it might help to put the objects in a sequence. Any feed back on having tried this??

</comment><comment><USER38> Interesting article and it does go a good job of explaining these basic concepts.

But...

There is a huge difference between understanding something and knowing how to _implement_ that knowledge properly in the real world. The former is a building block for the latter, but just the understanding of what pointers are or recursion is doesn't dictate someone's ability to use them properly or efficiently.

<comment><AUTHOR> True, but understanding goes a long way toward practical skill.

<comment><USER38> you are definitely right about that

</comment></comment></comment><comment><USER39> > This is exactly like the process of essay writing

Indeed. I find that essay writing and programming light up exactly the same parts of my brain.

</comment><comment><USER40> Actually they are.

</comment><comment><USER41> _A queue is a queue of things._

On an only vaguely related note, this reminds me of something from college. I was helping a friend of mine who was taking an intro to programming class. It was in C++, and he had been given a class outline for a queue, and was required to fill in the implementation. I was horrified to find that the teacher's class declaration used method names "NQ" and "DQ".

I honestly question whether the instructor even understood the meaning of the word 'queue' and how 'enqueue' and 'dequeue' are derived. It was obvious that this cutesy shorthand completely obliterated any hope of my friend ever making the mental connection between the code and what it conceptually represented.

(Incidentally, they also taught C++ streams for I/O. Apparently, their goal was to prevent new programmers from succeeding)</comment>


Ask HN: Alternative to Stack Overflow? - <AUTHOR> Stackoverflow.com say that "Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam."<p>So what is the best site can I use to ask for a recommended library or tool? <comment><USER2> > So what is the best site can I use to ask for a recommended library or tool?

There is a stackexchange site for this, [http://softwarerecs.stackexchange.com/](http://softwarerecs.stackexchange.com/)

<comment><AUTHOR> My impression is that Software Recommendations is mostly for end-users for stand-alone software (eg. "Password Safe app for Mac and iOS").

But what I'm really looking for is recommendations by programmers for libraries and tools to suit a particular programming task. For example, here [1] is the question that was disallowed on Stack Overflow and prompted me to look for alternative question-and-answer sites. It seems that such a question isn't really a good fit for [2]

[1] [http://stackoverflow.com/questions/23853475/is-there-a- stand...](http://stackoverflow.com/questions/23853475/is-there-a-standard- java-webapp-for-managing-user-accounts/23853522?noredirect=1#23853522)

[2] [http://softwarerecs.stackexchange.com/](http://softwarerecs.stackexchange.com/)

<comment><USER2> Actually it is to an extent, if you browse around you will see many questions asking about c++ library for this and that etc. Give it a try.

</comment></comment></comment><comment><USER3> You know, I can't think of a really good site for this, which means that maybe it's a good startup idea. Index by language and environment and category, and allow users to submit descriptions of the trade-offs between specific versions of different solutions for the same thing. Maybe vote on them or make it a universally-editable wiki or something.

Basically, a site where I could look up, say, C# ORMs or Ruby on Rails authorization gems and see detailed descriptions of what's available and what the major tradeoffs and differences are between them from people who have actually used them would be freakin' awesome.

<comment><USER4> [http://www.slant.co](http://www.slant.co)

<comment><USER3> Just checked that out from the other comment, actually. Not bad for the simple stuff, but it looks like it sticks to one-sentence pros and cons for each solution.

Like for example, one of the top questions there right now is for what is the best blogging platform. The answers are stuff like WordPress - Widely Used and Ghost - Markdown support. I'd like to see something more like a detailed description of the pros and cons of hosting a Wordpress blog vs a Ghost blog by somebody who has actually done both.

<comment><USER5> Slant.co is still the appropriate place for that. A lot of the answers are minimal on detail but only because whoever created the answers wrote it that way. Some of their comparisons get a lot more in depth. They have a meta discussion site if you want to know more.

<comment><USER6> It doesn't really encourage discussion though. I prefer Quora for the discussion, but it lacks in other areas.

<comment><USER7> Are you referring to the comment threads on the answers?

</comment></comment></comment></comment></comment></comment><comment><USER8> I was thinking about starting a site dedicated to the questions/topics that don't suite StackOverflow. The site could have one sub domain for each StackExchange site, e.g. `coders.open-questions.org` for StackOverflow, and `writers.open-questions.org` for `writers.stackexchange.com`.

Is anyone interested in this? I've built a discussion system that I'm hoping would be useful. It's a bit like a hybrid Questions/Answer system + threaded comments. Here's an example discussion: [http://www.debiki.com/forum/-61859/forum-software-for-the- fu...](http://www.debiki.com/forum/-61859/forum-software-for-the-future) (please note that the 2d layout is optional).

The forum topic list page ([http://www.debiki.com/forum/](http://www.debiki.com/forum/)) is inspired by Discourse ([http://www.discourse.org/](http://www.discourse.org/)).

</comment><comment><USER9> StackOverflow's reason does make sense. I've found it best to ask on a related mailing list. By related, I mean, if looking for a tool, ask the associated OS users language mailing list. If looking for a library, ask on the associated programming language mailing lists.

Mailing lists tend to be better than sites for this sort of thing because people who reply there are possibly putting in more thought into their replies and secondly, replies _might_ lead to a discussion that'll make evident the tradeoffs you'll make going with one choice over the other (and there will _always_ be tradeoffs). The thing that mailing lists lack when compared to StackOverflow is the rating mechanism and the ability to easily search/find answers to commonly asked questions.

Edit: Saw iKlsR's answer after I typed this out. I'd assume the stackxchange site he suggested would work better (assuming it has a large enough active audience).

<comment><USER10> IRC channels for domain-related groups are also an excellent resource for this kind of discovery.

<comment><USER9> The problem with IRC channels is, conversations there then to be time- sensitive. So except for the most popular channels with plenty of people active all the time, someone (in South-east Asia, for instance) will not get the benefit of good answers from a number of people.

</comment></comment></comment><comment><USER11> Communities like Stackoverflow come and go. We have a very refined tool in SO, but the strength is always in the community.

You can find very strong developers, still, idling in IRC. I've had many a great question/answer session with the very inventors of some languages I'm interested in, just because they're on IRC.

Get to know the mailing-lists for the languages/programming subjects you're interested in. Stackoverflow is a website; the Internet is composed of much more than web sites. If you have a connection and organizing system that can handle e-mail, beyond gmail and so, you can even build yourself a veritable _Treasure_ -trove of details about current/modern technologies .. by lurking on the -lists. Get your own offline archives for the tech-/topic you're interested in, and you can then probably go and cabin-in-the-woods/off-grid program your next major release ..

Also, do not discount the value of an evening spent exploring your local USENET access. Seriously. USENET still lives. Your ISP may not know that, though ..

</comment><comment><USER12> [http://www.slant.co](http://www.slant.co)

</comment><comment><USER13> I don't have any good suggestion, but I feel like stack overflow is ripe for disruption. Most people only end up at the service because it's the incumbent, but the site has done a very poor job of transitioning from a place where you ask questions to a place where they need to curate results.

</comment><comment><USER14> I've been over at emberjs' discourse site[1] a lot recently and I've been really impressed. They still encourage people to use stackoverflow for problem solving particular problems but for discussion it's a perfect complement.

[1] [http://discuss.emberjs.com/](http://discuss.emberjs.com/)

</comment><comment><USER15> Recently I had this idea with few friends: [http://codepundit.com](http://codepundit.com) , we even started working on that. On top of some sign ups we got some constructive criticism on HN and tweeter and the work slowed down since then. What do you think ? Is it worth finishing the project ?

</comment><comment><USER16> I've had a lot of fun on Quora for these types of questions.

[https://www.quora.com/What-free-hosted-continuous- integratio...](https://www.quora.com/What-free-hosted-continuous-integration- service-is-the-best-for-Ruby-on-Rails-4)

</comment><comment><USER17> Try Codementor [https://www.codementor.io](https://www.codementor.io) \- I'm the founder.

You'd get more personalized help and suggestions based on your specific situation.

</comment><comment><USER18> Reddit can be useful - check out [http://reddit.com/r/findareddit](http://reddit.com/r/findareddit) for specific topics.

</comment><comment><USER19> You can try to submit it on Stack Overflow and hope the deletionist don't notice it.

You can look through past Stack Overflow answers when moderation was better.</comment>


Nest's economics don't work. Why IoT devices should be sold as services - <AUTHOR> https://medium.com/@dconrad/why-iot-devices-should-be-sold-as-services-f73951871006 <comment><USER2> If Nest moved to a subscription model how do you propose they handle people who stop paying? Do they cut off remote access and write off the cost of the product as a loss?

<comment><USER3> They could follow the model of phone companies: they only 'give' you a phone if you sign up for a x year contract, may let you pay some sum up front, and cut off your use if you stop paying.

</comment></comment><comment><USER4> The economies change a lot when you can book that revenue up front. Many SaaS startups want to lock in year long contracts even if the total amount is less for this reason. That revenue can then be used to pay salaries, etc. Not everything has to be or should be paid by VC dollars.

Nest may have figured they could build a larger ecosystem in the IoT and Smart Home space and charge monthly at some later point but didn't materialize.

</comment><comment><USER5> Those who can afford a Nest can also dump it if they choose not to pay. I love my Nest. Bought it one month after the launched. Would I pay $10.00 a month just to reulate my heat only? Hell no! There are so many new alternatives in this space - not as intelligent or sexy looking though. Maybe I build my own. The algorithm is not hard to implement. I am just lazy.

Still love my Nest. Sexy, smart, set-and-forget. But we only mingle in the winter.

<comment><USER6> I, also, am 100% nest (four thermostats). I, also, would never pay 10$/month/thermostat for this service.

I am not shitting on nest here, but I will say there are others out there now who are as or more intelligent though definitely none as sexy.

That said, this whole article is basically "news at 11, IoT device maker says people should pay more for their IoT devices, buys boat"</comment></comment>


Ask HN: Why don't we automate justice? - <AUTHOR> Bulgaria recently is shaken with corruption scandals in the judicial system. It made me think where the fault is. Trying to look through different angles, I always seem to end up finding the error in the human act of knowingly breaking the rules.
So why don't we remove the human error factor and simply automate justice as a set of rules, defined by the law makers, executed by developers, with unit tests accompying every law? Lawyers and prosecutors can each present a logical argument on why they think their side should win, (a jury will decide), and an AI will give out the sentence. Should the issue hit an exception, a judge can intercept the case manually.
Am I missing anything? Because this, excluding the politics (unavoidable human factor), sounds too easy. <comment><USER2> Justice is not a binary thing. For example, given a same crime committed by 2+ different persons, punishment can't be the same because of the personnalities, the reasons that led each one to do what they did.

I've read that for 20 to 30 years, the US tried to make justice somewhat automated by providing some kind of grids the judges had to stick to. They stopped in 2005 because it was really not working.

You should read "Practical Wisdom" for a starter. There is more in this book than justice but everything is worth reading so you won't waste your time :)

</comment><comment><USER3> You may want to watch a few science fiction movies. :p

<comment><AUTHOR> Yes, but the submarine was once sci-fi too :)

<comment><USER3> Less on the "impossible" aspect, more on the "really bad things happen when justice is treated as black and white."

And _really_ bad things happen with AI and justice.

</comment></comment></comment><comment><USER4> a) You are missing that the human error factor is still present in the automatisation itself. Only you don't send one person to prison by mistake for an offense, but maybe a lot of people for a class of offenses. "Ooops, off-by- one error in Judge 1.1, 5 innocent people executed. Patch forthcoming."

b) One cannot encode laws in programs; a judge's task is to interpret the meaning of the words and apply them to a case. This is rarely done in local courts (which mostly really just follow a schema), but higher courts, at least in functional democracies, do actually look at the circumstances under which a law was created.

</comment><comment><USER5> Computers and algorithms have no compassion. It would be very difficult to send someone to prision based on justice bot 2.0.

It's bad enough when companies like Amazon use bots to do their dirty work to ban marketplace sellers.

</comment><comment><USER6> Try reading about mandatory sentencing, which was basically an effort to remove discretion from judges and these days is considered a giant failure.</comment>


A Friendly Introduction to The Riemann Hypothesis [pdf] - <AUTHOR> http://www.math.jhu.edu/~wright/RH2.pdf <comment><USER2> Most people have heard of the Sieve of Erathosthenes: put all positive integers in a list, and delete the number one. Now mark two as prime and delete all multiples of two. Now mark the next remaining number prime and delete all multiples of that number. Proceed ad infinitum.

There's a randomised counterpart to the Sieve of Erathosthenes called the Hawkins ransom sieve: Delete the number 1. Mark two as prime, and _delete all the larger integers with probability 1 /2_. Now mark the smallest remaining integer (n, say) prime, and delete all the remaining larger integers with probability 1/n. Proceed ad infinitum.

One of my favourite results in mathematics is that the Riemann hypothesis (i.e. the error bound for the prime number theorem) holds for the Hawkins random primes with probability 1. The proof is only about five pages: [https://eudml.org/doc/89234](https://eudml.org/doc/89234)

<comment><USER3> That's very cool; thanks for sharing.

</comment></comment><comment><USER4> An interesting read! Unfortunately the author omits the mindblowing (at least for me) proof of why the series

Z(s) = 1 + 1/(2^s) + 1/(3^s) + 1/(4^s) + ...

is equal to the infinite product over the terms "1/(1-p^(-s))", with one term for each prime number p.

This proof does not need a lot of math [1], and if you know the formula for a geometric series, you can also "prove it" by hand-waving: Each term in the product is a geometric series, and if you multiply all these series out, the result is a sum over all possible permutations of prime-factored numbers (well, the inverses of them). Since each natural number has exactly one such represnetation, it's effectively a sum over all 1/(n^s).

Of course, you need some rigor to show that you are actually allowed to rearrange terms of an infinite product of inite sums like that...

[1]: [https://en.wikipedia.org/wiki/Proof_of_the_Euler_product_for...](https://en.wikipedia.org/wiki/Proof_of_the_Euler_product_formula_for_the_Riemann_zeta_function#Proof_of_the_Euler_product_formula)

</comment><comment><USER5> Long before I went to university, I became obsessed with the Riemann hypothesis and one of the first things I put on my site was a simple explanation of the Riemann Hypothesis. This was before I ever actually studied math formally, so it's not a very authoritative explanation. For whatever reason, this explanation is now on the first page of search results in google.ca for "Riemann hypothesis" in Canada, and at the top of page 2 on google.com. I get lots of random blog posts citing the explanation I wrote, and every once in a while I get emails from crazy people who think they have solved it providing me with their non-sensical proofs.

The problem itself is amazing (even though I don't really understand it). The infinite series is so simple, but it generates so much interesting complexity when you look at it visually:

[https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Ze...](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Zeta_polar.svg/1195px- Zeta_polar.svg.png)

[http://mathworld.wolfram.com/RiemannPrimeCountingFunction.ht...](http://mathworld.wolfram.com/RiemannPrimeCountingFunction.html)

</comment><comment><USER6> The Riemann hypothesis is equivalent to a number of interesting statements. One that I like is this.

The Möbius function, defined by [http://mathworld.wolfram.com/MoebiusFunction.html](http://mathworld.wolfram.com/MoebiusFunction.html), shows up in various sieving operation. It is 0 for a random integer with probability (1 - 6/pi^2) and otherwise has apparently even odds of being +-1.

Its sum is called Mertens function, see [http://mathworld.wolfram.com/MertensFunction.html](http://mathworld.wolfram.com/MertensFunction.html). The Riemann conjecture is equivalent to saying that the growth of Mertens function is o(n^(0.5+e)) for every e > 0\. For a long time it was thought to be bounded above by n^0.5, but this is known to be wrong.

If you replace the Möbius function with a function that is -1, 0 and 1 with the right probabilities, then with probability 1 it is O((n * log(log(n))^0.5). Which would prove the Riemann hypothesis. (This intuition would have kept Mertens from conjecturing that it is bounded by +-sqrt(n)...)

</comment><comment><USER7> If you are interested in a longer account, I highly recommend mathematician/popularizer Marcus DuSautoy's Music of the Primes. [https://en.m.wikipedia.org/wiki/The_Music_of_the_Primes](https://en.m.wikipedia.org/wiki/The_Music_of_the_Primes)

<comment><USER8> I would add John Derbyshire's 'Prime Obsession' to that, which adds a nice historical context to the issue.

</comment></comment><comment><USER9> This is fantastic! I know next to nothing about number theory (despite my interest in primes) and this had me in stitches. Thanks for the link.

</comment><comment><USER10> That article was really a great refresher on something I barely remember from undergraduate courses. I'm left a little unfazed about the style of prose, but I guess that's the price you have to pay for dat dankness, yo.

<comment><USER11> Yes, I liked the content _in spite_ of the "trolling," since there is enough of actual math, the author actually knows the field and it is presented simple enough to make the math path enjoyable.

I'm sure it would work good even with less or no "trolling." It is possible to make the approachable text even without the jokes based on misinformation. I see the author made the book with that in the title, so it was obviously a selling point for him, but the quite clear approach to the math material (when he reader manages to ignore the trolling) is actually good. I have nothing against the funny presentation of the actual biographical facts however.

The misinformation is, however, problematic. The author even states in the foreword that he "hopes that some of those will appear in Wikipedia." Unfortunately, it really can happen.

</comment></comment><comment><USER12> I'm enjoying this text immensely. Math should be presented this way more often.

<comment><USER13> A new pedagogical paradigm?

<comment><USER12> I wouldn't necessarily go that far. My personal taste may not be representative.

</comment></comment></comment><comment><USER14> Every now and then someone posts some humorous easily-digestible technical content to Hacker News and commenters say stuff like "All mathematics/science/software development textbooks should be written this way", and some commenters throw out a few similar links, and the story slowly drops down the HN front page, as stories do, and then it's mostly forgotten, until the next one comes along.

If education matters, and if human intelligence augmentation matters, then we should be researching how to make difficult technical material more easily digestible, for example by enhancing it with an appropriate level of humour.

Millions of dollars are being spent on making machines more intelligent (or is it billions?). Someone should be spending some time, money and effort on making people smarter.

Also, compared to other possible human intelligence augmentation technologies, writing textbooks in a more humorous style is less intrusive than taking "smart pills" or placing electrodes inside your brain.

<comment><USER15> Through the history of mankind we've been researching ways to make difficult technical material more easily digestible. And may the invention of print itself, and the subsequent invention of "the textbook" be a showcase example of this.

Though humorous style is less intrusive than taking "smart pills" or placing electrodes inside our brains, it is very context-sensitive. I believe humour should definitely be used more often in oral presentations of complicated material, where the presenter is able to "feel" the context of those listening; but maybe not so much in written text.

To make a point, there are many technical textbooks that use funny examples and exercises as a way to draw students attention - and that does generally work quite well - but it can be quite a tiring read if you are going through the material multiple times.

</comment></comment><comment><USER16> If you're looking for something with a little more detail (but that still doesn't require a lot of mathematical background), you should check out [https://github.com/williamstein/rh](https://github.com/williamstein/rh)

</comment><comment><USER17> The author has a book, _Trolling Euclid_ [0], on Amazon.

[0][https://www.amazon.com/Trolling-Euclid-Irreverent- Mathematic...](https://www.amazon.com/Trolling-Euclid-Irreverent-Mathematics- Important/dp/1523466464)

</comment><comment><USER18> This style of humor reminded me very strongly of Dave Barry.

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

<comment><AUTHOR> james-mickens has a _very_ similar style as well. for example, if you have not read 'the night watch' ([http://scholar.harvard.edu/files/mickens/files/thenightwatch...](http://scholar.harvard.edu/files/mickens/files/thenightwatch.pdf)) check it out.

you might like it :)

<comment><USER18> That is definitely similar! Thanks for the suggestion.

I absolutely adored Dave Barry's work when I was in middle school (I often couldn't read a single paragraph aloud without laughing out loud) but I find it less enjoyable today. Maybe my taste in humor has shifted somewhat.

</comment></comment></comment><comment><USER19> Someone needs to rewrite Rudin in this way.

</comment><comment><USER13> Can I double upvote!</comment>


Startup Idea - <AUTHOR> Seeing the airbag for cyclists post earlier, why not airbag for seniors as hip protectors? I have to imagine insurance companies would love this. <comment><AUTHOR> Airbag for cyclists: [http://www.hovding.com/?utm_expid=37988497-0.onzg4jq0RsKvXrg...](http://www.hovding.com/?utm_expid=37988497-0.onzg4jq0RsKvXrgwOlw3lw.0)</comment>


JetBrains releases open-source Python IDE - <AUTHOR> http://www.jetbrains.com/pycharm/ <comment><USER2> I'm fairly new to the Python world but I've been using PyCharm for a couple months now and it is absolutely amazing. JetBrains makes _really_ great products, I've been a huge fan of IntelliJ IDEA (Java) for a few years now - converted many die hard Eclipse users over to it, and they never looked back.

<comment><USER3> I agree. I've been using IDEA since early 2005. I am currently working on a project that requires me to use Eclipse, and it's almost unusable.

<comment><USER4> Retraining the brain is difficult in almost any facet. I tried switching keyboard layouts once, suffice it to say I've reverted to ye olde QWERTY.

<comment><USER5> For what it's worth, I used Eclipse for 3-4 years before Intellij (it was what my university introduced students to for programming in C++ and Java). Switching to Intellij was pretty painless other than initial configuration overload (since there's so much more built into it by default than Eclipse). Having to switch back to Eclipse at times for a few things since was not so much.

Intellij just as a much more intuitive UI and layout. Eclipse is fine if you're used to it, but it's much more dissociative by design when switching languages or usages than Intellij.

<comment><USER6> IntelliJ has such an ugly font rendering system on Windows that it makes it very hard for me to dump Eclipse. This prolly has to do with Eclipse's native font rendering.

<comment><USER5> Yeah, it's not too great due to relying on the JVM for rendering. I use Liberation Mono with it and it looks pretty good (even with anti-aliasing set to off). Everything else, not so much.

The top image[1] at the Slant programming font rank list[2] was a screenshot I took of Liberation Mono when using Intellij on Windows, just to give an example. I miss having bitmap fonts (which Eclipse does allow), but Liberation looks close enough to my favorite bitmap font (Dina), that I don't mind anymore.

[1] [http://img59.imageshack.us/img59/3066/pythono.jpg](http://img59.imageshack.us/img59/3066/pythono.jpg) (anti-aliasing was set to off when that was taken; italics suffer, but it's tolerable to me)

[2] [http://www.slant.co/topics/67/viewpoints/26/~what-are-the- be...](http://www.slant.co/topics/67/viewpoints/26/~what-are-the-best- programming-fonts~liberation-mono)

</comment></comment></comment></comment></comment></comment><comment><USER7> JetBrains has actually open sourced the complete IntelliJ Community Edition IDE/platform:

see [http://www.jetbrains.org/display/IJOS/Home](http://www.jetbrains.org/display/IJOS/Home) and [https://github.com/JetBrains/intellij- community](https://github.com/JetBrains/intellij-community)

Incredible!

<comment><USER8> Furthermore, they are working on a cross-platform C++ IDE (hopefully using Clang for parsing): [http://www.jetbrains.com/objc/features/cpp.html](http://www.jetbrains.com/objc/features/cpp.html). I can't wait for the release.

<comment><USER9> Yes I cannot wait.

I recently started trying to learn some basic C/C++. My usual initial step in setting up an environment for a new language is to google "intellij plugin for X", so I was very disappointed to find that C/C++ is very poorly supported with respect to most other mainstream languages.

I ended up having to go with Visual Studio, which is also impressive, but there are features I miss coming from the Jetbrains world.

<comment><USER10> To be fair few IDEs support advanced functionality (like refactoring) with C++, due to the monstrosity that it is and the amount of UB.

Visual Studio + ReSharper is awesome for C#, IntelliJ is awesome for Java. For C++ you're pretty much screwed.

<comment><USER11> Clang is destined to change that.

[http://clang.llvm.org/features.html#applications](http://clang.llvm.org/features.html#applications)

</comment></comment></comment></comment></comment><comment><USER12> I've been using the Anki[1] spaced repetition system to quickly get up to speed with the PyCharm key bindings.

I've been using the JetBrains screencasts[2] to get up to speed with the IDEs features. Although these are too thin on the ground currently and i confess that i keep getting distracted by the JavaScript / AngularJS videos! The presenter on those i find draws me in more. Some of the PyCharm videos don't even have narration.

I have explored the Flask integration which was better than i expected but not life changing for me.

VirtualEnv integration is well enough, but PyCharm <\--> command line <\--> virtualenv integration is not ideal yet. Getting virtualenvwrapper and PyCharm playing nicely together was more work than i anticipated. PyCharm doesn't make it easy to be notified about newly created virtualenvs.

I feel all the default templates for modules and test files are not ideal for me, i ended up replacing them with my own templates. The only reason this even registers with me is because some less experienced Python developers persevere with the default PyCharm templates and end up with __author__ and other cruft in their modules.

The internal jetbrains supplied static validation (Pep8 / PyLint) functionality doesn't appear to be vanilla pep8 / pylint. This is only a minor issue but i don't like that there are potential violations i don't see until i've pushed to Jenkins and viewed the reports there.

I intend to push further with PyCharm, i'm open to the idea that there's productivity benefits to be had with python from an IDE that are not available to me in vim - although i strongly advocate the JEDI plugin with VIM, it's leaps and bounds over the old ROPE system IMO!

<comment><USER13> If you are a Vim fan, try using IdeaVim plugin with PyCharm. Plugins can be installed directly from the in-IDE plugin library.

<comment><USER14> I tried to like IdeaVim, but simple things like undo/redo were broken by the mix of vim and intellij shortcuts. When even the basics don't work...

<comment><USER15> This is a known problem. The multiple undo actions per single 'u' command bug has been fixed recently. The updated version of IdeaVim will be released soon. We have been working on making IdeaVim more stable, see the changelog [https://github.com/JetBrains/ideavim/blob/master/CHANGES.md](https://github.com/JetBrains/ideavim/blob/master/CHANGES.md).

<comment><USER14> Very glad to hear that. Thanks.

</comment></comment></comment></comment></comment><comment><USER16> I'll happily continue to pay for PyCharm even now that it's open-sourced (I re-upped for another year last week, and don't feel like I missed anything by not waiting for this). Aside from the fact that the Pro version has some killer features - Django support, remote interpreters, diagramming, and a .less editor - these guys deserve to be paid for an outstanding product.

I'm sure I could assemble a tool chain that does 90% of what I love about PyCharm in vi, but I'm a-OK with having my company pay $200 to have someone assemble that for me (or $100, if they didn't pay for it). In the same way that some people - but not me and my Lenovo - will pay extra for a shiny metal computer that just works, I'll pay extra for an IDE that gets out of the way when it should, and gets in the way it needs to.

</comment><comment><USER17> Download link for linux version is busted. Here is the correct one (from trial and error):

[http://download.jetbrains.com/python/pycharm- community-3.0.t...](http://download.jetbrains.com/python/pycharm- community-3.0.tar.gz)

<comment><USER18> Speaking of linux, has the 64bit version improved at all? Everytime I try it out I can't stand it more than a few minutes and revert to Eclipse. (previous discussion: [https://news.ycombinator.com/item?id=5201366](https://news.ycombinator.com/item?id=5201366)).

<comment><USER19> If you do hacks then its absolutely ok (for me at least).

(I'm the author of the last comment in your linked thread). The idea is to take a font and modify it by stripping all the hinting info.

</comment></comment></comment><comment><USER20> Does this mean that the PHP, Ruby, and Obj-C versions will be seeing community editions soon as well?

<comment><USER21> No, this is very unlikely. (JetBrains CTO here, by the way.)

<comment><USER22> I was wondering how it's possible that IntelliJ is free for Android development? What drives the decision making to make one product free and the other paid? In a way I like paying for RubyMine, hoping that it won't be discontinued in the long run, although I'm guessing IntelliJ has a much larger user base.

<comment><USER23> Android Studio is a rebranded version of the Community Edition of IntelliJ IDEA which was free and open source for some time already.

The idea probably is to get the people to use (and love) it and then when they want the non-free features, to buy it.

And with Android Studio: Probably Google is paying a bit for the development.

<comment><USER21> Google is not paying anything for the development of Android Studio. Instead, they've put their own development team to work on the Android features in Android Studio, which we then integrate into our distribution of IntelliJ IDEA.

<comment><USER23> Thanks for clearing that up!

And thanks for such a great IDE!

So if I'am using Android Studio I am a bit ahead (Android specific) feature wise that by using the latest EAP of IntelliJ IDEA?

</comment></comment></comment></comment></comment></comment><comment><USER24> Does it support multi-selection, Sublime style? I just can't use an editor without it anymore.

This is a bit OT, but Komodo got an update some days ago with multi-selection support, which I was quite excited to try. Only to find out their implementation is quite frankly useless.

[http://www.activestate.com/blog/2013/09/komodo-8-5-release](http://www.activestate.com/blog/2013/09/komodo-8-5-release)

'Right-click in the editor and choose "Select --> Multiple Selection --> Add", then use Ctrl+Click (Cmd+Click on Mac) to quickly make additional selections.'

<comment><USER25> A sibling mentioned refactoring, but one thing I also use a lot is column-mode editing. It's something you can toggle just like you can in Eclipse, and can be very useful. Not quote as useful as selecting multiple regions to edit, I agree, but still very good.

For me, the killer things in PyCharm are the excellent Python library support, and the fact that it indexes my codebase so that "Where is this defined?" is extremely fast. That is the feature I use all the time which is less convenient to do with many other editors.

<comment><USER26> The default key binding for column mode is Alt-Shift-Insert.

</comment></comment></comment><comment><USER27> Excuse me if I'm being naive, but does Python development need an IDE? In what ways could it be helpful? I'm under the impression that Python is not compiled generally.

I'm coming from the Ruby point of view

<comment><USER28> I've tried a lot of IDE's for python development in the past and always went back to a basic text editor; the extra features never outweighed the bloat.

But then i found PyCharm and never looked back. I feel i develop at least 50% faster with any serious project; i still use Sublime for the one-off scripts, but everything else i find the introspection, code completion and refactoring just so good its now hard to go without.

Props to Jetbrains, and I look forward to v3 pro! (my 2.7 isn't yet telling me i have an upgrade... i'm hoping this is coming soon!)

<comment><USER29> See my question above. You don't need your 2.7 to tell you anything. If you've got a license you can simply install the 3, import the settings and use the same license.

<comment><USER28> If memory serves, this will install it side-by-side with existing install, whereas doing it in-app upgrades (windows). Could be wrong though.

</comment></comment></comment></comment><comment><USER29> I've bought the 2.7 version a couple of months ago and I don't regret it, but does anyone know if the 3 (pro edition) will be available as a free update for people like me ?

I've read on the site that people like me are supposed to receive a free update by email, but i didn't see anything... Anyone in my case ?

<comment><USER30> From the site: "PyCharm license is permanent and includes one year of free product upgrades since the purchase date, including even major version upgrades."

<comment><USER29> Yes, that's the line I read as well, but nothing in my mail. So i was wondering if someone did receive that update by mail, or if it's just too early.

<comment><USER21> What exactly do you expect to get in your mail? Just install the new version and import the settings from the previous one, and it'll work with your current license.

<comment><USER29> Ok, cool.. I read this line wrong apparently : "PyCharm license includes the initial 1-year upgrade subscription qualifying you for the receipt of the new product releases and technical support (available via email only) free of charge"

Didn't realize the "via email only" concerned the support only. (non-native english speaker here).

<comment><USER31> That's quite understandable, I'd say it's pretty ambiguous.

</comment></comment></comment></comment></comment></comment><comment><USER32> I own personal licenses for Idea, RubyMine, and PyCharm - all amazing good products.

Where I am working now, Eclipse is the supported environment so I am using it. OK, but not as good...

BTW, when they open sourced Idea for Java, I was pleasantly surprised how easy it was to build. Nicely packaged.

<comment><USER33> Is there any point in owning a license for IntelliJ and RubyMine/PyCharm? I thought that IntelliJ Ultimate had all the features of RubyMine and PyCharm but I haven't used them so I could be mistaken.

<comment><USER34> You are correct, Ruby and Python plugins add most of RubyMine/PyCharm features to IntelliJ IDEA Ultimate. You may want to have separate IDEs if you need more lightweight environment. RubyMine & PyCharm are in general updated more frequently too.

</comment></comment></comment><comment><USER35> Is this preferable over ipython/pylab notebooks for math/scientific python programming?

<comment><USER36> For exploratory interactive programming and shorter scripts, not really. For building larger more complicated systems, very much so.

Personally I use both, continuously switching between the two. I play around in ipython/pylab until I've gotten all the algorithms and details worked out, and then use Pycharm to add that code to the larger library or application which those algorithms will be a part of.

<comment><USER37> I feel like IPython is better for sharing your final analysis but I do all of my coding/development in Emacs + python-mode and haven't been able to figure out all the hype around IPython. And once you start with Pylab it becomes difficult to map your functions back to their original namespaces (especially since many are redundant between numpy and scipy) in a bigger project, so I stopped using it altogether. Could you explain a bit if I'm missing the point?

<comment><USER38> What entrypoint are you using to run your programs? REPL function calls / test runners / main methods from the CLI / local web server w/browser? I think understanding that matters the most.

If you do a lot of development in the REPL (i.e. exploration), then that is where iPython (in a notebook, or a shell) really is nice. If you don't, then you may not see the benefit.

<comment><USER37> Thanks for the response.

I primarily program with python for shell scripting/text processing, or data analysis/simulation with numpy/scipy/pandas.

I do a lot of exploration, I rarely ever type anything directly in the REPL/interpreter - I write all my code in scripts and send them to the REPL with emacs keystrokes. Afterwards, I'm left with a script that contains my analysis/processing method. (never had a local web server running except when playing with emacs ipython notebook).

Am I possibly missing a way to do it better?

<comment><USER36> _Am I possibly missing a way to do it better?_

I find ipython with its magic commands and ability to directly call shell commands more handy than the standard REPL for interactive shell type scripting.

Other than that, not really. Inline graphs are nice if you like that sort of thing, and some of the magic commands are occasionally useful. But beyond that I don't think you'll gain much if you have a approach that works for you.

I also gather that ipython's parallel processing tools are pretty powerful, but I've never really played with them.

<comment><USER37> Are direct shell commands that useful...? I either have a shell running in emacs or in a separate terminal that I can quickly switch to. I've heard about the parallel processing tools, but sounds like I'm doing alright with emacs. Thanks much.

</comment></comment></comment></comment></comment></comment></comment><comment><USER39> Is it a multi-language editor? I.e. can I switch between html, javascript and python and expect to have a similar interface, commands, API, etc. ? If so, it looks like a strong contender against Sublime IMHO.

<comment> brown9-2 No. JetBrains has a different product for Javascript and/or HTML development: [http://www.jetbrains.com/webstorm/](http://www.jetbrains.com/webstorm/)

<comment><USER26> The paid version of PyCharm has the web stuff.

</comment></comment></comment><comment><USER40> So if you're using Django or Flask and need Javascript and HTML/CSS you still need the professional version?

Also is the professional version any of the paid licenses on this page [http://www.jetbrains.com/pycharm/buy/index.jsp](http://www.jetbrains.com/pycharm/buy/index.jsp)?

It's just that the term "Professional Version" is used to differentiate it from the "Community Edition" on all the informational pages and then the terms are not used anywhere on the Buy page.

<comment><USER41> If you pay for it, it's a Pro version.

</comment></comment><comment><USER42>
        bin/pycharm.sh
        ERROR: Cannot start PyCharm
        No JDK found. Please validate either PYCHARM_JDK, JDK_HOME or JAVA_HOME environment variable points to valid JDK installation.

I wish this had been mentioned up front, before I spent all that time watching videos and such. :/ Nothing against java per se, just that it's a giant runtime/security-surface that has no bearing on my Python work.

I'm still happy with Geany, gvfs, meld, and terminal, etc... though they might not be as flashy. :)

<comment><USER43> Same here, though I've been following JetBrains for a while. I wish there was some way they could port it to OS X without depending on Java.

<comment><USER44> There is no way they would 'port' away from Java. JetBrains has been building this platform for more than a decade. This is what has allowed them to support many operating systems concurrently and with great results. No need for the FUD on Java. Java is really what they excel at.

</comment></comment></comment><comment><USER45> Am I the only person thinking that any Java-based IDE demos have been sped up by the magic of editing by at least 200% and all the SBBOD-ing has been trimmed out?

</comment><comment><USER46> Python in general is an awesome fun language to work in this just makes the language even more better and fun to work with. Thanks JetBrains!

</comment><comment><USER47> Hm, so I just tried it. I have the latest Mac mini (i5 8GB RAM), and it was slow. Switching between files, highlighting lagged. Typing was stuttery. Next, I couldn't change the font, it was just not selecting. So, looks like cool software, but I went back to Sublime Text 3 with lint extension.

<comment><USER48> If it's the same as IDEA, you need to create new theme before font change is available.

<comment><USER49> It is.

</comment></comment></comment><comment><USER50> I'd love to know why the OSX version is bugging me to install X11 all the time. /peeve

</comment><comment><USER51> PyCharm is amazing, and it can only get better with this announcement. The only issue I have with it is the huge amount of memory it uses. It uses >1GB of ram on my macbook air, and using pycharm for extended amount of time makes it sluggish.

<comment><USER21> If you can reproduce the problems, please submit a memory snapshot as described in [http://devnet.jetbrains.com/docs/DOC-1212](http://devnet.jetbrains.com/docs/DOC-1212)

</comment></comment><comment><USER52> Read some comments here and feeling bad that I spent the past ~6 years using eclipse.

</comment><comment><USER53> It's already available in the AUR:

[https://aur.archlinux.org/packages/pycharm- community/](https://aur.archlinux.org/packages/pycharm-community/)

Someone is working on Debian packages for it?

<comment><USER54> It requires the Oracle JRE, so I don't see how Debian could provide packages for it without a ton of weird hoops to jump through. I tried it on OpenJDK and it chokes.

</comment></comment><comment><USER55> Considering the growing number of coders out there that usually start with a language like python or js, this is kind of an obvious thing to do. (more so than trying to compete with netbeans/eclipse)

</comment><comment><USER56> What an amazing coincidence, I started learning Python last week and was trying my hands on PyDev. Yesterday when I saw this news, I immediately downloaded PyCharm and now I am loving it.

</comment><comment><USER57> Adding PyCharm to the collection of products is awesome. I do wish JetBrains would offer some combined licensing. Since I have a tendency to use quite a few of their products.

</comment><comment><USER58> Where are the sources? I can't find a link to them

<comment><USER21> The source code of PyCharm Community Edition will be added to the IntelliJ IDEA Community Edition repository in the coming days.

</comment></comment><comment><USER59> The .exe download is blocked at the office.

Is there a .zip version available?

I also assume the installer doesn't require administrative privileges... Am I right?

<comment><USER26> There doesn't appear to be a .zip version. They have zip versions of the Intellij so they may add it if you do a feature request. The installer only requires admin to install to the Program Files. If you say no, it installs to your local user location (in Roaming).

<comment><USER59> Ah, interesting. Thank you.

<comment><USER59> Managed to download, then installed in alternate location as non-admin. Working good so far.

</comment></comment></comment></comment><comment><USER60> How does this compare with pydev? [http://pydev.org/](http://pydev.org/)

<comment><USER61> Well, at the risk of providing a not very detailed answer: it's better, in my subjective opinion.

Better at code introspection, better at refactorings, better at debugging. Also, I prefer the UI.

Of course, you're the final arbiter of these things for yourself, so give it a short.

</comment></comment><comment><USER62> The title seems misleading - the IDE is not opensource, but they offer free license for opensource projects.

<comment><USER63> Nope, they're now offering PyCharm Community Edition which is free to use for all and open source under the Apache 2 license.

<comment><USER64> Have you found the link to the source? I can't find it and so curious :)

<comment><USER21> The source code of PyCharm Community Ediion will be added to the IntelliJ IDEA Community Edition repository in the coming days.

</comment></comment></comment></comment><comment><USER65> Congratulations! JetBrains did it again!

</comment><comment><USER66> Great... Now I really can't choose between PyCharm vs Sublime+iTerm2+SourceTree...

</comment><comment><USER67> Is it just me or the font selection option under Windows is rather convoluted?

<comment><USER21> It is, sorry about that. We plan to change the UI back to a simpler version in one of the coming updates.

</comment></comment><comment><USER68> pascal is making a comeback with free-pascal and lazarus i wonder if it will catch their attention

all free-pascal need now is a decent web-framework, but for desktop apps, i think its one the best options at the moment

</comment><comment><USER69> Still waiting for Grok. This should really be done once for all editors.

</comment><comment><USER70> Just tried Professional one on OSX, CPU goes above 100%.

Anyone having same issue?

<comment><USER71> Well, It's a multi-threaded program, and when you create a project it will start out by indexing everything. So while it's doing that, it can spend quite a lot of CPU time -- "top" etc. typically show the CPU time spent by all the threads in a process, so you can easily see it go up to N * 100% based on your cores.

That can get occasionally annoying, if you drop in a a bunch of 1mb text files in your repository and it insists of examining them.

But, introspection and refactoring capabilities are great.

<comment><USER61> > That can get occasionally annoying, if you drop in a a bunch of 1mb text > files in your repository and it insists of examining them.

You can right click the directory and mark it as excluded from the project. We have an integration test suite that likes to emit gigabytes of XML into its local directory - which IDEA happily tries to index. Excluding it saves me a lot of CPU time.

</comment></comment></comment><comment><USER72> Webstorm will be open-source any minute now...

<comment><USER21> If you look at the feature comparison matrix, you'll see that the Community edition specifically excludes the features which are part of WebStorm. So no, don't hold your breath.

</comment></comment><comment><USER73> now that's pretty AWESOME ! while eclipse supports python, it feels like a dinosaur. Jetbrains ide is the sh|t ! Thanks guys.

</comment><comment><USER74> Unfortunately, PyCharm's pyconsole is a copy-and-paste job of Eclipse PyDev's pyconsole, and it is quite buggy and lacking in features. This is quite disappointing since I have high expectations for any JetBrains product. I was hoping that JetBrains had the effort to properly implement REPL work flow in their IDE instead of copying the code from its competitor (heck, I just took a look at PyCharm's pyconsole code, and the code still mentions Eclipse)

The above probably is not a deal breaker for many people, but just as many people indeed use Python as REPL, so I would like to see more improvement.

Otherwise, no problem with the software so far that I have tried. Thanks, JetBrains.

<comment><USER21> Our code is a fork of pydev's implementation on the back-end and our own implementation on the front-end, and we've made many improvements to pydev's code since the fork. If you find anything lacking, please file feature requests to our issue tracker.

<comment><USER74> Thanks for your reply, and I stand corrected regarding calling the work a copy-and-paste job.

Out of my curiosity, I was wondering whether you could explain why pydev was chosen to be the base work.

</comment></comment></comment><comment><USER75> Oh look, another community edition program. "Open core is the new shareware."

[http://ebb.org/bkuhn/blog/2009/10/16/open-core- shareware.htm...](http://ebb.org/bkuhn/blog/2009/10/16/open-core- shareware.html)

<comment><USER76> From the article:

 _And, this is true whether the Core is GPL 'd or permissively licensed. In both cases, the final story is the same: take a proprietary license or be stuck with cripple-ware._

Except that IntelliJ Community Edition is a perfectly usable and able IDE already. In fact, Android Studio is based on it. Certainly not crippleware.

And in this case I very much like this model. InteliJ CE is open source software under the Apache License version 2.0. If JetBrains would disappear tomorrow (hopefully not!). A non-profit project or another company could continue where they left off.

That said, I am a very happy user of the Ultimate Edition :).</comment></comment>


Math puzzle - two mathematicians guessing coin flips - <AUTHOR> http://maxschireson.com/2011/12/06/fun-math-puzzle-two-mathematicians-and-a-coin/

<comment><USER2> This is similar to some of the effects of entanglement in quantum mechanics, where you can't affect the probability of a single event, but you can guarantee the events are not independent.

(spoiler alert)

Once you figure the guesses have to be based on the coin flip you can see, it's pretty straightforward because there just aren't that many possible strategies. Sam always guesses that the coin he can't see is the _same_ as the one he can see, whereas Dirk always guesses they are _different_. If they are the same, Sam is right and Dirk is wrong. Otherwise, Dirk is right and Sam are wrong. Each is right 50% of the time, they just ensure they are never right at the same time.</comment>


Ask HN: Learning flask, I need a small project to make. What can you suggest? - <AUTHOR>

Hi guys,
I'm a PHP/ASP.NET programmer and I was hoping on learning flask and python more. Hopefully, I can land a job someday.
My problem is I don't know what project should I do. I want something that would serve and be valuable to a lot of people.
What can you suggest me?
I'd appreciate all your comments. Thank you very much. <comment><USER2> Writing prompts.

V1: click the button, and get three words that a writer would use to kickstart a daily writing exercise.

V2: choose which parts of speech are delivered: noun, verb, etc.

V3: display a creative commons licensed photo (from flickr, e.g.) relevant for each displayed word.

V4: Take your experience developing the early versions and figure out what V4 should be.

</comment><comment><USER3> If you have access to a twilio account, this repository on GitHub is a really good place to start building a twilio app. I used it a few weeks ago and had a lot of fun messing around with everything twilio can do.

[https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku- and...](https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask)

</comment><comment><USER4> The forum software market seems to be pretty dominated by PHP, and a lightweight python-based solution wouldn't hurt. It's also pretty static, so you can focus on learning Flask/python and don't have to switch to client-side scripting too often (or mess with NoSQL and similar distracting technologies).

</comment><comment><USER5> No nonsense messaging. Create a public discussion that can be shared as an url.

</comment><comment><USER6> You could try building your own URL shortener. You could make it as simple as you like to start with, then choose to add more features as you get more familiar with Python and Flask.

</comment><comment><USER7> Time tracking software. We all need more of these types of apps.

</comment><comment><USER8> A static, Jekyll-like blog generator would get you a good grasp of language fundamentals I'd think, even though at least one already exists for Flask.

A message-board/forum/discussion type piece of software will get you a solid grasp of SQLAlchemy and company.

Something I'd LIKE to see in Flask (that I don't believe exists yet) is some sort of analytics package that dumps data into a Mongo/Redis/NoSQL store and presents things in a pretty package on the backside.</comment>


Oil Fail - <AUTHOR> https://www.tbray.org/ongoing/When/201x/2019/01/06/Oil-Fail <comment><USER2> Free market economics will decide the future of oil. Unless governments interfere, oil will remain a viable energy source because it is significantly cheaper and more reliable than any of the renewable alternatives.

<comment><USER3> > Free market economics will decide the future of oil.

No, it won't because free markets don't exist except as an abstract ideal in general, and they very much don't even approximately exist in oil.

> Unless governments interfere, oil will remain a viable energy source because > it is significantly cheaper and more reliable than any of the renewable > alternatives.

Has there ever been a time without governments actively and energetically intervening in the market for oil (not always in the same direction)?</comment></comment>


Lisp in a box - start quickly - <AUTHOR>

http://gigamonkeys.com/lispbox/
Interested in learning lisp, or need to get started quickly?  Check it out, quite a few people have said it helped them out. <comment><USER2> If you have a Mac, also consider Ready Lisp.

<http://www.macupdate.com/info.php/id/26203/ready-lisp>

SBCL bundled with Aquamacs, a version of Emacs designed to integrate with the Mac interface (including Mac keyboard shortcuts).

<comment><AUTHOR> I had a friend who was new to Lisp check it out - and they really liked how simple it was.

So definitely a good option to get started.

</comment></comment><comment><USER3> Or on Ubuntu:

apt-get install slime sbcl emacs cl-asdf

:-)

</comment><comment><USER4> Step 1. Cut a hole in your tarball

</comment><comment><USER5> Why aren't you just pointing your submissions to what you're linking directly? It seems like that's the way hyperlinked posts ought to work.

<comment><AUTHOR> If you put a link - you can't put a comment (or so I understand). Also this was more meant as a discussion, the link isn't the important part.

</comment></comment><comment><USER6> I downloaded this a long time ago. I lost interest in lisp, but I keep it around at work and home because it makes a damn fine calculator, especially when you have a multi-step problem. You can just type it in in the order that you would say it out loud, whereas on a normal calculator (like calc.exe) you have to rearrange it to suit standard order of operations.

<comment><USER7> Funny, I started doing a lisp interpreter a while back and I have only got to the part where it makes a damn fine calculator.

I believe my version is much handier than having to use Emacs.

</comment></comment><comment><USER8> @oditogre:

That is truly one of the dumbest things I've ever read. Thanks for exploding my brain.</comment>


Why Humans Can't Do Without Sports - <AUTHOR> http://nautil.us/blog/5-reasons-why-humans-cant-do-without-sports <comment><USER2> My wife once told me that she notices I'm a less happy person if I'm not regularly playing sport. Since she mentioned that, I've been able to sensitise myself to when I think I'm starting to feel irritable for reasons of 'not having competed recently'. I've found it to be quite tangible.

There's definitely an evolutionary element to this, something along the lines of a requirement to contribute to the survival of the tribe; prove ones worthiness.

The other thing about sport, for me, is singular focus. Whilst it's physically draining, it's a temporary escape from all those other niggling thoughts and helps to get rid of the trivial ones. Meditation-esque.

<comment><USER3> Do you need 'sport' to achieve those goals, though? Or would exercise enough be sufficient? I know several very fit people who don't play team-sports, but just take themselves for a long run or swim.

The article was rather flimsy and didn't actually answer its headline. It would have been more interesting had it addressed why people keep watching sport without participating.

<comment><USER2> I can't answer that definitively, but my preference is for team competitive sports, which is probably related to the motivation to perform as opposed to scratching a genetic itch.

Agree that the article was flimsy, and that's putting it politely.

Whether it's a function of age and cynicism or not, I'm not sure, but I'm much less fanatic about watching sports than I used to be. Jerry Seinfeld was right when he said that we're cheering for the uniforms. My home team for my sport- of-choice to watch is maybe 10% local talent and the rest are imports, and even the local ones don't necessarily stay put from one year to the next. Makes me care less and less.</comment></comment></comment>


This is what happens to your brain when you give up sugar - <AUTHOR> http://mashable.com/2015/02/18/brain-on-sugar/#1.9ewKkMviq3 <comment><USER2> Maybe this comes now with new documentaries about sugar in the movies, where they argue that sugar is an even stronger, more addictive and more dangerous drug than cocaine. And the US food industries using and suppressing this knowledge.

* "That Sugar Film" [http://thatsugarfilm.com/](http://thatsugarfilm.com/)

* "The Truth About Sugar" [https://www.youtube.com/watch?v=-1cCXH-XGhI](https://www.youtube.com/watch?v=-1cCXH-XGhI)

* "The Secrets of Sugar" [http://topdocumentaryfilms.com/secrets-sugar/](http://topdocumentaryfilms.com/secrets-sugar/)

</comment><comment><USER3> No, this is what happens to rat brains when they give up sugar.</comment>


Thoughtly's Ellipse: NLP Research Platform Built with Meteor - <AUTHOR> https://www.linkedin.com/pulse/thoughtlys-ellipse-ai-research-chase-perkins

<comment><USER2> There is no mention of Meteor in that article?</comment>


When can a comma cost you $2 million? - <AUTHOR> http://www.chaosscenario.com/main/2010/01/when-can-a-comma-cost-you-2-million.html

<comment><USER2> This is the single biggest problem with contract drafting, and lawyers do it as well as lay people - to read into your words what you _think_ is there as opposed to what they actually say.

The law sometimes gives a contracting party a way out by allowing you to admit evidence in a dispute over what the parties truly intended if the language reads ambiguously, assuming the language is merely ambiguous and not plainly and incontrovertibly against you. But, trying to salvage a contract in this way is like playing out a desperate last act because, by the time you reach that stage, you will already have a losing situation on your hands. Even if you win such a dispute, by the time it reaches litigation, you likely will have already lost economically on the deal in most cases.

The lesson here is not necessarily, "always use a lawyer" (though you should if you have a lot at stake in a particular contract) but rather, "read your contracts carefully and _literally_ before signing." A good lawyer will do this, as will a seasoned executive or contracts manager (or founder, for that matter) who is experienced in dealing with contractual issues or who otherwise has a knack for this sort of this (some founders do have such a knack, most don't). Never simply assume that the language is what it appears to be at first glance.

</comment><comment><USER3> What a pain. Speaking as a former attorney, these situations piss me off. English prose really isn't equipped to handle long conditions, exceptions and such. What's important in a contract is that it unambiguously captures the intent of both parties. Formulas, diagrams really should be used more often. We're not on typewriters anymore - Word can handle graphics. If you've ever seen a complex mathematical formula written out in legal prose, you'll know what I'm talking about. End rant.

<comment><USER4> Good points. As a layman, I wonder, do courts demand that all of a contract's substance be in prose, or is it okay for two parties to agree to a contract that's partly in, say, diagram form?

<comment><USER2> The terms of a contract can be evidenced by anything that shows a meeting of the minds, including the _actions_ of the parties in implementing the contractual terms (so-called "course of performance").

There is no doubt that diagrams can be used in contracts and frequently are. Though a diagram would not stand alone, it would constitute strong or even conclusive evidence of the meaning of the prose part of a written contract (or the meaning of words exchanged by parties in the case of a verbal contract).

Bottom line: a meeting of the minds _always_ has reference to some context and all of that context can be relevant to determining meaning - if a diagram helps show the context in which parties are agreeing to something, it can and should be used to add clarity to a contract.

</comment></comment></comment><comment><USER5> The introduction is a nice piece of trivia. However, it bears almost no relation to the message that the story is supposed to convey. ("Legal support f-ed up reading a contract" versus "being careful about designing a UI")

</comment><comment><USER6> Isn't there some rule, that if there is a dispute in the contract, whoever wrote it gets the "less beneficial" interpretation?

<comment><USER2> Yes, in the case of ambiguity in meaning, the rule (when applied) states that such ambiguities are construed against the drafting party.</comment></comment>