Monday 30 August 2010


About to give away my book 'modern compiler implementation in Java'. Was skimming through it and thought I'd Blog some key words/definitions for future reference and as a reminder of some of what I learnt during my undergraduate days:

Compiler - used to translate a programming language into executable code.

Syntax - the way in which words are put together to form phrases, clauses, or sentences.

Abstract - disassociated from any specific instance.

Semantic - of or relating to meaning in language.

Stack - an orderly pile or heap.

Translate - to turn into one's own or another language.

Canonical - reduced to the simplest or clearest schema possible.

Instruction - a code that tells a computer to perform a particular action.

Register - a device for storing small amounts of data.

Debug - to eliminate errors in or malfunctions of.

Garbage - unwanted or useless material. (Heap-allocated records that are not reachable by any chain of pointers from program variables.)

Garbage Collection - process by which memory occupied by garbage is reclaimed for use in allocating new records. (Process performed not by the compiler but by the runtime system: support programs linked with the compiled code.)

Wednesday 18 August 2010

Software Development Processes

Just read a bit about Software Development Processes. In particular, the 'Waterfall Model' (where progress flows sequentially from top to bottom through various phases) and 'Iterative and Incremental Development' (where progress is through cycles (iterative) and in smaller portions at a time (incremental)).

Regarding the former, an example of the phases (in order): Requirements specification; Design; Construction (AKA implementation or coding); Integration; Testing and debugging (AKA Validation); Installation; Maintenance.

Regarding the latter, a quote from Wikipedia: "Learning comes from both the development and use of the system, where possible key steps in the process start with a simple implementation of a subset of the software requirements and iteratively enhance the evolving versions until the full system is implemented. At each iteration, design modifications are made and new functional capabilities are added."

Friday 13 August 2010

PhD Submitted, Updating CV, MEng Modules

Submitted my PhD thesis today. Huge sense of relief maa sha Allah. Updating my CV now getting ready for the inevitable job hunt.

Removing the MEng course modules from my CV and Blogging here for the record...

4th Year Modules: Computing for Optimal Decisions, Grid Computing, Intelligent Data and Probabilistic Inference, Knowledge Representation, Management (Economics and Law), Modal and Temporal Logic, Multi-Agent Systems, Network Security

3rd Year Modules: Advances in Artificial Intelligence, Bioinformatics, Computational Finance, Concurrent Programming, Decision Analysis, Operations Research, Organisations & Management Processes, Software Engineering Methods

2nd Year Modules: Artificial Intelligence, Compilers, Complexity and Computability, Computational Techniques, Concurrent Programming, Networks and Communications, Operating Systems, Software Engineering, Statistics

1st Year Modules: Computer Systems, Databases, Discrete Mathematics, Hardware, Logic, Mathematical Methods and Graphics, Programming, Reasoning about Programs

... 8 good long years at Imperial College coming to an end!

Thursday 12 August 2010

Remote-control warfare: Droning on

Blogging for the record an interesting piece entitled "Remote-control warfare: Droning on" about "How to build ethical understanding into pilotless war planes" which featured in the April 3rd 2010 issue of The Economist (Science and Technology section). A quote:
... Ronald Arkin of the Georgian Institute of Technology's School of Interactive Computing has a suggestion that might ease some of these concerns. He proposes involving the drone itself - or, rather, the software that is used to operate it - in the decision to attack. In effect, he plans to give the machine a conscience...
Good article. Worth a re-read.