@macshonle@c.cim - Mastadon

27 August 2010

How to Live On the Grid

Suppose you are dissatisfied with your life, let’s say the feeling of consumerism is getting you down, is completely “disconnecting from the grid” the most rational response? Swinging from one extreme to another is a bad way to live your life. To simplify your life, you don’t have to oversimplify the issues at play.

Instead of following the latest fads, or running from the latest fears, here are 10 tips to help you live on the grid.

1. Understand credit, don't fear it - Credit can smooth the bumps on the road of life, but it’s a tool that must be handled carefully. Don’t let your card balances get over 50% of your credit limit. To build credit, open credit card accounts and then keep them. When you are getting started, don’t worry about paying it off every month, but always pay more than the minimum. Never be late with payments. Make a plan to pay off balances in the short term.

A car loan will pave the way to you securing a home loan. The credit issue is hard, because there is a lot of hogwash out there, some of which may even sound convincing. No, our credit system is not a “house of cards” ready to collapse. Such conspiracy theories are the result of fear, enabled by ignorance.

2. Save and invest - Index funds are the way to do it. Make your index fund portfolio diverse: Get indexes in real-estate (REIT funds), bonds, and mostly securities (i.e. stocks-- small cap, mid cap, large cap; domestic, international, developing markets). The best company for it is Vanguard.

Try a Vanguard IRA (if your work doesn’t have 401k or 403b) and max out your contributions each year. To hedge your bets, have both Roth and Traditional accounts. The easiest fund to get is Vanguard’s Target Retirement Funds, which diversifies for you.

3. Think Win-Win - Generally, no all-powerful group is conspiring to get you. Participating in economic activity is usually a win-win scenario. Just because some banks are getting money doesn’t mean that you are losing. That said, there are some pretty bad products (financial products, services, or goods) out there that should be avoided.

4. Buy only the soft-bristled toothbrushes - A hard bristled brush will wear away your gum line. There is absolutely no medical reason for 66% of the brushes for sale (medium and hard) to exist. This is actually quite a general lesson: As a consumer, you need to know that some products just shouldn’t be purchased.

5. Think global - Think win-win on a global scale. Jobs are not zero sum (e.g. “moving overseas”) and you should expand your circle of interest to the whole globe. The earth is your community! Welcome home!

6. Eat global - There is some misinformation about the environmental harm of shipping food long distances: growing food locally can cause more stress to the environment for foods that can be grown easier elsewhere. In terms of carbon, the most is emitted when you drive to the store, not when it gets shipped rather efficiently with boats and trains. There are so many great fruits, vegetables and beans (coffee and chocolate, anyone?) that to reject them is to reject some of the greatest pleasures of life.

7. Enjoy food without arbitrary rules - Such misinformation has been spread by the “locovore” and “slow foods” movement, which seem to be nothing more than a PR-friendly version of anti-globalization. Michael Pollan introduced this absurd rule to not eat “anything with more than five ingredients.” Darn, there goes my Rudi’s organic seven grain bread, with 4 grams of protein per slice, 8% RDA of iron, and zero cholesterol. Why? Because seven is bigger than five! Instead of arbitrary rules, choose logic.

8. Drive the speed limit - Not only will you increase your gas mileage (noticeably!), you’ll also avoid those tickets. Whenever I drive by a speed trap I don’t panic, I smile.

9. Start a happiness project.

10. Take charge of your health and find second opinions - Toothbrush issues aside, there is so much we don’t know right now about health. For prevention, it helps to practice common sense.

But what about when you get sick? Seek medical advice, and if it’s something acute, go to the emergency room or call 911 without delay. But what about non-acute problems? It’s not up to any doctor to solve it for you. A doctor cannot make you healthy, only you can. If your chronic rhinitis can’t be resolved by a general practitioner, go see a specialist (like an allergist, or an ear-nose-throat doctor). Unfortunately, such doctors might not have seen a case just like yours before. They might have seen the symptom, but from a different cause. They might recommend prescriptions, but drugs, even though massively manufactured, are still mysterious. MDs are just stabbing in the dark sometimes, but they can sure sound authoritative while doing so. Some doctors are quacks, some doctors are lazy, and when that is the case, you need to find other doctors instead.

So, what about that case the MDs can’t solve? Try non-MDs. Acupuncture and chiropractic adjustments have been shown to be beneficial in a variety of non-acute medical situations. When you see an acupuncturist or a chiropractor, you might actually get to talk to someone who is concerned about your health. You can go deep into your medical history, and you might see some patterns emerging. They might have even seen your case before, cause and symptom, and know how to effectively treat the cause. But, again, they aren’t treating it, you are. Read up about all of your conditions, and try any of the low-risk solutions first. For some, the road to health involves surgery and powerful prescriptions. For others, it just means finding a bottle to squirt saline water.

08 August 2010

Ten Things Every Computer Science Major Should Learn

Meeting the graduation requirements is not necessarily sufficient for being the best computer scientist you can be. For a typical college curriculum, here are the top ten things you should be sure to learn:

1. The basics of economics - An introductory course covering topics like complements and substitutes is vital for working in the greater economy, or just simply understanding it. While the concept of a Giffen Good won’t necessarily help you, knowing about externalities will. It might also help you appreciate that more situations are win-win than you might have realized.

2. How to write a proof - All computer science majors should know how to write a proof. And discrete math, while a part of a well balanced breakfast, doesn’t count. [Induction is just one proof technique, and you can get by without actually knowing much about proofs.] A course in algebra or real analysis is necessary to really write proofs. And by algebra I mean group theory or abstract algebra, not the course you took in high school. For the full benefit, take algebra and real analysis in the same term.

Why is proof writing essential? Because it’s programming! Think about when you first learned how to program: if a task required an “if” and a loop, you might not have had any intuition on where to put them in relation to each other. But now the same task would feel completely natural. Writing a proof is very similar. There is a set of tricks that you learn, and once you learn them things look quite different.

3. How to write - Written communication skills are essential, whether you’ll work in the industry or academia. It’s best if you can find a mechanics course, and not a writing course that is effectively about a different topic. That is, many schools will try to make the writing courses more relevant or interesting by making it be about a special topic. Try to go for the “boring” version of the course.

4. Probability and statistics - There are some things that you’ll only pick up properly by taking a course. Together with the CS major requirements (which should give you discrete math, single variable and multiple variable calculus, and linear algebra) and algebra and/or real analysis, picking up statistics will probably give you a minor in math. Learning statistics can help you work with other scientists on their projects.

5. The current hot topic - In previous decades, it might have been databases, or object-oriented programming. Today it might be web programming or service-oriented architecture. Whatever the current fad is, be sure to take a course in it. If only to see what the fad is about.

6. The halting problem - Most problems cannot be solved by machines. This is a fairly deep idea that our culture has absorbed so well that it no longer sounds shocking. The same goes with radio, Goedel, and the atomic bomb; it wasn’t until postmodern art and the cold war that we could once again cope with these concepts. However, taking a course in computability theory can re-sensitize you to this pretty amazing proof.

7. Pure functional programming - You most likely won’t go into pure functional programming, unless you do research in it or work for a select few companies, but knowing it will help you be a better programmer. The reason is that you will learn many new forms of abstraction, and concepts like Church numbers and continuations and monads and, yes, recursion, and these tools can be applied to your next Java program too.

8. P and NP - OK, this one is already on your critical path, but pay attention anyway. You want to be sure you can correct someone when they incorrectly call NP “non-polynomial.” As if!

9. The topics from the course you’re sure to hate - This could be a CS course you find too-low-level, too-theoretical, or a non-CS course you find too-objectionable, too-hard, or too-boring. If a course like this seems to be an issue for you, and you find yourself explaining to others why you’re so glad you don’t have to take so-and-so, it should tell you that you’ll learn a lot by taking the course! Perhaps you won’t learn the materials of the course, but you’ll learn about your own limits and perhaps more about the justifications you make to yourself. [Hint: They are usually weak.]

10. The non-CS course you’re sure to love - In the end, you should have some fun. This is the course you’ll probably get the least out of, but take it anyway. Do it once. If you happen to love many courses, then good for you, but be sure it doesn’t get in the way of covering the rest of the courses on this list.


My approach here has been practical, based on courses you can actually take. I’ll save a rant on what courses should be available for a different day. I omitted some obvious choices, like a course on logic, even though logic is essential for a computer scientist. Why not recommend it, then? Because taking a course in logic won’t make you more logical! We can’t conflate the two concepts. And I believe this conflation is the reason why many lists about “what colleges should be teaching” are so often off the mark. Instead, I’ve focused on learning objectives that are likely to be learned.

04 August 2010

Why Wave Failed

There are many narratives describing why Google Wave failed: "It was too confusing," "It wasn't different enough," "It was a solution looking for a problem."

But what really killed it isn't being talked about much: Network effects.

A network effect, or network externality, is an economic term referring to when the value of a product or service increases the more users it has. Imagine being the first person to own a fax machine: if there isn't anyone to send faxes to, it's not very valuable. It's the reason why websites like eBay and Facebook seem to dominate instead of existing among many competitors. (In Japan, Yahoo! Auctions was an early mover, and is the dominant player; and Google's Orkut service is the preferred social network in Brazil.)

Google's reason for killing Wave is that "Wave has not seen the user adoption we would have liked." And all of that can be traced to how Wave was introduced. After a tremendous presentation at Google I/O, there was real buzz and anticipation for Wave. It was a prize to be able to get a Google Wave invite. Eventually, I got a Wave invite too. I signed up as fast as I could and then... I did nothing.

I signed into Wave and sent a Wave to the person who invited me. Only, they weren't on Wave much, so it took them a while to get back to me. I wasn't on Wave much after that, because there was no one to talk to. I think you get the idea. In some cases, causing an artificial shortage of supply can be beneficial. But that is the exact opposite of what you want if your product is subject to network externalities.

Ironically, Google seemed to learn this lesson too late, and then had a much misinformed launch for Buzz. Buzz is Google's... well, I don't think Google is really sure what Buzz is supposed to be. It's kind of like Twitter, but more like Tumblr. Tumblr is a light-weight blog, without the Twitter character limits, and primarily works as a link dump. Tumblr doesn't allow comments, while Buzz does. Anyway... Buzz's launch failed because suddenly everyone with a Gmail account had a Buzz account, which just so happened to reveal information about who you email the most. Whoops.

But Buzz isn't catching on and partly that's because Buzz has to worry about the network effect in a different way: Users have finite energies to dedicate to social networking. Facebook fills one aspect, and Twitter picks up the slack by being different in some key regards. Getting a Facebook account is valuable, because so many people are on Facebook. The same is true with Twitter. But these are active users, which provide you with a reason to go on and stay on. Knowing many people with a Buzz account isn't the same if they aren't active on Buzz. And many people disabled their new Buzz accounts anyway, due to its tendency to over-inform you about comments made by friends-of-friends to a post you didn't even comment on.

Google should have been much more open about letting people use Wave. It should have allowed anyone with any-email-account-at-all to automatically have an account. Here's how it should have worked from Day One: If you wanted to send someone a Wave, you would use their regular email address within Wave. That would have then sent them an email with the text of the Wave, plus a link to view the Wave itself. At that point, you could opt-in to Wave and choose to have further updates sent to your email address or to set up reminders to check it only when major updates to the Wave have been made. Seeing the advantages of Wave, users would stick around and start sending out their own Waves.

Instead, not even Gmail users got a Wave account. Hardly anybody got a Wave account. And those who did found it to be just-another-website-to-check. Had Google even done the cursory Gmail-integration that Buzz has, and made Wave part of Gmail, it might have seen more success.

Although, actually, it wouldn't. There were too many other problems:

1) Users didn't want character-by-character typing; it was a flaw, not a feature. IM programs (remember when they were standalone?) could have done this a decade ago, and there's a reason they haven't supported it. Some users don't even like the "is current typing" messages in some IM systems.

2) As mentioned above, there was poor integration with Gmail. Having to check yet another website just isn't productive. [Message to Google: Please integrate Voice with Gmail, for the same reason.]

3) There were major bugs. I tried Wave for a project with three people. I wanted to use it as a wiki and discussion system. It sounded like the perfect application for it. But it couldn't even scale. It had numerous server and client side bugs and poor conversation threading support. It was also far less wiki-like than that Google I/O demo. Really, it was like a different product entirely.

4) None of the extensions seemed to work. Making a new poll, for example, wasn't intuitive or possible. And then "Add gadget by URL"? Really? That's how you make productive users? Instead of showing them a page of possible extensions, and populating the quick access list with a dozen actually useful gadgets, you wanted users to enter a URL?

5) Over half of the screen was by default non-Wave content. I could imagine the default working only for those few folks with very large monitors and the habit of having fully expanded browser windows. Each time I tried Wave, I would have to click to minimize my "inbox," just so I could see content. I bet there is something about that in the usability literature, because any single extra click a user has to make ("it's just one click!") seriously effects their overall experience.

I'm glad that Google is an engineering company, in the sense that they gave a bold idea a fair chance-- there wasn't a real business case, it just seemed like an interesting artifact to make. I just wish it was an engineering company that knew more about economics 101.

Update: Steven Levy's book In The Plex covers some really interesting stories about Hal Varian, Google's chief economist. They do have tons of good econ skill when it comes to auctions!