In defence on hacking

I read a very interesting essay today – Hacknot – To Those About to Hack
that talks about why planning upfront always pays in the long run. There is a very nice story that illustrates the value of planning upfront.

I think that when people write essays like this they tend to provide an analogy that suits the point that they’re trying to make, for e.g. in this case Pro BDUF and Agile bashing.

There are a couple of reasons why the analogy is not quite relevant in this case. Firstly software is not like chopping wood, it’s not like construction infact any comparison that tries to compare software development with any kind of physical object creation is flawed. Physical objects have limitations with respect to the time and effort required to shape them or construct them. The values of these physical constants are irrelevant when it comes to software and in some cases the physical limitations do not exist at all.

Secondly the requirements in almost every software product that I’ve worked on always change after the initial code has been implemented, first because the customer/user is himself not very clear on what is required. It’s quite difficult to describe a large state machine for a CS grad let alone a layman. Also usability design itself is an iterative process for for a product with a UI the requirement churn rate is absurdly high when compared to any physical engineering activity.

So given that requirements are bound to change doesn’t it make sense to practice the one thing that you know for sure is going to happen i.e. change. No amount of planning is going to prepare you for change, you need to practice for change day in and day out by following the training regime of agile methods. TDD, pair programming, daily meetings, refactoring, rejection of BDUF etc. these things prepare the programmer for the inevitable.

I can imagine a version of the story that favors the Agile camp in which the carpenter in the middle of the day decides that he does not need a big log of wood at all! But the fact that wood chopping is a physical activity again prevents me from going ahead on that analogy.

Powered by ScribeFire.

What they don’t teach you in CS class

Software Engineering!!!

A scientist builds in order to learn; an engineer learns in order to build. – Fred Brooks in the Mythical Man-Month.

Following up on my post about the need for a CS degree for programmers, I had started writing this post on how software engineering requires a different set of skills than what is required for a computer scientist. But then I saw that most of what I wanted to say had already been very well captured by a lot of other very famous people, so instead of reiterating, I’ll be posting links to some good reads on this topic.

But before that here is a quick summary of what I think are the most important skills for a programmer, which has somethings in common with those required by a computer scientist but also some that are not.

  • Given a system, have a very good understanding of it’s rules. The systems that a programmer typically works with are the language, the OS, the implementation platform(Java, .Net, Python etc.) and libraries. This knowledge is essential when writing code as well as when debugging issues. Most good programmers have encyclopedic knowledge of the systems that they’re working with, one of the best examples that I can think of is Raymond Chen.
  • Be able to come up with efficient ways to get a particular task done using the rules of the system. I think this is something that you’re born and although this can potentially be learnt, I think the best programmers have an innate talent for this aspect of programming. Some common techniques for solving problems are taught in CS class, but the ones most used in reality are mostly based on common sense. One of the most excellent books that I’ve read on abstract problem solving is “How to solve it: Modern Heuristics” by Zbigniew Michalewicz and David B. Fogel
  • Be able to express their thoughts in a manner that can be easily understood by other programmers. This aspect is something that can only be learnt by experience. This is one area that is very important yet gets very little weightage in CS class. I’ve seen some extremely unreadable code, that when deciphered showed extraordinary problem solving ability. For examples, browse some of the solutions submitted by top rankers at TopCoder.com. One of the best books on this aspect and my recommendation as a first book for any programmer is Code Complete by Steve McConnell
  • Be a good problem solver, this includes having related abilities like systematic elimination of possibilities to reach a solution, hypothesis testing to narrow down causes etc. This again is something that you’re born with and can potentially be learnt to some level. Best book on this aspect that I’ve read is Debugging Applications by John Robbins of NuMega, although this book is windows specific, some of the chapters that deal with debugging strategies and techniques to prevent bugs are invaluable.
  • Use your experience to prevent mistakes. This is another area about which very little is written but you can easily make out professional code by the way in which bugs are fixed. Newbies tend to fix the bug at the point of its happening and that’s it, a professional on the other hand thinks about what caused this kind of error to get introduced in the first place and then puts in checks to ensure that similar kinds of issues don’t enter into code and if they do then get flushed out immediately. Also when faced with similar types of problems, good programmers are able to look at the meta problem and come up with reusable solutions for them.
  • Experience, nothing can compare to having written and maintained 1000000+ lines of code.

And here are the links on the CS vs SE question…

A new kind of adsense scam?

I was reading this article today A Few Secrets You Need to Know about Client-Side Scripting which I picked up from joel.reddit.com

The odd thing is that the site is not a blog, its just one page that someone has setup on tripod, I then remembered reading similarly formatted sites yesterday and for sure they were there in the hot list of joel sub-reddit, check them out

http://zisweenews.tripod.com/things-to-consider-before-redesigning-or-redeveloping-a-website.html
http://kjctyynews.tripod.com/the-web-effect-the-characteristics-of-a-web-website.html

These sites only have this one page and even the usernames seem like fakes. So it seems that someone is setting up these one off pages and then getting them to the top of the ranking in reddit, virtually guaranteeing traffic. The only reason I can think of for someone to do this would be to make money from google adsense.

Also this could be a test-bed before attempting to try the same on Digg.

Powered by ScribeFire.

Moving back to XP SP2 aka Vista is not yet ready

After having eagerly downloaded Vista from MSDN and installed it on my home machine last month, I am formatting my disk today and going back to XP SP2, the biggest problem for me is the extremely slow internet experience, while everything was working smoothly on XP, Vista for some reason is not allowing me to access the internet at a reasonable speed, it must be a problem with the drivers or my hardware, but for whatever reason this is one problem I cannot live with. So bye bye Vista till SP2 rolls out ;)

Vista First Experience

So I finally downloaded Vista from MSDN, at 2.5 GB for all editions it’s surprisingly small. So I burned the DVD, backed up everything I needed and did a clean install of Vista as upgrading would have left hardly any space left. Visually Vista is just stunning, not as much as OS X, but it’s getting there.

After reading Larry Ostermann’s post about the new Vista sounds, I was waiting to hear it but was disappointed to see that the my Sound Blaster Live card was not installed. Also my ADMTek (8511 Pegasus II) USB to LAN converter failed to be detected. So before I start exploring Vista, I need to look for drivers for these devices.

After just one night of usage, here’s what I think,

  • The visual effects are awesome!!
  • The User Access Control dialogs are the most irritating piece of shit, I think Vista SP1 will have an option of turning them off altogether.
  • I like the way when a message box is shown everything else fades into the background, makes it real obvious that the users attention is needed.
  • The task dialogs will take a little bit of getting used to but I think they’re a good idea overall
  • I love the bread crumbs navigation that is now present across most of the shell dialogs
  • Included games are cool :)
  • The network performance while browsing reminds me of the days when I used to browse using a 56k modem


powered by performancing firefox

Interesting reading for August-05-2006

A Spec-tacular Failure – A rant by Jeff Atwood on why the ID3 spec totally suxx.

Google Code Project Hosting – A replacement for Sourceforge? – A good overview of google code base.

An Idiot’s Guide to Neural Networks – Something a programmer can use.

What’s new in JavaScript 1.7 – Looks like they took a lot of pages out from a Lisp book :)

Code checkins after 5 P.M have higher probability of breaking the build – Interesting.

Three Sins of Authors in Computer Science and Math – I’ve been reading a lot of CS papers lately and I can feel the pain.

Java Programmers are the Erotic Furries of Programming – Programmer hierarchy, hilarious!

Is Kevin Rose of digg.com really worth 60 million USD? – Jason from 37signals.com and Scott Rosenberg of salon.com comment on this business week article.

Ultimate List of Free Windows Software from Microsoft – Nothing more to add.

Looks like Vista still has some security issues

Lenovo preloads Suse Linux on Laptops – Could this be the small crack that opens the floodgates to wider alternative OS adoption?

The seven deadly sins of programming – Nice series of articles by Eric Gunnerson.