Why Today Is Scientifically The Best Day to Learn Something

In this article, I argue that today will always be the best day to try or learn something new.

You can’t teach an old dog new tricks (well you can, but it’s hard)

Neuroplasticity is the brain’s way of reprogramming itself based on what it does. Your brain actually changes structure with new experiences. Brains also change based on what you think about. So giving energy to the kinds of thoughts you want to have, makes them form more easily the next time. This is one of the advantages of writing (it’s a form of caching thoughts).

Someone who starts playing piano for one year at age seven will likely be much better than someone who starts playing piano at age seventy for one year. Generally, the younger someone is, the less hard-wired and the more open to change their brain is. The seventy-year-old might have a better strategy for learning or more discipline, but learning is going to be harder. Neurons die every day, and they are the things gray matter is made of.

Useful versus true beliefs

There are several kinds of beliefs:

  • those that are true and useful,
  • those that are true and not useful
  • those that are false and not useful
  • those that are false but actually still useful

I think the first and last are particularly interesting. My standard contrast is the following:

A belief that is true and useful is someone telling you: “Look both ways before crossing the street or you might get hit by a car.” An example of a belief that is false but still useful is someone telling you: “Look both ways before crossing the street or a demon will steal your soul.” The latter is clearly not true, but may be useful in the sense that while the underlying premise is not valid, the effects of looking both ways might be enough to get someone to have enough awareness to avoid getting hit by a car. All things considered, I’d take the true and useful belief over the false and useful, but at least the latter is still useful. Really most ideas are somewhere on the spectrum, and a belief that is useful or true at one level of thinking or experience might be not useful or true at another.

Back to the topic at hand

The belief that “today is the best day to learn something” is useful even if it’s not true.

There are several components to why this is the case. First, and probably most importantly, it promotes acting the only time it matters: right now. It inspires action, and often after learning something, I realize that it wasn’t all that hard to begin with. It gets the ball rolling when I might have never done it at all. It’s a really optimistic view to hold.

Second, I save time. What took me four years to learn in college might have taken me five years when I as twice as old. If I want to start surfing, today is the very best day to get out on the board, because every minute I spend flailing in the water is perhaps 1.1 minutes in a couple of years. This is because the body and mind tend toward stasis, and getting them out of that takes energy.

Next, I think it leads to a more interesting life. If I see the current day as being the best day I will ever have to learn, it’s likely that I will want to explore more interesting opportunities. Why wait until later when it will be harder to do something? It’s a major opportunity cost to lose the best day ever. I think that people who want to do software should start as young as possible to get their brains wired up in a way that promotes future analytical thinking. I think most of the really good developers that I know started messing around on their own, many times in high school or before.

Another nice thing is that it makes me better going forward. If I put off learning something useful for a couple of years, that is a couple of years that I don’t get to leverage whatever it is that I put off learning. At some point, people give up learning new things because the time and energy needed to change seem too high relative to the benefit. Why learn to use a computer, I’ve gotten along just fine and I only have an uncertain number of years left. Holding the belief that today is the best day to learn something might overcome that pattern.

Last, I find that I worry less about what other people have accomplished or what skills they have when I remember this. I can still get better at whatever it is that I want to get better at, and today is the very best time to do this. No need to compare.

Caveats

Don’t get hung up on the fact that last week was a better day to learn than today. Why cry over spilled milk? It’s pretty clear that I will not be an NBA player, because I haven’t been playing basketball enough and from an early enough age. Even if I set out today with the intention to join the league, it would probably take too long to get good enough before my playing days were over. Just remember that today is going to be a better day than tomorrow, so don’t waste it.

The technicality police have been thinking things like: “well what if you’re sick or you have something ‘important’ to do?” Fine, you’re right (in a sense.) But in general, I think it’s useful in the long run. Obviously this whole idea isn’t a knock against older people. They should have a lot of useful experience by now.

Your thoughts

What do you think about this idea? True, useful, neither? Are there any equations you know for the amount of time it takes someone later in life to learn something new? Leave a comment below!

What Large Amounts of Caffeine Can Do

Since leaving RewardSnap in the summer of 2011, I took about a month off, and then got back to business. This post is an update of what I’ve been working on and interested in since then:

Current projects and interests:

  • RailsThemes.com (new project!)
  • consulting/contracting
  • Awesome Controller
  • Desperately Seeking Validation
  • office hours
  • Hamming Lunches

RailsThemes.com

A new project!

I had been putting together various websites using purchasable themes from sites like ThemeForest, and it took at least a couple of hours each to translate the HTML and CSS to a format that Rails is happy with that looks like the theme is intended to look. I explained my solution idea to Eliza–basically a themes site for Rails apps–and she started running full speed with it. She called me up the next day and was like, “so I figured out the launch schedule for this.” I was like, “whoa, whoa, I don’t remember signing up for this officially.”

Anyway, I drove to Tennessee Tuesday and we worked until noon on Thursday on ramping up the project. We have a great designer, Luke Flener, for the initial templates and site design, I’m working on the development back-end side of things, and Eliza is heading up the marketing and user-facing development. There’s still quite a bit of work to do before our launch in April. Over the course of the last couple of days, we worked on

If you’re interested in project updates or to eventually purchase a design for your Rails project, check out RailsThemes.com. Also, if you are interested in contributing designs, we are interested in talking with you about it. Thanks!

Consulting/Contracting

I got pretty lucky meeting Jared Brown in person at the April 2011 Indy Startup Weekend, and he reached out to me to work on some very steady billable work. By having that, I have some stability as far as income goes, and I am in a position to pursue more speculative projects or ask for a higher rate for other projects. I’ve worked on a couple of other billable projects since last summer, working with Eliza Brock and some other badasses.

Soapbox: I think there is a fine line between consulting and contracting. I think that consulting is people paying you for your advice and/or experience, preferably by a function of the value provided, not a time-based rate. Contracting is saying, I get paid based on how much I work on the project. See Weiss’s Value-Based Fees for an excellent explanation of this. I was planning on making this point a whole post at some point, so I’ll leave the expansion out. I think consulting is slightly preferable, for reasons that I’ll state then.

Based on my current project lineup, I’d say I’ve been in the contracting side of things. Not many people are using lean and lean startup principles in Indianapolis and the value seems high, so this seems like a good area to be in going forward. Sure, a development firm can help you get your v1.0 out the door, but what then? Who are your customers, how have you been learning while you have been heads-down developing for six months? So I think this is an interesting area.

Awesome Controller

Awesome Controller is a product that takes your old game systems and enables you use your modern wireless controllers to operate them. Awesome Controller has been steadily progressing since winning Indy’s Startup Weekend in the middle of November. We have been working on it a couple of days per month, with a solid three day hack session around the holidays. We currently have the NES, SNES, and N64 basically working with wired PS3 controllers and Wii controllers. Next steps include better wireless hardware support, multiplayer, and business things like taking pre-orders.

We’re aiming to take pre-orders for Arduino shields (a shield is basically a chip that we create whose pins connect to an existing Arduino board, kind of like Legos). We also want to create some pre-assembled units. We recently filed for an LLC and EIN, mostly so we can get a bank account, and thereby take pre-orders. At this point, there has been a fair amount of interest. We applied to Kickstarter, and they said that it looks like the project is a legitimate project. Will need to figure out how this fits into the grand plan, might be a viable way to increase our visability. We’ve done little to no marketing at this point, just having Adwords as a way of getting people to find the site and sign up for our exclusive mailing list.

Overall I’ve learned a lot and have enjoyed working with (in no particular order) Wes Winham, Kyle Shipley, Alex Toumey, and Kail Keusch on this project.

Desperately Seeking Validation

This is the group that a few of us started to practice lean startup techniques. I would say that it has been very helpful in understanding the process of taking ideas and getting some initial validation. I think we’ve done a bit more introspection than true [in]validation the last couple of meetings, so hoping to get out of the building a little more going forward. It seems like we definitely have enough ideas at this point, just need to get them going through the pipeline. If you’re in Indianapolis and this seems interesting, you should check out what we’ve done and contact one of us to get on the mailing list for doing something with your weekends. :)

Office Hours

I announced how to sign up for my office hours a few months ago, and they have been pretty useful so far. I met people that I probably wouldn’t have otherwise, and reconnected with some former coworkers as well. Overall, I think this is a very high value use of my time. I took a break for the holidays, and things haven’t gone quite as well since then. I attribute this somewhat to my marketing/positioning of the “product”. I think that I need to more clearly define what people will get out of meeting, and what I want to get out of it as well. Thanks to everyone who attended so far!

Hamming lunches

About every other Friday, a few of us get together and talk about the answers to these questions

  1. What are the most important problems in your field?
  2. What are you working on?
  3. If you’re not working on these problems, why not?

It’s inspired by the lunches that Richard Hamming talked about in his speech “You And Your Research”, so we call them Hamming Lunches. We’ve mostly focused on business, technology, science, and economic/political problems. I’ve found it pretty useful in ensuring that I don’t get stuck solving too small of problems. We’ve talked about neuroscience, transparency in business, the future of countries, space travel, transhumanism, and the like. I like that it’s not all theoretical though, as we ask, “how can we implement this?” or “why aren’t we currently working on this?” to most of the topics.

Wrapping up

Alright, well that was a long update post, but a lot has changed in the past eight months. Some of these updates could be posts of their own, and others gave me some ideas for things that I need to write up. Thanks for reading, looking forward to rocking out the next few months!

WordPress "No Such User Here" Error With Formidable Forms

I set up a domain on Google Apps with some email addresses, and wanted to send contact information from a WordPress form that was using Formidable. However, the emails weren’t being sent correctly from the form. When I sent a message from my Gmail account, the message went through correctly (I set up another email on the same domain for testing purposes).

Inspecting the mail error logs (for me on the shared hosting, was at ~/mail/new/*), I got things similar to the following:

Return-path: <>
Envelope-to: username@zzzzzzz.com
Delivery-date: Thu, 15 Dec 2011 15:19:24 -0700
Received: from mailnull by zzzzzzzz.com with local (Exim 4.69)
id 1RbJe8
for username@zzzzzzzzzz.com; Thu, 15 Dec 2011 15:19:24 -0700
X-Failed-Recipients: admin@mywebsite.com
Auto-Submitted: auto-replied
From: Mail Delivery System <Mailer-Daemon@zzzzzzz.com>
To: username@zzzzzzz.com
Subject: Mail delivery failed: returning message to sender
Message-Id: <E1RbJe8@zzzzz.com>
Date: Thu, 15 Dec 2011 15:19:24 -0700

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  admin@mywebsite.com
    No Such User Here

I searched around a bit, and it seems like it was Google Apps rejecting the email that I was sending from the shared hosting environment. To solve this, I wanted to authenticate with Gmail and use that as the SMTP server.

I followed the instructions here and it seemed to work out well. I was able to send emails effectively to the Google Mail account after putting in my testing account’s information as the username/password. This worked with WordPress 3.1.

Hope this helps!

Wordpress Posts Not Saving

I was having a problem where Wordpress post drafts on my main blog were not saving. I would press the schedule/publish/update button when I was in the HTML view mode (the default mode that I edit in), and the text would change from a monospaced font to a non-monospaced font. Nothing would happen otherwise. I would press the button again, and all of the text would completely disappear, and my work would be lost. Nothing would save to the database. I had to go into the quick edit mode on the all posts page to actually edit anything. Clearly this was unacceptable.

Here are the steps I took to fix it:

  • Ensure I was running the latest version of Wordpress (I was)

  • Ensure that all of the plugins that I had were completely up to date

  • Disable any new or flaky plugins, or those dealing with editing that might have caused the problem

  • Somehow proofreading got turned on, and this seemed to cause problems. See here to turn off Wordpress proofreading.

After doing that, things seemed to work much better on the saving front.

Titanium and Database Download From Server

My goal: to have a mobile app that downloads its initial database from the server instead of pulling the data down through the normal API one at a time. This was for speed reasons, and there are probably other implementations and methods to try. Basically, if the app has never synced, pull down the database.

A bunch of posts on the subject (not exactly what I needed, but helpful): Using a local database with Titanium Update database and table content DB install from remote sqlite file The official database documentation Some helpful SQLite documentation for generating the dump from your database A nice way to programmatically modify the table that you dumped with some examples

The project happened to be using joli.js for persistence. My code eventually looked something like this:

function checkForBlankDb(callback) {
  if (models.somemodel.count() === 0) { // never pulled from server
    Ti.API.debug("Going to try to download the database");
    activityIndicator.message = 'Downloading database...';
    activityIndicator.show();
    var xhr = Ti.Network.createHTTPClient();

    xhr.onload = function() {
      var f = Ti.Filesystem.getFile('file:///data/data/myprojectpackage/databases/mydb');
      Ti.API.debug("f.nativePath: " + f.nativePath);

      // key if you have opened the db, I needed to extend Joli to do this
      joli.connection.close();

      // remove the file, not entirely sure this is necessary
      if (f.exists()) {
        Ti.API.debug("deleting the file at nativepath");
        f.deleteFile();
      }

      Ti.API.debug("going to write data");
      f.write(this.responseData); // actually write the data we got
      Ti.API.debug("wrote data");

      Ti.API.debug("reconnecting to database");
      joli.connection = new joli.Connection('mydb');

      Ti.API.debug("should have successfully synced.");
      callback();
    };

    xhr.onerror = function() {
      alert("Could not connect to server to download.");
      // TODO: better error handling
    }

    xhr.open('GET', serverpath + '/downloads/database');
    authenticate(xhr);
    xhr.send();
  } else {
    callback();
  }
}

The long and short of it is that if you do something like opening a database mydb, it stores it at the file path listed up in the code sample (file:///blah). This is only for Android, the path for iOS is different. There are ways to generate that path more dynamically, but this works for now. If you want to see exactly what you are creating, use adb -e shell to check out the file system. The callback stuff makes the asynchronous call basically synchronous, because I wanted to do some things immediately after that required the database being loaded. Most of the time, the initial check would pass, and we would not download the database again (just look for diffs.) Hope this helps!