The past week has been Week 1of my Ultralearning experiment in which I attempt to teach myself web development, with the goal of being good enough to get a SWE internship next summer.

What’s gone well:

  • Experimenting with work habits. I’ve continued to track my time , and have found Peter Drucker’s maxim to ring true: what gets measured gets managed. I spent more time working this week than I did last week (though the difference was a half-hour). I’ve also switched from 50- to 25-minute sessions; this boosts focus by adding urgency.
  • Using Git. I now commit, push, merge, and pull after every sub-exercise. This can mean spending more time on version control than I spent on the sub-exercise. I accompany commits with comments detailing what exercise the code addresses, and what changes to the program this entailed.
  • Interacting with peers. Learning from Week 0, I joined the Telegram group that the university administering the course has set up. The group comprises instructors and students. It’s helpful to have people working alongside me — which confers a camaraderie I’d miss if I laboured through this alone. The instructors are sharp and responsive — I expect to take full advantage as I graduate to building more involved programs.

What’s gone poorly:

  • Efficiency. I’m currently taking ~180% of the expected time to work through each component. I tend to chalk this up almost entirely to lack of focus and intensity — much to be improved upon in those areas.
  • Ultralearning principles. For the most part, I’ve defaulted to just working through the course instead of being more critical about how I can squeeze every quantum of utility out of my time. This is somewhat necessary — at some point philosophy detracts from action — but if I’m to keep up with and benefit from this over a months-long time scale, I should at least have the principles on my radar as rough heuristics to use in evaluating what I spend my time on.

What I’ve built in the last week:

Notes app (from Part 2 of course contents):

Features include adding and displaying notes, changing ‘importance’ of notes, conditional display of notes based on importance, storing notes in a local .json file, displaying (styled w/ CSS error messages).

Data for countries (from Part 2):

Features include fetching and displaying country data from an API, conditional filtering and rendering of search results, option to display full info of any country, and weather info for a country’s capital from a separate API.

Phonebook (from Part 2):

Adding names to a phonebook and displaying all contacts, alerting user upon adding a duplicate contact, dynamically filter displayed contacts based on search, delete contacts, styled (w/ CSS) success and error messages.

Repo with all my work for this course so far:

Going forward:

  • Measurement. Keep measuring and reflecting. This includes measuring time and thinking through these weekly blog posts — they offer opportunities for reflection, which is worth its weight in gold.
  • Experiment. Continue to experiment with work habits, with a view to improving focus and intensity.

Student @ UBC (Vancouver, BC).