Thanks, HN Here are the vocab survey results from all your participation - <AUTHOR> http://testyourvocab.com/blog.php <comment><USER3> In the 1990's the scoring system changed for the SAT's [1]. For example, a 700 verbal for someone on their 40's would be roughly equivalent to a 760 score for someone in their 20's. Did the data used for the graph correct for this? Otherwise, I would have expected to see an uptick in the vocabulary size around the early 30's age range.

[1] <http://www.greenes.com/html/convert.htm>

<comment><USER4> In January 2005, the SAT tests also got rid of Analogies. On top of that, the SAT changes every year to a small degree. You may be right, but I'm not sure if it's worth accounting for changes like this. Even accounting for these changes, I don't think the presented trend will change significantly.

<comment><USER3> Really? That's too bad. The analogies used to be a significant factor in the tests, and I thought they were an important measure of a test taker's ability to reason. A few years ago I read that most U.S. high schools don't teach proofs any more in math. It seems like we're dumbing down the critical thinking requirements for "kids these days".

<comment><USER5> lmkg is correct. The SAT is not a test that tests your knowledge; it's a test that tests how many test prep classes you've taken. It's shaped by money and politics, and not by how to better assess students' knowledge.

<comment><USER6> I offer my sole data point with no value-laden broad-application. I never took a single prep-class, nor read a prep-book, and went to typical public schools for my education. I scored a 730 on the SAT reading section.

</comment></comment></comment></comment></comment><comment><USER7> I would be interested to know if the flat spot between 12 and 15 persists with larger sample sizes. That seems the most surprising thing here.

<comment><AUTHOR> Yes, the data before 15 is still pretty spotty, not too many preteens participating -- I would be very surprised if it persisted.

<comment><USER8> You could always make another graph that includes confidence intervals! (Please)

<comment><USER9> I also would love to see some confidence intervals and p values, just out of personal interest.

Either way, really glad you did something with the data beyond collecting it!

</comment></comment></comment></comment><comment><USER10> I took the test, and while a cool idea, I still have a problem with the fact that it doesn't actually test your functional vocabulary, but rather tests your perception of your own vocabulary.

I do appreciate that doing something more sophisticated would be considerably harder.

<comment><USER11> Agreed. I'm a native English speaker, read constantly, and get the dictionary.com word of the day via their iPhone app. I also scored below average on this test... so I'm calling "bs" on the data.

I think it would be cool to try out something like the game Balderdash. Have the participants select the correct use of the word by selecting the appropriate usage within a sentence?

Also, who actually remembers what they scored on the verbal part of the SAT??

</comment></comment><comment><USER12> When I took this test I scored slightly under the median for my age group. Determined to improve, I looked around for a vocabulary-words app for Android. I didn't see anything quite as simple as I was looking for, so I threw this together:

[https://market.android.com/details?id=com.millertinkerhess.a...](https://market.android.com/details?id=com.millertinkerhess.android.vocablist)

</comment><comment><USER13> Oh wow! I didn't realize you were listening here - how did you come up with the word groups? Are there statistically related "levels" of words (e.g. "if you know this word you're 92% likely to know this one, too?") In general, what kind of structure does vocabulary have?

(I immediately had my kids take the test when I discovered it last week - <USER2> in the interest of Science!!)

<comment><AUTHOR> That would be a very interesting question. But without testing people's _entire_ vocabularies (as opposed to our sampling technique), I think it would be difficult to detect.

<comment><USER13> But how did you come up with the sampling words?

</comment></comment></comment><comment><USER14> I would imagine that, of all the "outside the class" activities that correlate closely with high working vocabularies, reading is a major one. Those who read for pleasure tend to read more (no surprise), but also more broadly -- thus covering a wider variety of subjects, and thus encountering many more words along the way.

</comment><comment><USER15> I live in Brazil and I'm not sure we have that homogeneous english teaching system you think, we have several hundreds schools with several teaching systems... and every school choose their own book to teach and so on.

But It would be nice to know how I am standing against other Brazilians.

Also would be nice to get a comparison between other languages native speakers like how am I comparing to other Portuguese speaking people (Portugal) ? and comparing to Germans (they usually speak very good English) ? and so on...

Btw, great project... thanks for sharing.

Took your survey 3 times and got pretty close scores (2.000 works difference between them) so I think it's pretty good.

If you need any help from a native Portuguese speakers drop me an e-mail or message...

<comment><AUTHOR> Falaí mermão! I taught English in Brazil for a few years, what I'm talking about is the fact that, for students in outside courses (like Ibeu, Cultura Inglesa, Fisk, Brasas, Wizard, etc.) course levels are defined in a generally consistent manner (basic, intermediate, advanced) -- and many of the courses are nationwide franchises.

And I'm specifically not publishing country-specific data because the per- country numbers are not that big yet, and it says much more about who happened to stumble upon this site, as opposed to actual national differences.

Abraços!

</comment></comment><comment><USER16> By computing "learning rate" from the distribution of "vocabulary as a function of age" you are implicitly making a number of assumptions: the world is stationary, and your sampling is homogenous across age. A word of caution could be useful before your conclusions: by looking at the graph one could also come to the conclusion that the quality of education is decreasing.

Nonetheless, very interesting data. Thanks.

</comment><comment><USER17> _Note that the data is still a big jagged_

s/big/bit/

I'd be curious to see confidence intervals and p values (or, heck, even just the number of samples that caused the given data point) for these graphs. "a bit jagged" and "pretty spotty" aren't very informative.

</comment><comment><USER4> Thank _you_. This is one of the most exciting data sets I've seen for a long time.

</comment><comment><USER18> Previous post is at <http://hackerne.ws/item?id=2772387>

</comment><comment><USER19> Could you set up an RSS feed for your blog? I'm interested in further developments.

</comment><comment><USER20> "Sure, I know what that word means!"</comment>


In-House Languages - <AUTHOR> Godwin's law: "As an online discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches 100%".<p>Godwin's law for programmers: "As software development grows longer, the probability of emergence of an improvised in-house scripted language (as bad as Nazis or Hitler) approaches 100%". <comment><USER2> I worked for a company around 2009 where the founder wrote his own bespoke VB like programming environment - IDE, PC emulator, bytecode VM, compiler for ruggedized Windows CE devices used for field services.

The company was founded around 1996. I assume he wrote it because there was no easy way to develop for Win CE back then except for C++/MFC. It did allow the company to hire a lot of cheap developers from well known but not well respected private colleges.

The same code could also be used for the back end supporting services, but he did at least add support for COM interop on the server so we could use any language to actually do the heavy lifting.

They pushed him out around 2011 and I was the only old guy that knew anything about C++/MFC and assembly to maintain it until the company folded.

</comment><comment><USER3> If you're interesting on why homegrown languages can be interesting, I'd recommend "The Rise & Fall of Software Recipes" (1). The book is more of a softeng memoir than an argument piece, but it has some very interesting examples of home-grown languages (& dev environments).

(1) [https://www.dariusblasband.com/](https://www.dariusblasband.com/)

</comment><comment><USER4> I present you an in-house language Yahoo used around year 2000: [https://gist.github.com/simonwistow/3919291](https://gist.github.com/simonwistow/3919291) Working with it got hard after the developer who maintained it quit.

<comment><USER5> That is the single worst looking syntax I have ever seen. How did they manage to do any significant amount of development instead of just bug hunting? IDE support?

<comment><USER4> Nothing like that. Also no functions or blocks. Brackets worked different than listed in the documentation sometimes. Lots of whitespace and escaping issues. Unhelpful error messages. We had to invent a mini-template system to stitch together the final big file (and be able to add comments for us without then appearing in the final document). Forgetting to close an if statement meant going through thousands of lines of non-intended code.

It was developed around 1996 I think. Replaced with PHP when Yahoo hired Rasmus Lerdorf.</comment></comment></comment>


Exploring Error Handling Patterns in Go - <AUTHOR> https://8thlight.com/blog/kyle-krull/2018/08/13/exploring-error-handling-patterns-in-go.html <comment><USER2> A cursory look at the article, shows that the most important observation about error handling in Go is missing.

Errors should be "decorated" (wrapped, contextualized...) in 99% of the cases.

In the end you get errors that describe step by step what your program tried to do and why it failed, for example:

* could not load profile: could not open file: permission denied.

* could not download profile image: could not open URL: HTTP GET failed: network is down.

This has many advantages:

1\. Much more readable than stack traces (especially if they include source file and line information or exception class names: users don't care about those.)

2\. Errors are still easy to grep in code to work out the program flow (the stack trace, basically.)

3\. When reading the code, you can see from the error context strings what the code is actually doing. Basically it serves a function of comments and (unlike comments) error strings remain up to date.

It is definitely verbose, especially the not equal nil part, as it's a result of Go attempt not to have special cases. Also it's a pity that errors can be silently ignored: maybe Go2 could be stricter here.

Overall, I think this is one of the best approaches at error handling.

<comment><USER3> In my experience, this just becomes arbitrarily close to "re-implement your stack trace by hand with space-delimited words instead of camelCaseFunctionNamesOrWhatever".

I'll _overwhelmingly_ prefer an always-correct stacktrace over a hand- recreated one that sometimes collapses multiple branches into a single ambiguous on. At least then the devs can help me when it fails. And stack traces and concatenated strings are in no way appropriate error responses for humans unless you're expecting them to be able to navigate the source code, so neither does anything for the "provide a helpful error message for non- programmers" problem.

\---

this is why stuff like [https://github.com/pkg/errors](https://github.com/pkg/errors) exists. wrap at the deepest level / where the error originates, and it's relatively rare that you need to add context at higher levels. If you want user-friendly errors, you need something dramatically more sophisticated.

<comment><USER4> Just using WithStack() from "github.com/pkg/errors" on any error that originates from outside my repository has been my go-to rule for any Go project. It has never disappointed.

<comment><USER5> Like an exception?

<comment><USER4> Except it's just a returned value and not a goto lookalike.

<comment><USER6> Exceptions—which go straight up the call stack, like returns—are nothing like gotos.

<comment><USER7> The similarity in both needing to have stack trace does not make them very alike yet. They serve similar purpose and for that purpose the stack trace serves value to the developer.

Returns go straight up the stack only if you choose them to. Caller doesn't have to propagate errors and return immediately, it can hold onto them and/or process them in the natural place they occur, they are just values. The returns from your function can be found with "grep return".

Exceptions, by default, break the natural control flow unless you wrap everything with try/catch. Even then, a lot of constructs won't be very natural and you really will have to get out of your way to identify the source of the exception, which very frequently is more important than it's type.

<comment><USER5> Why would finding the source of the exception be difficult? The stack trace in exception-based languages goes back to the actual line, as opposed to a stack trace from an error-as-value based language, where it only goes to where you trigger generating the stack trace.

<comment><USER7> I meant finding it in the context of a coder who writes a function. It's hard to identify which expression and statements can cause exceptions and effectively short-circuit your function. In contrast to explicit errors- returned-as-values.

(Panics of course can cause similar thing in Go but that's the reason why they should rarely be recovered and not used as a value propagation mechanism.)

<comment><USER3> Is that any worse than the ambiguity in e.g. code like this?

        func thing(arg) {
          otherThing(arg) // does this return an error you're ignoring?
        }

It even has a similar problem, where void returns -> err returns on code changes are not visibly discoverable (similar to a newly-throwing func).

Granted, you could turn this into a compiler error. But it's not currently.

\---

Anyway. Given that so many not-prevented-by-the-typesystem operations panic, I don't think it's reasonable to assume that _any_ func call will not panic, especially not in the future since they may change. So you _already_ have to program with `defer` to maintain your invariants, which is exactly the same as with exceptions, except you now have to deal with both possibilities for nearly every func.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I appreciated the article, but the error handling in Go just bugs me. So verbose...

The built-in tool does not even warn about unused errors... not `go build`, and not `go vet`. What's more important, an ignored error or an unused import?

[https://play.golang.org/p/j-oXsZz51ki](https://play.golang.org/p/j-oXsZz51ki)

<comment><USER9> That's by design -- programmer's choice.

<comment><USER10> I don't understand.

Go errors out on unused imports, but you can type "import _ foo.com/unused- import" to not error out.

Why doesn't 'errors.New("asdf")' error out and require you to instead write '_ = errors.New("asdf")' to ignore the result

I think the real answer is not that it's intentional design, but rather that the original compiler was not powerful enough to implement that feature easily... and once go hit 1., it was impossible for them to add new warnings or errors because there are no warnings and errors are backwards incompatible.

Sure, that means developers use third-party tools for warnings because the go compiler refuses to ever have warnings (that compromises the pure beauty of the language obviously), but at least that means it's only the users that have to deal with the complexity of using more tools, the compiler developers can ignore it.

<comment><USER11> I don't think it's because of the complexity. I'm quite sure it would not have been difficult to do.

One of the reason is that you don't always want to check the error. The most common one is fmt.Println.

I would not like to always write

_, _ = fmt.Println("Hello, playground")

<comment><USER12> You certainly do not always want to write _,_ = fmt.Println("Hello, playground"), and I think this points out the real lack. What do you want your program to do if fmt.Println starts failing? I think, unless you are explicitly checking for errors, that in all other cases you want it to crash. Rather than silently continue. Which is a bug, and a potentially disastrous one, that is endemic in Go code (and, to be fair, plenty of other languages). Thankfully the practical risk of this particular case is tiny.

This is why you want unchecked errors to implicitly bubble up. Which is what exceptions give you, or perhaps a syntax with implicit error return values rather than Go's by-convention approach.

<comment><USER9> If fmt.Println fails you've likely got bigger problems and the game is over.

And if it means a lot in this case, wrap the function and use it instead.

</comment></comment></comment></comment></comment></comment><comment><USER13> I wish more developers could do "investigation" like this for a new languages they learn.

For me, the main difference between Go's way of handling language and the rest of mainstream languages is that it makes error handling __unmagical __.

It literally says – errors are just like any other return values. Let's say, if you have function `sqrt` and return a value, and then call this function – you probably is interested in this return value and should handle it somehow (or mute with `_`). Now, the same applies for errors - if function returns the error, you likely to think how to handle it – do something in place or propagate up the stack.

There is also a cultural moment to this. As we mostly learn by examples, and most Go code has proper error checks (not equal to "proper error handling" but nevertheless), it makes newcomers to do the same as well, even while disagreeing with Go's way. I've heard from many devs that Go was the reason that made them appreciate proper error handling.

And honestly, I feel this too, and I think the reason is that in Go it's too easy to "handle errors properly". I never had this feeling with languages with exceptions, where I had to read whole books (!) just to learn how to properly use them and be confident in the way how I handle errors. (this is just an example, not the spark to start return values vs exceptions battle, just in case)

<comment><USER14> The flipside of easy-to-learn is there's no payoff for getting better with the language. Your code will always be exactly as tedious as novices' code because they'd rather conserve compiler cycles than spend them to amplify programmers' work.

<comment><USER15> On the bright side, your code will always be as easy to understand as a novice's code too, so it conserves other programmer's mental cycles as well.

<comment><USER16> > your code will always be as easy to understand as a novice's code too

Yeah, that seems about perfectly correct. Have you looked at novice's code? Is it easy to understand?

<comment><USER15> Yes, we have adopted Go for a lot of things at work and I have reviewed code of many of our devs who are more or less Go novices. It has indeed been pretty easy to understand - much easier than other languages (notably Java in this regard, but Python falls afoul of it a bit too) where people tend to write things in quite different styles and/or with excessive abstraction that made it much harder to understand what was going on.

</comment></comment></comment></comment></comment><comment><USER17> What is not covered here, and what I'm still searching for a good pattern for, is being able to return different errors depending on the type of failure.

Suppose you have a function that fetches a model from your database. It can return an error if the given user doesn't have permission to fetch this model, or it can return an error if your db connection barfs for some reason. The calling function needs to be able to differentiate between the two errors. Most of what I've read on the subject makes it seem like people prefer to only ever check if err != nil.

The two options I've seen in the wild are:

1\. Create a constant for a given error, like:

      var ErrFetchForbidden = errors.New("FETCH_FORBIDDEN")

Then the calling function can do:

      if err == ErrFetchForbidden {
        return 403
      } else if err == ErrFetchNotFound {
        return 404
      } else {
        return 500
      }

2\. Create a custom type for your error like so:

      type ErrFetchForbidden string

this has the benefit that the errorer can put more specific info into the error besides the Error() string.

      var err ErrFetchForbidden = "error retrieving the user object"
      return err

and then the caller can switch on type

      switch v := err.(type) {
        case ErrFetchForbidden:
          return 403
        case ErrFetchNotFound:
          return 404
        default:
          return 500
      }

We've gone with option 2 for now, (wrapping them with the pkg/errors package) because it seems simpler. Anyone else have good patterns for handling this?

<comment><USER18> There's another one I often use:

Create a custom error type, for example DB Error:

      type DBError struct {
         Temporary bool
         NetworkBased bool
         Cause error
      }

Now you can provide functions like IsTemporary(err).

Otherwise, you can use 2# with a twist, instead of matching on a type, you can do:

      switch {
         case isErrFetchForbidden(err):
         case isErrFetchNotFound(err):
      }

or even:

      IsBadRequest(err)
      IsInternal(err)
      IsTimeout(err)

<comment><USER17> So you then define your function to return the type DBError instead of a generic err type. That makes sense to me but for some reason some of the stuff I've suggests that just returning err is more go-like.

<comment><USER18> No, you don't, DBError should implement the error interface.

IsTemporary also takes an error and does something like:

      if err, ok := errors.Cause(err).(*DBError) {
        return err.temporary
      } else {
        return false
      }

<comment><USER17> oooh!

</comment></comment></comment></comment></comment><comment><USER19> > The other bit of good news is that you can't unknowingly ignore a returned > error, like you can with an unchecked exception. The compiler will force you > at a minimum to declare the error as _, and tools like errcheck do a good > job of keeping you honest.

Actually, we unknowingly ignore returned errors much more often than we think, like when we call a function and opt out of assigning any of the return values to variables. Consider this function, which returns a single value (being an error).

        func Failure() error {...}

You can always choose to call an error-returning function without declaring any placeholder (`_`):

        Failure()

There are several commonly used functions that return errors that are regularly ignored. How about `io.Writer`?

        writer.Write([]byte("Hello")) // returns (n int, err error)

It's quite common to call that function without feeling a need to check on the bytes written or a possible error. Or, consider whether you consistently check the return values of `fmt.Println()`, which also returns `(n int, err error)`...

<comment><USER20> errcheck is a good tool to help with this.

</comment></comment><comment><USER21> For everybody who is interested in improving his error handling skills:

[https://dave.cheney.net/2016/04/27/dont-just-check-errors- ha...](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them- gracefully)

</comment><comment><USER22> if err != nil return err

if err != nil return err

if err != nil return err

[https://github.com/docker/cli/search?q=%22if+err+%21%3D+nil%...](https://github.com/docker/cli/search?q=%22if+err+%21%3D+nil%22&unscoped_q=%22if+err+%21%3D+nil%22)

[https://github.com/kubernetes/kubernetes/search?q=%22if+err+...](https://github.com/kubernetes/kubernetes/search?q=%22if+err+%21%3D+nil%22&unscoped_q=%22if+err+%21%3D+nil%22)

[https://github.com/coreos/etcd/search?q=%22return+err%22&uns...](https://github.com/coreos/etcd/search?q=%22return+err%22&unscoped_q=%22return+err%22)

[https://github.com/influxdata/influxdb/search?q=%22if+err+%2...](https://github.com/influxdata/influxdb/search?q=%22if+err+%21%3D+nil%22&unscoped_q=%22if+err+%21%3D+nil%22)

The reality of Go's error handling is that you just implement exactly what exception bubbling does painfully by hand.

<comment><USER23> This is not correct. Exceptions do different things than report an error. They unwind the stack. That's why they are called exceptions and not errors.

One important benefit of Go's error handling pattern is readability. With exceptions, it's not easy to see who handles it and where. There is indeed less code, and that's nice for the writer, but from the reader perspective, error handling becomes obscure. And from the quality control point if view, this becomes unsafe.

<comment><USER24> At the cost of making the entire logic's readability less which to me is more important than sometimes getting confused where errors bubble up to.

The philosophy is different when, for example the author of Ruby wanted to make coding fun for programmers and does a good job at it and Go is sticking to 'this must be right' approach and breaks some people's heart.

Personally I'd appreciate being more 'fun'.

<comment><USER25> Depends on your definition of fun, I guess. I personally don't like Ruby because of that fun-factor. In most cases, it makes programming easier for the novice, but more complicated for the experienced.

This is because to make it easier for the novice, there are all kinds of constructs that try to make the code imitate normal English. But coding software is a completely different thing than writing text, thus the English- like front is in fact a smoke screen that hides the real gears.

A small example would be the unless keyword. It completely throws me of each time I come across it, because it reverses the order of evaluation:

Do something, unless condition applies.

I read that from left to right, so in my mind "Do something" has already executed, but then I have to go back, because the condition might not apply. This get really 'fun' if the condition is something negative.

I like Go just because it way more simple. Even it is a bit more verbose in the error handling, everywhere else it is very minimal and clear.

<comment><USER26> That's only the postfix version of unless though, and you could use if the same way. And inversely, you can use unless is its own block, like if.

</comment></comment></comment></comment></comment><comment><USER27> The first time I used Go on a big project, error handling bugged me enough that I wrote a package that let me use errors like exceptions:

[https://github.com/s4y/go-exc](https://github.com/s4y/go-exc)

I'm not sure if I'd use it again today, but it was a fun exercise.</comment>


A scientist's decision to kill a bird he'd been searching for for two decades - <AUTHOR> http://www.thestar.com/news/insight/2015/10/17/why-a-scientist-killed-a-bird-that-hadnt-been-seen-in-50-years.html <comment><USER2> Because of Cecil, the Lion I know that my feelings regarding this story are shared by others - 'collecting' this male specimen of the species was the wrong thing to do. He 'collected' it because it was perfectly healthy, therefore there would be others.

In the UK 'egg collectors' that collect rare birds eggs get given short shrift, actual birds in far off places aren't afford Cecil the Lion levels of outrage yet the sentiment is the same, at least for me.

<comment><USER3> I, on the other hand, am baffled by the outrage in any case. I do not understand why some animals have greater value than others. Be it rarity or not, from an evolutionary perspective there's no ranking. One cannot say that a worm is worth less than a human.

So, this value ownership that has been put on the animal species is entirely subjective and irrational, and points out a little bit of hypocrisy in all of us.

<comment><USER4> Do you understand why some paintings have greater value than others?

<comment><USER5> The same reason diamonds are expensive?

</comment></comment></comment></comment><comment><USER6> I think this whole thing is kind of ironic, e.g. consider John James Audubon:

"He shot and killed every bird he painted. Audubon was a noted hunter and taxidermist, and much of the money he made during his lifetime was from selling animal skins, a practice that in part helped to fund the printing of "Birds of America." But don't assume that he took pleasure from killing the birds he painted: "The moment a bird was dead," he said, "no matter how beautiful it had been in life, the pleasure of possession became blunted for me."

Kill one bird, get targeted by the internet rage mob - kill a few thousand and you get a Google Doodle.

<comment><USER7> > _Kill one bird, get targeted by the internet rage mob - kill a few thousand > and you get a Google Doodle._

That's much too glib. Audobon lived two centuries ago.

<comment><USER6> And yet, no difference today - nothing wrong with killing an inconsequential specimen for the sake of science. The front plate glass window on my house kills more birds than that researcher, every week. Thump. Thump. Thump. I don't have angry mobs calling for my head over it. I go out, pick them off the porch, and throw them in the trash. And no, I don't take time to sketch them.

<comment><USER8> > The front plate glass window on my house kills more birds than that > researcher, every week. Thump. Thump. Thump.

Wtf? What kind of terrible bird-trap of a house do you have? I've never had a bird die by flying against one of my windows, ever, in my whole life.

<comment><USER6> We have berry trees in our front yard, so every year when they ripen up we get hordes of finches and other little birds swooping the buffet. In the fall, we get about one dead bird every other day until the trees have been stripped clean.

</comment></comment></comment></comment></comment><comment><USER9> Here's a link to the referenced Audubon story, along with a picture of the bird and the odd editor's note (at the bottom).

[http://www.audubon.org/news/moustached-kingfisher- photograph...](http://www.audubon.org/news/moustached-kingfisher-photographed- first-time)

</comment><comment><USER10> The article's headline states, "Why a scientist killed a bird that hadn't been seen in 50 years" and waits until well into the article to mention, "Filardi stressed that, among Guadalcanal locals, the bird is known to be 'unremarkably common.'"

In this way, this article, which is trying to explain why the bird was killed, seems to recreate the problems that led to people being mad in the first place: giving the impression that this is a rare bird that no one had seen in 50 years and burying the fact that this isn't true. The majority of this article makes it seem like this was a bird that no one had seen in years when that simply isn't the case. It is just that no scientist had seen it in years. Big difference.

<comment><USER7> We switched to the subtitle, which doesn't have this problem.

Edit: ok you guys, it isn't sporting to _only_ complain about titles—that's shooting birds in a barrel. Let's hear a better one!

<comment><USER11> However, it has a different problem. It says he was searching the bird for two decades. I doubt one could get a bird to hold still for that long to be searched.

It should, of course, read "A scientist's decision to kill a bird he'd been searching _for_ for two decades". (I see the problem is in the original.) Alternatively, one could say "... seeking for two decades".

<pedantic grammar-nerd grin>

<comment><USER7> Happy to increment the _for_ s, but that doesn't solve your ambiguity objection. It merely turns "searching" back into the intransitive verb it should be.

<comment><USER11> Thanks — but I don't get your comment. How is it still ambiguous?

<comment><USER7> Argh I misread you the first time. Sorry! Good one.</comment></comment></comment></comment></comment></comment>


Ask HN: What podcasts do you watch regularly? - <AUTHOR> I'm a big fan of podcasts and I'm always looking to discover new shows.  I'm curious what shows do you watch / listen to on a regular basis?  I'm a big fan of:
Mixergy, TWiT, This Week in Venture Capital, This Week in Startups, Sitepoint, Standford Entrepreneurship Videos (not sure if that is considered a podcast), Reporters' Roundtable
You? <comment><USER2> Hardcore History. It's a very good show about various fascinating topics in history, such as the fall of the Roman Republic, the war on the eastern front in WWII, Apache Culture and it's demise, etc.

It's obviously very far from startups, but I think every curious hacker would be interested and there is such a huge break between the episodes that it doesn't take too much time to follow it.

You can download the episodes here [<http://www.dancarlin.com/disp.php?page=hharchive>]. If you don't know where to start either try show 32 since it is a self contained episode or shows 27 through 30 if you have more time (and the stomach).

</comment><comment><USER3> Hardcore History: <http://www.dancarlin.com/disp.php/hh> \- Best way to describe it is 'geeking' out on History. The host is a journalist - not a historian - but he does his research.

<comment><USER4> Thanks, I'll check it out.

</comment></comment><comment><USER5> 5by5's shows: The Talk Show, Hypocritical, Build and Analyze.

<http://5by5.tv/>

<comment><USER6> I realise that Gruber gets a load of bashing on HN of late. But I love The Talk Show. It hits just the right not of apple, tech, film and schoolboy sniggering.

I especially like the schoolboy sniggering.

<comment><USER7> I like his site, but he has a lethargic demeanour on podcasts.

</comment></comment></comment><comment><USER8> I always keep up with: This American Life (thisamericanlife.org), Radiolab (radiolab.org), Planet Money (npr.org/blogs/money/) and The Brain Science Podcast (brainsciencepodcast.com). Others are more on a per-episode bases.

</comment><comment><USER9> RadioLab from NPR in NYC. Interesting stories from a science perspective, with a very cool story-telling format.

<http://www.radiolab.org/>

</comment><comment><USER10> 37signals Podcast, This Developer's Life, Freakonomics Radio, Hanselminutes (in addition to several already mentioned by others).

</comment><comment><USER11> In addition to many of those already mentioned I like... Bookworm! Deep interviews with authors: <http://feeds.kcrw.com/kcrw/bw> Stewart Brand's Long Now Foundation talks: <http://longnow.org/projects/seminars/SALT.xml> This Week In Venture Capital w Mark Suster: <http://feeds.feedburner.com/ThisWeekInVentureCapital-audio> Stuff Mom Never Told You: [http://www.howstuffworks.com/podcasts/stuff-mom-never- told-y...](http://www.howstuffworks.com/podcasts/stuff-mom-never-told-you.rss) LA Public Library ALOUD talks: <http://events.lapl.org/podcasts/rss/itunes/aloudrss.aspx> Futures in Biotech: <http://leo.am/podcasts/fib/> Fora.tv audio podcast of the week: <http://fora.tv/media/rss/podcasts/featured_audio.xml> Econ Talk with Russ Roberts: <http://www.econlib.org/library/EconTalk.xml> C-SPAN After Words: <http://www.c-span.org/XML/podcast/aw_feed.xml> Big Ideas: <http://feeds.tvo.org/tvobigideas> Automate My Small Business: <http://automatemysmallbusiness.com/podcast/> A Prairie Home Companion: [http://americanpublicmedia.publicradio.org/podcasts/xml/prai...](http://americanpublicmedia.publicradio.org/podcasts/xml/prairie_home_companion/news_from_lake_wobegon.xml)

</comment><comment><USER12> <http://packetpushers.net/>

It's a networking podcast mainly focused on high end datacenter stuff, but also they have a wireless specific podcast periodically. If you're into hardware and systems engineering, it's quite interesting. They also get a lot of vendors on and really grill them.

</comment><comment><USER13> <http://castcurator.com/> Mostly just the music stuff I listen to and a few recommendations that I got over the past few days. I will go ahead and add all the podcasts that pop up in this thread and create a HN feed for them.

</comment><comment><USER14> The Changelog, The Dev Show, Floss Weekly, Linux Outlaws, No Agenda, Startups for the Rest of Us

</comment><comment><USER15> I listen to 'Stuff You Should Know' by Chuck and Josh at HowStuffWorks.com. The topic is usually very interesting and the hosts are very entertaining. While it is usually very well researched, I like that it is light enough that I don't have to pay attention to every sentence.

Who Charted and Doug Loves Movies are pretty good 'brain off' entertainment as well. And I've listened to Planet Money and This American Life for years and years and years.

</comment><comment><USER16> Many good podcasts at the CBC! (Canadian Broadcasting Corporation):

Dispatches: Former international correspondent Rick MacInnes-Rae talks to his international correspondent friends \- <http://www.cbc.ca/dispatches/>

Ideas: One hour lectures and discussions with people who think deep thoughts about a wide variety of topics \- <http://www.cbc.ca/ideas/>

</comment><comment><USER17> For politics with some humor injected, I like to keep up with the Majority Report (majority.fm), and the Stephanie Miller Show (stephaniemiller.com).

I also regularly keep up with the Slate Political and Pop Culture "Gabfest" podcasts, although they can be a bit dry and elitist at times.

For pure entertainment, I like Marc Maron's WTF podcast, and The Moth is also great if you like shows like "This American Life" but can't always commit to a whole hour.

</comment><comment><USER18> I listen regularly <http://eslpod.com> and is a very good help for us non native-english speakers

</comment><comment><USER19> Just checked out startups for the rest of us from harold's recommendation.. Looks good. Anyone have any other good recommendations about startup podcasts? Other than This week in startups--I can't stand Calacanis.

Also, I recommend Too Much Information (<http://tmipodcast.com/>) -- Interesting topics and wry humor, its a good listen.

</comment><comment><USER20> I try out a few new podcasts every quarter. The three that have stuck (in order of enjoyment): TechZing, Changelog, Founders Talk

<http://techzinglive.com/> <http://thechangelog.com/> <http://5by5.tv/founderstalk>

</comment><comment><USER21> Astronomy Cast -- They have a pretty big show archive that has aged very well.

In Our Time, a BBC radio podcast focusing on history.

PBS Frontline (a tv show, not a podcast) streams all their shows online. Great for current events.

The Economist Audio Edition requires subscription to magazine, but if you want to catch up on the entire world in a couple of hours, this is the way to go.

</comment><comment><USER22> The History of Rome. <http://thehistoryofrome.typepad.com/>

_"A weekly podcast tracing the history of the Roman Empire, beginning with Aeneas's arrival in Italy and ending (someday) with the exile of Romulus Augustulus, last Emperor of the Western Roman Empire."_

</comment><comment><USER23> For something a little different, my choice for non-Hacker Newsesque podcast would have to be Comedy Death Ray Radio ([http://www.earwolf.com/show/comedy- death-ray-radio-scott-auk...](http://www.earwolf.com/show/comedy-death-ray- radio-scott-aukerman)).

The single funniest thing I've ever heard.

</comment><comment><USER24> WTF w/ Marc Maron - he is a comedian that has been around forever, though I had never heard of him but interviews other comedians every week. The best episodes so far are the ones with Carlos Mencia, Robin Williams and Louis CK.

Also - Monocle Weekly - These are the guys that make Monocle magazine.

</comment><comment><USER25> The Skeptics' Guide to the Universe it's pretty good, they promote critical thinking with humor and they give some nice insights into the mechanisms we usually use to judge information.

</comment><comment><USER26> 1.This American Life 2.Wait Wait Dont tell me 3. RadioLab 4.Stanford Entrep Videos 5.The moth 6. MarketPlace Money 7.Both sides of the table 8. Freakanomics radio

</comment><comment><USER27> I've recently stumbled across <http://www.founderly.com/> which seems like a great project.

</comment><comment><USER28> For any baseball people, from more of a stats angle, both Up and In: The Baseball Prospectus Podcast and FanGraphs Audio are pretty good.

</comment><comment><USER29> HPR, Peter Day's World of Business, New Yorker Comment, Changelog, Onion Radio News, Front Page, Read'n'Code (had to plug this)

</comment><comment><USER30> I listen to: <http://thechangelog.com/> and a lot of the 5by5 stuff

</comment><comment><USER31> TWiT, This week in iPad, TWiST, Kevin Pollaks chat show, and Kevin Rose's podcast(not Digg Nation, the other one).

</comment><comment><USER32> Radiolab and Erik Davis' Expanding Mind. More recently I've started to listen to Magic Newswire.

</comment><comment><USER33> Sal Kahn's programs rock. I listen to them in the background on my iPhone, instead of watching.

</comment><comment><USER34> <http://doctype.tv>

</comment><comment><USER4> Mixergy, TWiST, TWiVC, Radiolab & 5by5 podcasts.

</comment><comment><USER35> The Moth Podcast</comment>


WordPress and High Traffic - <AUTHOR> http://daringfireball.net/linked/2011/09/12/wordpress-high-traffic <comment><USER2> i'veused the SuperCache plugin, which I think is one of the more visible recommended plugins and was braindead easy to install. Don't have much experience with hige traffic dumps, besides an appearance on Reddit's front once.</comment>


Astrocyte molecular signatures in Huntington's disease - <AUTHOR> https://stm.sciencemag.org/content/11/514/eaaw8546 <comment><USER2> Astrocytes on Wikipedia:

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

They are glial cells in the brain and spinal cord.</comment>


Pokemon and Start-ups - <AUTHOR> http://brenthalliburton.com/pokemon-start-ups/

<comment><AUTHOR> I recognize there are better deck lists. I should probably run a third energy switch and lose one of the switches. Maybe have an escape rope.</comment>


Help needed, how do you publish a webapp? - <AUTHOR>

hi there,
as probably happened to many of you, some time ago I've got an idea for a webapp I would have liked to build.
Months have passed and it is almost ready, I would publish it on the internet.
I don't think it'll get me rich, but it would be nice to see how good or bad it performs and if mine was actually a good idea or not.
I worked on it on my own and I'm looking for a nice and cheap hosting company.
But now what I'd like to ask you is the following: which are the steps you think I should take to get the most out of this experience?
What would you suggest me to do or not to do? What did you do wrong? Who would you contact for funding, testing or market it?
I live in Italy and we don't get many networking events here, but I'd be definitively available to spend some money if it's worth it.
Thanks in advance for any hint you'll want to provide.
--- update ---
Actually, my very first mistake was not to notice this: http://ycombinator.com/lib.html
now I have and I'm going through some of the links, they're great.
Still, I'm open to any hint you may also have. <comment><USER2> How you go about publishing your web app depends on what platform you created it in. Is it PHP, a Python or Ruby based framework, .NET, Java, node.js, or something else completely?

<comment><AUTHOR> The app is actually written in Python, but mine wasn't really a technical question. I may have worded the question incorrectly and I'm sorry about that, I'm not a native English speaker.

I'm actually looking for some suggestions on how to market and launch the app. For example, I'd like to get some people testing it and I'm also wondering about how to get some buzz around it. Finally, at the moment I'm a full time employee and I don't have unlimited money/time to fund the project.

</comment></comment><comment><USER3> Set up a page at KickoffLabs.com and start collecting emails of interested people. Then work on preparing/marketing your app for production release. A couple of good places for hosting an app are Heroku.com and dotcloud.com. They both offer enough free hosting to get your app online. If your app gains some momentum, you can upgrade your account and start paying.

<comment><AUTHOR> I didn't know about kickofflabs nor about dotcloud. Thanks! Actually dotcloud seems to be one of the few offering mongodb and tornado, which are the requirements for my app.</comment></comment>


Judge Shoots Down 'Bitcoin Isn't Money' Argument in Silk Road Trial - <AUTHOR> http://www.wired.com/2014/07/silkroad-bitcoin-isnt-money/ <comment><USER2> This wasn't particularly surprising, either in putting it out there or shooting it down. Every trial starts with a whole bunch of motions which the judge evaluates. If your lawyer isn't throwing up every possible angle they aren't earning their pay.

<comment><USER3>
        -Bad: Do nothing
        -Better: Object to everything and you might win the lottery
        -Best: Object reasonably that they may be taken seriously
        -Beyond amazing: Admit everything in such a sympathetic way to minimize guilt*

        *Gerry Spence

<comment><USER4> Source? I can't find your last quote online, and want to read more about it

</comment></comment></comment><comment><USER5> This was always an idiotic premise. The Federal money laundering statute refers to 'monetary instruments' which it then defines:

(i) coin or currency of the United States or of any other country, travelers' checks, personal checks, bank checks, and money orders,

or

 _(ii) investment securities or negotiable instruments, in bearer form or otherwise in such form that title thereto passes upon delivery;_

If you could convince a judge that Bitcoin wasn't currency, it would still qualify as an investment security / negotiable instrument by just about any definition.

<comment><USER6> I'm pretty confused over that even an idiot would try to argue this case. It's something that has "coins" in it's name, and is touted as "the internet money of the future" and that is being used in substitute for regular money when buying wares all over the world.

If that isn't money, is ANYTHING money? Could one not just as well argue that dollars are just ink on paper, and therefore not money?

<comment><USER7> Money is a loosely-defined word that ends up being a huge sticking point in economic conversations because people end up using different definitions.

One thing Bitcoin is not is a unit of account; it is nobodies liability the way that dollars, treasuries or reserves are a liability of the issuer. When I think money, I think balance sheet; and by that criterion, Bitcoin is not money. It's a currency and an asset.

<comment><USER8> Germany seems to disagree with your point: [http://www.spiegel.de/international/business/germany- declare...](http://www.spiegel.de/international/business/germany-declares- bitcoins-to-be-a-unit-of-account-a-917525.html)

Edit: Wikipedia gives the following requirements for "unit of account":

 _To function as a 'unit of account', whatever is being used as money must be:

Divisible into smaller units without loss of value; precious metals can be coined from bars, or melted down into bars again.

Fungible: that is, one unit or piece must be perceived as equivalent to any other, which is why diamonds, works of art or real estate are not suitable as money.

A specific weight, or measure, or size to be verifiably countable. For instance, coins are often milled with a reeded edge, so that any removal of material from the coin (lowering its commodity value) will be easy to detect. _

Except for having a specific weight, Bitcoin has these: 1 Bitcoin is the same as any other, and it can be broken into 0.5, 0.1 and even 0.0001 Bitcoins.

<comment><USER7> I think the sticking point there is differences in definition of 'unit of account'. My main point is that Bitcoin is nobodies liability; this is by design. The dollar is a liability of the issuer, which can be used to extinguish tax debt.

This goes into a much larger point about the nature of money and how it evolved from ad-hoc credit arrangements.

[http://www.youtube.com/watch?v=9Tks7oJkFRg](http://www.youtube.com/watch?v=9Tks7oJkFRg) [http://www.youtube.com/watch?v=0zEbo8PIPSc](http://www.youtube.com/watch?v=0zEbo8PIPSc)

<comment><USER9> Regardless of its "technical" or "economic" definition, to the layman and all its users, Bitcoin is treated, traded, and consumed as money.

The exact origins of Bitcoin do not change its utility, which is as a unit of exchange, which is what money is in its most general and flexible definition.

<comment><USER7> All true, but it does not diminish my point; that since the dawn of capitalism, money has been a balance sheet phenomenon: being simultaneously someone's asset and someone else's liability, and in this Bitcoin is different.

<comment><USER10> That seems odd - if A visits will road and buys drugs off B then A owes B one bitcoin - that is a human level contract that is clearly understood. A balance sheet accounting of this transaction would as easily be In bitcoins as dollars (A has a liability of 1 bitcoin, B has an asset)

As long as B wishes to denominate their accounts in bitcoins this is quite reasonable.

Or am I missing something ?

(Interestingly the Indian mathematician who invented negative numbers did so using accounts and debt as an example (bhagravita? 500AD)

<comment><USER7> >Or am I missing something ?

Banking.

<comment><USER10> I don't understand - why is banking meaning that I owe someone 100 bitcoins a problem? It's an unstable currency yes but the same can be said for Zimbabwean dollar

<comment><USER7> In your case, the transaction is barter, a transfer of one non-financial asset for another.

If you have a contract to provide 100 BTC, then that contract would be money, denominated in BTC (not the BTC themselves). It would exist on one balance sheet as an asset, and on another as a liability (at the same time).

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> The article says this was a motion to dismiss all charges, on grounds that bitcoin isn't money and that Ulbricht wasn't responsible for website users' actions.

What happened to the murder-for-hire charges? Those seemed pretty damning...

<comment><USER12> All dropped, except the Maryland case, which isn't being tried yet and could also be dropped when the time comes

</comment></comment><comment><USER13> The claim is that the term "funds" included in the definition of "financial transaction" [1] covers bitcoins.

"Funds" typically denotes cash or an asset that is highly liquid, not just anything which can be purchased or sold. Black's Law Dictionary defines "fund" as a "sum of money or other liquid assets established for a specific purpose."

Bitcoins, at this stage, are accepted almost nowhere, recognized by few people as currency, and represent a tiny, highly volatile and risky niche compared to other markets. It's much easier to convert a used iPhone (the top search on eBay) into cash, sell concert tickets on craigslist, or trade collectibles, than it is to convert bitcoins into legal tender, but no one would mistake those goods for "funds." The law isn't intended to cover anything which can be exchanged for cash. In fact, it specifically enumerates the following types of property separately when defining the scope of "financial transaction": "real property, vehicle, vessel, or aircraft." [1]

Because currency is accepted nearly everywhere as payment, the government considers it difficult to police and subject to special penalties when used for criminal ends. Goods like collectibles or bitcoins don't operate at that scale, since they're accepted by relatively few businesses and specialized experts as payment. If a tiny (in comparison to the economy at large) experiment like bitcoin is "funds", then almost any object bought or sold in a zillion stores and marketplaces can be construed as "funds". Any quid-pro-quo could be considered laundering, which broadens the law beyond its intended scope.

The ruling says:

"Ulbricht's alleged conduct is more akin to a builder who designs a house complete with secret entrances and exits and specially designed traps to stash drugs and money; this is not an ordinary dwelling, but a drug dealer's 'dream house.'" [2]

It's not illegal to build a house with secret entrances and compartments. Such a house could be used by anyone who wanted to hide their own possessions on their own property. The fact that someone might use it for illicit purposes doesn't implicate the owner or builder. It must be proved separately that the owner or builder knowingly entered into some kind of agreement with another conspirator to facilitate a crime [3]. Merely hosting a chat room isn't a conspiracy.

Unfortunately, this is just a perpetuation of the same pointless drug war. The prosecution's position is wildly overblown. The alleged activities are akin to operating a motel where a victimless offense might have been committed by a third party.

Drug prohibition is ineffective and is on the way out in favor of treatment and social programs that are more effective.

[1] [http://www.law.cornell.edu/uscode/text/18/1956](http://www.law.cornell.edu/uscode/text/18/1956)

(4) the term "financial transaction" means

(A) a transaction which in any way or degree affects interstate or foreign commerce

(i) involving the movement of funds by wire or other means or

(ii) involving one or more monetary instruments, or

(iii) involving the transfer of title to any real property, vehicle, vessel, or aircraft, or

(B) a transaction involving the use of a financial institution which is engaged in, or the activities of which affect, interstate or foreign commerce in any way or degree;

[...]

[2] [http://www.scribd.com/doc/233234104/Forrest-Denial-of- Defens...](http://www.scribd.com/doc/233234104/Forrest-Denial-of-Defense- Motion-in-Silk-Road-Case)

[3] [http://conspiracy.uslegal.com/elements-of-the- crime/intent/](http://conspiracy.uslegal.com/elements-of-the-crime/intent/)

<comment><USER14> >It's much easier to convert a used iPhone (the top search on eBay) into cash, sell concert tickets on craigslist, or trade collectibles, than it is to convert bitcoins into legal tender

Really? What about all the services like Bitstamp? I am fairly sure that bitcoin is more liquid than used iPhones.

<comment><USER13> I think for most people, bitcoin isn't particularly user-friendly yet. By comparison, selling a used phone on eBay or craigslist is pretty easy...

<comment><USER15> Being user-friendly has nothing to do with liquidity.

Stocks, which most people don't understand and can't be sold without contacting a broker are considered liquid.

Jewelry & stamp collections are not considered liquid assets, yet everyone understands what these are and where to purchase them.

</comment></comment></comment></comment><comment><USER16> Breaking news: judge exercises common sense.

</comment><comment><USER17> Bitcoin is based of cryptography which is completely broken before implementation so, this would have to be a discussion about before time.

No one has experienced security.</comment>


Bruce Eckel: Strong Typing vs. Strong Testing (2003) - <AUTHOR> https://docs.google.com/View?id=dcsvntt2_25wpjvbbhk <comment><USER2> Bruce nails why strong typing is important, but misses the point. He says, "realizing that the compiler was just one (incomplete) form of testing,"

Strong typing is really just a form of testing. But it has a couple of advantages. It is a form of testing with strong mathematical underpinnings. If someone says their application is correct with respect to the type system, I know what that means in a pretty precise way.

This has a couple of side benefits. When working in modular units or decoupled teams, when one team gets some code they know that if type checking has passed a set of requirements have been met. They understand what that means. While unit tests are useful, you passing your unit tests means very little to me, until I spend a few days going through your unit tests.

Another benefit is that all of your code gets these tests run on them. One of the few tests that gets 100% code coverage all the time.

Examples of famous bugs that could have been avoided with a strong type system include the NASA Mars orbiter bug. If they used a language like Ada that supports having English and Metric integer types, they would have been sure to mix them properly. And of course the compiler could enforce this through all of the code.

While Bruce does point out that weak typing (or dynamic typing) may result in less typing, it generally doesn't result in easier thinking. For me that makes it a relative wash in that regard.

<comment><USER3> > When working in modular units or decoupled teams, when one team gets some > code they know that if type checking has passed a set of requirements have > been met. They understand what that means. While unit tests are useful, you > passing your unit tests means very little to me, until I spend a few days > going through your unit tests.

Except that "type checking has been passed" doesn't actually tell you anything about correctness _either_ without spending a few days going through the types. It's very easy, and very common, for bad programmers to build a few BigBallOfStuff types and essentially re-invent an ad-hoc dynamic type system that will pass static analysis in a way that is utterly meaningless when it comes to behavioural correctness

<comment><USER4> A BigBallOfStuff type should stick out like a sore thumb in a code review, though.

Static typing is a DSL for specifying assumptions in a way the compiler can check. If you misuse it, it can backfire, but that's true of pretty much everything.

<comment><USER3> That's just a recasting of "if you rigorously specify all of your assumptions in your unit tests, you needn't worry about anything". You _can_ take maximal advantage of the type system to encode assumptions, but it's still on you to do it. This isn't a silver bullet that makes static typing better than dynamic typing, because nothing forces you to be competent about specifying your assumptions here, either.

You can take maximal advantage of the type system to specify as many assumptions as it can check or you can take maximal advantage of the unit tests to specify the same assumptions. You end up in the same place either way, and the OP's claim that you can "trust" the existence of passing type- checks without looking at the types to see what assumptions they encode in a way that you cannot trust unit tests doesn't hold up.

<comment><USER4> Agreed. I think some mix of declarations and automated (regression, etc.) testing is probably most practical. I like randomized testing, as well.

</comment></comment></comment></comment></comment><comment><USER5> I agree with almost everything in this article, except for one crucial point. The article says "And if a Python program has adequate unit tests, it can be as robust as a C++, Java or C# program with adequate unit tests."

So what is an "adequate" unit test in Python? I know some advocates of weak typing who believe that the unit tests should include tests of expected input types. 99+% of the time that's going to mean checking exactly what you'd get from static type checking. Rarely, there will be something more complex, e.g. the foobars variable can reference a FooBar object or a list containing 0 or more FooBar objects. (And then I'd question the design of the API.)

I really don't want to write those unit tests. I'd much rather have the compiler do that testing for me.

</comment><comment><USER6> Without a comparison to Haskell, ML, or similar best-of-breed statically typed languages, this truly misses the point. Using C++ and Java as the poster children for static typing is like using DOS batch files as the exemplar of scripting languages.

<comment><USER7> +1

</comment></comment><comment><USER8> One thing I've noticed is that a strong type system does force me to think harder about _interfaces_.

Sure, you can think just as hard about interfaces without static typing. But speaking personally as someone who does mostly Ruby but is building increasingly complex infrastructure in Ruby and trying to break things up sanely -- it helps me to think clearly when I prototype the interfaces and the types in a statically typed language like Scala.

Surely it's meant to be the other way around? But an interesting realisation for me.

On the other hand, there's that feeling of code which does exactly what it needs to do to pass the tests, nothing more, nothing less. Which while very economical and very suited to rapid development, often doesn't stand up in its own right as a respectable design without regular and very disciplined "and now I go back and refactor" steps. Often those steps correspond (to my way of thinking) with going back and thinking deeper about the types and the interfaces.

So, I think types are more than just a limited kind of testing which happens to run statically - they also give you a conceptual framework and _structure_ , in the mathematical as well as the regular sense of the word. An ontology, if that's not too grand a word for it. And as such they can help shape your design and spur you into phrasing your design clearly. Despite occasionally getting in the way of it.

</comment><comment><USER9> If C++ and Java are your chosen models of "strongly statically typed" languages, it would only be fair to use PHP or Visual Basic as the contrasting language, in particular if a big chunk of your essay will discard the actual issues at hand and instead focus on unrelated topics like brevity. (all of the above are on my personal, subjective, "list of languages that are painful to work in.")

That aside, "strong typing" and "strong testing" are absolutely not on some sort of axis where you have to choose one or the other, and it's absolutely ridiculous to pretend that it's some sort of trade-off.

... It re-occurs to me that this particular issue is flamebait of high pedigree and ancient origins, so that's all from me on this.

</comment><comment><AUTHOR> It's worth noting that Python 3.0 supports _function annotations_ , a feature that can be used to implement type checking in Python. What's more PEP 3107 explicitly states that one of the expected use cases is "providing typing information" and "type checking".

<http://www.python.org/dev/peps/pep-3107/>

</comment><comment><USER10> I think the real argument for testing vs. types is that for most jobs "programmer productivity" has to do with producing code that works in practice rather than code that is perfect under all possible circumstances. Most of us are not developing satellites, nuclear power plants, or pacemakers. Premature optimization for robustness probably wastes more programmer-hours than premature optimization for speed.

That said, if you haven't used something like ML or Haskell you can't possibly imagine how many subtle bugs can be caught by a type checker, particularly edge and corner cases that will eventually dominate your test suite - in the unlikely event that your code lives that long.

</comment><comment><AUTHOR> I admire Bruce Eckel for seeing limitations of the language he invested lot of time and effort in (he is the author of Thinking in Java). Many would stick to a field they feel comfortable in, but Bruce had a courage and an open mind to move forward. He actually advocated Ruby and Python during his talks on Java conferences!

</comment><comment><USER11> A great classic. I basically started learning Python because Bruce Eckel recommended it. And I'm never tired of recommending "Thinking in Java" as a must-read for all programmers, regardless of whether they aspire to become Java programmers or not :)

</comment><comment><USER12> Even though I spent a lot of my childhood programming in C, I never understood why people started strong typing was so necessary when Ruby started becoming popular. This article explains that thinking for me, finally.

It's funny that it's the same article that also explains why it's wrong. At least, now it is.

Unit testing not only replaces the need for strong typing, it does so without any extra effort on top of what you'd already do for unit testing. It's not like you have to do extra work on duck-typed languages than you do on strong- typed languages when you're unit testing. (Assuming you're doing it correctly, of course.)

<comment><USER13> _Unit testing not only replaces the need for strong typing, it does so without any extra effort on top of what you'd already do for unit testing_

That's not true. I work on an e-commerce system. Ensuring that people don't accidentally use Floats where they shouldn't requires quite a bit of additional effort which could be avoided with a type system.

<comment><USER14> Exactly! And that's just the kind of things the computer should be doing for you, not the other way around.

</comment></comment></comment><comment><USER14> I disagree with Eckel on this one. The reality is that most of your tests end up being a matter of testing the things that the compiler would have done for you for free and that's the kind of thing that computers should be doing, not people.

Also, tests don't have 100% coverage whereas the compiler will enforce type correctness everywhere.

I've spent days hunting down bugs in Javascript which would have been automatically caught by a type checking compiler. That's just a waste of my time, as is reproducing all the type checking that the compiler would have done in the first place.</comment>


Batteries not included: Microsoft's first folly with Surface - <AUTHOR> http://virtualpants.com/post/33713629787/batteries-not-included

<comment><AUTHOR> The Touch Cover should have been included or been $50 or less. $100-120 is way too much to spend on something most people think is included.</comment>


Ask HN: What is the one quote that you carry around in your head all the time? - <AUTHOR> Mine for some reason is "By relieving the brain of all unecessary work, a good notation sets it free to concentrate on more advanced problems, and in effect increases the mental power of the race" <comment><USER2> "Memento mori."

\-- "Remember death." A traditional Roman saying, whispered in the ear of victorious generals when celebrating their victories to remind them not to let their heads get too big, nor to waste time in vain indulgence, but to direct their efforts toward ends that are worthwhile. It also appears in Plato's Phaedo, and in countless classical and medieval texts.

I think of it every day.

</comment><comment><USER3> I found something on hn a few days back and i am trying to carry it around and make it a part of me.

"""For someone who hated routines and felt trapped. The simple advice that schedules are my friend and I should schedule my day in a way that would make me happy when I go to bed. Been doing this for 2 months now. Never been more productive or happier. """ [https://news.ycombinator.com/item?id=17159515](https://news.ycombinator.com/item?id=17159515)

The thought that the schedule should be one you are happy about is very powerful. I am trying to incorporate that into my daily routine.

<comment><USER4> Hey there that was a comment that I made. I am glad that it helped you.

I learnt it from Jordan B. Peterson. I highly recommend his book "12 rules for life" which has improved the overall quality of my life by a substantial magnitude in the last two months. This book led me to read some of the writings of Carl Jung and Marie-Louise von Franz which were further eye openers.

A warning though that he has a polarising effect on people. They either hate him or worship him. I would suggest reading the book with a beginners mind and applying in your life what seems apt to you :)

<comment><USER5> Would you mind posting an example schedule of your day? One that makes you "happy" as you say...

</comment></comment></comment><comment><USER6> "If you feel you are in control, you are not going fast enough." -Steve McQueen

</comment><comment><USER7> "If you keep doing what you have been doing, you're going to keep getting what you've got"

<comment><USER8> Recently, I got a different take on this from a book called 'Mad Genius'. The author says in today's fast moving world if you keep doing what you have been doing, you will perish very quickly. Like Nokia.

<comment><USER9> I like. Smells like the Red Queen hypothesis to me:

"Now, here, you see, it takes all the running you can do, to keep in the same place..."

</comment></comment></comment><comment><USER10> "The Matrix is a system, Neo. That system is our enemy. But when you're inside, you look around, what do you see? Businessmen, teachers, lawyers, carpenters. The very minds of the people we are trying to save. But until we do, these people are still a part of that system and that makes them our enemy. You have to understand, most of these people are not ready to be unplugged. And many of them are so inert, so hopelessly dependent on the system, that they will fight to protect it."

</comment><comment><USER11> "We suffer more often in imagination that in reality." — Seneca

</comment><comment><USER12> "You're not allowed to complain unless you are doing something to improve what you are complaining about" Me

</comment><comment><USER13> People who don't value their time will waste yours.

</comment><comment><USER14> "World War III is a guerrilla information war with no division between military and civilian participation."

— Marshall McLuhan, "Culture Is Our Business", 1970, p. 66

</comment><comment><USER15> "No gain without investment" \- me

To remind myself that I won't grow mentally, financially, or physically if I don't put in the time, effort, or work. Any potential gains require some kind of investment/sacrifice on your part. Also reminds me not to complain if I didn't put in adequate effort. :)

</comment><comment><USER16> "When I was ten, I read fairy tales in secret and would have been ashamed if I had been found doing so. Now that I am fifty, I read them openly. When I became a man I put away childish things, including the fear of childishness and the desire to be very grown up."

C.S. Lewis

</comment><comment><USER17> You have power over your mind - not outside events. Realize this, and you will find strength.

</comment><comment><USER18> 1\. _" There are no limits. There are only plateaus, and you must not stay there, you must go beyond them." Bruce Lee_

Got me through the early frustrations of learning to program. Still does.

2\. _" Life is hard on he that delays" Russian proverb_

</comment><comment><USER19> desire is a contract you make with yourself to be unhappy until you get what you want.

</comment><comment><USER20> "You're not here for a long time, you're here for a good time"

</comment><comment><USER21> "There is no life I know that compares with pure imagination"

</comment><comment><USER22> Time to make the Donuts.

It originated with donut TV commercials but I think after 20 years in the industry it applies well to waking up every day to serve my tech clients.

</comment><comment><USER23> "The more you know who you are, the less you let things upset you" from Lost in Translation movie, said by Bill Murray.

</comment><comment><USER24> 'Fahren Sie, fahren Sie, dann brauchen Sie keinen Treibstoff' (Drive, drive, then you do not need fuel) - Erwin Rommel

</comment><comment><USER25> The trouble is you think you have time. Buddha.

<comment><USER26> Thank you! I read further on that Fake Buddha quotes site (motto: "I Can't Believe It's Not Buddha!"), and learnt a lot from the comments and discussions, e.g. on this page[0] - like that some Buddha quotes I've 'known' for decades are just very bad mistranslations. Very grateful.

[0] [https://fakebuddhaquotes.com/we-are-what-we-think-all- that-w...](https://fakebuddhaquotes.com/we-are-what-we-think-all-that-we-are- arises-with-our-thoughts/)

<comment><USER25> That is great research -- I still like the fake quote but it doesn't match the picture the real quote paints.

</comment></comment></comment><comment><USER27> From David Foster Wallace's Infinite Jest: "no single, individual moment is in and of itself unendurable"

</comment><comment><USER28> "Do the thing and you shall have the power." from Jeff Olson's 'the slight edge'

</comment><comment><USER29> No matter where you go, there you are.

</comment><comment><USER30> Worry is like a rocking chair, it gives you something to do, but it doesn't get you anywhere.

</comment><comment><USER31> Actions express priorities

</comment><comment><USER32> You don't get what you deserve. You get what you negotiate.

</comment><comment><USER33> You only get good at what you do

\- someone on the internet or something

</comment><comment><USER34> What one man can do, another man can do.

</comment><comment><USER9> We're all just walking each other home

~ Ram Dass

</comment><comment><USER35> If I had known then what I know now.

</comment><comment><USER36> "Nothing is fucked, Dude."

\- Walter Sobchak

</comment><comment><USER37> Redundancy- 2 is 1 and 1 is none.

</comment><comment><USER38> Unus sed leo.

</comment><comment><USER39> Aut viam inveniam aut faciam.</comment>


From Buffer Overflow to JIT-Spray-ROP [pdf] - <AUTHOR> https://github.com/bcdannyboy/Research/blob/master/JIT-SprayedROP.pdf <comment><USER2> There is a lot of unnecessary fluff in this piece. Suggestion to the author: Focus your writing on the main points and try not to dilute them. The majority of what you have written here drops the SnR significantly and takes away from what you are trying to say. When I do this, I am left with essentially a small paragraph of useful information which can be further condensed into "You can spray gadgets".</comment>