The River Thames
The Natural History Museum
Charles Darwin monument
London Skyline
The Natural History Museum London
Nautilus shape: The Fibonacci Sequence and the Golden ratio
The Golden ratio is known as ϕ = ½(1+ √5) appears to be embedded in nature!
Kings College Cambridge
Sightseeing
The Lorenz Attractor
A simple demonstration of chaos with 3 equations.
London Skyline
The Royal Albert Hall
Imperial College graduation ceremonies are held here

 Computing Languages


There is a lot of room for creativity in programming and everyone certainly brings their own style to the coding notepad. To me, programming is similar to Mathematics in that there tends to be more than one way to solve a problem. Below is summary of some of the software packages, languages and operating systems that I have worked with. I shall summarise beginning with the languages and operating systems that I use the most. Just for interest you may want to check the most popular programming languages ranked by their Google search requests.

 

Python Logo Python [open source]  Numpy Library  NumPy  Scipy Library  SciPy

Python is a very versatile language and is now taught in most schools. I have helped many undergraduates with their computing projects and it has been a very enjoyable experience. Python is extremely easy to write however in most mathematical research settings where high speed performance is required researchers often face the "two language problem". SciPy and NumPy are libraries for Python that are essential for almost any scientists; these libraries allow scientists to use functions that are commonly associated with their field. NumPy also facilitates a speed up on the basic list array type in Python whilst the Pandas library is essential for any data handling. 

 

  Julia [open source]

The Julia language is a scientific computing language that I am very fond of because it is similar to Python and thus it doesn't take many lines of code to write something functional. Like Python it is an interpreted language and but its significant advantage is that it is very fast for most calculations. If you can overcome the issue of indexing from 1 instead of indexing from 0 (in contrast to Python laughing)  then it is a wonderful language to write in.

 

  C/C++ programming [GCC open source]

A large portion of my Phd research involved solving partial differential equations numerically and nearly all of the coding was written in C. You can find some of the example code on the scripts and code page. I have written a few small programs in C++ (300 to 400 lines) however I could have easily written them in C if I had to. C++ is a high level language and C is relatively speaking a low level language. With C you have more control over how your code performs and usually this means your code will run very fast; however there is a significant overhead in the number of lines of code that one has to write. C and C++ are both compiled languages, meaning that the compiler will first read all of your code and then produce an executable file for you to run.

 

  Fortran [gfortran open source]

I have coded in Fortran 77 , 90 and variants thereof. Despite Fortran being a very old, it still remains a very popular and efficient language for scientific computing, even NASA have an active production of Fortran code. I became a Fortran programmer as a postgraduate when I needed to use the libraries from the Numerical Algorithms Group (NAG) which were not available to my department in C/C++. Barring a few backward compatibility issues with syntax, Fortran compliers are very good at optimising code. The C versus Fortran debate tends to boil down to: flexibility and portability versus execution time. I would certainly discourage the use of Fortran for beginner programmers, modern languages like Julia and Python by comparison are safer and easier to write at the expense of being slower (but as a beginner programmer you will hardly be writing code that will take longer than 20 seconds to run!).

 

Mathematica and Wolfram Alpha [proprietary closed source code]

These are symbolic manipulation packages that are used mainly by the scientific community, these languages are what I would class as the Swiss army knives of the scientific programming world. I encourage most of my A level and GCSE students to use Wolfram Alpha to check their calculations, it is very good at  simplifying algebra, simultaneous equations, quadratic equations, calculus and graph work. For the most part you only need to enter the question that you're trying to answer in "human readable" form and because it's an interpreted language there is little to learn in order to get it running. Mathematica is a more powerful version of Wolfram Alpha which can be installed on a local machine (optional) and allows use of more specialised modules.

 

Matlab proprietary [closed source code]  GNU Octave [open source]

In many ways Matlab is similar to Mathematica and Python combined. A very powerful programming environment with many built in features such as: scripting, data visualisation, data analysis and numerical computation. Matlab is a very convenient language to use when solving problems however I think this language has past its hay day, the only reason anyone would want to use is it is because Mathworks has a team of developers working on it endlessly. This can assure customers are happy with the end product, customisation, recognised support backed by R&D and QA from Mathworks themselves. I have enjoyed using Matlab, however since switching to Linux I have discovered that all my Matlab code is compatible with GNU Octave which is free and open source. Please support the GNU Octave initiative whenever possible, education should be free for all.  

 

  Perl [open source]

A very flexible scripting language that I used when working for Autonomy plc and I used to parse multiple 80Mb files without too much hassle. The key features of Perl are: pattern matching regular expressions and hash tables. Personally I don't use Perl any more because my use cases fall within the scope of Python, however I have seen extremely talented programmers write code in 1 line of efficient, but very obscure code that would do the same as my 20-30 line code! Its very difficult to write a lasting summary for any programming language because they are all evolving to overcome any deficiencies they may have initially had, at the time of use circa 2005 Perl was known not to be very scalable for large datasets, I imagine now this is no longer the case.

 

R [open source], SPSS/PSPP and Stata [proprietary closed source], SQL

First and foremost I am not a statistician nor a database management expert so my input here is fairly dismissible, but my experience of R has been terrible. Its syntax is nothing short of regrettable and I just cannot bring myself to want to engage with this language. SPSS or PSPP (open source equivalent) is software that allows one to import data and analyse it via the computation of summary statistics, graphs and hypothesis tests. I do like this software however Microsoft Excel is forever closing the gap on the SPSS and who knows maybe Libre Office will follow suit.

Now I only mention Stata here because a few of my undergraduate students needed help with it and so I stepped in, right now its 2020 and the front end of Stata is looking better. The Stata app is old and most Stata tutorials on YouTube are circa 2013. This leads me to believe that the Stata user base is probably comprised of senior members that have little programming knowledge of Python+SciPy. Since big data entered the scene it has been essential to have some database skills and so I spent a little time learning SQL; which to be fair is nice and easier enough to learn.

 

Java [open source] and JavaScript [open source]

I really like the idea of JavaScript, its very easy to learn the website for the language is fun and many programmers endorse JavaScript as the best choice for beginner programmers. For the purpose of general programming I think JavaScript is a very good first choice. I have experimented a with Java and written a code to produce an app that allows users to configure settings for production of the Lorenz attractor. Java has only recently (since 2019) been surpassed in popularity by Python. Despite the large support for Java its not very useful for scientific computing and so its not surprising that I haven't used it since 2002 when the Jike's compiler was still being developed! laughing

 
  GitHub [open source] and Perforce [proprietary closed source]

Keeping track of changes to source code is a big concern everyone from home uses to big businesses. In a professional environment I have worked with the Perforce client on both Unix and Windows workstations to keep file versions logged.

Most companies are now using a distributed version control system like Git. Git is amazing however although its not initially easy to get to grips with, especially if you're going to use the command line alone; GitHub certainly makes it Git easier to use. Right now all of my code is on GitHub and I find this is a popular choice for developers uploading source code for the Linux drivers that I need to compile.


  LaTeX [compilers]  MathJax [open source]

\(\LaTeX\) is a typesetting language for the production of high-quality scientific and mathematics documents; moreover \(\LaTeX\) is a collection of macros written in \(\TeX\). Most modern Phd theses and journal articles are written in \(\LaTeX\). MathJax is a library that enables the writing of \(\TeX\) in webpages, MathJax scripts have been incorporated to some of the webpages on this website e.g. the Math Problems page and the PhD Research page.


  Linux, Unix and Windows [Distrowatch]

I made the switch from Windows to Linux around 2005, this was the time when Ubuntu started to make user friendly for beginners. Prior to this I had worked with Unix and Linux whilst I was working for Autonomy and also when I was postgraduate. To be completely honest, initially I wasn't particularly drawn towards Linux. However Linux has proven to be more secure, faster, customisable, and lower on system resources compared to Windows. Linux is also more stable than Windows and updates usually don't take longer than 10 minutes. Windows has the advantage of being better supported by drivers and is more automated when troubleshooting is required.

If you are new to Linux you can enjoy the best of both worlds by installing Linux side by side on a Windows hard drive, or have a backup Windows hard drive, this will allow you to learn how to maintain a Linux system with less downtime. Once you have become a custom to finding your way around Linux, you will almost always find workarounds for the Windows specific tasks that you may have relied upon, especially since the apps on Linux are just better than their Windows counterpart.

I really enjoy using Linux, my personal distribution usage path has been the following to date:

Windows (Start 1997: 8 years) --> Ubuntu Linux (2 years)--> Debian Linux (4 years) --> Linux Mint Debian (1 Year) --> Linux Mint (5 Years) --> Manjaro Linux (+3 years)

I still maintain a variety of operating systems in my house from Windows, Linux Mint to Manjaro Linux and each one has its own merits.

 

Webdevelopment:   Joomla [open source], Wordpress

At the time of writing this website is powered by Joomla, which is my first usage of a website content management system and it has been a fairly smooth ride so far. The basic idea with Joomla is to type your articles and then get an extension/plugin to supply anything fancy that you may like to have on the website e.g. MathJax, YouTube, JavaScript. Prior to this I had been writing snippets of HTML, CCS, Flash and JavaScript in order to get a functional website and Joomla is by far easier!

I do also have a blog running in Wordpress, however its purpose is to be a publicly visible notepad for myself in order to document fixes to technology problems I have resolved.