Please learn to write - <AUTHOR> http://www.randsinrepose.com/archives/2012/05/16/please_learn_to_write.html <comment><USER2> Source of my problems:

      design issues               5%
      architecture constraints    5%
      language shortcomings       1%
      mental blocks               5%
      personal time management    4%
      personal energy             5%
      communication with others  75%

I waste more time just trying to figure out what others are trying to say, sometimes in person and by voice, but mostly in writing. For most emails, I have to click "reply" or call back simply because what you're trying to tell me is so unclear. I think the last time I received a written specification I could actually work from was in 2002.

This isn't a problem of education, country of origin, or any other demographic: almost everyone sucks at writing. It's a real problem.

I suppose the best antidote to poor writing is more writing, especially on- line. Don't be bashful because as OP says, your readers won't be.

Thanks OP for the one "please" post this week that _everyone_ can benefit from. (Did I just end that sentence with a preposition? Need more practice.)

<comment><USER3> _Did I just end that sentence with a preposition?_

A preposition is a perfectly acceptable thing to end a sentence with. Seriously. If you find yourself re-writing it as "with which to end a sentence" you're going to come across as stilted and awkward.

<comment><USER4> Unless writing for a scientific journal, or some other such formal setting, your goal of clear communication will be best served by using a casual, conversational style that resonates as closely as possible with how you would talk to your reader in person.

That means prepositions are very much something you can end a sentence with. And you can start one with a conjunctive too, if it feels right. The rules of grammar are more like the pirate code than an ISO standard - they're more what you might call guidelines, really.

<comment><USER5> I think we'd be better served using such styles in scientific journals more often.

As an example, here's a wonderfully written article by the late statistician, Jacob Cohen: <http://www.ics.uci.edu/~sternh/courses/210/cohen94_pval.pdf>

<comment><USER6> Just to note, although he wrote far more on statistics, he was a psychologist born and bred.

</comment></comment></comment></comment></comment><comment><USER3> I'm (primarily) a coder and I've started writing a short weekly newsletter for the users of the application I'm supporting and extending. The basic format is "what happened this week" and "what may happen next week" as well as a "please communicate with us if you have concerns or ideas". I'm now 14 weeks into this experiment, and I've found a things worth sharing.

1\. Explaining to your entire user base what you're up to helps you focus your efforts on meaningful demonstrable progress instead of gold-plating.

2\. It has been said a hundred times before, but the way to get better at writing is to write.

3\. People prefer incremental changes over disruptive redesigns, especially if they are given a heads-up before the incremental changes happen.

4\. People care about the quality of writing. I've gotten a bunch of comments about how they actually enjoy reading the newsletter. That was totally unexpected.

5\. Tone matters. I've found a good conversational tone that incorporates just a touch of humor and self-deprecation without being too casual. My userbase is non-technical, so I can't leak jargon on them. Metaphors help.

6\. Cadence matters. Writing a weekly update is much easier than writing an update "just whenever".

7\. Having an editor helps. I generally write the entire message, but pass it along to comrade to send it out to see if anything is confusing, I've made any typos, or forgot to finish one of my sentenc

<comment><USER7> This advice sounds fantastic, and I've bookmarked it for reference. Thank you for sharing!

<comment><USER3> I'm glad you like it. I just remembered another thing I've learned from the experience and added it (#7 - have an editor)

</comment></comment></comment><comment><USER8> One of the best pieces of advice I received for my career was from my university's computer science counselor.

I asked him what I needed to do/study to be better than other programmers. I started asking, "should I study C, Java (it had just come out), etc. He said study something to improve your communication. He said in the real world business just look at you as a computer person. They don't know the difference between a programmer, network engineer, PC support person, etc.

He said anyone can code and the ones that are way better will not be recognized enough by management to make a difference in their careers. Since computer people are sort of known as introverts, just being able to speak well and communicate with everyone will go further than being the expert at language X.

</comment><comment><USER9> Communication skill is a proxy for critical thinking skill - if you can't communicate effectively, your critical thinking skill is either going to be undervalued or underutilized.

For the lack of understanding, communication inputs are misinterpreted, ignored or incorrectly responded to. For the lack of clarity, precision and understandability, communication outputs suffer the same fate. And, as we've learned in networking, inefficiencies in a system (such as the engineer whose emails make no sense, when he/she bothers to reply at all) get routed around.

</comment><comment><USER10> Everyone should learn to code. Everyone should learn to write. But we shouldn't necessarily aspire to become professionals in either.

English and Code are tools that are used by others to form the world around us. To understand these tools is to understand this world. To not understand these tools is to be at the mercy of the world's creators.

Knowledge is power; it is both the power to attack and the power to defend. Learn to write and learn to code, not to attack, but to defend yourself in this world.

<comment><USER11> knowledge is energy, being able to apply knowledge to a situation is power.

</comment></comment><comment><USER12> Being able to write well appears to be a shockingly lacking skill in my industry (pentesting and forensics). It's a really rare talent when you find someone that is capable of writing a good report in appropriate plain business English.

Having that skill is intensely valuable, as I'm sure it is in other areas of IT. How big a role does being able to write well play in your part of the world?

<comment><USER13> Good writers move up the organizational and/or salary ladder.

Good technicians or engineers who cannot communicate end up making the guy who translates whatever they are doing to the customer or management look good.

<comment><USER14> True. Effective communication is just as important as writing good and maintainable code in my opinion.

</comment></comment></comment><comment><USER15> I suppose I could get a blog post out of this, but I can't be bothered, so:

Please learn to use a phone to make a voice call.

I value effective written communication, but part of effective communication is understanding your audience, and in many situations, you audience is only a handful of people. In that case it is a much more efficient use of your time, and theirs, to just have a conversation.

IRC or IM is a reasonable substitute, and a face-to-face conversation, if practical, is even better.

(Writing this in a spare moment before talking to someone face-to-face. Last night I spent the better part of an hour trying to figure out how to address the issue over email before concluding that a short conversation would be more effective)

</comment><comment><USER16> Many people are commenting that writing improves with practice, and that's true, but it probably isn't enough. The 10,000 hours count only if they're done well. I'm not a writer but here are some basics I've found helpful.

1\. Revise constantly. If you haven't revised it three times you almost surely haven't done enough. You don't need an outline, but as you write new thoughts will occur to you, previously open questions will be answered, opinions of priorities will shift. Writing in the Rubber Duck school of programming to the nth degree. All that you discover you already knew should be completely reflected in the final document. This is a very painful thing, you can spend hours on something and be "almost done" when you realize the key question on which all depends, the answer to which requires a complete rewrite of the document.

Note that "revision" often means changing the purpose of the document. You can go from reporting status to asking about key variables driving that status. Text may not be the right medium for the new message.

2\. Edit ruthlessly. Everything can be shorter. The time you take clarifying and shortening saves your readers that much and more -- since you, not they, are best positioned to solve the puzzles posed by an obscure sentence, and to summarize an overly long one. If your readers number more than one, the time savings are multiplied.

3\. Be very clear in your terms, meanings and references. If they aren't clear, explain them. Did that explanation just blow up your document's organization? Time to revise. Be precise. Your audience does not have your perspective -- your local environment variables are not theirs -- you need to orient them to the topic before you can expect casual references to be meaningful.

4\. Much business writing requires an imperative style. At the top, tell your reader the action or decision expected / hoped for of them at the end of the document, and tell them what you will talk about. As you provide information, keep it in relation to the action expected of them. If there is no relation, what is it doing here? If it must be in here, why? and what are the implications for the stated purpose of the document? Is it time to revise again?

At the end of the document, give them detailed instructions about what they should do next -- call at this number, email that address, provide these thoughts, whatever.

Good training in writing is available and worthwhile. If you really want to get better, seek it out.

<comment><USER17> I once asked a well known science writer how many times he will revise passages. He sighed and replied "sometimes, for the difficult spots, maybe fifty to a hundred."

This made me feel much better about my own writing, which often goes through many, many drafts.

It also helped me appreciate Thomas Mann's maxim that a writer is someone who finds writing harder than other people.

</comment></comment><comment><USER18> This is the most valuable thing I've learnt during my PhD. PhD teaches you:

      research skills                                     50%
      ability to communicate your research to others      50%

In my experience, I've noticed a lot of very smart hackers to be woefully bad in communication, and PhDs to be much better than the median at it. On the other hand, I think there is no correlation between research skills and having a PhD.

</comment><comment> jack-r-abbit An interesting take on the topic. I would tend to agree with it. I've always maintained that it takes a certain something to be a programmer. The specific language is less important if you have a "programmer's mind". I've worked with a bunch of different languages. Once you get over the varied learning curve of the exact syntax and structure, it really just leaves you with the general logic and planning and all the stuff that any app is going to require regardless of the language. These aspects are not as easily learned as things like "always (or never) terminate with a semi-colon" or "white space matters".

But I also struggle a fair amount with remembering all the rules... and exceptions to those rules... and exceptions to those exceptions... when it come to American English. Sometimes I actually have to pause and mentally recite the rules for "its vs. it's" and things like that. I think that comes from there not being a strict compiler for the that. The reader is going to be more forgiving in the sense that even if you misuse _its_ when you should use _it's_ , the reader is going to to understand your overall meaning. Most won't correct you because it doesn't really matter to them. Think about the butchered language that gets used on Twitter to get things into 140 chars. It would be nearly impossible to write an interpreter that would take most tweets and rewrite them in proper English. You have too many variations to make that work. But the reader will probably have less trouble with it.

<comment><USER19> The most crucial part is expressing your idea clearly. Being concise. Not wasting the reader's time.

If you have great content in your writing, the reader will treat "syntax errors" as "warnings."

</comment></comment><comment><USER20> Communication isn't one-way.

There are billions of people and plenty of languages out there (nearly 200 are spoken by at least a few million people per language, if you go by the list on Wikipedia).

We live in a world where _most_ co-workers have probably had to claw their way up to their current language proficiency.

People who only know one language can't really complain about poor communication. _Both_ people in a conversation have a responsibility to work at closing any gaps, and frankly a native speaker has more than 50% of that responsibility.

Even if you have learned another language, do you really know how tough it could possibly be? For example, have you learned to read, write, speak, swear and slang in the 2nd language to the point where no one will misunderstand you? And here's the real test: is the alphabet the same as your native language or is it something totally new?

I grew up with English. I spent years learning to read, write and speak French, and while this gave me some appreciation for the difficulty in learning a language it was still the same letters, similar words and a few new rules. I've since invested a lot of time in learning basic Japanese and _that_ is something I'd recommend to anyone who thinks they're an expert at a language.

You have to try something completely unlike anything you've ever seen before you understand what a chore it must be for others to try to communicate with you.

</comment><comment><USER21> The funny thing is we live in an era where more people write more than ever - between Facebook, forums, online dating profiles etc. Twenty years ago the average high school graduate stopped writing anything longer than a shopping list, or maybe a letter, after age 18,

<comment><USER11> but they were probably more diligent in the writing they did do. now writing is trash.

writing is another form of informal speech.

What others haven't said is that, writing is both the formulation of logical thoughts and the communication of those thoughts so they can be understood by another person. Writing and logic go hand and wrench.

</comment></comment><comment><USER22> _Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations._

\-- Conway's Law ( <http://design.caltech.edu/erik/Misc/Conway.html> )

First reading this adage was a relevation. I realised I've never worked on a technical project that wasn't constrained by it. This post/discussion reminded me of it again.

</comment><comment><USER23> "On Writing Well" from W. Zinsser is one of the few books I've read multiple times over the years and probably the book I've recommended and loaned out the most.

[http://www.amazon.com/Writing-Well-25th-Anniversary- Nonficti...](http://www.amazon.com/Writing-Well-25th-Anniversary- Nonfiction/dp/0060006641)

Anyone who runs a business, has a blog, has to communicate with other, or sends email should read it. Twice.

<comment><USER24> Have this book, and couldn't agree more.

</comment></comment><comment><USER25> Writing strikes me as providing different fundamental skills. Here's the rub: computer languages are entirely prescriptive-- behavior is defined by the compiler. Natural languages are defined entirely by usage and here the descriptivists rule. Even in hyper-defined jargons like legalese, interpretation matters and there is no single, objective reference point.

I believe everyone should learn to code trivial programs. I also think there is great value in truly mastering one's own language (and I say this as one who can fluently read Middle English and who can parse my way through Old English given some time). But they are different skills. You can't get them all from one or the other.

If you want to compare writing to programming, then you should consider comparing it to writing portable software in a language where every reader has coded his/her own compilers based on their own unique understandings of the standards! But writing isn't the same as coding.....

</comment><comment><USER26> I often find it annoying in writing _and_ in speech when people don't know the correct technical terminology for an idea they are trying to express, when they ought to.

Believe it or not, there are people out there that write Objective-C, for example, and don't know what an "instance variable" or a "class method" are by name.

<comment><USER27> Or go blathering along about ctors or visitors. If you want to use slang from some random book or website, define it.

</comment></comment><comment><USER28> A while a go I saw this article that told that strongest correlation with economic success now is with reading skills within that nation in 1900. (sorry I lost the article)

What is the reading of today? I think it's coding and here's why: A young person is good at school in two things, math and biology. She thinks that a career of mathematician would be little boring, so she chooses to become a biologist. She doesn't ever think about becoming an engineer because she never had to do anything that would have indicated that shes good at it.

Now how about a school where people have to learn to code just a little. Suddenly the people who are naturally talented at it start to do it. Not just the people who think it's cool because their elder brother codes. People have a strong tendency to do things they are good at. But only if they know they are good at it.

</comment><comment><USER29> The next great thing will be a post titled: "Please: stop with 'please' titles"

<comment><USER30> "Please" considered harmful?

<comment><USER29> In a series of posts that uses it to self-promotion? IMHO yes.

<comment><USER31> It was a reference to this: <http://en.wikipedia.org/wiki/Considered_harmful>

Namely -- Frank Rubin published a criticism of Dijkstra's letter in the March 1987 CACM where it appeared under the title _'GOTO Considered Harmful' Considered Harmful._ The May 1987 CACM printed further replies, both for and against, under the title _'"GOTO Considered Harmful" Considered Harmful' Considered Harmful?._ Dijkstra's own response to this controversy was titled _On a Somewhat Disappointing Correspondence._

:-)

<comment><USER29> My (really) bad! Shame on me.

</comment></comment></comment></comment></comment><comment><USER32> What's the difference between coders and the population at large? My thought is that it's the difference of problem granularity/scale/scope. In general, computer programmers are interested in solving bit-based problems, the rest of the population not so much.

That said, my opinion is that 'programming' in the broadest sense is a native capacity of humans and therefore is not special. If you haven't realized by now that algorithms == recipes == best practice methodolgies == etc. you're missing the forest for the trees: programming is systematic problem solving period. C# mavens aren't the only ones who program; we all do.

</comment><comment><USER33> The liberal arts need to be valued more highly. 'Nough said.

</comment><comment><USER34> If you're willing to spend a few dollars to improve your writing, buy "Style: Toward Clarity and Grace" by Joseph Williams ([http://www.amazon.com/Style- Clarity-Chicago-Writing-Publishi...](http://www.amazon.com/Style-Clarity- Chicago-Writing-Publishing/dp/0226899152/)). It's far better than a list of rules; it breaks down sentence and paragraph construction and shows you exactly how to write more clearly (and less academically). And it accomplishes this very quickly, with a marked improvement in your writing after only a couple chapters.

</comment><comment><USER35> Exactly what I thought when I saw all the responses to Atwood's original post.

I think he meant to play the realist card. Of course the world would be better if more people learned how to code, but that comes at a substantial time cost. Lets say I argued on how everyone should learn to play an instrument. There are many intangible benefits to this, but lets get real. The world would only be a better place, truly, if everyone learned how to play an instrument _well_ , and there just isn't enough time for that.

</comment><comment><USER36> "Neither can his Mind be thought to be in Tune, whose words do jarre; nor his reason in frame, whose sentence is preposterous; nor his Elocution clear and perfect, whose utterance breaks itself into fragments and uncertainties." - Ben Jonson via Richard Mitchell

<http://www.sourcetext.com/grammarian/>

</comment><comment><USER37> Maybe the thought of people who do know how to communicate, such as Mayor Bloomberg, learning to code is bothersome to Jeff Atwood. If so, consider why.

My concern is that Bloomberg is just looking for money. He may have no interest in how a computer works.

If he could code, what sort of programs would he write?

For example, with respect to the desktop and the web, many "coders" write programs that are a constant game of manipulation of naive end users. The moral issues raised in programming are seemingly endless. It's relatively rare to find a programmer with a social conscience. Mainly because few people with a social conscience know how to program.

Would people like Bloomberg bring a greater sense of social conscience to programming? Or would they worsen the situation?

On the flipside, having more people be more familiar with programming might reduce the amount of manipulation that is possible. More people might start demanding and reading source code. That could be a positive force.

<comment><USER38> you know, now that i think about it, the first question really ought to be, why the hell does the man who brought us the <https://en.wikipedia.org/wiki/Bloomberg_Terminal> bloomberg terminal need to "learn to code"? is he just talking about updating his skills, or has he actually been running one of the world's biggest data companies for more than thirty years without knowing how to program?

<comment><USER37> It just goes to show that you do not need great knowledge of programming to launch a business that relies on it. The founders of Bloomberg LP all had very good knowledge of the financial sector and the technology used in it. They knew the shortcomings in the solutions provided to trading desks. But whether any of them could themselves construct a Bloomberg Terminal is, in retrospect, irrelevant.

They had industry-specific knowledge of the problem they were attempting to solve. Unless you have worked in an industry, as a programmer you are unlikely to understand the true nature of the problems in that industry. And thus, you will not know what opportunities there might be for innovation. Is this the so-called "non-technical founder"?

Bloomberg wants to know how to build things in software. He wants to stimulate New York's economy with more software development industry reducing reliance on the finacial industry alone. It's interesting if nothing else.

</comment></comment></comment><comment><USER39> One of my all time favorite pieces on writing is Orwell's "Politics and the English Language."

[http://en.wikipedia.org/wiki/Politics_and_the_English_Langua...](http://en.wikipedia.org/wiki/Politics_and_the_English_Language)

</comment><comment><USER40> there are two sources of problems for Unix geek: 1\. permission problems 2\. communication problems

The latter is the source of problems for most people, so learning to write and speak clearly will give you a huge leg up on becoming successful.

</comment><comment><USER41> All this back and forth makes me want to write a blog post called "Please learn"

<comment><USER42> Had the same thought. After your post I will write a blog post called "Please!"

</comment></comment><comment><USER43> Please learn to learn

</comment><comment><USER44> They mayor of NYC wants to learn to code? Awesome!

And yet detractors think he should spend more time off, "doing mayor things." Leave it to the professionals. We don't need to teach everyone to be a master carpenter, right?

"Learning to code," isn't just about teaching people another vocation. We don't teach kids to be carpenters because we know that with a little math, some reading, and advice from a carpenter that kid could figure it out. If you give them a rule in the imperial system and blueprints in metric they should be able to figure it out. Mathematics and literacy give them tools to solve _other_ problems. We consider them fundamental tools.

The reason why teaching people to _compute_ or "code" as some are putting it is to teach them a kind of literacy. You can't take the fundamental math and reading skills you're taught in school and write a computer program to classify your email for you or scrape the sports scores off your favorite site to track your bets. Without understanding the fundamental concepts of computation there are a whole categories of problems and inefficiencies that persist unaddressed.

So what's wrong with teaching people the basics? Most people can figure out how to unclog a drain or bang together a decent shed without investing their lives into becoming master plumbers and architects. It may be easy to think that today there just aren't the prevalence of problems in peoples' lives where a rudimentary understanding of what a program is and what a process is can solve, but I dare you to keep hold of that notion for the next ten years. Programming to those who are experienced practitioners is a skill that is easily taken for granted. You may think that programming involves sitting in front of a computer noodling with compilers while life passes you by but you'd be wrong. With enough of a basic understanding, the fundamentals, that we can give someone an intuition about what a program is and how it can be used to spin off processes that can do work for you and apply the things you learned in your maths classes or automate tedious work in your research... we can really make the world a much better place.

How would software patent reform still be an issue today if we had been educating people on the fundamentals of computer science for the past few decades instead of hiding it in the upper eschalons of academia? Would phishing scams still be profitable with fewer rubes? How much inefficiency could be saved in research, finance, design, journalism, and so forth if everyone had at least a basic understanding of what a program is? Sadly most people don't it seems. They use computers all day long but if you get talking with them about it they don't understand what the machine is doing... they're just merrily typing in and clicking on the things they're told to and wouldn't have the faintest idea if there was a better way to do things. Such is the way the world is when people are ignorant of the tools they use.

It's simple to dismiss now and maybe in ten years time your friends and family will still throw their hands up at computers and marvel at how the hell they work. Perhaps as many people do now with math. But that's a poor reason to suggest people shouldn't be taught these things and should remain ignorant.

</comment><comment><USER45> It's a bit funny that the title of this article is broken English.

</comment><comment><USER46> Within which he kicks it off with with a passive sentence...

</comment><comment><USER47> 1\. Read "Politics and the English Language", Orwell

2\. Goto <http://andromeda.rutgers.edu/~jlynch/Writing/>

3\. Read [http://www.amazon.com/English-Language-Users- Guide/dp/158510...](http://www.amazon.com/English-Language-Users- Guide/dp/1585101850/ref=sr_1_23/103-1573744-7019061?ie=UTF8&s=books&qid=1193178971&sr=1-23) by Jack Lynch (as well)

4\. Understand Paul Grice's Conversational Maxim's: <http://www.sas.upenn.edu/~haroldfs/dravling/grice.html> (Understand that they are, as proffered by Grice, descriptive, partly anthropological heuristics for analysis of certain ways of talking, or façon de parler; but they _may_ also be developed as normative principles which may be used to constructively guide all talk exchanges.)

Fig. 1, Grice's Maxims:

❝ The maxim of quantity, where one tries to be as informative as one possibly can, and gives as much information as is needed, and no more.

The maxim of quality, where one tries to be truthful, and does not give information that is false or that is not supported by evidence.

The maxim of relation, where one tries to be relevant, and says things that are pertinent to the discussion.

The maxim of manner, when one tries to be as clear, as brief, and as orderly as one can in what one says, and where one avoids obscurity and ambiguity.

Fig. 2, an excerpt from J. Lynch:

❝ ##Prepositions.

Prepositions are usually little words that indicate direction, position, location, and so forth. Some examples: to, with, from, at, in, near, by, beside, and above.

A quick-and-dirty rule of thumb: you can usually recognize a preposition by putting it before the word he. If your ear tells you he should be him, the word might be a preposition. Thus to plus he becomes to him, so to is a preposition. (This doesn't help with verbs of action; show + he becomes show him. Still, it might help in some doubtful cases.)

##Prepositions at the End.

Along with split infinitives, a favorite bugbear of the traditionalists. Whatever the merit of the rule — and both historically and logically, there's not much — there's a substantial body of opinion against end-of-sentence prepositions; if you want to keep the crusty old-timers happy, try to avoid ending written sentences (and clauses) with prepositions, such as to, with, from, at, and in. Instead of writing "The topics we want to write on," where the preposition on ends the clause, consider "The topics on which we want to write." Prepositions should usually go before (pre-position) the words they modify.

On the other hand — and it's a big other hand — old-timers shouldn't always dictate your writing, and you don't deserve your writing license if you elevate this rough guideline into a superstition. Don't let it make your writing clumsy or obscure; if a sentence is more graceful with a final preposition, let it stand. For instance, "He gave the public what it longed for" is clear and idiomatic, even though it ends with a preposition; "He gave the public that for which it longed" avoids the problem but doesn't look like English. A sentence becomes unnecessarily obscure when it's filled with from whoms and with whiches. According to a widely circulated (and often mutated) story, Winston Churchill, reprimanded for ending a sentence with a preposition, put it best: "This is the sort of thing up with which I will not put." [Revised 12 Jan. 2007.] ❞

Write and talk appropriate to your audience. Your audience in some cases might be your self. Determine what criteria you demand for a successful "talk exchange" such that shared knowledge may be produced, rather than actionable results (we should ignore implementation details).

<comment><USER48> Bookmarked!

</comment></comment><comment><USER49> The font on that website hurts my eyes.

<comment><USER50> Seems fine to me

</comment></comment><comment><USER51> "I tweeted Jeff Atwood's piece because, well, I agree that it's pretty silly to think that the world is going to be a better place if the Mayor of New York City learns how to code. I agree with Atwood that his valuable time would be better spent elsewhere."

Oh yeah? And who the fuck are YOU, sir?? Or Mr. Atwood?

For all you know, the world would be infinitely better if the Mayor of New York City learns how to code.

But I suppose we'll never know, because no one should ever do anything other than what they are to be doing right then.

Only.

Forever.

In that case, stop writing and go back to whatever it is you were doing before, because the world is not a better place when you blog -- your valuable time would be better spent elsewhere.

Is not history itself defined by breaking patterns? They don't call it a "turning point" because it sounds nice.

How many events that altered the path of mankind were part of "The Plan"? How many were arrived at by strictly adhering to a well-defined path?

<comment><USER51> Fear change much?

<https://en.wikipedia.org/wiki/Herd_mentality>

<https://en.wikipedia.org/wiki/Collective_consciousness>

[http://imlookingattheworld.files.wordpress.com/2011/11/borg....](http://imlookingattheworld.files.wordpress.com/2011/11/borg.jpg)</comment></comment>


Traveling through JP, SK, HK; any HNers want to meet? - <AUTHOR>

I'm traveling to Toyko first week of April, then Seoul for two weeks, and finally spending the last week of April in Hong Kong.<p>If any HNers out there are interested in meeting up, I'll happily take the detour to have a drink with them. Feel free to shoot me an email (in profile) if you're interested in meeting up. <comment><USER2> I would be interested to know how many HNers are out there Tokyo, Seoul, and Hong Kong. I traveled around Korea last August and thought it would be a neat place to work. Edit: just to be clear I am not currently in Seoul.

<comment><USER3> I'm in Hong Kong, I know there are a few HNers out here, but not that many.</comment></comment>


Top 15 Free Website Hosting Sites (2017) - <AUTHOR> https://medium.com/@iamlakdawala/top-15-free-website-hosting-sites-2017-25b4b7525fca <comment><USER2> Github pages isn't mentioned. But it is the best one.</comment>


Stewart Brand Changed the World, Twice - <AUTHOR> https://www.nytimes.com/2018/05/07/opinion/stewart-brand-hippie-silicon.html <comment><USER2> Funny coincidence: Stewart Brand was actually the camera man filming Douglas Engelbart's Mother of All Demos as well: [https://en.wikipedia.org/wiki/The_Mother_of_All_Demos](https://en.wikipedia.org/wiki/The_Mother_of_All_Demos)

Evidently he helped advise the team on how to present the demo.

<comment><USER3> There's a good story about this in his interview on The Tim Ferriss Show.

</comment></comment><comment><USER4> What must have been a side project for him, the book "How Buildings Learn: What Happens After They're Built", was hugely influential to me as an architecture student. His observations of built works continually adapting to the evolving needs of users have obvious parallels in the world of software, and helped form the basis of how I approach UX and product design.

<comment><USER5> The mental model of "pace layers"[1] is a really insightful one. I've found it extremely useful to think about problems from a systems perspective - eg. what layer am I operating in and what layers may I encounter in the future? What might I expect from this layer (eg. dynamic, spontaneous vs. cautious, calculating), and how does that inform the decisions I should make?

[1] [https://alexpetralia.github.io/2018/02/19/NL-2018-02-19.html](https://alexpetralia.github.io/2018/02/19/NL-2018-02-19.html)

</comment></comment><comment><USER6> Actually I'd wager that Stewart Brand has changed the world more than twice. I was a huge fan of both the whole earth catalog and the Well. Both Tim O'Reilly and John Battelle have mentioned him as a mentor and influence.

Though it wasn't mentioned in the article he's also along with Kevin Kelly behind The Long Now foundation [http://longnow.org/about/](http://longnow.org/about/)

<comment><USER7> They also have an excellent set of lectures. They're in SF, but available remotely to members: [http://longnow.org/seminars/](http://longnow.org/seminars/)

Stewart Brand usually interviews the speakers after, and he's fantastic at it. I strongly recommend seeing him in action.

</comment></comment><comment><USER8> He's also the fellow who wrote this:

"On the one hand information wants to be expensive, because it's so valuable. The right information in the right place just changes your life. On the other hand, information wants to be free, because the cost of getting it out is getting lower and lower all the time. So you have these two fighting against each other."

Source of the "information wants to be free" meme.

I carried around a copy of "The Next Whole Earth Catalog" in my backpack in high school one year instead of books. Yes, the _big_ one.

</comment><comment><USER9> Stewart Brand is a phenom. Not mentioned in this article but he started The Long Now Foundation ([http://longnow.org/](http://longnow.org/)) to "foster long term thinking". I've been a member for over a year and their seminars are absolutely fantastic.

<comment><USER10> there's a podcast of those, called "seminars about long term thinking" that is amazing.

</comment></comment><comment><USER11> Fun fact: Stewart's catalog is also the origin of the iconic "Stay Hungry, Stay Foolish" tagline.

[http://ailiangan.com/post/50201060795/the-origins-of-stay- hu...](http://ailiangan.com/post/50201060795/the-origins-of-stay-hungry-stay- foolish)

</comment><comment><USER12> I quickly read through the article, but I was unable to see how Brand changed the world.

I've lived outside the US for most of my life and I'm probably a bit too young to have been directly impacted by Brands work.

Based on the article, most of his work involved combining the spiritual and technological into a cohesive whole. This sounds really cool, but seemed to only be limited to US culture.

Honestly, I think the usage of the phrase "change the world" involves a much larger impact on the world than this article describes.

I'd be grateful if another user could perhaps expand upon the article and help me understand what made Brand so great here in the US.

<comment><USER13> There is something delicious about such a comment on Hacker News. There is a direct link between The Well and Hacker News, and you would probably feel quite at home back on The Well in its heyday. What is the old saw, that fish can't grok the concept of water? Someone had to invent these online forums that attract smart people and intelligent discussions from around the world.

For a wild ride with Stewart Brand polymath of polymaths, I'd recommend the Tim Ferriss podcast episode[0].

[0] [https://tim.blog/2017/11/21/stewart- brand/](https://tim.blog/2017/11/21/stewart-brand/)

<comment><USER14> What's the Well-HN link?

<comment><USER15> The Well was a bbs for tech nerdery, futurism, science fiction, etc... in the 80's. It was massively influential in creating the cyberpunk literary genre and many tech people from the time were on it and influenced by it.

There is a direct line of ancestry IMO between the well and places like HN.

<comment><USER14> I'm aware of whatvthe Well _is_. And that it pressages much present online discussion (though Usenet predates it).

But I'd suspected some specific individuals or group.

</comment></comment></comment></comment></comment><comment><USER16> Notably, Stewart Brands turn to computers was heavily influenced by seeing people playing Spacewar! at Stanford in Fall 1962.

 _" What I saw was an interaction around computers that was as intense as anything I saw around drugs or anything else that I knew. People were absolutely out of their bodies playing. It seemed that computers were doing everything that drugs had promised. Drugs were much more self-limiting than computers: the hackers had found something better than drugs, but theirs was the same bohemian frame of reference."_

[http://www.theguardian.com/education/2001/aug/04/artsandhuma...](http://www.theguardian.com/education/2001/aug/04/artsandhumanities.highereducation)

Ten years later, after editing the Whole Earth Catalog, he wrote "Spacewar – Fanatic Life and Symbolic Death Among the Computer Bums" (the famous Rolling Stone piece), which may have helped immensely in popularizing the idea of computer games.</comment>


PHK: "Quality Software Costs Money – Heartbleed Was Free" - <AUTHOR> http://queue.acm.org/detail.cfm?id=2636165

<comment><USER2> "Quality software" can also contain fatal errors.

I don't know the title implies. Just because the production of something is expensive, doesn't mean that you have to charge money for its use (of course, it would be very legitimate to do so).</comment>


Perl is not Dead, it is a Dead End - <AUTHOR> https://speakerdeck.com/stevan_little/perl-is-not-dead-it-is-a-dead-end

<comment><USER2> This is worth reading, in spite of it's inflammatory title, as it's really about a new project: moe ( <https://github.com/stevan/moe> ) an "ultra-modern perl 5" written in Scala.

<comment><USER3> Some of the problems that the author mentions in Perl5 are actual problems in Scala, for example the compiler and interpreter latency or start up time, the complexity of the language, the philosophy TIMTOWTDI and the bigger one is that other languages are getting better and better. Why just not to translate the philosophy of Perl to Scala, that is write a book translating the most common idioms of Perl to Scala. Good programmers could learn the Perl-Scala way in days, the real thing to realize is that today there is no single solution, you must master several programming languages, no one size fit for all problems.

<comment><USER4> I mostly agree and believe that before another abomination loosely based on Perl is written in Scala, people should learn Scala. However, Scala's syntax is also quite complicated, Scala code is often hard to read (far too much TIMTOWTDI there as well), so personally I favour Go as a modern alternative to Perl.

</comment></comment></comment><comment><USER5> The author doesn't make the case all that strongly. Despite the quantity of words there isn't a lot of content backing them up. Mostly "fun" quotes an in- joke references I don't get, which he seems to bemoan early in the presentation but lapses into about halfway through.

Perl 5 never struck me as something one would set out to acquire from scratch. Perl 6 does, but there are fresher faces and I wouldn't predict it becoming a major force anytime soon.

</comment><comment><USER6> great slides; I read the whole thing. This is a very interesting project, too. I left perl around the time of Moose because I was desperate for a sane OO system. I'd love to see this succeed.

</comment><comment><USER7> If "Perl is a dead end" (his words, not mine), then why not switch to another similar language like Python or Ruby?

I guess I don't understand why this guy wants to create yet another programming language. He spends his entire slide deck complaining about how bad Perl is, without ever discussing the obvious possibility of... just using another language. Is there anything good about Perl 5 that other languages haven't already copied? If there is, what is it? I am not trying to be facetious here-- just curious.

<comment><USER8> _> If "Perl is a dead end" (his words, not mine), then why not switch to another similar language like Python or Ruby?_

Because a lot of the points given also apply to Python & Ruby.

 _> I guess I don't understand why this guy wants to create yet another programming language._

He isn't. It looks like he's creating an improved / cleaned-up perl5 running on a new VM. Think of it as perl6 if the perl6 moniker hadn't already been taken!

EDIT - Hopefully clearer analogy... the project is a mixture of python2 -> python3 (language cleanup) + MRI -> YARV (new compiler & VM).

 _> Is there anything good about Perl 5 that other languages haven't already copied? If there is, what is it?_

The author of the talk (Stevan Little) is the creator of Moose (<http://moose.perl.org>). I think what he maybe striving for is a Moose implemented on a modern future proofed VM (full threading/multiprocessing, etc).

The question you may want to ask is why? By sounds of this talk it appears that his p5-mop proposal/work (<https://github.com/stevan/p5-mop>), which was originally mooted for perl 5.16, as probably been _blocked_ by the Perl core team (p5p). It's a shame if that is what's happened :(

<comment><USER7> _Because a lot of the points given also apply to Python & Ruby._

Like what, exactly? He even has a slide which says this about Node.js: "there is no problem." If there is no problem, then what is he trying to solve by creating a new language? I am confused.

 _The author of the talk (Stevan Little) is the creator of Moose (<http://moose.perl.org>). I think what he maybe striving for is a Moose implemented on a modern future proofed VM (full threading/multiprocessing, etc)._

Moose is cool and all, but it basically just brings Perl up to the same level of functionality that other languages like Python and Ruby have right out of the box. Using the JVM seems like a particularly unfortunate choice since it has such a long start-up time and traditionally Perl scripts were for quick and dirty jobs.

<comment><USER8> _> Like what, exactly?..._

Threading / Multicore processing. This is the 800 pound gorilla sitting in all programming language camps.

 _> Moose is cool and all, but it basically just brings Perl up to the same level of functionality that other languages like Python and Ruby_

Nope... Moose brings Perl up to the CLOS (Lisp) level of OO which is _beyond_ what you get with Python & Ruby.</comment></comment></comment></comment>


Show HN: iC8, an interpreted Chip-8 emulator in C - <AUTHOR> https://github.com/prophittcorey/iC8

<comment><USER2> Nice! I did one in c++ when I was first learning the language and it's interesting to see the similarities/differences in the code.

Implementing a Chip 8 emulator is really a ton of fun and an excellent project to boot because it isn't too complex but teaches you all the fundamentals of emulation.

[https://github.com/TylerBrock/chip8](https://github.com/TylerBrock/chip8)

<comment><AUTHOR> Thanks!

You are right, it is a fantastic way to learn the fundamentals of emulation. It's not too large to be overwhelming and not so small that it's trivial. It's the perfect size for your first emulation project.

</comment></comment><comment><USER3> this is awesome. as someone who wrote one of these (i.e. chip8 emulator) myself way back I am in awe about how polished this is. I think this is one of the best way you can get a hands-on experience on emulators the diy route. Awesome job!</comment>


Sweaty January and how gyms make money - <AUTHOR> https://medium.com/bull-market/sweaty-january-and-how-gyms-make-money-7d682ff5eeaf#.ybm22r54c <comment><USER2> It's oddly suspicious how closely this article, with a January 2015 dateline, tracks to this WP article of today:

[https://news.ycombinator.com/item?id=10845466](https://news.ycombinator.com/item?id=10845466)

 _Both_ even have a Colman's Mustard reference (a product I had never even heard of before). That's quite a coincidence.

</comment><comment><USER3> Here is a nice Planet Money podcast about gym memberships [http://www.npr.org/sections/money/2014/12/17/371463435/episo...](http://www.npr.org/sections/money/2014/12/17/371463435/episode-590-the- planet-money-workout)</comment>


The Fridge (YCS10): Private Mini-Facebooks that Put Social Networking in Context - <AUTHOR> http://www.xconomy.com/san-francisco/2010/09/15/the-fridge-private-mini-facebooks-that-put-social-networking-in-context/

<comment><USER2> Single page view: [http://www.xconomy.com/san-francisco/2010/09/15/the- fridge-p...](http://www.xconomy.com/san-francisco/2010/09/15/the-fridge- private-mini-facebooks-that-put-social-networking-in- context/?single_page=true)

Site being reviewed: <http://www.frid.ge/>

Interesting concept. Have they considered making it a bit more medium-size friendly, and marketing it to schools? School software tends to be waaaay behind what's even "good".

edit: after poking around a bit, I agree with x0t. It's a bit rough around the edges. But the simplicity is definitely a bonus (though I'd love the ability for a non-verified account to at least _see_ the settings for groups, so you can at least see what you can do).

edit2: after verifying, the options are:

      change name
      "reset code" (regenerates your link)
      notify everyone on post - on/off
      delete group

Which pretty much sums up everything you can _do_ with a group. It's just a bucket for members. Not sure what you can do aside from adding members and using a wall, haven't added myself w/ a second email and don't care to. Invite link is: <http://www.frid.ge/?ginvitation=azd528pe2u8ggk0w84gkwoccc> if you care to help me experiment.

<comment><USER2> Thanks Tim, whoever you are!

Once a user is part of your group, you can.... click on them to go to their page, where there's a "disinvite user" link/button. I'm _hoping_ that changes to handle individual groups if they're in more than one of your groups.

And that's it.

Their "group settings" link reveals only a "leave group".

So, to summarize a bit on the current state of the site: it's a private Facebook wall for you + your group(s), and that appears to be it.

Before it can become more useful, I think it needs a way of organizing communication. But, then again, I don't find much use in Facebook's news feed, so I may just not be seeing some potential which others do.

</comment></comment><comment><USER3> It would be nice if eventually there will be an option for groups to be public so people can discover new things.

That would make the service Meetup like, but Meetup's privacy settings fail worse than Facebook so I think there is a space to fill.

<comment><USER4> yes! but for now we are focusing on personal and private relationships. user and interest based discovery is something we are definitely going to add in...

</comment></comment><comment><USER5> Love it. Keep up the good work. I've invited a small network of Python geeks in Reykjavík Iceland. Will report back how it works out.

<comment><USER6> I think I shall make "Python geeks in Reykjavík" my new canonical example of "niche".

</comment></comment><comment><USER7> I think it needs some polishing, but this is a pretty slick idea.

<comment><USER4> Thanks! New release was supposed to hit before the Xconomy article came out but should be up later today/tonight/late tonight...

very simple for now but lots of stuff cooking...

</comment></comment><comment><USER8> So it's ning + meetup but private.</comment>


Ask HN: Feedback on Product (just launched) - <AUTHOR> You can check out the site here: https://www.sybg.io<p>Excited for any and all feedback - thanks HN community! <comment><USER2> Your value proposition should be something like: "coordinate announcements across all platforms"

Also

1) explain what makes you different higher on the page

2) show how simple it is better

<comment><AUTHOR> Awesome feedback, thank you!

Definitely going to make our differentiators more immediately visible and illustrate the simplicity of it (and why a user should care!).</comment></comment>


Too Late to Protect the 2018 Elections. Here's How the US Can Prepare for 2020 - <AUTHOR> https://www.lawfareblog.com/its-too-late-protect-2018-elections-heres-how-us-can-prepare-2020 <comment><AUTHOR> Original title: "It's Too Late to Protect the 2018 Elections. But Here's How the U.S. Can Prepare for 2020." (6? characters too long)

The author is Alex Stamos, former CSO at Facebook.

<comment><USER2> Maybe just "How the U.S. Can Prepare for the 2020 Elections"</comment></comment>


CSS Positioning 101 - <AUTHOR> http://www.alistapart.com/articles/css-positioning-101/ <comment><USER2> If you're like me and like a quick-summary over a lengthy article, you might like this article: 'Learn CSS Positioning in Ten Steps'[0]. It quickly summarizes all the positionining properties, and how top/left/float/clear etc helps.

[0]: [http://www.barelyfitz.com/screencast/html- training/css/posit...](http://www.barelyfitz.com/screencast/html- training/css/positioning/)

<comment><USER3> I actually just logged in to leave a link to the Barley Fitz version. I've used his primer more times than I can count.

</comment></comment><comment><USER4> nicely explained. one key trick they're missing: position:relative + position:absolute, which I find myself using more than position:absolute alone. With a parent of position:relative, child position:absolute elements are position absolutely _within the parent_. Nice for centering overlays and things like that.

<comment><USER5> In the full example at the end this is used twice actually.

<comment><USER6> Still though, when they're explaining absolute positioning they make this statement:

"You can set an element to top: 100px and left: 200px; and that element will sit exactly 100px from the top and 200px from the left of the document."

Which seems misleading, despite the example they show later.

</comment></comment></comment><comment><USER7> Once you understand all this, you still need to KISS. Going overboard with clever CSS manipulation has two major drawbacks:

1) "Fragile" layouts, where simple changes break the entire UI.

2) Broken javascript - as an eample, jQuery-UI uses the positioning in the DOM to calculate where to display some UI elements. Mixing relative and absolute positioning breaks these functions.

</comment><comment><USER8> IMHO 'CSS positioning 101' will not be complete without mentioning the (in)famous float property.

<comment><USER9> Float's aren't that bad, other than the fact that the parent element will suddenly lose any inherent height if all child elements have floats.

I've got a few friends who extol the virtues of inline-block, but my clients have viewer demographics of 70% ie6.

Hack here, if you really want inline-block with ie6: [http://www.aaronrussell.co.uk/blog/cross-browser-support- for...](http://www.aaronrussell.co.uk/blog/cross-browser-support-for-inline- block/)

<comment><USER10> If you set overflow to auto on the parent element it will retain its height.

<comment><USER11> You also need to set the width. Explanation here

<http://www.quirksmode.org/css/clearing.html>

<comment><USER12> Quirksmode does an excelent job explaining this. And covering ie/chrome/safari bugs adds extra credit.

</comment></comment></comment></comment></comment><comment><USER13> If you're interested in all of the details, the spec itself is a good read: <http://www.w3.org/TR/CSS2/cover.html>

Section 9, "Visual formatting model" is especially useful: <http://www.w3.org/TR/CSS2/visuren.html>

</comment><comment><USER14> I had an AHA moment few weeks ago, when I discovered aplying something like that:

      .smth{
        position:absolute;
        top:0px;
        left:0px;
        right:0px;
        bottom:0px;
      }

It beautifully solved 2 interfaces I was working on (webapps with fluid widths). I remember being smiling for 2 hours after discovering this.

Not sure about IE support though, i think its covered from IE8 and ahead

<comment><USER15> What problem did it solve? BTW you can omit 'px'

<comment><USER14> I wanna cry, i had been writing a beautiful comment with examples, explanations, divagations, and when i was done i hit ctrl+R out of habit from developing.

I really wanna cry... Please implement a cookie based autosave for comment forms :'(

Briefing of my hardworked comment that will never be read: \</comment></comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----

I know about the px thing.

Fluid interfaces and traditional box model are wrong because padding and border mess things up You cant substract % - px, and % in width and height is calculated without taking in account border and padding.

I gave an example (wont rewrite it again)

I gave a few solutions: * extra markup inside the boxes with % ( ex. div.absolute>div.padding20>content ) Ugly and unsemantic, but usable * using positioning top/bottom and left/right for defining widths and heights This only works if you define boths of properties, anyway else if you specify width/height with padding/border it screws you * use new CSS3 box-sizing property Not compatible in all browsers, but maybe the best option thinking to future

Links to ilustrate: Traditional box model <http://www.w3schools.com/css/css_boxmodel.asp> Optional box models <http://www.w3.org/TR/css3-ui/#box-sizing>

I also said that a webapp like google calendar would benefit from this things, right now in chrome it gives me 2 scrollbars on the right side, one for the body and another one for the calendar pane.

Uh and heights is crappy because an element only expands to 100% height if parent is 100% height, anyway else it doesnt do shit. This is pain in the ass, redundant and messy between browsers.

Better option is to specify each box coordinates and anchors (and subsequently width and heigth) with position absolute top/left/right/bottom and then define padding without having troubles.

If somebody asks more i will jsfiddle some examples

<comment><USER16> If you're using Firefox, try Lazarus: <https://addons.mozilla.org/en- US/firefox/addon/6984/>

</comment></comment><comment><USER17> Great article to add to a FE Developer syllabus.

I've found no better way to learn these details than just opening up a text file and browser and trying out my own wacky layout experiments.

It's even more fun with other devs! Modify the CSS/HTML in different ways and take bets on how it will look before hitting refresh.

When in doubt, go back to the specs and find your explanations there! <http://www.w3.org/TR/CSS21/visuren.html#propdef-position>

<comment><USER18> If you have an iPad, you might want to take a look at cssMachine. It lets you try out the more graphical CSS properties with intuitive controls (rather than just typing code, although you can do that too)

</comment></comment><comment><USER19> This is probably off-topic. But can any design gurus recommend a beginner CSS and a Photoshop book? Is site-point books any good? Thanks for the help in advance.

<comment><USER20> For CSS, I've recommended "Learning Web Design" by Jennifer Niederst Robbins to several people. It's a bit out of date now (doesn't cover HTML5 and CSS3) but you shouldn't be learning the latest additions before you have a solid grasp of the basics anyway.

I've been unable to find a good introductory Photoshop book.

</comment></comment><comment><USER21> Are people still creating custom CSS for layout? I fell in love with the grid css frameworks and haven't looked back. Looking at most of the websites that come through these parts, I'd say they have too...

Do you still write css for layout?

<comment><USER22> eh, I'll take the bait.

Whether you're using 960gs or whatever it may be, you still need to be considerate of position and "write css for layout".

If you find yourself always using grid layouts, not just as guides but as the way to lay out everything, then you will soon find yourself caged inside that grid.

<comment><USER23> This is exactly it. The move away from tables had the side benefit of being able to move away from row and column thinking (there will always be an underlying grid in good design, but breaking it is where a good designer really adds value).

If you don't stick with the grid the framework provides you are just writing custom CSS anyway, at which point you probably wonder why you have another CSS file with lots of code that you are only using 50% of the time and that comes with it's own maintenance issues that you don't need.

I would also argue that from a maintanence point of view, semantically smart class and id names make it much easier to work with compared with a page full of "r3 w50 h10" type attribute properties.

To stick my flag to the mask, I hate CSS "frameworks" with something of a mild passion. CSS is too domain (domain in this sense I guess is a synonym for project) specific and abstract to benefit from a framework, you are much better keeping it lean and tidy and owning every line you write, because CSS is the kind of language where you should justify every line to yourself.

<comment><USER24> Good points. However I have to say I love frameworks (compass?) that handle all the cross-browser / ie6 stuff for me. If that is not reason enough to use CSS frameworks, I don't know what is.

<comment><USER25> Same. I've recently been experimenting with several - Less Framework, Less.js, Compass, and Flawless.css. html5boilerplate is also nice for starting templates.

Bypassing those niggling pita xbrowser/ie6 issues with just a 'git clone' is clutch.

</comment></comment></comment></comment></comment><comment><USER26> If only we could use this in emails</comment>


The IDE as a value - <AUTHOR> http://www.chris-granger.com/2013/01/24/the-ide-as-data/

<comment><USER2> I like this trend towards values instead of objects, Rich's talk is really worth watching too <http://www.infoq.com/presentations/Value-Values>. Using this approach in UIs is stretching the idea even further into a realm where I previously thought OO had a sweet spot.

I still like to convince myself, though, as to why this approach makes sense over the traditional OO / encapsulation approach. My current line of reasoning is that while having well defined services and interfaces can help organize a software system, the actual arguments and return values of these end points are really better thought of as values - and the expected structure of these values can certainly be part of the API. You just don't force people to construct and destruct objects for everything you are passing around.

A couple of related resources on this topic:

"Stop writing classes" from PyCon <http://www.youtube.com/watch?v=o9pEzgHorH0>

Rob Pike's reflection on using data vs OO:

[https://plus.google.com/101960720994009339267/posts/hoJdanih...](https://plus.google.com/101960720994009339267/posts/hoJdanihKwb)

<comment><USER3> I don't really get it. From the blog post, Granger is describing a very imperative object system, but you seem to be claiming that it is somehow a value-oriented functional system. What am I missing?

<comment><USER2> That's a good question - there are still objects, or groupings of data, and even tags that identify which behaviors or functions apply to them in various contexts. What strikes me as different is the entire hierarchy is a nested data structure that is easy to reason about and modify at runtime without the use of a fancy debugger. The use of 'encapsulation' that hid the underlying data in each grouping and also bind functions / methods directly to each object in this case would only make it harder to work with. Why? Because to view, construct, augment at runtime or serialize the hierarchy would require constructors, serializers, deserializers etc, instead of having something that is just a data structure, ready to be viewed, put on a queue, sent over the wire etc.

The idea of 'behaviors' also provides flexibility in what functions can act on any grouping of data - the key value pairs needn't be associated with a 'class' which dictates what the associated functions will be adds more flexibility. As the author hints, there are other ways of achieving this agility - dynamic mixins.

Finally, while having a well defined protocol (or API or endpoint or whatever you want to call it) is valuable and helps organize code, I think taking this idea to the extreme and saying that every single object or piece of data you pass around as arguments or return values from these end points needs to be expressed as an abstract protocol itself is where you really start to lose. An expected format of the data structures of the arguments and return values can and should be part of an API, but needing to wrap them in objects doesn't really help - and that's where this trend I speak of begins to seem like progress to me.

<comment><USER3> This is quite the standard dynamic languages argument, I'm not seeing much new here but this wasn't meant to be new. However, my point is that this is heavily object-oriented and heavily imperative. It is just a different kind of object system that people might not be used to. If this ever catches on, we'll just need another Treaty of Orlando to re-harmonize the object community.

To be honest, a lot of the object system seems to be confused and muddled. I mean, there are a million different ways to get the kind of flexibility in what the author call "behaviors" (a term incredibly overloaded, BTW), protocols, traits, type classes, etc...dynamic mixins are nothing new here also (I've designed a couple of research languages with dynamic mixin inheritance, fun stuff).

As an academic, I want to see reasons why X was chosen and comparisions with previous systems that chose Y instead; but I know I won't get this from most of the people who do the interesting work in this field, so I have to figure it out for myself. Calling this an object system opens up a floodgate of related systems that I can compare it against.

</comment></comment></comment></comment><comment><USER4> Behaviors? Methods.

Tags? Classes.

Just data? In Lisp the code, the functions, the symbols, etc. already are data.

Sure one can build another dynamic object system and use fancy names for it. It is really difficult to count the number of times this had been done in the past.

A typical Lisp-based system which does that was Object Lisp:

       http://lispm.dyndns.org/docs/ObjectLisp-Manual.pdf

Used by LMI for their user interface and by Coral for Macintosh Common Lisp (until Object Lisp was replaced by CLOS).

The idea that a) one can add and remove behaviors (methods) and b) add and remove tags (classes / mixins / ...) at runtime is found in almost every Lisp- based object system. Operations for that are available in every system.

Lisp-based object systems are not that much a language, but more a collection of objects and classes which interact in a defined way. Called a 'system'. That's also we have the Common Lisp Object SYSTEM, and not the Common Lisp Object Language. CLOS is described in terms of objects and their interactions (classes and generic functions are objects themselves) - not so much as a grammar of language constructs.

<comment><USER3> This isn't very fair. Yes, Granger is describing another kind of object system and yes it is OOP. And yes, this is in the long tradition of CLOS. But all of these sytems are fairly unique and deserves its own description, in this case reactivity is extremely important.

<comment><USER4> what is unique about it?

<comment><USER3> As mentioned, the reactivity makes this interesting to me. The amount of reactivity required for a project like LightTable is pretty ambitious, which we don't really see in most Lisp object systems (or any object systems for that matter).

<comment><USER4> What kind of reactivity does he describe in this article?

<comment><USER3> ~70% of his article is discussing reactivity:

> So what is the thing we want to compose if it's not the state? It's the > reactions that objects have when events flow across the system. What tends > to define variation in evented applications isn't the state of objects > themselves, but how they react to certain messages. Given that, we want to > be able to compose these reactions to create new versions of the same > object. ... Behaviors are a way of creating bite-sized, reusable reactions > to messages.

Then a comparison with the conventional approach:

> The way events are traditionally done in most modern platforms, you end up > with hidden collections of listeners that contain nameless functions. This > hides a vital bit of information - how do you know what's going to happen at > runtime and how would you change that? ... By comparison, behaviors carry > more information and are bound at call time. We can freely modify their > reactions at runtime just by replacing the map in the LT data structure. And > if we ever want to know what an object is going to do, we just take a look > at that object's set of bound behaviors.

Finally, he talks about tagging, which might seem unrelated, but then I also adopted a similar in my own reactive object system [1] for simlar reasons: I needed a way to externally abstract over objects to get them to behave in similar ways (and ya, I did dynamic mixins too, this is a fun field).

[1] [http://research.microsoft.com/apps/pubs/default.aspx?id=1793...](http://research.microsoft.com/apps/pubs/default.aspx?id=179365)

<comment><USER4> That does not sound 'unique'. reusable actions to messages in Flavors are called methods and the reuse is done via Mixins and Method Combinations.

In Lisp you won't use 'nameless' functions. Typically one uses symbols, which are late bound to functions. Thus the symbol table is the map we can modify. In a meta-object-based object system like CLOS, generic functions are mapped to symbols and they have 'maps' of methods which will be combined at runtime.

The Xerox PARC researchers who defined CLOS worked a lot on the problems (mixins, active values, open implementations, meta-objects in software, ...).

<comment><USER3> Nothing is truly new under the sun. Perhaps I should have used the word novel and interesting rather than unique. You've also reminded me of Gabriel's most recent Onward essay:

<http://www.dreamsongs.com/Files/Incommensurability.pdf>

I think Gabriel misidentifies this as a delta between science and engineering, but I think its more about the diff between communities. That we use different terminology, different sources, we have completely different underlying cultures. And you have to admit, the CLOS community is pretty unique, anyone looking from the outside is bound to have a very different frame of reference.

I've gone through as much CLOS work as I could, mixins inspired by an ice cream shop, active values (which are really just properties with custom get/set methods today) can serve as a nucleus for reactive programming but are not very sophisticated in managing change propagation (I think FRP signals are better, but you can clearly see the relationships). There is a lot there, but its not the end all of everything, their is some honest innovation going on here.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> This was an excellent talk at the Conj, and the talk was the best explanations of entity systems I've yet found.

I also recommend his Anatomy of a Knockout which also covers more of this topic:

[http://www.chris-granger.com/2012/12/11/anatomy-of-a- knockou...](http://www.chris-granger.com/2012/12/11/anatomy-of-a-knockout/)

with discussion:

<http://news.ycombinator.com/item?id=4907791>

</comment><comment><USER6> Code editor, modifiable at runtime, built on a dialect of Lisp...

;-)

I'm a fan of Light Table. Just had to point it out.

<comment><USER7> Sounds like you're looking for Emacs:

<http://www.gnu.org/software/emacs/>

<comment><USER6> That was the joke :-P

</comment></comment></comment><comment><USER3> I would love to see more context about the architecture of the system; e.g. how are the objects organized and what are they reacting to? I've seen many reactive object systems and I can't easily place this one in context, but maybe I'm spoiled by academic publishing (where we understand a new system in relation to older systems).

It seems like this object system is related to Rodney Brooks' behavior-based subsumption architecture (used mostly in robotics and games) or not? It uses much of the same terminology, but doesn't actually have subsumption (as conflict resolution). Strange. It also seems to be very imperative, in the sense that behaviors and behavior/object relationships seem to be managed very discretely as opposed to using any kind of declarative continous abstraction (say data binding or guarded connections). This bothers me a bit, as I have found these systems to be very unmanageable as they scale. But I still like where this is going, I can't wait to learn more!

</comment><comment><USER8> I've screamed this elsewhere already, it feels like smalltalk is back, and maybe even GeneraOS ?

<comment><USER3> This is much better than smalltalk. In Smalltalk, you could just edit code on the fly, but nothing would happen if that code wasn't continuously executing in an infinite loop. LightTable, on the other hand, supports real liveness. Its something that we never got in Smalltalk or Lisp.

Edit: Morphic (from Self) does support liveness, but only when it is being edited at the graphical level. If you are editing code, you are stuck in the same refresh trap as Smalltalk or Lisp, but to be fair, morphs are continuously updating themselves in infinite loops so it doesn't matter :)

<comment><USER8> Fine, I forgot Self, forgive me :p

That's what I'm waiting for anyway, lazy reactive systems

</comment></comment></comment><comment><USER9> First let me say that I really don't want to be mean here: I'll try to do constructive criticism.

I've worked professionally in the video-game industry and I must say that I'm a bit disappointed by all these blogs / videos trying to promote tools and/or languages by using very _poorly_ conceived games.

Take ChromaShift for example: it's terribly bad. We're in 2013 and the thing draws less "pixels" and yet is slower than any 2D scroller from the 80s running on a C64.

Sure, it was done in 48 hours and kudos for that... But back in the nineties we'd enter 48 hours or 24 hours "demo" competition and come up with stuff incredibly better looking than that.

The author of ChromaShift made a talk about the "Component Entity System" he's using.

And that's where the "suspension of disbelief" simply doesn't work for me: everytime he shows the game, it's freakin' ugly and slow as molasses.

Then comes the disappointment: if you want to run at a reasonable framerate you, of course, need to perform quite some logic in about 16 milliseconds (the author correctly mentions it in its talk).

And... Drumrolls: simply "iterating" over a seq made of a hundred elements in Clojure apparently takes more time than that. Not to mention that if you create objects at every frame then at one point the GC shall have to kick in and your real-time performance will suddenly drop (the author says that in the talk I watched about CES/Chromashift).

But why oh why use a language that is very arguable not meant to write video games in (Clojure) to... write a game in it as an example of what can be done!? (or as an example of how powerful an IDE supposedly is!?)

The "problem" is that they're talking about that "CES" as it was the one way to create games. But how many games written in Clojure have been shipped? Heck, how many games written in Clojure are even _playable_?

There are, today, lots of people writing games (either professionals or amateurs) and selling them (or giving them away for free).

And not a single one of these game is using that "Component Entity System". And hardly any of them is using Clojure (there may be one or two exceptions but that's about it).

And every single of these real games (even the simplest smartphone game) is looking better and is more responsive than the poor examples we see in Clojure talks.

So how are we, Clojure believers (I'm a big Clojure fan and investing lots of time and energy learning it), supposed to take any of this seriously?

Once again, I don't want to be mean: these guys are typically good programmers but, to be honest, they don't know _anything_ about game programming and that is a bit saddening.

EDIT: I won't even start talking about the "quality" of the "text editor" part of Light Table. I _like_ the concept of LT but I do wan't a client/server mode where I can plug in vim or Emacs (or Sublime Text 2 or whatever) as my text editor. Otherwise I'm never going to take LT seriously.

<comment><USER10> It's a bit pointless to talk about the performance of a game built for a 48 hour coding competition, but since you brought it up...

1) What are you basing your judgement of perfomance on? Not the HD recorded video that had two of my cores pegged the whole time I hope - because that's not at all representative. ChromaShift runs at 60fps on every piece of hardware I own (including a macbook from about 4 years ago) and generally runs at < 2ms per frame. There's a bug for some chipsets that causes chrome and FF to render canvas very slowly when hardware acceleration is on - if you're actually running the game, trying turning it off.

2) Even if it were slow, the comment you're making would be about JavaScript and Canvas performance not CLJS. The performance intensive bits of the game all delegate to JS, just like the performance intensive bits of any Clojure app are typically wrapped Java.

      > But back in the nineties we'd enter 48 hours or 24 hours "demo" competition and come up with stuff incredibly better looking than that.

None of us are game designers or builders. I'm sorry it didn't live up to a professional's expectations for a 48 hour game.

       > And... Drumrolls: simply "iterating" over a seq made of a hundred elements in Clojure apparently takes more time than that.

It's tens of thousands of elements and seqs aren't meant to be fast. You can easily just use an array when performance is critical.

       > But why oh why use a language that is very arguable not meant to write video games in (Clojure) to... write a game in it as an example of what can be done!? (or as an example of how powerful an IDE supposedly is!?)

The game was never used as an example of how powerful the IDE is. The game is just a game. The concepts behind the game happen to be similar to how LT was designed. Do you have any issues with the actual design of LT? This post has nothing to do with ChromaShift.

       > And not a single one of these game is using that "Component Entity System".

No one must build games on top of Unity and all the examples going back to the early 00's (like Dungeon Siege) must be a figment of my imagination. Entity systems are not new by any stretch of the imagination. [1]

       > So how are we, Clojure believers (I'm a big Clojure fan and investing lots of time and energy learning it), supposed to take any of this seriously?

Clojure(Script) is very fast, but it's not C and won't ever be. I've never run into a performance issue that I simply couldn't drop down to the platform and then wrap nicely to get native JVM or JS performance.

[1]: <http://scottbilas.com/games/dungeon-siege>

BTW, constructive criticism doesn't typically use words like "terrible" :)

<comment><USER11> > games built on top of Unity

For the curious, here is Unity's components reference page:

<http://docs.unity3d.com/Documentation/Components/index.html>

<comment><USER12> There are shipping AAA games and game engines that use some variation of a component system for entities, including Unreal Engine 3 and CryEngine.

In practice, "component entity system" simply means favor composition over inheritance. There are different ways you can architect your code to fit the definition, some of them efficient and cache friendly.

<comment> Tuna-Fish And to elaborate more: The reason for this shift is that the current-gen consoles (xbox360 and PS3) are really, really bad at random access into memory.

Chasing pointers on PC is bad, chasing pointers on them is suicidal. With them, it's better to do a linear copy of ~3kb than it is to reference one more uncached pointer. And this is especially bad because they don't have any kind of decent prefetchers -- if you haven't actually touched an object, it's probably uncached.

Becaus of this, if you use traditional OoO to structure your code, you leave an order of magnitude or more of performance on the table. And since the CPUs are slow as it is, you can't afford to do this.</comment></comment></comment></comment></comment>


Rands in Repose: Chill - <AUTHOR> http://www.randsinrepose.com/archives/2010/06/22/chill.html <comment><USER2> Forgetting about the t-shirt for a while, are there cheap ways to do this biofeedback analysis? I know someone who could use that sort of treatment.

Alternatively, is there a place that does biofeedback analysis that can be recommended in London?

<comment><USER3> Yeah; screw the T-shirt... I've had migraines for years, and my current one has been messing me up for a month or three (yes, a month-long migraine -_-). I wanna hear more about how Rands mitigated (mitigates?) his headaches.

He's one of the lucky ones with migraine auras, so he's got a free 15-30 minutes between when his vision goes wack and when the pain pounces... I don't have that luxury, and once the headache hits, it's pretty freaking hard to relax... if I even knew what relaxed me.

<comment><USER4> Try Maxalt. You'll need a prescription, but Western medicine kicks ass, and this is a fabulous drug that saves many days of misery.

<comment><USER3> I've tried all the triptans. None of them work. Neither do muscle relaxants, blood pressure medicine or anti-convulsants (at least not Topamax; it made things worse).

Only things that help are narcotic pain-killers and Migranal (aka DHE). And they only reduce the pain, not break the migraine. Alcohol helps a bit when I'm drinking it, but then there's the hangover to pay (on top of the migraine which has come back by then... >:( )

Seriously. My neurologist has given up on me. I've got an appointment at the Mayo Clinic, but until then, I'm on my fucking own.

<comment><USER5> Potential treatments you didn't list in order of decreasing plausibility: amitriptyline, nortriptyline, magnesium (OTC), coenzyme Q-10 (OTC), zonisamide, ACE inhibitors, ARBs, pregabalin, feverfew (OTC), bupropion, verapamil, valproate, memantine. Many of these are bread-and-butter drugs for internists, GPs, and family doctors -- no neurologist needed.

For doctors, a headache specialist at an teaching hospital can be a good choice. They tend to be knowledgeable and persistent.

<comment><USER3> Thanks.

<comment><USER4> Good luck, spydez. I hope you beat this. My wife gets migraines and her discomfort is unimaginable for the rest of us.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> I really, really like that t-shirt. Ordered.

<comment><USER7> So do I. Waiting patiently to be notified when size small is available. :-)

</comment></comment><comment><USER8> I keep forgetting to read this blog. I always love what Rands has to say.

<comment><USER9> Shameless plug: I had the same problem until I built a tool to solve it. Earlier I'd subscribe to everything on my feedreader, get swamped by my to- read list, only skim it half-heartedly, and occasionally wonder "how'd I miss that?" Now I can focus my feedreader on the 10-20 feeds I never want to miss anything from (Rands is on it), and I'll almost always be current on my reading there. The remaining 1000+ feeds I've moved to <http://readwarp.com>. Give it a whirl anytime you're done reading your usual haunts (HN, google reader, email, ..).</comment></comment>