Understanding concepts in Computer Science

1. Start with a small project and learn the necessary materials. Think of how you would have approached a particular problem before looking at the existing solutions.

2. Take a concrete product and get an understanding of the high level architecture. For example if you are interested in OS, read about linux kernel at high level and various algorithms . Or if you like database, look at Sqlite or mysql.  Think of using a simulators to understand the flow . For example if you are learning Architecture, use SimpleScalar to know how instructions are processed. For networking there is NS.

3. Participate in forums like stackoverflow, quora, programming blogs (Joel on Software, Coding horror, AllThingsDistributed, Steve Yegge for example but this widely varies depending on your interest)

4. Some concepts are hard to understand, but most concepts are harder  to discover in first place (even if they are easy to understand and even obvious —  otherwise everything in CS would have been discovered in 5 years after  invention of the computer ). The stack algorithm for evaluating expressions seems obvious now, but there have been hundreds of not-so-neat tricks that were deployed by hackers earlier

The breakthrough by computer scientists are achieved after years of  struggle with ideas. On top of it, publishing the ideas and getting  reviewed for publication takes lot of time, So what might seem obvious  in retrospective may not be in fact obvious.

Quicksort seems obvious now – its inventor  C.A.R.Hoare narrates an  incident that when he discovered quicksort, it was hard to convince the  people about its efficiency (and even correctness).

Dijkstra narrates that he was working for long time on shortest path  problem, and suddenly one day on a vacation he discovers the proof.  (office hours seem bad even for computer scientists )

5. Some concepts are really hard to understand…but they are just accepted (like electricity) without delving into the deep details. There are different levels  of understanding things and depending on the project we can delve into internals. (When turning on a electric switch we don’t have to think about maxwell’s equations) Also understanding an algorithm in few minutes  may just indicate  smartness,  that doesn’t guarantee s/he can invent a new one.

6. Learning itself is a journey. Some contexts and situation can quicken learning. For example, if you are in a situation where quickly sorting things can have real significance and impact (and all your peers are also working on it, and you can discuss with them and throw ideas, and your boss says your invention would save  company millions of dollars)   you would have discovered quicksort. Put yourself in situations where learning can be enhanced.

This entry was posted in computer-science. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s