I worked two years at Isra University from 2000 to 2002 in the Computer Science department as a lecturer. I taught Computer Graphics Programming, Algorithm Analysis, CAD, Statistics to undergarduate and masters students. During this time, I also taught C++ and AutoCAD in evening classes at Agha Taj Muhammad Institute Of Information Technology And Management.

During my PhD studies at Newcastle University, I conducted C++ labs and marked C++ exams for undergraduates.

I started learning programming in 1989 on a HP 11C progarmmable calculator. The calculator worked in RPN (Reverse Polish Notation) mode, and the programming was essentially keystroke based with addition of decision making and branching, loops, etc. I wrote programs for everything we learned at school and college that needed calculations, e.g. physics, trigonometry, algebra, numerical methods for calculus, and even a calendar that would take any date and return the day. One of my friends had a HP 15C, and for many years we ran a competition of making the programs shorter and faster - and I can guarantee, this is the best way to polish one's programming skills, it's like an extended game of chess. In the end, our programs became so short, we would think for weeks, sometimes months to shorten it even further. We came across a very old book (before the computers were invented), which had a very efficient method of calculating the value of PI. We wrote programs for this and it would converge to the value in relatively very few iterations compared to the methods described in modern books. What I did not realise at that time was that programming in RPN is very similar to assembly langauge (or it can be called assembly langauge for HP calculators), you load values to stack, and then perform the operations, interchange values with registers and memory locations, and the decision making and branching would work in exactly the same way. For many years I would hear everyone say that assembly language progamming was really hard, not knowing that I was already pretty good at it.

Next I learned GW BASIC, a line number based interpreter version of BASIC as my first programming language ona real computer. Next was Turbo C, I believe it was version 2.0 and Microsoft QBasic. I continued learning various languages as they came along over the years, Turbo C++, Visual Basic, FORTRAN, php, python, Microchip C, AVR assembly etc. Surprisingly, the programming logic hasn't really changed over the last 25 years, just variations of language syntax, additional data and function/class structures, and the ever growing libraries. What makes me really jealous is an improved algorithm, for example to round a number, if it's fractional part is less than half, we discard it and keep the integer part, and if it is half or more, we increase the integer part by one and discard the fractional part. To write a program for this, almost everyone will build the algorithm as below:

let a be a real number

let r be an integer number

if frac(a)< 0.5

then r = int(a)

else r = int(a)+1

But this solution made me really jealous:

r = int(a + 0.5)

To be continued...