Wednesday, July 15, 2009

A Very Short History of Object-Oriented Programming Languages.

After a little research, here is a rough history of Object-Oriented Programming Languages for those of you that are interested (anyone? :-) )

'SketchPad' Program written by Ivan Edward Sutherland in 1961 - with some influence by Douglas T.Ross from the Lincoln Laboratory. Sketchpad was the first program to implement of 'class' and 'instance-based' inheritance (although not called classes and objects at the time) and abstraction through a graphical interface (the pre-cursor and influence on Xero-PARC and the Mac/Windows Graphical User Interface).

It's pretty amazing to think that in 1961 a program existed that enabled the user to create drawings on-screen with shape 'objects' and contraints that could be applied to your drawing. You could drag 'n' drop shapes and it even had the concept of a graphical 'button' which you could press to get it to execute your command. It used the pre-cursor to the mouse which was a light-pen. This was truly an amazing and ground-breaking program which has had a massive influence on OOP and OOD.

See the original live demo of Sketchpad (in two parts). You can see how Graphical User Interfaces evolved from Sketch. I like the way you can point the light pen directly on the screen - that's pretty cool and amazing for the time of course. For further technical details you might like to read the technical report submitted to Cambridge University.

Douglas T.Ross & C.A.R Hoare both sat on the Algol 68 Committee. Douglas T.Ross works on a record-like data structure (called a plex) which in turn influences C.A.R Hoare's ideas on abstract data types
Nygaard and Dahl cited C.A.R Hoare's idea on abstract data types as the origin of the class denition mechanisms in Simula [7]. Simula was the first Object-Oriented programming language, developed by the Norwegians at the Norwegian Computing Center. At a later stage Simula influenced the development of Smalltalk, a pure OOPL.

Bjarne Stroustrup influenced by Simula 67 & C to write 'C With Classes', then evolved into C++

James Gosling influenced by Modula-3, C++ and other languages develops Java

A bunch of 'dynamic' languages such as GRAILS, Ruby etc. emerge based on Java but with functional and dynamic features

The future....

Friday, May 29, 2009

Ode to Java

Oh Java code that strikes the page

Like wisdom siphoned from a Sage
Like random models fierce with light
That make the darkened worlds grow bright
Now opened to the world's great gifts
Now powered by the minds' new lift
May generics bloom as geeks grow wise
While the Source traps bugs within a vise

Monday, May 25, 2009

Working Remotely - Some Hints & Tips

Many development teams - especially in the Open Source world, are distributed geographically.  There are certain challenges with distributed teams which need special attention but luckily there are some great tools around to aid us in our daily work.  Here are some tools and advice, based on my personal experience that may help you work more effectively when working remotely.

Attitude

I believe the most important aspect of working remotely is a good, collaborative work ethic.  Talk to other developers on the team, don't just e-mail them, pick up the phone! open communication is key and without it everything else falls apart.  I cannot understate the importance of picking up the phone (or Skyping).  It's all too easy when you have a question to send a quick e-mail, move on to something else and forget where you were and the context of the question and problem.  You may think i'm stating the obvious, but think about the case of a geographically distributed development environment.  The decision to e-mail a question can lead to the question not being answered until the next day or even later, hindering the progress on that particular task which may have other unforeseen 'knock on' effects.  So, if at all possible - pick up the phone.

Discipline

It takes a certain amount of personal discipline to work remotely.  It's important to have clear objective which are measurable by management.  The developer should provide regular updates against agreed project deliverables.  This is an important part of gaining the trust of the rest of the dev team and management.

Useful Tools

There are a number of tools which can help a great deal when working remotely.  For example, you can author and co-author documents using Google Documents or Buzzword.  You can share larger documents and spare your inbox with Omnidrive.

Use cases can be developed together using on-line collaboration tools such as PBWorks which also has many other useful features to make teams more productive.

Evolve mind maps with Mind42 or MindMeister.  Need to actually talk to each other? well Skype is the obvious choice but Yuuguu lets you share applications too.  WebEx is also a great tool for on-line conferencing and holding secure meetings.  There are free versions of WebEx available.

Taking collective feedback on design has always been tricky, espcially in a distributed development environment. One of the most useful apps for de-centralised design is ConceptShare which allows online collaboration on design by way of contextual comments, markup and a full history of discussion. Another popular collaboration tool is Campfire.

Tracking the time you've spent on projects can be made easier by using a tool such as Klok - a personal time tracker.  Another tool which can be very useful it RescueTime which "gives your team the ability to see how they spent their time and helps them spend it more productively.  Team members have full control over their data.

One great tool for developers - if you happen to use the IntelliJ IDEA is IDE Talk which is instant messaing for developers within the IDE.  I've found this very useful.

If you want to send large files, i've found YouSentIt very useful.

Accessing Your Office PC/Network

It may be necessary at times to access your office network or PC.  Normall, your company will provide you with VPN access to allow you to access the company network remotely.  You can also use tools such as GoToMyPC or VNC, which I have used extensively and found very useful when accessing my office PC.

Thursday, February 19, 2009

A Short Modern Definition of Evolution & Natural Selection

Evolution is a change in gene frequencies (%) in the gene pool (the population of individuals).

Natural Selection is the biased change in gene frequencies - biased in the direction of improvement, improvement for survival and reproduction of those very same genes.

Saturday, August 30, 2008

Neo-Darwinism and the Survival of Genes in Gene Pools


I'm not a scientist, I'm a software developer and I don't pretend to understand genetics deeply but it's important to me that I understand the principles of natural selection - not just the process that Darwin outlined but the modern 'Neo-Darwinism' understanding. So, i'm going to quickly outline how natural selection actually works as I understand it.

Neo-Darwinism is the modern understanding of the process of natural selection (the 'engine' behind evolution). It is a gene-centric view of life and something that Darwin had no idea about as the science of genetics had not been developed during his lifetime.  'So, what is the modern understanding of natural selection..?:

  1. Natural selection is the non-random (see point 2 below) survival of randomly occurring genes in gene pools (genes 'live' in gene pools)
  2. Genes make bodies (like our bodies) - the genes that make bodies that are 'good' at surviving in their environments are the genes that will be 'naturally selected' and therefore will survive. Genes that make bodies that are not good at surviving will be 'naturally de-selected' - i.e. they will not survive.
Technically, it is genes that survive and get passed down the generations (if they are good at producing bodies that can survive well in their environments). Bodies do not survive, individuals of a species do not survive - the physical body dies but if the individual is successful at passing their genes on then the genes will survive. Our bodies are basically survival machines for genes. Sorry about that if you thought your body was a temple.

This is a fact - even if not a single fossil had ever been found, there is hugely enough evidence in genetics laboratories around the world to prove time and time again. It is not disputed, the physical evidence is there and even if it were the 'only' evidence it would be enough to prove the fact of evolution by natural selection. If you want to argue that natural selection is a 'theory' then you should lookup what is meant by the word 'theory' in the scientific world. To make it easy here is the link to the Wikipedia definition of the word (see the scientific definition):

http://en.wikipedia.org/wiki/Theory

The 'theory' - if tested (which it has been over and over again) always works and is the only explanation that works and can be tested.

Unweaving the Rainbow, by Richard Dawkins

We are going to die, and that makes us the lucky ones. Most people are never going to die because they are never going to be born. The potential people who could have been here in my place but who will in fact never see the light of day outnumber the sand grains of Sahara. Certainly those unborn ghosts include greater poets than Keats, scientists greater than Newton. We know this because the set of possible people allowed by our DNA so massively outnumbers the set of actual people. In the teeth of these stupefying odds it is you and I, in our ordinariness, that are here.
RichardDawkins.net

Books I am reading this book at the moment:

Atheist

The Out Campaign: Scarlet Letter of Atheism