Friday, October 31, 2008

 

Algorithms and Dilbert.



Good, now that I have your attention due to the title of my post, I can begin....

Recently I came across this book "The Algorithm Design Manual". I have only been able to read couple of chapters from the book, but it seems like a good book. I would recommend it for folks wanting to refresh their algorithm academics.


On a side note, I recently purchased another Dilbert book - Dilbert and the way of the Weasel. It makes for an interesting read. Again I have been able to only read a couple of chapters from this book, but Scott Adams is truly amazing. Also, Scott is right! ;-)

Both these books are competing for my (precious) time. There is certainly a deja vu here (refer to my earlier post - ). Let the best book win a fair share of my (precious) time!


Stay tuned for more updates...

Labels: ,


Saturday, October 11, 2008

 

Meme of Software Development

I have been in "blogging hibernation" for well over an year....wow!

An article from Charles Petzold motivated me to write this blog entry about my own experience during the initial days as well. It is time for me to talk about my software development meme. I remember it was around 1988 when I had a look at the PC Calculator (a small hand held device from Casio), that my father had purchased for us kids. It had a single line LCD display for around 20 characters and sported a complete QWERTY keyboard. It supported programming in BASIC and had some inbuilt games as well.

I remember the Hi-Lo game in which the computer used to ask for a range and select a number in the range. The end user had to then guess that number. The computer used to respond with "High" or "Low" depending on the user entered input. Thus allowing the user to eventually zoom in on its selection and finally display the number of attempts. Back then I had noticed that for a given range typically the device selected the same number. For example for the range 1-10, it tyipcally selected the number 2. I could not reason out why it selected the same number, but now I understand how difficult it is for a "deterministic" machine to be "random". If you find this interesting then please read about Pseudo Random Number Generators (PRNGs).

My academics in Computer Science started when I enrolled to Bachelors in Computer Science course at Fergusson College, Pune. This was the first time in my life that I saw a PC machine at close range. Our lab had around 15-20 80286 machines. There was no network and these machines had to be booted by floppy disks. Each machine had two 5.25 inch floppy disk drives and we used to boot to MS-DOS in those days. This is back in 1994, when Windows 3.x was not released as yet.

I remember that our first assignment in the first year in college was to write a letter to the Principal. We used the Turbo Pascal editor at that time to save the file. The assignment was essentially to get us comfortable with using the keyboard (there was no pointing device - mouse). We had simple assignments like adding two number, finding the maximum of two numbers. When our professor asked us to extend our program to find largest of 'n' numbers - I was stumped! I kept thinking about how many internal variables I would need to keep and there had got to be a better way to program it. It was then that our professor introduced arrays - a definite life saver for such scenarios.

The machines at the Lab had around 64K of main memory and at times the screen would display a message like "Transient portion of the Operating System has been overwritten, please insert bootable diskette in Drive A". Little did we understand at that point what this meant, apart from the fact that inserting the boot disk resolved the issue and we could continue programming. It was in our third year in course, that we had a course on Systems Programming. And it explained what the transient portion of the OS was and how it could be overwritten etc [refer to page 3 of link for details on transient portion of OS].

Second year in the course, we were introduced to data structures and C Programming language - foundation for years to come. During the second year, our Lab was networked and it was an interesting experience using NetWare. Later on we had support for RAM Disks. Third year introduced Compiler construction (I must admit that it was a rather difficult course for one to pass) and Theoretical Computer Science. We also had a course on programming in Assembly Language. I must admit that the course on Assembly language was a foundation course. Later we had an assignment to simulate a machine and also write a assembler for the same. The assembler used to convert from programming language to machine code, which our virtual machine simulator would intrepret and execute. It introduced some interesting concepts like self modifying code - yes, these programs on the virtual machine could interpret code pages as data pages and modify those. Later on when I learnt about Java, byte-code and JVM, I suddenly had a deja vu.


I then moved on to the Masters course which had advanced topics like Formal Language Theory, Complexity and computability etc. However, foundation was laid strong during the earlier years itself. The learning experience still continues...


This page is powered by Blogger. Isn't yours?