Skip to: Content | Navigation | Footer
Dr. Blip's PC-Doctor Blog
I think the real breakthrough that I made that started me on my way to becoming a good programmer is to realize that it's all about psychology and only minimally about algorithms. Most beginning books that I've flipped through don't talk about complexity at all. Let me explain...
Computer software these days is unbelievably complicated. A common metric for measuring the complexity of software is to measure the number of lines of code in a program. Windows is around 10 million lines, for example. (I'm making the number up.) That's 10 million individual parts that all have to work reasonably well together. This is the sort of complexity that's impossible with mechanical parts; mechanical parts simply aren't reliable enough to make something that complex. The only competition for complexity is in circuit design, and I can argue that this isn't as complex as software, either.
Computer programming ends up being about the management of complexity much more than about algorithms. I get into about 100 times more conversations at work about hiding complexity or managing information than I do about algorithm design.
Once I figured that out, my programming skills got enormously better. Now that I've figured that out, writing code is a lot like writing an essay. I'm writing to an audience, and the audience has to understand my point immediately. It's a bit harder than writing a essay, though, because you also have this secondary audience of the complier/interpreter/computer. The compiler has to have the same understanding as the primary audience.
This probably does a lot to remove the glamor from software development for you. However, you should understand that making a million lines of code (or even 10 kloc) understandable to a human being is a very serious undertaking. It's a really non-trivial problem, and people are still trying to figure out how to do it easily. (This includes university research groups, but the funding is higher within companies.)
Here's an example of a really serious problem that hasn't been solved, yet. I'll assume you know about Moore's Law. Until somewhat recently, Intel and AMD have made CPUs faster and faster by accomplishing more per clock cycle and performing more clock cycles per second. Now the speed of light has gotten in the way, and they have to make collections of CPUs on one chip that work together to solve a problem. This has the interesting side effect of moving the problem of speeding up computers from the chip designer to the software developer!
In order to solve the problem, software developers have to write software that does more than one thing at a time. This has been done a lot by computer programmers before, but only by good programmers! It's not easy to do. Suddenly, Moore's Law is in jeopardy not because of lithography limits but because software is too complex to write! It's a potential crisis that's looming in the industry now, and a lot of people are working hard to solve it.
#1 - ken 2007-07-20 15:24 -
Really smart and want's to be a programmer. When can he start?
Re "Computer programming ends up being about the management of complexity much more than about algorithms. I get into about 100 times more conversations at work about hiding complexity or managing information than I do about algorithm design."
Yes! When recruiting I think much of our discussion and questions revolve around this. We try to filter out people who seem to like complexity.
#2 - Bender 2007-07-30 23:01 -
When I reflect back on students and professionals that I've known in the programming and software engineering fields, there is always on thing that separates the good from the bad. That one quality that I always see is ingenuity. The ability to think up a new and innovative solution to a difficult problem.
Book smart computer science students are often only book smart. They read, memorize, practice, and do whatever it takes to ace their exam.
Great leadership in practical computer science and engineering requires innovation and the ability to apply a full breadth of knowledge outside the narrow scope of what is described in a text book or online.
© 2010 PC-Doctor, Inc. | About this site | Contact | RSS | Back to top
Design by Andreas Viklund | Serendipity Template by Carl






