Tuesday, February 24, 2009

What Physics and Computer Science Taught Me About Thinking

Back in the day, as a student, I had the opportunity to study two scientific disciplines. Beyond giving me a solid grounding in each field, these studies actually taught me a thing or two about thinking. These are actually the most valuable pieces of wisdom I got from nearly a decade of higher education.

Pendulum, Diagrammed First, physics taught me that, very often, the way you look at a problem determines how easy or hard it will be to think about it and solve it. When doing physics assignments, I would often spend about 3/4 of the time manipulating the problem statement to find a formulation that made its subsequent resolution straightforward. Very often the calculation ended up being trivial compared to what it would have been using a different representation. I challenged myself to make my weekly writeup fit comfortably on a single sheet of paper without cutting out detail, and I often succeeded.

I learned from physics that it is often best not to rush in to solve a problem. The time you invest in really understanding a problem is typically given to you back several-fold:
  • It simplifies the problem at hand;
  • It creates new learning in your mind, which will make subsequent similar problems easier to tackle.
Second, computer science taught me that there are many ways to skin a cat. Programming is essentially a communication challenge. It is about clarifying initially fuzzy concepts and relations and representing them in code. The way you do this determines how much or how little trouble you're setting yourself up for.

Again, the representation you choose matters, but not quite in the same way that it matters in weekly physics assignments. You're not trying to knock a particular ball out of the park. In a software project you're typically trying to design pieces that will interact together and that you will be using to build larger pieces still.

Of courses the pieces have to "work", but great design means that they have a special quality beyond just being correct: they're easy to understand and use. And they will still be easy to understand in use six months from now, when you return to that code after having been busy with something else. Or when someone else dives into your code.

An operating principle here is to make everything as simple as possible, but not simpler. It usually takes work to get there, but it is amply rewarded in the long run.

To summarize: doing physics and computer science, I learned about the value of making the effort to make things simple. (as Mark Pilgrim said: "A lot of effort went into making this effortless")

Now, the great thing about it is that lessons learned about thinking are applicable wherever there is thinking involved, which is a pretty wide domain of applicability when you think about it. In a future post I want to explore how these principles influence the impact and diffusion of ideas, whether they be theories, methodologies, memes, or musical themes.

2 comments:

  1. This is related to point number one in my blog post on How to Maximize Citations, where I say that reusability is a key factor in the success of a paper. Simplicity in solutions to physics problems makes it easier to reuse the solutions. Simplicity in source code makes it easier to reuse the source code.

    ReplyDelete
  2. I agree 100% sir! Making things simple takes a lot of work and understanding. I am currently working on the question "is fibre cheaper to maintain and repair than copper in telecommunications backhaul?". The answer is "probably". In our minds, it is a very simple, yes or no question, but when you delve in to the details, assumptions and scenarios, you have to take a step back to look at it, manipulate it and formulate the right response to back up a yes or no answer.

    Also, being paid to think is awesome.

    Good post Seb!

    ReplyDelete