HN user

mechanical_fish

26,700 karma

I think I'm done here.

Posts14
Comments4,003
View on HN

We didn't have iPhones in 1995, but television filled the same role. The result was no better. It was probably worse.

We'd spend hours watching TV, often while simultaneously being really bored. I can hum the theme song to "Eight Is Enough"; nothing found on Facebook is more terrifying than that.

The stakes are high, so I'm going to be blunt: This is terrible advice. [1]

The amount you're trying to save with "option 4" can be estimated fairly accurately; it's about 0.09% per year. [2] Over forty years, this savings will compound and you'll make 3% more money, if you never screw up the rebalancing, and if you're at least as talented as a Vanguard analyst, and if you remain so even as you grow older.

But the US market has gained more than 5% per year on average, so you could make the same money by just investing for six extra months. Or, looking at it the other way: If it costs you six additional months to get started with option 4, you've just thrown away all your potential gains from option 4.

And option 4 has a much harder conversion funnel. You have to:

  1. surf to Amazon
  2. get the free Kindle version of William Bernstein's *If You Can* [3]
  3. read it
  4. Contemplate the inevitability of your own death.
  5. build a spreadsheet
  6. Make some strategic decisions
  7. open a Vanguard account before noon tomorrow
  8. Carry out at least four trades.
  9. Set up an automatic investment plan.
  10. Repeat steps 4 and 7 every year without fail for the rest of your career.
DON'T DO THIS. You are going to put this off for months. And every year you put it off will cost you in the end.

patio11's advice converts better:

  1. Open a Vanguard account before noon tomorrow.
  2. Visit this page:
https://investor.vanguard.com/mutual-funds/target-retirement...
  ... and pick the fund that matches your age.

  3. Buy some of that fund.
  4. Set up an automatic investment plan to buy more of that fund.
DO THIS TODAY, I BEG YOU, YOUR KIDS WILL THANK ME ONE DAY.

---

[1] I should know; I have followed this terrible advice for years. Writing this essay may be the best investment I've ever made.

[2] Vanguard's Target Retirement Fund for 2055 (VFFVX) has an expense ratio of 0.18% and would be managed for me.

Or I can follow Vanguard's strategy on my own. At the moment, Vanguard's VFFVX consists of:

  54%  VG Total Stock Market index (expense ratio 0.05%)
  36%  VG Total International Stock index (expenses 0.14%)
  7%   VG Total Bond Market II index (expenses 0.07%)
  3%   VG Total International Bond index (expenses 0.19%)
Weighting all those expense ratios by their fraction of the portfolio, I compute that I can achieve an overall expense ratio of 0.09%. So I'm saving 0.09% compared to letting Vanguard do the work.

[3] Technically the book I read back in the day was Bernstein's Four Pillars of Investing, but I'm assuming that Bernstein has diligently refined his teaching over the years and I can safely recommend his latest.

In tandem with looking up the data, I also recommend broadening your social circle by meeting a former alcoholic or two. They're not hard to find. Alternatively, you can read their memoirs, which are even easier to find.

I don't recommend the alternative of seeing some of your friends or relatives drink themselves to death, even as their own closest friends fail to see what's going on. But you don't always have a choice. Sometimes the anecdotes find you.

Anecdotes aren't data, but they are what human beings are designed to believe. If you have trouble envisioning evident facts that are backed by piles of data, perhaps you need to collect a wider range of anecdotes.

Fixed.

Don't get me wrong, I own and rather like Rumours, though I cannot spell it. It helps that, after spending a decade mostly not listening to classic-rock radio, I can hear the thing with fresher ears.

My theory continues to be that the music industry is just unlucky. They entered the internet era with a product that was perfectly positioned to be annihilated by Napster, iTunes, and YouTube.

The pop single was a great product in its day. The recording industry invented pop singles and then spent fifty years perfecting the machine to market them.

To focus the marketing, singles were released a few at a time, and radio stations were encouraged [1] to play the same small playlists relentlessly, over and over, day and night. We all got used to the fact that there were only a few hundred songs on the radio and that they weren't merely free, but inescapable.

To further focus the marketing, the audience was relentlessly diced into genres, and high walls were built between the genres. Sorry, no hip-hop here, this is a rock station; Sorry, no zydeco here, this is a country station. We all got used to the fact that each of our local radio stations had a sound that never changed, and that you could name the songs that would be playing in a bar before you walked in. (Hint: Hotel California.)

For a while there, bands would release carefully-crafted albums that were designed to be listened to in a sitting, but the radio would never play whole albums except on very special occasions. Also, long songs would generally be abridged or avoided. We all got used to the fact that music came in randomly-shuffled three-minute chunks, which just happen to be really quick to download and easy to stuff onto USB sticks.

Then Mephistopheles appeared, holding the first compact disc, and the industry's doom was sealed as it realized that it could make an easy fortune by selling the baby boomers' music to them over again in a new format. And, indeed, that fortune was made. The industry's focus shifted to the past, and parked there. They made a lot of money selling copies of Rumours and Dark Side of the Moon to multiple generations of listeners, and they invested in branding juggernauts like Madonna and Michael Jackson that promised to sell albums for the next fifty years, and we all got used to the fact that one could pick up a copy of Rolling Stone and have difficulty figuring out which year it was from.

Plenty of people complained about this system at the time, but it did make money. Until Napster and Apple came along and said "Hey, your entire musical universe fits inside a small box like this, would you like one? It won't take more than a week to build a collection that is better than the radio." And then, whoops, the meteor hit the dinosaur right between the eyes.

---

[1] This kind of encouragement: https://en.wikipedia.org/wiki/Payola .

You certainly can get clients through email, and I can think of no more valuable skill you could practice than the art of composing a really good email to a consulting customer who lives twelve time zones away. It is not especially difficult to earn $500 per day with that skill, plus the skills you already have. Algorithms, shmalgorithms.

Your English looks flawless to me, by the way, so don't sell yourself short: you can learn to write like a pro, you may already be there, and describing what you have done and what you are going to do in written English prose is where the money is.

Are you actually a Wordpress themer? Learn just that much PHP and you can get all kinds of little gigs, doing work like customizing themes for people's Wordpress or Drupal sites. The advantage of learning a package, like a CMS, is that they lend themselves to little jobs, because most of their code is not customized and oftentimes the custom code is, shall we say, easy to improve. And if you are looking to fill time for a few months - and practice those vital pitching and customer-communication skills - little jobs might be nice.

Incidentally, at some point you might really want to practice whiteboard interviews, but if I were to do that I would specifically practice whiteboard interviews, not TopCoder or algorithms. Whiteboard interviews are a specific skill all their own. That skill is at least as much about being able to think out loud as it is about what you are actually thinking about. Knowing more algorithms might not help. I have found it more valuable to be able to implement bubble sort while telling jokes about bubble sort than to know what quicksort is.

Your questions are good and relevant ones, I agree. Let me rephrase them a little:

"Hello, coworker! Did you enjoy the cake we both got to eat the other day in the company cafeteria?"

"By the way, I'd like to ask you a question, and don't worry: This isn't an interview or anything, so if you can't answer me right away, or if your answer lacks grace, it's not as if you'll lose your job."

"Anyway, coworker: I found this code, which you wrote while working for my company, under the direction of my company's management, and which solves a problem that my company actually has, and which builds upon my team's platforms, languages, and coding standards, and which might even link directly to my code, and which both of us have had a moment to read and think about and which is right in front of us on this monitor. How does this code work?"

"Also, can you help me debug this code I have here? It builds atop the code I showed you last week, and is written in the same language that we all use, and attempts to solve a problem you've seen before – which is not a coincidence, because you were the person who asked me to solve the problem."

These questions are incredibly relevant to our work, but interviews can't cover them. Candidates are not our coworkers and they share none of our context. Instead, interviews are, at best, an exercise in prediction. In practice, they are often an exercise in magical thinking.

During the workday, people aren't being constantly judged. They don't implement functions on whiteboards without unit tests, solve brainteasers out loud during stand-up meetings, or implement quicksort from memory. They do have to explain code to coworkers, but not to people who don't understand the problem space, the language, the background, or the constraints. These rarely-exercised feats of skill are valuable -- sales is valuable -- and our gut feeling is that such feats are somehow related to relevant job skills. But gut feelings are often wrong. And not every job is in sales.

It's highly relevant to getting a job on a software team, but only because most teams are assembled via interviews, and verbally relating stories from your past in a face-to-face meeting is the most effective interviewing technique.

And it's relevant to a job like sales. (That's unsurprising because a job interview is actually a sales meeting.) And many management jobs do have a sales aspect -- you have to justify budgets, sell work inside the company, et cetera.

But if explaining our work to outsiders were a particularly important or routine skill for programmers, we wouldn't be so bad at it. And, on average, we are bad at it. Because our actual on-the-job communication, which we practice all the time, is largely written and asynchronous, taking place on media like Slack or Github. It relies on plenty of job-specific shared knowledge, domain experience, and jargon, and it all happens in the shadow of a job-specific shared codebase that is supposed to speak for itself -- the whole point of software is to build something that works by itself -- but is also perpetually unfinished.

There are social skills that are important to have on a software team, but it's difficult to judge them in an interview. Interviews are staged events. Challenging a candidate to defend a resume in an interview is like asking them to do improv comedy, and selects for many of the same factors: Verbal gracefulness, comfort in the spotlight, the ability to seamlessly change the subject, and the amount of time spent in rehearsal. Good candidates rehearse their resumes. We get to write them ourselves, after all, and with practice we learn to design them with hooks that lead into our best material.

Five Years’ Time 11 years ago

Quite a few RIT grads have come through my employer's engineering teams. There seems to be, or have been, a program there in "network engineering" or something, which places a big emphasis on practical systems architecture and debugging. Its grads emerge full of stories about how hard it is to assemble and debug all the physical interconnects between the network switches in the server racks that you have to assemble before you graduate.

You want these people on your team.

If the question is an algorithms type question, then there is no ambiguity, and either the interviewee answers it or they don't.

Imagine that our interview goes like this:

---

Q: Can you implement a red-black tree?

A: I don't know. My Ph.D. is not in CS and I never actually seem to get around to reading the copies of Knuth and CLRS that I optimistically keep on my shelf. Nobody really wants to pay me to read about trees. So mostly I just use other people's trees, particularly the ones that are hiding inside Postgres and MySQL.

It would be fun to try to figure out how to implement a binary tree by asking you twenty questions -- it's one of my favorite party games -- but it will take a bit of time, and I'm in an interview and feeling nervous, so I'm not sure my odds of success are that high.

I did read on Wikipedia the other day that operations on balanced binary trees are O(log N) which makes intuitive mathematical sense, given that a branched structure with n levels will have 2^n leaves. So I guess balanced trees are pretty fast.

---

What do you do next?

I presume that, given that I've failed to answer the specific question, and demonstrated a degree of "slickness" and "force of personality" in the process, that you will ask me if I have any questions, shake my hand, send me out the door, inform your colleagues (including the one who referred me to your company) that I'm a NO HIRE because I couldn't remember the algorithm for constructing a red/black tree, and send me a polite rejection letter the next day?

Perhaps that strategy would have the virtue of being fair. But could you please get it over with during the phone screen? Better yet, could you make sure your recruiters never even email people who don't explicitly advertise CS degrees? Because I'd hate for you to waste a single minute thinking about me, and vice versa. Time is precious. If I find enough of it, I might even get around to reading Knuth!

You may think you're doing the candidate a favor by offering to handwave away the details, but the vaguer question might actually be worse. "Can you write a correct implementation of an AVL tree on this whiteboard, in any programming language, in the next thirty minutes" is a terrible interview question, but at least it has a factual answer. [1] "Can you riff on the subject of serializing a binary tree" is an open-ended question that will inevitably be graded on an imaginary curve. And the first rule of human psychology is: When you're asked to grade people on an imaginary curve, your intuition spits out a decision that is built on unconscious bias.

[1] edit: that is to say, it has a factual answer if you ask the question and then fall totally silent. Which would be evil, of course, so in practice you and the candidate will naturally turn this question into a back-and-forth repartee, and it will reduce to the same exercise of unconscious biases as the vague question is.

Let me get the plug in first: if you are on a Mac, try Dash, the app that looks up docs for you. I have it mapped to a keystroke in emacs, and I can sometimes park the cursor atop, say, the word 'render' and look it up in one motion.

(Sometimes it takes more motions, because Dash knows the docs for everything and sometimes doesn't get the context right, but that might also be driver error: the app is always politely telling me that I could learn to use it even better.)

Docs aren't always the best tool but it is good to have them at your fingertips.

patio11 is on to something when he suggests using your own codebases. Keep them all on your machine. Learn how to search them. (I use emacs and its various project-directory search utilities like Projectile and Helm, but there are other tools.)

If you don't have any Rails codebases to refer to yet, Michael Hartl is here to help you.

Your personal library is best because it comes from your perspective and with your memory cues. It also only covers use cases you have actually seen, which sounds like a bug but which is actually a feature. The problem with trying to use public docs as references is that they cover all the features that you will never use.

One drawback of your personal library is that it will always feel obsolete. This is a good thing; it means you are improving. Fix it up in bits and pieces where you can. Borrow ideas from the pages you Google.

There is a school of thought which says that you should use your public Github profile as your personal library. Having dabbled in this for a while, I now reject it. Do not write your notes for an audience larger than one. The amount of time you spend thinking "is it dangerous or embarrassing to record this line of code in my private personal repo?" should be zero. If there is anything worse than having the internet read over your shoulder, it is imagining the internet reading over your shoulder. Buy a big private Github account, use Bitbucket, or run a private server for your hacks and notes.

Take notes on everything you do. In particular, get in the habit of pasting the command-line things that you do into a cheat sheet. This is the beginning of devops wisdom. One reason why the advanced deployer does everything with a script (or Vagrantfile, or Dockerfile) is that the script remembers the steps for you and can be looked up later.

I work for a very large Drupal hosting company. We host important web sites on Drupal for corporations big and small.

Web service software is not secure unless you patch it rapidly. There is no silver bullet. Last year there was a big security hole in Drupal, which we patched. Much like the ones that routinely turn up in Wordpress, which they patched. Much like the ones that happened, what, three or four times to Rails in the last few years? Which are like the ones they found in OpenSSL, which are like the ones they found in bash - bash, which is not supposed to be a web service! But which is nonetheless connected to the web in lo these many ways.

You have to watch for patches and apply the patches. Ubuntu gets six of them every week. There are tools that apply them automatically, or with one line of typing (which rapidly ends up in the autocomplete buffer, let me tell you), and server reboots are only needed once a week or so, but you have to do it. You have to spot the patches and you have to apply them. It is like brushing your teeth, with the occasional excitement of an urgent tooth-brushing emergency. It's mostly boring.

You must also have a plan to recover if a patch doesn't get applied in time, because these patches can be hard to write and can take several tries, and because you won't always be perfectly fast at getting your chores done. So you need to keep your family jewels away from the Apache server process, preferably in an alternate universe.

If you are a company, this stuff graduates from boring to "hard", because how do you know that the employee who swore to do the upgrades every week didn't forget for six critical days? But mostly it is just about patience and routine. Routine turns out to be surprisingly hard.

Hosting your own email works great until you try to actually send any. [1] But if you send enough, you eventually have to deal with the spam infrastructure. Customers will complain that critical transactional emails ended up in user spam folders. One person too many will accidentally mark one of your mails as spam. Or you'll relaunch some cloud infrastructure and suddenly your IP is one that is on all the blacklists because of some earlier history that you could never have known. Or one of your customers will innocently assume that you are Mailchimp and send a whole bunch of marketing email through your server.

The symptom of any such problem is that email starts falling into the garbage, perhaps silently. But if you are watching your stats like a hawk (a costly and very boring hobby ) - or, much more likely, if your customers start screaming about the very-real high costs of lost email - you will figure that out within a few days, so it might not take more than another day to figure out how to get yourself off the blacklist (a manual process) and how to apologize to customers for the lost email (a manual process). But, if you value your time at in any way, your first encounter with that problem will be your last, because email services are cheap and easy. I have yet to pay for mine; in small quantities Mailchimp, Mailgun et al are free. Indeed, given that low cost, why wait to get burned before you stop playing with fire, even if the fire looks cute and innocent and warm right now?

[1] Actually, I'm lying: A much more serious problem which occurs at any volume is that email is another piece of the security perimeter. Even if mail servers had almost no configuration and a history of bug-free operation - which they do not, I am joking, and the joke is not very funny - one of the basic rules of security is to put as much distance as possible between your data and services which connect to outside machines. Mailgun is free in small quantities and runs outside your entire datacenter. The math kind of does itself.

Wow, I forgot just how many days that was, I see. Though I now remember that one of my labs had a storage dewar full of precious biological samples that was a bigger version of this design, and we only refilled it a couple times a month.

$500, eh? Hmmmmmmmmmmmmm.

The non-pressurized LN dewars I've seen had a "plug" that was just a cylinder of foam that slid into the neck of the dewar, with a light plastic cap on top. It was lightweight enough to bob upward at the slightest pressure, releasing gas. It probably had a design with channels such that the lip never sealed completely anyway.

They could easily preserve LN for days. Dewars are impressive.

It's true, it is easy to get carried away by the fact that the Leidenfrost effect can protect you from small splashes of nitrogen on your skin. As the demos show, it's even possible to dip a BARE hand in... very briefly. For the love of god, don't do this while wearing a ring or a glove.

It's objects that are the problem, because they do not evaporate and they do not flow away. One of the worst is cloth, which tends to be wrapped around your skin, so when it gets soaked in LN it promptly gets super cold and then sits there burning you while you try to get it off. I got a tiny splash on one of my socks once. Fortunately it wasn't a big enough splash to do more than sting a lot and teach me never to splash LN on my clothing again.

And, as you point out, the other problem is that protective gloves are essential for handling cold solid objects, but very dangerous to have on your hands when touching the liquid. Which means you need tongs! Long tongs, so that your gloved hand stays safely at one end while the other end is fishing around in the nitrogen.

And, honestly, they are not that hard to learn. Compared to the amount of time it takes to understand the semantics of "stdout", the time required to learn the spelling of "stdout" is nothing.

In a world where millions of Chinese programmers have to use keywords written in a foreign language who am I to complain?

There is little reason to expect that reforming POSIX spelling is going to be any more successful than reforming English spelling.

The USA is not Japan.

Others have already pointed out that our geography is different. But that might not even be the real problem.

I am a fan of trains, but I live in Arlington, Massachusetts, which is not on Boston's rail-transit network, even though the Red Line subway terminates within half a mile of our town line, with a conspicuously available right-of-way leading straight from there to our town center. Isn't that odd?

I was sad to learn that Arlington used to have streetcars. They went through town and extended at least three towns further out. They were torn out in 1955.

I was even sadder to learn that a Red Line train station in Arlington was explicitly planned back in the 1980s, but...

That plan had been supported by the Town of Lexington, but was scuttled by fierce anti-urban sentiment in parts of Arlington.

This quote from Wikipedia (https://en.wikipedia.org/wiki/Red_Line_(MBTA) ) matches what I've heard from local residents, though it's a bit more diplomatically phrased.

So I've got a hypothesis: The USA's once-excellent rail network was deliberately taken apart in response to (ahem) "fierce anti-urban sentiment", a political force that remains strong. Consider this article from last week:

http://www.newgeography.com/content/004788-voting-with-your-...

The most recent “solution” was for the city of Lancaster to propose shutting down its MetroLink rail station in order to prevent lower income people from traveling in from other parts of Los Angeles County.

If you want to "fix the problem" of connecting US cities and towns via rail, your first challenge is to convince the cities and towns to stop openly sabotaging your "fix".

(Corollary to my hypothesis: In the USA, rail proposals of the last twenty years have focused on long-distance, high-speed express intercity travel because such routes don't stop in the suburbs, and therefore don't disturb suburban voters in their splendid isolation. Of course, by focusing on long-distance point-to-point travel, rail throws away most of its advantages relative to flying.)

Speaking of emeritus employees: When do salarymen retire? What happens after that? Does the salaryman finally get to see that beach in Hawaii that his wife has been visiting every year, or does the pension not always stretch that far? Do the perks keep going after retirement even for the non-CEOs?

The glib response is "what 'inefficiencies'?" The U.S. version of the social contract has advantages, but "greater overall efficiency" is not one of them.

U.S. employees are also trained on the job. The difference is that it's a succession of jobs, separated by job searches and interviews – an inefficient and unreliable process.

Statistics show that the average U.S. worker put in 1788 hours per year in 2013. The average for Japan? 1735 hours per year. Neither of these represent world-class efficiencies: The Germans and the Dutch, for example, manage to run their modern economies on less than 1400 hours per worker.

http://stats.oecd.org/Index.aspx?DataSetCode%3DANHRS

The USA does have a significantly higher per-capita GDP than Japan, but the Swiss are higher still, and only work 1588 hours per week.

https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)...

(These are glib analyses, of course, because averages lie in various ways. The fact that Qatar has three times the per-capita GDP of the USA should give one pause; per-capita GDP is not the same thing as "quality of life of the average resident".)

The idea that iPhone manufacturing is somehow "foreign" to Japan is pretty funny. Mobile phones are international products, built with parts and machines and expertise from around the world, certainly including Japan:

http://www.cnet.com/news/japan-manufacturers-said-to-gear-up...

Yes, many phones aren't assembled in Japan these days, but they aren't assembled in the USA either. The Japanese can still field some of the greatest electronics engineers on the planet, but they work on higher-leverage problems than final packaging and assembly.

Like anybody, I have a reflexive tendency to feel pride when a number goes up, but pride in my average-point ranking is tempered by the knowledge that it's a statistic-of-convenience. It's not necessarily there because it's worth tracking or optimizing. It's there because the laziest possible stat, "total points," which tends to scale linearly with tenure and with volume of posts, became boring. So now we also have the second-laziest possible stat, "total points divided by total posts".

I have nothing against the simple stats -- why waste time on complex pseudoscience when basic pseudoscience will do? -- but the risk is that we'll design a stats page by adding numbers one at a time, in laziest-first order, until the screen starts to look cluttered, at which point we'll pick the most promising pattern we've spotted so far and start trying to optimize it. This is a great way to generate Powerpoint slides with lines that move up and to the right, and a lousy way to measure value. The micromanagement of statistical placebos is the occupational hazard of our age, and we should try to push back.

It's easy, too easy, to game my average-points ranking. I should contribute only popular thoughts to popular posts. I should assiduously avoid commenting on anything that's not on the homepage, or replying to people who are not near the top of a thread. I should make sure to comment within the newly-arrived-on-the-home-page time window, which is presumably now measured in milliseconds. I should certainly avoid giving advice to people on Ask HN.

That's no way to live.

Rackspace may have thought that they could mitigate the issue without taking this drastic step. They certainly didn't want to do global reboots.

The engineering team probably spent some time running tests and scribbling on whiteboards, trying to prove that the boat wasn't going to sink. In hindsight, they should have just sounded the klaxon and started handing out life jackets, but you know what they say about hindsight. And there are lots of reasons why the typical engineering organization struggles to accept the inevitable and call for an evacuation. Nobody likes Cassandra. Everybody wants to be a hero. Didn't you say this boat was unsinkable? It's hard to get all the decision-makers into one room. The show must go on. It isn't obvious that this complicated problem leads to our certain doom. Et cetera.

The key to making these things go smoothly is the Chaos Monkey, a.k.a. "conduct constant drills of your emergency responses". If you don't rehearse the response, you shy away from trying it. AWS halts or reboots EC2 instances all the time, and lo and behold, when it comes time to reboot all EC2 instances they don't flinch. Or they flinch less visibly, anyway.

I used to have a static website, before I wised up and moved to Wordpress like everyone else.

I found that, once I restricted myself to the features of static pages, the security risks of Wordpress were a lot less scary:

- You can't hack form submissions if the site doesn't have any forms on it.

- If you're going to require SSH to publish new pages, you can require SSH tunnels to log in to Wordpress or access any admin pages. (I should write up my nginx config for this.)

- If you were prepared to make every site update require a Git push, you can surely afford to disable WP's very scary self-update-in-place feature and perform WP updates from a development server instead.

- A WP site that could be usefully replaced by a static site is vulnerable... how, exactly? Static sites don't accept credit card numbers. Customers can't even log in, so they won't type in their darkest secrets even if they wanted to. Employees can be told to follow rules like "don't use your Gmail password for the corporate WP site" and "don't type anything into the public publishing engine that would cause an emergency if it were published to the public."

The biggest risk is denial-of-service and defacement. Restore from your tamper-proof offline backups, which you need to have anyway. There are probably fifteen different services you could use to be alerted when the website changes unexpectedly or starts serving up malware.

Of course, static websites are faster. Until you turn on Cloudflare's free plan, which makes everything faster still.

In fact, those links look different because they are semantically distinct, and the underlying logic becomes clear as you read.

The small-caps links are inline references to other sections of the same book; their distinct typesetting distinguishes them from mere text.

Because everything in the table of contents is a link to part of the book, these links are not set in small caps or otherwise distinguished — that's a potentially confusing design choice in theory, but I can't complain because it was obvious enough to me from the context that I should try tapping something.

The diamonds are outbound links to other sites. Given that this is a coherent book and not a collection of random posts, this distinction is handy: while reading Butterick, I am more likely to click a link to more Butterick than to click an outbound link which will cause me to lose my train of thought.

You may notice that I carefully elided C to Objective C when selecting examples of things that change. :)

I'm also not sure this is a counterexample. It's just the opposite perspective. From the perspective of a parent, a three-year-old becomes a thirteen-year-old with terrifying speed. A cell biologist would note that both kids are built from the same parts, many of which are also shared with killer whales and the front lawn.

My examples are all easy to flip in this way. The most remarkable feature of iOS is that it is directly descended from the twenty-five-year-old Next system, to the point that it carries all those cute little "ns"es around.

Change is constant, but provided one escapes the traps of lock-in (oops, Adobe Flash, dang!) and resists the whims of fashion, the change can happen slowly and piecemeal. If a new Golang library is important enough, it can always be ported to C later for the benefit of one's great-grandchildren.

What are you afraid of? Go is compiled. You have the compiler. You have the libraries. You have your code. You have perpetual licenses to run these things, and even to fork them. Construct yourself a solid build chain, the kind that works even when you unplug it from the network. Bundle it inside a virtual machine, and it'll probably still be runnable in two decades.

The dependencies that you need to avoid are runtime dependencies, the kind that can disappear overnight. Does my deployment depend on Rubygems or NPM being up? Did I accidentally build in a hard requirement for Google App Engine? Did I use a licensed piece of software whose license could be withdrawn overnight? Is there only one person who can even read my fancy-pants source code, and might that person suddenly decide to become a guru and retire to a distant mountaintop with no cellular access?

But there's no sense in fretting about what might happen on a five-to-ten-year timeframe. Face it: In ten years, the code you write today will look old. Using Java won't save you. The fact that Android is based on Java doesn't mean that ten-year-old Java apps support Android in any meaningful sense. Ten-year-old Objective C code is stale: It doesn't support iOS, it doesn't use new features of Mac OS. How do you even know which Python will be most popular in production in five years, Python 2 or Python 3?

Your code will evolve over the next N years, and if Go spontaneously implodes -- a very unlikely event at this point -- you'll do what the Docker folks are going to do: Keep using it for months or years while you port it to whatever comes next.