Learning Computer Science

This is an update from to my earlier  Self Taught Computer Science post.

I’ve started working on the SICP Exercises and so far so good. I’m finding Scheme, the variation I’m using, frustrating but thats to be expected. It’s frustrating because there appears to be no actual standard implementation of Scheme. It’s also perverse that, because it appears so simple, and there’s no standard implementation, people try and create a compliant version of Scheme. Perhaps this is testament to how hard it is to follow a standard as opposed to blazing your own trail the way a lot of popular languages do. There’s another blog post in here somewhere comparing languages that follow standards and languages that …. evolve!

I’m using the DrScheme IDE and I love it for its simplicity. Even though Scheme is frustrating I’m finding it easy to work with. I know Functional languages are based on Lambda Calculus but until I started working in Scheme I hadn’t realised how easy it is to think in functions. This can probably be attributed to the SICP exercises being heavily slanted towards computation and interesting mathematical functions like the Wallis Product or the Fibonacci Sequence. Regardless, I’m finding it easier to think mathematically in Scheme than Perl or Java.

I’ve done one exercise in Haskell so far and its been painful. This is not because Haskell is painful it’s just that almost every tutorial on Haskell I find first wants to teach me how to use the Haskell calculator (my derogatory term for the interpreter), as opposed to telling me how to get the thing to compile a standalone executable. That last sentence is a rant, as I’m digging into Haskell I’m finding more material. I really don’t know what it is about this language that I find so appealing. I’ve seen some really negative reviews of Haskell online but I cannot bring myself to hate it even though it’s driving me a bit mad learning it. Only time will tell if Haskell and me are meant to get on.

So far I’m finding SICP time consuming but digestible. I’m noticing a marked increase in complexity, I’m just hoping I can get through enough during my holidays to learn something.

Self Taught Computer Science

Over the last year I’ve felt as if I’ve reached a plateau. I cannot put my finger on why this is or why I feel like this but regardless of what programming language I use C/Perl/Java I feel like I’m just moving boxes. This is not the first time I’ve felt like this either.

I don’t think this is a problem with the languages I’m using I think its more of a problem with me and the applications I tend to be working on.

After a while (not a very long while) developing CRUD applications loses its appeal. Developing network apps, GUI’s etc… they all start to look dull when you’ve done them a few times. My experience with GUI’s is very limited so the above statement is an assumption in that regard.

I’ve no idea why this is but I’m sure more experienced programmers could probably shed some light on this. I personally think that unless something stretches your ability it will eventually lose it’s novelty.

Though, surely as a programmer who loves to program I should be able to entertain myself in almost any application I write but for me this does not seem to be the case. I’ve never been one for mental wanking and I would prefer not to start. Over complicating an application just to keep it interesting doesn’t appeal to me in the slightest. I watch programmers fall into this trap all the time and its sad to see them commit this cardinal sin. The worst thing is having to watch them explain their contraption as if it’s a simple solution when it’s obviously a complicated  mess of a thing. Don’t get me wrong I’ve been guilty of this sin and in quite a few cases been oblivious of it. Its almost as bad as the Not Invented Here syndrome so prevalent in our trade.

I personally think my main problem is that I don’t feel as if I am getting any better. I look at old applications and where I would normally see a dozen ways to improve it I see two or none and it’s not because it’s perfect or anywhere close, only a fool would believe so. I know I’ve not learned a fraction of what I need to know in my field so why have I hit this wall. Have I reached the limits of my ability or is this a normal phenomenon that programmers go through?

My opinion is that I’m seeing things through the wrong goggles. Most of my education has been self taught so its been led mostly by interest as opposed to formally taught. I’ve been studying with the Open University for several years now in order to get some background mathematics etc but I still think there are areas that I need to improve on in particular around Computer Science.

Unfortunately the Open University computing courses are geared towards popular topics, Java etc in order to attract more students. Having done a few of their computing courses I wish I hadn’t bothered because I gained more from my own work than I did from the taught courses. I cannot say the same thing about the mathematics though. I decided to start mathematics because I knew that whatever I learnt would be applicable regardless of the current fashion or trends in industry and it won’t be out of date in a couple of decades.

Having looked around this for some time I have decided that what I need to do is to start my own computer science program to build on the mathematics I’m doing with the Open University. The areas I’m really interested in is how to go about writing my own computer language, compiler, virtual machine etc so I’ve been looking around to see what other universities are doing and what books they are using in this area.

Having done a fair bit of looking I spotted a definite trend towards functional languages and the further I looked into this the more I noticed that All Roads Lead To Lisp. Or to scheme or to some variant thereof. Abstracting a bit further I am being steered towards learning a functional language. The two languages that interest me the most in this area are Scheme and Haskell. Now all I need to do is decide what books and resources I need to start a course in this area. Most resources online point towards Structure and Interpretation of Computer Programs (SICP) in order to get started so I am looking at this now. I am not sure if I’ll try and tackle Haskell until I get a bit more familiar with scheme although having looked at Haskell the language is appealing to me.

Watch this space for more installments on my self taught Comp Sci education!

Reading

ReadingManiacs.gif

I love reading. When I was a kid I read mostly fiction, in particular Fantasy and Sci-Fi. Now I read almost no fiction at all compared to how much non fiction I read. Over the last few years I have noticed a trend ie

I spend as much time choosing a book as I do reading it!

I think like a lot of things in life “You Only Get Out What You Put In” or (YOGOWYPI). I prefer my own version, its shorter and has a certain ring to it “Shit in Shit Out!” (SISO) or if you want to make it sound more exotic (SHISHO).

There is a part of me that wants to read more and faster (with comprehension). In fact I went so far as to buy a book by Tony Buzan on speed reading and this turned out to be a disaster. I keep trying to convince myself that its quality that matters not quantity and that reading one book a month is more than enough if it’s a classic in the field. The feeling still doesn’t go away though, I still want to read faster.

Another thing I tell myself is that I need to be reading in a certain direction and I am not talking about left to right top to bottom I mean that I should at least try to have some theme or direction to what I’m reading. For instance: don’t read esoteric collections of books just because they’re classics. I recently read some Greek classics and when I came back to reading mathematics etc it took me a while to shift back into that mode. A part of me wants to believe that its counter productive to read with no direction and another part of me believes that the constant gear changing keeps me on my toes. The esoteric reading method I’m currently employing is driving my sensible side to distraction, for instance over the last month I have been reading  books on:

Probability Theory
Functional Programming
Sophocles
Java
Physics
Stock Market

I am not saying I have finished any of these books yet but I have been reading them and this leads me to another problem. Reading non-fiction is easy but finishing a non-fiction book is very hard depending on your definition of finishing. A loose definition for reading a fictional book is that you have read and understood the plot and read at least 95% of all the content. I would say that with non-fiction if you applied a similar definition ie “read and understood 95% of the material in the book” then I think I’m failing miserably.

For instance, I’ve read Fred Brooks, The Mythical Man Month, cover to cover (twice) and I think I grasped a lot of it but I do not believe I’ve grasped  anywhere near 95% of whats in that book. The same goes for “The Intelligent Investor”, “Peopleware”, “Free To Choose”, “Daily Drucker” and the list goes on.

The other startling thing I’ve learned is that rereading a book does not necesarily mean I get a lot more out of it. Unless I’ve had a chance to study my environment for some time after I’ve read a book I don’t think it has fully sunk in. So rereading does not really benefit me that much unless I’ve had time to digest the first pass. I’m sure there’s some scientific reason for why this is. When I reread a book a year or two later I see things differently etc so can get more out of the book.

Using what I know about my reading habits it didn’t take long to decide what to do. From the following thoughts:

T1.
Assume I get 20% from a non-fictional text on each pass.

T2.
Each pass of a book cannot be within a year of the other. (I must have had time to study my environment ).

T3.
I have a limited amount of time on this earth.

It was easy for me to see that the most important rule I could possibly follow is “Shit In Shit Out!” (SISO).

In conclusion the only firm rule I have and have been able to follow to date is (SISO). I’m not saying I no longer read trash but I’m conscious of it when I’m reading it. Armed with this rule even if a small percentage of what I read sticks then I’ll be OK. I’ve been applying this rule for almost eight years now and I think it’s working. I don’t believe I will ever be a really fast reader and I do not beleive I will ever grasp 95% of any non simplistic non-fictional text in a first pass but I believe that if I apply SISO throughout my reading career I will achieve a lot. My search for other ways to improve how much I can get out of my reading goes on!

Love affair with Foyles bookshop

I am sure I am not the only one who loves Foyles bookshop. I don’t know what it is or why I prefer it above all others in London but I cannot get enough of it. Anyway, I had reason to write them a letter recently about a book I bought there.

The following is the letter;

Dear Foyles,

Having been lucky enough to find myself in close proximity of you for a number of years I have had the great pleasure to get to know you. It’s been a long and fruitful acquaintance that I have much enjoyed and I believe having relieved me of the best part of a small fortune I would imagine that you yourself have enjoyed the times we have spent together.
Don’t assume I am in any way disagreeable about parting with the money.
Like any worthwhile addiction there is always a price to pay.

You Mathematics department is currently babysitting me through a degree, your computing department has tutored me through four jobs and one major career change and just recently your second hand store has been furnishing my mind with classics like Sophocles, Virgil and the Essays of Charles Lamb.

Unfortunately, like a typical Sophocles play this does not end well!

I recently, (a few months ago, I read a lot of books so to me a few months is recent), was dumb enough to buy an even dumber book. This book was to help me do more of what I like to do best faster than I had ever done it before. No, I do not mean Sex, my wife informs me that I am quite fast enough in that area. Yes, it was a book on speed reading, no, this is not a joke. The offending parchment is as follows:

Contributor(s):
        Tony Buzan (author)
Format:
        Paperback  , 198 x 129mm, 96pp
Publication date:
        21 Jul 2006
Publisher:
        BBC Active
ISBN-13:
        9780563520351
ISBN-10:
        0563520353

Having read the first chapter of this scroll I noticed something woefully wrong with it. The first test that is meant to test your reading speed and understanding is complete gibberish. I wondered at this for a while and I decided to test the first and last tests in the book. I tested this using various reading ease scores commonly available on Microsoft Word. The tests confirmed my doubts about the book. The end test is substantially easier than the first test in the book. I can only assume this is to prove that the book has worked wonders on the reader when it has done nothing of the sort. Basically I believe the book to be nothing more than a farce created to make the scribbler of said rubbish some cash by taking advantage of us bookworms.

Having never purchased such expensive toilet paper before. I decided that I should take it back and try and exchange it. Note: I am avoiding puns about used or even partially used toilet paper.

I left it in my drawer and like any avid reader, promptly forgot about it!

Just today 01 July 2008 approximately 14:15 I found the offending papyrus in my drawer and decided that I should try and exchange it for another book. There are several unblemished darlings (books) I have had my eye on that I would love to take on a date and where better to chat them up than at an old friends. So off I went to yours in the hope that I might get lucky and be bringing back a real beauty.

This was not to be!

To cut a long story longish I was met with many woeful looks from you. I was informed that there is a 14 day return policy and that without the receipt there would be no exchange. Like Ajax in a fit of rage I left the offending parchment with one of your brazen cronies ( sounds better than staff, they were actually quite nice ) on the basement floor and exited the building. In such a fit I have never been and I must surely have looked a madman as I dashed across the road like a spurned book lover.

However, unlike Ajax I am not about to throw myself on my sword after a severe bout of self pity. Instead I would like to appeal to an old lover to see sense in this matter.

Kind Regards,
Harry Jackson

I wasnt’t sure what to expect by way of  reply so when I got the following letter it amused me no end. I must say that the following reply was much more eloquent than mine.

Dear Mr Jackson,

As is the ultimate fate of all cronies, it has fallen to me to brazenly resolve the troubles of which you so eloquently speak.

Being the very crony who served you yesterday afternoon, I suspect that I am best placed to do so – and am, by the way, thankful to have been left in your mind’s eye with my personality somewhat intact.

I can assure you that there is no-one more generally suspicious and specifically outraged about the content of certain and so called Self-Help texts. Your humble author has in fact ended up offending several eavesdropping customers with irate tirades against the fake and the spurious. Yet, both sadly and happily, in a homage to freedom of expression we continue to sell all books, and allow the discerning to make up their own minds.

No more do I like the prospect of standing on protocol and informing people that “orders are, in fact, orders.” It makes me feel like everyone that celluloid and print have taught me so painstakingly to mistrust.

However, I have a natural aversion to being bereft of a job at certain key points in my life, and as thus refused your request in order to ensure my continued employment.

Happily though, there is nothing more adept at melting the heart of any customer service operative, crony, and manager thereof than a complaint that shimmers gently, winks and promptly turns in to a message of amour.

Therefore, having engaged in a lengthy discussion of over twenty temporal seconds, we have decided to stand upon our own codex and offer you the proposed exchange.

In the language of the relationship, we donate you the ubiquitously mentioned “trousers”, descend upon one knee and weepily inform you that we would like to give the whole thing another try, but that we still do not think it is the right time to move in together.

Those terms accepted, please return to the Natural History desk at your leisure, where the Unmentionable will be awaiting exchange for what will hopefully be a less distressing tome.

Kind regards,
AI,

My favourite line is “but that we still do not think it is the right time to move in together”. That had me on the floor. Needless to say I am more than pleased with the outcome. I am still very much in love with Foyles.

H
 

Some Books I read in 2006

This list is not exhaustive.
The format is as follows:
Book Name: rating (1 – 10): % read where not 100%.
Agile Project Management with Scrum: 6 :
Agile and Iterative Development: A Manager’s Guide: 6 :
Built To Last: 7 :
Code Complete: 7 :
Good To Great: 7 :
Gung Ho: 5 :
Lean Thinking: 7 :
Patterns of Enterprise Application Architecture: 6 :
Peopleware: 9 :
Rapid Development: 8 : 50%
The Mythical Man Month: 9 :
Thinking in Java: 7: 75%
Who Moved My Cheese: 5 :

A Concise History of Mathematics

I have just finsihed reading.
From: A Concise History of Mathematics
ISBN: 0486602559
Author: Dirk J. Struik
Edition: 4th
If one thing I can say without doubt this book is concise. It flys along at blistering pace and in just over 200 pages covers several thousand years of mathemtical history. If you are looking for a brief overvirew of the topic then this is the book.
It is also a great book to try and guage your interest in the topic. Its well written, well researched and enguaging so if you are unable rummage your way through it then I doubt one of the larger or more in depth coverages would suit you. This is of course coming from someone who has not yet read one of these but I am now looking at some of the older classics that I might try next.
One thing I have to mention is the citations. You could use this book to research topics in maths based on the amount of cited literature at the end of each chapter alone.
Personally I think the amount of work that has gone into this book is vast and in stark relation to its size. I would recommend it to any maths enthusiast or historian.

From Here To Infinity

I just finished
From Here To Infinity
ISBN:0192832026
Author: Ian Stewart
This was tough going. It is not really suitable for people without a decent amount of maths and I have to say that a lot of the topics went clean over my head and I am meant to have a fair bit of maths beneath my belt or at least more then most. I would be hard pushed to recommend it because I did not feel as if I got as much from the book as I hoped. It would not put me off reading any of his other books I just don’t think this book was my cup of tea.

A Mathematician’s Apology

I started reading
A Mathematician’s Apology
Author: G. H. Hardy (Foreward by C. P. Snow)
ISBN: 052142706
this one as soon as it arrived through the post. It is quite a small book and even smaller when you open the cover, at least in this edition it is since they have left over an inch of margin around the text.
I really enjoyed it. I have to say that I enjoyed the forward by Mr Snow as much as the content by Hardy. I think this was because he was writing about the Author of whom I would like to know more whereas Hardy was writing about his subject rather than himself. You can get a feel for Hardy’s character from the text, particularly near the end but I thought that it dealt mainly about his take on mathematics.
The book is definitely some sort of apology, I thinks its open for debate whether he needed to apologize for anything but he obviously felt the need to justify himself in some way.
Personally I don’t think Hardy had any more need to justify himself than Da Vinci, Matisse or Michelangelo, Hardy was an artist its just that his art was mathematics which like some forms of art is not appreciated by the masses. However, this does not mean that what he created wasn’t beautiful or worthwhile. In fact years later it was found that a lot of what Hardy had created was of immense use.

More bloody Books

I am never going to finish “From Here to Infinity”. I was about half way through Mr Stewarts book when I got an urge to browse Amazon, big mistake.
I spotted the following books all of which I ordered
A concise History of Mathematics.
Author: Dirk J. Struik
A Mathematician’s Apology
Author: G. H. Hardy (Forward by C. P. Snow)
The Man Who Loved Only Numbers
Author: Paul Hoffman
A History Of Mathematics (An Introduction)
Author: Victor J. Katz

Fermats Last Theorem.

I have just finished reading:
Fermats Last Theorem
ISBN: 1841157910
Author: Simon Singh
I actually bought this book and had started reading it when I found
“Surely You’re Joking, Mr.Feynman!:”
but I am afraid that Mr Feynman took the lead and this book never got touched again until I had finished the Feynman book.
On the whole I enjoyed it but its a bit dry in places and meanders about the
place, or at least that was my impression. I had trouble seeing the
relevance of some of the writing to Fermats problem and this is where I got the
feeling of the book going off on tangents just to be brought back quite
sharply.
I was also a bit surprised to hear the Authors description of “divide by 0” in
one of the Appendix’s. He says that you cannot divide by zero because zero will
go into something infinitely many times.
I know this is a religious issue for some people but I would have described it
as follows.
2 x 0 = 0 : True
this looks correct and is correct. Its basic algebra. Now when transposing formula we could take the left 0 over to the right side by dividing through by
0 as follows
2 = 0/0
We can see that 2 cannot = 0/0 so division by zero is undefined. Some people
might see it better as follows.
(2 x 0)/0 = 0/0
If the left zeros cancel which they would if 0 was a normal number then we are
left we are left with the absurdity.
2 = 0/0 : Absurd
So 0 cannot be a number or at least not in any normal sense. So to say that 0
divides something infinitely many times seemed wrong to me.
If we look at it another way it might be clearer. If we look at the following
infinite sequence
1/(1/2), 1/(1/3), 1/(1/4), 1/(1/5) ………. 1/(1/n)
the we can see that as
n |–> infinty that 1/n |–> zero
so we have 1/0 which if we could say gives us infinity because 0 divides 1
infinitely many time. That sounds plausible enough but, if we look at the following
infinite sequence
1/(1/-2), 1/(1/-3), 1/(1/-4), 1/(1/-5) ………. 1/(1/-n)
then we can see that as
-n |–> negative infinty then 1/-n |–> zero
but zero is the only number that is neither negative or positive so which
infinity do we pick. Do we say that because the sequence is approaching
negative infinity that it 1/0 is -ve infinity or +ve infinity. This is another
of those absurdities that we ran into earlier when dealing with divide by zero.
Dividing by zero is indeterminable which is why no one says that it divides
something infinitely many times when in fact we have no idea what its doing.
I am sure some clever cloggs will come along after a course in complex
analysis and blow the above out of the water but this is the way I have always
thought of this question.