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 |
Mathematics | |
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.
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.
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..