NZ Court of Appeal Upholds Kim Dotcom Extradition Decision to the US - <AUTHOR> https://www.nzherald.co.nz/nz/news/article.cfm?c_id=1&objectid=12083480 <comment><USER2> I wonder if a time will come when the US will extradite the CEO of a hosting company for failing to filter content to the satisfaction of the proposed EU copyright law.

<comment><USER3> Generally the alleged activity must also be illegal in the country you are being extradited from.

<comment><USER4> I understand that Kim didn't actually break any NZ laws though?

<comment><USER5> The explanation I've heard is that he had servers in the US, he paid people in the US, he made money from customers in the US by breaking the law in the US and therefore the US government position is that he is a criminal in the US and should face penalities here. Whether he did anything illegal in NZ or whether he should be extradited is obviously a question for NZ legal authorities.

I've always felt conflicted about his case myself. On the one hand I have natural sympathies for people using software to share information. I also think American prisons are terrible places and it would be awful to be imprisoned in one.

On the other hand, MegaUpload did seem like it was brazenly profiting off of other people's intellectual property. Communications referenced in the original indictment made it seem like the Mega employees agreed that their business was based on copyright infringement. That would also match my common sense intuitions.

Hopefully the NZ courts will reach a wise conclusion.

<comment><USER6> > MegaUpload did seem like it was brazenly profiting off of other people's > intellectual property.

As much as US propaganda would like us to see it as a lame technicality, there is a very important distinction here: Megaupload was not directly profiting from copyright infringement, they were profiting by being a place for copyright infringement.

The reason they were so successful is that there wasn't a competing service in that niche other than BitTorrent.

Megaupload just hosted files. They are seen as some evil copyright-infringing business simply because they didn't actively filter those files. They considered the content of their users' data to be none of their business. I think it's ludicrous to prosecute them for such reasonable behavior.

<comment><USER5> I don't really see this as US propaganda. I think it's likely that MegaUpload was facilitating for profit copyright infringement. If copyright exists for any reason it should be to stop other people from selling your intellectual property for a profit.

MegaUpload did not just host files but they also made it easy to share access to those files and paid people who hosted files that were shared a lot.

MegaUpload knew about content that was infringing on copyright and did nothing about it (per the indictment). When MegaUpload was given take down notices they did not remove offending content but instead deactivated links to the content. If I torrented a movie, uploaded it on MegaUpload, then generated a hundred links to share on a hundred forum posts, I could share the movie, make money from Mega for doing so, and avoid take downs by generating new links.

Do you believe that intellectual property should be defended by law?

<comment><USER7> The key point for me is that even when MegaUpload was given a DMCA takedown notice, they intentionally made the simplest possible response that barely addressed the issue.

If they'd simply removed all the shared links for a file that matched an infringing file's hash, that'd be a huge difference in my mind. Of course, if they did this, they likely would have had far fewer paying customers...

<comment><USER6> If they blocked files by hash, users would simply upload slightly corrupt duplicates, and the situation would quickly get out of hand.

Megaupload's business model was to promote data consolidation (more downloads of the same file) and to provide good data retention (don't delete users' data). Now they are seen as evil for favoring that model instead of favoring heavy-handed DMCA takedowns.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> This seems like an awful lot of wasted resources for what is, at worst, a minor crime that existed in a legal grey area.

<comment><USER9> The crime was quite sizeable involving millions of dollars, a lot of employees etc.. It was not so much 'grey' as you can't facilitate the distribution of copyrighted stuff - and they were brazen about it.

If it were some hacker or kid in a basement, then yes, it would be more nuanced.

I respect the fact we still need ongoing discussion about the meaning of copyright beyond our era ... but this guy I think was breaking the law.

I hope he doesn't get one of those 4000-year American style sentences, you know, where they give you '10 years' for each movie downloaded though ... that stuff the American prosecutors do is ridiculous.

<comment><USER10> Should Dropbox and other cloud storage vendors also be shut down by the FBI?

<comment><USER9> The argument could be made for any web site.

Dropbox does not specifically encourage, promote or support the sharing of licensed content, moreover, they work with authorities where there is a problem. And of course, their 'boxes' tend not to designed for widespread public use. They are not hiding out in a jurisdiction wherein they can evade legal issues.

Obviously the definition for 'the line' that is crossed is going to be difficult, but it has to be somewhere.

I don't have huge faith that the American legal system is going to do well on this issue for thus single case, however, it's going to have to work it out over time.

As cases make it to the Supreme Court, hopefully there will be more clarity.

<comment><USER6> AFAIK, Megaupload did not promote our encourage sharing of licensed content. It just filled that niche better than any other site at the time.

Kim Dotcom may have chosen New Zealand for to evade legal issues, but I see nothing wrong with that. If you don't agree with one nation's laws, that is a perfectly valid reason to live elsewhere. He didn't just run his business there, he _lives_ there.

</comment></comment></comment></comment></comment><comment><USER11> not surprising. We've the expert witness testimony of the RIAA and MPAA. Unless and until we extradite Kim to the US,we cannot properly dunk him to complete the tests for witchcraft.

</comment><comment><USER12> I'm surprised that he didn't try to relocate back to Germany years ago, as Germany doesn't extradite its own citizens. Did any of the court orders in New Zealand prevent him from (legally) leaving the country?

<comment><USER13> Yes, while extradition proceedings are going on he is barred from leaving the country, as one would expect.

<comment><USER14> I would have sailed away upon the morning tide and let NZ's internal politics take care of themselves from a safe remove.

<comment><USER13> Easier said than done.

Where are you going to find a boat? How will you buy it?

Where are you going to sail to? There are exceedingly few countries with no extradition to the USA.

Who's going to sail the boat? It would be a foolish idea to try and sail across the ocean with no experience, especially if you have the physique of Kim Dotcom.

How are you going to access your money, most of which has been frozen?

How are you going to get into the country when you have no passport as it's been confiscated?

<comment><USER15> It wouldn't be the first time someone illegally entered a country or smuggled something via boat.

And yes, someone like Kim Dotcom has the resources to try.

<comment><USER16> "Running" doesn't make you look great/innocent.

As an onlooker, it is very hard to understand how exactly this is "justice", given that he hasn't been to the US and the US has not been able to prosecute him under other country's laws - these are not lawless countries but countries with robust legal codes and systems.

Every time this goes to court, the US just looks like a bully trying to throw their weight around.

Either he still has faith in the legal system, or he's trying to show how corrupt it is - none of those reflect well on the other parties involved.

<comment><USER17> His wife and his kids are still in NZ; I imagine that is the main reason why he wouldn't want to leave NZ.

He still seems to be living comfortably. I see him driving around in various G Wagons on a regular basis.

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> The other four minions in the five eyes don't need their own legal system

</comment><comment><USER19> I hope he wins.

<comment><USER20> How could he? He is being forced to play by rules that all of his opponents are not bound to.

<comment><USER21> He _could_ play by their rules, if he had far more money. Buying policy and laws ain't cheap.

<comment><USER9> Google, Amazon, Netflix, Facebook - none of them have been successful by virtue of some kind of non-market, political influence.

One could argue they avoid breakup by virtue of influence, but that's long after the fact of 'being successful'.

</comment></comment></comment></comment><comment><USER22> Is mega.nz still considered somewhat trustworthy atm?

<comment><USER23> Kim has no part in running it these days and doesn't trust it.

[https://twitter.com/kimdotcom/status/799275467266105344?lang...](https://twitter.com/kimdotcom/status/799275467266105344?lang=en)</comment></comment>


In 'Unknown Pleasures,' Peter Hook riffs on Joy Division's fateful tale - <AUTHOR> http://www.latimes.com/features/books/jacketcopy/la-ca-jc-peter-hook-20130127,0,2759487.story

<comment><USER2> As much as I like Joy Division, why is this being upvoted on HN?</comment>


CPU of the Day: Motorola MC68040VL - <AUTHOR> http://www.cpushack.com/2019/11/01/cpu-of-the-day-motorola-mc68040vl/ <comment><USER2> The time period is very interesting to me. The 680x0 story is pretty well documented, but their 88k chips + MVME [1] were also popular in specialized devices like firewalls. There was a time when Motorola was kicking Intel's butt in specialized areas.

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

<comment><USER3> Motorola was even kicking ass in PCs, although you had to be selective with benchmarks to show an advantage over Intel Pentiums.

When Steve Jobs came back to Apple, he sanctioned a marketing campaign emphasizing the performance of the Motorola PowerPC G3, with Intel chips pictured on the back of snails.

<comment><USER4> Lets not forget "the world's fastest personal computer" [https://www.businessinsider.com/the-20-most-sexy-violent- and...](https://www.businessinsider.com/the-20-most-sexy-violent-and- offensive-ads-that-have-been-banned-in-the-uk-2012-2)

'The ASA has banned two separate Apple commercials from airing in the UK. In 2004 the Power Mac G5 made unsubstantiated claims of being "the world's fastest personal computer" and in 2008, an iPhone commercial was banned for saying that it could access "all of the internet" even though it couldn't support Flash.'

<comment><USER5> >in 2008, an iPhone commercial was banned for saying that it could access "all of the internet" even though it couldn't support Flash.'

So, not even "all of the web", never mind "all of the Internet", which Apple still doesn't support.

</comment></comment></comment></comment><comment><USER6> There's an over $5000 bounty for someone to rewrite the GCC backend for the 68k/ColdFire so it can be kept and maintained going forward for newer versions.

[https://www.bountysource.com/issues/80706251-m68k-convert- th...](https://www.bountysource.com/issues/80706251-m68k-convert-the-backend- to-mode_cc-so-it-can-be-kept-in-future-releases)

</comment><comment><USER7> > [microcoding] _is common in processors today and allows greater flexibility_

Microprogramming was already widespread since the 1960s. The early microprocessors, such as MOS Technology's 6502, too, used microcode (in its "hardwired" form).

<comment><USER8> In a way everything is microcoded. The 6502 was hardly microcoded in the general meaning of microcode:

"An alternate approach, used in many microprocessors, is to use PLAs or ROMs (instead of combinational logic) mainly for instruction decoding, and let a simple state machine (without much, or any, microcode) do most of the sequencing. The MOS Technology 6502 is an example of a microprocessor using a PLA for instruction decode and sequencing.":

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

<comment><USER9> Having written microcode, and with the gate level information we have on the 6502 now, I can totally tell you that it's microcode. Some people get confused for some reason if they've only been exposed to vertical microcode.

<comment><USER10> If a 6(?)-state PLA counts as microcode, what CPU _isn 't_ microcoded?

<comment><USER11> Looking at what the PLA actually does, though, isn't it tantamount to a cleverly compressed microcode ROM? As far as I understand it, the opcode and cycle number select a "word" of control signals to spit out, and the PLA aspect is primarily used to allow multiple permutations of cycle+instruction to select the same "microinstruction" without duplicating it as a conventional ROM would require.

edit: I realize that in some trivial sense any combinational logic is tantamount to a compressed ROM, but I mean that even in a design sense this seems like it's not far off from a deduped array of microinstructions.

</comment></comment></comment></comment></comment><comment><USER12> Here's an MCF5102 based system, the Alpha Micro Eagle 450. Alpha Micro used the MCF5102 in their ColdFire-based systems for its '040 backwards compatibility.

[http://ampm.floodgap.com/www/e450.htm](http://ampm.floodgap.com/www/e450.htm)

<comment><USER13> Big fan of your work.

Once I get my desk rebuilt I will fire up my PowerPC collection again.

</comment></comment><comment><USER14> _"It has dual MMUs"_

What are dual MMUs good for? One for kernel code and one for user-mode code? (Does that mean less cache flushing during context switches?)

<comment><USER15> The two MMUs use the same page table. There is only one page table root pointer (actually two: one for user mode and one for kernel mode). But there are two translation caches for code and data (usually called TLB; called ATC in the 68040).

However, there are separate configuration registers for code and data address space that can be used to define which parts of the virtual address space should be translated and which parts are directly mapped to physical addresses without translation. Therefore, strictly spoken, the instruction address space is not necessarily identical to the data address space, despite having only one page table.

<comment><USER15> By the way, the possible difference between instruction and data address space can have interesting effects.

Amiga programmers, do you remember the (bad) habit of putting data fields directly into the code? Like this fragment:

        ...
        jsr OpenLibrary(a6)
        move.l d0, gfxbase
        rts
        gfxbase dc.l 0

Imagine now what could happen in the above move.l instruction if the address "gfxbase" is translated differently from the addresses of the instructions :)

<comment><USER16> Ooh good times :)</comment></comment></comment></comment>


Who are the Indie Hackers working on products for social good? - <AUTHOR> https://www.indiehackers.com/forum/who-are-the-indie-hackers-working-on-products-for-social-good-1a27db4a2a?commentId=-LB7iYPtrRBAJB7AYwjT <comment><AUTHOR> Sharing this with HN community as obviously it makes no sense to limit it to just Indie Hackers. I asked this question over on the IH forum and it revealed some interesting socially focused projects. I'm keen to discover more "Tech for good" startups/products and learn what the motivations are behind them.</comment>


F-Secure on potential Android security problems - <AUTHOR> http://www.f-secure.com/weblog/archives/00001311.html

<comment><USER2> This article is one big troll. Virtually no technical details about Android are known, yet an antivirus company is spreading FUD about malware? I'm sure they have only the users' best interests in mind...</comment>


Ask HN: Good WordPress themes for dev blog? - <AUTHOR> Hi HN!
In the last couple years I've played with several blogging platforms--hand rolled, Jekyll, Medium, Ghost, WordPress--and found that WordPress is the one I enjoy using the most. Strange, I know, but it is what it is.
Problem is, I haven't been able to find too many themes that work well for a developer blog. Most of the official themes, as well as ones on third-party marketplaces, seem to be geared towards either magazine-style websites or image-heavy portfolios.
I'm looking for a theme with a simple sticky sidebar/top bar for navigation, and a stripped-down reading experience. The focus should be good typography and readability.
I get a lot of consulting work from my blog, so I'm willing to pay for this. In fact, I've been talking to some programmer friends and some of them have offered to pitch in cash to get an actual designer to build this from scratch.
Before I go down that route, though, I'd like to know if I can buy something off the shelf that's suitable for a dev blog. Do you guys know of something? <comment><USER2> My clients mostly liked Avada. It's easy to deal with mainly. Still requires a bunch of CSS hackery to get things setup how you want but that's pretty much just how WordPress is.

I recommend statically generating the site from the WP code and using pure HTML if it's just a straight blog. No worries about the constant WP security holes and terrible performance then :) .

I'm of the clan that believes a website is your office nowadays though, so if your forte is tech consulting I would advise you to do it custom and throw some little personal touches in there.

If you think WordPress will work I highly recommend the managed services Flywheel and WPEngine. They main dealing with the BS parts of WP easier.

</comment><comment><USER3> I recommend going for a theme that doesn't have a ton of bells and whistles that you probably won't end up using. The default WordPress themes are simple and could possibly suit your needs. In particular, check out Twenty Fifteen: [https://wordpress.org/themes/twentyfifteen/](https://wordpress.org/themes/twentyfifteen/).</comment>


Boss takes employees on Caribbean cruise -all 800 of them - <AUTHOR> http://www.cnn.com/2016/12/27/health/company-cruise-trnd/index.html <comment><USER2> I wonder if employees who can't go for some reason - children, ill relatives, previous plans, etc. - get something else to make up for missing the trip.</comment>


Twitter Ads – Impact on Developers and the API - <AUTHOR> http://www.reynoldsftw.com/2010/04/twitter-ads-impact-on-developers-and-the-api/

<comment><USER2> I am primarily a tweet consumer, and I find that my twitter feed already contains too much noise, from 4square check-ins miscellaneous ramblings, etc. I have purged followers for the issue in the past. If Twitter adds advertisements to the mix, and that might be enough for me to look elsewhere for keeping in touch with various people. How quickly will we see the first ad blockers appear in the various twitter clients?</comment>


Seeking a cofounder for a digital entertainment website. - <AUTHOR>

Hey I'm looking for a technical cofounder for a karaoke based site who knows actionscript and either rails/python/php that preferably lives around Pickering in the Greater Toronto Area. If your interested please leave me your email or contact me at firstname.lastname@example.com. <comment><USER2> check out simsonstage.com, formerly singshot.com.</comment>


Thomas Piketty Goes Global - <AUTHOR> https://www.newyorker.com/magazine/2020/03/09/thomas-piketty-goes-global <comment><USER2> This is the same reason we have the following problem in the United States:

(1) Owning a home in the US is a good investment.

(2) Housing in the US is affordable.

Both 1 and 2 cannot be true over the long term, if the price of housing appreciates faster than inflation and wages it is a good investment and if it does that it is no longer affordable because wages have not kept up with the cost of housing.

<comment><USER3> Doesn't housing primarily only need to be a better "investment" than _renting_ , not vs other assets?

Housing-as-investment seems to come in two forms, but I don't think either needs unsustainable growth?

1) you'll have at least _one_ asset going into retirement, or

2) you're going to borrow against the first one to buy another, rent it out, etc, which doesn't need a ton of appreciation in value as you start getting the cumulative income streams

Consider that in many parts of the country housing is still a "good investment" but you don't have coastal-California-level unaffordability.

Housing prices in the most desirable cities are a result of extremely heightened inequality. However, ownership is a path to security and insulation from the whims of the super-wealthy, so undercutting that doesn't seem like a great anti-inequality strategy.

<comment><USER2> Home ownership has created wealth for two independent reasons:

1\. In many markets in the US housing has been a good investment (for a bunch of reasons too long to discuss here).

2\. Owning a home with a mortgage on it forces the owner to "put money in savings" each month as they pay down principal on the loan.

The rent v. own discussion is a complex financial decision. If you buy a house with 20% down you're using 5:1 leverage. Even in historically strong housing markets if you put the same amount of principal into a 5:1 levered SP500 you'd have made much more money buying stocks than you would that home. So if your rent = interest + maintenance and you could afford to invest the same in principal in equities you'd do much better. Now I don't know any investment advisor who would tell a client (and I'm not one at all so take my advice for what it is -- the thoughts of a business person) to go all in on a 5x leveraged equity portfolio.

</comment></comment></comment><comment><USER4> _Over the past century, the rate of return on capital (r) and existing wealth, owned disproportionately by the rich, had exceeded the rate of growth in the economy (g) as a whole._

Piketty's calling out some good things, but by linking r to interest rates, Piketty's telling us we need to lower interest rates to deal with inequality, when in reality lower interest rates just benefit those already wealthy...

<comment><USER5> The whole R vs G doesnt make to much sense to me. Its like comparing speed vs acceleration, and deciding that since speed > acceleration, the bike will move in a sine pattern.

Say we have 2 people who spend all their money every year. $A makes 100K a year. $B has 1M capital. Say the rate of growth is 2%, and that the return on capital is 10%. Year 0, $A makes 100k, $B makes 100k. Year 1, $A makes 102k and $B makes...100K, again.

Even if they both save 50% of income, the worker still "wins", although his performance asymptotically trends towards the other's performance as a greater share of income comes from capital.

Even though the return is 5x greater than growth ( and growth is part of the return), the person who relies on salary (ie not capital return) benefits and the other does not.

Now if $B has 10M, and r=g at 2%, lets recalculate. Year 0 $B makes 200k, $A 100k, then at year 1 $A 102k, $B 200k. But consider, to have the same consumption, $B can save 50% and invest the other 100K. If he did that he would have 102k to spend like $A.

Obviously this is a convoluted scenario, but for me, it seems this example punches a huge logical hole in the r vs g thing. Inequality seems to have more to do with personal savings rate than r>g. And note - its WEALTH inequality that rises, not consumption inequality (in that case, does it even matter?).

I don't really know what to think about this subject anymore.

<comment><USER6> The point of R is that it also compounds, much like G. Imagine that B has $2M instead of $1M but needs to spend only $100k/year. For B:

      first year: $100k spending, $100k extra capital gains, $2.1M total capital
      second year: $102k spending, $108k extra capital gains, $2.208M total capital
      third year: $104k spending, $117k extra capital gains, $2.325M total capital.

And so on.

The real argument against Piketty is that people don't stay rich for long, i.e. they don't really get R, but a crazy volatile version of R. There's a large rotation in the top %. Nassim Taleb is quite vocal on the fact that, in the end, pretty much nobody gets market returns. Most people get below average returns, while very very few outperform a lot.

This is the same reason why stocks should outperform bonds - they're more risky, and you need more capital to take more risk. Therefore not everyone can afford stocks, therefore stocks are cheaper (from a return point of view).

<comment><USER6> Update: I mean stocks are cheaper on the timescales that Piketty uses. It is, obviously, not true that they always outperform within any decade or two.

</comment></comment></comment></comment><comment><USER7> Sal Khan has a good lecture series about Piketty's theory of capital: [https://www.khanacademy.org/economics-finance- domain/macroec...](https://www.khanacademy.org/economics-finance- domain/macroeconomics/macroeconomics-income-inequality/piketty- capital/v/piketty-capital)

</comment><comment><USER8> I'm happy to pay more taxes so people poorer than me can have healthcare. But stuff like this strikes me as monumentally silly:

> They include a schedule of taxation on income and wealth that reaches ninety > per cent and the elimination of nation-states in favor of "a vast > transnational democracy," which will secure "a universal right to education > and a capital endowment, free circulation of people, and de facto virtual > abolition of borders."

I think arguments like these can serve a useful function. Based on their appeal, maybe we'll move in the right direction. But the arguments themselves? A "transnational socialistic union" is a bizarre dream. And dreams can be dangerous when people take them too seriously.

<comment><USER9> Any kind of one-world government would be pathological to the extreme. With no competitors or alternatives where people it treated poorly (or even just people who preferred a different style of governance) could go, it would rapidly become unimaginably tyrannical

<comment><USER10> In my experience people take a dim view that market based competition controls governments more so than any kind of representation or ideology can. They take a dimmer view that people on this planet take advantage of this reality, but they arent really perceiving that this is what those people and corporations are doing. Its definitely a privilege though!

</comment></comment></comment><comment><USER11> I like that Piketty is super aggressive with some of the ideas and I generally support the idea that a baseline is set for everyone that is some kind of equalizer (even though it will never be perfect) that covers income/health/education. However, creating a practical wealth tax seems a bit tricky especially in terms of assessing wealth.

<comment><USER12> >However, creating a practical wealth tax seems a bit tricky especially in terms of assessing wealth.

the radicalXChange people have revitalized a somewhat older idea, _harberger taxation_. The mechanism is relatively straight forward, people self-assess the value of their stuff and pay a periodical tax on it. At any point in time, anyone can force the sale of said commodity.

Point being that if someone sets the price at above market rate, they're reducing allocative efficiency (by exercising monopoly power over their property) so they pay a tax. If goods are exchanged at market rate, then that improves the utilization of the property.

<comment><USER13> I would like this taxation scheme, but that's because it privileges trashing all your assets to the maximum extent you can tolerate. So sure, you can buy my house for 50k. But I've removed all the labels from the circuit box, run spurious wires everywhere, and added some very hazardous electrical traps that will be hell to remove without my notes (which I have conveniently misplaced). I found some lead paint in the shed and just slathered it in every room that would make a good nursery. This house used to have a paved driveway but I don't mind if my car gets dirty so I tore it out. I'm an avid gardener, but I've also down the yard with poisonous flora and whatever else I feel will be hard to remove.

This example is a little contrived, but one could do something similar by just aggressively neglecting one's property.

<comment><USER14> > and added some very hazardous electrical traps that will be hell to remove > without my notes (which I have conveniently misplaced).

I'm pretty sure laying traps like that is illegal, like felony illegal.

</comment></comment></comment></comment><comment><USER15> Piketty's main point is that if the return on capital is greater than the return on labor then over time you will get inequality. But like... what would a world in which that is not true look like? What would it even mean for labor to scale? I've thought about this a bunch and cannot imagine what such a system would look like or how it would work, except for maybe utopian socialism, which basically isn't physical.

What kind of system is he proposing in which capital doesn't create leverage?

<comment><USER16> The world and social structure we grew up in was a world where that wasn't true. This idea that you can start a business and pull yourself up by your own bootstraps - that's made possible by the fact that the return on labor is greater than the return on capital. YC is kinda built on that idea: work hard, get rich.

The other kind of society is one in which the best way to establish a secure place for yourself is to take secure control of some piece of income generating property. Piketty uses Jane Austen's novels to show what these societies look like: marriage and other political arrangements become far more important than how hard working you are. Hard work and toil is generally associated with the poor.

So Piketty's argument is that, while we may believe we are in a pull-yourself- up-by-your-bootstraps society of hard work, the numbers show that we are in fact in a work-your-political-connections-to-establish-control-over- productive-capital society.

So it should be no surprise that HN is a great place to find counterarguments for Piketty's theories. :) But that's his theory, and I believe it's worth keeping an open mind as to whether it's true. If it were, we would see that it's easier to get richer by already being rich or making friends with the rich than it is to get rich by working to build something yourself.

<comment><USER17> Isn't that trivial to refute then by showing the huge portion of millionaires/billionaires that aren't generational?

<comment><USER16> Maybe? If r only exceeded g in the past 20 years or so, though, we would expect that most of the wealthy would have acquired their wealth at a time that g > r.

Point being that wealth is a lagging indicator. If I'm 25, I'm making my way in a different world than the one my grandfather grew up in.

</comment></comment></comment></comment><comment><USER18> Here is an e-book debunking Piketty's ideas

[https://www.cato.org/sites/cato.org/files/pubs/pdf/anti- pike...](https://www.cato.org/sites/cato.org/files/pubs/pdf/anti-piketty.pdf)

<comment><USER19> Pretty unsurprising that the Koch brothers' pet "think tank" would want to fight back against anything questioning extreme inequality and concentration of power.

Before you examine something published by Cato, you can predict its position, and will rarely if ever be surprised by what you read there. The data will be cherry picked or massaged and the argument will be contorted to support the pre-chosen position favorable to the donors funding it.

Cato generally opposes all kinds of taxes and regulations, supports privatization of public institutions and services, opposes a public safety net, opposes campaign finance reform, disputes or downplays global climate change, etc.

<comment><USER18> This is a Level 1 comment in the disagreement hierarchy (aka very poor argument)

[http://www.paulgraham.com/disagree.html](http://www.paulgraham.com/disagree.html)

<comment><USER19> When people affiliated with an institution habitually lie to you (I've tried carefully critically analyzing Cato publications several times before, and every time came away extremely disappointed), it makes sense to at least be very skeptical of their arguments and independently validate all of their evidence.

Personally I would just rather skip reading them in the first place and focus on sources whose intellectual integrity I have some faith in. I have found it saves time and mental energy with little downside.

But feel free to read what you like.</comment></comment></comment></comment>


Darwin Award nominee? 2 would-be copper thieves electrocuted at power substation - <AUTHOR> https://www.freep.com/story/news/local/michigan/detroit/2017/12/29/detroit-public-lighting-bodies/989761001/ <comment><AUTHOR> There are gangs of thieves who strip copper wire from houses and abandoned buildings in Detroit. Pour some gasoline on a pile of wire, light a match and after the fire finishes you're left with pure copper. But so much copper has been looted it's getting hard to find more.

Two years ago the freeways in the city flooded because thieves had broken into the pump stations, turned off the power and taken all the wiring.

But the degree of difficulty is raised if you're breaking into a power substation. This is the second time in 2017 this has happened.</comment>


M. Caffrey: Under Trump I lost my job for refusing to hide climate crisis facts - <AUTHOR> https://www.theguardian.com/commentisfree/2019/jul/25/trump-administration-climate-crisis-denying-scientist <comment><USER2> Not so long ago Trump mocked and disparaged the idea of global warming because it was cold in and around his general bubble. Of course he's not commenting on the current spate of weather events affecting all of North America and most of Europe right now.</comment>


Ask HN: How should I monetize this app? - <AUTHOR>

Hi HN'ers,
I made this app based on the Pomodoro Technique: http://www.beatpoints.com/cherrytomato - it's a timer that helps you concentrate for 25 minutes at a time. It sets your skype and messenger status to busy and afterwards, it shows you what app's and websites you have spent your time on in order to let you rate your own productivity.
People seem to really like it but I am not sure which direction to take it in. If I am going to keep working on it, I need to monetize it somehow. I have the following ideas:
1) charge for the actual app. Doesn't seem like the best idea because it is so small and easily replaceable
2) sell plugins. I have made a firewall plugin that blocks Hacker News etc. when in pomodoro. I can think of a number of different plugins that I could possibly charge for..
3) create a site that stores a history of your productivity. You could compete with your friends etc. I could make some sort of fremium model for this
..others?
I think #3 is the most promising option, but also the most demanding and this is just a hobby project that is not supposed to take up too much of my time :-) <comment><USER4> I think #3 is best, especially if you let users rate individual sessions or integrate with something like Rescue Time: <http://www.rescuetime.com/developers>

There are good options for monetizing a free-version:

1) Show sponsor sites instead of wanted site when visiting Hacker News etc. while in pomodoro

2) Open an interstitial or show adds in some other way when pomodori ends.

<comment><AUTHOR> I think #1 is actually quite a fun idea. However, if people define their own prorstination sites (which they do at this point), they would avoid the ads simply by not defining any sites.

</comment></comment><comment><USER5> I think your 3 option would be the best way to go, thats a great way to add a added payable version for - especially if you could add somekind of analytics to the time spent - in general and perhaps in relationship to other users (lets you see how you rate to others (all/friends), or might come with suggestions how to optimize your productivity). So your local version would save data and show you them there, but the storage of data and analytics would be on the website. Fantastic visualizations of the data will probably be a great way to build fans of the app - allowing a user to very easily understand their productivity level...

This would also allow a company to test it across all its staff, to see how time is used - of course this is a little big brother'ish, but might be a added value option to sell.

-PiP

<comment><AUTHOR> Yeah, while analytics would be great, I think that competing with your friends would work pretty well ("Wow, I am behind with 30 productivity points today - I need to focus!").

<comment><USER5> Analytics would be a differentiator from other such services, being able to give actual advice, would be a great premium service.

A competition among friends is a good idea, but I think without a driver at the end - say a virtual brag award, it doesn't drive the competition. Look at foursquare and their badges - that in itself is a driver for a lot of folks - it would also give the service, in an initial phase where friends might not be present on the service, a better driver (indirectly the badges aim at bettering your productivity).

<comment><AUTHOR> So, maybe there should be an accompanying Facebook app that allows you to show off your historical productivity?

<comment><USER5> Hmmm, I think FB apps are a hard added value sell with the current placement of apps on the FB website, perhaps an option to simply post from the your cherry app (i.e. a FB button) to showcase your productivity - when you want.

My sense is auto posting through an FB app, might be counter productive - <USER2> course it is easier, but doesn't a post demand that you were somehow productive? And how do you keep the frequency up, in order for FB to show that you are "a productive person" - to far between posts, and you are automatically not productive - or are you?.

If you work on the badges concept, that might be a better approach to FB app, simply having the badges post vs. a index number or other "simple" indicators.

Hmmm, will hum a bit over this...

</comment></comment></comment></comment></comment><comment><USER6> 1\. Bundle your app with the ask or yahoo toolbar. People get an option to install those toolbars too while installing your app on their desktops. You get paid per install of those toolbars.

2\. Sell private label rights to the software. Other productivity websites can attach their logos to your app. And give it away for free to their audience.

3\. Sell Corporate accounts. Basic accounts are free. But if a corporate wants to track how productive their employees have been - you make money out of that.

</comment><comment><AUTHOR> Clickable link: <http://www.beatpoints.com/cherrytomato>

If you want to try out the firewall, you can download it here: <http://www.beatpoints.com/cherrytomato/cherryfirewall.zip> \- it only works with Windows Vista or higher, and possibly only on x64. Just unzip the files into the program folder.

</comment><comment><USER7> Go for 1)

Have it also set your email client to not receive messages in that time (or close altogether).

Your app is then a pretty awesome get-some-damn-work-done distraction- eliminator. You could sell to businesses too (perhaps even more successfully) - teach them about the loss of productivity due to distractions - <USER3> from email and instant messaging - and sell them your app as a solution.

<comment><AUTHOR> Well, the firewall is not a browser-plugin, it uses the Windows firewall api, so you could easily block your mail (webmail as well as pop3/imap) and IM services..

<comment><USER7> Well there you go. Make it easy for them though - just a tick-box in settings to block email. And another tick-box to block all network activity (so no web browsing).

I think something like that would be very cool both for individuals and for businesses. It's quite like <http://macfreedom.com/> which is very handy.

I also think you'll find it easier to sell a productivity enhancement to businesses than a procrastination-stopper to individuals.

</comment></comment></comment><comment><USER8> 4) Sell _short_ audio ads that play when the timer goes off.</comment>


WebExtensions in Firefox 45 - <AUTHOR> https://blog.mozilla.org/addons/2015/12/21/webextensions-in-firefox-45-2/ <comment><USER2> We've closed this thread to new accounts because of trolls.

If you have a new account and want to comment here, you're welcome to email us at email@example.com.

</comment><comment><USER3> I understand (and applaud) the mission to make a cross-browser compatible, predictable format for extensions. What I don't understand is why Firefox is apparently introducing some of Chrome's more weird limitations with it as well:

E.g., XUL add-ons were free to add as many toolbar buttons and menu items as necessary; WebExtensions are restricted to a single button.

Likewise, Firefox had a well-functioning way for extensions to access page JS. This is now replaced by Chrome's awkward approach of injecting script elements, sending messages and praying that no collisions occur.

Why that?

<comment><USER4> I believe the injecting script part is to support having the chrome and the content in different processes.

I'm sad that, on the UI modification front, the new system doesn't seem nearly as powerful as XUL overlays. I worry that when Servo comes into production use, all that extensibility will be dropped (with Chrome not having it as the justification) and we'll be left without a highly customizable mainstream browser.

</comment></comment><comment><USER5> Does anyone know if more complex extensions such as Tab Mix Plus or Tree Style Tabs will be supported?

<comment><USER6> They want to add hooks for it, noting Opera already has a sidebar API. [https://wiki.mozilla.org/WebExtensions/Future](https://wiki.mozilla.org/WebExtensions/Future)

I've seen similar sentiments echoed by Mozilla devs in a reddit AMA a few weeks ago.

<comment><USER7> Sadly, they won't add nearly enough APIs, they already announced that most of the UI won't be customizable.

I'd have preferred a full UI customization like in Vivaldi.

<comment><USER8> That's disappointing. Do you have a reference for this? I'm curious if there were any details in the announcement.

</comment></comment></comment></comment><comment><USER9> This is great news! Especially the part where Web Extensions are going work in Chrome without any changes!

<comment><USER10> With minimal changes, I think. IIRC Firefox has a slightly different packaging format.

</comment></comment><comment><USER11> I understand, and even agree with, a lot of the goals behind the WebExtensions API. I'm honestly still worried firefox isn't going to encourage plugins like pterosaur, pentadactyl, etc.. going forward.

Will modifying the UI and the DOM essentially be verboten?

<comment><USER12> I think Mozilla is highly aware of the importance of the extension ecosystem. They don't want to alienate people

[https://billmccloskey.wordpress.com/2015/08/21/firefox- add-o...](https://billmccloskey.wordpress.com/2015/08/21/firefox-add-on- changes/)

[https://wiki.mozilla.org/WebExtensions/FAQ#Which_add- ons_wil...](https://wiki.mozilla.org/WebExtensions/FAQ#Which_add- ons_will_stop_working_when_XUL.2FXPCOM_is_deprecated.3F)

There are also proposals for ensuring that innovation can still be driven by extension developers:

[https://discourse.mozilla-community.org/t/proposal-native- js...](https://discourse.mozilla-community.org/t/proposal-native-js-to- embrace-extend-the-webextensions-api/3457)

<comment><USER11> Native.js is interesting. I would wonder how it plans to handle things like callbacks for various events though. As an example, a keypress in a textbox (e.g. pterosaur). I haven't looked at the WebExtensions API in detail yet, so it may already be a solved problem.

More specifically, editing text seems oddly neglected, which is disappointing considering webmail, blogs, social media, stack overflow, etc... I'm glad noscript is being given special consideration.

</comment></comment></comment><comment><USER10> Alongside the XUL migration, the move to requiring extension signatures has provoked controversy.

I wonder, though. Since WebExtensions have fine-grained permissions, perhaps you could permit unsigned extensions which don't do potentially nefarious things?

</comment><comment><USER13> Is it possible to write a DownThemAll!-like extension?

I'm still a bit confused on why I should continue to use Firefox when all the features of extensions are stripped to be compatible with Chrome. What am I missing?

<comment><USER10> Unless I'm missing something, you could probably write DownThemAll as a bookmarklet. All it does is scan a page for links and download them.

<comment><USER13> It does do a tad more than that as it has filters and works on links and embedded images with pause and resume.

<comment><USER14> Yep. Also the ability to rename the downloaded files according to a pattern.

</comment></comment></comment></comment><comment><USER15> This gives me so much hope that we might begin to grow better mobile user- agents.

I know FF has had extensions ongoingly, but this really feels like it can challenge mobile Chrome's unmoving rejection of extensions.

</comment><comment><USER16> Not too relevant, but Firefox has gotten significantly slower in my computer in the past few versions, to the point that I will most likely switch to Chrome again. I barely have any extensions and it's never been slower than what I have now.

<comment><USER17> I've felt the same, especially with the developer tools, but I started using Firefox developer edition, and it seems much, much faster, so I'm sure improvements are coming.

<comment><USER16> Thank you for the tip. I installed it and it does indeed seem faster. I suppose the plugin compatibility is not too bad. EDIT: Seemms like my lovely vimperator doesn't work too well.

</comment></comment></comment><comment><USER18> So WebExtensions is Mozilla's name for a subset of the Chrome Extension API they'll be implementing?

It's really weird to see a project named WebThing that doesn't seem to exist outside of a particular vendor's blog/wiki. I'd expect to find a public mailing list/GitHub repo/landing page without much searching. They don't even own webextensions.org.

</comment><comment><USER19> Please, for all that is sacred, keep collaborating in an unified standard for all major browsers.

As a developer who has to build extensions for all major browsers I'd appreciate the effort.

</comment><comment><USER20> I worked closely with Mozilla during the first few years of Firefox.

It's only the same in name and logo these days.

The hard truth is internal and external politics in the organization were so toxic senior-level programmers who were more risk averse were pushed out.

Imagine taking C++ pros who advised in the creation of W3C/IEEE/etc drafts, and tossing them out in favor of node.js programmers.

The gray hairs were betrayed in favor of node hipsters. Whatever happened to respecting those _who made you_.

This hits hard. The truth is Mozilla's days of glory are numbered.

Over the coming years the decline will come to eventually wrestle Firefox out of Mozilla's hands and into a normal open source project.

Was all this office backstabbing worth it?

This is what happens when you lose the hacker ethic. It's disappointing.

<comment><USER21> That was over a decade ago, things change.

Firefox is more relevant now than it was before, I welcome their efforts to change with the times.

They are taking massive risks now, simultaneously developing an entirely new programming language (Rust) and building an entirely new browser engine on it (Servo) is ambitious. It is clearly self-evident that it has paid off.

There is nothing wrong with node.js programmers, your implication that they're inferior is a broad-sweeping and baseless generalization.

The grey hairs are most certainly still around, and they're most definitely well-respected. Rust's C++ roots is evidence of this.

Mozilla is flourishing, that cannot be denied.

Firefox is a normal open source project, Mozilla receive's contributions from around the globe.

The hacker ethic isn't gone, it matured into something better.

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

<comment><USER22> Real question, how is Mozilla flourishing when its main product, Firefox, has been declining in market share for years?

<comment><USER23> \- Thunderbird: Dropped.

\- FirefoxOS : Dropped.

\- Servo: How many years do they need to build a new browser with the experience they already have?

\- Rust: I don't expect the world to rush to this language.

\- Finally, Mozilla is just Firefox now and they are aimed to privacy at all cost, that will cut their sources of revenues, of course.

<comment><USER24> Servo is not a new browser.

And nobody has "rushed" to any language introduced in the last decade. The "conquer the world" mentality introduced by Java is over. The big programming language success stories—Scala, node.js, Go, etc.—have all flourished with devoted communities using the languages in the niches they're strongest in. That's what Rust is aiming for, and the resulting community has been amazing so far.

<comment><USER25> Hi pcwalton, I just wish Servo had clearer goals. In some ways the recent faster-browser initiates have all come out empty in my opinion, as they have nothing to truly show the for the work.

Flexbox is a great example. We were told the problems with DOM updates was caused by the old layouts and things like floats. So Flexbox was supposed to fix those problems. Where's the proof?

I find myself frustrated that now 8 years after the iPhone the web is still incapable of so many things. I wish the browser community would make some _very specific_ goals and say "we'll do whatever it takes to reach these".

Here's a very simple goal: A swipeable sidebar. Here's the requirements:

* It must retain 60fps no matter how fast you swipe.

* It must be easy to create; a virtual-dom shouldn't be a requirement to make up for slow dom updates. A elaborate library that correctly times everything shouldn't be necessary.

That's it. Make that happen. Do whatever it takes. Create another new layout if necessary. Create a new touch spec that's faster, if necessary. Whatever. it. takes. And then when the work is done you can point to this new widget and say that the initiative paid off.

<comment><USER24> > Hi pcwalton, I just wish Servo had clearer goals.

What is not clear about "parallelize all parts of the pipeline", "get rendering GPU bound", and "write a memory safe browser"?

> Flexbox is a great example. We were told the problems with DOM updates was > caused by the old layouts and things like floats.

Nobody said that.

> So Flexbox was supposed to fix those problems.

No, it wasn't.

> I find myself frustrated that now 8 years after the iPhone the web is still > incapable of so many things.

Me too.

> Here's a very simple goal: A swipeable sidebar.

You can do it already at 60 FPS. Make an overflow:scroll div and allow the user to scroll it into view. Or even just do it manually with the DOM. It will easily be 60 FPS in existing engines _if you animate transforms_.

> That's it. Make that happen. Do whatever it takes. Create another new layout > if necessary. Create a new touch spec that's faster, if necessary. Whatever. > it. takes. And then when the work is done you can point to this new widget > and say that the initiative paid off.

There's nothing to do here, as you've described it.

But your comment is actually illustrative of the real problem (at least, what I think it is). We have a ton of ways to do things on the Web. Some of them are fast, and some of them are not. Web developers don't realize what the fast paths are (which is not entirely their fault). I think that all of the paths should be fast, and I think that many of Servo's technologies (such as WebRender) go a long way toward making that happen.

What's frustrating is comments like yours that describe things that the Web can clearly already do and blame browsers for supposedly being unable to do simple things. I used to think the way you did—that the Web is incapable of rendering a 60 FPS scrollable view—and then quickly discovered that, if optimized properly, there is actually no problem. What I think the problem with Web slowness is that Web authors don't know what the fast paths are, and they use things like jQuery.animate() that hit all the slow paths. That is a problem that I think we are well equipped to solve in Servo due to things like parallel style recalculation, off main thread layout, and WebRender, but it's a lot more nuanced than what you describe.

<comment><USER25> > What's frustrating is comments like yours that describe things that the Web > can clearly already do and blame browsers for supposedly being unable to do > simple things. I used to think the way you did—that the Web is incapable of > rendering a 60 FPS scrollable view—and then quickly discovered that, if > optimized properly, there is actually no problem.

I think you misunderstood the widget I'm describing. It is _swipeable_ meaning I swipe to pull the sidebar into view and swipe to push it out of view. If I stop half way the sidebar stops where my finger stops.

Meaning the sidebar has to follow my finger, at 60fps, as I quickly swipe in and out. If such a thing is as easy you claim then a quick demo should be easy enough. I know of no such sidebars on the web that fit this requirement, but am happy to hear all of those devs (and myself!) are just terrible at their (my) jobs.

<comment><USER26> Does this suffice? [http://www.jqueryscript.net/demo/Responsive-Fluid-Sidebar- Pl...](http://www.jqueryscript.net/demo/Responsive-Fluid-Sidebar-Plugin-with- jQuery-Hammer-js/)

You need to use a Smartphone for the Demo above though (i.e. sth. that can produces touches and has a small enough screen), but it was the first thing I found by googling "hammerjs sidebar".

I'm sure that if you look at a few demos from hammer.js (which is a very - maybe the most - popular touch library) you'll understand why everything you always wanted has already been solved years ago - just not in a very easy way.

But it seems that didn't stop the world from writing libraries that make swiping, panning, and fluid 60fps easy to achieve. Just like with any other language, framework, etc. you just need to learn it well enough...

<comment><USER3> > Does this suffice?

The example is broken in Chrome 47 on Android 6.0.1: Once I touch the menu putton, the sidebar immediately extends fully. Then i need to swipe right-to- left multiple times to retract it again.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> Still stuck on 41.0.2

Guess they are never going to fix gdocument.

And then there is the matter of allowing private/local extensions.

Might have to take another look at Pale Moon or Waterfox

<comment><USER28> "What makes Waterfox so fast? It's built with Intel's C++ compiler. One of the most powerful compilers out there. This enables us to make the fastest possible web browser for all the code changes we make. This potent combination makes for an unparalleled browsing experience."

So basically a build of firefox with a different compiler with binaries available for only mac and windows.

For extra fun its based on an older version of firefox and there is no reason to believe it has devs backporting fixes from higher versions nor that there is anybody with the chops to build anything useful on top of it meaning it

\- Is virtually guaranteed to have security vulnerabilities and bugs that have already been fixed elsewhere

\- It will either end up with the same flaws you don't like about firefox or alternatively it will be forever stuck at an old version while the bad guys find more and more exploits.</comment></comment>


AirSim – Open source simulator based on Unreal Engine for autonomous vehicles - <AUTHOR> https://github.com/Microsoft/AirSim#how-to-get-it <comment><AUTHOR> It's a repost, but it now has prebuild binaries ( which makes it a lot easier to use)</comment>


Ask HN: Should I learn C? - <AUTHOR> I'm a recent high school grad going into college as a comp sci major. I have 2 years experience in Python and JS.
Would it be worth my time to learn C (C++ possibly?)? (Or maybe you have another language that would be more profitable now.) I'm aware I will have to learn at least C for college, but is it something I should learn now?
I'm looking for your opinion because a lot of you have either gone through a comp sci degree or have done some programming in C.
Thanks HN! <comment><USER2> Yes, you should learn C. And enough assembly language to understand aspects of how C works, like what a "stack frame" is.

Now is a great time to start. Go find K&R, fire up Linux and write and compile "hello, world". Then keep going until you experience your first segmentation fault. ;)

(Do _not_ study C++ at this point. Study C. These things turn out to be very very different.)

<comment><USER3> At my university we have a course that goes over all the levels of abstraction between the hardware and systems-level UNIX programming. I never took the class, but I followed the course book on my own and it proved to be one of the most enlightening self-learning experiences I've had with programming. The book is Computer Systems: A Programmer's Perspective, and I highly recommend it.

I've found that even though I now spend most of my time programming in higher level languages, my understanding of C and assembly, compilers and debuggers, the virtual memory model and system memory hierarchy, and CPU architecture are still very valuable in helping me reason about my code and how it interacts with the rest of the system. I also still have developers at work on the C development team occasionally come ask me code questions, and often the answers to their questions come down to understanding one of the above better. If you can master multiple levels of abstraction you will be a much more effective developer.

<comment><USER4> ISBN for anyone interested: 978-0130340740

</comment></comment></comment><comment><USER5> Absolutely, yes.

\+ From the point of view of Python or Java (say), it's close enough to assembly language to let you understand how things might work;

\+ If you _need_ speed or control over hardware, sometimes it's your best route to extend whatever you're working in;

\+ In many jobs you'll be the only one who has the knowledge to do unusual things, hence you'll be more valuable;

\+ It gives you another point of view when designing systems;

\+ You say you'll need it for college - learn it now;

\+ A spread of languages is critical if you want to master programming.

You can carve out a perfectly good programming career without knowing C, but it's always of benefit and value to get a wide range of skills. Some recommend:

\+ Pure OOP: perhaps smalltalk or Self

\+ Pure Functional: perhaps Haskell (non-strict) or ML (strict)

\+ Pure Imperative: perhaps C

\+ Pure Logic: perhaps Prolog

Other hybrid languages are useful and perhaps more productive, but it's the ideas that really matter while you're still learning.

<comment><USER6> I'm not sure about aiming for "pure" languages. Lisp is functional enough that one can learn pure functional programming using it, if he tries. And Ruby is OO enough that one isn't missing much, isn't it?

Nothing wrong with the pure languages as options, just I think impure languages can fit the categories too.

<comment><USER7> I would recommend Ruby, too. Even though I don't write large programs or webapps in Ruby, I use it to write the occasional script to glue different things together.

I think that there's probably more (practical) benefit to be had with Ruby than Smalltalk or Self.

</comment></comment></comment><comment><USER8> A lot of people take the route of not learning C. If you do web development and your team finds something hard or impossible to do, watch their reaction when you say "I'll just write a C extension."

The stack-frame comment is spot-freaking-on. Knowing this level of detail will make you a way better programmer in every other language because you won't make stupid memory hogging decisions or mistakes. You also understand the complexity of doing things one way and the tradeoffs of another.

I best learnt C by re-writing large portions of the Pintos operating system. It's an academic OS and will be interesting to look at the source. Systems programming is where C packs the most punch, but all of those concepts can be re-applied in user land for some amazing effects.

<comment><USER9> I'd never heard of Pintos before. This looks like something I'd really enjoy working on, thanks for bringing it up.

<comment><USER10> <http://www.jamesmolloy.co.uk/tutorial_html/index.html>

</comment></comment></comment><comment><USER10> I, like many here, would strongly recommend learning C. I don't know if I'd call it "profitable" to do so at the moment, assuming you mean profitable in the money sense.

C is a good language to learn, and a lot of interesting, well-paying jobs use C, and a lot of interesting open-source projects use C -- but if you just want to make steady cash, you can do so much easier with Java or PHP.

That said, if you go about your programming self-education correctly, you won't have a problem using Java or PHP (well, you won't have a problem in the sense that it won't be difficult for you to design programs in those languages).

It's good to have a handle on how the architecture of your machine works. C gets you much closer to that, and you will learn about a lot of things that are hidden from you in HLLs like Python, but that are still relevant to non- trivial programs.

So yeah. Learn C if you're passionate about comp-sci, or software engineering. If you're learning programming only for a career, it may not be as beneficial for you. Learning C before college is definitely a good thing.

Also, if you learn C, the last chapter of SICP is much easier to do, and you should go through SICP at some point ;)

Don't touch C++ until you need to touch C++. You'll know when that time is, if ever.

<comment><AUTHOR> _I don't know if I'd call it "profitable" to do so at the moment, assuming you mean profitable in the money sense._

I was meaning the in overall sense; "profitable" as in good for me. Sorry for the misunderstanding.

<comment><USER10> Ahh, in that case learning C is a veritable goldmine!

Edit: Also, if you use linux and end up going down the rabbit hole a bit, C is a prerequisite.

<comment><USER11> Being good at C can be very profitable in a money sense of the word too. Bloomberg is one example that hires a lot of C hackers and pays them obscure amounts of money (very very long hours though)

<comment><USER12> Obscure amounts of money?

<comment><USER13> malapropism... think he meant 'obscene'.

</comment></comment></comment></comment></comment></comment><comment><USER14> You should absolutely learn C - you don't need to be an expert, but you should fully grasp the use of pointers and memory allocation, and how the compiler really works (intermediate stages and all that).

This, for the same reason you should learn some provisional level of assembler on an older 8 or 16 bit processor with a simple instruction set (intel 8080 or 8086, and then maybe something RISC just for kicks). You don't need to be an expert, just dabble enough that you "get" how it works.

Also learn how to implemenet a few other progrmaming patterns in C - you can do OO in C, you can do functional in C, you can do concurrent in C. You likely won't have to in real life, but understanding those concepts at the level of C will really help you understand the benefits of higher level languages.

I'd say the same for any of the Lisps - learn one, even if you'll never use it - the insights it gives you are worth it and will make your other code better.

<comment><USER15> I wouldn't recommend learning assembly on the 8080 or 8086. These systems are register-poor, which makes programming on them frustrating. Instead, try ARM or perhaps MIPS. If you learn ARM, you'll probably end up programming at a higher level on it in the future.

On second thought, learn assembly language for a platform you can run it on. If you only have x86, learn 8086.

</comment></comment><comment><USER16> You won't learn anything unless you need it, and it depends on your interests whether you need C in your programmings.

Other than that, I can't speak for anyone but myself.

For me, C has taught me so much since I was 14 that I couldn't possibly be where I am if I hadn't spent years writing C and I couldn't possibly recommend anyone not to learn it. But it's a different world for everyone and I can't say it's a bad thing if you don't know C. It would be a bad thing in my line of business but not everyone does the same things I do.

One thing about C is that it's a nice forced marriage with the von Neumann machines we're using these days. If you really want to know C, you really want to know the current hardware architecture as well. It will change but it won't do that at least in the next couple of decades.

On the other hand, mastering high-level languages first and dropping down when necessary might be a wise choice, if you only know you can do it. Like I said, architectures and paradigms will change in the future, and higher-level languages can embody abstractions that are very hard if impossible to contain in a von Neumann machine and it is the revolution of some new architecture when C will eventually be obsoleted.

<comment><USER17> An irony is that von Neumann architecture - specifically, code and data in the same memory space - is not modeled by the C language in its most distinguishing sense, and would arguably be better modeled by a language with first class functions. First class functions - the notion of creating new code, and passing it around as if it were data - capture this essence, that the data and code lie in the same memory space, and that both are potentially mutable.

</comment></comment><comment><USER18> I would suggest Python and C, in that order. Python will let you quickly have fun building large applications, and it will teach you object oriented programming. Once you know what a loop is, though, go by "Advanced Programming in the Unix Environment" and a decent C book and trip out on that for a year or so to really understand how computers work.

I don't write C for a living at all, but it is great to know how everything is working under the hood, and APUE will teach you that.

To be honest, I wouldn't bother with Java. I think in ten years Java will look like Ada does now: we will all be asking ourselves "What were we thinking?"

I also wouldn't bother working on anything but Unix, but that is just bias...

<comment><USER19> I just checked Amazon for that book and it looks like you can get used copies of the first edition for under a buck.

[http://www.amazon.com/gp/offer- listing/0201563177/ref=dp_olp...](http://www.amazon.com/gp/offer- listing/0201563177/ref=dp_olp_used?ie=UTF8&condition=used)

<comment><USER20> True, but the Unix world has changed quite a bit since then...there was this thing called "Linux", maybe you've heard of it?

1st ed. APUE won't cover e.g. epoll/kqueue at all. Get the 2nd. _Fantastic_ book, though.

</comment></comment></comment><comment><USER21> You should learn C and Java. These languages seem to be the most commonly used in college classes right now, and if you are already fluent in them, you can focus on the actual lessons much more easily, rather than wasting time with the nuances of the programming languages.

Of course, it will also help if you start working on the following things, as they will show up in your classes. Don't worry if you don't understand it all right away, that's why you're going to college, right? :)

\- How to debug (go read the book by Agans if you haven't already. It's short and fun to read.)

\- How to do base conversions (eg. how do you convert decimal numbers to binary? decimal to hexadecimal?)

\- How to work with sets (If you know how to work with list comprehensions or the set objects in python, or have played with SQL, that's quite handy)

\- How to write a proof. (Here are some handy words to google for: "modus ponens", "modus tolens", "propositional logic", "truth table", "logical fallacies" and, once you get a feel for propositional logic, go look for "first order logic".)

\- How a computer works at the level of logic gates. (Go play with the java applet "xLogicCircuits": <http://math.hws.edu/TMCM/java/xLogicCircuits/> and see if you can figure out how to design a CPU. It can be pretty fun, although the applet's a little clunky.)

\- What state machines are, and how they relate to regular expressions.

\- While you're learning C, go look at assembly languages and see if you can understand the relation between C and assembly, and also between assembly and logic circuits.

\- How to study and manage your time (Yeah, I'm still working on that one myself...) :)

</comment><comment><USER22> Even though C is used more and more rarely outside of systems programming, I definitely recommend learning it. Learning about pointer arithmetic, memory management, etc... will give you a depth of understanding in other programming languages that other students will be sorely lacking the first few years of college. Other than a little OS-hacking on the side, I've never used it for a project, but understanding how C works has helped me debug much more effectively in several other languages.

<comment><USER23> It's also very useful for extending other languages by binding a library.

<comment><USER24> agreed ... since you seem to be proficient in Python, one potential exercise is to write a C extension to the Python interpreter or C library modules for high performance

<comment><USER25> This also has the extended benefit of learning more about how Python is implemented, which always helps!

</comment></comment></comment></comment><comment><USER26> I really only have experience with web development with Rails and in PHP. I also have done a little Java at school. I am considering diving into iPhone development and learning Objective C. Would I get at least some of the benefits of learning C that you all have described in this thread from Objective C? From what I understand you even have to learn some raw C to work with Objective C.

<comment><USER2> The answer is "yes, some". You will have to deal with pointers and memory allocation, though I believe the newest ObjC runtime has a garbage collector so your exposure might be limited... if you're lucky. ;) And you'll get a general exposure to C syntax, the compilation cycle, et cetera.

From a strictly pedagogic perspective, it would also be good to spend some time studying vanilla C and the POSIX APIs. When we say the phrase "learning C" in a thread like this one, we tend to actually mean "learning to work at a lower level of abstraction, closer to the OS, to assembly language, or even to the hardware itself". And I believe that most of iPhone development consists of telling Cocoa to do things, and Cocoa is presumably not a very low level API -- thank god.

However, any C is better than no C, and iPhone development is fun and useful, so if it inspires you, go for it.

</comment></comment><comment><USER27> My answer to the question "Should I learn <programming language x>?" is almost always "yes". Even if you never need to use it, it's always good to have a different way of looking at things.

One thing you might want to look at is cython[1]. It allows you to write C extensions in a Python-like language. Could be useful as a "bridge".

[1] <http://cython.org/>

</comment><comment><USER28> Yes! Learn C!! But learn it with a view towards using it to _inform your use of other languages_. The low-level aspects (pointers, memory management, working with .DLL or object libraries) are things that most languages, however fluent or high-level, use under the hood.

Spolsky and Atwood argued this out in Stackoverflow Podcast #2. <http://blog.stackoverflow.com/2008/04/podcast-2/>

Just get a comfort level with it (C), and move on. It will pay dividends.

</comment><comment><USER29> I've only had a few months of experience with Python, but I had no trouble learning C (it only takes a week or two to get used to the syntax). I'm pasting this from my reply in a Reddit thread:

If you're going to read K&R, make sure you visit the Errata page. There are a bunch of examples that have typos (some of them are not on the Errata page though).

But reading one C book isn't going to teach you everything about C. A lot of the C code out there makes heavy use of macros and multiple pointer indirections, which isn't covered in much detail in K&R. And if you're interested in the newer C99 standard, The C Primer is a great book (but it's quite thorough, which imo, is a good thing).

If you're going to try out the examples from K&R, pass these arguments to gcc: -ansi -pedantic -Wall -Wextra -g

The -g flag is for debugging symbols. I think I still have most of the fixed examples from K&R that will compile, if you're interested in these. Also, make sure to bookmark these two links:

<http://www.eskimo.com/~scs/cclass/krnotes/top.html>

<http://users.powernet.co.uk/eton/kandr2/>

The first one gives you some better explanations of what has been said in the K&R book (divided by chapters). The second one has most answers to the exercises in the book.

</comment><comment><USER30> NO to C++! If you want to learn something that is object-oriented, go for Ruby... Much more accessible than C++, and also in demand.

As for C, yes, you should learn C. In several industry segments (such as embedded systems), you cannot even get an interview if you do not know C.

A nice way to do something in C is to write a text editor using ncurses for the GUI. This was something I did in my second year as a Comp Sci major in school, and it was a great experience (with a friend).

</comment><comment><USER31> Theoretical aspects:

I assume that you want to be a good hacker. A good hacker has a healthy mix of knowledge that will allow him to start work quickly on almost anything. Without a solid grounding in C, (and a perspective of JS and Python), there are a whole class of things that you won't be comfortable working with unless you have some lower level experience.

With your current knowledge, how easy would it be for you to start hacking on an IP stack? Not that you would ever need to, but with a good knowledge of C such a thing becomes natural to you. All of those RFCs begin to make much more sense.

Another big benefit to C is how simple it is. You begin to see how possible it would be to create a simple C compiler, and this is a good spot for this intuition. It has a simple syntax, is somewhat feature-poor, and is very close to the hardware.

Plus, you'd be able to hack on CPython if you want ;)

Practical aspects:

Your knowledge seems to say that you are headed for web development, which I applaud, because all things exciting are happening on the web.

Web development is changing. It used to be that web developers were laughed at, considered to be inferior to other programmers. It has been a few years since I've seen that opinion, and I think it has been thoroughly shown to be wrong.

Web development has become, essentially, a two part system where the pretty web front end sits as an interface to a super hardcore back end. Web companies now face scaling issues that are relatively new to web development. While you may never program in C, having a strong foundation on what the underlying issues are.

Either way you look at it, learn C is to get a better understanding of technology. It will certainly do that for you very well.

</comment><comment><USER32> I think you should learn C only if you will be able to learn enough of it to be very comfortable with it when you get to college. If you learn that much, you can place out of the courses where you learn C. However, if you learn only part of C and still have to take the course, you will have to suffer through many lessons teaching you what you already know. I say this from experience – I learned Java in high school and was taught C++ in college (just finished my freshman year), and about half the lessons were about stuff I already know, like the difference between a value and a reference/pointer to that value, and what an object is, and how while loops work, and other exceedingly boring stuff like that. So if you can't learn C quickly enough to place out, save yourself the trouble and just learn it in the university courses, so that the courses will be interesting, because they are teaching you something new.

</comment><comment><USER33> Absolutely! By learning to deal with pointer manipulation and memory allocation, you can learn what it is, why it is necessary and how to recognize when it is broken. One of the problems with garbage collection is that it suffers from a memory management problem at a higher level of abstraction. There was an entry in an autonomous vehicle competition a few years ago that stalled. Physical objects in the environment were represented internally as objects in the code. When the vehicle passed them, they were moved to a collection of objects that had already been identified but were out of the field of view. That collection grew unbounded even with garbage collection because every one of those objects was still referenced.

</comment><comment><USER34> Yes. You won't really know python or javascript until you learn C. You may gain some empirical knowledge about how various parts of those languages operate, but without knowing C, you won't understand the "why". If you understand the "why", you'll occasionally be able to intuitively see solutions that would never have occurred to you otherwise. Those are the sorts of key problems that can make all the difference in the success of the project and of your career.

Any language you learn will make learning additional languages easier and faster. But, the boost you get from learning C is arguably greater than for other languages. It's also the single most powerful backup language you can know.

</comment><comment><USER35> Here's where C is taking you.

After you understand pointers and structs and have futzed around in the Unix command line for a while, you probably have enough to go on to something like Linux Programming by Example. This book walks through GNU implementations of Unix utilities and the system calls that make them possible.

You don't just want to run ls, you want to know enough that you can write ls by yourself. You want to learn how to manipulate the operating system with it. You will learn a mental model for how operating systems work in a deep, detailed way, which will serve you well no matter where you go.

<comment><USER36> Definitely, and keep W. Richard Steven's 'Advanced Programming in the UNIX Environment' close by.

</comment></comment><comment><USER37> Yes you should! It's also important to know how basic data structures work(you will learn it in college). I studied before college on a good book of data structures in C which introduce from the basics(like binary numbers and so on) that let you learn C and also improve a lot in algorithms. The book name is "data structures using C". Here is the amazon link:

[http://www.amazon.com/Data-Structures-Using-Aaron- Tenenbaum/...](http://www.amazon.com/Data-Structures-Using-Aaron- Tenenbaum/dp/0131997467)

Have much success in your degree!

</comment><comment><USER38> Since everybody in here more or less agree, I will allow myself to counter just a little bit.

There is no doubt that C programming is a very good skill and if you see yourself programming a lot in the future, it is more or less a no-brainer. BUT it is still a trade-off. It will cost you time and this is time that you could have spent having fun, making money or learning some other skill instead. You could ask people in any field if X-basic-skill in their field is worth studying, and you would get similar answers.

But yeah, you should learn C :-)

</comment><comment><USER39> While you're at it you might want to pick up a copy of "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold. One of the most compelling and well written books on the subject I've read. Reading this along side learning C and Assembly language will make it all "click".

[http://www.amazon.com/Code-Language-Computer-Hardware- Softwa...](http://www.amazon.com/Code-Language-Computer-Hardware- Software/dp/0735611319/ref=sr_1_1?s=books&ie=UTF8&qid=1279416939&sr=1-1)

</comment><comment><USER40> Absolutely yes.

There's no downside in learning C, and there's not much fluff in the language core to complicate things, or slow things down.

I'd suggest you get a copy of K&R: The C Programming Language and just work through the text and examples. You might also want to pick an existing C-based project and work on bugs in it, maintenance programming being one of the best ways to get to grips with using the key tools, gcc and gdb.

This way you'll get a feel for the language, and also for what you'll need to debug and fix code.

<comment><USER41> One downside to learning C is that you will have to resist the temptation to use C on projects where much safer and more productive languages are feasible. Being _able_ to use it speaks well of you, but _actually_ using it is rarely a good decision these days.

<comment><USER40> I get your point, but there's a lot of pretty solid apps running just fine on iOS that are primarily written in (objective-)C.

</comment></comment></comment><comment><USER42> Yes learn it, you should also learn at least one language per paradigm, it will give you a wider perspective on programming and a flexible mind. IMHO one should learn at least: Haskell(or something ML based like OCaML or F#), C++(regardless of what anyone says it will be an useful insight), Java or C#(also check D if you want), something Lisp based(Scheme is small and simple), perhaps some Prolog, Erland and Ada.

Oh and see something of Forth if you like the looks of it and some assembly.

</comment><comment><USER43> It's better if you dont ask!

I don't believe that Linus ever asked (someone else) if he should learn C. Or that Damien Katz (couchdb creator) ever asked if he should learn Erlang. Or if Brad Fitzpatrick (Livejournal & Danga) ever asked if he should learn Perl!

Just learn what you (from looking around) believe will make you a better or smarter, what is even more important use what you learn. Don't just learn to learn!

<comment><AUTHOR> "A penny saved is a penny earned." Just as a minute saved is a minute gained. I asked to save myself time. Hindsight is 20/20, and a whole lot of people on here have hindsight.

</comment></comment><comment><USER44> I don't know what college you're going to, but you probably won't be able to graduate without taking some sort of course in C. If for some reason your Comp Sci major leaves it out, do Stanford's CS107 course: [http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2b...](http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee)

</comment><comment><USER45> There is no wasted knowledge, C is a primitive language, but could teach you things that many other languages cannot.

Consider proper memory management, et al. There are other languages that implement similar features that C does, but ANSI C is a macro-assembler in the truest sense of the word.

Pick up a copy of "The C Programming Language, by Kernighan and Ritchie" and do the exercises.

Good luck.

</comment><comment><USER46> No, if you want it to be "more profitable" just spend your time learning marketing(what the people that uses the software need) or how money works.

If you want to understand how computers work, of course you will need to know assembler and c. This will give you the option to do things that other people can't.

If you want short term profit, you should choose other options.

</comment><comment><USER47> Personally I'd say the answer to any question that starts with "Should I learn..." is almost _always_ __yes __.

</comment><comment><USER48> C is lingua franca of programming languages. Even if you don't find yourself programming with it, it will still be useful.

</comment><comment><USER49> No, you should learn Java instead. The leap from Python to C would be atrocious, but the leap from Python to Java would be feasible. (And if, after feeling comfortable with Java, the leap from Java to C becomes reasonable too).

You'd want to learn C to get a feeling for how the computer works at the core, but more important than that you should be seeking a rock-solid foundation in proper coding methods and structures that has potential off-branches into your courses and your career.

From Java, you could pursue Android development or even Objective-C for iOS development. From C, that transition would be frustrating to say the least.

(Other points behind pursuing Java is you'd find it quicker to start testing on your local box without needing to seek help, it'd give you great insight into what an IDE is and why it is your best friend, and there are more community projects surrounding Java than C that you could start to participate in when you're ready.)

In the end, any language you want to learn would be a good language to learn (even Fortran), but you should go after a language that you can go from 0-to- novice on your own in a short time where you'll end having built a nice repertoire, and I think Java would best suit that need for you.

</comment><comment><USER50> Yes, learn C. I've tried to avoid it for years, but it's actually a beautiful and simple language. It's very powerful and low-level, which means that it's easy to create ugly programs, but that's another problem.

If you ever have to do low-level programming or Mac/iOS development it will definitely be of great use.

</comment><comment><USER51> C yes, C++ no.

Make sure you're using a _C_ compiler, not a C++ compiler

Here is why not C++: <http://news.ycombinator.com/item?id=1463592> and why not java

Edit: Was there something wrong with my comment? Or were you downvoting merely because you disagree?

<comment><USER42> Those are not reason on not to use C++, but reason on why some people shouldn't be using C++ in the first place. Yes you can do it in python unless you want speed, if I am to interface my python code with C or C++ why can't I write them in C++ in the first place? Also if I were to interface any scripting language code with C I would probably go with Lua.

<comment><USER51> I'd say "It doesn't work well in most shops" is a damn good reason to not use something.

In general, very little of the program needs to be written in C to get great performance gains.

Additionally, python is vastly different from LUA. Lua is still a scripting language, ruby and python have moved past that.

For someone at age 18 or so, I'd say C is a much much better level of complexity to be tackling that C++

</comment></comment></comment><comment><USER52> You're going to be learning C and / or Java in your first year so, you're just getting a bit of a leg up. If you have a strong preference for Java go for it first, but, I'll say uselessly (cuz everyone else already has) that you'll learn more about computers with C.

</comment><comment><USER53> Yes, it is worth learning C even though most CS programs do not use C now. C is an excellent abstraction of the actual machine. Python is great, but many of the constructs used in python do not map directly to the CPU. Like many have said, C is portable assembly.

</comment><comment><USER54> In my opinion, instead of asking and spending time reading the comments of everyone saying why you should learn C, you should have actually learned C. It's a great language and learning it will surely help you in your career.

Think of it this way: Why _not_ learning it?

<comment><AUTHOR> I asked this question for two reasons:

1) I had already started learning C. It is low-level, and I was getting disinterested. I wanted to know if it'd really be worth the work to learn it. (The answer is absolutely.)

2) So that other people, when wondering if they should learn C, would have a great list of hacker recommendations. (That has happened.)

<comment><USER55> If you are getting disinterested, do some project that C would be good at, like graphics, or a hardware driver, or an OS kernel.

</comment></comment></comment><comment><USER56> C is a good starting point. Its "strengths" and "weaknesses" made me appreciate/discover other programming languages' "strengths" and "weaknesses" :)

</comment><comment><USER57> Get a hardware book and read up on how computers actually work. This will help an immeasurable amount to understanding why C is the way it is.

</comment><comment><USER58> Yes, because one day you may be tempted to write a windows driver to hack games (how I helped a friend write a WoW bot).

</comment><comment><USER59> Yes, it definitely. A good way to build your fundamental knowledge of computer science.

</comment><comment><USER60> Yes! In general, when asked "should I learn X | X is something that gives you a different perspective" the answer should be yes. In particular, C is excellent as it teaches you things must be understood even if you work with higher level languages: dealing with pointers, dealing with raw memory (allocation, deallocation, finding leaks), dealing with the I/O and VM sub systems of your operating system, understanding abstract data types.

On the educational side, you will learn about hardware works. Some will argue that there are better languages to learn these things and I'll agree: Forth could be better for learning about raw memory addresses and systems programming. Scheme could better for learning about data abstraction. However, C has several salient things going for it: C is UNIX (for good or bad, majority of serious non-embedded -- and even great deal of embedded -- programming outside of Microsoft or of Windows Desktop Application development targets UNIX) and C is the lingua franca of programming languages.

From the practical side, you will have an advantage too. Higher level languages generally still have pointers (Quiz: is Java pass by value or pass by reference? Answer: It's pass by value, just the value of anything other than the primitive types is a pointer). Higher level languages have built abstractions around I/O and VM but they typically fall under two categories: thin wrappers around C and POSIX APIS (Perl, Python, Ruby) or leaky abstractions that occasionally force you to use FFI to C (JVM based languages). In either case, if you are able to program C you have a competitive advantage against coders brought up purely on those languages.

C is also a good language to learn about data structures: partly because learning data structures in C is _really_ about the data structures, abstract data types and algorithms and _not_ (as C++ and Java centric courses often make it out to be) about OO. This is the book I recommend for data structures in C: [http://www.amazon.com/Data-Structures-Pseudocode- Approach-C/...](http://www.amazon.com/Data-Structures-Pseudocode- Approach-C/dp/0534951236) (I'm biased as I learned from it myself and have had classes taught by Professor Forouzan).

Note, I never said anything about performance. Just like it's nearly impossible to hand-write assembly that beats "gcc -O3" (not to say "gcc -O4" or icc) performance wise on modern hardware (out of order execution, NUMA, specialized instruction sets), I am pretty confident that languages will emerge that will beat C even for things like inner numeric loops by being able to reason more about mutability, side effects or lack thereof, exploiting parallelism and caching available in hardware. You won't be writing in C to make computation faster, you'll be writing in C to deal with I/O, memory and the like more efficiently: many times that will mean your code will run faster, but it won't specifically due to being written in C (to be blunt, it will be due to implements of runtimes and programming languages sheltering the languages/runtimes from the hardware/OS; that may not always be the wrong thing to do). See <http://pl.atyp.us/wordpress/?p=2947> for a great discussion on this.

Finally in terms of C++: don't study it _before_ knowing C _and_ a non-C++ object oriented language. I was lucky enough to learn C before learning C++, but it _was_ the first object oriented language I tried to learn. Because of that, I thought of OO as a black art. Oddly enough I truly learned about OO in Perl: I was writing Perl 5 (loosely adhering to Damian Conway's "Perl Best Practices") and despite OO in Perl being an ugly hack (it's similar to Python's, but without even the syntactic sugar that hides __dict__ away) the Perl code I was writing was far more OO than any C++ I wrote up until then. I then learned Python and Java; when I came back to writing C++, I was much better at it. Josh Bloch (along with Doug Lea, the author of Java's collections) in "Coders at Work" spoke of a similar experience (in his case, he didn't do any OO programming before Java) and likewise speaks very favourably about C.

I strongly recommend you do the same: learn C and do a non-trivial project in it (writing a compiler for subset of C in C did the trick for me) to truly grok it; continue building projects in Python (or another OO language e.g., Ruby, Java, Scala, Smalltalk, ObjC, Common Lisp+CLOS; pick as many of these as you'd like) to make sure you have a firm grasp of OO _before_ you go after C++.

</comment><comment><USER61> Yes.

</comment><comment><USER62> Yes.

I'm sure there are many reasons to know C/Assembler. But I felt like learning things like why:

obj.getField().setFirst("random"); obj.getField().setSecond("random");

is worse than

Field field = obj.getField(); field.setFirst("random"); field.setSecond("random");

Another reason I used to like C was that it always made me want to make my code run as fast as it was possible to run. When I write code in Java, I'm looking to make the code work. I'm not saying either is better, they just each have their plus points, but I enjoyed C more due it's challenges and feel I'm a much better programmer for knowing it.

</comment><comment> jc-denton Short answer: yes.

Long answer maybe you also want to learn some assembler to see how the machine really work (I would recommend programming a simple microcontroller or the lego NXT things).

If you manage to learn C. It will be easier later to learn an object oriented language later. (Java, C# or C++)

The problem (and the frustrating thing) will be that you first probably wont achieve much by using pure c. Therefore you can also start with toolkits like processing.org which can teach you basics about algorithmic thinking.

</comment><comment> jc-denton Ah just saw that you did Python and JS first. So yes I suggest learning C or C++ (maybe C first, because it's easier)</comment>