Six years of Go - <AUTHOR> http://blog.golang.org/6years <comment><USER2> I have a bit of a love-hate relationship going on with Go.

On one hand, it addresses many of the pain points I've experienced with other languages. It's easy to build and deploy, reasonably performant, and has a powerful and consistent standard library.

On the other… developing in it feels like a total slog. It manages to be simultaneously far too anal and overly forgiving about syntax. Visibility definition using upper/lowercase is a shite idea. Package names (and packaging generally) are a mess. Magical built-in globals are a huge design smell. The lack of generics, as cliché a complaint as it is, results in loads of duplicated or generated code when building anything more complex than the simplest app. And so on.

I find the whole experience of using it to be unpleasant (rather like using a blunt knife), and yet it fits a set of requirements that mean I keep developing new projects using it – particularly high-performance small services that do things like fling JSON around, for which the built-in HTTP libraries + Gin are brilliant.

I'm looking forward to the point that a (trans|com)piler which smooths over the bad parts is available.

<comment><USER3> I'm in the same boat. Go's simplicity is initially refreshing, then a huge pain once you find yourself writing the same thing over and over again.

A good example is errors being values — which is a great idea. But then you realize every single function needs to be littered 1-10 cases of

      if err != nil {
        return nil, err
      }

It's an _extremely_ common pattern. It's tiring to write, over and over. Tiring to refactor, too: If you change a signature (to add an error, or add another return value, for example), every error check has to be updated.

Unfortunately, Go doesn't offer any abstractions that might allow you to avoid such boilerplate. Functions that return errors cannot ever be chained, for example: If you have "func bar() (MyStruct, error)", you cannot do "foo(bar())". You must always assign the result to an intermediate variable. You could embed the error in the MyStruct struct instead, but that goes against Go's grain.

I find myself wishing for some magic macro that is smart enough to extract a value and return the error for me. Something like:

      try! value, err := bar()

...would expand to:

      value, err := bar()
      if err != nil {
        return
      }

I'm with you on upper/lower-case names. It results in schizophrenic-looking programs. Unless I'm writing a library, I tend to just export anything that isn't obviously an internal implementation detail, for consistency.

I'm also up in arms about ":=" assignment behaviour. I've run into several bugs caused by shadowing inside blocks. You have to be careful when refactoring so as not to cause shadowing issues; really, editors should have their syntax highlighting set to highlight ":=" in blinking bright yellow or something. It's so hard to miss.

It's also inconsistent with how you (or, at least, I) _want_ it to behave. It will shadow existing variables by default if there is at least one new variable on the left-hand side, but that's the _least_ conservative behaviour, and feels contrary to Go's strictness — a language, after all, that considers unused imports to be a compilation error. Recently I've started avoiding ":=" in favour of vars, just to avoid falling into that trap by accident.

To be fair, I love many aspects of Go: Compilation speed, relative performance, ease of concurrency, static strictness. But after working with Go for a while and being quite productive with it, I'm at the same time seriously pining for a better language to replace it.

<comment><USER4> If there a paradigm for handling multiple potential errors in a function?

I'm usually stuck using:

      reply, err := redis.Givemethevalue(key)

      if err != nil {
        return err
      }

      thing, err2 := postgres.getById(reply)

      if err2 != nil {
        return err2
      }

<comment><USER5> I use

      var err error

at the beginning of the function if needed.

<comment><USER6> This helps prevent variable shadowing when using :=, which is yet another weird feature of the language...

BTW, if you really want to make sure you don't make mistakes, use the compiler tools, or, better yet, [https://github.com/alecthomas/gometalinter](https://github.com/alecthomas/gometalinter) .

</comment></comment></comment></comment></comment><comment><USER7> It was early 2013, when we adopted Go as a default language for all our server side (micro or not) services. Before that we had been using Java for some years. The reason for the move were few:

1) Ambivalence on Java roadmap, in my understanding (gradual build up, since after the Oracle's Sun acquisition). Even the earlier clean java docs, suffered from Oracle branding efforts. Downloading older versions were confusing via a long chain of navigation between sites.

2) Boredom after nearly a decade with Java programming.

3) Memory usage of Java in our conditions was much higher compared to other languages (C, C++, Go)

4) Not Java's problem, but whenever one thinks of hosting a HTTP service in Java, thinks of using a container (e.g. tomcat, jetty, Jboss etc.). Go _seemed_ to have made making services very easy. Its possibly just a perception issue, but its there in my experience.

So we wanted to move, and Go looked stable at the time from all my HN readings. C was too bare bones(even string handling was a pain to me, after a gap), and even C++ would not have matched some of the things which Go has inbuilt. Few examples:

1) Json/XML parsing is the easiest with no work (or minimal) required, you can just have the field names capitalized (or use stereotypes) and it gets done, with a line of code.

2) Great HTTP client and server libraries, which make very easy to write your own standalone services, as well as write http crawlers. (I am quite excited that Go 1.6 will have HTTP/2 support for both, as per this birthday blog).

So, in nearly three years of usage, with largely no regrets[1]. It is what they say it is: a bare-bones, fast (both compile & run) and stable (hardly get any errors after you have coded stuff, one of the stablest programming paradigms in error handling, etc).

Thank you, Go team! Hoping to use it for many years, as default server side language.

[1] Some of the 3rd partly libraries, we use are still not ported over to Go. They have Java, C++/C versions.

<comment><USER8> > _It was early 2013, when we adopted Go as a default language for all our > server side (micro or not) services. (...) The reason for the move were few: > 1) Ambivalence on Java roadmap_

So, because there was some "ambivalence for the Java roadmap", a language with multiple implementations, a huge community (including open source), and so entrenched in the industry that will be there in 2100 too, you switched to a 3-4 year old language with tiny adoption compared to it (outside of echo chambers), an arbitrary roadmap as set by the core team which might involve anything coming the time for a 2.0 release, and whose majority of development depends on a handful of people Google pays their salaries?

<comment><USER9> Ha. I built my first company on Java back in 1996. It was a terrible decision. Very buggy, lots of BS from Sun & Oracle that was really more about Ellison and McNealy envying Bill Gates. Netscape made a similarly bad decision when they tried to create a pure Java version of the browser.

I'm sure Java is 10x better now, but I'm not convinced it will be here in 2100.

<comment><USER10> It will be, because there is now more Java running business processes than there is Cobol, and Cobol is surprisingly still with us.

Profitable code dies hard.

<comment><USER9> I don't think there's any 85 year old Cobol though. Most of the S&P 500 is less than 50. It's entirely conceivable the companies that embrace new technologies starting today will, within 50 years, extinguish or acquire most of the of the companies using technologies from 1995.

</comment></comment></comment></comment></comment><comment><USER11> I wish the gdb support were better or that delve were more stable. I also had some weirdnesses using cgo on osx. Then I went into #go-nuts on freenode, and I got told I was wrong and there was no problem.

Back in 2009 #go-nuts seemed to be a much different place.

I write Go at work, and I admire many of the same things in Go I admire about Python.

I still wish generics were part of the language and will say their excuses about not being able to do it in a performant way seem to just be away of avoiding the subject.

Ocaml for instance, has a performant generics implementation.

Sometimes the Go community can have an anti-programming language research and anti-intellectual feeling which can be annoying, since in addition to Go I write a good amount of Haskell.

The tooling is nice as people say, however I think more maturing of the platform needs to be done. It's also never talked about how much slower Go's claim to fame of fast compilation got much slower after the 1.3-1.4 switch to a compiler totally in Go. In all fairness, I could be wrong about the last one since I haven't benchmarked it... but I can say it feels much slower than it was around 1.1/1.2.

Concurrency in Go is easy, however I feel like many erroneously think that channels or concurrency primitives like it only exist in Go. There are other languages with rich concurrency and parallelism options as well.

Using lots of interfaces and casting everywhere gets on my nerves since I like to have the strongest guarantees possible via static typing.

Overall though, I can't say I've had a bad experience with Go. I can say it feels like I'm using an okay tool (great in some places) with maintainers who put their hands over their ears to potential improvements (see the generics proposals over the years).

<comment><USER12> I've been yelled at on #go-nuts too; I ran into what turned out to be an authentic limitation of Go's I/O scheduling, and was instead chided for _'ing out error results in my minimized example code.

<comment><USER13> Yeah I have been bitten by the _'ing errors thing in the go community.

<comment><USER14> Given other aspects of Go's design, I'm actually a little surprised that Go makes it as easy to drop errors on the floor as it does. It feels like the language's strict checking of unneeded or missing imports and its lack of checking for capture of return values are philosophically at odds.

<comment><USER15> If compiler did it, how else would they get to chide people in people on bad style ;-)

But yes, good point. I think a better type system should handle it and make it harder to drop errors on the floor. But that kind of asks for Rust's like sum- type which is too close to generics for their comfort.

</comment></comment></comment></comment></comment><comment><USER16> I've never used Go before, so I went to the project's home page. There's an editing window on the home page with a sample program showing, and a few other programs available in a drop down list. I couldn't help but start playing with the language.

I wonder how much the simple presence of an editing window on a language's home page contributes to overall adoption of the language. It sure lowers the bar to "I'll just write a few lines of code and see how this language feels."

<comment><USER17> Does anyone know how it works? Like does it make requests to a service or is it running in the browser, JS style?

<comment><USER16> There's a section called A Tour of Go [0] which has a series of code samples with explanations. The last part of the introduction to the tour says a little about what they call the Go playground [1]:

"This tour is built atop the Go Playground, a web service that runs on golang.org's servers.

The service receives a Go program, compiles, links, and runs the program inside a sandbox, then returns the output."

[0] - [https://tour.golang.org/welcome/1](https://tour.golang.org/welcome/1) [1] - [https://tour.golang.org/welcome/4](https://tour.golang.org/welcome/4)

</comment></comment></comment><comment><USER18> I've been working on a huge monolithic project (for 1 person) for the better part of 2 years now. It is in PHP, but the backend segments ported over to various other languages like python, javascript(nodejs), and now to Go.

Having now developed 30 micro-services for Go, which all utilise channels and thus run much faster than any other language I used is just amazing.

Not only has my productivity increased majorly, but also my support time has rapidly decreased.

These micro-services which run in the background just work:

\- With PHP they don't run out of memory or the database connection doesn't time out.

\- With Python I don't get random crashes due to pool.map.

\- With NodeJS I don't have to run multiple instances to get the speed.

I've looked at web frameworks like beego, gin, revel and others. But I'm waiting till something comes out that's more inline with what I have used with PHP. Something like slim framework.

If it ever does come out, it will give me the push to switch 100% to Go. Can't wait really.

<comment><USER13> I tried gin, martini and revel and found myself reaching to go back to largely the stdlib after about 6 months of development.

The stdlib with a couple convience functions really is quite good.

<comment><USER19> Me too. I found that most frameworks actually get in a way instead of helping. stdlib FTW

</comment></comment></comment><comment><USER20> I love Go. It helped me so much, not only career wise but also on a more personal level, bringing back the excitement in programming I missed so dearly from my early days. Drop by at one of our Golang meetups if you're in the Munich area. [http://www.meetup.com/Munich-Gophers-Go-User- Group/](http://www.meetup.com/Munich-Gophers-Go-User-Group/)

</comment><comment><USER21> Congrats to the team. Go has never let me down in my work and my personal projects, it's just awesome.

</comment><comment><USER22> Go seems like a fun language that has been sitting on my "look into it list" for a while, can't belive it's already six years old.

Since the TensorFlow video post is currently on the frontpage as well...as someone who uses neither C++ nor Go (I can write FizzBuzz level of code in both and read both well enough to get what's going on) I have to wonder how much internal buyin Go really has at Google if the core of such a project is implemented in C++. It's a project they see as valuable in the future and it would lend itself really well to Go as these calculations are done distributed and yet they picked C++.

[I'm not sure how much of the old framework they reused but if the will to Go was really strong I'm sure that wouldn't have been an issue]

<comment><USER12> Go is a language designed by Google people, but it is very much not the standard Google language. _Most_ things Google does aren't done in Go.

<comment><USER23> Having said that Rob Pike told me that Go is now one of Google's "official languages".

<comment><USER12> ... which just means developers at Go now have permission to use it, along with Python, Java, and C++, to build things, right?

<comment><USER23> I believe so.

</comment></comment></comment></comment></comment><comment><USER24> Go is a great language. Building REST servers in Go is a doddle and the related tools have obviously been designed to work well together from the outset which is unusual.

That said, I started learning D at about the same time as Go, and for some reason D has attracted me more. Possibly the C ABI compliance (I was doing some JNI work at the time).

One question that I haven't found the answer to yet though is how well Go apps perform for long running processes, eg weeks or months? Have there been any issues around memory usage or resource handling? Any need for restarts?

<comment><USER25> Go websites are essentially long running processes. I have several websites built in Go, all of them running for about 2 months already with no hiccups.

<comment><USER26> I can echo this. Have some go processes that have currently been running for over 6 months.

</comment></comment></comment><comment> kris-s I picked up the new Go book (gopl.io) and have had a lot of fun going through it. The prevailing feeling of Go is "getting things done".

I also write a little Go program every day as practice. If you want a sample of some Go. [https://github.com/kris-s/daily- go](https://github.com/kris-s/daily-go)

<comment><USER27> > The prevailing feeling of Go is "getting things done".

This is a common refrain amongst go proponents and I find it quite distasteful. It either implies those of us who prefer other languages aren't "getting things done" or those who feel productive in Go aren't smart/hard- working/educated/etc enough to "get things done" in other languages. I don't think either is true.

I think a more accurate way to look at Go is that the language, tools, and standard library make decent design trade-offs when your target software is 1) simple 2) network daemon-y or a CLI and 3) going to be worked on by a wide variety of developers. There are lots of problems that fall into that problem set, and it is very nice to have a language targeted at it, but Go is certainly not a good fit for a huge number of software projects. You will be less productive in those cases using it.

<comment><USER28> It's true though. Go has a small number of language features, and they are only the simplest ones. It can be learned in a day. Other languages like JS, Ruby, and Python have a big fixation on figuring out the prettiest syntax for stuff (JS promises and chaining etc, "Pythonicness", and Ruby's incessant cuteness). In Go, you can't really make things pretty, so you just bang out code.

<comment><USER29> >> It can be learned in a day.

The syntax perhaps. In reality there are a large number of concepts and idioms to learn on the never-ending road to really becoming proficient.

<comment><USER30> Yes, but there's a kernel of truth there. I wouldn't say I managed to learn Go in a day, but after perhaps six months using it I was much closer to mastering Go than to mastering other languages I'd been using for years. Go's road to proficiency is a shorter one, there's just less stuff to cover.

Take initialization for example: look at all the edge cases belabored in section 8.5 of the C++14 spec, or even the intricacies of initialization in a simpler language like Python. Now contrast this with how much lexical and conceptual space it takes to describe zero initialization in Go's spec: [https://golang.org/ref/spec#The_zero_value](https://golang.org/ref/spec#The_zero_value)

As in other areas, Go's approach here has downsides. (Possibly major ones.) But those tend to be conscious design decisions to minimize the total number of concepts and idioms present in the language.

</comment></comment></comment></comment></comment><comment><USER14> I recently implemented a RESTful resource mapper in go, which just accepts some basic parameters and an exemplar of a storable structure and wires up all the HTTP endpoints necessary to give users CRUD access to the resource.

I'm honestly very happy with how straightforward it was, even lacking generics ---I solved the problem of no generics by basing the resource creation and management on JSON and a "Storable" interface that just defines key() and newEmpty() methods (so I have to write five lines of boilerplate for every struct that will be a resource... _shrug_ ). I didn't parameterize the storage logic, basing it on only a single NoSQL backend (BoltDB); however, parameterizing that side shouldn't be harder than wrapping the database access behind another interface.

I like the ability to switch between tight static typechecking and freer runtime typechecking on-the-fly, without having to build a large, complicated framework for either within the language. It may not be the most innovative language of the decade, but I think it's a pretty good combination of features for practical, high-performance web server development.

<comment><USER31> Would you care to share some code example?

<comment><USER14> Happy to; I'll share the whole thing.

[http://pastebin.com/qBh6NRXc](http://pastebin.com/qBh6NRXc)

It's not cleaned up for easy reading (hell, I haven't even run `go fmt` on it ;) ). But it has unit tests and seems to work. ;)

One thing worth noting is that it relies on the Storables to also be tagged with necessary JSON. It occurs to me that I could also have used tags instead of the key() function in the interface to specify which field in the Storable should be the resource name; key() is a bit more flexible in that the function could calculate the name using any method though.

<comment><USER32> Just for you, I did a code review. The code review has two revisions, one where I gofmt'd it because I can't read non-go-fmt'd code anymore, and a second where I added comments expressing some concerns. I'll be honest, I gave up on a few bits just because it wasn't fun to do; I strongly suggest rethinking the use of a storable interface vs taking an 'interface{}' value for both gets and puts akin to how the json stdlib does it.

You can see the comments here: [https://gist.github.com/TheDong/ce1d7b86b88c86d972b6/revisio...](https://gist.github.com/TheDong/ce1d7b86b88c86d972b6/revisions?diff=split)

You should never post code without a copyright license or disclaimer attached and I'd appreciate if you rectified that forthwith.

<comment><USER14> Thanks for the review! I appreciate the feedback. One key piece that might have been unclear: since this code is part of a larger module (note package main), some of its parts live elsewhere. If I were to publish this, I'd consolidate those parts and build some proper module isolation here. OnStore is there purely because one of my resources needs to notify another part of the program that it has been stored; if I ever clean this up for public consumption, I'd probably want to add both pre- and post-handler hooks (along with the ability to add more rules and change the defaults, as Angular's $resource gives the client).

The advantage to the Storable is that other parts of the program can create and store those resources without needing knowledge of how keys are constructed. I also can't think of a way to do what empty() does without making it an interface function; "I need another copy of this unknown interface type" isn't something go has a clear solution for. Hypothetically, I could make empty() into a function that returns interface{}, take the key() suggestions you've given (though that leaks key-making knowledge), and then the whole thing would operate on interface{} type... Doable and more flexible, but not quite as clear on what resource will actually be stored and retrieved. Good tradeoffs.

A bit of feedback on feedback: avoid adjectives like "dumb" and "stupid." The signal-to-noise ratio is too low on them, and it makes for a harsher community (as other commenters in this topic have mentioned on their experiences trying to get help).

</comment></comment></comment></comment></comment><comment><USER33> Thanks you, Go team!

Have been using Go for the last few years, from backend, tools, and even complex scripting type of tasks (for things more than I would like to do in Bash). Start using Go for game development as sideline projects recently, it is fun.

Granted there are things I would like to see may not on the road map, but I am very happy with what we have now, the great tools, and the great community.

Keep up good work and looking forward to the future releases!

</comment><comment><USER34> I tried Goland for two of my personal projects. Initially I thought I will get used to the new syntax, but it never happened. It may have certain performance-edge over other languages but I wouldn't call it a modern language. I find coding in C more fun than Golang..

<comment><USER35> I picked up Go because C frustrated me so much. Can you give some examples as to why you prefer C?

<comment><USER36> Not the author...

I prefer C99. A smattering of features I like:

      * Variable Length Arrays
      * Variadic Macros
      * Designated Initializers
      * Anonymous Structs
      * Compound Literals

Some of the meta-"features" I like:

      * No built-in runtime or GC
      * A choice of dynamic vs static compilation
      * A good libc is wonderful but not necessary to get work done fast
      * The tooling is mature and plentiful

I'm sure Go is a fine language. I probably suffer from some sort of first- language bias as I've been using C for a long time and only know a smattering of Go from toy programs, blog posts, and reading the source to interesting projects like CockroachDB.

<comment><USER37> I just want to point out:

1\. Variable Length Arrays: Go has slices 2\. Anonymous Structs: Go has these 3\. No built-in runtime (in C): This is not true unless you are compiling -ffreestanding -nostdlib, etc. I have done this in C, but such programs have to call system-calls directly and provide their own malloc, etc.

<comment><USER36> Not for every project but it does have it's uses (re: -ffreestanding -nostdlib, etc)

</comment></comment></comment></comment></comment><comment><USER38> Started using Go for my latest project (a successor to Evernote). It feels like such a relief, especially having just come out of a node.js project. It's everything I wanted in a (web-app) programming language, and for the first time I can say that a language has actually made my code better. I've never had a codebase this clean before.

<comment><USER39> I don't mean to be snarky and I'm definitely showing my age here, but isn't that exactly what devs were saying about node.js two years ago?

<comment><USER40> I can't remember anyone ever claiming javascript/node made their code cleaner. Speed and throughput were claims but not code quality.

<comment><USER41> I've been coding since forevs, and I really do feel like Go pushes you to keep clean code. Maybe the language, but a lot of it's just culture and leading by example.

Every time I peak into the source of a standard Go package, I'm blown away by how clean and simple the code is -- and it's a fantastic way to gain a deeper understanding of the language.

That has mostly not been my experience diving into std C library code, or quasi-standard stuff like boost...

</comment></comment></comment></comment><comment><USER42> I've used Golang extensively for a few years now anywhere from ARM/Linux to x64/cloud based containers (and I admit, occasionally on Windows!). It's really a great platform, very robust and has an excellent ecosystem. I can't recommend it more highly.

</comment><comment><USER43> I find it curious that virtually any negative or critical comments about Go get downvoted.

<comment><USER44> Because you don't insult someone when it's his birthday!

<comment><USER3> On the other hand, honouring people by roasting [1] them is also tradition. Maybe if the criticisms were funnier.

[1] [https://en.wikipedia.org/wiki/Roast_(comedy)](https://en.wikipedia.org/wiki/Roast_\(comedy\))

</comment></comment></comment><comment><USER45> I'm surprised to not see any mention in the comments about the biggest change coming in 1.6: the package vendoring mechanism. This has been a big missing piece for awhile and I'm glad they're addressing it in an official way.

I was super excited for the cross compilation abilities on Go 1.5 and now I have something else to be super excited for in Go 1.6, can't wait!

<comment><USER41> I was confused by that. Is this going to be any different than GO15VENDOREXPERIMENT which we have now?

<comment><USER45> I guess I was hoping for a composer-like versioning system, but I suppose that's not a given?

<comment><USER41> It would be a surprise to me, but we'll see. I haven't seen much discussion since the vendor experiment, weirdly. (But I haven't been looking, either.)

</comment></comment></comment></comment><comment><USER46> I've started working in Bioinformatics. The languages in use and libraries seem to by Perl/Python and some java. Except for the stuff that needs to be fast, then its C. Although I notice some movement to use Rust instead of C (having installed some C based tools having package management would be glorious).

It would seem the concurency model of go would be a great fit for a lot of those existing python/perl tools. My searchingg for projects show it hasn't really taken off in this domain. I might start rolling my own packages.

How is the package management in Go? Data structures and String manipulation? And is does that concurency scale across nodes (al la MPI)?

<comment><USER47> I'm a computational biologist that recently ported our webserver (genestation.org) from Tripal (PHP/Drupal) to Go. The performance gains were huge, but the simplicity of development and deployment was even better. I'd strongly recommend Go for a biology web server. However, Biogo is not remotely as far along as Biopython or Bioperl. Also, Perl beats Go for ease of string handling. Unfortunately, there is no equivalent to Numpy/Scipy in Go. Despite these areas of weakness in the ecosystem, I have switched to Go entirely except for one-liners and one-off parsing in Perl.

<comment><USER46> Thanks. They new site is snappy.

Tripal I had never heard of. It uses "Chado" db schema which I have heard of (though flybase) which while flexible isn't always performant.

Performance gains and simplified development are so appealing (I have 12 tools to maintain in Java/perl/php)..

Biogo is what I was looking for. [https://github.com/biogo/biogo](https://github.com/biogo/biogo)

<comment><USER48> You said above you 'may start rolling your own packages'. If you're interested in helping develop the numeric ecosystem, please come join us at gonum [https://groups.google.com/forum/#!forum/gonum- dev](https://groups.google.com/forum/#!forum/gonum-dev) github.com/gonum.

Dan (the lead developer of biogo) is very competent and I'm sure would love bug reports and PRs in biogo as well.

</comment></comment></comment></comment><comment><USER49> Golang and I have had a mainly wonderful relationship. I think that the performance and concurrency features that it brings to the table are unparalleled. No that Golang is just 6 years old and probably has a few more decades of relevance. Although they need to do something about the compilers as the compiled binaries get more bloated with each release.

</comment><comment><USER19> I have written tons of services in Go. What I love about it is stability. Services written in Go are rock solid.

</comment><comment><USER4> I've used Go for a couple years but am only just writing my first production system in Go. I think one of the major complaints is that it's use-cases are ambiguous to beginners. Go, IMO, is a systems language and should not be the first thing you pull out when someone says "write a web app".

I think Go has a very limited use case, but it is incredibly good for that use case. If I had to define it right now it would be along the lines of "Highly concurrent micro-services (re: small code bases) that requires decent performance (memory + speed) in a somewhat distributed fashion". Obviously it's not perfect but it's the feeling I've developed recently.

<comment><USER50> Go started as a niche language and worked well for that niche, but like all niche techs that become dependencies, they tend to get bigger overtime. Go success is undeniable and is reaching a critical mass where there will be no going back.

There are alternatives but most of them aren't backed by a big corp like Google, so they will have to succeed in their respective niche before getting widely adopted. I wish that wasn't the case cause languages like D,Nim or Crystal are really good and way more enjoyable to write in my opinion. Out of all of these(including Go) one will be the next big language, no question as people move from dynamic or VM backed languages (for good reasons).

</comment></comment><comment><USER51> I would have used Go for an API recently until I found out the AWS SDK for Go isn't production ready. Libraries still have some catching up to do but will only get better with more time and testing.

</comment><comment><USER52> Go made me excited about programming again. Love it.

</comment><comment><USER53> Anyone happen to have a link to a good guide/tutorial for building a mobile backend in Go with gin? Or know of a public github repository with a good sample project. I've never done any backend work, and I'd like to build a backend for a simple iOS app to start.

</comment><comment><USER54> Happy anniversary.

I replaced python with go in my projects and i'm so happy!!!

</comment><comment><USER55> Thank you! Go has made me enjoy programming once again.

</comment><comment><USER56> All I can say in words is - thank you.

</comment><comment><USER57> Despite the hype in the beginning, it never caught my attention.

</comment><comment><USER58> 呵呵

</comment><comment><USER59> I'd say after 6 years adoption rate has been rather lackluster

<comment><USER60> Compared to what other new language?

<comment><USER59> maybe not specific to language, but compared to projects like Angular, React etc... Go has much less traction. Swift is a new language and is already much more widely used.

<comment><USER28> Not going to debate your claim, but Swift is an unfair comparison, as it is practically forced upon you if you want develop for one of the most important platforms today (you can of course still write stuff in objC, but Apple has made it clear that you'd better learn Swift).

<comment><USER61> >[Swift] is practically forced upon you if you want develop for one of the most important platforms today

>Apple has made it clear that you'd better learn Swift

Can anyone point to any statments to this effect by a leader at Apple? I haven't found any with a web search.

</comment></comment></comment></comment></comment><comment><USER62> Feel free to downvote me if you want, but I'm skeptical about Go and what caught my attention in this linked article is the picture. Pretty much what I feel about Go. Was it a (sub)conscious choice?</comment>


Ask HN: How to find part-time developer work? - <AUTHOR> <comment><USER2> At present I derive all my income from part-time work and side projects.

The first thing is to figure out what _not_ to do. You can't work in a field where people routinely hire full-time employees with ease. So you can't do Java work part-time, for example. (Well I mean you _can_ , but it's like saying you _can_ be elected to Congress. Let's do something easy.)

So, you have to start in some field where 9-5ers can't be easily found to fill the position. iOS/Android dev are like that. Maybe there are web specialities that are like that. If you have some deep expertise like machine learning or computer vision or graph algorithms, maybe those specialties are like that. But the operative criteria is to find some field that full-time employees are not easily had.

The next step is to filter by projects where time is not the biggest criteria. Because in spite of Fred Brooks and his MMM, ordinary people still believe that if you work more hours the project will get done faster, and will pressure you to become full-time. So you have to find people who are unconcerned about delivery dates, or rather, who have overriding concerns. Quality concerns. Cost concerns. If you find someone who has a fixed budget for his project, for example, if that person can get a better developer at 20 hours/week than he can at 40 hours that starts to look like an attractive value proposition. Because not only does he get a better developer, but with a lower burn rate it's easier for him to get deep visibility into where the money and time is actually going. Those benefits outweigh the benefits of completing the project faster, but only for projects that have these sorts of overriding concerns.

There's more you can do, but those two steps are probably all you need to start consistently landing part-time gigs.

It's worth pointing out as well, there are a variety of near-part-time deal structures you can negotiate (for example rotating 1 week on, 1 week off). These might be worth exploring depending on your specific motivations for seeking part-time work.

<comment><USER3> drew here has it right. While it is possible to find money on side projects in more mainstream technologies like Java or .NET; it is easier in specialized fields.

Depending on where you are targeting geographically those technologies vary a lot; I personally have seen a lot of demand for iOS/Android, but even more demand for Ruby on Rails. I think that quite a few Ruby on Rails developers left the community and flocked to Node.js as the next shiny thing and that has just made it easier to find Rails contract work.

Not only is it easier to find work in a less mainstream technology, but you are able to negotiate better rates since it is more difficult for businesses to locate help. After a certain point you can't scale by taking on additional hours; so your hourly rate makes a big difference.

And hourly vs fixed rate contracting should be considered. I will negotiate my hourly rate based on term of contract, but under no circumstances will I take fixed rate contracts any longer. Quite a few of my friends in the contracting scene are the same way. I've seen too many times where this just leads to continual "feature creep" and a strong difference in opinions of if scope of work has been expanded beyond the agreed contract (in all cases it was). I bid a fixed rate contract with a couple of associates against my better judgement. Based on the initial scope of work it should have taken about 3 months. Instead it took over a year and the lead developer on the project walked away making a rate of right around $10/hour.

And this point can not be overstated.

Network! Network! Network!

If you are an introvert you are going to have to get over it. It doesn't matter if you have the raw programming skills of Linus Torvalds or John Carmack; if you can't get out there and make connections you aren't going to make any money.

I am very introverted by nature, but I force myself to regularly attend meetups and conferences; and make a point to connect with new people at those conferences. You need to grow your real social graph; not your Facebook/LinkedIn/etc... Nothing makes the same lasting impression as a firm handshake and 5 minutes of conversation face to face.

<comment><USER4> I keep expecting to see a win-win industry where introverts with skills revenue share with extroverts who can sell their skills. Specialization is a good thing, it seems inefficient for people who don't enjoy networking to _need_ to do it in order to make money.

<comment><USER5> But then the best extroverts will want to work with the best introverts and vice versa, so the introverts still have to "sell" themselves!

<comment><USER6> Or the best extroverts will seek out the best introverts. If you are selling something, you want to sell the best product around - it makes your life easier - so you find the best possible thing to sell.

<comment><USER5> Right, but how do they know who the best introverts are if the best introverts are not marketing themselves in one way or another?

</comment></comment></comment></comment></comment></comment><comment><USER7> First, talk to people looking for developers. That part is fairly easy: just about any networking event in NYC has a dozens of people looking for devs. I don't know where you're located, but the same is probably true for your area.

Once you're talking, convince them that working with you will be easier/quicker/more-effective than working with anyone else. That's the hard part, which definitely requires some practice. Pro-tip: don't try to convince anyone that you'll be the cheapest option, which is almost always a losing game to play.

If you prefer, I'd be happy to do the hard work for you. I run a startup that connects senior freelance developers with high-paying companies: [http://getlambda.com](http://getlambda.com).

<comment><USER8> I was corresponding with you guys and never got an email back from Ken. I was also asking about part-time work.

<comment><USER9> Ditto, my guess is they're just skimming for the top earners.

<comment><USER10> Felt to me like they didn't understand how to sell people who aren't "X experts" \- I'm not a digital media expert, I'm not a wordpress expert, I'm not an iOS frontend expert, I'm a generalist. I do software development, which apparently isn't that salable these days ;)

<comment><USER11> don't think of it as being a generalist. think of it more like multiple specialisms.

</comment></comment></comment></comment></comment><comment><USER12> Best way is to get a full time job that you really enjoy. After months of drought, the offers for high-payed consulting work (that you can't take) will suddenly flow in.

<comment><USER13> I told my wife this past October that I'd stop taking side work by November and get our hard wood floors installed.

It's now January and my clients are continually agreeing to more and more absurd hourly rates, making it impossible to stop.

<comment><USER14> If your rate is higher than the cost of a flooring contractor, why not just hire one?

</comment></comment></comment><comment><USER15> I am making my living doing part-time coding (still doing my degree) for the last 2 years, was unemployed for only about 3 months. I am doing PHP and AngularJS.

It's really all about the people you know. I got the best gigs just by asking people (normally other developers) I know if they know someone who needs a developer. So, yes, it's all about networking but not the numbers but quality of connection. No one, who talked to you for 10mins, will vouch for you, really.

I've tried elance a bit, and getting the first gig there looks like a game of numbers. If you apply for many jobs, sooner or later you will get one... But checking new postings, writing decent cover letter is time and mental energy consuming. I gave up there. I don't know, maybe it's worth the hassle getting the first one.

If you try to make a living doing part time, the key is 1) high enough pay rate 2) be strict about the payments.

I used to have a rather low rate and was very trusting (e.g. if the payment is late by 3-4 weeks I still trusted because I 'felt' that he is trustworthy). I ended up in the situation when I didn't have what to eat for a few weeks, while I was getting 'I really made the payment' BS, and 0 motivation and energy to do anything. But now I am happy that it happened, I moved on, and got much much better gigs and 1.5-2 times higher pay rate and payments always on time :)

AMA!

</comment><comment><USER16> Depends what you mean, I guess. I am "normally" employed with one company, not a freelancer, but I work "part-time", i.e. 30 hours/week. Getting that type of gig is likely different from getting the freelance/consultant type work.

(For what it's worth, the way I got mine was that I was hired for full-time/40 hours, did that for about nine months, then went to the manager and said "hey, how about I only work 30 hours?" and he said "ok".)

<comment><AUTHOR> Your situation is exactly what I'm looking for. Being hired by a company but only working part time. Consulting is difficult (for me) because it is a huge time investment.

<comment><USER16> To fill my experience out a bit more, it wasn't something I was planning to do when I got hired. From a personal standpoint, I had a kid, and my wife got a higher-paying job so my salary became less important. From an office standpoint, there were a couple people already doing a similar schedule (I do three 10-hour days T-W-Th), so I wasn't going completely out on a limb. It really did fall into place pretty easily.

(I work for a very large company which HN would probably scoff at, plus I work with very uncool things like Java and Oracle.)

My situation has me fall in-between for a lot of HR things -- my pay has always been given in terms of a yearly salary, and usually as what it would be if I were full time. I just get 3/4ths of it. And I'm technically paid hourly, which helps keep any requests to come in on my days off to a minimum, since they actually have to pay me for it. I accrue 3/4ths of normal vacation time, but I still get all the other standard benefits. And I get to spend two extra days a week with my now two children.

Really the only "bad" thing is that I know it'd be difficult to get into this situation again, so if my job stagnates, it would be hard to go out and try to find a new job, unless I am ready to go back full-time.

<comment><USER17> _I work for a very large company which HN would probably scoff at, plus I work with very uncool things like Java and Oracle._

Don't imagine that HN is some monolithic group of fratboys obsessed with the latest cool whatever. Some of us are dads like you, some of us work for big companies like you (I don't at the moment, but I have no objection to it), and some of us take pride in being able to use the tools we need to use to create useful stuff and don't care about hacker fads, fashion, or fame.

</comment></comment></comment></comment><comment><USER18> I've found it's almost impossible to find good work using cold calls or responding to ads. Try to find people you know. Getting the first job is the hardest, but if you do a good job -- the referrals will start to roll in.

This has been inadvertent, however I've also gotten a lot of work through various projects[1][2] I've done that have gotten big on HN. Write it off mentally as a marketing expense, and spend a few days making something awesome.

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

<comment><USER19> Any tips for actually getting a Show HN post on HN? I've posted a few things but been frustrated to see them immediately fall out of the new page with only a couple votes.

<comment><USER20> Not that I do this, but upvote your post with like 10 upvotes in the first 10 minutes. You'll have to use different proxies to mask your IP. Keep in mind that this is pathological behavior for the community though.

<comment><USER18> This is shitty advice. It gets you to the front page, sure -- but something that isn't interesting still won't be interesting no matter how many votes.

There's a secret to getting your Show HN to the front page: make something genuinely interesting. Do it, and it's dead simple to get on the front page.

</comment></comment></comment></comment><comment><USER21> I suggest looking for local hackathons or even better, startup weekends near you.

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

Startup Weekend is a great way to meet connections while helping them build a fun project for the weekend. Show them you are a badass talent. You'll get noticed.

</comment><comment><USER22> Part-time is easy to come by when you're doing consulting work, since you can work out the requisite hours with your clients. I did full-time remote consulting for about 5 years, dropped to part-time consulting for a year to concentrate on music.

Finding a client that we could be flexible on hours with was difficult, though. Many clients are tied to the ass-in-chair time cycle. We eventually found a small company that was made of people who were largely remote and worked really flexible hours themselves.

Eventually I found a job in SF that offered full-time and part-time, and you can move between the two. This has been really great since we started a family last August - I took a month off, then came back doing 4-day weeks.

If you're in SF, we're hiring - [https://news.ycombinator.com/item?id=6477194](https://news.ycombinator.com/item?id=6477194)

<comment><AUTHOR> Hey, I would like to learn more about where you work. I couldn't find your email in your profile.

</comment></comment><comment><USER23> December/January are always the toughest month for me. Lots of companies are still working out their annual budget.

I usually just go on vacation.

</comment><comment><USER24> I have had some luck finding part time work over the HN monthly freelance thread and through developer email lists (NYC.rb specifically). In the case of the email list it was as easy as sending an email to the list describing myself and my past experience and saying I was looking for part time work. A handful of people reached out to me.

<comment><USER25> If you have a minute, could you go into a little more detail about finding developer e-mail lists? Not sure what you mean here.

Thanks!

<comment><USER24> Looking through my email now it looks like most of the lists I'm subscribed to are through meetups on meetup.com. I'm a member of a number of meetups that are related to technology I use (e.g. Ruby, Javascript), or topics I'm interested in (e.g. data journalism, I'm a member of Hacks & Hackers). I receive either the emails in real time or as a daily digest. I have only turned to those lists once looking for work and it was a big success.

</comment></comment></comment><comment><USER26> The first thing to check is whether your former employer has a need for part time. Both parties are validated, and there is little to no ramp up needed.

The next I'd look at is mobile development. Now that there are multiple platforms to support (iOS/Android/WinMo), the demand for part time specialists is huge. There are a lot of companies that support a subset of those platforms but would like to add more (if they only had the expertise).

</comment><comment><USER27> I do about 350-500 hours per year of freelance work ($100 per hour usually) in addition to normal full-time job. It is all through people I've worked with in the past who contacted me. If you have previous employers or co-workers, maybe ask if they have any extra work or side projects they need completed.

</comment><comment><USER28> If you have a good online portfolio (a site showing what skills you have, what projects you've done, and your personality) as well as good client facing skills, check out matchist. We built it to help awesome freelance web and mobile devs (in the US only currently) find curated projects.

</comment><comment><USER29> Become active in developer communities, create and contribute to open-source projects on GitHub, and people will contact you.

Companies like Toptal ([http://www.toptal.com](http://www.toptal.com)) mine GitHub and online developer communities looking for talent.

</comment><comment><USER30> 1) Start with craigslist. Lots of ads for people/companies looking for contract devs. Be cheap if you're not experienced/awesome yet. 2) Do a good job, so your references are good. 3) Build your network. Once you have that rolling, you'll never go dry.

</comment><comment><USER31> For people who are already doing part-time dev work, do you find that people are curious and/or suspicious about why you're doing it part time? ie, "If you're actually good at this, why aren't you a full time employee or consultant?"

<comment><USER32> Funny thing is when I'm getting really crappy as a freelancer I cave in and accept some fulltime job offer. So it's the other way around. If you are that awesome then why are you working 9 to 5? It's easy and pays well, that's why.

</comment></comment><comment><USER33> I've picked up side gigs from Hackathons. Typically if you win you'll get a few business cards that can turn into leads. Sometimes your teammates hire you for their own projects.

</comment><comment><USER34> You know PHP? I'm hiring part time. Can be 100% remote if in the US. I know other people looking for P/T devs all the time for mostly one-off client projects.

<comment><USER35> Not OP, but actually looking for something in the 20-25 hours a week range. Plenty of PHP experience, do you have some more details and a contact address? (my email is in my profile).

</comment></comment><comment><USER36> i think it's kind of hard to find specific people targeting part-time developers for a long period of time. they normally want contractors/free- lancers to help out on the project and then they'll cut you out.

I just randomly found one on elance out of nowhere. all i did was post that i did django web-dev for a year and bam, client received. I'm learning a lot though...like... what requirements to set for myself before I agree with the client.

</comment><comment><USER37> One trick is to start full-time and as soon as you become indispensable to the company ask to go part-time.

</comment><comment><USER38> 1\. Get full time job at IBM. 2\. Prove your worth. 3\. Move to part time.

Honestly, I'm really glad I don't work at IBM. But when I did work there on an internship, I noticed part-time people who seemed relatively respected and secure in their positions. I haven't seen that very much since.

<comment><USER39> I'm not sure this would work very well lately. IBM had a series of layoffs and are chasing short term shareholder value.

</comment></comment><comment><USER40> Can you do C#?

<comment><USER41> If OP can't, I can :) My contact information is available in my profile if you're looking.

<comment><USER42> Me too - contact info in profile.

</comment></comment></comment><comment><USER43> email us at email@example.com

<comment><USER44> Are you a recruiting agency? You dont even know what stack the developer uses...

<comment><USER45> They're a "design, development, and consulting agency based in LA and NYC. We're young, dynamic, and take on lots of cool projects."

[http://www.indeed.com/cmp/Fc-Flamingo](http://www.indeed.com/cmp/Fc-Flamingo)

</comment></comment></comment><comment><USER46> I find it impossible to find freelance work when everyone thinks that it's like building a chair, except the chair sometimes turn into tables and it's still called a chair, and refuse to pay for a table because it's still a chair in their mind.

Few options remain for folks like me except to build our own SaaS products or software and hope it pays rent.

</comment><comment><USER46> 1) How do you guys find contract work? 2) How do you actually write up the contract and have them sign it? Is there an open service which does this? 3) How much up front do you charge? 33%? 50%?

</comment><comment><USER47> diddnt know such gigs existed</comment>


Replacing Linux with a Database System - <AUTHOR> https://www.nextplatform.com/2018/07/23/replacing-linux-with-a-database-system/ <comment><USER2> If you click through to the actual paper at the bottom of the article, the methodology here is just astonishing: they start by, without evidence, asserting that the main thing fork() does is to insert and remove processes from a list of processes. Then they write a program that creates a table of processes in a distributed database and adds and removes rows from it. Then they compare the speed of that with the speed of actually running fork() on the same cluster of machines. That's the entire paper. You can't make this stuff up.

"I am not able rightly to apprehend the confusion of ideas that could provoke such a question." - Charles Babbage

<comment><USER3> Bizarre. Linux must already have some kind of "database" system for keeping track of system resources. At best, the claim would be that Linux is using an inefficient database, which seems unlikely.

<comment><USER4> You would absolutely be surprised how far you can get using a process's memory as it's official database and just dumping it out to disk periodically for persistence. I kind of want to write an article but the article can't do it justice: It's something you need to experience yourself to fully appreciate it and be wowed like I was. I'm sure Linux uses files for its persistence layer for most cases.

<comment><USER5> We're talking about the process table and so forth. It's never persisted at all.

</comment></comment></comment></comment><comment><USER6> z/TPF [1], is basically a database system OS that runs almost all VISA, AMEX, Citibank (authorizations); Holiday Inn, Amtrak, Mariott, Air Canada, Delta, Japan Airlines, Travelport, Trenitalia (reservations). But it's IBM proprietary and runs only on IBM licensed hardware.

It's always in my programming dreams to be involved in building a database OS with I/O capabilities since I worked with TPF and MUMPS.

[1] [https://www.ibm.com/it-infrastructure/z/transaction- processi...](https://www.ibm.com/it-infrastructure/z/transaction-processing- facility)

</comment><comment><USER7> This idea of combining concurrent processes and data tables is reminiscent of "tuple spaces" ([https://en.wikipedia.org/wiki/Tuple_space](https://en.wikipedia.org/wiki/Tuple_space), [https://software-carpentry.org/blog/2011/03/tuple-spaces- or-...](https://software-carpentry.org/blog/2011/03/tuple-spaces-or-good- ideas-dont-always-win.html)).

<comment><USER8> To be honest, if your database has decent queuing facilities, it isn't a bad programming strategy to use the database as a tuple space for piranha processes. You don't run afoul of corporate architecture teams for using 'new' software and you can devolve a lot of business processes into small, independent programs. It also provides an easy way to upgrade parts of your software by freezing a queue table for reads but not writes.

</comment></comment><comment><USER9> This makes sense. Once you have something with a lot of compute nodes, you have to orchestrate them all somehow. That's the real "operating system" for such systems. Each node just needs a loader and setup program to load work containers. Supercomputers, big cloud data centers, and things built from lots of GPUs tend to be organized like this.

Have things reached the point yet where containers run as Xen guests, and the real OS is Kubernetes? Then you don't need Linux under your container, and with the right library, you don't need Linux in your container. Less OS state to get screwed up.

<comment><USER10> I feel like collectively the tech industry has forgotten what an OS is. We're so used to Linux bring batteries included now that we assume we can supplant it.

Linux itself is not going away simply because replacing all those device drivers and ABIs is going to be incredibly difficult. Now, if you're suggesting something new will sit atop Linux as the user land acting as a sandwich-filling between the Linux kernel and a multitude of userlands spanning many systems- I might agree.

<comment><USER11> No we have not, UNIX is C's runtime in a way, standardized as POSIX for compatibility across other platforms.

So when using POSIX, or any other programming model rich enough not to mess with OS specific APIs, the OS becomes irrelevant.

It can be Linux, Windows, Aix, OS/400, z/OS, or even bare metal, it doesn't matter.

<comment><USER12> >So when using POSIX, or any other programming model rich enough not to mess with OS specific APIs, the OS becomes irrelevant.

Except that things like systemd and a lot of redhat related software rely on Linux-specific functions like cgroups so they are not portable. Good luck replacing Linux even if something that much better comes up.

<comment><USER11> Not everyone makes use of those features and the last time I was using a Red- Hat system, it was for Java deployments, which is also not Linux related in any form.

Same applies to the C, C++, Fortran and now Chapel code that usually runs on HPC clusters.

<comment><USER12> Everyone uses systemd... I hope people are smart enough to not fall for it and not use all the scope-creeped features of it but if you add all the little things up, it turns out that we are getting more and more stuck with linux.

</comment></comment></comment></comment></comment></comment><comment><USER13> I think a more Apt-model to replace Linux is Erlang VM. It is a OS/Kernel/Scheduler in its own right. All that is required is a bootable microkernel erlang vm, with the same process monitoring as the mainstream and you have a highly scalable multi processor , network transparent computing device.

</comment><comment><USER14> I don't recall where I read it, but I've came across a concept to where the computer, then kernel, simply load your application and everything runs in this user or application space which takes all memory and resources to itself.

<comment><USER15> Unikernel? [http://unikernel.org/](http://unikernel.org/)

</comment></comment><comment><USER16> "Linux" Which kernel? Is it optimized and compiled for the hardware?

</comment><comment><USER17> Simulations? No implementations?

<comment><USER18> See section V Simulation Results [https://arxiv.org/pdf/1807.05308.pdf](https://arxiv.org/pdf/1807.05308.pdf)

<comment><USER17> Didn't read the paper, but see apenwarr's comment. Something is very theoretical (to be polite) here.

</comment></comment></comment><comment><USER19> This is what happens when Academia becomes disjointed from reality. This is how you get sky hooks and turtles all the way down.</comment>


Reddit CAPTCHA failing? - <AUTHOR>

Tried registering an account or submitting feedback to http://reddit.com/ but I don't pass the human test.<p>Am I truly human? <comment><USER2> I hesitate to post something like this on HN, but it might be relevant. There has been talk about 4chan was planning on starting up a trolling campaign on reddit involving registering a number of accounts. You might be collateral damage.</comment>


Do More Expensive Wines Taste Better? - <AUTHOR> http://freakonomics.blogs.nytimes.com/2010/12/16/freakonomics-radio-do-more-expensive-wines-taste-better/

<comment><USER2> I usually find the best wines run between $7-$14.

In fact my current favorite wine runs about $8-9. [http://www.penfolds.com.au/brand_penfolds/wines/koonunga- hil...](http://www.penfolds.com.au/brand_penfolds/wines/koonunga-hill/shiraz- cabernet/)

And I've found this gem for under $12. [http://wine90.blogspot.com/2007/12/zaccagnini- montepulciano-...](http://wine90.blogspot.com/2007/12/zaccagnini- montepulciano-dabruzzo.html)

</comment><comment><USER3> I remember reading an article back in the late 80's or early 90's about wine chemistry. I think it was in Scientific American or Discover. Basically, the conclusion they came to was that the difference between a good wine and a mediocre one had to do with the esterification that occurred during aging and the amount of vanillin leeched from the wood barrel. They indicated that you could probably take an inexpensive wine and add a little bit of vanilla extract to it and it would taste like a better quality wine. (Wine producers are prohibited from doing this sort of thing themselves, but you can do it at home.) Of course, this isn't going to make a bottle of mad dog into a palatable table wine, but it could improve an inexpensive table wine.

</comment><comment><USER4> And, like many things, it is still usually a matter of paying 500% for a 10% increase in quality.

</comment><comment><USER5> Like others, I was pretty confused until I reached the part where they said to buy the $20 bottle instead of the $50 bottle. I think what they're really tracking here is that high end wines are (usually) over priced.

I'm not an expert at all, but I also think certain varieties tend to be much more represented in the high end offerings. Cabernets is the one that comes to mind off the top of my head. I personally won't buy a cab at any price, and I think that dislike is often shared by my generation and those younger to me, but older generations tend to be much more prone to buying them. I wonder if age is a factor (and hence buying power) in which wines people will tend to rank highly.

<comment><USER6> Who doesn't like cabs? What do you drink with a nice steak?

<comment><USER5> usually a shiraz/syrah or a malbec

</comment></comment></comment><comment><USER7> There's a correlation, but it's a weak one. Bad wines are almost always very cheap, but the range between decent and great is too subjective to expect a strong correlation.

<comment><USER8> And note that's the range between "decent" and "cheap" within a specific bracket of varietal and region. Anyone who drinks wine regularly can pick out a high-end Burgundy Pinot from a collection of mid-range California reds.

And here the analysis starts to break down, because if you're looking for the characteristics of a great Burgundy, you probably can't source them from California for $20 a bottle; you can get "cheap" French imports in that price range, but the price gap between "acceptable" and "good" is wider. In short: you're not going to get what you don't pay for.

(I'm using Burgundy as an example only because a restaurant blew my mind with one a couple years ago; someone more wine-literate can substitute better examples --- for instance, the same "much larger gap in price between decent and good" may exist for California Bordeaux-style "Meritage" wines).

And should this surprise anyone? Does anyone here think there's low price/quality correlation in _beer_?

<comment><USER2> > And should this surprise anyone? Does anyone here think there's low > price/quality correlation in beer?

Perhaps...there's some superb regular day drinkers that run under $2/bottle...and some of the more expensive specialty beers can cost upwards of $8/pint and taste like sewage.

(of course the really cheap beer is pretty universally bad)

<comment><USER8> Nobody here is going to claim that you can't tell a barrel-aged Belgian-style ale from a bottle of Newcastle.

There's lot of very drinkable wine at a $20 price point, but a $20 bottle is unlikely to surprise you with its complexity.

<comment><USER9> >but a $20 bottle is unlikely to surprise you with its complexity

Disagree. I've had 20 dollar wine that I feel is more complex and much better than 60 dollar bottles. Now, there may be better 60 dollar bottles but that doesn't mean the best 20 dollar isn't better than the worst 100 dollar bottle.

<comment><USER8> There is clearly a lot of overpriced wine. That's not as entertaining a conclusion as the one this post is trying to advance.

</comment></comment></comment></comment></comment></comment><comment><USER10> <http://youarenotsosmart.com/2010/02/24/fine-wine/>

<comment><USER11> That's really surprising that the experiment subjects could not tell that the white wine dyed red was not really red wine. I can't stand white wine and I like reds quite a bit, to me they taste very different.

</comment></comment><comment><USER12> My favorite wines these days:

\- 2007 Xiloca Garnacha (~$15) [http://www.winechateau.com/vsku1564105_MURET- XILOCA-GARNACHA...](http://www.winechateau.com/vsku1564105_MURET-XILOCA- GARNACHA-750ML-2007?utm_source=Google%20Products&utm_medium=feed&utm_campaign=MURET%20XILOCA%20GARNACHA%202007)

\- 2007 Lucky Star Zinfandel (~$18, can't find a good source online)

</comment><comment><USER13> I had a difficult time swallowing this article. Then I realized that, because my wine budget caps at $20/bottle, I am living in a very different world.

Hopefully nobody will try to tell me a $5 bottle tastes worse than a $20 bottle purely because of the price- otherwise, my taste buds must be seriously screwed up.

<comment><USER11> Heck I buy Franzia in a 5 liter box for $12. Tastes fine to me.

</comment></comment><comment><USER14> Yes.

</comment><comment><USER15> Price is a function of supply and demand, not of quality.

<comment><USER16> Agree, but the relative pricing of various substitutable goods is a function of the things which are interpreted by the consumer as "quality". W.r.t. this article, we care about this relative ranking.</comment></comment>