Ask HN: Why is developing a vaccine for the covid19 so hard? - <AUTHOR> To the best of my knowledge, vaccines are made out of 'dead' viruses to 'train' the body's immune system to fight the real deal when the time comes.<p>If so, why is coming up with a vaccine for the covid19 is hard? I read that this is due to the lack of understanding of the virus, but would it matter if all we have to do is to make a soup out its dead corpse? <comment><USER2> The process of developing, testing and licensing a vaccine for widespread population use is designed to be slow, deliberative, peer-reviewed, reflective, evidence-based, so that we don't make mistakes," Poland said.

Going too fast could lead to a vaccine that's not effective or, worse, can cause serious health problems, Poland said.

Seems like the answer is bureaucracy and also an abundance of caution

</comment><comment><USER3> [https://www.latimes.com/science/story/2020-03-12/why-does- it...](https://www.latimes.com/science/story/2020-03-12/why-does-it-take-so- long-to-make-a-coronavirus-vaccine)

<comment><AUTHOR> Thank you! Should I be ashamed to say this is the first time I find out there are vaccines for bacteria?

While the article is rich with information, it just glossed over the main issue: "One classic technique involves injecting a person with a killed virus. Another uses live viruses that have been grown and deliberately weakened, typically by removing specific genes in their RNA or DNA. Both of these strategies take some time, and scientists worry that if they use them on novel viruses, they may not behave the way researchers predict."

But what is exactly taking time? Killing the virus and/or making a weak version of it? And in what way they can behave unpredictably? Alas, so many questions left unanswered :(

<comment><USER4> One thing that in the past has taken a lot of time is proving the vaccine works 'in the wild'. Which means you vaccinate thousands of people and then wait a couple of years and see if they get infected or not. If they do, and that happens, your vaccine is bunk. Sometimes vaccines only provide short term immunity. Fading immunity is a problem with some vaccines.

And you also monitor them to see if there are adverse effects. Too many adverse effects and you're vaccine isn't safe enough. Adverse effects are like anaphylactic shock, guillain barre syndrome. And that sometimes candidate vaccines both fail to provide protection but make the infection worse.

There is a balancing act between how bad a disease and the risk you're willing to take with the vaccine. Covid19 is probably the worst. It's really dangerous to certain population groups like the elderly and people with certain health issues. And much less so to young healthy people. To get rid of covid19 we're going to have to vaccinate 90% of the world population which means the vaccine needs to be 100% safe.

Anyway you should not be ashamed just because you don't know something.

<comment><AUTHOR> Thank you for your kind words and for this awesome explanation that did finally quench my thirst for knowledge on the matter! Much appreciated!

<comment><USER4> It's fascinating. A lot of fields have a short list of theoretical foundations that everything builds on. Immunology is the reverse. An applied science with lot of important ad hoc observational things that are important yet poorly understood.</comment></comment></comment></comment></comment>


Mac Pro (late 2013) replica inside a real trashcan - <AUTHOR> http://www.tonymacx86.com/mac-pro-mods/120757-mac-pro-late-2013-replica.html <comment><USER2> Kind of funny, but what makes the new Mac Pro beautiful is the internal design, and that hackintosh is not beautiful on the inside.

<comment><USER3> Nobody sees the inside so its kind of like they did it to justify the price. In my opinion the Mac Pro/All Macs would be a lot more interesting if I knew I could install any OS I want on it without a performance loss and it was officially allowed by Apple.

<comment><USER4> As far as I know, various Unix versions, as well as Win7, will run just fine. No artificial performance penalties, and Apple is currently doing precisely NOTHING to disallow installation of alternate OSes. This has been the case for years.

<comment><USER5> Try booting a Linux install USB on a Mac sometime

<comment><USER6> I did, a few months ago. Booted both Fedora 19 and 20 Beta on a 2012 13" rMBP. Worked decently well, especially with how the version of Gnome included in F20 knows how to properly deal with high DPI displays.

<comment><USER5> Hasn't worked for me at all no matter how I create the USB, working with a 2011 MBP. Tried literally every method, and several distros.

<comment><USER7> I've had good luck booting Fedora (at least 19 and 20, and I think 18) on Macs.

Other distros don't seem to work with Apple's EFI implementation. To boot other distros, I've had good luck with the refind[1] bootloader. Granted, I have only been booting live USBs, not installing on the internal drive.

1: [http://www.rodsbooks.com/refind/](http://www.rodsbooks.com/refind/)

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Strangely managed to omit the word Macintrash. [http://www.catb.org/jargon/html/M/Macintrash.html](http://www.catb.org/jargon/html/M/Macintrash.html)

<comment><USER9> L'esprit de l'escalier. Macintrash would have been a perfect name for the build :D

</comment></comment><comment><USER10> Seeing as I was using the exact same boards for my 6 rack cluster...It's a little concerning to see pic 12, in what looks like to be a disassembled PSU on the underside of the board. Other than that...I think this build is actually pretty cool.

Speaking from experience, these boards are awesome, and smallest ones I've ever used (other than a mac mini/or rPI)!

</comment><comment><USER11> Sort of off-topic question. :)

Is it still the case that updates from Apple will randomly break a Hackintosh? It used to be the case a few years ago. Has it gotten easier to update a Hackintosh these days?

<comment><USER12> No, you still have to refuse all OS updates. The OS update process costs you a few hours, spent carefully reading whatever the OSX hackers have to say about it.

Depending on your hardware there could be a standard process, but it almost always requires a bit of command line work, clicking cancel at the right time, and withstanding the temptation of clicking reboot when the installer asks you to.

That said, I've used OSX on non-Apple hardware for two years as my main development/entertainment machine. Upgrading wasn't desireable anyway because newer versions of OSX stopped supporting multi-monitors after 10.6.7 I believe. It really was great to be able to use OSX on my desktop.

Finally when staying on 10.6.7 really started to give problems, I decided to try Ubuntu again. I was pleasantly surprised that Ubuntu now actually is very usable as a workstation for development. It's got all window manager features 10.6.7 had, good terminal emulators, editors, and the important browsers, what more do you need? (don't say photoshop :@)

<comment><USER11> > what more do you need? (don't say photoshop :@)

In my case it's Lightroom. :)

Longtime Ubuntu user here. Bought a Mac mini as my desktop replacement on the off-chance that I might write an iOS app.

I'm actually running Ubuntu inside Mac as my development environment. Ubuntu also nicely solves the "blurry text" problem [flame away! :)]

<comment><USER13> There's no blurry text problem -- Mac has a "respect the font design" look, Windows has a "crude text" problem, and Linux is somewhere in between.

That said, a retina display totally changes everything. No "blurry" and no- crude. Just as reading a finely printed book. You wont want to go back to a low DPI monitor after a week of using a retina.

As for using Ubuntu for development inside OS X, that's actually the best of both worlds. You have a stable desktop system, and you can have arbitrary development environments for every job (assuming you use a VM), that are just like the target environment (assuming you deploy on Linux).

I'd also suggest trying Vagrant, if you don't use it already.

<comment><USER11> Yep, I know the Mac's text looks blurrier:

Link for anybody else interested: [http://www.codinghorror.com/blog/2007/06/font-rendering- resp...](http://www.codinghorror.com/blog/2007/06/font-rendering-respecting- the-pixel-grid.html) (linked articles are good too)

<comment><USER11> OK, I see why a downvoter downvoted it. I meant to write:

"Yep, I know _why_ the Mac's text looks blurrier" i.e., I meant to agree with 'coldtea' and add to the discussion.

The way I've written it now makes it sound like I'm disagreeing. Anyway, the link above should be useful to future readers.

</comment></comment></comment></comment></comment></comment><comment><USER14> I always found it a little sad how much Apple has discouraged people from building Hackintoshes particularly when you consider the early days of Apple.

<comment><USER15> I don't think that's quite true. There's a lot that's not generally compatible with a lot of ATX boards (special power management stuff, drivers), but in general they haven't done a whole lot to block it off.

I think they see it as a hobyist activity that does more to encourage sales than lose them.

<comment><USER16> Well, the point is you cannot sell these. Sure, if you build one and never tell Apple you put OS X on it they won't come after you but you cannot get support for OS X running on a Hackingtosh. If you do try to sell them, thing a get even worse for you. Not that I see how they could make it work but the current status is definitely not peachy.

<comment><USER15> I don't think anyone expects to get support for running a hackintosh, but my point was that apple don't do much to dissuade this behaviour

<comment><USER17> It was a pretty widely held belief at the time of the launch of intel macs that the choice to use an, at the time kind of moribund, EFI BIOS was a deliberate attempt to make hackintoshes difficult. And it really did keep it from happening for quite a while.

Of course, there are many other pretty good reasons to go with EFI. It's just that its fate seemed tied to that of Itanium back then.

<comment><USER18> > It was a pretty widely held belief at the time of the launch of intel macs > that the choice to use an, at the time kind of moribund, EFI BIOS was a > deliberate attempt to make hackintoshes difficult

Widely held by _whom_? The absolute simplest thing for Apple to have done at the time would've been to have kept using OpenFirmware, for maximum compatibility with existing PowerMacs (OpenFirmware boot code is written in platform-independent Forth).

This would've made building hackintoshes _much_ harder than EFI, since EFI motherboards were quasi available at the time and clearly going to be growing in the future, whereas OpenFirmware x86 motherboards were speciality hardware that only Apple and Sun would have been producing.

The decision to use EFI is most easily understood as a compromise between retaining some of the abilities of OpenFirmware, avoidance of 30-years of unnecessary BIOS cruft, and a desire to enable people to run Windows, which EFI BIOS compatibility could enable but OpenFirmware could not.

Seriously, it's 2004-2005. You have the opportunity to define an x86-based platform from scratch. You'd like Windows compatibility as a business selling point, but you're sane so you don't want to chain yourself to a kludge like the PC BIOS in your own code base if you don't have to, because backwards compatibility isn't a concern.

EFI is the only obvious choice.

<comment><USER19> So instead of a kludge like the PC BIOS, you pick that EFI mess, where one of two main sponsors is your direct competitor, who directly turned around and created an incompatible new version in UEFI (even before the EFI based Apple systems hit the market).

So now Apple has to support an EFI version no-one runs, while integrating Intel reference code targetted at newer versions to support new chipsets.

Well, it ensures job security for Apple's firmware engineers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> If it ran Windows, would it be a recycle bin?

</comment><comment><USER21> I was really hoping for an Oscar the Grouch style trashcan.

</comment><comment><USER22> I like how it has more I/O options than the real thing.

I'd probably not use an Apple logo though... maybe a pear? :)

</comment><comment><USER23> FYI: Without additional tweaking, don't expect top-of-the-line Mac performance. Sure, my overclocked 6-core i7 made it over 12,000 when the highest I'd recorded before then was 9,000ish for a Mac mini i7 server, but when I ran the same parts under Windows, I hit a geekbench score of 25,000. Had I a legit Mac for the same price, I'd probably hit 20,000 easily, and in the older, cheaper designs, could have matched 25,000 for about the same price. If only Windows had a decent terminal, I'd be happy. Instead, when the Mac Pro gets DDR4 later this year, I might just switch.

</comment><comment><USER24> I didn't like the design of the new Mac Pro initially, but the circular design makes sense in terms of air flow. The only problems I have personally experienced with computer hardware is the failure of video chips. I had a HP laptop that christened my dive into cooling fans, Artic paste, thermal bars, heat transfer, and frustration.

I hope we go back to putting our own computers together using only the components we desire; bought from companies we admire--not just because they work the best, but for altruistic reasons (employee treatment, environmental friendliness, etc).

</comment><comment><USER25> OT but why doesn't the German forum want any links to them, even going so far as threating with sueing the poster if he doesn't remove the link?

<comment><USER26> Either because he is stupid, or because he got pressure from Apple (or fears to get trouble if the link is circulated outside of Germany). I guess Apple does pressure a lot of website owners behind the scenes... but of course the other option is more likely :-)

Seriously, under German law the forum owner has no way to forbid people to link to his site - unless they are insulting him, misattributing content, etc.

Here is the original link (now removed): [http://hackintosh- forum.de/index.php?page=Thread&postID=9493...](http://hackintosh- forum.de/index.php?page=Thread&postID=94933)

Here is the google cache: [https://www.google.com/search?q=http://hackintosh- forum.de/i...](https://www.google.com/search?q=http://hackintosh- forum.de/index.php%3Fpage%3DThread%26postID%3D94933)

Normaly, I wouldn't post that link, but there is (as far as I could see) nothing problematic in that thread, and the content is already posted (with permission of the original author apparently) somewhere else, so the whole thing is incredibly silly.

</comment></comment><comment><USER27> He should start selling this case and release the recipe. I am sure plenty of people wouldn't mind to buy the case from him if he makes more. Like raspberry pi cases. Anyway, beautiful idea. But will Apple patent this design?

</comment><comment><USER28> Low specs (only i3) but it is funny! Good work :-)

</comment><comment><USER29> That is a lovely looking case. Regardless of how impractical it might be as an OSX vehicle, it looks good.

Good work!

<comment><USER30> So that's what apple stickers are for.

</comment></comment><comment><USER31> His chipset will melt in 3...2...1... bzzzzzzzz</comment>


Switching to emacs (after 16 years of vim) - <AUTHOR> https://kushaldas.in/posts/switching-to-emacs-land.html <comment><USER2> > It is there on default Fedora installation.

Come on, seriously? That's seriously your 'big reason' for switching? Guys it's 2017, it's not that hard to apt-get install $FAVORITE_EDITOR and scp your dotfiles, it takes less than a minute.

To any of the newbs out there, here's an advice I'll give that I wish someone would have given me in my early years: IGNORE THE EDITOR EVANGELISTS. Vim, emacs, visual studio, notepad, all of those things are inconsequential next to an understanding of proper computer science concepts. I think I spent like an year getting good at vim many years ago. I'm fairly good at vim now, but my goodness do I regret having spent time on that, instead of, say, studying proper maths, studying data structures, getting practice CODING.

I say this because I distinctly recall going over vim exercises, taking my sweet time, and feeling good and thinking "Hmmm I'm really improving here!" True, it's not a total waste of time, I'm just saying don't mistake editor skill as a core skill. In other words, you can get a nice paying job if you can put together a reasonably simple CRUD application made in notepad... but you cannot get a job if you're REALLY GOOD at vim but are unable to do much with it. Don't make the same mistake I did.

<comment><USER3> I've never really grasped the idea of "studying" an editor.

I switched to Vim from Emacs many years ago to deal with RSI. I learned the basics and then just started using the damn thing. Periodically I'd go look up a few tips or tricks and then keep on keeping on.

These are tools. The best way to learn how to use a tool is to use it, not sit there studying how you might use it.

</comment></comment><comment><USER4> He mentions that the key factor in him choosing to try out emacs is orgmode.

I truly think orgmode is today's killer app for emacs. (A killer app is the one app needed to make people pick up the tech - [https://en.wikipedia.org/wiki/Killer_application](https://en.wikipedia.org/wiki/Killer_application) .)

I have given 9 tech talks so far in my career - and I've written every talk in orgmode. I've outlined training for support people in orgmode. I like to use it to organize my work and notes on things I'm studying as well. My next big project is to write a book using it.

Check out orgmode, learn what other value emacs creates, and consider adding emacs to your toolbelt as well.

Some things I've been using emacs for:

      - text editing
      - writing and running Python code and tests
      - writing .tex files for LaTeX, previewing the pdfs *in* emacs
      - erc - an IRC chat client
      - subshells
      - orgmode, of course

I know others use it for

      - email
      - newsgroups
      - web browsing

I feel like I'm just scratching the surface of the things I can do with it, and I feel like emacs will be with me forever, so I want to use it to replace my desktop gui operating system, to the greatest extent possible.

</comment><comment><USER5> Rather than trying too hard, just learn Emacs incrementally. It's modeless by default, like TextEdit.

You can get a lot done with a few commands: c-F (forward), c-B (backwards), c-P (previous line), c-n (next line), c-S (incremental search -- the primary motion command for most people). Find and save files (c-x c-f and c-x c-s respectively). Once you are comfortable with that, every new command simply adds to your abilities. There in no large bolus to learn in order to become productive.

Disclaimer: I've been using, and modifying, Emacs since the late 1970s -- but this is how I learned too.</comment>


Generalizations, truth, and rationality - <AUTHOR> http://languagelog.ldc.upenn.edu/nll/?p=1396

<comment><USER2> This article describes an experiment where people gave a silly "placebo" reason that enabled them to butt in line at the Xerox machine ("because I need to make copies" ... duh) that often works for minor request of a few pages, but often fails for larger request of many pages.

HN readers might like to contrast this article with a recent blog posting by Scott Adams (of Dilber fame) who claims that giving such "ridiculous reasons" that works so well for justifying why your friends should allow you to pick up the cheque at dinner, ... should be generalized to persuade people oppressed in occupied countries should accept their terrible fate when given a "ridiculous reason", such as, "well, you know, it's been 50 years, so you should give up. We won."</comment>


Ask HN: What are you working on in lockdown? - <AUTHOR> Hi all,
Now that we're in lockdown I'm planning to try and code/produce something every day to be productive.
Curious to know what everyone else is working on outside of their normal work. <comment><USER2> Trying to be productive at all.

Two kids at home and my wife and I both trying to work.

</comment><comment><USER3> I'm continuing to improve CallStop. It's an app that takes 30 seconds to set up and blocks 100% of spam calls on your phone. Kind of like Superhuman for your phone number. Here's an app store link:

[https://apps.apple.com/us/app/callstop-call- manager/id145589...](https://apps.apple.com/us/app/callstop-call- manager/id1455892856)

Would love any feedback on it.

</comment><comment><USER4> I am continuing to improve Webase [1] which is a no-code platform I've been working on. The next release coming out in April will have a new view editor that allows users to create custom views in their apps.

The goal with Webase is to have a platform as good as Webflow for creating UIs and as good as Airtable for easily creating data models... in one single tool.

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

</comment><comment><USER5> I am not in lockdown. But a lot of public services and schools are closed. Also, no friends get together and parties, and significantly reduced hangout. I am making use of my local university library to study and research Text Mining.

With the prevalence of discussions around Coronavirus online, we will have large corpus for text analysis, for example, hysteria, treatment, symptoms, timeline of public reaction etc.

</comment><comment><USER6> I've been working on rewriting our internal deployment system and plan to open source it once the rewrite is finished. Part of the rewrite is decoupling it from our internal libraries and from our internal architecture so it is more generic. It's been fun to work on in the spare time, but it's been months now and I can't wait to finish.

<comment><USER7> Nice. Can you give any high level details? Language? Methodology? Unique/rare features?

</comment></comment><comment><USER8> April will be my time to put out some notes about materials informatics for nuclear and outer space metals.

</comment><comment><USER9> My reef aquarium, novice banjo, getting the yard ready for spring, helping more with the kid's school work, and learning more about investing. Oh, and playing through a video game (very rarely done for me). I consider each of these as various levels of productive.

</comment><comment><USER10> I'm not self-isolating or locking down, per say, but I am working a lot more from my own office. As a result I've been able to apply a lot of works to my cyberpunk hacking simulator game. I'm hoping to have an alpha out there in a month or two.

</comment><comment><USER11> Finally setting up selfhosted stuff, have one rpi and one old laptop. Gonna setup some backup services on them and also will try out mycoft.ai.

Also taking course on machine learning by andrew ng, so far so good :)

And getting back to some old projects and ideas.

</comment><comment><USER12> Personal care DTC; handsyhealth.com - wipes are next :)

Beneath the surface, it was a personal challenge to conceptualize, create, launch a brand, configure Shopify, get sales all in under two weeks. So far so good.

<comment><USER13> I'm not trying to be rude I'm just offering feedback. Brace yourself. I went to the site and couldn't instantly figure out what handsy is. I tried for about 10-15 seconds. ...something about alcohol. eh, I don't care. and then gave up. Still don't know. I think you should make it more clear what it is.

</comment></comment><comment><USER14> Working on an open-source privacy-friendly video calling solution: [https://github.com/garage11/ca11](https://github.com/garage11/ca11)

</comment><comment><USER15> I'm working as usual, but from home, so no time for outside gigs

<comment><USER16> same here...

</comment></comment><comment><USER17> I built a little greenhouse, and working on a chicken coop. Trying to spend more time outside in the garden. It's a good "social distance" escape

</comment><comment><USER18> Continuing to improve Certera, PKI for Let's Encrypt.

[https://docs.certera.io](https://docs.certera.io)

</comment><comment><USER19> A decentralized personal information manager, encrypted against your ethereum wallet, synched to all your devices and anonymously cloud hosted via ipfs.

<comment> noman-land Wow this is basically exactly what I've been wanting to work on. Got anything to share? Would love to contribute.

<comment><USER19> This is the culmination of about a decade of iteration by a single person, so that may be a sort of be-careful-what-you-wish-for question :)

I'd love to talk more about it - let's set up a time to chat: firstname.lastname@example.com

</comment></comment></comment><comment><USER20> First day of isolation - slept late. Working on goals so I do not waste the time. Reading hacker news. OMG this is going to take work.

</comment><comment><USER21> Learning the basics of hand-built ceramics. Bought 10# of clay and a few tools. YouTube has endless tutorials and demos.

</comment><comment><USER7> I've worked from home for the vast majority of the last decade so this does not really change anything for me.

</comment><comment><USER22> I've been working on my regular job since I can commit code from home.

</comment><comment><USER23> [https://github.com/hofstadter-io/hof](https://github.com/hofstadter-io/hof)

A Polyglot Code Generation Framework for Cuelang

[https://cuelang.org](https://cuelang.org)</comment>


Don't be Google - chris-at http://doonesbury.washingtonpost.com/strip/archive/2014/06/01 <comment><AUTHOR> So how are "page ranking, search results, and cached data" inherently evil? These are some of the basic services that make the web as we know it work. Also, energy consumption? My understanding is that they were doing quite a lot to meet their needs with renewable sources[1][2]. I hardly think that qualifies as evil.

Sure, there are times and issues we can point to where Google has failed their motto. You could make an argument that their mission to "organize the world's information" _is_ evil when it is carried to it's logical extreme, or at least empowers evil. But this comic is not making those points. It's just grabbing a bunch of old headlines, some of which aren't even relevant.

Though I confess I never really "got" Doonesbury. It's rarely accurate enough to pass as a political cartoon and rarely funny enough for the funny pages.

[1]: [http://www.google.com/green/energy/](http://www.google.com/green/energy/)

[2]: [http://www.reuters.com/article/2010/07/20/us-google- windpowe...](http://www.reuters.com/article/2010/07/20/us-google-windpower- idUSTRE66J3BL20100720)

<comment><USER2> Advertising is inherently evil, and Google is an advertising company first and foremost (it's where the vast majority of their revenue comes from, after all).

<comment><USER3> You realize that of all advertising methods, Google's is probably the least evil? "Searching for a product? Here is that product sold by a large variety of competitors."

<comment><USER4> That's not the evil part. The evil part is how they appropriate, to varying degrees, the works of content creators, and then sell advertising on top.

<comment><USER3> It is trivial to tell Google not to index your work if you don't want them to.

</comment></comment></comment></comment></comment><comment><USER5> Putting the punchline in the title totally ruined this.

<comment><USER6> Yeah, the title should just be "Don't be Evil"

</comment></comment><comment><USER7> Google is 15 years old with almost 50,000 current employees. Of course it has done evil things. Now, don't know of a coherent widely agreed-upon definition of evil, but once you get to that scale, there is enough human behavior going on that some of it will be evil for pretty much any definition.

The lack of a widely agreed-upon definition of evil is a problem for Google though. That word gets thrown around enough that "don't be evil", really only means "Don't use 'we're a for-profit corporation' as an excuse to do something egregious."

</comment><comment><USER8> If you're going to link to a comic with a joke in it, don't put the punchline in the title of the submission!

</comment><comment><USER9> Google is also evil with their AdSense banning[1].

[1]: [https://news.ycombinator.com/item?id=7672910](https://news.ycombinator.com/item?id=7672910)</comment>


Why Are Some Immigrant Groups More Successful Than Others? - <AUTHOR> http://www.nber.org/papers/w23548 <comment><USER2> Because the other folks living in their new nation of residence are less racist towards them.</comment>


The Hacker's Path - <AUTHOR> http://krainboltgreene.heroku.com/log/2

<comment><USER2> I went on an interesting journey with this article. I first clicked expecting to see what Paul Buccheit succinctly labelled "Limited Life Experience + Overgeneralization = Advice".

I found generalised advice, without a word on the author's actual experience. Which I generally dislike, because I like to know who's telling me things. I'd much rather read "Here are some things that worked for me and might work for you" than "this is what you should do".

I also nearly gave up because of poor opening sentence construction, bad jokes ("Drinking Heavily? Not Another Neckbeard?") and outright sexism ("Teh Womens").

Also offputting is the arrogance that comes through the article's tone of "the master" giving omniscient advice. Every great programmer I've personally met was humble about what they could do, and the Dunning–Kruger effect would seem to suggest that's not coincidence.

But then I started thinking about how it's hard to give advice to newbies when you have experience. I mean, my advice on "what worked for me" to start programming is "Have your parents buy you an Apple //e when you're a kid, learn AppleSoft Basic and then try to learn 6502 assember, keep making things and learning from mistakes for 20+ years and you might be on the right path to become me but then again this might be the wrong path to become you.". That clearly doesn't translate on several levels. And I'm relatively young blood who wouldn't dare give advice on this topic. If you're older and more experienced then your story is going to be even more complicated, and harder to translate.

That's when I decided to look at the author's bio. And from right here on HN: "I started learning how to program with Ruby about 10 months ago". Combined with their own bio[1], this suggests they are actually pretty new to this too.

Which would seem to be bad, but it's actually a tremendous advantage when giving advice to newbies. So my advice to the author, if they're reading this, is:

* Rework the advice you clearly want to give around your own experiences. For example, you say "read the Dragon book". Did you actually read the Dragon book? Which parts? What did you learn from it, and how did you apply the knowledge? What did you need to know before you could begin to understand it? Tell us what you did, that you think someone following in your footsteps should do.

* For a second example, you say upfront to learn both Ruby and Python (seemingly concurrently, which I think sounds like an awful idea) but your own experience seems to suggest you learned Ruby first. Why do you now recommend learning both?

* More importantly, please tell us which things you think you wasted your time learning or trying to do or practising that weren't worthwhile.

* Drop the attitude (even if it's intended tongue-in-cheek, it's offputting) and drop the sexism.

[1] <http://krainboltgreene.heroku.com/log/1/>

<comment><USER3>
       Sexism, a term coined in the mid-20th century,[1] is the
       belief or attitude that one sex is inherently superior
       to, more competent than, or more valuable than the other.
       It can also include this type of discrimination in
       regards to gender. Sexism primarily involves hatred of,
       or prejudice towards, either sex as a whole (see misogyny
       and misandry), or the application of stereotypes of
       masculinity in relation to men, or of femininity in
       relation to women.[2]

It's not fucking sexism, for the 56th time today. It's light internet humor. _It's an incomplete sentence_.

post script: The dates on how long ago I started learning ruby are outdated.

<comment><USER2> _It's not fucking sexism_

There's a lot of geek feminists (myself included) who get irritated about assumptions that all geeks/hackers/programmers are male. No amount of dictionary definition quoting is going to make me think it's not sexist to put a gender-specific joke in a generalised list of advice.

 _post script: The dates on how long ago I started learning ruby are outdated._

It doesn't matter if you learned ruby 3 months ago or 7 years ago. The point of my comment is this - instead of giving a laundry list of canonical "do this, do that, become 'a hacker'" you could give some advice on how _you_ learned to hack, that you think might be relevant to others. The more recently you learned to hack, the more valuable that advice is.

A generalised laundry list of "the path" is disingenuous. I don't care if it comes from you, me, DHH, Linus Torvalds, Donald Knuth, Jacob Appelbaum, RMS, Fabrice Bellard, Rusty Russell, Guido van Rossum, Jamie Zawinski, my mum, or some school kid. Everyone's path is different and personal, noone's is canonical. But therein lies the value.

</comment></comment></comment><comment><USER4> I'd suggest learning C as soon as a basic grasp of programming (variables, condition, iteration, basic data structures and abstract data types) is there. C is the lingua-franca of programming: advanced algorithms are often implemented in C (or in C like languages), other language concepts are often expressed in terms of C language concepts. "Gold standards" of systems programming are the C POSIX API and BSD sockets (best books on network programming use C for all of their examples). Learning UNIX and the GNU tool chain is also important.

Learning a non-imperative languages is also vital: most importantly Lisp such as Scheme and a strictly and statically typed functional language with type inference like Haskell or ML.

As for Ruby vs. Python, it's an implementation detail. The languages are close enough as if you know one, you can learn the other when you need to (at a new job, or when there's an open source project you'd like to contribute to). Make sure to be fluent in one, however, as "scripting" is a vital skill (especially if you have to deal with a production environment or build/release tooling).

Same principle as Ruby vs. Python also goes for Java vs. C#. I would, however, suggest learning C++ and/or (one of) Java/C#, as they're rather widely used in industry (and not just for legacy work).

Important thing is understanding the fundamentals and seeing the overall patterns.

<comment><USER3> I think your last sentence is the most poignant.

        Important thing is understanding the fundamentals
        and seeing the overall patterns.

And the most damning for C and Java in my opinion. C and Java's syntax (which does matter to those who are learning), is so verbose as to hide a lot of what the fundamentals and patterns are.

This is why I chose Ruby and Python. The languages syntaxes are clean and are never in the way, allowing new programmers an easier time understanding those fundamentals.

<comment><USER5> By "fundamentals," strlen means "memory management," "pointers," the gritty stuff. You can't escape memory management by using Ruby and Python, and a rudimentary understanding of pointers are also essential.

      a = ["Hello", "World"]
      b = a
      b[0] = "Goodbye"
      print a

The first time I tried this, I was baffled why ["Goodbye", "World"] showed up. The answer lied in the way this scripting language used pointers, and it wasn't until I learned C that I really understood that.

As for memory management, I often accidentally write scripts that use gobs of memory thanks to silly mistakes; e.g. not using weak references when I should (oh look, more pointers!), creating new objects instead of reusing old ones , forgetting to unregister event handlers in my nodejs apps, etc. C's "every malloc() must be free()d" policy teaches these things to you in a very explicit way. Sometimes you have to clean things up when your scripting runtime doesn't know it should.

<comment><USER6> Even after using python for many years, I still occasionally make this mistake. It is a tough "bug" to track down. Can anyone comment as to why deep- copy is not the norm?

<comment><USER7>
      def f(b):
        b[0] = 'Goodbye'
      a = ['Hello', 'world']
      f(a)

It's more efficient to pass function arguments by reference, and it would be fairly baffling if function argument passing did not work like assignment (c.f. C++ copy construction being similar to, but slightly distinct from, assignment).

Less philosophically, _everything_ in Python has pass-by-reference semantics, even ints. The things you might think are passed by value are immutable, so it doesn't really matter whether they are passed by value or by reference. For example:

      a = 1
      a = a + 1

conceptually creates a new integer object and binds the name a to it, _and so does_

      a = 1
      a += 1

, because ints and longs are immutable in Python.

</comment></comment></comment></comment></comment><comment><USER8> _Teh Womenz_

I'm rolling my eyes right now, just so you know. I'm sure EVERY programmer should really be interested in "teh womenz."

 _OTHER HOBBIES FOR FUCK SAKE_

Now my head is firmly planted in the palm of my hand. You seriously can't tell them apart they're so embedded. I don't know when that started happening, but it's really quite remarkable.

People program as a hobby. It's how a lot of free software gets written. It's how people learn.

Here's a simpler guide to "becoming a hacker":

      1. Read a tutorial (note: not a big honking book or anything listed on in the article. not yet.)

      2. Implement the most simple possible number guessing game

      3. Think of ways to improve the game and implement them

      4. Get stumped on something, refer to the language documentation, or google as a last resort

      5. Repeat 3-4 until you've exhausted all your ideas

      6. Find a slightly more ambitious program to write. An address book is a good start. Repeat 3-4 until you have a decent address book program

      7. Repeat 6 until you have a handful of small programs under your belt

      8. Now pick a book to read, pick the parts that interest you, do the exercises if there are any, and take notes

      9. Apply what you've learned to improve your programs; if you notice some marked improvement (readability, performance, your own productivity), retain that theory. if there was nothing gained; repeat this step or abandon it and move on

      10. Start building non-trivial programs, forking open source projects, and write more code. Do some coding puzzles once in a while

For any new language, start at 1.

I am generally against starting with books. Especially for people who are interested in programming but haven't already figured out how to write and compile a few simple programs on their own. These sorts of people aren't even sure that they will like it, so throwing a thick meaty book filled with a whole bunch of nonsensical programmer-speak isn't going to really entice them. I say wait for the books until you've gotten a taste and are committed to learning more. The effect is much more impressive when you just run some code and see the computer "do stuff." That's when you realize it's not rocket- science and anyone can do it.

Heck, it's they're really, _really_ not sure... give them Logo or <http://docs.racket-lang.org/quick/index.html>

Bad ass hackers just do it. Learning all the theory first is just a barrier and a big downer.

<comment><USER3> As most, if not all, learning books have you do exactly as you listed I'm not exactly sure why you're against starting with books.

        I'm sure EVERY programmer should really be
        interested in "teh womenz."

It's humour. Relax.

        People program as a hobby. It's how a lot of
        free software gets written. It's how people learn.

That's why it says "other hobbies". "Other", as in "in addition to" or "besides this one".

<comment><USER9> The problem with "teh womenz" is that up until that point I was thinking of adding that list to a set of programming resources I'm sending to a friend of mine who's been learning programming recently. And sure, she'll have to deal with that kind of attitude eventually, but I'm not going to throw it in with the basic training resources.

Talking about "teh womenz" is a good way to end up with a dearth of women in your general vacinity.

<comment><USER3> None of the women I've showed this to, up to and including my significant other (whom is learning to program).

</comment></comment></comment></comment><comment><USER10> OK, _why is amazing, but the Poignant Guide is really not the best place to learn Ruby. It may be for some, but I have to be honest, it diverges so much into madness and a pointless, meandering storyline for so long that I couldn't bring myself to finish it. I've spoken to others with the same experience. Maybe the first few chapters are worth reading, if only to get references like "chunky bacon". I suggest the pick-axe book for some good Ruby learning.

<comment><USER11> I am picking up Ruby, and the Poignant Guide is... uh... lousy. It maunders and meanders and diverges into slightly drunk? stoned? btardy? certainly ridiculous areas.

Problem is, I'm trying to maintain a focus: learning Ruby. Humor is fine. But I want to focus and Get Stuff Done.

So the Poignant Guide is very frustrating.

Dive Into Python IMO is a very good text.

<comment><USER12> This is part of why I liked LYAH, it's silly but doesn't ever feel like the weird drags on for an eternity.

</comment></comment></comment><comment><USER13> Once again, my reaction: "What is this I don't even"

Amateur hour gibberish.

This was just as stupid as the last time it was posted. Same shallow treatment. Same jokey stuff about becoming 'the master'. Same name-checking of a few books that this guy has vaguely heard about ("The Dragon Book is teh awesome") and not read.

This would be charming if it were rewritten without the pretentious gibberish and sexism as a 'what worked for me, a newbie myself' type post.

</comment><comment><USER14> There are some problems with rendering this text in Chromium - words around some of the punctuation overlap. Also, I think that ESR's guide is much more informative: <http://www.catb.org/~esr/faqs/hacker-howto.html>

The OP omits some of the points I consider important - problem-solving attitude, low level programming, learning unix. Also I think that starting with _both_ Python and Ruby is a bit strange idea - they are really similar (in almost every way I can think of) and such course of learning may cause some confusion (e.g. which pieces of syntax belong to which language?).

<comment><USER3> I was going to respond to a few things, but you linked to ESR's guide, the most condescending guide to hacking I know. Anyone who links to this guide seriously is usually not going to be swayed by even the best arguments.

<comment><USER14> I'd be more than happy to hear your arguments. Perhaps I am missing some points you could show me clearly? Your original post lacked some explanation behind what you mean by word hacking itself and while at first kind of dismissed your post with ESR, I would like to know what do you think hacking is about? (As esr's text guided me somehow, your comment made me think i may actually be missing something)

<comment><USER3>
        I think that starting with both Python and Ruby is
        a bit strange idea - they are really similar (in almost
        every way I can think of)

Exactly the point. They are so similar that the transition from one to the next is easier than most other languages. Once you have an easy transition students will notice similar patterns. "Oh, looping. Hey, this is something that happens in both languages."

</comment></comment></comment></comment><comment><USER15> Has anyone actually been successful following a similar path? Has the author actually read all these books? This is just a list of books on programming languages and tools. Why am I learning Ruby and Python? Why am I avoiding relational database servers and learning SQLite? Nothing is explained.

<comment><USER16> Yeah, I think a better way is to just pick some software or project you care about and dive right in. The books mentioned in the articles are all fine, but without a goal and lots of experimentation, reading books won't make you great at anything. That said, picking a Ruby/Python project first and picking up some of the topics mentioned in the article on the way is certainly not a bad thing.

</comment></comment><comment><USER17> blech. this is an alright recipe to being a standard nerd/web developer and reads far too much like a list of things the author has done, especially the hobbies part which imo has bugger-all to do with being a hacker.

my personal idea of a hacker is someone who knows _everything_ and is not afraid to take advantage of that knowledge. of course it's impossible to know everything, but the best hackers I know do a very good job of approximating that :)

<comment><USER3> If you don't want to burn out while you try to know everything, you'll get a side hobby.

<comment><USER17> Sure, but it's just standard practice to do so, and taking a hobby doesn't _really_ get you any closer to being a hacker. And putting "womenz" and "drinking" as hobbies is just lame.

Also not wanting to give the wrong impression, the folks I'm thinking of are not "know-it-alls", they don't tell you random crap to sound smart, but I can learn a lot from talking to them normally.

</comment></comment></comment><comment><USER18> I feel slightly betrayed that the link says heroku.com and it isn't actually a Heroku blog.

<comment><USER19> Exactly. If I wasn't mislead, I might not even have clicked through.

</comment></comment><comment><USER20> Is this kind of thing really helpful? I mean if I think about what "Hacker" means to me, it's someone who's passionate enough about computers to explore the inner workings and make cool things.

It seems to me that if you need a guide for the journey, you're already kind of missing the point.

Disclaimer: not a hacker, by any definition

<comment><USER3> I think it's helpful. There are a _sea_ of books out there, and 90% of them are terrible boring tripe. I'd rather not spend time reading the bad books.

</comment></comment><comment><USER21> _Functional languages will blow your mind, and make you a better programmer in the end. Languages like Haskell, Erlang, Lisp, and Clojure are great for this sort of thing._

It's great that people think so highly of functional programming, but this always sounds like damning with faint praise. I mean, "It'll blow your mind and broaden your horizons" is a reason to drop acid, not learn a programming language. Learn these languages because they're useful. There are many more effective methods to reach some state of mind-altering enlightenment.

</comment><comment><USER22> How about:

Python first (because it's intuitive and I want to build motivation by completing a project right away), and then C (to learn memory management and other subtleties.) That sound reasonable?

</comment><comment><USER3> My mother called me, waking me up, to let me know that there were a lot of tweets about me. I would have never known.

Figures I get on HN again while I'm asleep and when my analytics code isn't there.

<comment><USER23> Hurray for moms who pay attention!

</comment></comment><comment><USER24> Thank you for this article. I recently started teaching my sister how to program and chose Python thanks to articles/discussions on HN similar to this one.

If you are taking pull requests here are a few suggestions:

* "Honing Those Skills"

\+ <http://hginit.com> (Free, Web) [Why? I found it a wonderful intro to distributed version control in general and Mercurial specifically]

\+ <http://yuiblog.com/crockford/> (Free, Video+Transcripts) [Why? Provided great context and in-depth details in a very efficient manner]

* "Gettin' Paid, Makin' Money"

\+ C# / .NET (Large job pool)

* "Things You'll Need"

\+ Ability to take constructive criticism [Why? Get better faster. Appreciate user feedback.]

* "Not Another Neckbeard"

\- Teh Womenz [Why? It's obvious from your comments that you do not feel this is sexist nor did you mean it to be. I would have to log this under "taking constructive criticism" however. You point out that you know women who don't mind but there are some women who are bothered by this and taking it out would not impact the goal of the article. If you can make 1 person feel better about your writing by removing it to avoid any misunderstandings while not altering your meaning, it seems like a win for all.]

</comment><comment><USER25> It is posts like these, where a majority of the audience will be super- educated and a small portion (me) not at all, that it would be great to have upvotes. I can only make an educated guess as to what the best advice is to learning code here.

A strong opinion could send me on my way for months doing the wrong thing.

</comment><comment><USER26> Previous (and good) discussion: <http://news.ycombinator.com/item?id=2002602>

</comment><comment><USER27> For a newbie to the world of scripting, is Perl worth learning? Or would Python/PHP/Ruby/JavaScript be a better alternative?

<comment><USER14> While perl is certainly useful for scripting, I'd reecommend you learning python/ruby (personally I use former) - they are most universal among these 5 language; whereas js/php are good mainly for web related stuff and perl won't give you as much possibilities either.

</comment></comment><comment><USER22> Learning on your own != learning as a college CS student, it seems. I'd be curious to compare and contrast "Hacker's Paths" for students versus people trying to squeeze in a few hours a day. (My intuition is that the theory-first approach makes more sense for students than for the self-taught.)

</comment><comment><USER28> Should be titled "Some Books I Think You Should Read, But Not To The Exclusion Of Your Social Life."

</comment><comment><USER29> This should be called The Coder's Path for the same reason this site should be called Coder News. A whole section on "Gettin' Paid, Makin' Money"? Fucking please.

<comment><USER3> Eventually every artist has to learn how to sell their work. Is it because they're selling out, just doing it for the cash? No. Some of us have families to feed.

<comment><USER30> I know plenty of hackers who decided to dayjob in other fields, so that's B.S. Hacking does not imply being paid.

<comment><USER3> I never implied that hacking implies being paid. You're reading far too much into it.

<comment><USER30> I am taking exception to "Eventually every artist...". There are _many_ who do not. Possibly even more than those who do.

<comment><USER23> Think artists don't think about selling their work? Go read some Henry Miller or Charles Bukowski.

<comment><USER30> I _know_ most people do not sell their artistic works. I was referring to hackers with that "possibly".

</comment></comment></comment></comment></comment></comment></comment><comment><USER31> Here's the author's response to HN commenters: <http://krainboltgreene.heroku.com/log/11/>

</comment><comment><USER32> Honestly, Why does everyone and their brother STILL recommend Kernighan & Ritchie in all those "Getting Started" articles in this day and age?

I am not trying to diminish the significance of their work in any way shape or form but first we should learn Ruby and Python and THEN "C Programming Language" to "get paid"...?

Why not recommend diving into modern C++ and some of the absolutely fantastic libraries out there (Boost etc..) or more modern books on C instead? I am sure this would get you much further and keep you up to speed with current advancements since a hell of a lot has changed, even newer standards in C, since 1988. (referring to 2nd edition)

And while good intentions were surely behind it, it really went downhill here: __"Drinking Heavily" __and __"Teh Womenz" __

You do not NEED to become an alcoholic or fsck "teh womenz" to be or work as a successful "hacker". You do absolutely need soft skills, friends, some networking and you NEED to socialize and yes, a partner (or partners) can be a wonderful thing in your life and booze does work wonders as a social "lubricant" but these are far from being the only forms of social interaction or positive recreational activities you should invest your time in and, quite frankly, we tend to overrate getting hammer and getting laid.

</comment><comment><USER33> bunch of pointless garbage - both articles and comments, haven't learned a single useful thing... Next, please!</comment>


Pirates challenge Russian government - <AUTHOR> http://en.rian.ru/russia/20121101/177116836.html

<comment><AUTHOR> It's funny that rt.com, who is always first to point out things like this in the west, is suddenly moot on the issue.</comment>


Why is it so much easier for me to read junior programmer's code than senior's? - <AUTHOR> I amd mid programmer, and I noticed that for me it's so much easier to read the code of a junior developer's than senior's. The reason is senior programmer uses so many abstractions over abstractions, dependency injection containers over containers etc. Yes it's easier to write unit tests for it, but it's so difficult to understand anything. Senior programmer is considered to be a very good developer, and he is. But it's just so strange. Maybe I'm just a terrible developer. <comment><USER2> [https://medium.com/@webseanhickey/the-evolution-of-a- softwar...](https://medium.com/@webseanhickey/the-evolution-of-a-software- engineer-db854689243)

</comment><comment><USER3> I think you answered your own question. Of course more abstractions make things harder to read and comprehend. The tradeoff between simplicity and flexibility (and testability) is a design decision that your team has to make. Since this senior dev is a good developer they are probably adding this complexity because they think its necessary for their overall design goals.

</comment><comment><USER4> You can be a great developer and still write code that is shitty for others to read.

The best developer I ever worked with, CTO of a startup, had thoroughly- commented code, and usually chose code legibility over code concision.

</comment><comment><USER5> You should have a look at a code writte by actual senior programmer, not a wannabe one. Senior people strive for maintainability.</comment>


Why you'd be an idiot to pick 1000 mediocre programmers over 5 great ones - <AUTHOR> http://charlieflowers.wordpress.com/2011/06/23/analogies-for-1000-mediocre-programmers-vs-5-great-programmers/

<comment><USER2> The answer is actually much simpler than that:

Any mediocre programmer will write unmaintainable code in the long run. At some point one of three things will happen and always do, no exception:

1) They get too frustrated to work on this POS that they wrote and leave.

2) You give them tasks that eventually become impossible to be completed and fire them because they can't do anything you ask for in a reasonable timeframe.

3) They entrench and keep working, you ignore timelines and code complexity hiring more mediocre programmers to help the ones who need help. You just wind up paying money. End of the day your product works BUT the second any competitor with 1 good programmer pops up your entire business is screwed since with 20 developers you can't keep pace with a single dude having close to zero expenses making pure profit off of any money being made, while you wind up having to hire sales and more programmers, paying insane amounts while your competitor(s) slowly chip away at your business until you cant maintain enough clients to feed your ever growing maintenance needs.</comment>


Thoughts On Becoming Self-Sufficient and Defeating Personal Homelessness - <AUTHOR> http://paradox1x.org/archives/2009/12/on-get-a-job.shtml

<comment><USER2> For context, he was homeless about fifteen years ago. And is still very involved in helping the homeless.

My impression is you wouldn't have been able to guess that he was homeless X years ago based solely on his middle-class life now. _Real bootstrapping_

I believe one of everyone's worst fears is to be homeless (whether acknowledged or not - I hate inevitably thinking about it whenever I see someone on the street).

<http://paradox1x.org/pages/1989.shtml>

<comment><USER3> The flip side of this is that having been homeless you have nothing to fear. I had a period of homelessness in my early 20's - it was fairly self inflicted, I was burned out from the ridiculous hours in my first job and needed to escape from everything but I was already a decent programmer so I knew I could get back on the ladder - so nothing like what this guy went through.

The good thing though was that it made me feel like I could cope with anything. Homelessness reduces your horizons to "where am I going to sleep" and "how am I going to get some food" (to the point were those two things are _all_ you think about most of the time) and having come through that I felt like I could try anything because no matter how badly it went wrong I would be ok.

<comment><USER2> Thanks for sharing your experience and perspective. How do you push yourself as an entrepreneur if you don't fear the normal things?

</comment></comment></comment><comment><USER4> Sociality seems to have negative feedback at the edges. The height of the potential barrier is easy exceeded if you're self-sustaining and near impossible if you're not.

The only part of this I've personally experienced is similar chicken and egg problems trying to move to new country. You can't get a apartment without an employment pass, the bureaucracy can't send you letters without an address. If you have money you can bootstrap off a lawyer or accountant's credentials otherwise there isn't always a way.

<comment><USER5> He mentions friends helping him several times, but not crashing on someone's sofa, and a couple of times he specifically mentions that he wouldn't go to a shelter - I'm curious as to the reasons for this? The shelter maybe because he feared getting stuck there?

</comment></comment><comment><USER6> Interesting piece. Thanks to colinprince for posting it.

</comment><comment><USER7> The most useful wisdom always comes from the chlenges we personally face. This is where the best startup ideas come from.

<comment><USER8> That is startup-as-self-help wishful thinking.</comment></comment>


Ask HN: How do I buy crude oil? - <AUTHOR> I believe oil prices are going to go back up, how do I go about buying some oil?  Is there any benefit to using a discount brokerage or can I just walk into my bank?  I'm in Canada, does that matter?  What kind of fees are acceptable?  I have modest investing experience, enough to know that mutual funds are generally a rip-off.  I don't have a financial advisor at the moment.
I know it's a bit off-topic but I don't really trust people's opinion on other forums.
Update: I don't want to buy physical oil, just some bits that say I own something that is more or less a direct function of oil prices. <comment><USER2> This probably isn't super helpful, but it's quite an interesting read:

[http://www.bloomberg.com/news/articles/2015-11-03/that- time-...](http://www.bloomberg.com/news/articles/2015-11-03/that-time-i-tried- to-buy-some-crude-oil)

<comment><AUTHOR> I should really fix my submission!

</comment></comment><comment><USER3> Are you asking how to buy physical oil, have it delivered to you so you can hold onto it ? If you are then the quick answer is you don't, you don't have the infrastructure to take delivery or to hold the oil. However if you just want to "invest" directly in oil you will be looking into setting up a Futures account and trade Future Options.

Your best bet however it to just invest in Power Shares Oil ETF, it will mostly track oil, and its the most hands off approach [http://finance.yahoo.com/echarts?s=DBO+Interactive#{%22allow...](http://finance.yahoo.com/echarts?s=DBO+Interactive#{%22allowChartStacking%22:true})

<comment><AUTHOR> That's great info, thanks.

Sorry, I didn't mean physical oil, but I appreciate the just-in-case correction nevertheless :)

[http://www.bloomberg.com/news/articles/2015-11-03/that- time-...](http://www.bloomberg.com/news/articles/2015-11-03/that-time-i-tried- to-buy-some-crude-oil)</comment></comment>


Ask HN: Learning about product management? - <AUTHOR>

I'm looking to get more into product management. I've built a few of my own apps and have acted as a product manager when a client needed help, but no formal training at all. Do you know of any good training courses / books I could read / people I could speak to for advice / as mentors to help me get better at this. <comment><USER2> I have never taken any formal training, but the new General Assembly courses look fantastic for getting into Product: [https://generalassemb.ly/](https://generalassemb.ly/)

As for resources, Noah Weiss just posted a great article listing a ton of books and articles for product managers: [https://medium.com/@noah_weiss/50-articles-and-books-that- wi...](https://medium.com/@noah_weiss/50-articles-and-books-that-will-make- you-a-great-product-manager-aad5babee2f7)</comment>


Controversial content and free expression on the web: a refresher - <AUTHOR> http://googleblog.blogspot.com/2010/04/controversial-content-and-free.html <comment><USER2> _Some democratically-elected governments in Europe and elsewhere do have national laws that prohibit certain types of content. Our policy is to comply with the laws of these democratic governments_

It seems that they draw the line on where they're willing to censor search results based on the type of government imposing the censorship.

</comment><comment><USER3> This is the epitome of hypocrisy. Google censors Nazi stuff in Germany but refuses to censor Tianamen Square? Nazis have a right to free speech as much as any chinese person does. If you obey the law in Germany, then obey the law in China. Be consistent - either make information free or don't make information free.

But don't go selecting what you want to censor and what not. Google is not supposed to decide what we get to see or what not. Google is supposed to follow the laws of the country they are operating in. Let the government decide what we get to see or what not - and we can choose to bypass it.

If google had censored nothing anywhere, at least that would be a fine and consistent approach.

But they cannot go censoring Attaturk insults or Nazis, and then refuse to follow the law in China. That's nonsense and hypocrisy.

<comment><USER4> Corporations can't generally be scofflaws or practice principled civil disobedience. Google has adopted a standard -- complying with the censorship laws of democratic governments, withdrawing from other places -- that takes these limitations into account. Your alternative standard is just a macho pose, that would cost Google a bunch before being run out of many mostly-free societies. (I don't blame them for choosing battles they can win.)

You can argue that respecting Germany's Nazi taboo and Turkey's Ataturk taboo begins a slippery slope that results in more and more censorship over time, and I might agree. (In particular, it rewards the fabrication of new taboos -- new poses of victimhood and danger -- to control speech and thought.) But you haven't suggested a workable alternative for a legally-chartered organization that must yield to the laws of local authorities where it has a presence.</comment></comment>


Ask HN: What do you think will be "the next big thing"? - <AUTHOR> I found some interesting articles on this topic, but HN always gave me great insights regarding technology and business.<p>I would like to hear your opinion about the potential next big thing(s). <comment><USER2> Children---the conceiving, raising, and educating of.

Smart people aren't having kids. Many of those who do, pass off their care to strangers or government schools. When they get out of high school, we're not sure what to do with them---higher education is riddled with problems, but so is entry-level hiring.

Will we have self-driving cars in 2038? Because we _will_ have 18-yr-olds.

<comment><USER3> There are too many people.

<comment><USER4> People aren't the problem. The problem is people who have negative value.

A person can grow more food, build more homes, improve the environment, improve energy usage, staff schools and hospitals. Every negative issue with overpopulation can be countered with a person.

But there aren't enough useful people. And I think this is an issue with the system. We do not need more people whose life goal is "financial freedom/FU money", minimizing taxes paid, and becoming parasites to society. We need more people creating wealth, but most people are obsessed with trying to get a larger slice of wealth while contributing as little as possible.

We need to stop trapping people in poverty, where they're useful only for minimum wage labor, but become a burden on the welfare system. Nobody wants to live like this, but poverty means they have no choice.

A hack might be only letting people who want children and want to take care of children have kids, and have multiple kids. While those who don't like kids get improved access to birth control.

<comment><USER5> > A hack might be only letting people who want children and want to take care > of children have kids, and have multiple kids.

How? We can not even achieve that for pets. Can you come up with any valid qualification process for this?

<comment><USER4> It's too big a problem to go into detail, but it's more of a social/cultural problem and the wrong incentives.

Poorer families and cultures are encouraged to have kids, because kids can bring in more money, take care of other kids, feed their parents. People are often told, "Who's going to take care of you when you get old?" Having kids as an investment/retirement plan is bad.

Then there are those who really want kids and would love to take care of them. 2-child policies are bad for them and the punishment can be too harsh. It's better for those people to have 4 kids, while other individuals have 0.

Policies should be more towards the quality of kids and not quantity. One of the biggest expenses is college, medical (especially special children), and housing. Housing is hard to fix, but we could probably subsidize college and special education more.

<comment><USER3> Plus at the macro level, most economies are consumption driven and rely on population as a major driver of growth.

I disagree with subsidizing college more that it is already. There are numerous scholarships available to promising students. Also, the government has been directly and indirectly funding colleges through grants and easy to get student loans. The problem with this is people going to college who might not be able to perform at that level, or who are unable to find a job that pays high enough after graduation. There is research that shows that some minority groups tend to pick careers in lower paying fields because they want to make a social impact (think teaching, social work, etc), so not everyone's goal is to maximize profit. There are plenty of trades that one can make more money working in, such as diesel-electric mechanic, welder, auto mechanic, aviation mechanic, etc.

</comment></comment></comment></comment></comment></comment><comment><USER6> Decentralized peer to peer internet, powered by a network of cell phones and other devices. For this to work it likely needs to use middle-out compression.

<comment><USER7> The internet is already decentralized and cell carriers don't want consumers with control over the modems (for many reasons including avoiding this particular scenario.)

Look at what's happened with the TV whitespace ISPs. There's just no way unless something radical happens with the FCC.

</comment></comment><comment><USER8> I think there is a big shift toward "self-improvement" tech. The first big wave has been nootropics, although the hype around that stuff has subsided it seems. There are researchers still actively looking at ways to improve standard bearers such as modafinil.

A second push toward wearable devices is probably coming. I think Snapchat's glasses probably cracked some of the stigma around that, at least for younger millennials. We won't see the same type of stigma that Google Glass had, especially once Apple gets in the game. This will necessitate new conversations around privacy in the public space, although this time around the conversation will be led by people who might not necessarily have grown up expecting that luxury anyway.

Another big movement is Neuralink and similar physical brain enhancement. The degree to which these could change an individual's lived experience is probably hard to imagine. I somewhat expect something like having a Dropbox- memory with Wikipedia-levels of factual knowledge. The ability to synthesize and digest this amount of data will become the new ground on which individuals differentiate themselves. Knowledge and social management applications will become essential, ie things similar to Roam or CRM-style apps for your social life.

I am curious about how the near future will impact pop culture. Maybe our tech will be able to sense what music we want to listen to in the moment? Maybe algorithms will start proactively incorporating the preferences of groups of people, instead of individuals, to make suggestions? Will music and film become shorter to fit into tinier and tinier slices of attention?

For what it's worth, futurism is one of my passions. I predicted services like Stadia 6 years ago. I'm still a little salty about how badly it has turned out...

</comment><comment><USER9> Augmented Reality, which is really the merging of our physical and digital worlds

Bioengineering / Genetics, this will probably change the way we make many materials in addition to health applications. Nano materials are pretty interesting too

Something to deal with a hyper-connected world and all the issues therein. This is probably about rule making. "Rules for a Flat World" is a good read on how humans have made and used rules and laws.

I hope for something in the social network space akin to the FHIR standard in healthcare in US. This could enable the separation of the network from it's presentation and thus (fingers crossed) encourage competition.

Pessimistically, the second cold war

<comment><USER9> This is likely a relevant topic too [https://news.ycombinator.com/item?id=23956961](https://news.ycombinator.com/item?id=23956961)

</comment></comment><comment><USER10> Smart glasses.

Apple is rumoured to be announcing their version of the Google Glass some time this year. Their recent efforts around augmented reality seems to confirm that. If the rumour is true, and if it succeeds, then it will be interesting times for wearable tech.

<comment><USER3> Can't wait to see what they bring out. I loved HoloLens, but they aren't practical for long duration use or in cost.

</comment></comment><comment><USER11> PCoIP. Zero clients. Workflows for teams in virtual environments. It's analogous to netflix, zoom, and stadia. But for distributed remote-first enterprises.

Imagine a big budget Hollywood movie production, shooting in locations around the world, with post-production all working from a single data source, editing in a single multiplexed workstation.

</comment><comment><USER12> Microrobots. Each robot the size of a grain of salt; disposable (and hence, cheap). They'll be able to: clean your teeth (goodbye toothbrush), cut your hair (you'll have exactly the haircut you want), cut your nails, shave your beard. Clean your face, your ears.

Probably more usages, but all of them related to human hygiene. I just can't imagine a future with: toiler papers, toothbrushes, nail clippers, hair scissors...

<comment><USER9> We will be the Borg!

This is the one I couldn't remember for my own comment, actually robotics generally, was thinking farms, self driving, android companions... tiny bots is another good call. I think there will be a lot more uses outside of humans, probably first for safety reasons.

</comment></comment><comment><USER13> Git for genes.

Revert, bisect, blame, cherry-pick, merge, rebase, commit. On genes.

Of course, there could be porcelain on that plumbing. You could point at a trait, like a tumor, and revert it. Remission will last a second or so.

CI/CD for humans, with integration tests and unit tests updated glibally. If there's mutation and we know that mutation isn't good, it doesn't get merged.

<comment><USER14> [https://igem.org/Main_Page](https://igem.org/Main_Page) [https://genelab.nasa.gov/](https://genelab.nasa.gov/)

</comment></comment><comment><USER15> A free speech service that is serverless and unable to be shut down. That will truly give power to individual people.

<comment><USER16> What kind of power are you hoping to gain? Power to say anything you want, or power to prevent abuse. I don't think you can have both.

<comment><USER17> I appreciate your willingness to reason carefully about this problem. I may not understand your point, so please walk me through it, if you have the time and energy to teach a young man. At the very least, would you agree it is possible to have a context where anyone can say what they want (perhaps something we all infrastructurally support and protect) while also having other contexts in which each user controls who their moderators and search/feed signalers will be? Isn't it worthwhile to work for both?

<comment><USER16> Anyone can say anything they want? What if I want to say what your address is and when you are home, and which of your doors is easiest to force open? Even if you had the ability to hide this content from yourself, wouldn't you prefer to hide it from those who would like to use it to harm you?

<comment><USER16> Everyone wants to avoid censorship until their sister's revenge porn hits the decentralized web.

<comment><USER17> Before I respond any further, I'd like to offer you the chance to speak with me more privately. HMU, [https://philosopher.life](https://philosopher.life).

</comment></comment></comment></comment></comment></comment><comment><USER18> Smart(er) Cities - publicly available APIs for each city providing real-time access to what's happening where, from traffic numbers to park occupancy, requests for planning permission to refuse collection times for the area, cities produce tons of data and harnessing it would be incredible.

</comment><comment><USER19> Cryptocurrency might still have its day.

</comment><comment><USER20> Biotech (gene therapy).

</comment><comment><USER21> Physical alteration of your finger prints instead of tattoos. Could be used for commercial gain?

</comment><comment><USER3> I'm surprised nobody has said quantum computing.

<comment><USER22> QC seems more like the next, next, next big thing. We've only just got a POC for quantum supremacy. It'll be a while until QC outperforms classical in _any_ practical problem, and longer until it becomes useful enough to get big.

<comment><USER3> Yeah, I guess I was looking at the biggest next thing. Many of the other comments seem like they won't transform our lives or that they are already here but just need to grow more.

</comment></comment></comment><comment><USER23> AI + science leading to acceleration of discoveries

</comment><comment><USER24> Flying cars. It's always flying cars.

</comment><comment><USER25> OnlyFans

</comment><comment><USER26> XgeneCloud: writing APIs will never be simpler.

With just one command you can generate REST/Graphql on 5 different types of databases instantly.

[https://github.com/xgenecloud/xgenecloud/](https://github.com/xgenecloud/xgenecloud/)

Has GUI for dB design and API debugging.

And APIs generated can be deployed as even AWS lambda function too.

And this is our MVP :)

Disclaimer: I'm the founder.

<comment><USER27> since you're here: I didn't find anything about pricing, what's your model?</comment></comment>


Resourcey - Resources for Programmers - <AUTHOR> http://resourcey.com

<comment><USER2> Hi everyone,

Resourcey is a "scratch our own itch" project we made, to keep track of all the great user-created extensions and other resources that Hacker News and other sites have.

We'd appreciate any feedback/bug reports, and of course please add any other resources you know about, both for Hacker News and other sites.</comment>


Ask HN: I do terrible in algorithm questions in interviews - <AUTHOR> Question for the HN community. I am relentless when it comes to practicing algorithm based questions for your typical tech interviews at the big names, but I always flub these exam like interviews. As a student it was similar. If I got flustered in an exam and didn't know the answer right away, the only way I could arrive at the right solution would be in a low pressure quiet environment where the clock isn't ticking. I generally have the knowledge so I hate that I'm losing all these opportunities because I suck at taking exams. Any one have a similar experience, and what did you do to overcome it? <comment><USER2> Well, i do have a very similar experience to yours, i can solve any problem when i'm laying in my bedroom, but once people around me or just knowing that the clock is ticking, I lost my ability to even search a binary tree (example of simple questions), how did I change that ? Well just start doing interviews with friends, find partners that are working towards the same goals as you and interview each other in a limited time, it will really lower your pressure on so many levels in real interviews, also try interviewing.io (still waiting for my invitation) but i think the idea is pretty great, also one thing, you need to master the Algorithms and data structures ideas (things like sorting algorithms, data structures .....) just like you master 1+1, because in real programming interview, sometimes you just need to find the right algorithmic representation of the problem and not remember how some random data structure works, I wish you best of luck.

</comment><comment><USER3> You're thinking of interviews as standardized tests (exam). To some extent, they are, but overall they are closer to a _date_ , than to an exam.

In other words, it's not sufficient that you be good at algorithms. You also need to get a panel of interviewers with whom you gel well. What interviewers you get at a company, is not in your hands.

You can try a few things:

1\. Do mock interviews with experienced interviewers.

Get used to being judged. Repeatedly.

2\. Don't interview with the agony of getting a job. Just go to solve the problems.

Listen to this: [https://www.youtube.com/watch?v=v1WiCGq- PcY](https://www.youtube.com/watch?v=v1WiCGq-PcY)

3\. Interview at companies that bias towards take-home tests.

If you haven't already, then try triplebyte.com. They can help you find such companies.

\--

I make these observations based on my experience running a successful bootcamp for interview prep ([http://interviewkickstart.com](http://interviewkickstart.com)) and also being an early engineer and a hiring manager (Director of engineering) at Box prior to that.

</comment><comment><USER4> It seems like for you preparation is even more important than usual. It is understandable to not be comfortable under an artificially created pressure situation (such as in an interview room). In that case, you need to prepare at least 3 times harder beforehand. First, research (online and offline) about _all possible questions_ that they may ask. Having an idea about their codes and what they're doing will help with this. Then, prepare answer for these questions and rehearse them until you get sick of it. Take a break, come back, and rehearse again till sickness. Repeat.</comment>


Why OCaml, Why Now? - <AUTHOR> http://spyder.wordpress.com/2014/03/16/why-ocaml-why-now/ <comment><USER2> Look, I love OCaml and it's my favorite language syntax-wise, but the real big elephant in the room is not its JS-backend maturity. Rather it doesn't have kernel thread support...all threads are user-level just like Python due to a global lock for garbage collection. This means threads do not run concurrently across multiple cores. This is UNACCEPTABLE in 2014 - roughly 8 years since processors went multi-core. Intel is talking about having hundreds of cores on a single die by next decade and having programs that can't take advantage of that is extremely limiting.

Xavier Leroy (the creator of OCaml) and his team at INRIA didn't think this was a big deal because when they were writing this stuff, processors were single core and had been since the beginning. Sure there were multiprocessor machines (not the same as multicore as there are multiple die), but those were only meant for servers/workstations. OCaml seemed very promising around 2006, the peak and end of the single core era with the Intel Pentium 4. What made OCaml so impressive was not only was it this beautifully simple, high-level functional language, but that the native compiler produced very fast code that was comparable to C/C++ performance. However, as multicore processors were introduced (Intel Core, Core 2), not having this capability made writing new code in OCaml less appealing. There are solutions like MPI, but that's lame. The same excuses you hear in the Python world about having true multithreading you hear in the OCaml world. Microsoft was able to do it with F#, which is essentially a clone of Caml by targeting their .NET CLR. Haskell is able to do it with GHC.

I still think OCaml is a wonderful language -- not having true multithreading doesn't make it useless. However, to me it has become more like a statically- typed Python which I can use for scripting. Having to use hacks like MPI to do multicore processing is a huge turn off in a multicore world. This is again nothing against the language, but the standard implementation needs a concurrent garbage collector and kernel threads. Otherwise I think OCaml may be doomed to irrelevance in the long run, which would be truly sad.

<comment><USER3> Apparently multicore ocaml is worked on again: [https://github.com/ocamllabs/compiler- hacking/wiki/Multicore...](https://github.com/ocamllabs/compiler- hacking/wiki/Multicore-runtime) [https://github.com/ocamllabs/compiler- hacking/wiki/Multicore...](https://github.com/ocamllabs/compiler- hacking/wiki/Multicore-OCaml)

That being said you can still use multiple cores by using multiple processes, and that doesn't necesarelly imply MPI. OCamlNet (and probably some other libraries) provide a way to communicate between multiple OCaml processes.

<comment><USER2> Good to see work is being done on it, but until it's in the main implementation for at least a year...I wouldn't trust it on anything that matters.

The advantage of kernel threads is that they have way less overhead than a process (both in context size as well as more efficient memory caching at processor and OS level)...though more than a user-level thread. If there isn't any sort of message passing between two processes, the only mechanism I can think of of sharing data is shared memory (i.e and mmap) which is just as efficient as threads sharing the same process heap...but awkward (yes there are sockets, file IO, signals, queues, etc, but not as efficient). Even if OCaml provides a way to abstract that to be more palatable + safe -- my argument is that in a multicore world, kernel threads must be a first class citizen and the programmer shouldn't have to resort to tricks to harness it -- otherwise it's a major flaw that is going to prevent future adaptation. Also, as the number of cores increase, this is going to matter more and more...so hopefully this stuff gets out in the wild soon.

</comment></comment></comment><comment><USER4> I'm glad that the author is picking up a new functional programming language, but choosing OCaml over Haskell because of support for the Javascript implementations strikes me as choosing a BMW over a Mercedes[0] because of the number of cupholders it has.

If you don't have a particular goal in mind (ie, "I work at Jane Street and need to be compatible with our existing code"), there are a number of other factors in the OCaml vs. Haskell discussion that are far more important.

> JS is the only realistic way to write web apps

Javascript is the only realistic way to write _the front-end_ of webapps. But that doesn't mean you're wedded to it for your backend technology. And I don't think _either_ OCaml or Haskell have sufficiently advanced DOM bindings, etc. that I'd recommend using either one for client-side work in the browser.

[0] I'm not sure if this is a flamewar topic for car nerds - my point is to pick two high-end luxury cars that are both well-respected and each have their own merits.

<comment><USER5> It sounds like you have a very language-centric view of the world. In practice, deployment is everything. (Why do people write code in Objective C? Because iPhone.)

Having a solid implementation for your target platform is very good reason to pick a language.

<comment><USER4> > It sounds like you have a very language-centric view of the world.

> Having a solid implementation for your target platform is very good reason > to pick a language.

I'm not sure where you got that out of my comment; it was exactly the opposite.

My point was that _neither_ OCaml nor Haskell have particularly strong implementations in this area (to my knowledge). Last time I checked, the ability to write Javascript using both languages was of experimental and/or novelty use only (hence the "cupholders").

And that still doesn't change the fact that a web app can be written in any language - the only part that needs to run in Javascript is the client-side. Depending on how you architect your app, this may not be much at all. (There are very few webapps that actually _need_ much logic in Javascript - if you want to avoid JS[0] while writing complex webapps, it's actually very easy to do so in many cases.)

[0] or anything else that is translated into JS

<comment><USER6> Haste is a strong, useful, and impressively complete Haskell to JS compiler.

Fay is used in production apps as well.

PureScript is less mature still but pretty nice.

<comment><USER7> I looked at Haskell options - fay and haste are both good, but not complete (try compiling tagsoup). GHCJS works, but generates 5mb JavaScript files.

This is what I meant when I said "by virtue of support for existing libraries". js_of_ocaml translates compiled bytecode and can therefore make any pure OCaml library work in JavaScript without recompilation.

</comment></comment></comment></comment></comment><comment><USER8> Felix is to C++ what F# is to C# [http://felix- lang.org/share/src/web/tut/tutorial.fdoc](http://felix- lang.org/share/src/web/tut/tutorial.fdoc) (I am not the author, just excited about this language) OCaML programmers will feel immediately at home.

It is a mature yet actively developed whole program optimized, strongly typed, polymorphic, ML like language that can interact effortlessly with C and C++ and has coroutines and threads baked in, although use of threads is somewhat discouraged. It has type-classes as well as modules. Functions written in it may be exported as a CPython module. This might be useful if one wants to gradually transition from a Python based src tree.

It uses a mix of lazy and eager evaluation for performance and compiles down to C++. Execution speed is comparable to hand written C++, mostly better. Its grammar is programmable in the sense that it is loaded as a library. So in the same way that languages may acquire libraries, Felix may acquire domain specific syntax.

It is also mostly a one man effort but with a feverish pace of development so it comes with its associated advantages and disadvantages.

Tooling info is here [http://felix- lang.org/share/src/web/ref/tools.fdoc](http://felix- lang.org/share/src/web/ref/tools.fdoc)

The author likes to call it a scripting language but it really is a full- fledged statically compiled language with a single push button build-and- execute command. [http://felix-lang.org/](http://felix-lang.org/) The "fastest" claim is a bit playful and tongue in cheek, but it is indeed remarkably fast.

<comment><USER9> AFAICT you mention Felix whenever OCaml comes up, generally saying more or less the exact same thing each time.

<comment><USER8> Absolutely correct, and for F# too. I do want to get the word out, it really needs some love and eyeballs, but perhaps I overdo it.

</comment></comment></comment><comment><USER10> If ocaml is a language waiting for a killer app, this might be it: [http://www.openmirage.org/](http://www.openmirage.org/)

There was a presentation at the FP eXchange in London last Friday about mirage and many a mind was blown!

<comment><USER11> Haskell also has the analogous HaLVM: [https://github.com/GaloisInc/HaLVM](https://github.com/GaloisInc/HaLVM)

</comment></comment><comment><USER12> I've found it interesting that OCaml hasn't had more interest given the amount of recent momentum in Haskell.

Haskell is an Ivory Tower. The features that generally draw one to the language also tend to be the things that eventually push one away. Haskell has grown a lot over the years however as the language evolves to allow general programming within a pure framework.

OCaml on the other hand tends to make a compromise, acknowledging that the programmer occasionally needs a different tool for the job. OCaml allows the programmer to opt into things like mutability and objected oriented code when the need arises. These compromises can also be seen as the languages downside however.

I find it interesting that the driver for the author into OCaml is JavsScript... but it's nice to see OCaml come up a bit more often. :)

<comment><USER13> I feel it's similar to any competitive environment: differentiation requires making strong tradeoffs. Haskell's choice of tradeoffs---while initially very ivory tower---have led to to become a strongly differentiated language. You not only learn how HM typing and full commitment FP feel, but also how to structure code purely, compose effects, and abuse laziness.

So for the very same reasons you give---Haskell has made fewer tradeoffs for "practical" programming---Haskell has become something valuable and interesting. On those tides the community has grown.

<comment><USER14> Another big obstacle was that the INRIA license effectively prevents forking the language (you can only distribute modified compilers as original source + patch, not as eg a github repo) so for a long time there was a bottleneck on the language evolution. Lots of useful extensions (eg delimited continuations, staging) wilted and died because of that.

The rise of OcamlPro and Ocaml Labs does give me hope for the future of the language. There is already renewed momentum behind fixing packaging and handling multicore.

Now if someone would just figure out ad-hoc polymorphism (just pick one of the dozens of propasals) and maybe even document camlp4/5....

</comment></comment></comment><comment><USER15> For me Scala has been the not-quite-as-good-as-haskell-but-more-industrially- acceptable language. I'd be very interested to see a more neutral comparison of functional languages for compile-to-JS, because if anything Haskell seems more popular for that - I hadn't heard anything about compiling OCaml to JS before this.

<comment><USER16> I just started at a Microsoft shop a few months ago (first time for everything), and I actually quite like F#, now that I've had a little while to play with it. It's a good contender for the NQAGAHBMIAL throne.

Having used CMUCL/SBCL for a while, I always found ocaml's "well, you can compile your code, but then you can't run it in the REPL" to be off-putting. (For my purposes the CLR JIT compiler for F# is good enough.)

<comment><USER17> Posted 20 minutes ago, and this post already shows up when you google "NQAGAHBMIAL". Impressive...

<comment><USER18> And now yours. And nothing else.

Is it "not quite as good as Haskell but maybe it's alright language"?

<comment><USER16> From the parent, "not-quite-as-good-as-haskell-but-more-industrially- acceptable language". Not intending to be obscure.

</comment></comment></comment></comment></comment><comment><USER19> OCaml is actually taught in the second level computer science course at my university. I think its a great language for learning topics like recursion especially with its pattern matching. Its also a great intro to functional programming

</comment><comment><USER20> This might be entirely superficial of me, but I always preferred Haskell over OCaml simply because OCaml required me to type ";;" after every line.

The only real reason that I can see to choose OCaml over Haskell is that if you learn OCaml, you might be able to work at Jane Street. Is there a strong argument for abandoning my Haskell-ing for OCaml?

<comment><USER21> > This might be entirely superficial of me, but I always preferred Haskell > over OCaml simply because OCaml required me to type ";;" after every line.

That's easily fixed: only the toplevel requires ;; (to commence evaluation of the phrases you've typed in). Just don't use it in normal code and everything will parse fine.

<comment><USER18> > everything will parse fine.

That's an exaggeration. There are circumstances in files where it's necessary. I didn't realize this, which hung me up for a long time.

<comment><USER22> Would you care to share an example? I've _never_ encountered a justifiable need to write ;; outside the REPL. The only uses of ;; I've encountered "in the wild" were hardly reasonable: essentially top-level code that was not wrapped in a "let () = ..." statement.

<comment><USER18> I don't recall seeing that recommendation before this thread. That may just be my blindness in skimming things too quickly. In any case, I think it indicates a wart in the language when you have to wrap everything in otherwise useless let blocks just to get it to parse.

</comment></comment></comment></comment></comment><comment><USER23> OCaml is Object Caml right? What about SML? I always loved SML, but it never got any traction at all. The O in Ocaml always turned me off, they cluttered up the syntax with all the object notation.

Does anyone have any insight into why OCaml rose to (relative) prominence and not SML?

<comment><USER24> Ocaml was always the more pragmatic language and for a long time the implementation was significantly faster than anything SML offered. MLton came along very late in the game and offers excellent performance, but doesn't support separate compilation.

Edit: A more lengthy comparison: [http://adam.chlipala.net/mlcomp/](http://adam.chlipala.net/mlcomp/)

<comment><USER23> Thanks for the perspective!

</comment></comment></comment><comment><USER25> Considering how strongly opposed the author is to dynamic typing, I'm actually kind of surprised they'd consider OCaml's type system to be acceptable.

Technically, yes, it's a statically typed system. But its use of structural typing instead of nominative typing effectively means it takes half the compiler assistance you can get out of static type checking and chucks it out the window. Using structural typing means that a type is nothing more than the sum of its parts; nominative typing makes it possible to add further specificity to types by naming them. This is huge. A language that doesn't do this is a language that can't be taught to understand the difference between 12 meters and 12 Newtons.

<comment><USER14> You may be confused by the fact that the type system will notice the equivalence of two types _if_ the implementations of both are public eg

        module M =
        struct
           type newtons = int
           let inc some_newtons = some_newtons + 1
        end :
        sig
           type newtons = int
           val inc : newtons -> newtons
        end

        M.inc 1 (* this works *)

        module M =
        struct
           type newtons = int
           let inc some_newtons = some_newtons + 1
           let in_newtons x = x
        end :
        sig
           type newtons
           val inc : newtons -> newtons
           val in_newtons : int -> newtons
        end

        M.inc 1 (* type error *)
        M.inc (in_newtons 1) (* this works *)

The use of hidden types in OCaml gives far better control over encapsulation and implementation hiding than any over language I've used.

</comment></comment><comment><USER26> "...Facebook created ... a statically typed PHP variant..." \- so happy to see another major tech company understand the merits of static typing.

<comment><USER27> that's because PHP is such a horrible language you need static typing to make sense of the crap. </snark>

<comment><USER26> Agree, same true for JS - so many people trying to fix the mess...

</comment></comment></comment><comment><USER28> How do those "to js" code generator behave when used together with frameworks like backbone or angular ?

I know things like typescript or dart have special versions of the framworks, but i'm curious to know how the ocaml to js tools behave ( since i've searched for a decent strongly typed server side technology for years, that would be an argument for me to try that language).

<comment><USER5> I don't know about OCaml, but generally speaking, there is a foreign function calling interface. You'd typically use it for integrating with large standalone codebases you don't want to rewrite (say, CodeMirror) but typically not for frameworky things. If you're going to use the same UI framework there's not much point in switching languages.

</comment></comment><comment><USER29> Here's the plan -- eliminate perl, python, ruby, php or java or any slow- starting jvm-based language(the featureless landscape of clojure for example), and use just bash, sed, awk, ocaml(to replace the fear of 'C'), and we can also do f# on windows, so there would be crossover between the worlds and peace throughout the land.</comment>