838 karma · joined October 15, 2010
I've written an AI for a similar game, where you can't always even iterate over all your moves for this turn, let alone do a multi-ply tree search.
Using their terminology of Action and Turn, my method was to first evaluate individual Actions using a simpler evaluation function, and apply a cutoff so that only a reasonably number of Actions had to evaluated, then combine that reduced group of Actions together to make a reasonable subset of full Turn moves, then use the full evaluation function to find the best Turn.
Writing a good evaluation function for a complex game is hard, so I picked a whole bunch of inputs and then used a genetic algorithm to find weights for them. (Let the various AIs play entire games, and let the winners breed.)
Works okay, but still can't beat a decent human player very often. (There's enough randomness in the game that the better player doesn't always win.)
In this paper, their Online Evolution beat the other four computer strategies, but they don't mention whether it can beat good human players. If it can't, it's not clear to me whether Online Evolution is a good algorithm. Beating their other four algorithms doesn't seem to be a very high bar.
Older Buffett bought the company.
But the SAT doesn't really go beyond basic algebra, and after getting an engineering degree, that feels burned into my ROM. I retook the GRE over a decade after my last math class, without studying, and still crushed it. Certain skills (reading quickly, parsing questions correctly, working backwards from multiple choice answers) don't leave you.
I'm on call about one week in 6. (About 12 people in the rotation, with two on-call at a time.)
When on call, the ticket queue is supposed to have priority, but managers have an unfortunate tendency to say "that guy's on call so he's not doing anything so let's have him do it." So what ends up happening is that high-severity tickets get priority, then whatever random stuff the manager wants done, then low-severity tickets. So low-severity tickets tend to remain open for way too long because the oncalls aren't making them a priority.
For high-severity tickets, we escalate if we can't fix things quickly. First bring in the other oncall, then bring in the manager, then bring in anyone else on the team who can help.
When a dependency breaks, we can ticket its owners to fix it. If it gives us a high-severity ticket, then they get a high-severity ticket too. Ultimately there's a tradeoff between using fewer dependencies in the name of controlling your own fate, versus using more dependencies to avoid reinventing the wheel. Each team has to find that balance for itself.
I don't enjoy being on call, but I think it's the best solution we have. Stuff breaks and someone has to fix it. If you don't pick someone, then everyone has to fix it. If the same people who build something also have to fix it, they have strong incentives to do things correctly.
They are not easy books. At the time I read them, I had a 45-minute bus commute each way, which gave me a nice forced reading window. I don't know if I'd make it through them today, without public transportation. Too many more entertaining things to read or do at home.
As an employee, you just don't know. So value them at zero. Or, if you want to be fancy, epsilon. And take the cash.
The only book I've read on stock options is _Consider Your Options_ by Kaye Thomas, which I thought was good. I do my own taxes, and there was enough detail in that book to let me figure out the tax implications of my options. (Including AMT the one time I had to pay it.)
The actual mechanics when you already have options are straightforward. You either exercise speculatively (pay real cash to turn options into shares, then hold the shares), or exercise risklessly (pay cash to turn options into shares which you sell immediately for more cash than it cost to exercise). Exercising speculatively has risks -- you pay real money for shares that then go down in value, possibly to less than the strike price, possibly leaving you with a tax bill even though you made a loss. Exercising risklessly is safe.
I don't like to speculate with meaningful amounts of money. If in doubt, sell the stock and diversify. Think of the worst case (the company crashes and you lose both your job and the value you thought the stock had). Better to not have all your eggs in one basket and sleep well. I suspect this is not a popular sentiment there, though.
The real question with options is when you're considering multiple job offers. Company A offers $100k and 3000 options. Company B offers $110k and 5000 options. How do you value the options? For a startup, the usual answer is that you can't, because there's no anti-dilution protection. If the founders want to hose you, they can hose you, by diluting your shares or by firing you right before a vesting date. So I value them at zero and take the job I like better, or the job that pays more actual cash.
(RSUs in a healthy public company are a bit different, since they have an actual immediate cash value. I value them at 75% of the current value of the stock. The 25% discount is because of vesting periods.)
But one of the bad side effects of "free" delivery is a race to the bottom in quality. My neighborhood UPS guy is awesome -- he rings the doorbell, if it's raining he puts a bag around each box, if a box is heavy he'll bring it inside for my wife. The local Lasership folks (different ones every time) are far less awesome -- they just drop the box on the porch, not bothering to ring the doorbell, not bothering with weatherproofing. So we've had a couple of boxes soaked, even when my wife was home, because she didn't hear the delivery.
I'd pay a couple bucks more to get UPS over Lasership, but it's not easy for me to select that option with most web merchants.
I mostly blame cable news for helicopter parenting. The data shows that there is much less violent crime than there was 40 years ago, but when something bad does happen and cable news jumps all over the story, it creates a false impression of the world being a very dangerous place.
Though I suspect soon enough the Northwest Passage will be clear for enough of the year that most freighters will just sail through the Arctic. Perhaps both Panama's government and North America's railroads should be pushing hard for a carbon tax.
Does anyone know of a practical use for a very fast, parallelizable shuffle algorithm that uses few random bits? All the shuffling I've done has used small enough N that Fisher-Yates was just fine.
In Python, sqlalchemy-migrate does this wrong and Alembic does this right. I worked on a big project that used sqlalchemy-migrate, and this caused us pain. It's difficult for a large project to change database versioning systems, so it's important to pick a good one from the start.
Options in already-public companies are quite a bit less risky. I consider employee stock grants in a healthy public company to be worth about 75% of the current value of the stock. (The discount is because of the vesting period. If I change jobs, I lose some of the stock. If I stay at the job just to get the stock, when there's a better opportunity elsewhere, I lose that opportunity.)
That solves the gerrymandering problem. Of course, it doesn't solve the problem of getting whichever party currently benefits from gerrymandering to agree to switch to the neutral algorithm.
Tier 1 means you're so central (at least in most of the world -- countries with local telco monopolies might be exceptions) that there is nobody upstream of you; everyone else is either a customer (who pays you) or a peer.
None of the companies you mention are Tier 1, so they're all paying someone upstream for at least some of their traffic. Every big company has people working to reduce that cost. For example, Apple and Microsoft might decide to peer with each other in some areas, and carry each other's traffic for free rather than paying someone else to carry it. And we know Google has invested significantly in their own fiber.
Solid tires are available, but the reason you rarely see them is that they ride like bricks.
I don't know how you avoid that. If you have 1000 candidates per open position, you probably can't afford to do in-person interviews with all of them, or even all the ones with decent-looking resumes. What's the alternative to phone screens? An automated remote work sample system, maybe?
The first one taught me a bit about the company and team, and gave me a good impression of the interviewer (the hiring manager), which then led to me doing a work sample. (Without the phone screen I don't know if I would have sunk several hours into the work sample.) I ended up getting an offer but not taking it.
The second one also gave me a good impression of the company, team, and interviewer (a senior engineer) and led to me doing an full day of interviews. Which led to me accepting an offer. The one used Collabedit in addition to the phone.
I know they're not perfect, but it's much cheaper to talk on the phone for an hour than to fly someone in for face-to-face interviews. Given way more resumes than resources for in-person interviews, I'd rather narrow the field using phone screens than narrow the field based solely on what's in the resumes.
I saw the part in your article about work samples, and I agree that they're great, but they are significant work for the candidate. So I think it makes sense to do have some kind of phone call first, to see if there's enough mutual interest to make it worth the candidate's time.
Lots of companies don't want to hire new grads, so there's a significant price premium for hiring someone with a couple years of experience. The companies that are willing to hire new grads aren't always willing to give annual raises that reflect that price premium. So lots of programmers with a couple of years of experience see that they can get a 20% raise by switching jobs. So they switch jobs.
(This happens with programmers later in their career too, but the difference between 8 and 10 years of experience is much less dramatic than the difference between 0 and 2. If a company gives the same annual raise to all its programmers in the same performance band regardless of experience, that raise may be too small for the newest ones, even if it's just right for the middle ones.)