On Voice Coding - <AUTHOR> https://dusty.phillips.codes/2020/02/15/on-voice-coding/ <comment><USER2> This post starts out talking about expecting to spend around $1,000.

There are at least two cross-platform projects where the biggest expense is a microphone instead of software.

1\. My project, Talon. Windows/Linux/Mac support, and a first party local speech recognition engine that is pretty good and getting better. It's free, but the engine is in a private beta (which is $15/mo to support development, optional if there's a financial issue).

2\. Serenade. They are VC backed. Currently free, unsure about their longer term plans. They use cloud based recognition.

<comment><USER3> This comment fails to mention Dragonfly with my Kaldi Active Grammar backend [1], which is cross platform (Windows/Linux now and Mac functional and to be released soon), completely free with no private beta features (although I do accept donations), and 100% open source (unlike Talon). The speech recognition is local, with extremely low latency. See the video demonstration [2] on the project page. I think the underlying Kaldi engine delivers unmatched accuracy as a free non-commercial engine.

I created Kaldi Active Grammar because I didn't trust relying on closed source software for something so crucial to my productivity, where a decision by an outside party determines whether I can function. As a bonus, open source means I can make it work better to fit my needs than closed source ever could.

Furthermore, the original article mentions Caster (which is built on Dragonfly), but doesn't mention that KaldiAG works with it, and that work is underway to expand Caster's platform support.

[1] [https://github.com/daanzu/kaldi-active- grammar](https://github.com/daanzu/kaldi-active-grammar)

[2] [https://youtu.be/Qk1mGbIJx3s](https://youtu.be/Qk1mGbIJx3s)

<comment><USER2> I think to state "unmatched accuracy" in good faith we should actually come up with a common benchmark and measure against it. I believe there aren't really any clean benchmarks for command accuracy floating around (it would be ideal if we used a strict grammar to properly measure the command decoders), and a wav2letter model holds the state of the art for librispeech WER% as of 2019.

I found your measurement here [1] which is against an unknown wav2letter acoustic+language model pair, as the web demo is at any given point in time running an arbitrary model based on having users test in-progress models, and it has never been running the model I am currently shipping with Talon.

(As a small example, the unfinished wav2letter experiment I am training right now has a 3.17% WER on speech commands, and 6.86% WER on librispeech clean, both numbers without using a language model)

[1] [https://github.com/daanzu/kaldi-active- grammar/blob/master/d...](https://github.com/daanzu/kaldi-active- grammar/blob/master/docs/models.md)

<comment><USER3> I am all for devising a good, fair apples to apples comparison. If you have any suggestions, let me know. In lieu of that, I use what I have available. While accuracy numbers from papers are informative and interesting, I don't think they directly apply to our usage particularly well. I would prefer to use numbers from actual usage.

</comment></comment></comment></comment><comment><USER4> I had several onsets of RSI a few years back, and had to resort to voice coding as a last resort, after stretches, pauses and ergonomic everything did not do the job. It was pretty awful.

But then, after having seen doctors and neurologists, and finally a physical therapist, I came across my salvation: \- Exercising my hands.

I very rarely see this mentioned for some reason. I exercised regularly, but only the bigger muscle groups, rarely grip strength and wrist strength. It felt counter-intuitive to exercise my already extremely painfully aching hands (when typing), but using grip weights and other methods to work out my hands and wrists, the pain went away quickly! If you are not diagnosed with carpal tunnel, and not already doing this, definitely try it, it saved my career.

<comment><USER5> Could you please elaborate on the exercises you're finding helpful ? I have a mild RSI myself (outer part of the forearm, near the elbow) and have been trying some eccentric exercises for a few months now but I'm not seeing a big improvement.

<comment><USER6> I list the low-hanging fruit first:

Look up nerve flossing exercises on YouTube. Routinely doing these had the largest impact for me. You'll feel the ones that work on whatever nerve is inflamed.

Try to improve your posture. My general mantra is "lift your head as much as possible. Pull your shoulders back". It gets easier eventually. If your head lies forward from the spine you have a hunch. You may notice a small lump of muscle behind your neck. That's bad. There are exercises to try and strengthen the opposite muscles.

If you sleep on your arms try to stop as well. I recommend sleeping on your back. Fluffy couches and back rests sacrifice posture. Don't use a laptop in bed.

Sleep, eat nutrient-dense foods, and run or swim. Avoid alcohol. If you do pushups or bench press, make sure to exercise your upper back equally to avoid imbalance.

</comment></comment></comment><comment><USER7> Just want to point out a very accurate, yet completely inelegant solution to voice text input: Saying each letter and symbol individually.

If you haven't tried it, you'll think I'm crazy, but it's amazing how fast computers can recognize individual letter names. You can just blurt them all out. I discovered this while entering a domain name by voice - just spell it out and poof, no problem, no corrections.

Not sure I'd want to spend all day doing it that way, but rather than fighting with voice recognition for misunderstood homonyms, just fall back on individual keys.

<comment><USER2> You're exactly right, and this is something I put a lot of work into! I designed a new phonetic alphabet - the "Talon alphabet" - (which isn't proprietary to Talon, people have used it with Caster as well).

The trick is one-syllable words to represent each letter in the alphabet, but they have high phoneme diversity (sub-syllable unique sounds) and care was taken to ensure they can be differentiated even when saying them "too fast" in a stream without gaps, and I tested them extensively to make sure I picked words that didn't clog up your mouth too much. The result is I can type 58wpm for short bursts using the alphabet alone, which is enough to play ztype, write entire words that would be hard to dictate, and control vim directly without an additional command set.

The base alphabet is:

air bat cap drum each fine gust harp sit jury crunch look made near odd pit quench red sun trap urge vest whale plex yank zip

Go ahead, see how fast you can read the alphabet in order. Then try reading it even faster, blurring the word boundaries together a bit. You can still tell the words apart!

Some people change a couple of words if they don't work well in their accent, but the base idea holds strong.

<comment><USER8> > air bat cap drum each fine gust harp sit jury crunch look made near odd pit > quench red sun trap urge vest whale plex yank zip

How did you settle on jury? Notably it seems to be the only word that is more than one syllable.

<comment><USER2> I think it's more like more like 1.5 syllables in practice? I had a hard time finding a short word in the J space that was phonetically diverse but also didn't clog the mouth. It's worth noting that when doing the thing I mention where you blend the words together to go faster, "sit jury crunch" can be spoken more like "sitch ury crunch" or even "sitch re crunch" and still recognized fine.

And see sibling thread suggesting "jree" like "tree", which is similar to how it sounds when you're going quickly.

Edit: For people suggesting new words, please read my comments downthread. Also the biggest complaint I've had about jury in practice is it can sound similar to "three". Not a ton of words are spelled with J, and when doing vim input it's faster to use numbers or a repeat command than say the letter repeatedly. So as it's a lower priority word to trim half a syllable on, it's worth getting it right if you're going to change it.

The alphabet isn't strict law, but it's best to replace individual words after you've had specific problems with them and not before, as it's hard to match the phonetic feel.

<comment><USER9> How about "joy"?

<comment><USER2> See sibling for testing methodology. It seems good at face value to me, however I did stumble a bit when doing the full alphabet out loud test with it (joy air, joy bat, joy crunch, etc...). I think there's a harder to quantify component that causes the stumbles/tongue twisting, that is where your mouth/tongue position ends up when you finish speaking the letter.

</comment></comment></comment></comment></comment></comment><comment><USER10> I had my second surgery just a few months ago. I can type again, but each time I had to use my left hand for months. Initially, it feels like your brain doesn't function properly anymore (not mentioning the psychological effort you have to make in order to be focused on work when you feel your hands are falling apart). Keyboard speed is directly related to how fast you can move your hands to support your thought flow. I tried Kinesis and even a split vertical keyboard (KeyboardIo) but none avoided the pain and numbness that came with typing. The other problem with thumb-cluster keyboards is that your IDE productivity goes to zero. I was faster with just my left hand on a regular keyboard than with both. I think this would be fixable with a good amount of time remapping shortcuts, etc. Now that my hand works again, I think I should start spending time getting used to my KeyboardIO and at least try to buy some time.

The "voice coding" space is maybe not a mess, but far from great or even acceptable. However, there seem to be more recent efforts to make better tools. I would definitely check [https://serenade.ai/](https://serenade.ai/) out.

The main problem, I think is that "voice coding" is too much focused on editor typing which they can't do right as, when combined with code syntax, it becomes too complex. Instead, they should focus on higher level actions (which btw, Serenade does) along with a different approach to typing. I think Vim is a good example of where editing should be. IntelliJ refactoring is where voice coding should _start_. With all the AI buzz, it's unbelievable how bad voice recognition is. I'm not talking about "Siri set an alarm", but instead separating context from tone, not having to say things 2-3 times having good response latency, etc.

Lastly, I wish there was simple voice assistance for code navigation - like go to definition, find usages, etc. This is much simpler to "parse" than code structure. Unfortunately, this is not even tackled by any tool as far as I've seen.

<comment><USER11> I'm one of the creators of Serenade—thanks for mentioning us! We totally agree about the need for higher-level layers of abstraction, and we're working on some of the code navigation functionality you mentioned right now. If you have any other ideas or feedback, we'd love to chat more, I'm firstname.lastname@example.com.

<comment><USER12> Among all demos above Serenade seems the only product that does the right thing. Why the hell I should say aloud "colon" or "quote" where tool can put them automatically.

</comment></comment></comment><comment><USER13> "I type fast enough that I have never had much use for snippets in my text editor. Perhaps if I'd used them more effectively, I would not have developed the RSI symptoms that I have!"

Often we have discussions about advanced code completion on HN. Many developers feel they don't need it, or that it gets in their way, for example.

Reading stories like this convinces me even more that our editors (tools) need to be smarter. There is so much repetition is coding, it's hard to believe we can't do better.

This tool is often mentioned: [https://tabnine.com/](https://tabnine.com/)

<comment><USER14> I found that Kite is comparable with Tabnine, at least with Python.

[https://kite.com/integrations/kite-vs- tabnine/](https://kite.com/integrations/kite-vs-tabnine/)

<comment><USER2> Because this says "single token completion" as the tabnine example gif I'm guessing it isn't comparing to deep tabnine at all, which is on an entirely different level

</comment></comment></comment><comment><USER15> I've been voice coding for about 5 years now. For those of you not on windows, I use talon voice on mac (linux version is in beta). It works quite well and I'm at least as productive writing code by voice than I ever was by hand. I was someone who would spend the time to get my emacs and then later vim configs highly optimized, but there is something liberating about not constraining yourself to key bindings. I used to type gcC to comment a python class in vim, now I say comment class. For commands you type frequently to get into muscle memory this isn't a huge gain, but for all the things you don't use regularly, it's so much easier for me to remember normal words than keyboard shortcuts.

<comment><USER2> At this point all of the projects mentioned in this thread (caster/talon/serenade) have some option for supporting the three main (win/lin/mac) platforms.

<comment><USER16> How do you get/request access to Talon on Linux?

<comment><USER2> You can follow the Talon website in my HN profile to the Donate link (Patreon) and sign up for the beta tier then join the Slack to get access. Or go straight to the Slack and make your case for not being able to support the beta on Patreon at this time.

</comment></comment></comment></comment><comment><USER17> FYI, I thought my programming career was over due to RSI.

Now, I only type while wearing long-sleeves.

And of course, I still have to take regular breaks.

I no longer suffer RSI symptoms. I'm guessing because it increases blood flow to the area and perhaps the warmth helps keep ligaments and muscles flexible and loose.

Simple solution, but took a while to figure out.

Hopefully this helps someone reading this.

<comment><USER18> Same, but for me the cure was John Sarno. Unfortunately RSI seems to be one of those disorders that everyone cures differently (if at all!) and you just have to stumble around until you find a method that works for you.

<comment><USER19> Are you referring to the "Sarno method for psychosomatic symptomps" (e.g. [https://www.morrisonhealth.com/sarno-method-psychosomatic- sy...](https://www.morrisonhealth.com/sarno-method-psychosomatic-symptoms/))?

This is the first I've heard of such a therapy, it sounds fascinating.

<comment><USER20> Yeah he probably is. Sarno wrote a whole range of books, primarily about back pain ([https://www.saxo.com/dk/healing-back-pain_john-e- sarno_paper...](https://www.saxo.com/dk/healing-back-pain_john-e- sarno_paperback_9780446392303)), but also dealing with RSI. If you read up on it, a great deal of people have said it has helped them with their RSI.

Anecdotally it's done nothing for my RSI, but it has helped me deal with a 7+ year "chronic" upper back pain, though it did take a bit of time to swallow the concept at first.

</comment></comment></comment></comment><comment><USER21> Greetings Everyone, I help maintain the Caster project. The key difference from other solutions out there as we seek to support a completely open source voice coding stack. Open source is only way to go long term if you're going to being using a tool for most of your life. Fortunately for some it acts as a bridge until their RSI symptoms becomes manageable or goes into remission.

We are working towards cross-platform support Linux and Mac as well as adding support for Kaldi. Dragonfly is already cross-platform so just a few windows specific functions to be ported yet in Caster.

Kaldi via daanzu's kaldi active grammar. [https://github.com/daanzu/kaldi- active-grammar](https://github.com/daanzu/kaldi-active-grammar)

Talon may be free but is closed sourced.

<comment><USER3> I said this in another comment, but it can't be emphasized enough: I created Kaldi Active Grammar because I didn't trust relying on closed source software for something so crucial to my productivity, where a decision by an outside party determines whether I can function. As a bonus, open source means I can make it work better to fit my needs than closed source ever could.

For what it's worth, my voice is quite abnormal, so most untrained speech recognition is terrible for me, and even performing the normal "training" for Dragon still resulted in very poor accuracy. However, apparently their training is quite limited, because once I developed Kaldi Active Grammar, and did my own direct training, the results were fantastic in comparison, with orders of magnitude better accuracy.

Open source is what allows this.

<comment><USER2> I understand and won't argue on your preference for the core Talon app. However, as all of my wav2letter code, models, tools, training methodology, and general advice (e.g. I am very active on the github/facebookresearch/wav2letter issue tracker helping others) are open source, and wav2letter as used in Talon is built from the public repository and dynamically linked, I don't think the speech engine is the place to speak against Talon's source policy.

<comment><USER3> Sorry, I was only using the speech engine accuracy as an example. But the freedom of open source stands for any part of software: Dragon's spectacular failures for me are only in part because of its engine. Also, is the command portion of Talon's wav2letter backend open source? Nonetheless, thank you for releasing some of your work. It is all helpful.

<comment><USER2> Yes, the decoder in the open-source talonvoice/wav2letter/decoder will decode commands alongside speech if you hand it an NFA blob describing the command graph. It's up to you to generate that NFA, but it's probably identical to the graph you're creating with FSTs, and the C structures are described in the source/header.

</comment></comment></comment></comment></comment><comment><USER22> I was curious what this might look like and found a couple videos on YouTube

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

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

<comment><USER23> Here is a very early(2007) and unintentionally humorous attempt to script in Perl with voice recognition.

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

<comment><USER2> I know it's funny, but I hate the prevalence of this video so much, because people reference it as a reason voice programming doesn't work, and I think it discourages people who may have otherwise had success with voice programming. You should consider linking to the middle of Emily Shea's PerlCon video where she first plays this video then shows that it's actually possible to dictate the same code effectively.

<comment><USER23> I don't know which video you're referring to and a cursory search didn't turn it up. Perhaps you could link it?

<comment><USER2> [https://youtu.be/Mz3JeYfBTcY](https://youtu.be/Mz3JeYfBTcY) at 4:15 is when she plays the Perl Vista video

(note the fiddling around video playing isn't a fundamental issue with voice input, google slides with video embeds turned out to be pretty unreliable with keyboard input and I believe that was ironed out in her later talks)

</comment></comment></comment></comment></comment><comment><USER24> It's still surprising to see Dragon Speech Recognition as the recommended (and only) choice here.

Is anyone working on decent speech recognition for Mac/Linux or know good resources for that? The ideal output is a stream of what could have been said, as well as some alternatives, each with a confidence.

Every alternative I've tried has not been as effective as the version of Dragon I used from 2011. I think the focus on accents and training is a big thing here -- I'm happy to spend a couple hours training it for better results.

<comment><USER2> The Talon beta ships with wav2letter and a really good many-accent English model that can handle both arbitrary commands and free form English. All of my trained models and some information is posted here: [https://talonvoice.com/research/](https://talonvoice.com/research/)

<comment><USER25> Are you going to release the speech data you collect at [https://speech.talonvoice.com/](https://speech.talonvoice.com/) or is it proprietary?

<comment><USER2> I don't consider it proprietary. As per the agreement I specifically ask for an open license so I will be able to release it in the future.

Right now it's about 5 hours total, which isn't a ton for actually training on, which is why I haven't prioritized releasing it and haven't even trained on it myself yet. I've been mostly using it for evaluation so far.

If someone approaches me and says "I have a compelling need for a bit of training data in the form of your prompts" I'll probably prioritize a release higher.

As another perspective, a majority of the people at this point submitting their voice are already using Talon and just want the engine to be more robust.

</comment></comment></comment></comment><comment><USER26> Example (with Perl!):

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

</comment><comment><USER14> Off topic, but I really wish to find out any Alexa-like "smart speakers" capable of voice programming.

For example:

1\. I would like to command the speaker listen for a keyword like the Fizz Buzz Test[1] if I counted to certain number.

2\. Ask the speaker to remind me of something when hearing certain topics during a conversation. Much like the "if" keyword in text based computer programming languages.

3\. Program a poem into the speaker over the microphone, tutor my kids to memorize it, correct the wrong parts. Share the snippet to other parents. program simple home made riddles and tests over voice.

4\. The ability to store certain list/map structure as global variables. e.g. asking the speaker, who is the second oldest son in this family? Who got up first this morning?

5\. Voice memos and search engine. Stored and indexed securely offline on my home NAS.

[1]: [https://wiki.c2.com/?FizzBuzzTest](https://wiki.c2.com/?FizzBuzzTest)

<comment><USER27> I think all the big smart speaker makers would tell you to just write a serverless function and hook it up to your speaker. It's unlikely they would ever create such a functionality.

Most likely if you want to make it work you'd either have to build your own smart speaker or make a serverless function that used one of the other voice programming programs mentioned in this thread as it's backend.

<comment><USER14> > build your own smart speaker or make a serverless function

If I build my own smart speaker it would surely be run on my home server. Not so much for server-less. Yeah but I get it. the voice commands should be counted as new "keywords" or "functions". Let there be a general "voice programming" language.

</comment></comment></comment><comment><USER28> You gotta be careful not to get RSI in your vocal chords. I almost did when I tried voice coding years ago. For me at least, it tends to shift to whenever "work" is being done. Same thing happened when I experimented with eye tracking.

</comment><comment><USER29> I've had some close calls with RSI and the most helpful things for me were:

1) Getting an ergo keyboard, in my case the Microsoft Sculpt 2) Remapping my keys to better match my workflow. Left and right parens are mapped to left and right shift - same for Ctrl-Braces and Alt for brackets. Mapping Caps lock to delete one word back was also a big one. Further, I have the number pad on the left to both make using the mouse require less movement in addition to remapping all the numpad keys to useful programming commands.

<comment><USER2> A minor tip for people fiddling with keyboards/layout. Be careful of regular pinky use for modifiers. Pinkies are weak and overuse can cause ulnar issues.

Corollary, if you have ulnar (pinky side) issues in your forearm, reduce pinky use.

</comment></comment><comment><USER30> Just a quick shout out to Microsoft (no affiliation) - Their Sculpt keyboard has taken all the discomfort out of 15hour coding sessions. If you're a professional developer, get one.

<comment><USER31> I'd recommend avoiding 15-hour coding sessions over using an ergonomic keyboard.

<comment><USER30> Probably better. But when the motivation grabs me, I cant stop.

</comment></comment></comment><comment><USER32> For those on Linux, I've been working on a Talon inspired voice coding program called Osprey that uses the Google Cloud speech to text API: [https://github.com/osprey-voice/osprey](https://github.com/osprey- voice/osprey).

It's still very much a work in progress but it's already been working very well for me and I'm actually using it to type out this response right now.

<comment><USER12> Why would you work with google when there are much more accurate open source speech recognizers based on Kaldi? With that specific usecase it is very easy to beat Google on accuracy.

<comment><USER2> I think google as the primary engine results in stuff like this: [https://github.com/osprey-voice/osprey-starter- pack/blob/mas...](https://github.com/osprey-voice/osprey-starter- pack/blob/master/src/text/formatters.py#L8)

On the other hand it's probably better at general (non command) English.

<comment><USER32> Yeah it uses a lot of machine learning and context based inference, which is great for dictating phrases but less so for commands.

</comment></comment></comment></comment><comment><USER33> You can solve most carpal tunnel issues by massaging your forearms with a ball (or your knuckles).

I know it sounds crazy, but I solved a very intense bout of plantar fasciitis by massaging my calves. Took some time, but eventually the pain went away.

And when I had carpal tunnel, I did the same (although not learning heavily on my wrists helped a lot too).

You'll know if you're hitting the right spot because it'll hurt. A lot.

<comment><USER2> * I am not a doctor, I have simply had a lot of experience with treating my own injuries and speaking to others in similar situations

This is partially good, but dangerously incomplete advice. The spectrum of RSI is far bigger than carpal tunnel, such as cubital tunnel, tennis elbow, tendinitis, and general neuropathy.

It can be caused by many things including various muscle groups in your shoulders, neck, posture, past injuries, nerve adhesion, flexibility, lack of strength.

Massage is a wonderful way to address nerve adhesion, flexibility, general tightness, but if you have a different issue it's not really a panacea.

My philosophy is that you should do these things in strict order if you have symptoms:

1\. reduce use (take breaks, get hobbies that take you away from the screen at home)

2\. vary conditions of use (standing desk, ergonomics, using more than one kind of keyboard/mouse)

3\. work out (yoga, swimming are highly recommended)

4\. physical treatment (see a doctor, physical therapist, deep masseuse, etc)

5\. alternative input (voice, eye tracking, etc)

If you do these in a different order or skip any of them you're probably doing yourself a disservice.

Also. Don't ice. Don't take anti inflammatories or other pain meds while you continue to work. Blood flow is important to recovery - heat can soothe your pain similarly to as ice, but without causing further damage. And pain meds during working hours will make you ignore the damage that is causing your pain, allowing you to cause more damage. Bad.

I've also seen some negative studies on steroids and surgery, suggesting if you get those without changing your habits, your pain will recur within a year in 90% of cases. Do your own research, but you might as well change your habits first and only use surgery/drugs as an extreme last resort. (Unless you have the specific form of carpal tunnel that can be permanently fixed in a day with a minor surgery in exchange for lower grip strength?)

</comment></comment><comment><USER34> Wow DragonFly, that's a name I haven't heard in a while. I wonder if the speech to text space will change now that ML has gained popularity.

<comment><USER2> There's recently Common Voice from Mozilla, which is a huge free English dataset (1500 hours and growing), and wer_are_we [1] has shown really impressive accuracy increases in published research the past few years. Exciting times.

[1] [https://github.com/syhw/wer_are_we](https://github.com/syhw/wer_are_we)

</comment></comment><comment><USER35> I have a free Chrome Extension that let's you control the browser via voice: [https://www.lipsurf.com](https://www.lipsurf.com)

Rest is ultimately the best way to prevent hand injuries and since I spend most of my time in Chrome, this extension lets me do it hands free.

</comment><comment><USER36> How well would this work in an open office setting, especially if several people are using it?

<comment><USER37> I suspect this setup would not be ideal as background noise getting worse would be annoying for all concerned and even more challenging than an open plan office already is, and your colleagues might not appreciate this unless you're already surrounded by people talking all day (e.g. support or sales teams on calls).

That aside, in terms of worrying about your mic picking up other people's voices and the voice dictation getting confused, most dedicated microphones these days (i.e. not ones that are built into your phone's headphones), are pretty good at background noise reduction.

I've not used the one OP recommends - I'd never have considered a table based mic like that before - but the noise reduction on the Plantronics Blackwire 3215 headset I use is so good that if I move the mic boom a few inches up or down away from my mouth, people can't really hear me on calls. It's superb at getting rid of background noises, and if somebody else was in my home office using voice dictation it would not be picked up by my headset.

<comment><USER36> Very interesting. But what about people who simply just rather use their fingers? Would you not rather type than speak if possible?

<comment><USER37> I think I personally would, but then I would rather hear some of my colleagues talking rather than using their mechanical keyboards in an open plan office.

I work mostly from home, so I'm interested in this as a programming method to see how or if it changes the way I approach it as work.

</comment></comment></comment></comment><comment><USER38> A good accompaniment to this is a recent presentation at Linux.conf.au this year by Shervin Emami: Desktop Linux, without a keyboard, mouse or desk.

[https://youtu.be/3aQfwS5pyrg](https://youtu.be/3aQfwS5pyrg)

</comment><comment><USER39> That's why I'm working on angle, a speakable dialect of python

[https://github.com/pannous/angle](https://github.com/pannous/angle)

</comment><comment><USER40> This article could use a better title.

Voice coding makes me think of audio compression for voice.

This is programming using voice recognition instead.

<comment><USER41> Isn't that voice _en_ coding?

<comment><USER42> Speech coding actually (though a "vocoder" may be used as part of speech coding):

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

</comment></comment></comment><comment><USER43> I went through a similar situation and ended up using [https://voicecode.io](https://voicecode.io) for a few years. It worked well enough for me, but I always found it hard using it in a public setting.

Ironically, I solved my RSI issue after coming across a book on HN. Everyone seemed to recommend the Mind Body Prescription, and after trying it, it did the trick.

[https://www.amazon.com/Mindbody-Prescription-Healing-Body- Pa...](https://www.amazon.com/Mindbody-Prescription-Healing-Body- Pain/dp/0446675156)

Edit: I've been wanting to try this project for several years now: [https://www.ctrl-labs.com](https://www.ctrl-labs.com). I think something like this is the solution moving forward vs voice coding.</comment>


Brains Sweep Themselves Clean of Toxins During Sleep (2013) - <AUTHOR> http://www.npr.org/sections/health-shots/2013/10/18/236211811/brains-sweep-themselves-clean-of-toxins-during-sleep <comment><USER4> The actual research is quite interesting. Sleep disorders themselves are fascinating. There is evidence that TBI (traumatic brain injury) can cause lasting sleep cycle disruption. Perhaps sleep disruption and TBI is a much bigger factor in the lasting impact of TBI than previously thought.

([https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3482689/](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3482689/)).

Article review: This is pretty good science reporting, actually providing a link to the study being referenced. My one nit is the use of the word "Toxins". That is a trigger word for me that immediately makes me suspicious of the reporting. Scientific papers about the human body very rarely if ever use the word "Toxins" preferring precise terminology such as "brain waste products" or just keeping to the chemical names at hand. "Toxins" is one of those normative layman words that gets used to sweep up all sorts of ill- conceived explanations and pseudo-science.

<comment><USER5> Yes, "toxic" and "toxins" are incredibly vague. I loathe the use of those words, as they are both scary and nearly meaningless.

<comment><USER6> When I see "toxins" I just stop reading. I assume the article is an ad for a juice cleanse.

<comment><USER7> It begs the question: is a few days of codeine or valium the brain equivalent of a "lemon juice / cayenne" cleanse?

<comment><USER8> Begs the question?

<comment><USER9> relatively common idiom (which may or may not be used correctly here :) : [https://english.stackexchange.com/questions/305/what-does- th...](https://english.stackexchange.com/questions/305/what-does-the-phrase- begging-the-question-mean)

</comment></comment></comment></comment></comment></comment><comment><USER10> > The process is important because what's getting washed away during sleep are > waste proteins that are toxic to brain cells, Nedergaard says.

Evolution found a nice little optimum in sleep that works pretty well- use less energy during a time of the day that isn't a very efficient time to be awake while also cleaning out the brain.

This could be interesting for future research. Could we find chemical means to remove those waste proteins?

<comment><USER11> There's an interesting concept. I wonder what the trade-off would be. How much efficiency would it cost to clean the brain continually rather than in a dedicated sleep cycle? Would it even be possible to process these toxins while maintaining consciousness? I'm sure there could be huge benefits for many modern lifestyles to trade heavily on reaction speed and/or lightly on IQ for 50% more waking hours. Or even 25% more waking hours, if you just cut the need for sleep in half, over the long term.

<comment><USER12> Why force things? I don't want 50% more waking hours. I enjoy my sleep tremendously.

<comment><USER13> I suspect (but do not know) that you enjoy your sleep because of its restorative effect. If you could obviate the need for the restorative effect, and instead just always feel newly restored, would you still enjoy going to sleep for no reason?

Personally, I dislike the need for sleep. I put it off for as long as I can manage, and try to get as little of it as I can get away with. For me, I have a hard time functioning well with less than 4 hours a night, but anything more then 5.5 hours and I feel like I've thrown the day away. The idea of voluntarily checking out from the world isn't as relaxing to me as picking up a book to read, or learning something new, or doing something productive that isn't work/startup-related.

Either way, I assume that nobody would force you to take a drug that you didn't want to take.

<comment><USER14> Oh my god, think of what this would do to commerce, in terms of a capitalist society.

Suddenly, you can take a drug that decreases your need for sleep by 50%. People only need 4h of sleep per night now, for a full nights' sleep - 3h, if you're willing to skimp a little, 2h isn't unheard of (in the way that only getting 4h of sleep a night, now, isn't unheard of either).

Suddenly, there's a significant advantage in the hands of everyone willing to take this drug. Students are expected to study more and harder, because they don't need 8h of sleep every night. Entrance exams to schools get more difficult. Software developers are now enticed to work longer hours - <USER2> hours than they already are. Labor / shift workers (hospitality / food industry) are expected to work longer shifts, and they have to, because businesses have to be open longer because more people are awake for more of the day.

Now, also, you have to consider: this is just sleep, in terms of brain repair. Your body has to put itself back together every night, too - <USER3> microscopic muscle tears, fixing bruises, etc etc etc. Your body would probably start slowly falling apart on 2-3h of sleep per night, even if your mind was fully rested.

I really, really hope this doesn't happen.

<comment><USER15> It is entirely possible that it would evolve differently, perhaps given that not everyone would be available during the 'dark' hours you might see a society evolve into dual function, where 8 hours were for 'working' and 8 hours were for 'community/family' with 8 hours split into two 4 hour segments as 'transition times'.

<comment><USER13> I was thinking this as well. I suspect that it's impossible to predict, but I wouldn't think it unfathomable to imagine a world in which, with all the additional free time, society might evolve towards a more Italian ethos, in which we take longer lunches, and don't mind spending as much overall time 'at the office', though not necessarily working any more while there.

<comment><USER14> As an American, living in late capitalism, I do not see this as anything but extremely wishful thinking for 99% of the working population here.

But if this sort of thing ever does happen, then I absolutely hope that it goes down as you've described.

<comment><USER13> Yes, your anti-capitalist intentions were pretty clear from your earlier post. Put simply, I do not share your views on the subject.

<comment><USER14> That's fair. Sorry, I hope I didn't get too carried away. Thanks for the dialogue. :)

<comment><USER13> No need to apologize, I just don't agree.

In the time I've been alive, I've seen more and more employers gravitating towards fewer hours, more lenient work schedules, etc. My first job was basically a minimum of 10 hours a day, and 6, sometimes 7 days a week. Nowadays, companies (especially in tech, mind you) are realizing the difficulty in recruiting / training / keeping personnel and are competing on benefits to the extent that 'unlimited' vacation days, telework, longer maternity and paternity leaves, etc. And before the obvious counterargument is made, this isn't limited just to technology (though it does seem to be blazing the trail.) Tech, agriculture, finance, business, and any industry in which recruiting and keeping talent are tricky are basically trading dollars for perks, and often, the result of that is that employees get to keep more of their personal time for themselves.

Sure, this hasn't affected every industry, and for industries where labor is a commodity, it may never occur, but just as sure as you believe your scenario is the result of capitalism, I believe that the increase in perks / time / accommodation is the same.

<comment><USER14> That's a really interesting perspective, especially since you've brought up a lot of illustrations that I cannot disagree with. I think you really nailed it with the phrase,

> trading dollars for perks

And I suppose it also has to do a lot with how much leverage employees have against their employers. Those of us in tech have more leverage on average than, say, a hospitality worker.

It's a lot more nuanced than I had initially thought, for sure.

<comment><USER13> "It's a lot more nuanced than I had initially thought"

Most things are a LOT more nuanced than most people give credence to, and there's zero dishonor in acknowledging that. With almost every issue I've delved into (especially political ones), there are arguments for and against any given issue that I can't hand-wave away. I might prioritize some factors ahead of others, but just about every political issue in the world is a matter of tradeoffs, and there are very few obvious wins.

I agree with your assertion here that much of the strengths to be found in capitalism revolve around the notion of resolving power imbalances. For every good story I've read, somewhere, there's a terrifying story -- I'm reminded of the old Hazard county mine worker strikes, for example.

But while unions are ostensibly the surest fix in mitigating those power imbalances (in fostering leverage to the people), the more I look at them the more I realize that they need to be truly cooperative. Union power is real enough that there are places like Sweden which have no minimum wage, and yet still have high effective wages. But in America at least, unions with political power often exploit that political power towards complacency, corruption, and often trend towards being less effective stewards of their member interests. In essence, too much cooperation between unions and policy makers may yield counter-intuitive results that manifest in ineffective unions, which yields declining memberships, which yields power imbalances in favor of corporations.

The point, if I have one, is that while so many people get wrapped up in the idea of "unions bad" or "unions good", we lose the ability to objectively evaluate whether a given union is good or bad because we ideologically insist that they be a certain way. Similarly, evaluations of government, corporations, regulations, trade, capitalism, socialism, et al all falter as soon as we begin to put too much faith in the institution that we stop performing scientifically objective and individual evaluations upon them.

Thanks for the conversation, and in particular, for the open mind. It's always a pleasure to engage with someone who I know to be willing to adjust their opinions to facts, and while capitalism surely isn't always good, it definitely isn't always bad either.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> Maybe looking for the reason we sleep is the wrong way to look at it? What if being asleep is the default state for any organism?

Sleeping require much less energy. The only reason to be awake is to eat and reproduce. For any animal there is probably an optimal ratio between sleep and hunt/reproduction where sleep is the most favorable.

<comment><USER17> This strikes me as the type of comment that sounds artificially 'deep' but has no constructive or logical basis. What does 'default state' even mean in this context? The fact is we naturally sleep sometimes and we're awake at other times. If you're suggesting there's no reason for sleep other than conserving energy, that's patently false.

The (assumed) primary motive here is to find a way to sleep less. We already have ways to force wakefulness. We now need to find ways to mitigate negative side effects hence the research on various health functions sleep contributes towards.

<comment><USER18> > _This strikes me as the type of comment that sounds artificially 'deep' but > has no constructive or logical basis_

A bizarro thing to say, given that the parent gave several arguments that make sense from an evolutionary/physical viewpoint, like "sleeping requires much less energy" and "the only reason to be awake is to eat and reproduce".

> _What does 'default state' even mean in this context?_

The state that requires the less energy expenditure? Similar to a rest/equilibrium state in physics?

<comment><USER17> > The state that requires the less energy expenditure? Similar to a > rest/equilibrium state in physics?

That's a very reasonable definition. Taking that into account, let's revisit the context of the parent comment: "What if being asleep is the default state for any organism?" What do you mean "what if"? "What if <insert obviously true statement>" is not a constructive or insightful question.

> A bizarro thing to say, given that the parent gave several arguments that > make sense from an evolutionary/physical viewpoint, like "sleeping requires > much less energy" and "the only reason to be awake is to eat and reproduce".

Repeating myself: If you're suggesting there's no reason for sleep other than conserving energy, that's patently false.

<comment><USER18> > _Taking that into account, let 's revisit the context of the parent comment: > "What if being asleep is the default state for any organism?" What do you > mean "what if"? "What if <insert obviously true statement>" is not a > constructive or insightful question._

Well, assuming it's true, it's not that "obvious". And even if it is obvious to e.g. a biologist, it's not at all obvious to a layperson.

In fact it's so "not obvious" that you didn't even consider it valid when the parent said it (I merely clarified it further).

> _Repeating myself: If you 're suggesting there's no reason for sleep other > than conserving energy, that's patently false._

Why repeat that though? It's not as is somebody claimed it.

What parent said (and I clarified) was whether sleep is the default state of an animal, and everything else is a deviation from that default to achieve a specific (reproductive etc) purpose.

So not only we did NOT say that "there's no reason for sleep other than conserving energy", but we explicitly said something close to being the opposite: that the only reason to be awake is to "eat and reproduce".

</comment></comment></comment></comment></comment><comment><USER19> A related and quite recent piece of research - Stimulating toxin cleanup via brain stimulation using pulsed light. Has been used to treat Alzheimer symptoms in mice models. Last I heard was being fast-tracked to humans.

[http://news.mit.edu/2016/visual-stimulation-treatment- alzhei...](http://news.mit.edu/2016/visual-stimulation-treatment- alzheimer-1207)

"This treatment appears to work by inducing brain waves known as gamma oscillations, which the researchers discovered help the brain suppress beta amyloid production and invigorate cells responsible for destroying the plaques."

<comment><USER20> For those that prefer research in podcast form: [http://www.radiolab.org/story/bringing-gamma- back/](http://www.radiolab.org/story/bringing-gamma-back/)

<comment><USER21> A great podcast, btw. That specific episode and in general.

I wonder if this brain hack will have unwanted side effects. That is, I wonder if using the light trick could cause the normal processing to either not happen or happen less often.

This is really exciting research, though, and I really hope it is effective in humans like it is in mice.

</comment></comment></comment><comment><USER22> My alma mater has a saying: "sleep is for the weak". If you go to a university with that slogan, here is one more reason why it is foolish.

If you want to learn effectively and work efficiently, take care of your body and take care of your brain.

<comment><USER23> Hey, my alma mater has that slogan too... oh, hi, afarrell.

<comment><USER24> Which schools are these?

<comment><USER25> MIT

<comment><USER26> It's a shame what these "top" schools can get away with because of the sacrifices some people are willing to put themselves through to get a coveted degree.

<comment><USER27> Can't argue with the results.

[http://libguides.mit.edu/c.php?g=176016&p=1159581](http://libguides.mit.edu/c.php?g=176016&p=1159581)

<comment><USER28> I'm confused. Where are the sleeping habits of the people in the list you linked?

Oh, right, there are none.

</comment></comment></comment></comment></comment></comment></comment><comment><USER29> Makes me think sweeping is analogous to a halt the world garbage collector.

</comment><comment><USER30> There's already research that being sleep-deprived has similar cognitive effects to being drunk, especially with regards to driving safety. This new result implies that may be more than a coincidence, as the biological underpinnings may be similar.

</comment><comment><USER31> Random thought: Could dreams be a result of the processing of toxins? In the same way some "toxins" cause us to hallucinate etc. so too could these toxins, as a side affect of processing?

<comment><USER32> >The team discovered that this increased flow was possible in part because when mice went to sleep, their brain cells actually shrank, making it easier for fluid to circulate.

It could be that the brain needs to fire up for short periods in order to help pump the increased fluid out to prepare for another rinse.

<comment><USER33> What I thought of, when I read that was that perhaps the shrinking is related to reduced blood flow or reduced blood absorption (does blood pressure raise or lower during sleep?) and this is also related to sleep itself, in the same way that a chokehold causes unconsciousness by restricting the oxygen reaching the brain

</comment></comment></comment><comment><USER34> I learned about this from the Learning how to learn class on Coursera. Can't recommend it enough. [https://www.coursera.org/learn/learning-how-to- learn](https://www.coursera.org/learn/learning-how-to-learn)

<comment><USER35> I went through the course on your recommendation. Thanks, it was great!

Apparently much of it based on Oakley's book _A Mind For Numbers_ , which I'll try to read soon. Much of the content also reminded me of Josh Waitzkin's _The Art of Learning_. A related thread elsewhere on HN [1] also suggests _Make It Stick_ by Peter Brown.

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

<comment><USER36> Just today I got notification from iTunes that her new book "Mindshift" (which I had preoredered) is out. Her new course with the same name is on Coursera too [https://www.coursera.org/learn/mindshift/home](https://www.coursera.org/learn/mindshift/home) After first week not sure how much does it overlap with "Learning how to learn".

</comment></comment></comment><comment><USER37> It always amazes me to read articles like this. How come I don't need more than 3 hours of sleep a day and its been like that for over 15 years now?

I sleep "late hours". I go sleep around 8am and wake up around noon. I don't eat breakfast just coffee. I work most of the day on different projects, eat quite large dinner at 8pm, then every day go for 45 min to the gym, around 10pm and then 20 min walk. After that its about midnight and I start working. I don't get tired until 5am but then 2 glasses of water "wake me up". By 8am I'm in bed truly tired.

I been running this schedule for 15 years now, no symptoms of nothing. I don't smoke and don't drink btw. I barely watch TV (never found anything interesting; I take breaks on my PC watching some travel-related documentaries)

Edit: perhaps once a month I feel truly tired and usually on the weekend, I tend to sleep about 8-10 hours. But that doesn't happen often.

<comment><USER38> I remember my friend mentioned to me she might have a mutation in the DEC2 gene ([https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2884988/](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2884988/)) because she usually goes to bed around 2 am and wakes up at 6-7 am, and has been doing it throughout her life. And she says she's fine and like you doesn't feel tired if she only gets 4-5 hours of sleep.

Interestingly, if she gets the standard number of hours of rest (say, 7-8), she gets really groggy and it totally disrupts her ability to function throughout the day!

<comment><USER37> Interesting, same here. IF I put whole 7 hours (I cannot 8), I feel tired all day long.

</comment></comment></comment><comment><USER39> I'd be very surprised if it turns out that there's not a major "computational" element to sleep. Sure, it may be difficult to circulate fluid through a waken beings brain, but I think evolution could have managed. If the "computational resource" is needed for something else though (like running backprop over your neural networks or something :P)... That to me is the only reasonable explanation for the huge evolutionary cost most creatures pay for sleep.

<comment><USER40> But evolution doesn't "manage" anything. Evolution often plateaus at "good enough." I think this is the risk in the computer metaphor for the brain. Computers have designers that try to optimize them, brains do not.

<comment><USER41> As far as we know...

It's possible that our invention of computers was and continues to be a slow brew to simulate something innate within us...

</comment></comment></comment><comment><USER42> It's interesting that in almost every sleep related article I've read on HN, the overwhelming majority of people who respond about their personal life say that they hate getting up 'early'-for various definitions of early. Surely there are programmers who like getting up early?

<comment><USER43> I like getting up around 5:30 or so. Puts me outside the heaviest traffic times and gives me a few hours in the morning of uninterrupted time to mind meld with the computer. And then I get to leave 'early' in the afternoon and enjoy my free time and plentiful daylight.

<comment><USER44> Personally, I prefer to miss rush hour on the other side of it ;)

</comment></comment></comment><comment><USER45> IIRC the story Manhole 69 by JG Ballard references a requirement to divert neurotoxins in men whose sleep centres were disconnected/cauterised.

Ballard I presumed was just speculating. But based on his relatively high level of scientific knowledge I imagined it was rooted in some sort of real world science.

That story was written in the 1960s...so has the state of research on this remained slow or was Ballard just making a lucky guess?

</comment><comment><USER46> Title should be updated to reflect 2013.

<comment><USER47> Yes, I remember seeing this on here several months ago. Still good for all the people who may have missed it.

</comment></comment><comment><USER48> _Any sufficiently advanced technology is indistinguishable from magic._

s/technology/science

[https://en.wikipedia.org/wiki/Clarke%27s_three_laws](https://en.wikipedia.org/wiki/Clarke%27s_three_laws)

At some point, people on HN will get over their fear of words like "toxins" and embrace the Tao Te Woo as the advanced science it is.

</comment><comment><USER49> I have heard of at least three believable theories of why we sleep.

\- To turn short term memory into long term memory, to consolidate long term memory, and prepare the brain to learn new things.

\- To clean the brain of harmful waste products (which is what this article says. By the way, it is old and from 2013).

\- An evolutionary artifact of energy conservation in resource-low ecosystems.

Are there some other theories too?

</comment><comment><USER50> I'm currently reading Arianna Huffington's "The Sleep Revolution". If you're interested in more stuff like this, it's pretty good. It's definitely made me more mindful of winding down and night and getting plenty of sleep.

One thing in particular that stood out is the rise in cortisol associated with lack-of-sleep, and cortisol's relationship to gaining fat; having hit a couple of rocky weeks sleep due to young kids at home, this was particularly relevant to me.

I now rank sleep as pinnacle in terms of health / fitness training, mental well-being, creativity, etc.

<comment><USER47> There have been two Vox articles about people who are biologically late sleepers are often viewed as "lazy." It's sad considering the current state of sleep deprivation throughout the western world.

I hate being up early for work. I am 9am scrum since our team is spread out over the planet and it's truly painful. The right attitude is not "you should get to bed at a reasonable time," since I often get bursts of productivity between 11pm and 4am. I'm probably the most productive in that window.

Choosing jobs and career paths based on your sleeping pattern (and overall heath) should be encourage more over money or benefits or retirement or all of those other bullshit traps:

[http://khanism.org/perspective/trapped-in-the- cubical/](http://khanism.org/perspective/trapped-in-the-cubical/)

</comment></comment><comment><USER51> Wild analogy.... Inference machines cleanup the neutral model itself when put to relax. Wait, are there any Neural Nets out there, which produce toxic "weights" to be discarded later, If not than we are far from copying the real glucose based neural networks. /Imagination

<comment><USER52> I think rest in human term is different than machines. Also, that is just a cleanup mode, machines can induce that with or without "rest"

<comment><USER53> Yeah, all organs produce waste chemicals, the brain is no different in that respect.

</comment></comment></comment><comment><USER54> I thought this was already common knowledge? I remember reading about this about 3 years ago.

Specifically in this article about coffee naps [http://www.vox.com/2014/8/28/6074177/coffee-naps-caffeine- sc...](http://www.vox.com/2014/8/28/6074177/coffee-naps-caffeine-science) which links to this Harvard article: [http://healthysleep.med.harvard.edu/healthy/matters/benefits...](http://healthysleep.med.harvard.edu/healthy/matters/benefits- of-sleep/why-do-we-sleep)

<comment><USER55> Well, this article is from October 2013...

<comment><USER54> Ah, missed that :)

</comment></comment></comment><comment><USER56> so sleeps are basically GC pauses.

</comment><comment><USER57> Learned about this few years ago here is the link

[https://www.ted.com/talks/jeff_iliff_one_more_reason_to_get_...](https://www.ted.com/talks/jeff_iliff_one_more_reason_to_get_a_good_night_s_sleep)

</comment><comment><USER58> I bet meditation, or a state that can be brought on by meditation, has this same effect.

</comment><comment><USER59> This should worry all the people taking adderall and modafinil to be more productive.

<comment><USER60> There's a massive difference between using stimulants to be more productive and using stimulants to skip sleep.

<comment><USER61> Is there?

<comment><USER60> Obviously. By sleeping enough you get the sleep you need, by not sleeping you obviously don't.

</comment></comment></comment></comment><comment><USER62> This article is from 2013. Has there been any further research published since then?

</comment><comment><USER63> Should be noted that the article is from 2013 in the title

<comment><USER64> This same article was actually posted here a few years ago, and commented on extensively:

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

</comment></comment><comment><USER57> www.ted.com/talks/jeff_iliff_one_more_reason_to_get_a_good_night_s_sleep</comment>


A man, a Plan. No canals (2011) - <AUTHOR> http://davidkendal.net/articles/2011/11/a-man-a-plan <comment><USER2> This article is starting from completely the wrong point. The default state of a programming language is somewhere between "dead" and "niche". You wouldn't expect a language to take off unless it's got something special going for it. And Arc had very little. Basically lots of hype built around a cult of personality.

And in the other column, the Arc had significant things going against it. It was a toy implementation by somebody who really had more important things to do with his time. It didn't bring anything substantial to the table -- to a first approximation it felt like a basic Scheme with a idiosyncratic function naming scheme. It didn't have any killer features. It didn't have a significant standard library. Compare that starting point to e.g. Clojure or Go. It's like night and day.

The question isn't why Arc didn't take off. It's why anyone would expect it to take off in the first place.

<comment><USER3> You're being a bit uncharitable. Even though I haven't spent a huge amount of time on Arc, there's more to it than just hype. I know Common Lisp and Scheme _really_ well, and I would much rather program in Arc than either of those. Now that I'm used to Arc, I find writing code in CL or Scheme painfully clumsy.

And though language design (as opposed to implementation) may not seem "substantial," it does matter. Scheme itself was initially an exercise in language design-- a cleaning up of MacLisp. It didn't only become "substantial" when people started writing complicated compilers for it.

<comment><USER2> I don't think the convenience of Arc is a very widely held view among Lisp users. But that's setting also setting the bar way too low. If Scheme or CL didn't exist, and somebody tried to launch them as new languages today with a first generation implementation, they wouldn't stand a snowball's chance in hell. Most probably CL or Scheme as new languages wouldn't get any traction even with a mature implementation + good library coverage right at the start. It's much easier for a language community to be self-perpetuating at a certain size than to actually grow to that size.

I agree that Scheme didn't only become substantial once the implementations became mature. But that's because it had a few fresh big ideas (lexical scoping/closures, CPS), not because it was new. Likewise it didn't become popular (as much as it ever became popular) just due to existing, but largely thanks to being used as the teaching language for a legendary intro course at a prestigious university.

As for the "hype" comment, that wasn't intended as a negative attribute. It's very hard for a language to succeed purely on its own merits. Tens of man years of effort had gone into Go before it was launched. It might still have failed had there not been such powerful marketing hooks in place (created by Bell Labs legends, having the appearance of being backed by Google). Arc had a good marketing hook as well. That would have made bootstrapping an initial community much easier than e.g. for Clojure.

And just to be clear this isn't intended as a personal criticism! There's just one YC, but hundreds of new languages and implementations appear every year, slowly advancing the state of the art.

<comment><USER3> Of course it isn't widely held, since hardly any have tried it. The question is whether it's true, and that is something I think I'm qualified to judge.

</comment></comment></comment></comment><comment><USER4> The discussion of PG's decision to use closures for web development seems off topic. That doesn't directly affect the popularity of the language; it's quite possible to do things in Arc without using closures for state on the web.

I played around with Arc quite a bit and the biggest problem was that it did not have a standard library with enough stuff in it. In contrast (and talking about a totally different type of language) one of the reasons Go has been successful is the excellent set of standard packages.

If you start your language with sufficient standard library kindling then others can build on that and write more and more libraries. But start with insufficient libraries and it's hard to take off.

So, the initial releases of Arc were constrained by things that PG had already written. If you wanted to do the same then it was just fine.

As as concrete example I wanted on my old UseTheSource site (which was in Arc) to go grab a URL from a third-party site inside the code. There wasn't an easy way to do that so I wrote an external script in Perl and did the following in Arc:

      (def hn-valid (user)
        (if (uvar user hn)
              t
              (let v (system (+ "perl check-hn.pl " user))
                      (if v (= ((profile user) 'hn) t))
                      v)))

The Perl script grabbed a page on Hacker News, did some light parsing and returned either 0 or 1. That really put me off making any extra effort to use Arc (and I like Lispy languages) because I was either going to shell out to something else, or have to write _everything_ from the ground up.

A similar thing happened with UseTheSource's Twitter integration where I could use Perl's Net::Twitter::Lite to trivially integrate.

<comment><USER5> If a language's popularity was closely dependent on library support, then (in your opinion) why hasn't Clojure gained mass adoption?

<comment><USER6> People who would like to use Clojure or Scale aren't fans of Java. And if you aren't a fan of Java, chances are good that you aren't a fan of the JVM, too.

I'm already using something else. Why should I use the Java eco-system?

<comment><USER7> I don't see why this should be. It sounds a bit irrational. From my perspective, Java is an iffy language and Java programs are often nightmarish to read. But the JVM? I see no reason why my feelings about Java and its culture should color my opinion of the JVM. The JVM is a technical marvel. It runs Ruby faster than Ruby with far less effort. It supports a whole host of very different languages, many of them quite good. And it's just blazing fast (modulo startup speed).

There are other valid choices, of course, and the JVM is obviously not the optimal choice for every project, but I think it's fallacious to rag on the JVM just because its most popular language isn't to your taste.

In short: Java bad. JVM very good.

</comment></comment></comment></comment><comment><USER3> What a complicated answer to a question with a simple one. I spend all my time on YC now. The last release of Arc was years ago. So this case doesn't prove anything one way or the other about programming languages.

<comment><USER8> At the very least his point about continuation-based webservers is a good one.

I recently realized why the arc webserver needed to track IPs to ignore almost from day 1: everytime somebody requests a page, memory usage goes up. This includes crawlers, drive-by users, everybody. The standard way arc encourages webapps to be programmed (<http://paulgraham.com/arcchallenge.html>) is by leaking memory. Every load of the front-page creates 30 closures just for the 'flag' links. Ignoring IPs is just a band-aid to cover up this huge sink[1].

I've been programming in arc for 3 years and am still active on the arc forum. I love that arc is a small and simple language without lots of bells and whistles[2]. I really couldn't care less that it's 'not taken off'. But there's a different between toys that encourage exploratory play, and painting yourself into a corner design-wise. I now think of continuation-based webservers as an evolutionary dead end.

[1] Another ill-effect of the ip-ignoring is that every newcomer to arc who tries to run it behind a proxy server immediately runs into a gotcha: The arc webserver now thinks all requests are coming from the same IP address and so throttles everybody. <http://www.arclanguage.org/item?id=11199>

[2] If you spend any time with it it literally begs to be tinkered with. And the experience of programming in a language while referring to its _compiler_ in another window is something everybody should experience.

<comment><USER3> I'm not sure what you mean by continuation-based. The Arc server can use closures to store state, but it doesn't use continuations.

Using closures to store state is like using lists as data structures: it's a rapid prototyping technique. You're in no way painting yourself into a corner, and the current news software is proof of that. You have a very old version of it. In the years since we released the version you have, we've gradually squeezed most of the closures out of the more common things, and we do have a proxy in front of the Arc server. That's how we manage to serve 1.7 million pages a day off one core.

<comment><USER8> I see. Yeah, I stand corrected.

I was conflating continuation-based and closure-based webservers because both allow straight-line code instead of explicitly managing url handlers.

And the traditional rhetoric in favor of this technique has come from Seaside, which popularized the name 'continuation-based' (<http://www.linux- mag.com/id/7424>; [http://www.bluishcoder.co.nz/2006/05/server-side- javascript....](http://www.bluishcoder.co.nz/2006/05/server-side- javascript.html))

I'd never seen anybody say this is just an early-prototyping technique. But searching found Patrick Collison concur: [http://www.quora.com/Whats-the-best- continuation-based-web-f...](http://www.quora.com/Whats-the-best-continuation- based-web-framework)

It was too harsh to say it paints us into a corner; it is possible to replace fnid links with new defops. I went back and looked at the frontpage when not logged-in, and saw that there are 0 fnid links in that common case. (One possible way to gradually use a second server would be to just serve the frontpage off it. You'd need to move to a centralized store for user/profile/story objects, but the fnids table could continue to live on one server.)

It also turns out that there's at least one company trying to scale continuation-based servers (<http://bc.tech.coop/blog/040404.html>). So it was overly harsh to call it a dead end.

</comment></comment></comment></comment><comment><USER9> Without paying too much attention to the essay's content, the simplest explanation is that Common Lisp, Scheme and Clojure are more compelling.

Lispers are always tempted to blame Lisp's niche status on being too advanced, but it always sounds a bit like a smug non-answer to the job interview classic "what's your biggest weakness?" One friend who likes the syntax plus the existence of reader macros does not prove the syntax is not a big issue.

That said I think his conclusion is pretty sound, though you'd be hard-pressed to find much evidence of Unix-friendliness in C# or Java.

<comment><USER10> Maybe "friendly to a sufficiently powerful runtime" should replace "Unix- friendliness"?

<comment><USER9> That's good. I mean, people complained about using Git in Windows for ages because it was too Unix-friendly. At the same time, almost nobody actually likes SML/NJ, and I think part of that is because it has its own strange build system rather than autoconf/make/cmake etc. and until a few years ago really couldn't produce standalone executables.

</comment></comment></comment><comment><USER11> The real problem is that many of those functional programming features touted by languages like Arc and Lisp have made their way into more mainstream languages like Python, and the types of problems that can better be solved with manipulating S-expressions are dwindling in cardinality.

<comment><USER12> I disagree. Homoiconicity and the metaprogramming it allows you[0] can never be present in a non-Lisp.

[0] _Deterministically_ , I mean - heteroiconic languages do provide for metaprogramming, but it is inherently less robust than metaprogramming in a homoiconic language: [http://lists.warhead.org.uk/pipermail/iwe/2005-July/000130.h...](http://lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html)

<comment><USER13> Smalltalk, Io and (possibly) Perl6 & Rebol are good examples of non-Lisp homoiconic languages which have full & robust metaprogramming.

<comment><USER12> You can have metaprogramming, but it's not the same level by any means.

Take Perl, for example. You can't have robust metaprogramming on a language with an undecidable grammar. Read through the above link and you'll see the difference.

<comment><USER14> If you define "metaprogramming" as "homoiconic code generation" or "hygenic macros" or "the language I use to manipulate the AST is the same language as the AST", sure. I'm sure that's not the only thing people mean when they say "metaprogramming" though.

<comment><USER11> Minor niggle: the word is hygienic.

<comment><USER14> Indeed it is. The one time I don't proofread....

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Languages need momentum to gain foothold. It needs a community of dynamic, experimental, evangelistic pioneers to gather around your language and start building.

When I go to the Arc site [<http://arclanguage.org/>], it seems pretty obvious to me why Arc has not "taken off": A drab HTML 2.0 site with a tiny font describing how it's unfinished, and the only way to install is through another Lisp version, and no indication that there is a community of developers behind it.

It's almost like they don't want anyone to use it. To be fair, it seems Paul Graham does not care about popularity. But not caring about popularity means it's dead in the water.

It's not like lots of people _don't_ want a Lisp these days. Clojure has become very popular, after all; it has been able to hit the sweet spot in terms of modernity and lispiness; good, practical technology with a solid community.

</comment><comment><USER16> I really think the biggest problem that new languages have is contending with the colossal hegemony of three stacks: C, Java, and Javascript.

There are a few exceptions, but for the most part, your language is going to be successful to the degree that it can interoperate with these environments. Common Lisp, Racket, Haskell, OCaml -- all of these languages have ffis, but they're "begrudging" ffis. They don't _really_ care about your "legacy" systems or the titanic number of C and Java libraries that already exist.

Clojure and Scala _do_ care about that, as does Lua. And Ruby and Python (and Perl) care as well.

I see beautiful new languages every day. I can tell whether they're going to live or die primarily on the basis of their attitude toward the dominant library environments in modern programming.

<comment><USER17> And Clojure can target and interoperate with at least two of those stacks: Java (standard Clojure), Javascript (ClojureScript). And there is experimental support for C/C++ (clojurec, Ferret, etc). Not to mention in progress support for targeting CLR/C# (ClojureCLR) and python (clojure-py).

<comment><USER16> Right. Clojure isn't the first Lisp for the JVM, but it's definitely the first one to care so deeply about other languages and existing libraries.

If you ask about C interop or creating standalone binaries on a Common Lisp board, you'll get an answer (because you _can_ do this). But you'll also get this whole, "Oh, but why would you want to infect our beautiful language/runtime with the fallen world of imperative code, UNIX conventions, etc. Free your mind!"

That. That right there. That's the problem.

</comment></comment></comment><comment><USER18> Well , there's a few things.

Not all "hackers" are language geeks, plenty of smart people will not necessarily invest their time in learning new exotic programming languages as language learning for the sake of it is not interesting for everyone.

Other considerations for language choice will certainly include documentation and the accessibility of that documentation. Looking up a few pieces of code to do familiar tasks is much easier than reading a grand language design document as a way to get a feel for a language.

Having usage in some large commercial setting is also a consideration. For example knowing that Google uses python extensively can give one some confidence that python is unlikely to suddenly die out one day because Google wouldn't let that happen.

</comment><comment><USER19> Totally off topic, but if the author of the post is reading this, please reconsider the fonts you've used on your blog. It's quite difficult to read as it. Compare and contrast your current design with this <http://www.readability.com/articles/4xlr1wov>.

<comment><USER20> While I didn't think much of the article, I found the font to be attractive and easy to read.

<comment> mark-r I wonder if you were seeing the first choice "Mrs Eaves" or the backup Georgia? Or perhaps you're on a high resolution display? The combination of font and size does seem a bit extreme to me.

<comment><USER20> I'm seeing "Mrs Eaves". And I'm on a Thinkpad T60, so definitely not high resolution. Of course I increased the font size from the site's default, but I usually do that, so that I don't need to use the reading glasses that I need to use to read books (ah, to be young again!).

</comment></comment></comment></comment><comment><USER21> I think that when you design a language you can take the low road or the high road. The low road is to design your language to explicitly interop with an existing language/platform so that you can hijack its libraries.

C++ took the low road by co-opting C. Scala and Clojure took the low road in co-opting Java. Languages like Arc, Smalltalk, Haskell and Eiffel took the high road and as a result they don't have as many users.

Having said that, I don't want to imply that language designers are doing a bad thing when they take the "low road." They get adopters and they bring powerful tools into the world. It's just that when they do that they have to sacrifice coherence a bit.

<comment><USER22> If you didn't want to imply something bad by your analogy, you should have chosen a different one. The analogy of the High Road and the Low Road has implicit that the High Road is the good path and the Low Road is the bad.

</comment></comment><comment><USER23> I find it strange to read an essay on the (un)popularity of Lisp which does not mention Clojure.

<comment><USER17> The essay isn't actually that recent.

</comment></comment><comment><USER24> Agree with the conclusion, but some of the reasoning is unsound. This statement is patently untrue: "This doesn't mean you can attract smart hackers to your language just by running an advertising campaign though. Sun tried that with Java, but a: their marketing was too explicit, and it just seemed like one company trying to push its own technology, and b: Java itself is a detestable language. So, in addition, it seems like language quality is not something you can make up for in marketing."

It implies that Java failed in the marketplace. It did not. It has taken and kept huge market share. Sadly, it is the language most employers are hiring for. I would rather poke myself in the eye with a pencil than program in Java, but it has most certainly succeeded in the enterprise.

</comment><comment><USER25> It hasn't taken off because it has not been marketed. Languages are products which need to be marketed like everything else. If PG wanted it to take off, then he could market it without much problem. But he has better things to do.

<comment><USER26> arc would not take off even if it were more-aggressively marketed, IMHO. it has too few differentiating features compared to other lisp dialects. 'I made a LISP' is not enough, even if it is a nice elegant one.

<comment><USER25> You are right. Though _Javascript_ with its weirdness took off...

</comment></comment></comment><comment><USER27> Altho in reality it probably has no bearing, but most people's casual exposure to Arc is the HN website - which at the best of times is slow. So the mindshare being developed here is "arcane AND slow" - not a great advert.

</comment><comment><USER28> I think (and this is total subjective speculation) one of the problems is that Arc is so beautiful in its simplicity that the sort of people attracted to it think "man that looks like fun to implement, I think I will work on a lua/js/python/jvm port! then it will REALLY take off" instead of building things (apps, tools, libraries) WITH it.

</comment><comment><USER29> Hands up if you saw the headline and thought about Objective-C Automatic Reference Counting...

<comment><USER30> ARC vs. Arc. (Which is why it should be Lua and not LUA)

</comment></comment><comment> johnx123-up FWIW, the modified title "Why Arc hasn't taken off" was more informative than the original.

</comment><comment><USER31> Are we in some king of Lisp day or something? Hahaha

</comment><comment><USER32> Arc is beautiful, but Paul Graham was wrong about one thing. For language adoption-- at least circa 2013 (which he couldn't have foreseen)-- libraries _do_ matter. This is to Clojure's advantage and Arc's detriment. A typical IT boss is not going to let you spend 6 months writing libraries, so a lack of libraries is a problem. The people who pick languages in all but the most daring startups tend to see "lack of libraries" as more of a problem than it actually is.

Paul Graham was building a web company in the mid-1990s, so rewriting a bunch of libraries was not an impediment. First, they had top-notch programmers who were willing to work with FFIs, write tools they were used to in other languages, and understand technology deeply enough to write good libraries. Second, the state-of-the-art for libraries in the 1990s was, if nothing else, less Big. Third, they didn't need to sell their language choice to a boss; they just needed to sell the product to the market and investors, neither of which cares what language you use as long as it works.

Arc is prettier than Clojure but, in my experience, Clojure is more than attractive enough... and it has the familiar JVM libraries.

<comment><USER33> A big reason why PHP was as successful as it was is that it came with a fairly complete and correct standard library for writing webapps.

This way you could spend zero time writing your own urlencode function (and screw up a corner case) or searching through maven to find functions to do very simple things and finding later other people on your team imported similar functions from four other projects.

<comment> guard-of-terra "with a fairly complete and correct library for writing webapps"

Some of which were dangerous and unwieldy actually. Then proven dangerous and unwieldy. And then most of things that made idiomatic PHP were removed from the language or discouraged and nobody writes that way anymore.

<comment><USER34> Suggesting that, at least for language adoption, a standard library that is "good enough" is sufficient, and can be fixed later.

<comment><USER35> This probably depends on the environment (including alternatives) at the time.

</comment></comment></comment></comment></comment><comment><USER36> I don't believe the explanation in the article.

Lisp variants can be seen as a scripting language equivalent -- with efficient compilation. It was (and still is, to a large degree) an obvious win compared to Perl/Ruby/etc.

Academic stigma and/or culture clash with scripting users is what I'd guess. Or maybe it just is lack of hype?

But I don't expect to see an explanation. It is a larger mystery than dark energy to at least me -- why didn't lisp take over the world 10-15 years ago when the scripting languages started going?!

Edit: pjmlp, I talked about the last 10-15 years and compared with scripting languages, so hardware/AI winter/IDE are earlier/later problems. (Today, a lack of libraries might be the worst problem, except for Clojure(?).)

<comment><USER37> \- Parenthesis

\- Lack of a proper IDE

\- The AI Winter

\- Mainstream hardware wasn't powerful enough

\- Most blue collar developers don't understand FP concepts

Just some possible reasons out of my head.

<comment><USER38> Interesting. I didn't realise that I'm a 'blue collar' developer. What do I need to do to upgrade to white collar?

<comment><USER39> Your parent implies that not getting functional programming concepts makes one a "blue collar" (i.e., less sophisticated, more commodity) programmer. Presumably, understanding functional programming is one necessary requirement of upgrading to "white collar" (i.e., more sophisticated, less replaceable) programmer.</comment></comment></comment></comment>


Ask HN: What is best way to sell a 9 month old Macbook Pro? - <AUTHOR>

<comment><USER2> Facebook as a status update, chances are you have a friend who wants one

</comment><comment><USER3> Craigslist.

</comment><comment><USER4> Sell it cheap.</comment>


Interesting job descriptions - <AUTHOR> https://docs.google.com/document/d/1XB4TXbgdiaMreb8LNBRh-uT47WFq4C_pu388DVVvnSQ <comment><AUTHOR> This is still work-in-progress, and will be maintained as a living document forever. Your contributions are most welcome.</comment>


Ask HN: Why are comments disabled for YC job posts? - <AUTHOR> Not judging--just genuinely curious.  YC has a lot of interesting companies and those posts seem like a great opportunity for potentially interested folks to ask questions directly to the founders before deciding whether they want to move forward with the whole resume dog and pony show.<p>Is it because they can devolve with a ton of negative responses? <comment><USER2> Correct.</comment>


Research Tools class - <AUTHOR> http://vislab-ccom.unh.edu/~schwehr/Classes/2011/esci895-researchtools/ <comment><USER2> This looks like an excellent class, and fills a _very_ important educational niche. We taught something vaguely similar a couple of years ago geared towards molecular biologists and clinical researchers, and it turned out to be extremely popular. Most of our students had less than zero programming experience, and pretty much all of them were able to put what they learned to practical use. The point of the class was teach them just enough, about enough different things, to get a feel for what sorts of problems could be easily tackled programmatically.

For example, one student realized part-way through the class that she could write a script to automatically process the lengthy and complex output of a particular laboratory instrument instead of doing it by hand, and by the end of the class was able to not only write that script but modify and extend it to deal with a slightly different model of the same instrument. Other students figured out that Python was easier to use than SAS for some types of data reformatting and analysis. Nothing fancy, just the sort of day-to-day hacking that we all take completely for granted- but it's incredibly useful for working scientists to be able to do that sort of thing for themselves, and courses like this one give them a real leg up.

It looks like the UNH course had some really great content- seriously, check it out or send a link to your scientist buddies.

</comment><comment><USER3> Cool! I love how universities are acknowledging that there is a fast-growing "long-tail" of programmers who are scientists and data analysts, and that they need different sorts of programming training than CS majors ...

Reminds me of Greg Wilson's <http://software-carpentry.org/>

</comment><comment><USER4> I'm a student at MIT, and we would never see a course like this in the course catalog. I still haven't decided whether this is a good or bad thing, but I believe we need to find a middle ground: Do we take a theoretical approach or an implementation approach?

I've been unimpressed by MIT's ability to teach "coding." In fact, no classes actually teach you the art; you find out by experimentation in problem sets. However, as a result, you adopt a lot of bad habits that will make you less marketable to any company; you're code probably sucks.

I know this is a bit off-topic, but I applaud UNH for teaching such a class. It is important to teach the "tools" and the "technology" rather than the theory; at least to the point so you know what applications are out there to help.

<comment><USER5> 1.00, 6.00, IAP Matlab, IAP Python, I'm sure there are more, but those were just the options I considered when I was starting out (I went with 6.00).

Sure the catalog is very coding light, but they assume you can figure it out on your own if you need it or can apply what you've been taught in 6.00/1.00 to many scenarios and learn from that basis.

These classes are not required in EECS, but required for the other engineering majors (you can, of course, substitute 6.01 if you are ambitious).

<comment><USER4> "...but they assume you can figure it out on your own if you need it or can apply what you've been taught in 6.00/1.00 to many scenarios and learn from that basis."

But that is the problem. Most/all MIT students teach themselves how to code, but that doesn't mean their code is clean and legible. Many times, the code quality is very bad because they develop bad habits in the process of teaching themselves. MIT needs an actual course about coding.... maybe a required HASS about how it should be considered an artwork.

</comment></comment></comment><comment><USER6> This is pretty cool. As a mathematician, I feel like they should get to R instead of, say, how to use IRC or emacs, but I'm sure that's just my bias.

When I was an undergrad, every 3rd year student had to take a class that involved write a 20-page position paper. Those of us in the hard sciences were required publish in LaTeX, which drove the English professors running the class crazy. It was good practice, though.

The closest our school came to anything like this was informal seminars the math department would run, with seniors and grad students tutoring sophomores on how to use R, MATLAB, LaTeX, and similar.

We even did ALP for the actuaries among us. I love the language, but trying to teach it is another story.

</comment><comment><USER7> This looks like a very cool class. I did a masters in ecology, and I got an R-based stats class that was not enough stats to get me up to speed on stats or enough coding/R for me to do much of anything. There was a lot of cursing and naming things 'fuckihatemylife'.

Maybe I'll try and revisit this on my own. I run into so many situations where I KNOW there has to be an easier and less-human-error-prone way to have a computer do data manipulation for me, but I don't know enough to actually put it together.

</comment><comment><USER8> I went to UNH for my undergraduate program followed by MIT for my masters and I totally agree that the middle ground between the theoretical approach and the implementation approach is the goal, however, I believe that BOTH need to be taught for the full experience.

As a working man now, I feel that the implementation approach is more beneficial for getting a job done, but as an entrepreneur I can say that the theory is what really gets you steps ahead of your competition.</comment>