Learning via osmosis

Sometimes, I read something even if I’m not interested in the subject. It could be a way to pass the time. Or I have to read it due to work. Or I like the author, because I liked what he wrote before.

So I was wondering, do people often read something even if they’re not interested in the subject? I began examining myself for the motivation behind my readings. And I found that I read to learn other things.

The primary reason I have is, if I only read what I’m familiar with, I’ll stagnate. So I read about other topics. I may not actively seek to read about, say spelunking or the collection of coins. But I will read about other topics in passing whenever they come into my attention. There are secondary benefits to this uncoordinated reading. I read to learn the sentence structure, the “voice” of the author, the presentation of ideas.

There is this article on program run time and big-O notation by Raymond Chen. Frankly speaking, I had no idea what he’s talking about the first time I read it. And it’s fairly long. And I still finished reading it. And I still have no, ok fine, marginal understanding of what he’s saying.

Some of the terms made sense. Big-O notation, hashtables, and ternary trees (wow I thought there are only binary trees!). I can’t quite wrap my head around the subject though. I still read it. I guess the secret wish was I’d slowly and eventually learn whatever he’s talking about via osmosis.

You know, knowledge and understanding flowing from a low concentration of stupidity to a higher concentration of stupidity.

This went for another article I read by Scott Adams on investing. I read it to learn about investing from another view point. And because I had nothing to do then, and I read his blog anyway and the article came into my feed reader…

Basically he presented the idea of cutting out the financial professionals managing your investment portfolio. I have little idea and opinions on the subject, so I’ll leave you to interpret however you want.

Maybe this random sampling of subjects is my default mode

Technical courses following the dodo

They’re just not that useful anymore. Once in a while, I’m notified through the company grapevine to go look at some of the available courses. When I’m free (or bored), I’ll glance at the list of technical courses. Boring. Boring. Know that already. Boring. Hmm, interesting, but it’ll never get approved. Know that already. Ok, done, didn’t find any courses I want to attend. Delete email notification.

Dated by the time they’re born

Technology moves fast. By the time that technological knowledge is condensed into a formal course structure, it’s already old. For example, by the time I was slated to go for my ASP.NET 1.1 course, the .NET framework 3.5 was on the horizon.

The technology had to be out and be stable before the company (or department) adopts it. Then there’s budget constraints. Then there’s personnel quota. By the time I get to go for a course, it’s old news. Worse yet, I’ve already mastered practically everything I need on that topic through personal trial and error and Google.

Do you know why cutting edge technology is cutting edge? Because it’s not done before. And if it’s course material, it’s already been done.

Broad basics

They assume you’re a novice. I’m not a novice. If you’re a polymath programmer, you’re not a novice too. If you’re even just a moderately proficient programmer, you’re not a novice too.

Much of the course material can be skipped or at least covered at a quick pace. They never seem to have enough time to cover the advanced material. You don’t need the basic stuff, that’s what reference books are for.

“Oh, you want to know the advanced stuff? We have an advanced course on that.”

I went on that advanced course. And I knew everything covered in that course. Oh wait, there’s that last bit on the last day that seemed useful. On second thought, nah, I knew that too. I was bored out of my mind, crying silently in my heart about the loss of those few days.

I want it now!

As a professional programmer, you’re in a hurry. There’s a deadline. There’s no time to go for a course and then find that you’ve learned nothing that can help you in your current project.

Due to budget and time constraints, you turn to the Internet. Technical and programming forums, discussion groups and blogs. The search engine becomes your best friend. Solving your technical or programming problem becomes thinking up search phrases that gives you the answer within the first few search result pages.

Change, or fade into history

Specific problems arise because of the inability to combine several disciplines together. Suppose you need to grab some data from an HTML page using C# and you figured regular expressions would be useful. You don’t need a full course on HTML. You don’t need a full course on C#. And you certainly don’t need a full course on regular expressions.

You need to know how you can combine your knowledge of HTML, C# and regular expressions together to form a solution.

I don’t have an answer to this. It’s not cost effective for courses to pull in knowledge from other disciplines. It’s not useful for courses not to pull in knowledge. For now, I’ll still rely on programming forums such as Dream In Code and communities like stackoverflow.

Path of a Polymath Programmer Part 1

What is a polymath programmer? First, you need to know Merriam-Webster’s definition of a polymath, who is

a person of encyclopedic learning

Wikipedia says a polymath

may be a person who knows a great deal about several fields of study, a person who has proficiency and competence in multiple fields, or even a person who has excelled in multiple fields.

And to answer the very first question:

A polymath programmer is a person who has proficiency and competence in many programming related activities or tasks. More importantly, a polymath programmer can apply knowledge and expertise from non-programming fields to programming.

After reading the above definitions, your first thought might be, “Oh, a jack of all trades”, followed by “and a master of none”. There’s actually a third line to the phrase, and is particularly important to programming.

A jack of all trades
And a master of none
Though ofttimes better than master of one

In fact, being a master of only one programming skill will get you fired faster than you can say “Sacrebleu“. Technology moves fast, and by the time you understand a new language or technique or concept, another one is invented. If you can’t keep up, you’ll be left behind. Doing one thing well isn’t enough anymore. And this is particularly true in our programming field.

What you need is a broad and stable base of knowledge and skills to support you when you travel the shifting sands of the IT landscape. This base of knowledge must be relatively impervious to change, so you need minimal learning time when a new change is invented. And this is why a polymath programmer will thrive, while the average programmer strives to survive.

So how do you become a polymath programmer? I don’t believe there’s one true path to becoming one, but I can guess. Let me start by asking a question. Have you noticed how some physicists and mathematicians make better programmers? They aren’t any better at programming than regular programmers. In fact, some mathematicians write code that’s an abomination to even look at.

So what’s the secret? They can think. And they have an insatiable curiosity about the world around them, whether it’s related to their field of study or not.

Now let me tell you my journey of becoming a polymath programmer. I have to tell you that it didn’t happen overnight. In fact, it took years. And I didn’t even realise I was slowly becoming one.

It started when I was maybe 9 years old. I remember learning and memorising the multiplication tables. I also learned to play chess, Chinese chess and checkers.

I read voraciously. I adventured with Tin Tin, met characters of Enid Blyton, sleuthed with the Hardy Boys and solved mysteries with Encyclopedia Brown. My parents bought me an encyclopedia set, and hours passed by as I browsed through the books, particularly the ones on science and mathematics. The Norse and Greek gods also provided me with tons of legends about heroes and villains.

I also remember this fascinating story explaining why the earth was bountiful for about 6 months only, because Persephone ate 6 pomegranate seeds given by Hades, so she’s forced to stay in the underworld for 6 months. Persephone’s mother, Demeter, the goddess controlling seasons, wept whenever her daughter went underground, and thus the unfruitful and harsh seasons of fall and winter.

Great, but what does all this mean for you? It fires up the imagination, and as Albert Einstein says, “Imagination is more important than knowledge“. You’ve got to be able to imagine and visualise a problem before you could solve it. Then you’ve got to imagine and visualise a solution before you could distill it into programming logic, and subsequently into code.

Then came the part that might interest you more. I got a toy computer. Yes, it was a toy, because my parents bought it from Toys R Us. The other programmer geniuses I read about usually had some ancient artifact of a computer like an XT86 or something. I still got an XT86, but that was later on.

Oh yes, back to my toy computer. It had the standard keyboard. No mouse. And a one line output screen. No graphics. Its play functions included

  • questions and answers about general knowledge, math and science (amongst others)
  • games like hangman
  • typing practice

And the most significant one of all? It included a BASIC compiler! Not that I knew what a compiler was then. I was just ecstatic that I could print a “Hello World!“. I pored over the instruction manual, learning all the BASIC commands listed. I learned the concept of commenting by starting a line of code with REM. I learned that numbering the lines of code makes the code run in sequential order. I questioned the practice of numbering in multiples of ten, even though BASIC code ran perfectly fine so long as the numbers were in increasing order.

Then something happened that jump-started my learning process. There was a book fair in my school, and as I browsed through the offerings, I found and bought two distinct sets of books. The first set included 3 (I think) books called Dragon Warriors, a series of role playing games (RPG) with instructions on playing and game mastering. The second set included a few books from the micro adventure series, where you play Orion, an adolescent secret spy whose area of expertise was programming!

How did those two sets of books propel me towards being a polymath programmer? I’ll tell you more in the next part of this series of posts. … Alright, fine, I’ll give you a preview. Both sets of books wove story plots, game problem mechanics and code tuning/tinkering together.

See you on our path to becoming polymath programmers!

Continue to part 2