Ask HN: What do you think makes a good teacher? - <AUTHOR>

I just want to know what your opinions on this topic is. I have often heard that many hackers are good teachers so I believe that a good teacher should be passionate about his/her subject. <comment><USER2> As an IT educator and professional for 10+ years, this is actually right up my alley. I've developed both courses for students of IT and music as well as several "Train the Trainer" courses.

One thing I will do is to address the term "good teacher". A good teacher is very different from a "great teacher." I'll simply address good teachers in my post.

I do chuckle a bit when I read the replies that say, "This - you have to do this to be a good teacher." It's all so subjective. I've seen good teachers who were not great enthusiasts, good teachers who didn't give a #### about their students, and good teachers who lived and breathed the technology, loved their students, and were good people.

In my opinion being a good teacher requires wanting to be a good teacher, practicing the techniques of educating the age group you are teaching (there are massive differences in teaching each age group), and knowing the topic at hand.

If you actually care about the people you are educating, that is bonus but there are plenty of good teachers who, at the end of the day, couldn't care less about this group of students or whether they "get it". To give you an example, some of the great teachers _know_ that they are great teachers and know that simply taking a class with them is an honor and they take the attitude, "If you're taking my class and you don't get it, then something is wrong with you - not my fault. <hundreds/thousands> have taken this class and gotten tons out of it and if you don't, too bad."

Just because you are an enthusiast means nothing - I've seen good teachers who barely know the topic. What they are good at, though, is simplifying complex topics and helping students understand the topics. The good teacher does not have to be a guru (and for many people, the more they know, the less of a good teacher they become because they lose the ability to make it understandable for the student).

As for passion, passion makes it easier for the student, sure, but it isn't a requirement to be a good teacher. I've seen lots of good teachers who learn a subject just so they can keep a job. They don't give a ### about that subject but, because they want to be good teachers and they work hard at it, they are good at teaching that topic. Would it be better if they were passionate about it? Absolutely.

All in all, I think it's a combination of several things to be a good teacher but passion and guru-ness aren't in that set. I think the want to be a good teacher is paramount and, along with that want, is a work ethic that drives you to become and remain a good teacher. Anything above and beyond that only makes you better.

</comment><comment><USER3> I'm a student, and most of the teachers I deal with at college are _horrible_. I won't go into things like passion and knowledge, just plain hard facts about what I _want_ in most teachers.

1\. Don't tell. Anyone can stand in front of a class and _tell_ students stuff they don't know. A good teacher will always start with a problem, encourage students to suggest their own solutions and then proceed to tell the class the actual solution. _Most_ good teachers I have encountered use a variation of this method to teach. It not only works well, it gives students a sense of accomplishment.

2\. Let students come to their own conclusions about the subject material before you correct them. College students are not stupid. I've seen that the _worst_ teacher will always tell students to "slow down for a moment" just so he can meticulously read through his shrink-wrapped bullet points. Boredom ensues.

3\. Ask. Ask many questions. Heck, teach entire chapters as a series of questions.

EDIT: spelling, grammar, lameness.

<comment><USER4> It depends entirely on how many people you're teaching. If you're sitting in a lecture hall full of 250 students, asking continual questions is just not going to get any response. No-one wants to embarass themselves in front of an audience that large. You'll just slow down the lecture while you pause and listen to a stony 10 second silence every couple of minutes. I've had lecturers do this, and it's extremely frustrating.

Personally, I don't mind lecturers "telling" the answers straight away. Obviously give motivation and lead into it rather than just delivering it with no introduction, but I've found a lot of problems are simply too large or too non-obvious to take a straw poll from the class.

The best teachers I've had have been:

(i) Really bloody good at their subject. My probability lecturer (the Field's medallist Tim Gowers), when presenting the proof of Stirling's approximation, said something along the lines of "now, the normal method for proving this bit is a bit complicated, and on my cycle in this morning I thought 'There must be an easier way', when the following struck me. Now, I've never written this down before, so hopefully it works...", and of course laid out a simplification of a famous proof that worked perfectly. Inspirational. (See [http://gowers.wordpress.com/2008/02/01/removing-the-magic- fr...](http://gowers.wordpress.com/2008/02/01/removing-the-magic-from- stirlings-formula/))

(ii) Incredible elucidators. The ability to take a complex concept and pick exactly the right words or metaphors to explain it is a powerful ability.

I feel these criteria are far more important than asking the audience questions. You need both -- I've been taught by plenty of talented mathematicians who had no idea how to teach, and certainly a handful of great teachers who simply didn't have the aptitude to really grasp the more complex topics.

<comment><USER3> Agree. Asking questions in a class of 250 students is counter productive. But, here in India, it's against regulations in many colleges to have classes larger than 60 students. So, perspective :)

<comment><USER5> taught 300 students in Kabul, Afghanistan at one go (English Class) - what we did was we had PowerPoint, we had a microphone (connected to a mixer and JBL speakers) - and everyone had a sheet so they can follow the lessons, even had think-pair-share (using the PowerPoint as prompts) - had 5 of these classes going at the same time in Kabul University and 1 at the Kabul Polytechnic simultaneously. So you could ask 300 students all at the same time if you set it up properly :)

</comment></comment></comment></comment><comment><USER6> A good teacher provides the circumstances for students to teach themselves, and guides them in the right direction when they need it. I know I learn much better when I figure something out for myself than when someone just tells it to me straight.

The Socratic method was a good idea.

</comment><comment><USER7> Being able to relate with the student.

For instance after I learn a language and am trying to teach someone else the language I just can't see why the person is having trouble learning a certain concept of the language. It all seems so simple to me since I've already learned this language and it's hard for me to be able to empathize with the learner.

<comment><USER8> This is the key in my opinion. Just to elaborate a bit: you can think of knowledge as a mental structure. The good/great teachers are able to empathize with the students position of not having any of that knowledge, and can effectively build up the entire structure to make what they learned meaningful. The poor teachers just teach the final layer and wonder why people aren't getting it.

<comment><USER9> Couldn't agree more. Great teachers, at least in my opinion, easily recognize all the common pitfalls where people get stuck and help them accordingly.

</comment></comment></comment><comment><USER10> From what I've seen, good teachers are those who A) earn the respect of their students, and B) understand that different people learn differently.

Respect is important because no student will be engaged in a class with a teacher of whom he has a low opinion. At best the student will ignore the teacher and turn to an alternate, respected, source - ie textbook. At worst, the student will entirely disengage from the subject. To earn respect, I would suggest first that the teacher respect the student. A student who is respected will find class more enjoyable and engaging, knowing his ideas mean something.

Howard Gardner's theory of multiple intelligences states that there are ~8 different types of intelligences. A student who is exceptional in one of them will learn best in that one - and will usually be more interested in information reaching him through it. Out of the blue, it occurred to me that a file format analogy lends itself perfectly to the situation. A program may be able to open files of several formats, but it is built around one. This format will generally produce the best results for the program, even if it can interact competently with several other formats. Think excel (because I've had to deal with it recently). You can work with CSV files, certainly, but you can do much more with xls files. So teach your material in different formats. Have the content available in both visual and auditory formats as a default, but whenever possible (and you really want to reach for these!) make it available in kinesthetic, verbal, musical, and social formats as well. (I've missed a couple of Gardner's intelligences. But you get the idea.)

Teaching to multiple intelligences will also increase students' respect for you. If you help them to understand something (by teaching it in a format that naturally makes more sense to them), they will A) realize that you know what you're talking about, and B) see that you are a better teacher, likely to teach them more stuff.

I don't mean to imply that everyone is naturally interested in learning everything, and it is only the format of the data that is interfering -- but how much more enjoyable is working with a dataset if you don't have to write a parser for the input format? ;)

</comment><comment><USER11> I like a teacher that understands a huge amount about the subject and has enough control of the subject matter that they can tie in other material.

The teachers I learned the most from knew so much about the subject that they could explain things very simply. An example being in high school calculus - the teacher had a masters in pure math and was able to explain things in such a way that made everything seem simple.

Recently I started watching <http://ocw.mit.edu/OcwWeb/hs/geb/VideoLectures/> after seeing it linked here on HN. During the first lecture the instructor takes several tangents, and those tangents help clarify the subject matter to such an extent that I would say that is what makes him a good teacher.

<comment><USER12> Definitely agree, but I've had lecturers who take this too far. My intro. quantum physics professor was a brilliant and accomplished researcher at the bleeding edge of this field whose most basic concepts were deeply mysterious to us students. We appreciated the passion and keep knowledge that informed each of his tangents, but they were pretty impenetrable and very frequently distracted from the material at hand. I left the class thinking he was a brilliant man but fairly poor teacher. Then I had had him the next semester in thermodynamics and he turned out to be great! Certainly he had plenty of knowledge of the field, but he kept the class somewhere within the scope of the syllabus and relayed the foundations to us much more carefully. He focused on teaching, not the material itself.

The GEB lectures you linked are an interesting example in themselves. The early tangents that the teachers launch into on their own are certainly helpful, especially in such a free-form class. But student questions and tangents soon dominate that class too, to the point that I found it quite unbearable. When there is interesting material to be discussed they continually relapse into tired speculations of the "well maybe the universe is just a giant computer simulation" sort. The last lecture in particular is completely dominated, and in my opinion ruined, by questions from the most persistent student. A teacher needs to take charge and keep the class on track. Perhaps in a real class Justin would have.

</comment></comment><comment><USER13> The objective measure of a teacher's success must be what the class ended up learning regardless of what was or wasn't taught and all other random factors involved.

With that definition in mind, as a former pure math student, the best teaches I had were those who were

\- oddly enough, good story tellers! By which I mean, they sounded very much interested in what they were telling me. Their narratives always had at least a few mini-mysteries going on just like in a good story. They used one thing leading to another kind of explanations rather than stating unrelated facts one after the other. The narratives always seemed to have a underlying theme even when that theme was sort of irrelevant to the lesson at hand.

\- did not answer my question unless they properly understood what I was asking and why I was asking it. I hate it when I ask X and the teacher answers Y. The good teachers always went to great lengths to understand my questions.

\- good mentors and guides and could help your career along if you deserved it. the best ones would go out of the way to make the system reward the deserving.

I think those were the two crucial factors. I have had awesome teachers on all sides of the arrogance, style, humourous, lenience, liberal, demanding, thorough/good enough at the subject matter, popular, good natured/asshole spectra.

Ummm... Not all the good teachers did this, but I very much liked the ones who actually tested what I had learnt rather than whether I was paying attention in the class or taking good notes or pretty much was even present in the class or not.

</comment><comment><USER14> I like what mathematician Israel M. Gelfand says about the role of a teacher: "Students have no shortcomings, they have only peculiarities. The job of a teacher is to turn these peculiarities into advantages."

</comment><comment><USER15> listening is, I think, the most important.

My reasoning is simple. I had a lot of ok teachers who never listened to what the students had to say: the ones that could sit and _discuss_ a subject with us might have had less technical knowledge but we definitely learned a lot more, as a class, with them. I wouldnt be surprised if they probably learnt stuff from us too.

Passion - yeh agreed. Though on the other hand the best teacher we had was borderline manic depressive but was great because he took nothing seriously (and got so bored of the work he taught us lots of cool things: so perhaps that counts as passion for _some_ of the subject :D)

</comment><comment><USER16> While I sometimes hated the teachers that operated this way in retrospect I think the ones with the highest expectations were the best teachers. I say that with one exception, if you're going to have high expectations you best not be dry/boring/lazy about teaching the subject at hand. The best teachers know their shit, but also have the empathy and personal skills to use well placed analogies to "bring it down to our level". Perhaps this boils down to just having a sense of humor.

Strict, High Standards, Understanding/Human.

</comment><comment><USER17> This is an interesting question. Great teachers seems to be universally great across almost all students. So finding what makes them great and spotting it early (and eventually teaching it) would be great for the society.

I really enjoyed the bill gates Ted talk where he talks about this topic and (remember?) malaria.

<http://www.ted.com/talks/bill_gates_unplugged.html>

<comment><USER17> starts at 8:06 (before that it's about malaria)

</comment></comment><comment><USER18> I've always found that you can draw a box with four squares. On the top are "can explain material to moms" "can't explain material to moms". On the side are "clear communicator" and "unclear communicator".

The intersection of "can explain to moms" and "clear communicator" is what makes a good teacher for me.

In school some TA's could explain to moms but were unclear communicators so they didn't make good teachers.

In my work there are fantastic communicators in the sales team, but their grasp of the subject matter is such that they throw around lots of industry vocabulary but wouldn't be able to explain it to moms. This makes them bad teachers.

Great teachers/professors always had both great communication and a mastery of the subject. From my time at MIT the perfect example of this type of teacher/professors was Walter Lewin for 8.01 classical physics.

I highly recommend watching his lectures at [http://ocw.mit.edu/OcwWeb/Physics/8-01Physics- IFall1999/Cour...](http://ocw.mit.edu/OcwWeb/Physics/8-01Physics- IFall1999/CourseHome/index.htm) (the picture of him on the website says it all.)

edit: grammar.

</comment><comment><USER19> The ability to bring out the very best in their student(s) through whatever means. This goes for any mentor, coach, sifu, guru, etc.

The OP sparked a story that Teddy Atlas (boxing trainer for Mike Tyson, Michael Moore, Golden Gloves champ) once told at a book signing.

While training Michael Moore, he had to gain a certain amount of trust / respect from him. One particular instance that stood out in his memory was Michael's fondness of going to the shooting range and firing guns. Teddy never fired a gun in his life but accompanied him to the range.

At the range, Moore and some of his friends shot at the targets and eventually started to egg Teddy on. Teddy finally gave in, took the gun, walked right up to the target, and shot at the bulls-eye at point blank range.

He then turned to Moore and said "THAT's how I fire a gun".

Teddy told the audience he could remember a shift in Moore's behavior and demeanor when he later trained him - looser, more accepting of Atlas's advice. Teddy did what he had to do to bring the better boxer out of Moore.

Moral of the story - go shoot guns with your students :)

</comment><comment><USER20> 1) The teacher needs a thorough understanding of the topic being taught. I regularly use the reverse of this as a litmus while mastering a topic: I did not understand it deeply enough if I can't explain it to a complete layman so they can understand it.

2) Having a full duplex interaction. Talking AT people will make them only bored, but not smart. Watch for reactions, ask questions to force the student to explore the topic being discussed. If they can't answer, try to find out where their train of thought stalled, and elaborate. Of course this doesn't work very well in larger groups of students.

Usually, neither circumstances (smart teacher, small group of students) are given in compulsory education.

</comment><comment><USER21> I believe that a good teacher, first and foremost, should be very disciplined. In other words, authoritative and able, but not strict and overbearing. The teacher must disciplined enough to be able to keep students under control/on task and not let a class degenerate into a mob of individuals dallying on irrelevant topics. The teacher must be disciplined enough to be interesting in order to keep students' attention and keep them happy. The teacher must be disciplined enough to keep each student _enjoyably_ 'actively participating' in the class.

Most importantly, the teacher should be disciplined enough to 'sharpen his/her saw', to be constantly, incessantly learning more of his/her art.

</comment><comment><USER22> I believe a good teacher is one who adapts their teaching styles to both meet individual student's learning styles as well as expose them to other learning styles in order to broaden their learning abilities. A good teacher tells their students what they are doing and why, so that the student is more involved with the process and sees where the teacher is coming from. A good teacher does not believe that notes are effective for all students, same with daily work, or tests. A good teacher uses pretests to decide what subtopics they need to focus on or skip, as well as to track individual students progress. A good teacher does their best to get students invested in the learning process.

</comment><comment><USER23> * Try to be engaging. * Share with the class, not speak down. * Know how to steer the entire class / period / lecture * Confidence * Not re-reading what is in the book / on slides. * Most of the time should be welcoming of questions. * Should be respected by his class. If they are not, I think it makes it harder for them to be a good teacher and for people to see them as a good teacher. Everybody has there own unique role in helping a teacher be good, great or bad.

</comment><comment><USER24> A good teacher betters the student's ability to learn by themselves.

This involves a great many things, and sadly is contrary to the way 90% of teachers - not just the pros - are taught to imply knowledge.

That's it, and it's applicable to every situation, from Kindergarten to a personal mentor. Almost all the other comments here voice preferred methods of achieving that objective, but the objective remains.

</comment><comment><USER25> A good teacher is one who can perceive _where the student already is_ (what skills or interests he or she is bringing into the classroom) and can then lay out paths from that point to whatever the goal of the class is.

A mediocre teacher knows what he or she wants to teach but doesn't make that connection with the individual students. The result is someone who teaches a curriculum, not a person.

</comment><comment><USER26> The best teachers teach humility toward the subject matter.

For technology in particular, there is always so much more to learn that by not having humility there is no incentive to _want_ to learn, which is arguably the strongest point to make. Teaching is not one-way. Students have to want to learn just as much as teachers want to teach.

</comment><comment><USER27> I had a science teacher that would always find news articles related to what we were talking about in class. It was really great to see how this weird crap we talked about in class was actually being used in the real world, and how people were still studying things we didn't even know about it.

</comment><comment><USER28> \- passionate about his/her subject \- caring about the people he/she teaches to

</comment><comment><USER29> Belief that your students can learn to excel, with enough disciplined effort.

Coupled with the ability to convince them of the same thing

</comment><comment><USER30> I think a good teacher has the goal to make a student better than the teacher, in whatever ways the student will reach this stage.

<comment><USER4> "A teacher is one who makes himself progressively unnecessary" -- Thomas Carruthers

</comment></comment><comment><USER31> Good students. ;)

</comment><comment><USER32> The best college professors I have had were working professionals who taught on the side or people who otherwise still had some hands-on experience with the subject they were teaching. There's a reason we have the cynical expression "It's academic" as a means to dismiss something as irrelevant to the real world. I generally hate wasting my time on "Ivory Tower"/"It's nice In Theory" type of learning. That stuff not only doesn't prepare you for the real world, it's counterproductive because it's got you thinking stuff that doesn't really work and spending time on stuff that doesn't really work...etc.

</comment><comment><USER33> Depends also on where you teach - in front of a class? In a video lecture? One to one? It is certainly a skill to get a mob of teenagers listen to you for +30 minutes without anyone involved dying (in one way or the other).</comment>


Ask HN: Does it make any sense to sort HN comments by time - <AUTHOR>

While sorting posts by time and votes makes a lot of sense, sorting comments in that same manner seems wrong, perhaps even counter-intuitive (e.g., a new, perhaps inconsenqeuncial, comment becomes prominent just by merrit of being new). Shouldn't comments be sorted simply by votes? <comment><USER2> The two considerations seem to be: path dependency and natural conversation.

1-2-3-4 several points being made (natural)

220.127.116.11.1 several responses to the first point (never get to point 2)

4-2-1-3 Points no longer relate to each other in context (must be longer, self-contained)

Ultimately, you replace one type of "getting sidetracked" with another: "path dependency". Either way, the contextual information content is what you are _trying to preserve_. Without "exposure", for example, new comments in long conversations won't accrete upvotes to rise to the top, regardless of quality.</comment>


Continuous Delivery with AWS Beanstalk, CodePipeline and Terraform - <AUTHOR> https://stephenmann.io/post/continuous-delivery-with-beanstalk-codepipeline-and-terraform/ <comment><AUTHOR> This is my third post in a 30 day blog post marathon about building production applications. It describes how to build a full continuous delivery pipeline on AWS. I'd love to hear your feedback!

<comment><USER2> I really like how you use Teraform to automate the infrastructure. I'm currently reading about it and will use it at my next gig with AWS, so this is very useful for me. Thanks!

<comment><AUTHOR> Definitely let me know if you have any questions about Terraform / AWS. The remaining 27 blog post topics are still up in the air, so I'm looking for some writing material :).

One thing to note about these posts is that they take some shortcuts when addressing things like secret storage. If you're using this directly in a production application, make sure to read the noted sections and make those changes.</comment></comment></comment>


Show HN: A Minimal Open Online Course in Reasoning and Critical Thinking - <AUTHOR> http://theodorewiles.github.io/tuto/

<comment><AUTHOR> This is a summer project I'm working on. If anyone has any questions, feedback, or wants to get involved please let me know.</comment>


Women shown fewer online ads for high-paying jobs, study shows - <AUTHOR> http://america.aljazeera.com/articles/2015/4/16/study-ads-related-to-high-paying-jobs-favor-men.html

<comment><USER2> The algorithms are not only weighted towards the individual user - but also trends created by groups.

Take a 14-22 year range of males and visit the same sites as ages 40-65 and I guarantee they will also be shown different ads!

This 'study' doesn't really prove anything other than ads are targeted at groups and not just individuals and that the female group may be less interested in job ads - especially of higher paying jobs.

Which matches very well with employment data: [http://www.eeoc.gov/eeoc/statistics/employment/jobpat- eeo4/2...](http://www.eeoc.gov/eeoc/statistics/employment/jobpat- eeo4/2013/table1/table1.html)

Females heavily gravitate towards lower paying, social-level jobs such as Kindergarten teachers, Nurses, and Psychiatry. Because this is _statistically true_ of the gender, ads will take this into consideration.

TL;DR Making imaginary mountains out of imaginary ant hills because spinning statistics is easy when you have confirmation bias.</comment>


Eventbrite laying off nearly half its staff - <AUTHOR> https://techcrunch.com/2020/03/16/eventbrite-confirms-the-coronavirus-outbreak-will-materially-impact-its-business/ <comment><USER2> Wow, and this is right after the Yelp news: [https://news.ycombinator.com/item?id=22828154](https://news.ycombinator.com/item?id=22828154)

<comment><USER3> Eventbrite's annoucement was a day earlier [https://www.marketwatch.com/story/eventbrite-to-lay- off-45-o...](https://www.marketwatch.com/story/eventbrite-to-lay-off-45-of- workforce-because-of-coronavirus-2020-04-08?siteid=bigcharts&dist=bigcharts)

<comment><USER2> Oops, thanks for the correction. Wonder if there's a visualization to see all the big layoffs</comment></comment></comment>


Ask HN: What would encourage you to contribute? - <AUTHOR> Some time ago I got involved with a project because I thought it would be a good thing, and I had knowledge that I was happy to contribute.  It was niche, it was never going to make money, but it was a thing I thought should exist.
I'm interested to know - what makes people contribute?  If I stared a project of collective knowledge, intending to make it free and open, what would encourage you to offer a small amount of time and effort to contribute what you know?
All thoughts welcome. <comment><USER2> Working in a corporate environment, the contribution is forced if you need to extend the product for your enterprise benefit.

<comment><AUTHOR> I'm not talking about a corporate environment - in that case it's someone doing a job for which they are paid. I'm talking about volunteer efforts in a project for the collective good, in some sense similar to "Open Source".

I'm asking the HN community - what do _you_ look for in a project? What draws you to contribute to a project?

</comment></comment><comment><AUTHOR> Sorry: "s/stared/started/"</comment>


Gait Analysis from Satellite - <AUTHOR> http://www.schneier.com/blog/archives/2008/09/gait_analysis_f.html <comment><USER2> Hard to believe this could be effective. My gait varies wildly depending on how tired I am, whether it's a hot day, and how much of a hurry I'm in. Aside from that, it just doesn't seem like a gait could contain enough data to distinguish one person out of any significant number.

<comment><USER3> I disagree. I have recognized people from across a busy park and on the street based on their gait, known it was them long before I could make out any other recognizable trait. It's like your typing fist, or handwriting recognition: can be beat, but it's tough. I've conscientiously tried to change my gait and walking style, and I think it's kind of hard to do (I can still feel the distinctive elements of my gait coming through). It would be an interesting experiment to try to beat this.</comment></comment>


Go vs C++: Ray tracer (part 3) - <AUTHOR> https://kidoman.com/programming/go-getter-part-3.html

<comment><USER2> [https://kidoman.com/images/go-vs-cpp-after-both- optimized.pn...](https://kidoman.com/images/go-vs-cpp-after-both- optimized.png)

In this picture - am I right in interpreting it at 2048x2048 and 8 cores, that the optimised and tuned go code is nearly three times faster than the multithreaded optimised and tuned C++ code? How come the C++ is the same for 1C and 8C? Is this picture from one of the previous articles?

EDIT: (No, I'm wrong, the C++ is single threaded!)

It seems it's single threaded - and the last graph isn't showing the current level of C++ single threaded performance - which is ~36 seconds, with go at 21s for 8 threads. Final state of play is go at 18s multithreaded and C++ at 8s multithread and go at 81s single threaded and C++ at 36s single threaded. I read that from the third last graph.

It's difficult to understand this ending of the article, as the subtitle is:

"Further optimizations and a multi-threaded C++ version" and "Hurray multi- threading"

I suggest the order of the article be changed around to have a 'recap on single threaded C++' at the start, and then the new figures - so that it concludes in straightforward manner.

This quote from the article is wrong:

"C++ is not more than twice as fast than an equivalent Go program at this stage."

Correct me if I'm wrong, but in every case that I can see the C++ code will execute twice before the Go code is finished. It is more than twice as fast.

By the same logic this "almost" is also wrong: "From taking 58.15 seconds (single threaded), it has now dropped to a extremely impressive 36.36 seconds (again single threaded), making it almost twice as fast as the optimized Go version."

36s < 81s/2

<comment><USER3> "C++ is not more than twice as fast than an equivalent Go program at this stage."

I believe that is a simple typo, where 'not' was meant to be a 'now'.

<comment><USER2> Initially I thought that, but I can't explain the 'almost' that follows?

also it would be idiomatic to say "now more than twice as fast as" instead of "now more than twice as fast than".

<comment><AUTHOR> The god of all typos has been fixed :)

<comment><USER2> Well done, you should probably change the "almost" I pointed out to "more than" also.

</comment></comment></comment></comment></comment><comment><USER4> Someone posted something on Nimrod a while back with something totally related [0], and I think it is interesting it keeps getting passed over. I am not a lang expert, but I have become very curious about the multiple alternatives in the systems programming niche, and others. It has been developed at least since 2008 (with 0.6 branch in 2008)[1] and the Go language's first public debut in 2009 (I do not know how stable it was at the time and I gave up after going through the first pages of the whole commit history to get a better answer).[2] At the very least, they were developed in the same time frame, are nominally similar languages, and addressing a lot of the same use cases as Rust I suppose. Yet, unfortunately few bench marks include them.

I guess they will always be writing an indie language, but I wish more would check it out. As I continue to learn, maybe I can contribute code to his project. We will see if I ever get that far.

[0] [http://nimrod-code.org/](http://nimrod-code.org/)

[1] [http://nimrod-code.org/news.html](http://nimrod-code.org/news.html)

[2] [http://en.wikipedia.org/wiki/Go_programming_language](http://en.wikipedia.org/wiki/Go_programming_language)

<comment><USER5> >and I think it is interesting it keeps getting passed over.

If you think it's being passed over then you need to try and generate interest in the language, like posting articles about it you find, or if you find none, write one.

Same goes for benchmarking, it's unlikely that people who aren't interested in the language will write benchmark-versions for that language so it's up to those who are interested in it to provide them.

Which is what someone did in the Rogue Level Generation Benchmark where I recall Nimrod performed very well.

[http://togototo.wordpress.com/2013/08/23/benchmarks-round- tw...](http://togototo.wordpress.com/2013/08/23/benchmarks-round-two-parallel- go-rust-d-scala-and-nimrod/)

From my own very cursory glance I'm not quite sure why you would compare Nimrod directly to Go, I think it's more aptly compared to something like Rust, with both having optional garbage collector, generics, macros etc.

<comment><USER6> > If you think it's being passed over then you need to try and generate > interest in the language

I think that 616c is doing exactly this with his comment. Not everyone can write effective articles, and writing articles also takes a lot of time and effort. Writing comments advertising the language is usually the next best thing.

I wrote a couple of Nimrod benchmarks including the one you linked to. But it again takes time, and I would prefer to improve the language and its tools than to be writing tons of benchmarks.

I really wish more people gave Nimrod a serious chance because it is truly a brilliant programming language and it really deserves to get more exposure.

Nimrod's target user base very much clashes with Go's, I hear about Python programmers switching to Go because it reminds them of Python so much. Well, I don't see it. But Nimrod is definitely a fast and compiled Python with lots of extras.

<comment><USER4> Thank you dom96. I see you often in Nimrod forum posts and with cool code on Github. I look forward to brushing up on documentation and eventually starting to code in Nirmod. You and Araq have some inspired/inspiring conversations in language design on that forum. Keep it up, it is a very fruitful read.

<comment><USER6> That's nice to hear. Join the IRC channel or read the IRC logs ([http://build.nimrod-code.org/irclogs/](http://build.nimrod- code.org/irclogs/)) if you wanna read more discussions or take part in them in real time :)

</comment></comment></comment></comment></comment><comment><USER7> This has been circulated on the Rust-dev mailinglist:

[https://mail.mozilla.org/pipermail/rust- dev/2013-September/0...](https://mail.mozilla.org/pipermail/rust- dev/2013-September/005735.html)

Rust did quite well (given that it's not even production ready i'd say it's impressive): [https://mail.mozilla.org/pipermail/rust- dev/2013-September/0...](https://mail.mozilla.org/pipermail/rust- dev/2013-September/005750.html)

The only thing they noted was that the Go version "cheated" by precomptuing some values which someone removed to make the algorithms the same.. maybe kid0m4n can comment on this :)

<comment><AUTHOR> I was looking at the Rust-dev mailing list before going to sleep :)

I would argue that it is not cheating "anymore" as both the Go and C++ version are now equal. In fact, I wanna compare how Rust performs in this exact same test with all optimizations applied. Studying those optimizations will be fun itself.

I have also explained why optimizations are perfectly fine (IMHO) here:

[https://github.com/kid0m4n/rays#why-optimize-the-base- algori...](https://github.com/kid0m4n/rays#why-optimize-the-base-algorithm)

<comment><USER7> Ok, but with different algorithms you are not testing the languages/compilers anymore but the algorithms ;)

I understand that now when the C and Go version we can't compare with the rust version anymore uless someone applies the same changes.. anyway, t was a very interesting read on the rust ML and frankly i was surprised to see rust fare so well

<comment><AUTHOR> True...

But, I guess algorithmic advances will happen much less frequently compared to other micro optimizations. And it will keep things interesting across the board.

</comment></comment></comment></comment><comment><USER8> Looking at the github it seems you benchmark GCC 4.8.1 vs. go 1.2rc1. Numbers for Go look promising if one considers that Google's Go implementation does not even have an advanced optimizer yet (in contrast to GCC).

>c++ -std=c++11 -O3 -Wall -pthread -ffast-math -mtune=native -march=native -o cpprays cpprays/main.cpp

Have you tried -O2? -O3 often generates slower code.

>i7 2600

Intel's compiler would probably generate faster code. That's why you can't just say "Go vs C++". You could let Go win this fight by compiling the C++ with Digital Mars. It is also a C++ compiler but it lacks a modern optimizer and the generated code is usually much slower.

<comment><USER9> Few remarks:

-mtune is redundant with march=native turned on;

-use -Ofast instead O3/ffast-math it turns some more options as well (although theoretically it might behave in non-standard way with float computations, you need to test this, it wasn't ever a problem for me)

-add -flto it often helps significantly

-it probably won't matter for simple program but you may try compiling with: -Ofast -march=native -flto -fprofile-generate; then run the program (it will generate .gcda files) and then recompile with the same options and -fprofile-use;

EDIT: Some quick tests shows that all the options I mentioned help (MinGW, gcc 4.8.1). Original time on one thread was 3.670s, Ofast and -flto takes it to ~3.630s and adding PGO moves it to 3.46s (there is some variance with all of those) - whooping 5-6% improvement overall :)

<comment><USER10> How would -flto help when all the code is in one module?

<comment><USER9> All I know about gcc flags is from testing a lot of combinations of them. I don't really know how -flto works but maybe it does something for functions from included files ?

</comment></comment></comment></comment><comment><USER11>
        go build -gcflags -m

After some quick googling I can't find what the "m" flag does. Can anyone shed some light?

<comment><AUTHOR> Author of the article here

It helps in finding out details of what the compiler (Xg) thinks of various funcs inlining applicability (is that even a word?)

<comment><USER5> Speaking of gcflags, did you try Go with gcflags=-B to see how it performs without bounds checking.

I know this isn't 'the right way' given that Go is supposed to be a safe language but it would be interesting to see how much difference it would make.

<comment><AUTHOR> Have not tried that... will give it a shot

But I guess we are then going away from idiomatic Go

<comment><USER5> I guess, it's an unsupported compiler option (as in it can disappear any new release).

I looked at it more as an option for when you want to cram out possible extra performance of release builds.

</comment></comment></comment></comment></comment><comment><USER12> I wonder how the C++ version would do with TBB. Also I think it would be more interesting to compare more memory intensive programs, I think C++ would shine even more with all the optimizations opportunities there would have.

<comment><USER12> And what about adding the following compile options:

-m64 -msse3 -mfpmath=sse?

<comment><USER13> -m64 and -mfpmath=sse are defaults on x86-64, -msse3 is enabled implicitly by -march=native if the machine supports SSE3.

</comment></comment></comment><comment><USER14> vector S(vector o,vector d, unsigned int& seed) {}

int T(vector o,vector d,float& t,vector& n) {}

not sure why he's copying the vectors here.

<comment><USER15> Also, he's mostly passing by value.

<comment><USER16> Passing by value in C++ can offer speed increases when the function will be copying the object anyways, due to move semantics, constructor eliding, etc.</comment></comment></comment>


I come not to praise RAID-5... (Why RAID-5 isn't evil) - <AUTHOR> http://www.standalone-sysadmin.com/blog/2012/08/i-come-not-to-praise-raid-5/ <comment><USER2> The problem is the stupid way raid systems (or at least linux md) handle these inevitable UREs. Make a raid5 of 2TB disks, use it for a bit, and it's virtually guaranteed there's one bad sector on each disk (or at least, you'd get one URE on each disk when reading them all). Now have a drive fail. No problem, you think, I'll replace that drive and rebuild. Put in the replacement, kick off the rebuild process. Linux will hit a URE on one of the drives, kick that drive out of the array, and refuse to rebuild any more. You can't even mitigate this by doing a weekly verify of your disks, because if that verify happens to run into UREs on two separate disks, bam, bye bye data.

This is not theoretical, it happened to me; maybe there are some magic parameters that get around it, but I read the available tutorials; if I made a mistake, others have probably made it. I asked a kernel dev how to solve this problem and he suggested a cronjob that runs md5sum on each of the underlying disk devices. I wish I was joking.

Fortunately, there is a simple solution, ZFS. A raidz1 will recover perfectly from the same scenario (again, this is not theoretical, I've done it); you will lose the particular blocks that suffered the UREs, but no others (and ZFS can tell you which files were affected). And you can run the "zfs scrub" command regularly to catch any sectors that've decayed before you lose a drive and can no longer use parity to restore them.

<comment><USER3> You're supposed to run dm scrubs as well, if you don't it is possible that you have a bad sector somewhere on your disks.

See <http://en.gentoo-wiki.com/wiki/RAID/Software#Data_Scrubbing></comment></comment>


NAFTA: Don't Trade Away the Internet - <AUTHOR> https://act.openmedia.org/DontTradeAwayTheInternet <comment><AUTHOR> Detailed analysis in this article:

[http://www.michaelgeist.ca/2018/08/crunch-time-in-the- nafta-...](http://www.michaelgeist.ca/2018/08/crunch-time-in-the-nafta- negotiations/)

 _> ... copyright, patent, IP enforcement, and digital policy rules ... The U.S. appears to be pushing for a TPP+ approach – the TPP provisions plus some additional changes it did not get as part of those negotiations. This is notable since Canadian authorities admitted that the TPP went far beyond any previous Canadian free trade agreement. The Canadian starting point is presumably the CPTPP, the revised TPP where Canada successfully argued for the suspension of some of the U.S.-backed provisions._

<comment><USER2> _Limit governments' ability to require disclosure of proprietary computer source code and algorithms, to better protect the competitiveness of digital suppliers._</comment></comment>


Is Bitcoin breaking up? - <AUTHOR> http://www.wsj.com/articles/is-bitcoin-breaking-up-1453044493 <comment><USER2> The Bitcoin community is rapidly coalescing around an effort to increase the maximum allowed blocksize to 2MB as soon as possible. This increase is being implemented in a new client, Bitcoin Classic [0], which is a fork of Bitcoin Core that changes only the single line of code that sets the blocksize limit.

Bitcoin Classic was created by Jonathan Toomim, an American miner and developer who went to China to talk directly with Chinese miners and to test the effect of bigger blocks on mining operations behind the Great Firewall. Gavin Andresen, Bitcoin Core's former lead developer, and Jeff Garzik, another prominent Core developer, as well as many others, are collaborating with Toomim on further changes that Bitcoin Classic may implement later.

The big difference between Bitcoin Classic and Mike Hearn's failed Bitcoin XT is the concerted effort by the people behind Classic to garner the explicit support of miners (and other important members of the Bitcoin ecosystem) for a blocksize increase. At my last check yesterday, mining-pool operators representing 72% of global hashing power had explicitly expressed their support for Bitcoin Classic's blocksize increase, as had the operators of many popular exchanges, web wallets, and payment providers. (There is a growing compendium of prominent supporters on Bitcoin Classic's website; the complete list is on the project's Github page [1].)

That means that Bitcoin Classic is very likely to break Core's monopoly on the protocol soon. The blocksize increase, and the fork of the blockchain that it will create, is tentatively scheduled to take place after March 1. Get ready.

(By the way, the best sources for information and discussion about the Bitcoin world are now the /r/btc sub-Reddit and the discussion forums at bitcoin.com and bitco.in; the community's former hubs, /r/Bitcoin and bitcointalk.org, are both controlled by the same operator/moderator, and he has strongly censored and perverted all discussion of changes to the protocol that are not supported by Core's intransigent cabal of developers.)

0\. [https://www.bitcoinclassic.com](https://www.bitcoinclassic.com)

1\. [https://github.com/bitcoinclassic/website/issues/3](https://github.com/bitcoinclassic/website/issues/3)

<comment><USER3> The way XT seems to have failed yet Classic seems to be suceeding seems odd to me.

Is all it took _really_ just to have a developer fly out to China and talk to a hanful of people? Seems like there's a lot more politics going on behind the scenes.

In any case, fixing the blocksize limit will be good, but I think the real value in Classic is breaking the perceived monopoly Core has and moving to a healthier political setup. Many people were absolutely unwilling to even _talk_ about XT (or as you mention, allow others to talk about XT) because "OMG it's not Core!". That argument will be a lot less viable if everyone's moved to Classic.

<comment><USER4> No. It took a sharp fall in the BTC price.

This narrative that Gavin and I were unwilling to compromise is deeply unfortunate. BIP 101 originally started with a 20mb limit+growth. That was based on some calculations Gavin did. At that point the Chinese miners started saying they couldn't accept 20 because of the firewall, but eight would be OK. They put announcements of their support for eight megabyte blocks in their coinbases, etc.

Why eight? Because it's a Chinese homonym for "prosper" or "wealth":

[https://en.wikipedia.org/wiki/Numbers_in_Chinese_culture#Eig...](https://en.wikipedia.org/wiki/Numbers_in_Chinese_culture#Eight)

It crops up in the Chinese Bitcoin community all the time. So this choice obviously wasn't based on any kind of scientific analysis. Having Bitcoin protocol constants be decided by rhymes would obviously have been an embarrassment, but nonetheless, we compromised and did it.

After Core rejected the now-modified BIP 101, Gavin and I released XT together. At this point the miners changed their tune. They announced they would never run anything except Core, period, end of story. This "requirement" had not been specified before. From both speaking to them personally (I have had various phone calls with miners around the world, including miners in China) and their public statments, they made it clear that their loyalty to Core was absolute and no matter what changes we made to XT, they would never run it. Thus compromising further was pointless.

Why is Classic different? It wasn't, just one or two days ago. After I released my article, I was CCd on a private thread where KnC Miner published an "open letter" and suggested switching to Classic. The other miners shot him down immediately saying they wanted the change to come from Core. Then the price started sliding, and they started reversing their positions. Suddenly, Classic was acceptable whereas just hours before it had not been.

<comment><USER5> _> No. It took a sharp fall in the BTC price_

And the trigger for that was your medium article the other day. :-)

And since, block size/scalability was the key point in your post. Would you be willing to re-join Bitcoin, since what you wanted would be achieved? Even if its Classic and not via XT.

Perhaps, my question may come across as naive. But looking at it from outside (reading /Bitcoin & /btc & etc), it would definitely clear a lot of air, and be good for Bitcoin.

</comment></comment></comment></comment><comment><USER6> _" Mining already is so expensive that it takes company-sized investments to participate"_

This is not true at all. I do not understand why journalists repeat this claim. It is like saying "investing in the stock market is so expensive that it takes company-sized investments to participate". It is not true. Whether you invest $1000 or $1 million your returns—as a percentage of your initial investment—will be the same regardless if this is the stock market or Bitcoin mining.

In fact I would say the opposite is true: small miners have a slightly better profitability than large-scale miners, because they are so small they do not even have to cover certain costs. A large-scale miner will have to pay for hosting or for building a data center but a small miner will host the hardware in his house at no extra cost. A large-scale miner will have to hire staff to maintain the miners but a small miner will maintain his machine himself.

Of course profitability depends a lot on electricity costs, but again you might be a small miner and live (for example) in Douglas County, Washington and pay a domestic electricity rate of 2.5 cents per kWh, and you will beat many large-scale miners who almost always pay more (see my previous comment on this: [https://news.ycombinator.com/item?id=10907584](https://news.ycombinator.com/item?id=10907584)).

Large-scale miners may get a financial advantage by buying hardware in bulk, or manufacturing it themselves, but this is a cost saving of at most 20 or 30%, and this certainly does _not_ make mining so expensive that small miners cannot participate.

<comment><USER7> I was under the impression that specialized ASIC based miners have made even GPU mining relatively pointless.

<comment><USER8> Not really relevant- small miners can buy ASICs too.

</comment></comment></comment><comment><USER9> > The problem is bitcoin is open-source software, so any change has to be > approved a majority of the community, and it hasn't been able to agree.

The author has conflated a couple of things. That is the exact opposite of how OSS works. The reason why the majority need to adopt is purely from a "one true coin" standpoint—there is nothing stopping forks or new alt coins from spinning out.

</comment><comment><USER10> The current situation reminds me a lot of the time when Firefox replaced Internet Explorer as the most popular browser. And of the time when Chrome replaced Firefox as the most popular browser.

Currently there is only one Bitcoin implementation. And the developers a) refuse to implement what users want. And b) implement bloat that users dont't want.

So Bitcoin will "break up" in a similar way the WWW "broke up" when new browsers were introduced.

It's a good thing.

<comment><USER11> Internet Explorer is still the most popular browser among users worldwide. Chrome is the most popular browser among certain techies. Chrome is also popular among users tricked into installing it via forced bundleware with Java updates, free antivirus engine updates, and (ironically) Flash plugin downloads for Firefox.

<comment><USER12> [https://en.wikipedia.org/wiki/Usage_share_of_web_browsers#Su...](https://en.wikipedia.org/wiki/Usage_share_of_web_browsers#Summary_tables)

</comment></comment></comment><comment><USER13> "Bitcoin is breaking up" = Buy like a madman. The blocksize cuts down on the transaction spam making transactions non-free, maybe a few cents each. This is not optimal and certainly needs to fix in the next few years, because it harms microtransactions.

But "breaking up" ? That's just sensationalist bullshit. That's like saying Netflix is on the edge of bankruptcy because it's raging success has temporarily killed HD streaming in Australia & Antarctica. As a community building exercise, this debacle is great for Bitcoin, it really shows no one is in control and consensus to change the rules of the game is very hard to reach.

<comment><USER14> The fact that every transaction ever is saved for ever harms microtransactions. Luckily nobody actually uses Bitcoin, especially not for microtransactions. The network can't handle more than 3 transactions a second, and luckily it doesn't have that volume. Lightning is the only thing that can actually make Bitcoin more performant than a small VPS with postgres, if it is something that people want.

Also, "Lightning-like" channels aren't unique to Bitcoin- they can be implemented on Turing-complete currencies, and even on bank servers[1]

1\. [http://altheamesh.com/blog/universal-payment- channels/](http://altheamesh.com/blog/universal-payment-channels/)

</comment></comment><comment><USER15> I think these are very exciting problems. The bigger the problem the more creative the solution.

It took us two thousand years or so to go from using the weight of a bale of barley to represent the value of silver, bronze, copper to eventually actual coinage.

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

Maybe digital currency takes 15-years or so to work out the problems much like they did with barley to coins but it is definitely the future.

</comment><comment><USER16> Bitcoin is already specified. I doubt that nodes, miners, and the bitcoin richlist will converge around any alternative spec (whether XT or Litecoin) and decide to call it "bitcoin". However, the ecology of decentralized digital assets inspired by the nakamoto consensus has already fragmented and will continue to do so at an exponential rate. As a rough estimate let's say there are already 1000 bitcoin clones that have more than a handful of nodes and miners. I would not be surprised to see that number increase to 10,000 within 2016. That some of the individuals associated with Bitcoin Core are moving onto other projects is not going to mean very much one way or another for the original bitcoin spec, though we may see the Core project change. There are other alternatives for those who want to run an implementation of the original bitcoin spec. ([http://thebitcoin.foundation/](http://thebitcoin.foundation/)) And there are an exponentially growing number of alternative networks for those who do not.

</comment><comment><USER17> The block size issue is missing the point. The use case that matters for Bitcoin right now is converting yuan to Bitcoins, then Bitcoins to dollars. That's one way people in China get around China's exchange controls. (Note that mining in China also is used to move yuan to dollars.) Those are big transactions. They'll get through regardless of the block size.

Bitcoin as a retail currency doesn't seem to be going anywhere. Robocoin, the Bitcoin ATM company, just went bust. Lots of companies nominally accept Bitcoin, but that's just a shopping cart program talking to Coinbase or Bitpay for immediate conversion. The retail transaction volume is small. Given the volatility problem, the conversion costs, the risk of loss, and the general headaches, Bitcoin is a lose vs. paying 1% - 3% for credit card processing.

<comment><USER18> > They'll get through regardless of the block size.

They'll get through until China bans it.

China has a classic trilemma : let the currency depreciate, give up on monetary stimulus, or institute capital controls.

Pick any 2 : [https://en.wikipedia.org/wiki/Impossible_trinity](https://en.wikipedia.org/wiki/Impossible_trinity)

To date, they've shown pretty good success in controlling the Internet and Bitcoin is no different.

I don't think Bitcoin advocates have necessarily thought through the implications if countries were no longer able to control capital movements, hence pursue independent monetary and currency policies. As the euro experience has shown (also the history of the gold standard), it's not necessarily an improvement in monetary arrangements.

<comment><USER17> _" They'll get through until China bans it."_

China's leaky exchange controls are a strange subject. So much is leaking that investors in China are buying large amounts of property in London, New York, and Miami, but not occupying it, as a way to stash cash. However, the outflows aren't big enough to affect the value of the yuan.

The People's Bank of China (comparable to the Treasury Department plus the Fed) hasn't cracked down as much as they could. There seems to be an internal policy disagreement within China's government over whether the yuan should be an international currency. To be used internationally means allowing convertibility and giving up some control, and facing the possibility that China's domestic economy can be yanked around by world events. But convertibility increases China's external economic power. Back in 2013, there were announcements of convertibility within the next year. In November 2015, the target date was 2020.[1] China's stock market crashed last week, which may prompt tightening up on capital outflows again.

Much of what happens with Bitcoin is driven by these far larger issues.

[1] [http://www.bloomberg.com/news/articles/2015-11-03/china- deve...](http://www.bloomberg.com/news/articles/2015-11-03/china-development- plan-to-promote-tech-capital-markets-reform)

</comment></comment></comment><comment><USER19> What is the downside to moving from 1MB to 2MB blocksizes, instead of moving up to 8MB or 20MB? If the reasonable maximum number of trades per minutes is 3 at the moment, does a doubling of the blocksize merely double the allowable number of trades per minute, or is it somehow a logarithmic change?

<comment><USER20> It does just double it. The problem with increasing it more is propagation speeds around the planet (this needs to be as fast as possible or another miner may get the block reward), especially if the miner is sitting in china.

<comment><USER19> So is increasing the blocksize beyond 2MB expected to favour Chinese minors more so than average users? And if that's the case, would you mind explaining how so, exactly?

<comment><USER20> The dynamic is not one in which when miners win, users lose. The issue is that users want more transactions per second and therefore want bigger blocks to be created, however, when miners create larger blocks, they have a hard(er) time propagating them to the entire network and thereby run the risk of their block being orphaned (someone else's block will be accepted first, and the miner's block and work done on that block will be wasted).

<comment><USER19> Oh I see, which is why Chinese miners would be especially hesitant about moving to larger block sizes, because the GFoC significantly limits speeds.

</comment></comment></comment></comment></comment><comment><USER21> Not sure due to the paywall.

<comment><USER22> Google News link which bypasses paywall: [https://www.google.com.au/url?sa=t&rct=j&q=&esrc=s&source=ne...](https://www.google.com.au/url?sa=t&rct=j&q=&esrc=s&source=newssearch&cd=1&cad=rja&uact=8&ved=0ahUKEwjTvqun2bHKAhVFX5QKHeCSDHQQqQIIHCgAMAA&url=http%3A%2F%2Fwww.wsj.com%2Farticles%2Fis- bitcoin-breaking- up-1453044493&usg=AFQjCNGU5YDWRdJ5-1ZcGer_j1BM9J-Zyw&sig2=zhlVV8upWsewf0vJew98bg)

<comment><USER21> I'd prefer a site that doesn't require a hack to read the text.

</comment></comment></comment><comment><USER23> If you want to read the article without being blocked by WSJ's paywall just Google the name of the article and click on the link. More often times than not you can get to a WSJ article via GoogleNews even if it is pay-restricted.

<comment><USER24> If you click the link titled "web" under the title, it will do that for you.

<comment><USER25> Wow when'd that get there? That's incredibly useful. Thanks DanG et al!

</comment></comment></comment><comment><USER26> Hi Mike. I met you at San Jose conference in 2013. I remember very clearly- you were the most dashing, handsome, well spoken and charismatic person at the entire conference, a very rare find in the developer community. I was just finding my bearings in this technology at the time, I was a long way from home, and remember the confidence it instilled in me, knowing that someone like yourself was involved in this. But as I followed your contributions to the effort in the months after the conference, it was so confusing- nothing you did really seemed to help, your suggestions were widely panned by most of the best technical minds, and you seemed to devote your energy to platforms that are largely made up of newbies.

If I was a handler for an organization that wanted to insert an asset into the bitcoin community, someone like you would be the ideal candidate. Someone that young people, new to the community, naturally respect and will listen to. Strange how you've spent so much time cultivating your standing with people like that, while your reputation plummeted among the people that understood the network (and had far more skin in the game than you did, because if I remember correctly you never foresaw the spectacular growth of the bitcoin network, never thought it would work, and therefore did not really have that many coins yourself). I have a long history of having a keenly skeptical eye, I have solid critical thinking skills, and I bat away wacky theories all day long. I have NEVER, in any forum, posted any comment of any type in regards to bitcoin, this is my first one- I believe in speaking humbly, thinking deeply and acting bravely. While the evidence that your motives in the bitcoin network may not be what you say they are is only circumstantial, it has been accumulating for some time now. And the strongest allegations have come from the people who have the best reputations for clear thinking and scam calling. I mean you no ill will Mike, regardless of your intentions. But the forces at play and the implications of our technologies' reach is so spectacular that it is quite reasonable now for us to assume that smart and highly motivated people will appear who will use great cunning to harm the network. Every spidey sense I possess has been going off about you for a long time now. I can remain silent no longer.

J'accuse Mike, J'accuse.

<comment><USER27> Personal attacks (and this is a weird and creepy one, something else that Bitcoin doesn't seem to lack for) are not allowed on HN. Please don't post them here, especially when your "keenly skeptical eye" can come up with nothing worse than "dashing, handsome, well spoken and charismatic".

(This is not an opinion about anything to do with Bitcoin or who, if anyone, works for "an organization".)

We detached this subthread from [https://news.ycombinator.com/item?id=10921219](https://news.ycombinator.com/item?id=10921219) and marked it off-topic.

</comment></comment><comment><USER28> > Is Bitcoin Breaking Up?

If they have to frame a headline as a question, you can usually assume the answer is "no"...

[https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headline...](https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines#Betteridge_.282009.29)

 _The reason why journalists use that style of headline is that they know the story is probably bullshit, and don't actually have the sources and facts to back it up, but still want to run it._

<comment><USER29> Narrator's law of headlines is : one should prepend "We would like you to believe that" to any headline that ends in a question mark.

</comment></comment><comment><USER30> [https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headline...](https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines)

</comment><comment><USER31> This headline is a great "grabber" for older bankers and financiers. It implies that the whole "bitcoin thing" is finally blowing over, without going out and saying it. Music to their ears.

<comment><USER32> Bankers and financiers are nowhere near as worried about bitcoin as many bitcoiners seem to think.

<comment><USER33> Bankers and financiers has bigger things to worry about in 2016</comment></comment></comment>


How to Make a Computer Operating System - <AUTHOR> https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System <comment><USER2> Another great free OS resource is MIT's 6.828: Operating System Engineering.

"This course studies fundamental design and implementation ideas in the engineering of operating systems. Lectures are based on a study of UNIX and research papers. Topics include virtual memory, threads, context switches, kernels, interrupts, system calls, interprocess communication, coordination, and the interaction between software and hardware. Individual laboratory assignments involve implementation of a small operating system in C, with some x86 assembly."

Lecture notes from 2012: [https://ocw.mit.edu/courses/electrical-engineering- and-compu...](https://ocw.mit.edu/courses/electrical-engineering-and-computer- science/6-828-operating-system-engineering-fall-2012/)

Video lectures from 2014: [https://www.youtube.com/watch?v=kDRHsNauoxk&list=PLfciLKR3Sg...](https://www.youtube.com/watch?v=kDRHsNauoxk&list=PLfciLKR3SgqNJKKIKUliWoNBBH1VHL3AP)

</comment><comment><USER3> Note that this book is half-finished and work on it has been discontinued (as of 2 years ago). If you want a good resource on OSdev, start here: [http://wiki.osdev.org/Main_Page](http://wiki.osdev.org/Main_Page)

<comment><USER4> Got another great resource here [http://www.brokenthorn.com/Resources/](http://www.brokenthorn.com/Resources/)

</comment></comment><comment><USER5>
        > Chapter-1
        > Chapter-2
        > ...
        > Chapter-8
        > chapter9

Aaargh!!

</comment><comment><USER6> I wish people would stop teaching C/C++. I want a book that teaches writing OS using Rust.

<comment><USER7> And what is a good book on writing an OS using Rust?

<comment><USER8> There's [http://intermezzos.github.io/](http://intermezzos.github.io/)

<comment><USER9> Maintainer here! We actually have more developed than the tutorial lets on; at Rust Belt Rust next week, we're running a six-hour class, so focus has been on material for that, rather than on writing more book chapters. I hope to get them out afterwards, though.

There's also some open PRs with more functionality too! Basically, check out the kernel repo if you finish the book and want more :)</comment></comment></comment></comment>


Ask HN: How fast should a programmer be typing? - <AUTHOR> OK, I know it is not about the speed but the content. But just wondering peoples' thoughts since we are typing all day. When your in the zone whats your speed? My non-developer friends and I use to race typing and they would be like, "you are a developer shouldnt you be faster" - I wasn't <comment><USER2> If you're able to type really fast while programming what you're doing should probably be automated.

</comment><comment><USER3> I think learning to type quickly is important. Not so much because of the speed, but because the muscle-memory required to type without looking allows one to not become distracted by the act of typing. From this perspective it is more important to be able to type without looking with few mistakes than worrying about words-per-minute.

That being said, I just tested myself and apparently I'm at 116 WPM this was higher than I expected.

<comment><USER4> I'm stunned. drakonka also said he does above a 100 WPM. I've done 3 tests on different sites right now, and I do between 50 and 60 WPM. How can you type twice as fast? Are you using something other than qwerty? Does your language have frequent short words?

<comment><USER3> No, standard qwerty keyboard. The test I took was on TypingTest.com (no affiliation, just first result in a web search) and chose the two minute, Aesop's fable test.

</comment></comment></comment><comment><USER5> I don't tend to type fast when I code because I stop to think a lot. If I time myself on one of those typing speed challenge sites I usually get up to maybe 140-145 WPM, but in real life it never works that way. I type faster than I think, but there are very few typing situations in the real world where you aren't required to think at the same time.

</comment><comment><USER6> TBH I've never been too proud of code I've typed quickly; the best stuff has always had about 10 or 12 revisions after I've made it, with lots of thinking about it in between.

Unless y'all are a bunch of Excel sorcerers, slow touch-typing should be all that's necessary.

</comment><comment><USER7> If you can type without much thought, then I wouldn't worry about increasing your typing speed. Touch typing is nice because you spend less time thinking about the physical action of typing. 50wpm and 100wpm make little difference.

</comment><comment><USER8> Eh. I type about 150wpm for a sentence or two already composed in my head. 100 when having to think ahead while writing an email. Probably about 30 while programming because that many more cycles are spent in the brain and fewer in the fingers. Not just on logic, but also hesitating to make decisions like "what should I name this variable?"

</comment><comment><USER9> As fast as your speed of typing will allow you not to think about typing, i.e. your speed doesn't get in the way of your thought.

</comment><comment><USER10> As quickly as necessary, but no faster ;)

</comment><comment><USER11> Touch typing isn't all it's cracked up to be. Nor is speed. Accuracy counts.</comment>


Picking Colors Optimally: An Optimization Problem in Python - <AUTHOR> http://www.usrsb.in/picking-colors.html

<comment><USER2> The article's method contrasts colors based on the numerical separation of their RGB values. Unfortunately, human color perception doesn't necessarily follow this model. There are some color pairs that would be judged very far apart by this method, but that a human won't necessarily perceive as contrasting.

Also, there's the issue of size. Medium-sized adjacent objects are perceived as having more contrast than large or small ones:

[http://en.wikipedia.org/wiki/Contrast_(vision)#Contrast_sens...](http://en.wikipedia.org/wiki/Contrast_\(vision\)#Contrast_sensitivity)

So this is a more complex problem than simply choosing colors by number.

<comment><AUTHOR> You're absolutely right! :) It would be interesting if someone could extend this to look at how different color representations affect the results, such as using HSL rather than RGB. I tried to factor out the getSuccessors function and evalSuccessor as much as possible to make this kind of experimentation easy.

<comment><USER3> There are many programs that algorithmically generate palettes based on the HSV color space. Note that since complementary colors are calculated by hue alone (a single dimension), there is no need for optimization.

Here is a web-app that I use often:

<http://colorschemedesigner.com/></comment></comment></comment>


EO – A truly object-oriented programming language - <AUTHOR> https://github.com/yegor256/eo <comment><USER2>
      if:
          equals: amount, 0
          error: "Division by zero"
          div: total, amount

This looks like lisp with a character set even more restricted than ascii.</comment>


"Little Languages" by Jon Bentley (1986) [pdf] - <AUTHOR> http://staff.um.edu.mt/afra1/seminar/little-languages.pdf <comment><USER2> Counterpoint: "A Universal Scripting Framework, or: Lambda: the ultimate "little language""

"Abstract. The "little languages" approach to systems programming is flawed: inefficient, fragile, error-prone, inexpressive, and difficult to compose. A better solution is to embed task-specific sublanguages within a powerful, syntactically extensible, universal language, such as Scheme. I demonstrate two such embeddings that have been implemented in scsh, a Scheme programming environment for Unix systems programming. The first embedded language is a high-level process-control notation; the second provides for Awk-like processing. Embedding systems in this way is a powerful technique: for example, although the embedded Awk system was implemented with 7% of the code required for the standard C-based Awk, it is significantly more expressive than its C counterpart."

[http://www.ccs.neu.edu/home/shivers/papers/ll.ps](http://www.ccs.neu.edu/home/shivers/papers/ll.ps)

<comment><USER3> I'm torn. I think most polyglot projects I deal with are overly complicated. However, I also feel most embedded languages I deal with are overly complicated.

Some have clearly worked out. Format strings, for example, are much more appealing to me than the equivalent code. Not even getting into the crazy abilities of common lisp. (Seeing what you can accomplish just from the format string, I really wonder why it isn't more widespread.)

And regexes, despite all of the well justified jokes about them being problematic, are often much better than the code that would replace them. It is a shame there is not a BNF equivalent, sometimes.

But it seems most "inner languages" I have had the pleasure to deal with personally have not truly helped. My suspicion is that me and my colleagues just tried to do it all. Knowing when to say "not supported" in a toy language is tough. And the penalty for not doing so, is catastrophic, it seems.

<comment><USER4> Agreed. Regexps and format strings are cool. Regarding small, dedicated languages, I also like SQL and (to a lesser extent) CSS selectors.

<comment><USER5> I think the LittleLanguages [0] should be further subdivided into: * languages for describing something (e.g. regular expression, format strings, graph .dot format, LaTeX math equations, etc.) that are usable both from standalone UNIX tools, and from inside programming languages * languages with a dedicated tool (awk, etc.) that are not widely available embedded inside other programming languages. Usually these languages allow you to perform some actions / transformations

I think both papers agree that the former is "good" (the reimplementation of awk in Scheme uses regular-expressions).

In the counterpoint paper it turns a LittleLanguage (Awk) into an Embedded Domain Specific Language by embedding it inside Scheme.

SQL is more difficult to categorize: I think the SELECT expression should be considered a LittleLanguage, however the UPDATE/INSERT part is better when having a full programming language available (see procedural languages inside SQL / triggers, which hint at the limits of the base SQL language).

[0] [http://wiki.c2.com/?LittleLanguage](http://wiki.c2.com/?LittleLanguage)

</comment></comment></comment></comment><comment><USER6> Little languages are good for little programs. Once your program grows up, a little language starts holding it back. Your program needs a language for grown-ups. The truth is all little languages are quite primitive, and this is by design. Little languages are designed for a specific narrow purpose. Beyond that narrow purpose they are much less expressive, clunky and inefficient.

Real life tasks often require more than one little language. You can start with a simple text extraction using Awk, then use Sed for text conversion, and glue it all together with Bash. But very soon it becomes hard to maintain and extend this collection of scripts and easier to replace them with one Perl or Python program, which can do all of the above and more.

So the bottom line is, use little languages then they suit your task, but know their limitations.

<comment><USER7> What would you say makes gluing those languages together hard to maintain?

I've found the opposite, where it's difficult to look through the many dark corners of Perl to do something that could have been accomplished instead by a smaller tool.</comment></comment>