OVH outage explained - <AUTHOR> http://status.ovh.net/?do=details&id=15162#comment18119 <comment><USER3> AWS had an identical failure with their ATS(automatic transfer switch) system which took out an availability zone. After some forensics and a code review of the plc software, realized it was an omission in that system.

They now make their own if I remember correctly.

[https://image.slidesharecdn.com/cpn208failuresatscale-121129...](https://image.slidesharecdn.com/cpn208failuresatscale-121129215220-phpapp01/95/cpn208-failures- at-scale-how-to-ride-through-them-aws-re-invent-2012-19-638.jpg?cb=1434493281)

</comment><comment><USER4> Datacenter I was using for 5 years: once per month, employees on site, power is cut/disrupted somehow, UPS kicks in, within 60 seconds the 750kw diesel genset is supposed to be running and taking load.

Zero problems in that 5 year period due to power...

</comment><comment><USER5> I have been a big OVH advocate (cheap prices + free DDoS protection + good hardware) and have been using them for years.

However, I am really frustrated by the lack of communication during this incident. All I had was the tweets from the founder, while their status page was down and I had no other place to reach out to them (phone + ticket system down).

What is worse is that they treat the individual SBGs (SBG1, SBG2, etc) as individual availability zones, when they truly are not. I had an application using their vrack on different SBGs availability zones and they all went down.

Anyway, glad they are fixing it, and glad for the clarification that they don't have real availability zones. Will design my applications better next time.

<comment><USER6> Can I ask if vrack itself stayed online with non SBG instances inside? I'm just curious if this also affects their network wide services like vrack or public cloud instances outside SBG.

<comment><USER3> If power to network gear was down, then it probably affected vrack connectivity, likely on the entirety of sbg.

</comment></comment></comment><comment><USER7> Every small datacenter has a fake diesel generator that doesn't work. I worked for one datacenter and they purposely bought a non-working diesel generator and moved it into a room with the sole purpose to pitch it to investors that they had a working secondary power source.

<comment><USER8> How on earth did you go from "I saw this thing once" to "everyone does it"?

</comment></comment><comment><USER9> My datacenter has 2 power channels, coming from two different power grids. They have never had a full outage, even when a substation two blocks away started on fire.

Even if we lost power on one power channel, we would still be operational. Even if the backup power failed. That's the reason you use redundant power.

If your "cloud provider" is charging you a lot but not providing your server redundant power from two grids to redundant PSUs, I don't think you're getting the best available design.

In this case, it looks like OVH just threw all the power onto a single channel, which allowed a failover bug to bring down the datacenter.

<comment><USER10> The power grid in and of itself is a highly interconnected and redundant system. The fact that a substation fire didn't bring down your datacenter doesn't necessarily mean that the "redundant" setup was responsible.

Unless the two grids are fully isolated (e.g., from two different countries), there is always going to be some overlap in the two power sources.

<comment><USER9> The trick to building good datacenters is you make as many things redundant as possible, and it reduces the chance of one thing taking the entire datacenter down. Being connected to two external power providers is not _the_ reason our datacenter stayed up, it's one of the many carefully designed redundancies that all add up to higher availability.

When you have an A/B isolated power datacenter, you can (and my datacenter regularly does) shut off each channel to test that the backup systems are working, without worrying that a failed test will bring down literally every customer in the datacenter. That testing would have likely caught this problem at OVH if they were able to do it, but they instead decided to just toss all the power into a single channel, making it impossible to do testing like this without a decent chance of widespread outages. So they just had to assume it would work, until it didn't.

Because our power channels are isolated, there's almost no difference between turning each one off separately, and then turning both of them off at the same time. So if we were to lose external power on both (which would be a history books blackout for how this DC gets its power, including an almost direct connection to a hydro-electric dam), you would have two well-tested backup power channels ready to go. Nothing is ever a guarantee, but I like my chances.

</comment></comment></comment><comment><USER11> Very transparent, kudos for that. A reminder to everyone, though, that the brochure doesn't always match reality. OVH pitches itself as a global data center leader, with 20 facilities, 2 of them amongst the largest in the world. Not to harp on them, just to say that having some backup plan on a separate provider is always a good idea, no matter who your primary is.

<comment><USER12> Also when you decide on a backup, make sure your backup is not hosting their servers in the same DCs as is your primary, or worse yet that your backup is renting their servers from the same people you rent your primary from.

<comment><USER13> My lesson in this was not servers, but networks. Back in the mid 90's at some point, Europe largely lost network connectivity to the US for about a day (this is all from recollection; I ran an ISP at the time, and we were affected, but I'm sure I've gotten the occasional detail wrong). Not entirely - there was significant capacity that was technically operational, but in practical terms large subsets of European networks were cut off.

The reason was problem with one of Sprint's cables. It was carrying a lot of Nordunet traffic. Nordunet is/was the Nordic joint university network infrastructure. At the time, for historical reasons, Nordunet had more network capacity than most of the rest of Europe combined (consider that Norway was the second international connection to Arpanet in the early 70's due to the seismic array at Kjeller outside Oslo that provided essential data on Soviet nuclear tests; this made money flow to network research in Norway, and a joint Nordic effort let to significant investment in the other Nordic countries too; couple it with early work in Sweden, where they ended up hosting D-Gix - <USER2> many years the largest internet exchange point outside the US).

So Sprints cable went down, and everyone started re-routing. Problem #1: Everyone had high capacity to D-Gix or other exchange point in the Nordic countries. These connections were now flooded by traffic from the Nordic networks where people were used to being able to saturate their 100Mbps network connections (it was such a downer starting my ISP, and going from 100Mbps at university to 512kbps aggregate outbound capacity at our offices). Except most of the links connecting to D-Gix where 34Mbps or less, and there were not that many of them, and they were connecting entire universities or entire countries...

So connectivity within Europe started slowing down.

Problem #2: Most of the links from elsewhere in Europe to the US were 8Mbps or less, with maybe a couple ones faster than that, and there were not that many of them. Certainly not enough to compensate for several hundred Mbps of lost capacity.

Problem #3: Many of those links got so saturated and slow that failsafes were tripped and traffic started getting routed to their expensive backup links (e.g. people paying for a port and then paying for burst a 95th percentile basis and the like with expectation of normally not using them). Except, as it turns out, many of said backup links had been purchased from Sprint. Over _that_ cable.

Today the number of cables and overall capacity is vastly higher, with many more providers, so I don't think the same could happen again, and D-Gix is no longer as important as it was (though it's still one of the largest international interchange points), but as we sat there pinging and trying to figure out what was up, it was a vivid lesson in ensuring your backups are actually sufficiently separate from your main systems that they stand a chance of working.

<comment><USER14> This type of outage was common in the US in the 90s as well. Many large (tier 1) ISPs found out that their redundant fiber links were not in redundant bundles, other tier 1s also had important links in the same bundles, and that a backhole had severed the bundle.

Mostly, when this happened, west coast users couldn't contact east coast servers (and vice versa), but occasionally, BGP would work out, and packets would get back and forth, but go around the world.

</comment></comment></comment></comment><comment><USER15> I wonder how easy it is to really test these failover systems. Even if you disconnect the external power (which is risky, since you lose redundancy), it will be a "clean" disconnection, with the power going neatly to zero. I've found a few post-mortems of high-voltage faults, and the waveforms go crazy during the fault, which could lead to failure modes in the transfer switch which wouldn't be found on a "clean" disconnection.

<comment><USER16> That applies to other kinds of reliability testing too, especially everything that goes through a network.

It's easy to handle when something is completely unavailable (i.e. instant error), but when something, be it a database or some endpoint, is available but horribly slow, that's a whole different thing.

<comment><USER17> Seems like we need systems designed with "suicide" mechanisms built in, so that if they detect that they have a poor quality of life (err, I mean, that they're providing a poor quality of service) they'll shut down completely.

<comment><USER18> The circuit-breaker pattern is commonly used to make the affected system appear off-line to it's upstream dependents - you don't need to actually shut the server down completely and will probably want to log into it to see what's happening. If the dependent system can't function without the affected system, it should also indicate an error and further upstream systems should detect it.

In your house, you have the circuit-breaker pattern implemented in hardware. And upstream of your house there are many more layers of circuit breakers that generally increase in size until they reach a point where there is redundancy. A circuit-breaker going off in your house protects the other circuits in your house, a circuit-breaker going off on your street protects the rest of your neighborhood.

Industrial circuit-breakers are commonly a combination of hardware and software. Personally, I've lost more equipment due to brown-outs than any other cause. If you have equipment you don't want to experience a brown-out, program the breaker to cut off power completely.

</comment></comment></comment></comment><comment><USER19> Great summary. That's for the SBG outage, not the RBX one though.

<comment><USER20> Details about the RBX outage were already posted earlier: [http://travaux.ovh.net/?do=details&id=28244#comment35217](http://travaux.ovh.net/?do=details&id=28244#comment35217)

<comment><USER21> According to their maintenance postings, RBX was an upgrade problem to the software driver of the optical fiber :

"RBX: We had a problem on the optical network that allows RBX to be connected with the interconnection points we have in Paris, Frankfurt, Amsterdam, London, Brussels. The origin of the problem is a software bug on the optical equipment, which caused the configuration to be lost and the connection to be cut from our site in RBX. We handed over the backup of the software configuration as soon as we diagnosed the source of the problem and the DC can be reached again. The incident on RBX is fixed. With the manufacturer, we are looking for the origin of the software bug and also looking to avoid this kind of critical incident. "

<comment><USER19> They gave more details in the French version. The equipment is Cisco NCS2000.

<comment><USER22> Let's hope that the second equipment they ordered is not Cisco so that they have full redundancy.

</comment></comment></comment></comment></comment><comment><USER23> I have a hard time understanding why they needed humans babysitting the restart of servers and services. Servers and services are supposed to automatically restart after the power came back. This implies OVH doesn't regularly test server restarts with something like Netflix Chaos Monkey.

Moreover, the power lines were not really redundant in SBG, and regarding the network downtime in RBX, it looks like the network core is not really redundant either.

I'd be curious to know how competitors like AWS and Google Cloud mitigate this kind of problems.

<comment><USER24> OVH runs servers for their clients, do you really expect them to randomly restart their clients' servers? Netflix is not a hosting provider, the situations are not comparable.

<comment><USER25> I would be _pissed_ if my hosting provider randomly restarted my servers, taking them offline for minutes each time.

<comment><USER26> So would I, but that actually makes me realize that I should be doing more of what netflix is doing too and ensure I can randomly restart servers without affecting service.

<comment><USER27> Isn't choasmonkey just randomly restarting virtual servers on Amazon?

Kudos to Netflix, but restarting a virtual server vs a physical or a whole data center are different things.

I think every company that cares a bit about high availability knocks out stuff randomly or at least in different ways, does stuff like introducing packet loss, etc. It's another layer and another thing to test that on service/virtual server layer than on close to physical layers.

Of course, one should test that too and it's nowhere near impossible, but Chaosmonkey is for a somewhat different use case.

Also the "article" mentions that tests are done.

</comment></comment></comment></comment></comment><comment><USER28> Why are backup generators so unreliable? And that is unreliable by the standard of a non-critical system let alone that of an emergency system where reliability is their sole purpose.

Is it just a (non)-survivorship bias where we most commonly talk about the failure cases and they actually have a stellar 99.99999% record that doesn't make headlines?

<comment><USER29> Most of the time, it's not the actual generator that fails. It's often either the part that detects power failure (fluctuations, brownouts, ... are harder to detect than total failure) or the switchover hardware to the generator. If you want to switch 20KV, you're really handling an awful lot of energy. Physics kinda get in the way there.

Switching paket based networks is often much easier because you can just hold on to the packet and retransmit if a line fails, that's why it's much rarer to have total network failures.

<comment><USER30> To add to this, backup power systems are in fairly widespread deployment and bigger installations are tested and maintained on a schedule. You'll never see "hospital transferred emergency-available circuits to backup system; no malfunction" in the news, yet it happens every few weeks in every installation.

Generators themselves are very reliable machines. The engines are cast iron (instead of cast aluminium as found in all cars since two decades or so) and are nowhere near as close to the edge of material capacity compared to car engines. Electrical generators are essentially just a big blob of metal, they are simple, efficient and very reliable technology giving many decades of service. Generator controllers are designed to be reliable and aren't terribly complicated, either.

<comment><USER31> Apparently OVH did test their generator system but the outage detector or controller failed.

<comment><USER32> Hmm. Makes me wonder.

If generators really are just a giant blob of metal and very simple (and I have no reason to disbelieve the GP comment)... well... it could be kind of interesting to build an open source software stack to handle switchover. Because, disclaimers notwithstanding, the code would ostensibly be super simple too. So even if it couldn't officially be used directly, it would certainly provide a good base for engineers to copy-paste, either literally or ideologically (and then thoroughly verify, of course!).

Okay... thinking about it, I'm probably wrong - either generator control has some fundamental intricacies that make it not-completely-simple, or all sites have edge cases that have to be baked into the firmware by a system integrator/electrical engineer.

I say this because I'm (genuinely) trying to figure out why the PLCs failed - both in OVH's case, and in AWS's case (see elsewhere in this thread, [https://news.ycombinator.com/item?id=15676189](https://news.ycombinator.com/item?id=15676189)).

It's obvious there are crazy but legit reasons for this kind of thing to happen. I'm very curious what the complexity scale here is.

<comment><USER33> The actual diesel engines and generators are simple metal. Not the switching circuits. If the electric controllers can't handle the load/switching speed/whatever, no clever software and/or reliability in the actual generators will help.

<comment><USER32> Ah.

I've seen what switching 20kV looks like in videos - yeah, that kind of thing requires very careful design, and is invariably going to come entangled with a PLC-style controller, as is the norm for industrial equipment.

</comment></comment></comment></comment></comment></comment></comment><comment><USER34> When I was at AWS we were using generators from a large commercial supplier. We were constantly having issues with them refusing to take over if there wasn't sufficient load. Doing so puts lots of stress on a generator and can significantly shorten its life.

We went to the manufacturer and tried to get them to make a firmware change; we wanted the generators to sacrifice themselves under most every circumstance (short of danger to humans). Generators are an irrelevant cost compared to the cost of an outage. The manufacturer refused, even when we offered to buy them without warranties.

I don't know if they still do but at that point AWS started to buy basically the same generators straight from China and writing their own firmware.

There is also a great story about an AWS authored firmware update on a set of louver microcontrollers causing a partial outage.

AWS really likes to own the entire stack.

*It has been years since I left, details are a bit fuzzy but I think I've got these right.

<comment><USER35> Do you know why its harder for a generator to power an unloaded circuit? Just curious.

<comment><USER36> The generator's mechanical parts will perform more efficiently at some speeds/loads than at others. Everything happening at a different temperature and pressure will change fluid flows and forces and put different stresses in different places. Combustion won't happen cleanly, oil and gases won't flow the way they're designed to and the engine will get dirty, etc. If you're running outside of the region the engine was designed to operate in you're stressing it in ways it was not designed to handle, lowering efficiency and shortening its lifespan.

(You _could_ run the generator at its favorite speed and sink excess power into a dummy load. This'd waste a ton of fuel, though, enough so that I'm not actually sure whether it'd be cheaper than eating an engine. That and I'm not sure what a data-center-sized dummy load would look like.)

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

<comment><USER37> > _This 'd waste a ton of fuel, though, enough so that I'm not actually sure > whether it'd be cheaper than eating an engine._

I think you'll find fuel is extremely cheap, even when you're burning many gallons per minute.

<comment><USER36> Hmmm. I didn't actually do the numbers. Let's see...

A randomly-googled 2MW diesel generator consumes 50 gallons/hour at quarter load and 160 gallons/hour at full load [1]. So let's say it's 100 gallons/hour to run a 2 MW generator at full load instead of quarter load. The OVH incident report [OP] says that their data center has two cables in each carrying 10 MVA (mega-volts-amperes, ~ watts), giving us 20 MW as roughly the maximum power consumption of the data center. Divide, multiply, it'd cost 1000 gallons/hour to run at full load, orrrr $3000/hour at the current price of diesel [2].

Yeah, that's pretty cheap, okay. You might run these generators for a few hundred hours over the lifetime of the installation and they probably cost millions of dollars, so you're not going to spend more on fuel than you'd spend having to replace the generator early. Why _don 't_ they have a dummy load for that scenario?

[1] [http://www.dieselserviceandsupply.com/Diesel_Fuel_Consumptio...](http://www.dieselserviceandsupply.com/Diesel_Fuel_Consumption.aspx) [2] [https://www.eia.gov/petroleum/gasdiesel/](https://www.eia.gov/petroleum/gasdiesel/)

edit: Now that I look at the math I did I realize that I didn't need to look at OVH in particular at all, just compare the cost of fuel to the purchase price of one of the diesel generators I was looking at. >_< Meh, math still works, I'll leave it.

<comment><USER38> Fuel is much more expensive in Europe. A liter of Diesel is about 1.40, so $6.50 per gallon.

<comment><USER39> Does Europe tax diesel the same way no matter where it's used? I know in the US diesel for generators is exempt from a lot of taxes resulting in it being significantly cheaper in some states.

<comment><USER40> In the UK Diesel is taxed differently for agricultural usage, it typically has a red dye added to it to indicate it's for agricultural use only. I don't honestly know about generators though.

<comment><USER41> You can use red diesel in a generator, I think the legality comes down to whether it's being used to power a vehicle on a public road.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Segmentation of the Top 100 Sites in the US - <AUTHOR> http://blog.directededge.com/2009/08/31/segmentation-of-the-top-100-sites-in-the-us/ <comment><USER2> This would be interesting if it aggregated a lot of sites across segments.

Maybe there is only one Music site in the top 100, but the aggregate for Music may well be much higher. That is, what's the aggregate for each segment, what's the average and the stddev.

From this you'd see what segments are more fragmented than others -- i.e. there might only be two "Auction" sites because eBay has it sewn up. There might be only one music site, because there are 1,000s of music sites and nobody's dominated.

</comment><comment><USER3> To be perfectly honest, your niche is something you perhaps don't want it to be : porn. There is a market, there are customers, and it is where recommendations would be highly valued.

Furthermore, users are willing to rate, there is a lot of tagging going on, the tags are quite detailed, and the benefit from being able to recommend specific items for specific tastes that are not widely found, means that these 'niche' users are easy to monetize.

Your service is perhaps a bit vague at the moment - when you spin off a section that does targeted porn recommendations, you're going to become instant millionares.

</comment><comment><USER4> Interesting, but not too surprising. How is this going to help you in the recommendations business?

<comment><AUTHOR> There are a lot of sorts of number that we're running. This was just one of the things that I was curious about today. There's a lot of data available in the US Economic Census breaking down business by size and I wanted to figure out which sectors I might be ignoring in our analysis.

Often when I do stuff like this I like to post it somewhere so that it gets picked up by Google and can save someone else the time later on should it be useful.

</comment></comment><comment> onreact-com Relying on Alexa? Especially in the US Compete.com is the way to go. Alexa is incredibly inaccurate these days.

<comment><USER5> I don't think compete.com is all that accurate either. I saw some numbers on twitter.com and it reports around 30k uniques per month -- a little low for a site that gets a few million tweets a day. By comparison, quantcast.com reports twitter getting around 31 million uniques per month -- much more plausible.

<comment> onreact-com You probably mistook thousand for millions, I can't imagine Compete.com failing at such a high profile site without them noticing and fixing it.</comment></comment></comment>


Ask HN: How much time do you spend on code reviews? - <AUTHOR>

I recently published some advice about doing peer code reviews based on my experience managing a development team for the past few years. One of my recommendations is to spend roughly 25% as much time reviewing a given patch as it took to write it.
The most highly rated comment on Reddit, by far, is this one: http://www.reddit.com/r/programming/comments/2t7qna/how_to_do_code_reviews_without_wasting_your_time/cnwnac0. To save you the click, he says: "Nope. Lost me right there as unreasonable and impracticable." I've had a bunch of other comments along the same lines. My main argument is that if pair programming (with 100% overhead) makes sense to a lot of people then 25% overhead doing code reviews should be totally realistic.
For those who do code reviews, how much time would you estimate you spend relative to how long it took to write the code? Do you agree with my 25% estimate, or does it seem unnecessary and/or unrealistic? Are there people who think it should be even more? <comment><USER2> Like most questions on ask HN the answer is: it depends.

Mostly it depends on a) what level of quality you need, b) what are you currently doing for quality control, and c) what other alternatives do you have?

On a): What is your customers bug tolerance rate? What part of the codebase is this? Most people will be ok with a few application crashes or a feature not working in some edge cases but be irate if you corrupt their data. Are you just trying to MVP or prove an idea? Is the app going to be around in 10 years etc? Are you building a framework or api that is going to be a building block or a user facing app? Huge difference.

On b): If you are already unit testing then that's 30-40% of dev time. Add another 10% for integration testing and you are already at basically half the effort being quality control. Add another 25% of total time on top and suddenly you are looking at spending 60%+ of the dev effort on quality control. Is that a good use of time? Depends on a) and c) :).

On c): For example perhaps you would be better off getting rid of code review entirely and using the savings to hire dedicated QA people. Or perhaps formal reviews would work better. Or maybe more time on design or talking to your customers. I'd personally rate all three as more effective.

<comment><USER3> Code reviews are very bad at finding bugs; that is not their purpose.

Code reviews are great for finding design problems, identifying weaknesses in colleagues (so you can help them increase their skills), keeping everyone knowledgeable about what is going on in other parts of the stack, cross- training, keeping the code readable and maintainable (if I can't easily&quickly code review your code, it is probably going to be a black box to everyone in 6 months) and so on.

Not that they don't find bugs, they do. Just that is far from the primary value or the best way to find bugs.

<comment><USER2> My point is that there are plenty of other quality control techniques that may be better suited to your project and team.

E.g. "Code reviews are great for finding design problems"

Assuming you are talking code design problems: So are formal reviews, peer programming, or having multiple developers work on the same parts of the codebase.

"identifying weaknesses in colleagues (so you can help them increase their skills)"

Peer programming is great at this too, as is having a technical chat over a coffee, as is providing 20% time, as is regular technical training, as is allowing your devs time for their own l&d, as is having programmers work on the same parts of the codebase, etc, etc.

"keeping everyone knowledgeable about what is going on in other parts of the stack"

Technical walkthroughs, more consistent abstractions, and/or better doco are also great methods.

Code reviews and unit testing hold this high status place in our profession to the point where most other quality control techniques have been thrown out the window.

At my last company the single most effective policy for quality control we had was: Sleep on it (unless it was an emergency production fix - in which case we don't care about quality).

</comment></comment></comment><comment><USER4> It depends on the product. We didn't have many resources when I was writing code for barcode readers so we had an informal arrangement whereby one person wrote the code and two people reviewed it. For my mobile (cell phone) base station code, we had formal review meetings with the programming team, project manager and, when he had time, the VP of R&D.

The most strict of all was when I was writing code for an air traffic control system. Every single line of my code was reviewed a minimum of three times. We spent almost as much time reviewing the code as we did writing it.

</comment><comment><USER5> I spend very little of my time doing code review. I should be spending quite a bit more, but the company I work for is still pretty small (although growing quite fast) we just don't have the resources at the moment to be reviewing everything.

</comment><comment><USER6> unfortunately very little</comment>


Surveillance firm asks Mozilla to be included in Firefox's certificate whitelist - <AUTHOR> https://www.zdnet.com/article/surveillance-firm-asks-mozilla-to-be-included-in-firefoxs-certificate-whitelist/ <comment><USER2> The article presents this as some kind of difficult decision, but doesn't adequately explain why this should result in anything other than an answer of "no", with a side order of "hell no". Mozilla is under no obligation to add any particular organization to its list of trusted root CAs, and users rely on it for security. Some bizzare notion of "fairness" to a known bad actor doesn't seem like a remotely strong argument to me.

Play stupid games, win stupid prizes.

<comment><USER3> The rules are the rules. They want to follow the rules. If they don't follow the rules, they'll be making an exception. What's the point on having rules if you make exceptions?

<comment><USER4> Because most of the time the rules are in effect, except for the exceptions.

Rules exist for the purpose they serve, functions they allow to be easier and cheaper. Rules are not made so that rules have been made.

<comment><USER5> While I agree with Mozilla's decision, the reason that there are rules is so that it isn't arbitrary. Who is to say who is trustworthy? What if Mozilla wants to charge a fee or else they will remove someone?

Those circumstances would easily fall under the purpose they serve.

</comment></comment></comment></comment><comment><USER6> ... Hurries to delete QuoVadis and Chinese gov authorities from my Firefox trusted lists.

Seems like I did this a few years back, on a previous system.

<comment><USER7> I just did this on my work laptop; is there a way to replicate my certificate lists (or, at best, the deltas)?

> Chinese gov authorities

How would I identify these?

</comment></comment><comment><USER8> Why even allow surveillance firms to be CAs in the first place?

<comment><USER6> Who decides whether anybody is allowed to be a CA? Do they have your interests at heart?</comment></comment>


The Return of Functional Programming - <AUTHOR> https://sreekar.ch/2019/05/28/return-of-functional-programming.html <comment><USER2> Again?

Call me when it works without GC.

<comment><USER3> No, we won't go back to the dark ages of memory errors. Memory management is too important to be left to the user.

<comment><USER2> Didn't say anything about "leaving it to the user". Nobody does that, nowadays.

But that doesn't imply GC.</comment></comment></comment>


Google found it paid men less than women for the same job - <AUTHOR> https://techcrunch.com/2019/03/04/google-found-it-paid-men-less-than-women-for-the-same-job/ <comment><USER3> Throwaway of a googler here. These results could be explained by not promoting women as fast as men, because every year it is expected you will get a CoL and performance based raise if you exceeed expectations for your role, regardless if you exceed enough to convince a promo committee of a level change.

So this could mean that women stay at lower job titles longer.

It could also mean that they sign into the company with higher base salaries. I have seen that maybe happen once in my experience for the same experience level but I have no way of correcting that for their interview performance or how well they negotiated.

Basically I don't think this data point is super useful on its own.

</comment><comment><USER4> Discussed yesterday: [https://news.ycombinator.com/item?id=19303039](https://news.ycombinator.com/item?id=19303039)

<comment><USER5> Well, the people demand another comments section to complain about the study

</comment></comment><comment><USER6> Just to be clear:

 _The company's annual analysis only compares employees in the same job category, so the results do not reflect race or gender differences in hiring and promotion._

[https://www.wired.com/story/men-google-paid-less-than- women-...](https://www.wired.com/story/men-google-paid-less-than-women-not- really/)

<comment><USER7> What needs clarification? The article's title and content make it quite clear it is about compensation for the same role.

</comment></comment><comment><USER8> Surely this is the expected outcome of supply shortage and diversity commitments.

<comment> crooked-v I find it unlikely that Google, specifically, has a supply shortage in any possible niche all the way down to "software developers who are also unicycling clowns".

<comment><USER9> Their diversity quotas are presumably expressed relatively, not absolutely. In other words, they don't say "we need 10000 'diverse' engineers", they say "we want our engineering organization to be 60% 'diverse'" (I'm obviously making up numbers here). Ergo, the shortage in question isn't an absolute number of 'diverse' engineers, it's a shortage of proportions in the pipeline. And they can't do too much to stray from the proportion because they're constrained on one hand by hiring laws (there is only so much you can do to avoid hiring white/asian guys without overtly violating the law) and on the other hand by a fiscal need to hire more engineers at a sane price point.

Note that 'diverse' is quoted here because the whole corporate diversity enterprise is utterly superficial or it wouldn't categorize individuals as 'diverse' or 'not diverse' and it wouldn't choose the most superficial criteria (race, gender, etc as opposed to viewpoint, perspective, or cultural diversity) to make those assessments.

</comment></comment></comment><comment><USER10> The problem with this analysis is that it doesn't adjust for h1b etc which tend to be lower-paid while being overwhelmingly male:

[https://cis.org/North/H4s-Data-Shows-MirrorLike-Strong- Biase...](https://cis.org/North/H4s-Data-Shows-MirrorLike-Strong- Biases-H1B-Males-and-Indians)

<comment><USER11> H1Bs at Google do not get paid less.

<comment><USER10> Google doesn't have an "h1b salary", true. My position is that h1b's tend to lean towards the lower end of a published range for a role, creating a salary marketplace that benefits the employer (which is an abuse of the h1b system; it's to be used to fill roles where domestic talent isn't available, not where it's too expensive)

<comment><USER11> You have no proof, just your own biases. You WANT to believe this is the case, but it's not true at Google.

<comment><USER10> Aren't we both doing the same thing, only coming from different ideological perspectives?

I'd love you to prove me wrong. If Google has domestic talent available at $150k, and can pay $110k to an h1b, they are supposed to hire the domestic talent. That's how the system works (or rather, it does if a company doesn't abuse it). I'd love to find out they are instead having to pay the h1b $175k because no domestic talent is available. If Google is doing this, and is the statistical anomaly, then good on them. However, all the evidence I've seen (anecdotally and in writing) suggest otherwise (though at an industry-wide level, not at the Google level)

<comment><USER11> I know many, many H1Bs around Silicon Valley. Many are making more than me, a "domestic talent". My base salary is over 200k/year. I know one making $300k base at one company and $600k base salary at another. I know many others that are making the same as me, and the only ones that make less are the less talented ones which is right.

</comment></comment></comment></comment></comment></comment><comment><USER12> I understand this makes a great headline, but it might be because they don't promote women as quickly as men, leaving the women 'overpaid' compared to the other men at their level.

A better comparison might be to trace the trajectories of men and women who started out in similar jobs and at similar pay levels, and the see how many women appear overpaid.

I bet you won't find too many.

<comment><USER13> That would be useful information, but it would also need some way to judge how biased (or not) the promotions are.

There's also another likely contribution to higher pay for women: a shorter supply of them, and Google bidding to hire/keep them versus other companies.

</comment></comment><comment><USER14> This whole article is a big fat nothingburger.

This is less than $1,000 per employee that was adjusted. Given the salaries at Google, this is almost certainly a <1% difference and the pay bump is pretty much negligible. It's less than the cost of living adjustment that they probably get every year.

<comment><USER15> You're correct that the magnitude is insignificant - but it's still important because the study's conclusion contradicted the expectation that men are paid significantly more.

<comment><USER14> I suppose you have a point. I have believed (known?) for a while that this was simply not true so since the magnitude of this difference is what most would call not statistically significant, I treated it as worthless. Though, I imagine those who were still of the mindset that men were still paid much more would find this much more interesting.

</comment></comment></comment><comment><USER16> Did the analysis in the NYT report that TechCrunch is cribbing from here account for Simpson's Paradox?

Google employs more men than women. Even if a higher percentage of women are underpaid, we could see a situation where more men get raises in an equalization.

<comment><USER17> This is not how they did their calculations. It's described here [1].

They were not comparing _individuals_ against some set average and making sure each employee was then brought up to that average and then saying e.g. x% of men and y% of women were bumped up. What they did was compare _groups_ against one another and ensure that there was cross-group consistency. E.g. - <USER2> regression formula to determine a man's compensation based on various inputs (such as e.g. performance ratings) should yield a mostly identical result for a women of the same inputs.

And then they contrasted groups against various groups. They found that if you were a women, you were paid disproportionately more than other employees. This is why in their announcement they speak of groups instead of individuals, _" [T]he 2018 analysis flagged one particularly large job code (Level 4 Software Engineer) for adjustments. Within this job code, men were flagged for adjustments because they received less discretionary funds than women."_

Remember the goal is not to have every _individual_ be identical, but to ensure that there is no specific group bias. Any given man/woman/etc may be paid more than another employee for reasons that cannot be easily quantified, but when the entire group of _all_ e.g. men or all women are disproportionately paid more than other groups of the same quantifiables then you either have inadequate quantifiables (e.g. - you are missing _why_ certain people are paid more), or there is simply no good reason and you have a bias. In this case, they decided it was a bias.

[1] - [http://services.google.com/fh/files/blogs/pay_equity_info_sh...](http://services.google.com/fh/files/blogs/pay_equity_info_sheet.pdf)

</comment></comment><comment><USER18> _paying $9.7 million to adjust pay for 10,677 employees_

So an average of $908? That sort of rounding error pay adjustment isn't really what people are discussing when the topic of unfair pay comes up.

<comment><USER19> Are you suggesting that Google's analysis is flawed?

</comment></comment><comment><USER20> JFC

</comment><comment><USER21> Well, this doesn't fit the narrative at all.

</comment><comment><USER22> Perhaps those that keep posting the same story over and over have some kind of agenda?

<comment><USER5> What is the agenda you are suggesting with your conspiracy theory?</comment></comment>


VISC: Virtual Instruction Set Computing - <AUTHOR> http://research.microsoft.com/apps/video/dl.aspx?id=249344 <comment><USER2> Apple already requires submission of llvm bitcode, if Microsoft adopts this then it may become a thing.

Oh god no.

<comment><USER3> I don't recall the details but I understand M$ opened .NET because they're going to have a cloud-based ".NET IL in, optimized C(/C++?) out" service for Windows (desktop, tablet, phone, XBOne), while everyone else is stuck with running the .NET runtime bytecode interpreter. It's a remarkably well-thought- through plan; .NET has proven itself as a reasonably snappy platform, so Linux/FreeBSD/OS X won't feel _too_ left out.

So yeah, pretty much exactly what you described.

<comment><USER4> Well, the .Net runtime, including their current JIT compiler, is open source now, so nothing keeps people from improving the JIT compiler or replacing it with a static IL->binary compiler.

IIRC correctly, GCC could compile Java to machine code a couple of years back. This obviously required one to a) have the source and b) give up on cross- platform portability, and I don't know how well the compiled code performed in comparison to bytecode running on, say, HotSpot, but the option was there. In other words, it has been done before.

As much as I like to distrust Microsoft, if they can implement a static compilation scheme for .Net that provides better performance than what the open source community can come up with, and then offering it for Windows only, that may not be super-nice of them, but it certainly is not evil, either.

</comment></comment></comment><comment><USER3> I've been staring at this for a good 15 minutes, and I can't find the video URL. I have nothing currently running Windows.

You gotta take a look at the HTML for this page. It definitely looks like an academic research group built it. ><

<comment><USER5> Don't need Windows to download the video.

Not sure about playback.

It's 742MB ".asf" file. ffmpeg, ffplay, mplayer, ...?

[http://msrvideo.vo.msecnd.net/rmcvideos/249344/249344.asf](http://msrvideo.vo.msecnd.net/rmcvideos/249344/249344.asf)

<comment><USER3> Oh, thanks very much!

I'm guessing you got that out of the Network panel? Chrome on Linux just shows an empty video URL field in the source code, and I couldn't figure out the magic code path that filled in in. :P

</comment></comment></comment><comment><USER6> Frustrating to watch as the audience asks the same question over and over and the speaker doesn't provide a satisfying answer. Of course you can run analysis at compile-time, but if your executables are compromised (eg. virus, memory corruption, dodgy 3rd party software/drivers etc.) you can still guarantee your system won't be skittled. And also you get the speed benefit of not needing a hypervisor, and the security benefit of having a small attack surface area of trusted code. If the audience wasn't so self-righteous and listened, we might have got to see the automated debugging section.

</comment><comment><USER7> From the headline I thought it would be related to Variable Instruction Set Computing (VISC) architeture [0], but sadly it's not.

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


Google Remotely Deletes a Pair of Apps from Android Phones - <AUTHOR> http://www.engadget.com/2010/06/25/google-flexes-biceps-flicks-android-remote-kill-switch-for-the/

<comment><USER2> Google deleted an app whose sole purpose for existing was misdirection (as described by the application's author), and which was already voluntarily withdrawn. The malware application has an attack vector that involves a remote site that wouldn't necessarily always be under the control of the original author.

I have a hard time feeling outraged about this; it seems like exactly the kind of reason why both Apple and Google added the ability to remotely remove applications to their marketplaces.

And, note that this kill-switch only applies to Market-supplied applications; if you install an APK yourself manually, they can't remove it. (In fact, installing or removing an app via the Market actually uses the intents for installing and removing applications that Google used here, rather than installing the APK directly.)

<comment><AUTHOR> It does not matter what the purpose of the app was. What matters is the fact that they messed with users' phones without their explicit consent. A proper way of handling the situation would've been to warn the users and then prompt to remove the app, do you not agree?.

<comment><USER3> You have to explicitly agree to the TOS for the android market before installing any app from it. If you install apps yourself (outside the market), google can't touch them.

</comment></comment></comment><comment><AUTHOR> Google's excuse for doing that \- [http://android- developers.blogspot.com/2010/06/exercising-ou...](http://android- developers.blogspot.com/2010/06/exercising-our-remote-application.html)

"Believe me, it's for your own protection."</comment>


The Importance of Mathematics Courses in Computer Science Education - <AUTHOR> http://devlinsangle.blogspot.com/2015/04/the-importance-of-mathematics-courses.html <comment><USER2> My issue with this article is the author's conflation of his own like and dislikes with what works for students. Many people go into computer science because they want to know how computers work or because they want to know how to program that demo they just saw, or more applied things along these lines. Very few (but definitely some!) go into computer science because they want to know about Turing Machines, or the Curry-Howard isomorphism, etc. Currently CS education serves the latter group very well, while neglecting the former group. This is a shame, because plenty of people who find math frustrating can become great programmers and find great satisfaction in understanding programming and computer science better. Many of the most interesting fields of computer science aren't very mathematical.

When I came to school I hated math, despite being relatively good at it. By now, my interests have changed and I'll graduate with a minor in math and a major in computer science, but largely in spite of my experience with collegiate mathematics classes rather than because of them. The way to get people to appreciate math isn't to force them to take classes on something they don't find interesting. It's to give them opportunities to see how it can be interesting or relevant to them and let them come to it when they're ready.

For myself I became more interested in math when I wanted to learn about graphics programming and machine learning. The first requires linear algebra and the second requires a lot of probability and statistics, which themselves require a solid understanding of calculus. By coming to mathematics this way I was able to see it's relevance to me and my interest in it grew the more I learned. Previously, when I was forced to take the standard multivariable calculus -> linear algebra sequence I did just enough to get by, since I really didn't care about the material. Once I had this small positive exposure to math that was useful to me it was much easier for me to appreciate more abstract math as well. But the important part is that no one made me learn this stuff! Had this been part of the curriculum I would have hated it, but since I was allowed to learn it when I was ready for it I found it very beneficial.

<comment><USER3> > Many people go into computer science because they want to know how computers > work .. Very few (but definitely some!) go into computer science because > they want to know about Turing Machines

I'll be a little provocative, but students don't necessarily know what is useful for them. It's like those kids that want to learn to play guitar solos like Eddie Van Halen but refuse to learn any music theory.

Besides, when you look at the recruiting process of some prestigious companies, it seems that industry values employees that can show good mathematical skills. It's not simply an academics thing.

<comment><AUTHOR> For what it's worth, the education that Devlin is suggesting is not theoretical computer science or type theory. It's the more traditional mathematics courses.

<comment><USER4> Once you add the topology section to the Curry-Howard Isomorphism via homotopy type theory it all starts to merge anyway!

</comment></comment></comment></comment><comment><USER5> I once heard someone opine that computer science education plays a cruel joke on its students, and this blog post is perpetuating that joke. Computer science is often treated as an offshoot of mathematics when, in reality, you need to do far, far more writing than advanced math. Most students are going to be leaving school and working on professional programming, where they'll largely work with a group of people jointly maintaining systems. And these systems require good writing skills to effectively write documentation for the code, as well as writing the design documentation.

In contrast, you'll rarely need more than algebra, basic statistics, and maybe graph theory most of the time. All the advanced math stuff, such as SVM or Taylor expansions, are generally going to be found in the libraries that you'll use rather than code you'll write yourself. You may need math to understand what they're doing in detail, but with better writers on the documentation, you wouldn't need the advanced math to understand how to use them properly.

<comment><USER6> When I was in college, I was once not allowed to join a Complex Analysis course because there were 15 students in the class. College guidelines advise against more than 12 students in a writing-intensive course, and because this was an upper-level Mathematics course, the professor took that to heart (he thought 15 was too much, but some needed the course to graduate).

This is to say that proper abstract Mathematics courses should require the students to write many proofs. I'm sure that students in the aforementioned Complex Analysis course were writing 4 - 7 pages of mathematical prose for their weekly problem sets. This is a non-trivial amount of writing practice which is especially tuned toward accurately expressing the interplay of precisely-defined abstractions (which all documentation should strive for).

Even discrete mathematics courses (Combinatorics, Graph Theory) should eschew simple calculations of permutations/combinations and graph traversal algorithm steps in favor of writing proofs of more of the abstract concepts. In this way, students will be trained to write effectively about abstract concepts, which will prepare them for a career in programming as well.

<comment><USER7> I'm not sure that type of writing is anywhere near what you need to do in common programming jobs. As you wrote, it was "4 - 7 pages of mathematical prose...". I interpreted writing as writing text to others, including non- programmers.

</comment></comment></comment><comment><USER8> First of all, I want to say that this industry could do with a much higher level of mathematical rigor, and that a lot of the systemic problems are owing to the lack of it. But to me, this:

> _It was a good discussion, that highlighted the distinction between the > currently accepted view of mathematics as primarily about properties and > relations, and the pre-nineteenth century view that it was at heart > procedural._

...does not follow. Programmers don't view mathematics as procedural because they studied mathematical history, but because the Von Neumann architecture, from which the semantics of almost all programming languages derive, is highly stateful and procedural.

As I see it, this is the core problem that must be solved before many of the tools of mathematics which would really help us today can be meaningfully exploited.

</comment><comment><USER9> Mathematics is used in education (schools, ..., universities) to weed out people. For those who perform this selection the ability to grok mathematical problems often is the only way to categorize human capacities. A self- fulfilling prophecy.

<comment><USER10> I can't agree with the "mathematics used to weed out" terminology, the weeding out may be an incidental part, but I've never encountered a place where mathematics was used to diminish the number of people following a pursuit. Certainly not the way that Organic Chemistry is used to weed out premed students.

And certainly not in Computer Science, as mathematics is avoided in many cases where it would greatly aid in reasoning about systems, due to the quantity of people who dislike it.

And in Physics, mathematics isn't used to weed out people, but to train them on the theories that underpin the entire field.

I'd be interested in hearing where this happens, because it's certainly not been my experience.

<comment><USER11> Calculus is a requirement for all undergrad science degrees in most places, and a biologist has about as much use for integral calculus as a fish does with a bicycle. They're much better served by statistics, which is not, a majority of the time, an undegrad requirement for all majors.

<comment><USER12> A really good way to be awful at Statistics is to not understand integral calculus.

<comment><USER11> A really good way to be awful at calculus is to not understand real analysis but you have to draw a line at some point. (heh)

</comment></comment></comment></comment></comment><comment><USER13> The University of Waterloo's unique by putting their Computer Science program in our Faculty of Mathematics (the first in North America, the largest in the world).

By studying a significant amount of Math, it definitely improved my logical and reasoning skills at least ten fold.

</comment><comment><USER14> Computer science is a branch of mathematics. If you mean engineering and programming, then you can get by without any math, but I don't expect you to be writing compilers, operating systems, database engines either without solid CS education.

<comment><USER2> Compilers don't require much math. Nothing difficult at least. (I guess if you're interested in compilers for functional languages this might not be as true). Same for operating systems, as far as I know. I have no experience with database engines. CS theory on the other hand is very mathematical, as are some more applied subfields such as cryptography or graphics.

Math is nice, and useful for some classes of problems, but it is certainly not needed for huge amounts of the programming done. Some people have this masochistic ideal of programming where if you're not solving problems that require the most sophisticated mathematical techniques then your problem isn't important. There are plenty of problems in programming that aren't particularly mathematical in nature and are very challenging. Compilers are one of these, as are many others.

<comment><USER3> > Compilers don't require much math.

It really depends what is meant by "math". Not everybody has the same perception of what maths are. I used to teach a language theory class where students had various backgrounds. CS students were bored because they don't like maths, and maths student were bored because it wasn't math to them.

Concerning compilers, they require non trivial maths. Parsing, type checking, code generation, register allocation and so on... The thing is that mostly you don't formally prove things like you would do in a maths class. But indirectly you use a lot of mathematical results.

<comment><USER15> >It really depends what is meant by "math".

To my own amusement, I've discovered that I tend to categorize as "math" those areas of mathematics which I struggled with, or am ignorant. Statistics? Differential equations? Math. Doing a DFS walk over a parse tree in order to do code-transformation optimizations? No math involved! Just some code.

</comment></comment></comment></comment><comment><USER16> A practical math topic I think all computer science (and engineering, really) students should take is convex optimization.

Often a problem in engineering or computer science can be phrased as minimizing a cost function over some data and/or variable constraints. Take SVM for example, or sparse signal denoising, or template matching. And far too often, people will apply "advanced state of the art techniques" to solve these problems, e.g. neural networks of some exotic kind, graphical models, etc. And while these are great techniques, they need not be applied to convex problems of a reasonable size.

In the examples I listed, I can almost guarantee that a knowledge of how to phrase the model as a convex optimization problem and throw it into an interior point solver is going to be much more effective than running stochastic gradient descent on some user-defined model with way too many (or too little) parameters.

Because when you say a problem is convex, what you are saying is that it can be solved globally in polynomial time (usually on the order of ~20 least- squares problems of size corresponding to number of variables and constraints). There is a sophisticated convergence theory as well. And if you understand the mathematical theory, you get to use this mature technology to solve exactly a whole class of problems you wouldn't think you could.

It's also worth mentioning that a lot of very hard non-convex problems can be approximated and solved well using these methods, and this is a rapidly growing field of research. Here's an example: [http://papers.nips.cc/paper/2979-efficient-sparse-coding- alg...](http://papers.nips.cc/paper/2979-efficient-sparse-coding- algorithms.pdf)

Resources:

[http://stanford.edu/class/ee364a/lectures/examples.pdf](http://stanford.edu/class/ee364a/lectures/examples.pdf) [http://stanford.edu/class/ee364a/lectures.html](http://stanford.edu/class/ee364a/lectures.html) [https://www.youtube.com/watch?v=McLq1hEq3UY&list=PL7A3953FD9...](https://www.youtube.com/watch?v=McLq1hEq3UY&list=PL7A3953FD9E6F4912)

<comment><USER17> Not that you stated to the contrary, but the reality is that the theory and algorithms for convex optimization doesn't really differ that much from the theory of general nonlinear optimization. Basically, we get different guarantees, but we're still largely applying the same algorithms (Newton based methods combined with things like projection, active set, or interior point methods for inequalities.) Though, I very strongly agree that knowing convex optimization tricks helps this process immensely. If you're going to formulate a problem, please, dear god, choose the convex one if given a choice.

Mostly, this is a long way to say that if we're going to study optimization, we might as well study continuous optimization, which encompasses convex optimization and isn't that much more difficult.

And, yes, this stuff is incredibly useful with applications in most fields of study. I've made a nice career out of it.

</comment></comment><comment><USER18> The author conflates abstract and immaterial. Computer programs don't have to be abstract, and often are not. And that's precisly what makes them more approachable than mathematics: you manipulate actual structures, see the results in real time and get to see how the actual process is carried out without language ambiguity. In short you get a concrete feeling of things that you can build a mental representation of that's closer to the senses.

Now some software engineer should explain to the author how programming is central to his understanding of mathematics and see how things develop.

<comment><USER3> Computer programs are formal objects, just like let say Euclidean geometry is. Their syntax and semantics is entirely abstract and mathematics, even though they can be run on a machine that gives you a concrete feeling.

And conversely, most maths aren't that abstract. Mathematicians constantly draw diagrams, plot curves, and use various concrete representations of the object they manipulate. Geometric intuition is a very important tool. I wonder if it's not our best strength compared to machines.

<comment><USER12> Perl and Javascript programs are not formal objects, anymore than an essay is. Any language where "the implementation is the spec" is not a formal object.

</comment></comment></comment><comment><USER19> "Once you realize that computing is all about constructing, manipulating, and reasoning about abstractions, it becomes clear that an important prerequisite for writing (good) computer programs is an ability to handle abstractions in a precise manner. Now that, as it happens, is something that we humans have been doing successfully for over three thousand years. We call it mathematics. This suggests that learning and doing mathematics might play an important role in educating future computer professionals. "

The conclusion is not good. The logical conclusion would be that if we define mathematics as 'handling abstractions in a precise manner' then programming is part of mathematics. In this case his conclusion becomes:

'learning and doing some classical parts of mathematics might play an important role in educating people who will do this another part of mathematics'

Which might be true to an extent, but this statement is very broad.

It is not a question that some amount of math is helpful. But after a while there are diminishing returns, because you simply learn different skills than what you need.

After having some very basic math knowledge the best strategy is to try to learn a lot of practical 'engineering' from very good books/courses, and only go back to math on-demand.

For example if you want to have some knowledge on machine learning or computer graphics, don't start to learn math for years first and then start learning about machine learning/3d graphics. Start to learn abut the engineering field first (take Andrew Ng's coursera class, or some equivalent in 3D graphics) and only go back to learn some linear algebra or very basic calculus after you see why it will be useful and to what degree you need it (you mostly don't need most of the theorems if you are learning the basics of these engineering fields).

Being an engineer is very different than being a mathematician. If you want to be a good engineer then mostly learn a lot from good engineers (or researchers in the engineering field) and learn some math along the way, but that will be secondary in my opinion. It's good to learn tons of math, but only if you learn even more engineering besides the math (to be a good engineer).

<comment><USER20> His words: This suggests that learning and doing mathematics might play an important role in educating future computer professionals.

Your words: some amount of math is helpful.

Do you not see how these are the same idea, abstractly?

Also, "if we define mathematics as 'handling abstractions in a precise manner'"

That IS the definition of mathematics. The author is not arguing for more calculus. His background is mathematical logic which is a standard course before all "real" math (analysis, topology, abstract algebra). All of these subjects handle abstractions in a rigorously precise manner.

<comment><USER7> But if programming (computings as he writes) is handling abstractions and math is handling abstractions then programming is math and the argument that we need to do more math is unclear. We could just do programming, he wrote that it basically is math. He needs to be clearer in what kind of math he thinks would be helpful to programmers and why it would help more than "normal" programming/computing courses.

<comment><USER20> > He needs to be clearer in what kind of math he thinks would be helpful to > programmers and why it would help more than "normal" programming/computing > courses.

Agreed.

</comment></comment></comment></comment><comment><USER21> Here's a crazy idea... let's stop treating curriculums like silver bullets and realize that no matter what we do we're not going to succeed with the current system of "hope your innate talents match up with the current education model du jour".

Education needs to be radically tailored to individual students or we're going to continually be trapped in this vicious cycle of "Current education paradigm X is broken, paradigm Y will solve all of our problems!" (where Y ∈ {"more math!", "more programming!", "more fundamentals!", "more application!", ...}).

Yes, highly customized education doesn't scale. Yes, it's very expensive. But sacrificing future generations on the altar of "efficiency" seems highly suspect to me, and the honest fact is if the incentives within the American (sorry non-US people!) education system were properly aligned we would be much farther along. Granted, that's a difficult task, but I didn't get into computers so I could spend my time working on easy problems.

</comment><comment><USER22> > Some of the computer scientists, however, instinctively interpreted the > statement "Let x be such that P(x)" as a variable declaration. This led them > to give an "incorrect" answer to a question

"Let x be such that P(x)" is something like a variable declaration. It's the introduction of an argument to a function (think "function(x){ ... }"). I think the real conceptual problem lies in the fact that many mainstream programming languages allow subversion of the type system by allowing "uninitialized" variables, so that every type is automatically inhabited.

There is also the fact that a mathematician may just want some "x such that P(x)" rather than introducing a generic one, which I think the author mentions.

</comment><comment><USER23> This is a quibble, but there are cases when the physics of the computer cannot be disregarded and must be considered. Two of my favourite examples are cosmic rays flipping bits [1] and printers jamming. [2]

Regardless, I agree with his overall thesis: the machine is just a hunk of atoms with no meaning of its own. It is us who place a meaning on the machinations of the computer. Computer people have come to accept the abstractions of computer science as tangible and consider the abstractions of mathematics intangible. I think both abstractions are comparable. Both end up being interpreted and executed by humans and by computers, and it is merely the overwhelming prevalence of CS abstractions being executed by computers and mathematical abstractions being executed by humans that is causing this divide between the two tribes.

There is much that computer scientists can learn from remembering that the machine is just a represantion of abstractions, just like mathematicians can benefit from remembering that occasionally the physics of the machine are relevant.

\----

[1] An entirealy reasonable explanation at times,

[http://lwn.net/Articles/219983/](http://lwn.net/Articles/219983/)

[2] [http://nedbatchelder.com/blog/200811/print_this_file_your_pr...](http://nedbatchelder.com/blog/200811/print_this_file_your_printer_will_jam.html)

</comment><comment><USER24> I really enjoyed this article and the comments so far. I struggled with math heavily in high school and in college and believed I wasn't fit for programming despite being a 'computer head' since I was a kid.

I never struggled with statistics, I felt like it was the 'easy' math and now work in analytics at a large investment firm and do scripting and analysis with the big databases.

I don't think I'd excel at creating the databases I work with but I understand them and my ability with java and R and SAS and python have helped me be more efficient and a leader in the group.

My understanding of other math has come a long way since university with real tangible examples, I just don't learn from abstract examples I think.

I don't think there is a right answer here, I think there are enough opportunities in the field for there to be two branches of computer science much like there are two sides of business schools. The hardcore finance path and the businesss communication people tease so much.

</comment><comment><USER25> i started a degree in cs last year and i noticed: most cs people i met @ my university have BIG problems with getting their hands dirty by writing some code. excellent in math, but not able to write some simple for-loops. finishing university without being able to code is kind of poor... but i agree - abstraction is very important to handle complexity.

</comment><comment><USER26> Guy who started out in math and ended up with a blended math and CS degree here. Their definitely were some parallels, but even in a program where they tried to combine the two, it didn't always mesh. I felt more like upper level math was a springboard for algorithms and proofs, so that by the time I got into algorithms I could say "hey I already have been doing combinatorics proofs very similar to this."

This should not be conflated with hacking though and software development. You can do both of those without any strong background in mathematics. Alot of software development and hacking is just using things people with CS skills built. I do not have to understand quicksort to use the native library sort.

</comment><comment><USER27> My comment is:

No-comp sci is not a branch of maths. Yes-you do need to know some maths to study it.

</comment><comment><USER28> Programming != Math.

Logic is important, but that is mostly orthogonal to any course of math instruction I've ever been exposed to. Now, if your goal is to be an academic computer scientist, then yeah, you do have to know some advanced math, just because the frontiers of research are so far out there. If you're aspiring to be a software engineer/developer, then chances are, outside of a few specialties, you may go weeks without using any math that an elementary- schooler couldn't perform.

A developer who is overly mathematically-inclined is actually a small red flag for me, because I have seen too many people who are very good at math and seem to understand theory, but absolutely cannot write code.

Anecdotally, I have seen much better results from developers who have experience in hands-on trades like mechanics, plumbing, carpentry, etc. There's an element of visualizing the entire system and how the components interact that seems to map over well to programming.

<comment><USER29> >Programming != Math.

Programming also isn't computer science.

>Logic is important, but that is mostly orthogonal to any course of math instruction I've ever been exposed to.

I think that's the issue the author intends to address: computer scientists not having been exposed to a mathematical treatment of logic.

>you may go weeks without using any math that an elementary-schooler couldn't perform

If by "math" you mean "arithmetic and basic algebra," yes. If in "math" you include logic, induction, abstract algebra, graph theory, combinatorics, etc., then you're using math every time you write any code at all, whether it's ensuring you don't write any cyclic dependencies, making sure you correctly handle all return values, or making sure an algorithm doesn't require quadratic time or worse before you implement it. You need math if you want to know that your custom comparators won't cause a sort routine to blow up, to recognize certain possible sources of bugs in unsafe languages, and most of all to recognize and assess the validity of potential optimizations.

I mean, one _can_ program with just a basic grasp of boolean logic and high- school algebra, but they'll have a hell of a time of it.

<comment><USER30> It would be interesting to see a university degree where the running theme is, "We don't teach computer science we teach programming!"

<comment><USER31> It's called "Software Engineering" and many schools have separate tracks for those interested.

[http://www.depts.ttu.edu/officialpublications/catalog/ENGR_C...](http://www.depts.ttu.edu/officialpublications/catalog/ENGR_CS.php#Grad)

<comment><USER32> Naturally, it depends on the school, but the Software Engineering degree I have is heavy on Engineering, then progressing towards software. Lots of physics and math in the first two years, then two years mostly focused on modeling, covering compilers, relational algebra and similar core architectural subjects, progressing towards a final year focused on team management. Boundaries aren't as clear cut as I describe, but this is the progression. It is engineering, which happens to focus on software development.</comment></comment></comment></comment></comment>


Linux Cheat Sheets Right Where You Need Them, on the Command Line - <AUTHOR> https://www.putorius.net/linux-cheat-sheets.html <comment><USER2> "man"?</comment>


Announcing the Django Software Foundation - <AUTHOR> http://www.djangoproject.com/weblog/2008/jun/17/foundation/

<comment><USER2> Hopefully this will help keep the project (and its release schedule) more organized.</comment>


Ask HN: How do I find boutique US consulting groups (for employment)? - <AUTHOR> I work on databases(SQL, ETL); 7+ years ;now working for a large consulting co.  I can't freelance because I am on a visa .I know the obvious answer is networks, but I am new and looking for any sources that I am not aware of <comment><USER2> Have you tried a keyword search on Linkedin? You'll find a number of individuals who specialize in contract staffing for your space.

Adriana Abadi @ Andiamo NYC might a good contact > [https://www.linkedin.com/in/adriana- abadi-44b480112/](https://www.linkedin.com/in/adriana-abadi-44b480112/)

<comment><AUTHOR> Thanks, I usually get calls/emails from staffers but often they are not up to the mark , I am primarily looking for finding firms with a good reputation (and that way compensation)

</comment></comment><comment><USER3> If you're in NYC, I know a few people who might be able to help you out; shoot me an email (in profile).

<comment><AUTHOR> Thanks but I am based out of LA

<comment><USER4> I don't think I'd throw away remote opportunities if they are available.

</comment></comment></comment><comment><USER5> Can you freelance using a boutique consulting or are you looking for full time with them? I like to know because I am looking for something like this as well.

<comment><AUTHOR> I can only do full time</comment></comment>