Member Login
Fields marked with an asterisk are required
* Email address:

* Password:

Latest Projects
Latest Topspek Performance Score
(source: Lighthouse at Google PageSpeed Insights)


I have worked in many different areas of software development, mainly within engineering and programming, in both the database and application domains. Fresh challenges and opportunities to learn new skills are always most welcome. I have many goals and a determined nature. I like to theorise as I work, and am always on the lookout for principles and rules which may apply to different kinds of task. I find that this improves overall efficiency because concepts and techniques invented or discovered during one particular task can often be extrapolated to other task types.


BSc (Hons). Consisting of computer science, mathematics and systems analysis modules. The Open University, 2004 - 2011. First Class.

Over seven years, I combined my degree studies with my work. I found that the two activities naturally complemented each other - my work determining the modules that I needed to study, and the course modules often suggesting the type of work that I would be most interested in. The following is a selection of some of the subjects I studied.

Computer Science
Relational databases: theory and practice Data requirements analysis ~ Relational theory ~ Entity relationship modelling ~ Logical schema creation ~ Referential integrity ~ Normal forms ~ Database design and implementation ~ SQL ~ Constraints
Modelling computer processes Finite automata ~ Automata with memory ~ Language and grammar creation ~ Reasoned programming ~ Object interaction ~ Concepts of concurrency ~ Programming concurrency ~ Threads
Computing: an object oriented approach Classes and objects ~ Inheritance ~ Modelling, designing and implementing software systems ~ Structural models ~ Invariants ~ Computing and networks
Building blocks of software Data types ~ Sets ~ Binary trees ~ Formal logic ~ Pre-, mid- and post-conditions ~ Rules of inference ~ Recursion ~ Algorithm efficiency ~ Mathematical induction ~ Recurrence systems

Pure mathematics Sequences ~ Conics ~ Matrix transformations ~ Calculus ~ Taylor polynomials ~ Complex numbers ~ Number theory ~ Groups ~ Proof and reasoning
Mathematical modelling Functions ~ Modelling with sequences, matrices and vectors ~ Differential equations ~ Growth and decay ~ Chance ~ Variation ~ Estimating

Systems analysis
Understanding system complexity Mess analysis ~ Cause and effect ~ Positive feedback loops ~ Dynamic equilibrium ~ Chaos ~ Lag ~ Control loops ~ System dynamics ~ Stock and flow ~ Software simulation (NetLogo)


I have used object theory extensively within database design, software engineering and programming. This enables me to create clear and accurate models of real-world systems, resulting in highly organised and extensible implementations of databases and applications.

Engineering skills

I have a sound understanding of the development cycle. I possess strong diagramming skills which enable me to illustrate concepts and models clearly and succinctly. I can produce precise, formal specifications which aim to eliminate the need for debugging logical bugs from finished code, and prevent 'insert-update-delete' anomalies in databases.

Starting with an initial statement of requirements, I can separate out static data requirements from behavioural application requirements. I can turn the static data requirements into a set of distinct entity types (objects), with attributes, relationships and constraints, resulting in a normalised relational database. I can turn the behavioural application requirements into sets of usecase or method pre- and post-conditions, with pseudocode walk-throughs which recursively identify further methods on the method call tree, and help to speed up implemenation by programmers or coders.

Programming skills

I am experienced in several programming languages including C++/Qt, PHP, SQL, Perl, Java, SmallTalk and JavaScript. I have worked mainly on Linux, but have also programmed on Windows.

Over the years I have gained a solid understanding of the principles of object-oriented programming. I can learn new languages very quickly because I possess an almost instinctive expectation of the facilities that any mature language should be capable of providing. So, for example, when writing code in an unfamiliar language, I can usually feel that certain functions should already exist, and thus avoid re-inventing the wheel.

I am comfortable with most of the necessary support applications - DBMSs, compilers, FTP, web servers (Apache), OS command lines, diagramming tools, etc..