How do you learn? - <AUTHOR> After reading a codinghorror article I came across this in a comment:
Good programmers also figure out their best method of self-learning. I'm one of the oddballs that reads the entire manual.
That struck me as interesting.  I know I learn in what's probably quite an unusual way.  I'd be interested to know how other people here learn.
I teach myself new stuff in a very exploratory way.  For each of the new languages I've learned since starting at justin.tv I've spent probably five or ten minutes learning the syntax.  Then I jump in and start writing a real program that needs to be released within a week or so.  I usually start by writing a "hello world" program, and just add stuff to that until it does what I want (of course, as I learn new tricks I frequently remove a bunch of stuff).  If the language has a REPL I use it constantly.  If not, I fake it by just printing expressions in my program, and working in a tight loop of editing and running the program again and again to see how the output changes.
I rarely use a reference at this stage unless it's to achieve something concrete.  For example, I find myself googling things like "actionscript string search", but only after trying a couple of likely-seeming things myself (i.e. I'll actually just write things like trace("foobar".find("bar")) and trace("foobar".index("bar")), etc until the compiler stops whining or I run out of things to try).
Funnily enough, after I've written a real program that works, and I feel like I understand the language a bit, then I go back and read the reference books thoroughly.  It doesn't work the other way for me - I need to have had the exploratory phase and built up some context so that I can read the books properly (and it's fun to read the books at that point and remember how I "discovered" each feature that's discussed). <comment><USER2> I was trying to learn Salsa dancing by watching videos on the train. That really didn't work and in fact was counter-productive. Weekly lessons here and there helped but I really didn't start climbing up the pretty-steep Salsa learning curve until I started messing up on the dance floor dancing with random women. You can't simulate experience and the hardest thing was getting started (and continuing). I think you learn by taking on new experiences (if you do the same thing at work every day, you're bored and not learning).

Programming is similar. We make mistakes and brute-force our way through. We start to recognize patterns. That's experience. It's a lot easier however (even though it's all in the head) to do fail in something if it's only you and the compiler/runtime (who cares if it doesn't work right away, you know it will) - when other people are involved, it's a lot harder (fear of what people think)

<comment><USER3> > Weekly lessons here and there helped but I really didn't start climbing up > the pretty-steep Salsa learning curve until I started messing up on the > dance floor dancing with random women.

I wonder if the adrenaline and stress makes a big difference. For example, I've been trying to improve my German for roughly forever, trying assorted books and CDs and such, but the best results have come from going to a weekly class.

Even without (much) studying I learn all sorts of things, and I think it's because I'm put on the spot to read things, conjugated verbs, make up sentences, and so on.

All of the real-time pressure (though, really, it's fun overall) seems to make a big impression on my brain.

Now I need to try speaking German to random women. :)

<comment><USER4> A friend once said it to me best

desire > ability

There's obviously no better way to learn then to immerse yourself in the culture, but you'd be surprised how many friends come back from a year abroad and have minimal gains.

to learn a language, try every time you meet someone in German, or even using online dictionary, spend 30 minutes talking/ asking questions/ writing down how to say that.

review it every day for at least an hour

learning a language takes a ton of diligence, and I've found that I often forgot what I learned if I didn't repeat it every single day for a good bit of time

soon, your mind will begin to think in the language ( a scary thought for me, a mono-lingual speaker at birth)

<comment><USER5> In my experience (and my teacher's), vocabulary is the biggest obstacle to understanding and being understood. I'm learning Turkish now, and I'm trying to do 40 words/day. It turns out, in the languages I know, you can usually follow

Subject + verb infinitive + object

and people will understand. Of course, grammar is important, but I hate it when I have to say "he is very good" instead of "he is quite good" because I don't know the right word.

I've heard that you need 3000 words to be reasonably comfortable in a language. With 40 words/day, that's still 3 months, which should be enough to pick up grammar if you actually talk to people and study a bit on the side.

</comment></comment></comment></comment><comment><USER6> I agree (Probably because I grew up with abstractbill hacking on the same home computers ;) ).

Tip the lego out and play around with the interesting gears and see what you can do. Throw away the manuals that tell you how to build exactly the same car that everyone else is building - obviously skim through them, or look at them every now and then to see how things can fit together. Sure find out from somewhere how a differential gearbox works, then play around trying to build one.

I like to have _the_ manual for reference - 'The definitive javascript', or the ARM7 manuals or whatever reference is needed, and sometimes dip into those in the bath or before bed. But 'learn the language' books don't seem to make much sense to me.

Exploring is so much more fun than "designing using approved methodologies like everyone else is, using the same framework/libraries as everyone else is". IMHO you're likely to end up with a far better result as well.

I just don't understand people who don't have that tight feedback loop. People who write a program from scratch in one or two hits, then execute it. That's like recording yourself playing a piano concerto with earplugs in, then listening back to see if it sounded ok. Better to have the feedback earlier so you can adjust.

<comment><AUTHOR> Your analogies are improving - these ones are _much_ better than the one about a car with a wooden chassis ;-)

<comment><USER7> Be nice.

<comment><AUTHOR> I'm his brother - it's my job to take the piss ;-)

I was serious though actually - these analogies do ring true for me.

<comment><USER8> > I'm his brother

He ain't heavy? ;-)

</comment></comment></comment></comment></comment><comment><USER9> I learn by modifying.

I think just about every language I have mastered has been because I started learning it by hacking on someone else's code. (mastered = know well enough to implement projects from scratch with ease) I would say I 'know' probably a dozen or more languages enough to read/write useful code, but have only mastered maybe five... and all of those because I spent a lot of time dealing with existing code, so I learned by toying with it. Sadly if I don't use something for quite a while (like Scheme, which I used to live and breathe, but haven't used in probably three years), I become pretty rusty with it, but I suspect this is normal.

My current languages of choice are probably Ruby, JS, and Arc (for the fun factor). I actually learned ruby because I didn't like Rails, and tried for a while to write my own framework, before discovering Merb and tinkering with it instead. JS always scared me for some reason, but I finally picked it up because I wanted to use jQuery and ended up tracking down bugs in their UI stuff. Arc I am learning currently, just by playing with stuff submitted by others.

So in short, I learn by modifying other code, and eventually get comfortable enough that I can just write from scratch. I actually like the book examples, because they put the finished code online. I don't even bother reading the chapter where they explain the code... I just load it up and start tinkering and learn from that.

<comment><USER10> Leveraging existing code is an undervalued skill. It gives satisfaction when you're learning. It also gives immediate benefit to the programmer and other users.

"Hello world" is great for set-up of your development environment, but after learning a few basic structures, you'd get great benefit from just wading into an open source project. Should you learn more theory before you get overwhelmed by the size of a codebase? No. Nowadays, many paid programmers are unaware of recursion and quicksorts but it doesn't stop them earning very good salaries.

<comment><USER9> As far as learning languages go, I agree, knowing how to write a quicksort doesn't help you learn Language X. When people talk about learning languages, I assume they mean learning the syntax/idioms. For that, it makes sense to look at a lot of existing code (to me at least).

When it comes to actually implementing something substantial (once you are past the tinkering and learning stage), I find it sad that so many programmers can actually get away with _not_ knowing basic things like recursion and how a quicksort works (and I have worked with quite a few like this in the past).

I had a guy argue with me that his sort (which was basically a selection sort), was faster than the quicksort/mergesort I was suggesting because "it is fewer lines of code and therefore fewer machine operations". Apparently to him, being able to read and understand it faster meant the computer would likewise do less work. Sadly, he was my boss, and I knew then I should be moving on.

Most languages today will do mundane things like sorting for you, but I still argue that knowing why Tail Recursion is the preferred way to recurse and how nesting loops can get out of control are vital to do anything useful. I would rather interviews ask theoretical questions like this instead of silly "can you regurgitate the syntax to do Y in Language X?" questions.

</comment></comment></comment><comment><USER11> Like many other people here I learn in an evolutionary manner. I dive in, get something working, reflect, notice pattern(s), try and get more working, recurse. However, I tend to like to seed my evolutionary exploring with some canonical knowledge first.

For example: When I was learning Perl, I first read about "make repetitive tasks easy", "good text processing", and then got hacking. When I was learning Lisp I read about macros, recursion, list-processing, and then got hacking.

</comment><comment><USER12> I was a PHP developer for six years. I also learned by writing "real world" applications, except I almost always kept my browser open using the manual as a reference.

Then I found Python and Django. Now I just kinda type... 7/10 times I'll get it right, which is a great feeling! I also read a lot, and often find little gems in books that I wouldn't have picked up as quickly by tinkering.

</comment><comment><USER13> This is almost exactly the way I learn. After years of doing it the "traditional" way (ex. reading an entire book on a language), I realized that I was mostly wasting my time. The only way to really learn is to try to solve a real problem that you will benefit from directly. Book exercises are boring and will ruin your motivation.

I think the idea of staying in a tight edit/test loop is good too. I tend to make lots of typographical/syntax errors that can be a nightmare to debug if you're having to scan many lines of newly written code. If you're only writing a few lines at a time and then testing, finding errors is much faster.

<comment><USER14> _Book exercises are boring and will ruin your motivation._

I would agree with you about 95% of the computer books on the market. But, if you find the shortest and least pedantic books, they can be really helpful.

Greenspun had a fun rant about how book publishers insist on producing gigantic doorstopper books in the style of _Learn Blub in 21 Days_ \-- 850 pages, only about 150 of which are actually useful, and the rest of which consist of tedious examples and filler material and stdlib documentation which you'd much rather just look up online when you actually need it. He argued that, e.g., Cooper's _About Face_ was a good 125-page book trapped in the body of a 600-page book.

Of course, I've already admitted on this thread that I haven't really read K&R, so I can't speak from experience, but I've heard it said that K&R is the essence of a great language book: it's _short_. It doesn't feel the need to seem heavy in order to seem important.

<comment><USER10> > _Learn Blub in 21 Days_

I find these books really objectionable. They propagate bad practice and minimal understanding. Furthermore, the type of people who need to _Learn Blub in 21 Days_ are in headless chicken mode - they've got less than 21 days and they don't RTFM.

Another objection is the cookie-cutter approach to the teaching which may work for some but frustrates if you want to understand underlaying rules. If I had 21 days to learn French, then I'd start with the grammar. This phrase-book approach to programming gives you 20% of the benefit after exerting 80% of the effort. The 80-20 rule is suppused to work the other way. You're supposed to get 80% of the benefit from 20% of the effort.

> K&R

I read some of the first edition of K&R and I found it enlightening because they'd written it for the benefit of other C compiler writers. Furthermore, the first edition is a snapshot during development and they're quite candid about unfinished features. It also gives tips on programming style. Ignore these tips and you'll discover the cost later.

</comment></comment></comment><comment><USER14> My style is different, of course. :) I tend to learn new things by reading, or at least skimming, the best book I can find, first. I like having an overall perspective on the scene before getting into the weeds.

For Scheme, I read SICP, of course. For Java and C++, Bruce Eckel. For Ruby, _Why followed by the Pickaxe. For Emacs, I read _Learning Emacs_ , a very good book. I even learned Perl from a book, although not the Camel book, which is torture to read -- I used Randal Schwartz's _Learning Perl_ , which was very good. I learned CSS by reading Eric Meyer's O'Reilly book, pretty much cover to cover, as well as Dan Cederholm's book. I learned SQL (and Tcl as well) from Greenspun's books (e.g. _SQL for Web Nerds_ ) which weren't really dedicated and pedantic SQL tutorials but were, in a way, much more useful.

Of course, I'm the guy who got bored with BASIC as a kid and decided to teach himself Pascal. So I read a few books on Pascal. Unfortunately, we didn't own a computer at the time, and the library didn't have a Pascal compiler, so I didn't get to compile a Pascal program until two years later. So maybe I just got into that habit early and never really lost it.

Of course, you can't actually learn a language from a book. You have to practice a lot to get the syntax and the semantics and the idioms into your fingers. So it's just a question of whether you do the reading first, or second.

There are quite a few exceptions to my usual rule. I know a bunch of C, but I never read a really _good_ C programming book. Of course, that means I get to look _forward_ to K&R, which is nice. :) I probably learned as much Perl from randomly hacking as I did from _Learning Perl_. I still haven't gotten far through _Mastering Regular Expressions_ , though I've used them for years. I have yet to find a really great book on PHP (to everyone's astonishment, I'm sure) -- the O'Reilly book is okay, but I keep getting bored. And for some reason I cannot make myself read any docs for jQuery. It's so _sensible_ that I can't concentrate on the docs; it feels like a language that I already know!

Technology is changing things. I normally hate learning from lectures -- talking is just too slow, and you can't skim it -- so I was surprised to discover that podcasts and screencasts about programming are actually quite useful. There are aspects to being a good programmer that are best learned by watching over someone's shoulder, or listening to them ramble on about their most-favored and least-favored tools. And then, you know, there are blogs and news.yc.

<comment><USER15> I love screencasts/videos to help "get" a new tool. Examples:

Ruby on Rails screencasts: <http://www.rubyonrails.org/screencasts>

SLIME movie: www.cl-user.net/asp/web-sites/slime-video

Peepcode - <http://peepcode.com/> (RoR topics)

The SICP movies (very long, ~30 hrs total) take forever but they are so rich there's not much temptation to skim. [http://swiss.csail.mit.edu/classes/6.001/abelson-sussman- lec...](http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/)

</comment></comment><comment><USER16> I learn by doing, like abstractbill does.

One thing I've come to understand: you only learn when you are asking questions. Reading a book doesn't put you in the frame of mind where you're asking questions. You are being spoon-fed information, sometimes before you know why you need it. The information might be useful or vital, but if you don't know you need it or why you need it then it won't stick.

</comment><comment><USER17> Yeah learning by doing is good and prolly I'm guessing the most common way people begin with programming.

Teachers can present angles you don't think of yourself though, so sometimes its important to get other opinions whether it be from other programmers or whatever. I know that even after programming a ton I learned a lot from a simple intro to compsci class.

</comment><comment><USER18> I too find that the best way for me to really learn a programming language is to use it, though I do begin by reading documentation.

First, this familiarizes me with the language constructs, what is and what isn't available, and I can build up a "mental diff" of how this new language is or is not like other languages I already know.

Perhaps more importantly, it also gives me a clue as to if I should bother spending my time to really learn the language well. For example, I've tinkered with Ruby, and read some Ruby documentation. It appears to be a fine language, but I don't see it offering me anything that I find lacking from Python or Lisp. So I've never taken the time to become expert with Ruby.

</comment><comment><USER19> Hah!

You make it sound so familiar with I'm passing through. I love Flex and it's potentials!

</comment><comment><USER20> I'd love to be someone who could sit in a state of trance and consume 500 pages of boring reference manual and immediately put all of that into action. But I'm not.

I have to have something practical, something that I want to use either personally or at work. And at first it has to be pretty simple. If there is no low-hanging fruit to explore I'll probably get bored and move on (i.e., fail).

I like to learn about the right way to do things in my given environment and am terribly afraid of people with more experience than me seeing my code and mocking it.

</comment><comment><USER21> My experience has been that learning new programming languages from the manual is not very effective. I like to read the overview (theory, executive summary, what's different), but after that I just want to code something.

Whenever I have trouble figuring out how to do something, THEN I refer to the documentation.

Maybe I do it this way because I have never met a language that didn't have 10 times as much stuff as I needed.

</comment><comment><USER22> I learn by reading the FAQ, leaping into the deep end with some stupid project, and then repeatedly harassing people who are smarter than I am.

</comment><comment><USER23> I used to be a "read the reference manual in full first" guy, but I was cured of that when I tried to read the whole manual for GNUS.

Also, when you use a "obscure" language like lisp the documentation is often subpar/incomplete/obsolete/lying/whatever so sometimes the best it can bestow is a false sense of knowledge (which fortunately is somewhat useful to get started).

<comment><USER18> You find Lisp documentation subpar/incomplete/obsolete/lying? Maybe for a given implementation of Lisp, but for the languages themselves, I have found Lisp documentation to be some of the best written that I've seen...

<comment><USER23> I knew I should have specified I was talking about some of the librairies, not the language itself. :|

<comment><USER18> Ah, well, carry on, then, carry on. :-)

</comment></comment></comment></comment><comment><USER24> I jump right into coding, although I don't like shells too much. I like Googling for tutorials and using language APIs. That's probably why I like Ruby and PHP being they are compiled at runtime. Been getting into frameworks lately. I like it when someone else has done the heavy lifting.

</comment><comment><USER25> I believe that the best way to learn is from de oficial/owners documentation or reference; and reading a lot.

Nobody can teach or no mechanism is a good thing if you are not willing to learn and likes it .

So... what is the best book to learn python? :D

<comment><USER26> That's easy: Learning Python 3rd Ed. by Mark Lutz.

<comment><USER25> nope, www.diveintopython.org

<comment><USER27> nope, learning Python is much better. It is a really good book that teaches you even what's going behind the scenes in python. Diveintopyhon is good if you have no patience, but you probably will miss a lot things that "learning python" explains, especially if you are new into scripting languages (I came from Java, and some php experience).

Take a week and a half of time, two hours a day, and read it. Meanwhile make sure you practice some in your own, and then start a small real project, so you can actually start imprinting what you learnt.

</comment></comment></comment></comment><comment><USER28> Trial and error. I'm a tinkerer. I learn just enough to get me going, and then I tinker with everything until the rest comes. Seems more efficient, but sometimes I miss out on some fringe things.

</comment><comment><USER29> " Sell all the old books, invest in new books ", " Sell all the old books, invest in new books ", " Sell all the old books, invest in new books " >> chant

</comment><comment><USER30> I'll go out on a limb and suggest that reading something in order to learn it will always fail: you're trying to understand something exactly the way someone else does, and that's impossible.

Also, learning is like birth and death: there might be other people in the room, but you do it alone. Learning is an experience, not the result of reading something. You can understand what you read, but understanding an idea != learning.

<comment><USER31> Related to what you're saying, I think, is what's on the back of _The Little Lisper_ regarding its question-and-answer presentation versus the expositional presentation of normal textbooks:

 _Reading a conventional textbook with expositions followed by problems may keep the reader a passive follower of the displayed line of reasoning._

What is wrong about passive reading?

 _It is not always wrong, of course. It can be quite relaxing, but passive reading does not invite the reader to think over the twists of reasoning he may be inclined to. This reflection is necessary in order to doff the wrong twists and to fully appreciate the line of reasoning of the authors._

</comment></comment><comment><USER7> In a general sense, all people learn in the same way, and would do well to remember this.

In particular, learning -- creating knowledge -- consists of creating something complex (an idea in your own head) that didn't already exist.

How complexity could come about is a famous question. The original answer was via a designer, but that begs the question, because either the designer already contained the complexity in question, or had to create it (somehow).

But now we have a better answer: evolution. And that is how people learn.

Evolution consists of imperfect replication and selection. In thinking terms, what you have to do is think of lots of ideas, subject them to criticism, and then think of (hopefully improved) variants of the surviving ideas, then more criticism, repeat, etc

This is important to know because being open to criticism is more important than people realize. It's generally considered a good character trait, but it is in fact absolutely fundamental to learning anything.

<comment><USER32> > learning -- creating knowledge -- consists of creating something complex (an > idea in your own head) that didn't already exist

This reminds me of The Programmer's Stone: <http://www.reciprocality.org/Reciprocality/r0/> which talks about "mapping" and "packing" as two different ways people learn. The authors found it easy to teach programming to those that tended toward mapping--building a mental map of a subject rather than accumulating facts about it.

<comment><USER7> kind of interesting. but i don't think the main point that people think in one of two different ways, is correct. one reason is it's very hard to find a person who thinks well in most areas. partial mappers are much more common than consistent mappers.

<comment><USER32> It's probably more useful to think of mapping/packing as skills rather than types of people. But then you can't claim that all those evil packers are oppressing you.

<comment><USER7> That's OK, I didn't want to be a victim anyway :)</comment></comment></comment></comment></comment>


The Best Textbooks on Every Subject - <AUTHOR> http://lesswrong.com/lw/3gu/the_best_textbooks_on_every_subject/ <comment><USER2> Before everyone starts posting their Amazon affiliate links, look at the requirements that makes the LessWrong thread so valuable:

      2.  You must have read at least two other textbooks on
          that same subject.
      3.  You must briefly name the other books you've read on
          the subject and explain why you think your chosen
          textbook is superior to them.

      Rules #2 and #3 are to protect against recommending a bad
      book that only seems impressive because it's the only
      book you've read on the subject.

</comment><comment><USER3> I'm too sleepy to figure out how to comment tere. So you guys get this.

The best text on learning how to draw is a copy of Preston Blair's book(s) on drawing for animation. However that's only half the equation, because it lacks exercises. So you need to go to [http://johnkcurriculum.blogspot.com/2009/12/preston-blair- le...](http://johnkcurriculum.blogspot.com/2009/12/preston-blair-lessons- fundamentals-of.html) and do what he tells you to. They will seem stupid at first. But trust John; a significant percentage of the talent in the Hollywood tv animation scene learnt their craft under his harsh tutelage.

Other textbooks on drawing I've read: Drawing on the Right Side of the Brain, Figure Drawing for All It's Worth, The Vilppu Drawing Manual, The Animator's Workbook.

The combination of Preston Blair (long considered THE classic text on drawing for animation) and John K's exercises will VERY RAPIDLY teach you how to look at things,mbreak them down into simple shapes, and draw them convincingly. Other texts teach this but few start with the super-solid, super-simple cartoon art found in 1940s cartoons; you're immediately thrown into trying to break down a human body, or a car, or whatever, into shapes you don't understand yet. The simple characters wear their construction on their sleeves, so it's easy for you to understand it and learn.

<comment><USER4> I think we're hitting into a possible issue with these book recommendations.

Recommendations on learning/understanding something logically, and recommending a book based on how to learn how to do something can be very different.

I've read all of these art books (except Vilppu's), and I DON'T think the best text on how to learn how to draw is a copy of Preston Blair's books.

For me personally, I got the most advancement through Loomis' Figure Drawing For What It's Worth. I spent a lot time going over diagrams in the book. It transformed the way I approached drawing Other people, (especially people who get into art with no prior experience) swear by Drawing on the Right Side of the Brain.

In this case, a lot of what you think the best text would be depends on which way you prefer to draw. I like figure drawing mostly, so I learn towards Loomis and Hogarth. Someone who likes general life/possibly painting would prefer Drawing on the Right Side of the Brain. Someone who prefers animation, would definitely love Preston Blair's books (and possibly Fun with a Pencil).

I think not only a good book recommendation is useful, but a good useful explanation needs to go hand in hand with it.

<comment><USER3> Note the important caveat to my recommendation of the Blair: it is the best text on drawing IF YOU USE JOHN K'S EXERCISES. By itself it is a good book on cartooning; with the addition of John's exercises it becomes an awesome power tool for building skill.

(And honestly the real value here is John's exercises; you can get almost as much value out of them by freeze-framing great cartoons and drawing off of them. In fact I know for a while he was trying to package his course into a book, copiously illustrated with examples from the classic cartoons to work from, but ran into rights issues.)

Loomis is awesome too, I learnt a hell of a lot from him. I also learnt a lot from Bridgman's "Constructive Anatomy". But I feel the simple starting point of John's exercises for the Blair book really make it a great place to begin, and work up from.

(Of course I may be biased, as as I'm a cartoonist who's passed through Spümcø.)

</comment></comment></comment><comment><USER5> I've always found a good way to pick text books and other reading material for a specific course is to find the university with the leading department for that subject, then find the syllabus for a class in that course taught there. My experience has been that it's rare to find a top university where you can't find syllabi (if not full course sites with powerpoints and assignments) online with some Google sleuthing.

Back in college, there were a few courses where my own professor's lectures were difficult to follow. I almost always was able to find additional material and often full PowerPoint decks from equivalent courses at other universities to help out.

<comment><USER6> "I've always found a good way to pick text books and other reading material for a specific course is to find the university with the leading department for that subject, then find the syllabus for a class in that course taught there."

This is a great way to find good texts. A wrinkle I add is to check the prerequisites for a course and repeat the process for each prerequisite till you have an ordered list of texts. Working through a text is _much_ easier if you have _nailed_ the pre requisites.

<comment><USER7> I used to do this too, ordering a big box of books from syllabus of prestigious universities at a level that was often way beyond me.

I usually flipped through them, and picked up a few things, but in the end I realized I had to really understand linear algebra, or number theory, or whatever, to really grok what was going on.

Now _I_ knew I needed these prerequisites and why, not that someone just told me so. This motivated me a lot more to get through (or nail) the prerequisites.

</comment></comment></comment><comment><USER8> Subject: Linear Algebra Recommendation: Introduction to Linear Algebra by Gilbert Strang Reason: Strang presents the subject so clearly and intuitively that you feel like an expert on the subject after reading each chapter. It is by the far the best textbook I have encountered. He is also an excellent teacher and offers the lecture notes to the corresponding MIT class online.

Book: [http://www.amazon.com/Introduction-Linear-Algebra-Fourth- Edi...](http://www.amazon.com/Introduction-Linear-Algebra-Fourth- Edition/dp/0980232716/ref=sr_1_1?ie=UTF8&qid=1332655225&sr=8-1)

Lecture: [http://ocw.mit.edu/courses/mathematics/18-06-linear- algebra-...](http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra- spring-2010/)

<comment><USER9> Strang's hand-wavy teaching style in my opinion kinda falls apart towards the later part of the course. I feel like the whole second half is kinda half baked. I didn't come away really having a good intuitive understanding of what the SVD was or why I should care about eigenvalues. I definitely think it's a good place to start though, but if you want something a little more organized I'd really recommend.

"Matrix Analysis and Applied Linear Algebra"

[http://www.amazon.com/Matrix-Analysis-Applied-Algebra- Soluti...](http://www.amazon.com/Matrix-Analysis-Applied-Algebra- Solutions/dp/0898714540/ref=sr_1_1?ie=UTF8&qid=1332659212&sr=8-1)

It's very clearly written and all the proofs are not too long nor too short. It pretty quickly goes through all the stuff Strang covers and moves on to more difficult things.

<comment><USER10> Thank you for that recommendation; I had not heard about the book before.

An extra nice thing: the book's chapters are available for free --- for downloading and viewing, and not for other uses --- from the book's website: <http://matrixanalysis.com>

</comment></comment></comment><comment><USER11> One of my professors once related a quote from an author of one of the course texts. The author declared that you should "make my book the third book you read on this subject", because the third book you read on a subject is always the one that enlightens you on it :-). There are many paths to understanding, and I hope that the third book is still as relevant without the preceding two already digested.

</comment><comment><USER12> Perhaps relevant to some other HN users...

This list has a recommendation for Introduction to Tonal Theory over Piston's Harmony. I am not familiar with the former, but I found Walter Piston's books to be fascinating and generally very good. It's an older book and so, as I've found with most textbooks from its time, it is somewhat lacking in explanations of certain examples– but then, the internet will supply you with more than you need if you're already reading the material.

<comment><USER13> From the Amazon reviews, it appears that the posthumous editions (4th and 5th) depart from the spirit of the earlier ones, and have become unpalatable.

Edit: One reviewer who has used the 3rd to 5th editions prefers the fourth one, which is less terse than the 3rd one.

<comment><USER12> Just checked my shelf– I have the third edition of Harmony and 4th of Counterpoint, terse is a fair judgement. I'll have to give the later editions a look, but judging by the reviews (and the Revised by MARK DEVOTO tag...) I'm not going to like what I see.

</comment></comment></comment><comment><USER14> This is so much better than all the links to free Ebooks. Considering the time it takes to learn anything of substance, the constraining factor is rarely the price of a textbook, but time wasted on poor writing. Life is too short for bad textbooks.

</comment><comment><USER15> There's a similar list at <http://bestintrobook.com/all> that includes most of the same, as well as introductory books for less academic topics.

</comment><comment><USER16> The. Art. Of. Electronics.

I bought this as a sophomore in high school and was completely blown away by it. The chapter on PLLs alone is worth the price of the book.

<comment><USER9> I dunno. That book is really dense and terse. It's a good reference book, but not something you'd read cover to cover.

<comment><USER17> But you should read it cover to cover. You should buy a notebook; and some basic electronics equipment (and there's probably free simulation that's good enough online now) and work through it.

Draw the diagrams (freehand!), do the math (on paper, not with a calculator!), do the examples.

It's dense because it's complete (for the time, there's a lot of stuff that's missing for modern world) and it's terse because you're supposed to be doing the work at the same time.

And, if you really want to get in depth understanding you buy the AoE Lab-book and build stuff while you're reading the main text.

</comment></comment></comment><comment><USER18> See also: [http://ask.metafilter.com/71101/What-single-book-is-the- best...](http://ask.metafilter.com/71101/What-single-book-is-the-best- introduction-to-your-field-or-specialization-within-your-field-for-laypeople)

</comment><comment><USER19> I don't think this is something that can be crowdsourced. The arguments here rest on authority (and in this case, it's well justified). You want the opinion of someone who has surveyed the field and has studied further than the respective textbooks take you. There may be some authorities whose replies are worth listening to, but these are difficult to distinguish.

For instance, a user recommending CLRS over TAOCP is an odd piece of advice, since TAOCP is distinctly not a textbook. The user purports to have read TAOCP, an assertion with a low prior-probability.

Unfortunately, I do not think we can rely on the advice of anonymous internet contributors. With no way to enforce the rules, LessWrong fails to do due diligence and is merely spreading the opinions of those that reply.

So, to remedy that, I would add a 4th rule: You must state where your authority on the subject, and on the choice of textbooks comes from.

<comment><USER20> I agree with your sentiment that recommending textbooks to a beginner is a very hard problem and crowd-sourcing may not be the best idea, but I do have questions for the example you provide to prove your assertion and some of the claims you make.

First of all, why would'nt you consider TAOCP a text book on algorithms? Are you trying to discredit discredit the recommender by supplying your own biases? If TAOCP is not a textbook and CLRS is and you provide no arguments against CLRS, why would you come to the conclusion that the contribution is poor? "LessWrong" has it's faults but the disclaimers that it provides is pretty clear and wouldn't you consider it worse if it interjected with it's own opinions?

If we need to listen to an authority "who has surveyed the field", would Knuth be such an authority and his recommendations contained in TAOCP be something you would recommend?

</comment></comment><comment><USER21> While slightly off-topic, do read more of lesswrong.com if you are new to the site. I personally find the site to be a solid repository of useful/thoughtful content.

<comment><USER14> Have you found a good heuristic for determining whether you are really learning something useful or just randomly browsing lesswrong? Not having that is my reason for avoiding it after quitea few hours spent on the site.

<comment><USER22> Some parts of Less Wrong are more concrete and less esoteric than others.

I quite like the Quantum Physics sequence. [http://wiki.lesswrong.com/wiki/Sequences#The_Quantum_Physics...](http://wiki.lesswrong.com/wiki/Sequences#The_Quantum_Physics_Sequence)

</comment></comment></comment><comment> why-el It might be unrelated, but I followed the link to the critique of Bertrand Russell's history of Western Philosophy. The author claims its inaccurate, and proceeds to say anything about it but why its inaccurate. For instance, it says that the book ignores the role of Eastern Philosophy, well dah, the book is on Western philosophy. Russell is an admirer of Eastern Philosophy and has bee arguing that more of it needs to be consumed in the west (For more info, check Bertrand's The Problem of China). Then there is the claim that russell's logic lead him to believe that Rousseau led to Nazism, again no evidence of that whatsoever.

The piece was extremely unfounded, writing off at the beginning of the article because of that critique was a bad idea.

</comment><comment><USER23> Isn't this what Amazon reviews are for? Because I seriously doubt this less wrong list is going to dive deep, to, say, graduate level hematopathology or modern factor analysis. But reviews of such items are readily available on Amazon.

</comment><comment><AUTHOR> Would be interesting to get some additional textbook recommendations from HN. I'll start with mine:

Subject: Startups

Recommendation: The Four Steps to the Epiphany by Steven Gary Blank

Reason: It's a highly practical guide/blueprint on taking new startups to market.

[http://www.amazon.co.uk/Four-Steps-Epiphany-Steven- Blank/dp/...](http://www.amazon.co.uk/Four-Steps-Epiphany-Steven- Blank/dp/0976470705) & first three chapters: [http://www.stanford.edu/group/e145/cgi- bin/winter/drupal/upl...](http://www.stanford.edu/group/e145/cgi- bin/winter/drupal/upload/handouts/Four_Steps.pdf)

<comment><USER24> He has just released a new book that should be the evolution of the one you cited. It should be called 'the startup's owner manual' and he said it contains what he has learned in the past ten years. you can find it on amazonn and on his site

</comment></comment><comment><USER25> Please also take into consideration the importance of peer discussion and debate. Just reading the books without an intense follow up discussion and debate makes it less likely that you can apply this new found knowledge. So maybe we can create a peer discussion Hangout API to go with these recommendations such that people can attend a common platform and coordinate small (3-5) discussion groups for elaboration and discussion.

</comment><comment><USER26> This reminds me of this part from 'The Count of Monte Cristo' when Dantes met abbe Faria for the first time:

"I had nearly five thousand volumes in my library at Rome; but after reading them over many times, I found out that with one hundred and fifty well-chosen books a man possesses, if not a complete summary of all human knowledge, at least all that a man need really know. I devoted three years of my life to reading and studying these one hundred and fifty volumes, till I knew them nearly by heart; so that since I have been in prison, a very slight effort of memory has enabled me to recall their contents as readily as though the pages were open before me. I could recite you the whole of Thucydides, Xenophon, Plutarch, Titus Livius, Tacitus, Strada, Jornandes, Dante, Montaigne, Shakespeare, Spinoza, Machiavelli, and Bossuet. I name only the most important." -- Abbe Faria, Chapter 16. A Learned Italian.

<comment><AUTHOR> Romantic quote, but it comes down to 1 book/week which seems quite unrealistic for 150 modern scientific textbooks. I challenge anyone to go through "Artificial Intelligence: A Modern Approach" in a week!

<comment><USER27> While that volume belongs on the 150 books for the well-read hacker, I wouldn't put it on the list for the well-read gentleman. We live in such a world of specialization, appreciation of true general education has suffered. In the age of Romance the 150 books would have been largely classical and philosophy. I think you could put together an awe-inspiring list of 150 that everyone with a bachelor's should be familiar with. Then we would actually live in an intellectually inspired society.

<comment><USER28> "A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects."

-Robert A. Heinlein

</comment></comment></comment></comment><comment><USER29> This is an interesting start. I would say that the next (and possibly easier) step is compiling the reference books associated with these subjects, the original sources and their best versions (such as comparing translations and editions). I think starting to add these in other companion lists could also prevent people from suggesting original sources and reference books in lieu of textbooks. One good thing about a list of textbooks is that it shows just where market opportunities exists for potential authors, and also where the bar is already set high. I have observed perfectly authoritative books being "replaced" for no good reason. This may be encouraged by publishing companies due to the way copyright works. However, changing textbooks every few decades does not help the process of imparting understanding. Something like this list might help prevent that.

</comment><comment><USER30> One thing to watch out for is that sometimes the third book you read is a your favorite, because you have a background familiarity created from the first two. For that reason, it can be not less wrong to reject recs from single book readers.

</comment><comment><USER31> Digital communications by Bernard Sklar. A close second is Wayne Tomasi's book. Both books provide great intuition into the matter with just about the right detail.

Once you have both of those down (and have the requisite linear algebra / probability background), read the texts by Proakis and Gallager. They are very math heavy, (but also very precise and thorough) and though often recommended by university professors, definitely not a good introduction to the subject.

 _recommendation on the basis of grad-level studies and research on communication / signal processing._

<comment><USER28> I second this recommendation. Proakis was my undergraduate text. I read both Gallager and Sklar at grad school and would highly recommend the later over the other two.

</comment></comment><comment><USER32> not read enough other books on the subject to comment "fairly", but morrison and boyd's "organic chemistry" is one of the best texts i've seen on any subject. they take a traditionally daunting and information-dense subject and work out a clear, logical path through it that builds the material up step by step, explaining the principles behind each step and frequently referring back to foundational material. if you're struggling with organic chemistry in college, i'd strongly recommend getting a copy of this book.

<comment><USER33> I quite liked Janice G. Smith's text. OChem is definitely one of the more esoteric courses out there, but she synthesized everything in an incredibly logical, sensible progression.

Organic chemistry is like a spatial algebra. It's so weird, but it makes a lot of sense when you really begin to grok it.

</comment></comment><comment><USER34> There used to be a website called CanonicalTomes that allowed people to suggest and vote on the best books on various topics. It's been defunct for a long time, but you can still browse (though not search) it through the Wayback Machine:

[http://web.archive.org/web/20010616232238/http://www.canonic...](http://web.archive.org/web/20010616232238/http://www.canonicaltomes.org/index.cgi)

</comment><comment><USER35> Why aren't the textbooks used in public education free?

Why aren't there any good recommendations for High School Algebra and Algebra II, since the CAL college system requires both?

</comment><comment><USER36> Heads up: The philosopher Frederick Copleston's name is misspelled on the entry under philosophy texts. I didn't spot an email address for the project.

</comment><comment><USER37> Could anyone make a solid recommendation on a calculus book? Im currently using Calculus a Complete Course by Robert Adams and Chris Essex.

<comment><USER38> It depends on what you want; I came at calculus mostly from a civil and mechanical engineering point of view, and I found the Dover reprint of Morris Kline's _Calculus: An Intuitive and Physical Approach_ , originally published in 1968, very helpful.

</comment></comment><comment><USER39> _Classical Mechanics_ , John R. Taylor

Its pretty much the best textbook I've ever owned.

</comment><comment> guard-of-terra Am I the only one who prefers blog posts, examples and wikipedia to textbooks? For anything IT related, anyway.

Textbooks are cripplingly sparse. They yak and yak and yak for a few pages on a concept you're figured out from the first sentence.

I would like a zoomable textbook. One which presents you a list of tl;dr explanations about every topic covered (one-two pages per book), but you may click on any topic and get a thorough description of it, and then I can click on any claim in that and get more specialized information and so on down to turtles.

I would like articles that way too.

<comment><USER17> I wish the wikipedia leads were more concise. A two sentence description of the concept in the most basic understandable language possible.

Then the next paragraph can be a more accurate lead.

The the content list; then the contents.

Your zoomable book idea is a good one. I'd prefer authority with good cites over crowd-sourced with semi-random citing.

<comment><USER40> I recommend checking out the "Simple English" wikipedia for more complex topics. It breaks those sentences down even more and is fantastic for math articles and the like.

</comment></comment></comment><comment><USER41> There is no such thing as "the best textbooks", just "best textbooks" for each person.

[http://www.ted.com/talks/malcolm_gladwell_on_spaghetti_sauce...](http://www.ted.com/talks/malcolm_gladwell_on_spaghetti_sauce.html)

<comment><USER42> While everyone has different tastes and needs, there's no doubt that some books are better than others. Not to belittle Gladwell too much - I enjoyed the talk and it's a valuable perspective on market segmentation - but using a pop science author talking about spaghetti sauce as a source is hardly an argument to dismiss the _notion of quality_.

<comment><USER41> Quality is important, but still subjective. Not to say this won't be a great curated list.

Anyways, I should have known better than to just throw that out there. My bad.</comment></comment></comment>


Pick Your Battles - <AUTHOR> http://zef.me/4235/pick-your-battles? <comment><USER2> When I read articles like this, I always wonder if early-on there was someone in the room saying "Um..guys..maybe we should just pick something stable first?" and got shouted down as being a Luddite?

I've seen that countless times where exuberant "experts" hastily choose a new technology over the warnings of those who are a little more thoughtful in their technology choices. Usually the ignoring comes with a heavy dose of disdain and mocking of the person for not being "up to speed with the latest stuff".

Then when disaster strikes, they seem to have forgotten about how they were warned and write a blog post about how much smarter and more experienced they have now become.

Not suggesting that this the case here, but I have to wonder if Cloud9 didn't have at least one person saying "Whoa there sparky! Have anyone of you considered how we are ever going to query this stuff?", etc.

</comment><comment><USER3> "At Cloud9, more often than not we predicted our bottlenecks wrong. Dead wrong."

I'd be a millionaire if I made a nickel every time someone guessed at a bottleneck rather than looked. If I wanted to expand my portfolio, I would add a nickel for every time this is said: 'we had our programmers working for 6months to improve performance' when performance issues could have been solved with a $10k SSD array in a week.

<comment><USER4> Throwing a $10k SSD at a problem is a boring solution. There's very little that can come between a developer and a chance to optimize some badly performing code. ;-)

</comment></comment><comment><USER5> The google cache link is not working due to pictures. Correct text-only link : [http://webcache.googleusercontent.com/search?q=cache:zef.me/...](http://webcache.googleusercontent.com/search?q=cache:zef.me/4235/pick- your-battles+site:zef.me/4235/pick-your-battles%3F&hl=en&tbo=d&gl=us&strip=1)

Nice nugget from the article : "Facebook uses MySQL to keep most of its data, are you going to get bigger than them"

You could rephrase as that as Djisktra did "Premature optimization is the root of all evil"

First solve the problem then optimize, unless it gives you a special edge that'll bring money.

When I started doing "stuff" I wish I had read such an article. It would have saved me both good nights of sleep _AND_ unneeded worries.

<comment><USER6> It wasn't actually Dijkstra who said the bit about premature optimization; it was Donald Knuth.

</comment></comment><comment><USER7> "We hired a few node.js core developers (actually, over time we ended up hiring 75% of the core node.js team) — they were incredibly helpful."

This sort of approach won't scale too well when 10 startup companies all need to hire the core node.js (or insert favorite trendy base tech of the day) team.

</comment><comment><USER8> Definitely smart to adopt software at the correct point in the hype cycle so other people solve core problems before you start using it: [http://www.gartner.com/technology/research/methodologies/hyp...](http://www.gartner.com/technology/research/methodologies/hype- cycle.jsp)

It sucks to be the alpha tester. However, the SQL vs NoSQL debate is silly, because Facebook seems to be using both to scale.

A lot of content at Facebook seems to be served from a denormalized NoSQL storage and that is the useful takeaway insight. I do not know what I can learn from the fact that a team with some of the most talented SQL ops and developers can store some core data in SQL.

<comment><USER9> It forgets to mention that some technologies just dies after the "peak of inflated expectations" and never manage to turn the slope.

</comment></comment><comment><USER7> Here's my theory. When I was learning programming early on, then later on with specific languages, almost all the problems I'd run in to were "solved problems" - I just didn't know the answers. With enough searching, testing, querying, asking, I'd generally find the 'right' way to do X, and move on.

I've grown more conservative over time, but other people tend to continue to operate with the idea that with enough searching/testing/querying, there will always be 'the' answer which will solve all their issues. Not picking on node specifically, but choosing that a year ago or so as _the_ platform to write a production system in seems hopelessly naive. I suspect that some of the people involved had this unconscious idea that, with enough work, the 'right' answer would magically appear, and they'd move on to the next problem. Turns out that's not what happens when choosing bleeding edge tech, but I'm not sure it's a lesson everyone learns (and I suspect it's a maxim not everyone really cares about anyway).

</comment><comment><USER10> "If a new technology is going to give you the edge to push the competition out of the market, it's a no brainer."

Superior technology (as distinct from new technology) almost always gives you an edge. The edge maybe a small one, but it exists, assuming other things are equal (quality of your devs, say). Isn't this the whole point of pg's "Beating the Averages" essay? [1]

But then, I guess you need some real hands on experience to distinguish superior tech from 'the latest buzzword' tech. For most apps, node.js is probably an example of the latter than the former. So the OP's point holds.

[1] <http://www.paulgraham.com/avg.html>

</comment><comment><USER4> Great article. The facebook example is very pertinent - they started with PHP and MySQL and only when the traffic came did they scale to using C++ (via a PHP to C++ translator). I'd be interested to hear what the writer would think of using Go on a new project ... a new language that has been called boring and yet does have some features that aren't really in use anywhere else (channels, slices, goroutines).

<comment><USER11> there is a second order analysis on Facebook: how many of its employees who quit to create a startup did use php-mysql?

</comment></comment><comment><USER12> I've seen this in mathematical programming too. The most successful projects use old Fortran libraries: LAPACK, FFTPACK, etc. Python (SciPy) is popular, and great for prototyping, but I still write everything in C because although floating point is flawed, it's flawed in well-understood ways.

</comment><comment><USER13> Great advice, but I've heard it before. Any chance of an article describing what really happened for each of the problems listed, and how you solved it?

</comment><comment> X-Istence The page is unfortunately not responding.

<comment><USER14> The interface is bad on iPad. I can't zoom the text. It's stressing to read with so small text. Reading to the end, the back button makes you skip back through all the pages.

This guy is not doing what he says people should do. He uses the latest fancy web page UX where he should use a well proven UX but maybe boring. Do what he say not what he does.

<comment><USER15> That's what he is talking about though - he used node.js and redis on a production site when neither are close to production ready. Thanks to him though, both are improving rapidly and should be production ready before long, so kudos.

His whole article is about "woops, going with the latest tech wasn't such a good idea - here is what you can learn from this".

So yes, he is using the latest fancy web page UX and he has written an article about what he has learned. Next site he makes will probably be using well proven UX.</comment></comment></comment>


Should I switch from iOS to Android? - <AUTHOR>

Just recently was the news floating around of an Apple fanboy switching over to an Android Nexus4 device. I do start to get the same feeling maybe time to try out.
I love my iPhone for years, works great, but I start to feel it gets outdated and the missing file structure is something I really would like to have.
On the other side all of my hardware (home/office) is based on Apple (MBP, iPad, iPhone) and overall it works pretty well. Switching to Android would mean losing some software service Messages, iCloud, iPhoto, etc.
There are many other elements to consider as well e.g. malware, hardware stability, but overall Android really came a long way and I see it accelerating more and more.
Anybody switched lately from iOS to Android?
What is your experience? <comment><USER2> dude, is this really the best place you could think of to ask this question? If you can't figure it out for yourself ask reddit.com/r/android

</comment><comment><USER3> yes absolutely. IPhoto is replaced with g plus sync all photos get auto uploaded and Google sync contacts and docs. use Google voice for messaging and calls. switch to Linux while you're at it</comment>


Ask HN: Are dev bootcamps worth it even if you don't want to be a full-time dev? - <AUTHOR> I'm in a PM role right now, but want to do a heads down code bootcamp to get from a 3 to a 7-8 as far as my technical chops go. I don't necessarily want to be a rank-and-file developer at a startup or big co, but I want something to push me to learn so I can either be 1) better at my current job or 2) start my own company. Has anyone gone through a bootcamp without the intention of becoming a professional developer? <comment><USER2> I know few people that got jobs thanks to bootcamps.

How exactly dev skills would help you with starting a job? Do you want to code it yourself? Or do you want to know what if your devs go correct path?

You have to understand that development is a very wide term.

There is a frontend - UI + UX, both of them pretty complicated and it's only making designs a reality. Not really worth learning as a PM in my opinion. If you want to build a SaaS yourself, you would have to learn it, though. But as I said it's still a lot of work to learn it, just for programming UI+UX...

Then there is a backend. Lot's of different programming languages. Not only languages but also frameworks. This won't really help you with your current job. But there is SQL and databases. In my opinion, this is worth something reading about and playing around. Why? Because sometimes very simple things are very complicated to implement due to database structure made by developers. Additionally, you can write your own SQL to query some data instead of asking devs to craft it for you.

I'd also look for books that are meant for PMs on this subject. I'm sure there are some, but I don't know them. I'd learn about general stuff. Why there is backend + frontend + devops. How do they connect with each other, etc? This would help you understand better dev teams dynamics. Also, it would allow you to avoid some traps when starting your own company. Like thinking about using SPA, when server side rendered is just enough.

</comment><comment><USER3> For whatever little my opinion is worth, my view is that technical skills are a "use it or lose it" kind of thing. That goes double for web development, which is what most bootcamps seem to cover, since they tend to focus on current frameworks and libraries rather than fundamentals and those things churn extremely quickly. It won't hurt you but, unless you have much better memory retention than most people, it may not benefit you all that much either.

</comment><comment><USER4> I just undertook something similar to what you are describing. I'm currently in a data analytics role at a large company and had been looking to get my MBA at a respectable school to transition into product management. I went into a part-time bootcamp with the goals of 1) improving my own technical understanding to be able to run a product team 2) bolster my MBA app profile and 3) be able to prototype and build my own things if I ever start my own company. So definitely not with the goal of being a developer.

I am going to business school this fall and am quite happy with how everything turned out. I really enjoyed the bootcamp, fully understanding that the material was more or less survey-level. People will also tell you that bootcamps aren't necessary because you can self-learn and there are lots of resources out there - but I believe that to be true of almost anything nowadays. The toughest thing for me when understanding coding and development is distilling down the massive amount of info out there and having the context of relevant technologies, how they are used, what's important etc. which I think would be really tough to learn on your own. Also having a structured environment and learning with a cohort is something that should not be discounted.

If you think this is something you might want to do, I'd say go for it. I'm not sure you'd go from a 3 to an 8 on tech chops, but maybe a 6 and then depending on how much more learning you do on your own. It's also a lifelong learning thing - so the value is less about the specific languages and frameworks you learn, and more about knowing how to build an app and the process of coding (since it will all be different in 3 years anyway). I'm also not sure how much the bootcamp bolstered my applications, but I found it to be a valuable experience nonetheless.

</comment><comment><USER5> >>I don't necessarily want to be a rank-and-file developer at a startup or big co

If above is true- is paying $10k+ giving up 3 mos. of salary worth it to you especially if you can learn same material a bit slower at a community college for almost free?

</comment><comment><USER6> how are you going to support yourself while you decide to go to a bootcamp? Also is there a specific bootcamp you are looking to attend and also the cost?

I don't see why you couldn't learn these things on your own as there are TONS of resources online, Udemy, books, Free Online tutorials.</comment>


Twitter open up, so you don't become like MySpace - <AUTHOR> http://peterstuifzand.nl/2011/04/16/decentralization-as-advantage-for-companies.html

<comment><USER2> And how would they be making money?

<comment><AUTHOR> The eternal question. I think in the same way they're making money now. Maybe advertising, promoted tweets or premium services.</comment></comment>


Git's avalanche - <AUTHOR> http://www.loudthinking.com/posts/24-gits-avalanche <comment><USER2> I love distributed version control: before Git I used darcs extensively. Darcs is really nice, and was developed by one of my high school classmates (a fellow physicist), but it seemed that its bugs and performance problems would go perpetually unfixed. I started to look for a replacement.

Git was the leading contender. Yes, Git rocks, but there's more to it than that. When your SCM of choice also hosts the Linux kernel (and, indeed, was developed for that very purpose), you know it will never be abandoned. No serious bug can last for long. That risk mitigation is worth a lot, and it's one of Git's biggest strengths.

I realized about three months ago that Git was going to win. I'm not sure what tipped it, but it made me happy: partially because I felt proud to have figured it out, but mostly because it meant I could stop agonizing about which SCM to use.

Viva Git!

<comment><USER3> I have to say that Github is pretty awesome, and the fact that it uses a lot of the new "cloud" style backend server setup means that the day that they have scalability issues is the day that you should be worried if the internet has such intrinsically.

The one issue about git that I'm not comfortable with is the whole explicit branching part of the the design. While for a large project this is pretty easily the "right" way to design a DVS (if for a large / professional grade project you're not explicitly planning everthing, you should be worried), for smaller projects I think darcs' patch dependency tracking approach is much better (or at least much lighter weight).

<comment><USER3> actually, Bram Cohen's blog on the various version control systems articulates what I was trying to say perfectly "Darcs's big advantage right now is that it have very good extensive support for cherry picking, a feature which is planned for Codeville but not implemented yet, and I'm not sure if it's planned for Monotone."

from <http://bramcohen.livejournal.com/17319.html>

</comment></comment></comment><comment><USER4> Github really is great. If you haven't used it, and claim not to be a fan of Git, you should really check it out. It almost manages to make Git seem friendly, even; Suddenly, forking isn't a dirty word any more (and it shouldn't be, this is OSS!).

Tools like Github and Gitorious make Git palatable, and are also interesting from a 'social graph' point of view, where relationships amongst Geeks are measured by the lines drawn between the projects they work on or are interested in...

<comment><USER5> It is amazing how people always diss stuff they haven't even tried.

</comment></comment><comment><USER6> I came across this analysis of an old Bram Cohen argument with Linus Torvalds on git philosophy: [http://wincent.com/a/about/wincent/weblog/archives/2007/07/a...](http://wincent.com/a/about/wincent/weblog/archives/2007/07/a_look_back_bra.php)

I think the relative simplicity and originality of git concepts is fueling the avalanche. Scott Chacon has been doing some cool stuff implementing Git in Ruby (<http://github.com/schacon/git-ruby/tree/master>) and possibly ActionScript.

</comment><comment><USER7> svn blame > _</comment>


Fish - The friendly interactive shell - <AUTHOR> http://lwn.net/Articles/136232/

<comment><USER2> This is an older article. It seams to list a few ways that Fish attempts to improve on older shells, but appears to be a little out of date.

Fish has a nice design document that gtive a better understanding of what it is about: <http://fishshell.org/user_doc/design.html>

Fish's real advantages isn't so much it's list of features, but the fact that they come pre-configured. That, and the fact that Fish sacrafices backwards compatiblity with other shells to make a cleaner command language and a more manageable environment. I like being able to configure an environment variable without tinkering with my .bashrc or .profile. Granted, I can't easily reasonably install it on the solaris machines at work, but it doesn't make my home computing environment much nicer.

</comment><comment><USER3> The programmability of a shell just isn't interesting to me. Whenever I start hacking a shell script, it either starts out as just two or three lines or it evolves to the point where I feel like I need a "real" language. At that point, I'll end up hacking it in perl or python.

In the meantime, I'm happy enough with bash.

<comment><USER4> I would like to see the interactive Read Eval Print Loops of one of these languages finish closing the gap and become good shell replacements. I find I can get close to that sometimes with interactive programming environments, but not quite.

<comment><USER5> Well, there's scsh (<http://www.scsh.net/>), but it's not under active development any more.

<comment><USER6> Which is a shame.

I just found shelisp [1] which, despite the questionable name, looks simple and promising.

[1] <http://dan.corlan.net/shelisp/>

</comment></comment></comment></comment><comment><USER7> I posted a couple of hacks for fish here: [http://christopherolah.wordpress.com/2009/06/13/a-couple- fis...](http://christopherolah.wordpress.com/2009/06/13/a-couple-fish-hacks/)

</comment><comment><USER8> Related comments here:

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

</comment><comment><USER9> I use fish on all my machines at this point. It's nice to have really smart auto-completion. I know bash can do some of this if you configure it correctly but I'm all about reasonable defaults. I can't be bothered with lots of configuration changes on every machine I touch.

One word of warning, and this probably applies to any shell, you should keep one of your sudoers on bash or sh. I've had a few occasions where something broke fish so when I logged into the machine via ssh I would see a few error messages and the session would terminate when the shell died locking me out of the system. I never figured out what broke fish in the first place but it's taught me the value of having a fallback user/shell for emergencies.

<comment><USER10> > _I can't be bothered with lots of configuration changes on every machine I > touch._

Every machine you touch may not have the option of fish. Having a reasonable .bashrc (and even .cshrc -- I've been on machines where bash was broken) is key to doing any sysadmin/dev work on linux/unix boxes.

<comment><USER11> Right, the only standard shell is sh.

<comment><USER10> Most systems will have at least bash, csh or tcsh. I've yet to run across a system that only had ksh or zsh (or something exotic).

</comment></comment></comment></comment><comment><USER12> Fish is good but development has all but ceased on it.</comment>


On rump kernels and the Rumprun unikernel - <AUTHOR> https://blog.xenproject.org/2015/08/06/on-rump-kernels-and-the-rumprun-unikernel/

<comment><USER2> Regarding unikernels it is fun to combine it with Erlang, since Erlang already has process isolation by default, so it acts as a mini-OS for your application. Process supervision is a bit like the initd (or systemd), it has networking and file system access API,etc...

So there is:

[http://erlangonxen.org/](http://erlangonxen.org/)

code: [https://github.com/cloudozer/ling](https://github.com/cloudozer/ling)

Basicly instead of:

hardware|kernel|os|erlangvm|yourcode

it is now:

hardware|xen|ling|yourcode

Not sure how functional it is now. I haven't followed the project in the last year much. But I see some development on github lately.

<comment><USER3> Another (still experimental) option is running Erlang/OTP ported to OSv unikernel:

[http://www.slideshare.net/nivertech/erlang-on- osv-49278675](http://www.slideshare.net/nivertech/erlang-on-osv-49278675)

</comment></comment><comment><USER4> > That minimal quality of most of the OS not being present also explains why > the container the drivers run in is called a rump kernel

I have seen a number of articles on 'rump' kernels and they always similarly gloss over the name like this. How does that explain? It's not capitalized, so I assume it is not an acronym that stands for something.

Where does this name come from? Is it an acronym, portmanteau, metaphor, what? I have never seen it clearly explained, and I have followed link trails down the rabbit hole through circular references and wikis looking, half a dozen times at least, to no avail.

Can someone please clue me in?

<comment><USER5> > Where does this name come from? Is it an acronym, portmanteau, metaphor, > what?

It appears to be a fairly standard use of the English word "rump" in its non- anatomical sense, that is "a small or unimportant remnant of something originally larger."

<comment><USER6> The classic use is to talk about the Rump Parliament of 1648 in England: [https://en.wikipedia.org/wiki/Rump_Parliament](https://en.wikipedia.org/wiki/Rump_Parliament)

<comment><USER4> You win the gold star, that was the historical context of this usage of the word that I did not understand and what I was missing, mystery solved. Thank you!

</comment></comment></comment></comment><comment><USER7> Before I read this, is anyone willing to explain how a rump kernel and Rumprun unikernel differ from what MirageOS is doing with unikernels?

Is a rump kernel just a more general abstraction of a unikernel like MirageOS?

<comment> vezzy-fnord The principle of a rump kernel is to make OS drivers and subsystems able to run both in a monolithic kernel context and in a userspace context, with a microkernel-like fashion.

An earlier example of a similar approach is DDEKit ([https://os.inf.tu- dresden.de/ddekit/](https://os.inf.tu-dresden.de/ddekit/)), designed so that Linux 2.x drivers can be reused in foreign systems. It's what GNU Hurd uses for its TCP/IP stack, for instance.

</comment></comment><comment><USER8> I'd love to see a Smalltalk VM running directly on Xen. The language has always been a bit awkward on PCs because in its heart it still wants to be the OS for a Xerox Alto. It ought to be right at home on virtual metal!

<comment><USER9> Give me Scheme any day :)

</comment></comment><comment><USER10> Here's a prediction of how this conversation is going to go:

1\. This stuff isolates specific functionality into a hardened component!

2\. You can run an existing program as an isolated, hardened component!

3\. You can run all of your programs as iso., hard. components! The parts of your system won't be able to step on each other except in well-defined ways!

4a. You mean sort of like old-school process isolation?

4b. Blah, blah, blah, Plan 9, blah...

4c. Blah, blah, any virtual machine like the JVM...</comment>


Show HN: $1 buys you a startup idea - <AUTHOR> https://www.ideasarecheap.net <comment><USER2> Ideas are a dime a dozen though. Execution is what matters.

</comment><comment><USER3> Looks like you compiled in dev mode. You only want one JS file, not 200+.

Try: lein cljsbuild once min

</comment><comment><USER4> There are 208 requests for this single page ?

<comment><USER5> I'm only getting 194, but given that the page doesn't do much of anything it is quite crazy. Looks like a lot of it is related to the ClojureScript Timbre library

</comment></comment><comment><USER6> Lets see if I am an electrical engineer, does it suggest relevant ideas ?</comment>


Pluggable Type Systems (2004) [pdf] - <AUTHOR> http://bracha.org/pluggableTypesPosition.pdf

<comment><USER2> The "Mandatory Typing Considered Harmful" section seemed like a lot of handwaving and threatening of bad things, but didn't describe anything I've run into at all. On the other hand, I've only been doing this for 30 years, so maybe there's all this horror waiting for me to run into... but I'm skeptical.</comment>


What Do You think About RPN (Reverse Polish Notation) - <AUTHOR>

I really love it. <comment><USER2> Eh. I have a mild preference for RPN calculators over infix ones, just because it makes it a little easier to keep track of what I'm entering on calculators whose displays are just one row of seven-segment numerals. On computers or on nicer calculators I couldn't care less. I'm equally comfortable with prefix, infix, and postfix and can easily transpose between notations in my head.

</comment><comment><USER3> hp 12c w/rpn = best finance calc ever

too bad i only know how to use 1/2 of it's functionality.</comment>


Pluto: Unsend Email - <AUTHOR> https://www.sendpluto.com/

<comment><USER2> BS. That's all I have to say. It's like Groupwise, worked well within Groupwise but once it leaves the system it's out to the wild-wild-west.

<comment><USER3> Hi ironghost,

Thanks for the comment. We actually do support forwarding. If an email is forwarded it will still expire/unsend as expected. You can forward a Pluto email to any email address. Please try it and send us any feedback you have.

Thanks! David, Co-Founder Pluto Mail email@example.com @sendpluto</comment></comment>


Show HN: Topic modeling over Paul Graham's essays - <AUTHOR> https://github.com/futureUnsure/pg-essay-lda <comment><USER2> Negativity (Mean, Meanness, Patents) ... did you filter out cases where mean was used in a statistical sense?

<comment><AUTHOR> That's a really good point! No, I did not, although in hindsight I should have had thought about that. As I had mentioned in the README, the modeling perhaps is not very high quality, but I surely do hope to make it better once I get some free time. Thanks for your suggestion! Means a lot :-)

</comment></comment><comment><AUTHOR> So, I guess the post has been sort of banned from HN as I cannot see it either on Hacker News trending/new/show pages. It was trending on the front page for quite some time, just sometime ago (so obviously it wasn't downvoted into oblivion). I guess I will have to live with that :(

</comment><comment><USER3> People, are you seriously this crazy about Paul Graham here? I really don't get it. Hacker News is like some sort of PG echo chamber.

"Background: Paul Graham is probably one of the most influential technology pundit[s] of our times." SERIOUSLY? Small hint: he's not.

<comment><AUTHOR> Hey! I am sorry if I rubbed you the wrong way. It was definitely not my intention to eulogize Paul Graham unnecessarily. I wrote that out of sincerity, I genuinely feel that his essays have been highly educational for me, and for a lot of my friends as well. Maybe his essays have not had the same effect on you, and a lot of other people. I guess if enough people complain about it, I'd edit that line out of the README, no questions asked.

I'd also like to add that I mentioned, "one of the.." and "pundit[s]" implying that there are many others who'd be in the club, and Paul Graham isn't the _only_ or _most influential_. Hope that helps!

<comment><USER3> Don't get me wrong, what you've done is cool, and everybody's free to just love this or that "pundit" (PG is a lot of things, but I wouldn't call him a pundit). It's just that here on HN sometimes PG's writing's treated like the fifth Gospel. Sorry if it came out harsher than I wanted, I had a hard day with a hard client. :)

<comment><AUTHOR> No worries, I totally understand :-)</comment></comment></comment></comment>


Python REPL with syntax highlighting, autocomplete and multiline editing - <AUTHOR> https://github.com/jonathanslenders/python-prompt-toolkit <comment><USER2> This is actually brilliant. It fixes my (relatively minor) gripes with the standard iPython front-end. Namely the multiline mode is miles better, so so much better.

Already mentioned on the thread somewhere else is an issue with autocompletion on imported modules, but that sounds like a bug that will be fixed.

I'm using the ipython mode and there are a couple of differences. For example I'm used to typing 'hist -l 100' to see the recent history, now I need to use the magic ipython variant '%hist -l 100'. Not a big deal, just slightly different behaviour.

The vi-mode is actually not too bad. For me it's good enough to be used in this context. Would be great if it was more complete (eg, daw doesn't work). Maybe it could make use of neovim at some point?

I LOVE that a syntax error means the line isn't flushed so you can fix the issue and hit enter to execute it again. That's a really smart enhancement that I hadn't even noticed was a total waste of time in my workflow until now.

Does it read my local iPython config profile? I use auto-reloading heavily for hot code swapping during my development, will that still work?

Edit: just tested and the iPython auto-reloading isn't working. Maybe it needs to be converted to run as a front-end to get the full power of iPython?

Also, needed to do _PYTHONPATH=. ptipython --vi_ to be able to load modules from the directory in which I started the app.

<comment><USER3> Thanks for the feedback.

About "daw": it looks like I forgot about that. To be fixed, but right now use "diw" instead. (Please create a github issue if there are some other important key bindings missing.)

At the moment, I don't know yet about auto-reloading in IPython, but that's worth looking at.

About the PYTHONPATH, that's easy to fix. (Should we always add the current directory to the path in a REPL?)

<comment><USER4>
      (Should we always add the current directory to the path in a REPL?)

Yes, of course! That was my first problem. The standard "python" always has the current directory in the module path.

Please also have a look on my suggestion for the search facility: [https://news.ycombinator.com/item?id=8391647](https://news.ycombinator.com/item?id=8391647)

It would be really helpful, to just search for some keyword and have the last occurence (for example import) as template without the need for going back the history by hand.

<comment><USER3> >> It would be really helpful, to just search for some keyword and have the last occurence...

In Vi-mode, use ControlX-ControlL after typing the start of the line, then you have line based completion, which also completes from the history.

</comment></comment></comment></comment><comment><USER5> Disclaimer: this comment includes a shameless plug to something I wrote. Read further only if you are not offended by this behavior. I am just trying to help others reading this post who like me think IPython might be a bit of an overkill at times but aren't really happy with the default python prompt. Now my comment ...

This Looks really nice and it does seem like it adds a lot to IPython. That said, I personally prefer working in a proper editor (rather than an approximation) when doing multi-line editing of commands on the prompt. So I wrote a small function to just invoke the editor with the lines in the current prompt 'buffer'[1]. This gives all the things like autocomplete and syntax- highlighting for free (albeit, when you are in the editor). Further more you may open up other buffers to refer to other code while editing the thing that you are on your prompt.

To see what I mean -- [https://gist.github.com/lonetwin/5902720](https://gist.github.com/lonetwin/5902720)

Furthermore, what I wrote is a small enough file to copy as a .pythonrc (rather than pip install ...).

[1] ...and then I added more ...a _lot_ more.

</comment><comment><USER6> If you're looking for a better python prompt, you might want to check out BPython as well: [http://bpython-interpreter.org/](http://bpython- interpreter.org/)

<comment><USER7> I used to use BPython. I really liked its way of presenting autocomplete. However, its scrolling drove me NUTS (it doesn't use your terminal's scroll). I was much happier when I switched to IPython.

Both are leagues better than the plain REPL, though. :)

<comment><USER8> If you haven't seen it, you should check out bpython-curtsies, it solves the scrolling problem problem:

        pip install bpython[curtsies]
        bpython-curtsies

</comment></comment></comment><comment><USER9> For ruby there's something similar called pry [http://pryrepl.org](http://pryrepl.org) which I've been using instead of irb for a while now. It's great news to do something similar with python now too.

</comment><comment><USER10> This is awesome. Can't imagine wanting to use anything else now.

Folks who like the library aspect of this and are interested in building similar things for bash instead of python might want to check out twosheds [0], a library by a friend of mine that lets you do zsh-type-stuff in Python.

[0] [https://github.com/Ceasar/twosheds](https://github.com/Ceasar/twosheds)

</comment><comment><USER4> Very useful, indeed.

One thing that I am missing already is searching inside the history for a specific input. There is some search facility (in vi mode, you can press / and it says that it will search), but I don't know how it works, since it gives no results.

Ok, now I see, it just marks the search results, but does not give an immediate result. That is not, what I would expect and what would be useful for me. In ksh, I believe, there was the possibility to search backwards in history and when it was performed, the most recent input line was put into the active input for replay or editing.

<comment><USER3> This could be confusing. '?' is for searching backwards, '/' for searching forward. Because we are in a multiline environment, I preferred the Vi keybindings instead of the readline bindings (where '/' goes backwards.)

Also the ControlX-ControlL sequence can complete a line based on the history. (Type "imp"C-X C-L and you get your last import.)

</comment></comment><comment><USER11> It's refreshing to see that it works with Python 3 as well. Thanks.

</comment><comment><USER12> Looks like an IPython replacement with syntax highlighting as you type. Couldn't this be something that could be added to IPython itself?

<comment><USER3> (author here.)

The idea is indeed that ``ptpython`` could become the terminal front-end for IPython.

The only thing on which ``prompt_toolkit`` is focussing, is reading input from stdin and returning it to the application. IPython is a very powerful execution environment, but the current command line interface which uses GNU readline lacks decent multiline editing and syntax highlighting.

There is a proof of concept of what the integration could look like: [https://github.com/jonathanslenders/python-prompt- toolkit/bl...](https://github.com/jonathanslenders/python-prompt- toolkit/blob/master/bin/ptipython) But in the end it would be nice to have this as a part of IPython itself.

<comment><USER13> How does it compare to bpython, then? That does syntax highlighting and has support for multiline editing IIRC.

<comment><USER14> Basically it's great, and matches up well with bpython: I wrote up some comparisons at [http://ballingt.com/2014/09/30/prompt- toolkit.html](http://ballingt.com/2014/09/30/prompt-toolkit.html) (bpython- curtsies author here)

</comment></comment></comment></comment><comment><USER15> Great job!

I really like the multi-line editing and IPython-style prompts. The syntax highlighting feature is nice as well, and it can be turned off with a flag. I am not a fan of auto-completion, however, so I wish there were a flag to turn it off as well (perhaps --autocompletion=off).

<comment><USER3> Thank you for the feedback. I'll add an option to turn off the automatic autocompletion.

</comment></comment><comment><USER16> This is amazing. My niece has recently been interested in "doing what I do", and Python is the language of choice for that. I was thinking of using bpython, but I guess I'll have my choice of REPLs

</comment><comment><USER17> This is great, I really enjoy this. The one thing I'd be interesting in contributing is using ipython's sqlite history database if a user chooses to.

</comment><comment><USER18> This is fantastic and completely intuitive. After wasting many hours fiddling around with Vim plugins so that I can use autocompletion, this is a relief.

</comment><comment><USER19> This looks neat, would be great to get it working with django-extensions so we can have the nice ./manage.py shell_plus using it if available.

<comment><USER3> We have that: [https://github.com/django-extensions/django- extensions/commi...](https://github.com/django-extensions/django- extensions/commit/a21d6424e9c753a11ea12fd40c4bd1a806447ea6)

(Not yet on Pypi, we we'll get there.)

<comment><USER19> You beautiful person.

</comment></comment></comment><comment><USER20> Maybe I am just doing something wrong, but ptipython does not autocomplete anything I import.

<comment><USER3> (author here)

I noticed. You're not doing it wrong. It's a bug and it will be fixed asap.

</comment></comment><comment><USER21> Very very nice. Does it work in windows too ?

<comment><USER3> I'm sorry about this, at the moment there is no Windows support.

However the architecture of the library decouples the input and output from the rest, so it should be possible to plug in something to make it compatible with the Windows terminal.

For me personally, it doesn't have priority, but maybe in the future I will have a look.

</comment></comment><comment><USER22> This is freaking awesome. Vi-mode is huge.

</comment><comment><USER23> Getting some errors trying to define simple functions and call them:

      In [3]: foo(Exception in thread Thread-159:
      Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
        self.run()
      File "/Library/Python/2.7/site-packages/prompt_toolkit/__init__.py", line 200, in run
        callback()
      File "/Library/Python/2.7/site-packages/prompt_toolkit/__init__.py", line 440, in run.7.6
        completions = list(line.completer.get_completions(document))
      File "/Library/Python/2.7/site-packages/prompt_toolkit/contrib/python_input.py", line 449, in get_completions
        for c in script.completions():
      File "/Library/Python/2.7/site-packages/jedi/api/__init__.py", line 161, in completions
        for call_sig in self.call_signatures():
      File "/Library/Python/2.7/site-packages/jedi/api/__init__.py", line 574, in call_signatures
        self._pos, user_stmt)
      File "/Library/Python/2.7/site-packages/jedi/cache.py", line 90, in wrapper
        value = optional_callable()
      File "/Library/Python/2.7/site-packages/jedi/api/__init__.py", line 572, in <lambda>
        _callable = lambda: self._evaluator.eval_call(stmt_el)
      File "/Library/Python/2.7/site-packages/jedi/evaluate/__init__.py", line 226, in eval_call
        return self.eval_call_path(path, par, s.start_pos)
      File "/Library/Python/2.7/site-packages/jedi/evaluate/__init__.py", line 240, in eval_call_path
        search_global=True)
      File "/Library/Python/2.7/site-packages/jedi/evaluate/__init__.py", line 113, in find_types
        return f.find(scopes, resolve_decorator, search_global)
      File "/Library/Python/2.7/site-packages/jedi/debug.py", line 51, in wrapper
        result = func(*args, **kwargs)
      File "/Library/Python/2.7/site-packages/jedi/evaluate/finder.py", line 46, in find
        names = self.filter_name(scopes)
      File "/Library/Python/2.7/site-packages/jedi/evaluate/finder.py", line 89, in filter_name
        scope = name.parent.parent
      File "/Library/Python/2.7/site-packages/jedi/cache.py", line 139, in wrapper
        result = func(self)
      File "/Library/Python/2.7/site-packages/jedi/api/interpreter.py", line 69, in parent
        module = __import__(module_name)

TypeError: __import__() argument 1 must be string, not None

<comment><USER24> HN is not the right place for reporting bugs of this sort. Report it on github.</comment></comment>


If Samsung doesn't care about customers, how can it hope to keep them? - <AUTHOR> http://www.theverge.com/2011/12/23/2657492/samsung-touchwiz-fails-customers

<comment><USER2> CyanogenMod recently dropped support for the Samsung Vibrant because they don't have source code required for dialing 911, so the fact that Samsung is also refusing to push ICS means that Vibrant owners are completely out of luck.

Reference: [http://forum.cyanogenmod.com/forum-280/announcement-19-cm- vi...](http://forum.cyanogenmod.com/forum-280/announcement-19-cm-vibrant- support/)</comment>