Garo Garabedyan's Divergent Thinking Blog

Design and analysis of algorithms is an ingredient of a software engineer

with one comment

While education can help you find a good job, not any course which offers you to get immediately hired is proper education and can replace the university education. Practical education aims at summarizing the current successes in the field in order to make you as efficient as possible in your future jobs. Design and analysis of algorithms is a theoretical summary of the practical know-how gathered from solving real world problems in more than a hundred categories of typical software problem types and their solutions. While covering cutting-edge technologies which are designed for solving common past problems makes you more efficient for short time since technology is constantly improving, covering algorithm fundamentals will boost your efficiency for career long time.

The bare minimum of theoretical algorithms can be found in the course Algorithms: Design and Analysis (click to view Preview of Part I and Preview of Part II of the course) from Stanford University. Let me warn you that following such lectures is not as entertaining as other tutorials and articles available on the Internet and it requires not only focus but devotion as well.

Let me share that here in Bulgaria are courses where they taught you cutting-edge technologies and the trainers tell you that as you solve more algorithmic problems you will become better at it and this is the way to pass the course in order to get a job offer from the company hosting the course. While they teach cutting-edge technologies the course exams are on using that knowledge to solve algorithmic tasks, which by its nature is not a genuine but rather a frivolous academic process, because the exams are not on topics covered by the course. Sadly, if you do not know where to read from you might never realize that you are solving problems which have been summarized in theoretical computing. The letter can seriously jeopardize your career growth if you decide to change your job for a more challenging one.

To proclaim that a software engineer does not need theoretical knowledge about design and analysis of algorithms is like to proclaim that a master in chess can go without theoretical knowledge about the opening of the game, like to proclaim that a teacher/trainer can be anyone who understands the topic he/she is teaching about and like to proclaim that a surgeon is anyone who can handle a scalpel. The era when a software engineer was anyone who have read a single book on any programming language have completely passed and since then there has been taking place significant improvements making the IT one of the most fastly changing industries.

Peter Norvig, currently Director of Research in Google and previously Division Chief of Computational Sciences in NASA Ames Research Center, have published an essay in 2001 titled Teach Yourself Programming in Ten Years where he summarizes “The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again”.


Written by garabedyan

May 18, 2013 at 08:07

Posted in Uncategorized

One Response

Subscribe to comments with RSS.

  1. true story.

    Petar Marinov

    June 25, 2013 at 09:41

Leave a Reply

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

You are commenting using your 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