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!

Lockhart’s Lament

spiral.jpgI have to thank Philip Wadler for spotting the Lockharts Lament article!

If you are worried about how mathematics is being taught today then read the following article Lockharts Lament. The first few pages describe the problem perfectly. Our education system is being designed by people who have little or no understanding of the task at hand.

Perhaps mathematicians are being arrogant and calling what they do an art. I personally think it’s as much an art as painting, sculpture or poetry. Its quite sad that Wikipedia doesn’t have mathematics listed as an art. Surely there is nothing more expressive than mathematics. Have a look at some of the images here. Anyone with a little mathematics and a lot of people with no mathematics will find these images beautiful.

If art has anything to do with expression then for some there can be nothing more expressive than an equation. Mathematics is fundamentally about describing the world around us and more besides. Physicists use mathematics to as a tool to understand the world around us. This practical applications does not mean that it’s not an art. Ask a physicists if they consider mathematics to be an art and I would bet that most think it is. The E=mc2.jpgmost famous equation today is E=MC^2. The beauty in this is astonishing but its not the most beautiful equations to some, F=MA may be more beautiful depending on your point of view. The fact that these equations are of huge practical importance seems to make some think that mathematics is not an art but merely a tool. Mr Lockhart’s article puts it well

“Music can lead armies into battle, but that’s not why people     write symphonies.”

The sooner we start treating mathematics more like an art and making it interesting the better, until that day almost every student being churned through our education system will hate the watered down shadow of a system our educators deem to call mathematics.

Cannot open your terminal ‘/dev/pts/0’ – please check.

I always get this error when I am working i a chroot trying to use screen. In the past I have fixed it using the following command.

mount -t devpts devpts /usr/CHROOT/dev/pts

When this fails another alternative is the following:

script /dev/null
screen

Its a bit of a hack but it gets the job done.

Atom Schema or DTD

There is none. Stop looking!

Neither W3C Schema’s or Relax NG are capable of describing the the Atom specification so if you want a compliant validator you’ll need to write your own.

For a thread on the issue see:

No W3C Schema for Atom

I also ran into an interesting thread where James Clark puts forward Relax NG as a serious alternative to W3C Schema.

Relax NG vs W3C Schema

Having dealt with both I can say I prefer Relax NG. Its simpler.

SSH stdin is not a tty

I started getting the following error when trying to ssh into a chroot on a debian machine.

stdin: is not a tty

I fixed it using the following entry in /etc/fstab

devpts /dev/pts devpts mode=0620,gid=5 0 0

I’m positive this is not the way I should have fixed it but it works!

DMOZ Corruption

Having tried for several years to get into DMOZ and getting rejected every time I always wondered why. There are literally dozens of sites doing exactly the same thing as me, indeed.com, simplyhired.com etc and they are listed. These site have a lot of clout and a lot of money whereas I am a one man band with little cash.

Imagine my surprise when I came across Corrupt DMOZ Editor. I may just have been a bit naive when I assumed that DMOZ was the real deal but this blog has given me food for thought.

Google and various other large sites use DMOZ for seeding their search or for their own directories etc. So If there is any truth in this and DMOZ is rife with corruption then anyone using the data is perpetuating the problem. Putting on my cynical head I can see how DMOZ could be easily corrupted. What I would like to know is if there is any truth in it or not. If so I can forget about DMOZ.

I actually admire what DMOZ is trying to do. I am not sure if it as relevant as it was but I do believe that there is a place online for a human edited directory. DMOZ needs to change though. It is becoming less relevant as time goes by and it would be a shame to see it all go to waste.

The more I dig into this topic on Google the more I feel dismayed. It looks like a lot of the top editors are corrupt and are disabling account of the lower editors that are not. To paraphrase Charles Adams “Bad Editors drive out the Good”,

Here are a few more interesting entries on the topic of DMOZ.

This guys site got banned after he refused to pay a bribe!

Removed from DMOZ for not paying Bribe

The following DMOZ editor’s account was disabled when he tried to do something about the guys website above.

Editor Banned for doing the right thing

Time for ODP to Close (Danny Sullivan)

ODP Founder Coments (Danny Sullivan)

Lords of ODP

Debian alternatives and Java

The alternaitives system in Debian is a pain in the arse! It’s one of those things that when you need to use it you spend twenty minutes trying to figure out why various paths etc have changed and then you need to figure out the syntax to change to the path that was working before you installed Tomcat or some other related system that downloads a bunch of stuff and sets itself up as default for the rest of the system. It’s a tad irritating.

I am not saying I know a better way to do it but it still pisses me off. Anyway to use a sane version of java I had to run the following command to get eclipse working again.

$:~# update-alternatives –install /usr/bin/java java /usr/local/sdk-5_05/jdk 1
$:~# update-alternatives –list java
/usr/lib/jvm/java-gcj/jre/bin/java
/usr/local/sdk-5_05/jdk
$:~# update-alternatives –remove java /usr/lib/jvm/java-gcj/jre/bin/java

I now have eclipse working again and tomcat installed. I was going to use jetty6 over tomcat but because Debian comes bundled with a binary tomcat distribution I have decided  to use it. This decision may cost me dearly later.