Sharing technical knowledge at Codethink


Originally posted here

Codethink’s culture stems from the world of open source software. A large part of what it means to be a Codething is taking part in the sharing of knowledge across the company and learning on a daily basis. This practice drives the development of understanding in different areas of software, programming and allows staff to generally learn as a collective.

One way knowledge is shared around Codethink is through peer-led classes. Recently Daniel, a solutions architect at Codethink, has organised and led a series of classes for other Codethink engineers around Rust.

Rust is a relatively new programming language (Rust 1.0 was released in 2015) but one that is increasingly popular, achieving status as ‘most loved programming language’ in Stack Overflow’s developer survey each year since 2016. Rust boasts a very friendly, and growing community, reliably releasing regular updates, making it an attractive option for developers looking for a project to contribute to.

Rust has been turning heads as a modern alternative to some of the more traditional programming languages. As a memory-safe language, Rust is designed with security in mind — it’s protection against memory corruption vulnerabilities has prompted security engineers to explore its applicability. Focus is increasingly placed on software security in the automotive industry and recent research has pointed at memory safety as a critical problem which needs addressing. This points to Rust as a potential solution and makes it a very relevant language for Codethink engineers, who work on automotive projects frequently.

“It’s *possible* to write good safe clean code in any language but some, such as Rust, make it easier to *not write* bad code in certain senses.” – Daniel Silverstone

Daniel’s Rust course was set up with the ultimate objective that attendees should become comfortable writing code in the language and for the whole group to agree that classes are no longer required. By setting the overall course objective with the group in mind instead of the individual, an environment of collaboration is fostered, where attendees are encouraged to help each other reach a common goal. This is a positive attitude to encourage and one that ultimately benefits a company in their day to day activities.

The schedule for the Rust course was set up with attendees’ work schedules in mind. Daniel delivers 1 hour of lecture style class each week which is recorded for future reference, and attendees agree to a matched amount of signposted, but self-directed, learning. Homework is also set for attendees in the form of programming problems, for which the lecture will be needed in addition to the self-directed learning. Although the course is set to be able to work around attendee schedules and company work comes first, a certain level of commitment to learning is required, which is made clear from the start.

The feedback of the course was positive, the engineers in Codethink share a passion for learning and improving in what they do and the opportunity to take part in Daniel’s Rust course proved popular. As a result of the high interest, the course will be run for a second time with another, larger group of engineers attending. Daniel enjoyed being able to teach other enthusiastic engineers about something he’s interested in and encourage discussion on the topic.

The sharing of knowledge in a company like Codethink is important and allows for technical competencies to develop at a faster rate than normal. This is because staff have more forums to connect on an intellectual level outside of project requirements. For a company where learning is an important part of day to day life, this format proved to be very successful.

“A day without learning is a day wasted. Codethink engineers thrive on learning. Spreading knowledge and skills allows people to improve in all they do.” – Daniel Silverstone

For a company where learning is an important part of day to day life, this format proved to be very successful and allows us to grow our understanding in new technology areas. By doing this we become able to confidently engage with the challenges that those new technologies may bring.

Codethink helps York Instruments to deliver world-beating medical brain-scanner


Originally posted here.

Codethink partnered with York Instruments on a project to develop a new Magnetoencephalogram (MEG) scanner to replace their existing apparatus. This is a neuroimaging device which maps brain activity by recording magnetic fields which are produced by naturally occurring electrical currents in the brain.

The problem at the time was that the capture-and-compute brain of the original scanner was difficult to repair or replace if there was a failure. This was due to the unavailability of the original equipment manufacturer (OEM), resulting in a lack of available parts.

Within the main apparatus of an MEG, superconducting quantum interference devices (SQUIDs), are used to measure very subtle changes in magnetic fields influenced by brain activity. These SQUIDs require super-cooling, commonly with liquid helium, which means that the apparatus to store them needs to be substantial. Liquid helium is also very dangerous to humans so a high level of due diligence is required for the safety of anyone interacting with the scanner. In their new MEG system, York Instruments replaced the SQUIDs used with Hybrid Quantum Interference Devices (HyQUIDs), which are able to operate at higher temperatures than SQUIDs and can operate more accurately. This has positive implications for the safety and cost of the MEG, as less coolant is required.

In this project, Codethink worked on both hardware and software, in a range of different areas including upgrading the Linux kernel used, assisting with updating U-boot, working on the in FPGA and CPLD firmware, working on the core data transfer protocols, the sample data multiplexer, and real-time-displays as well as further software assistance and consulting.

Codethink engineers worked on the full low-level command and control system for synchronising and monitoring a distributed network of data capturing systems. Throughout our time working with York Instruments, Codethink engineers ensured a high standard of code and documentation was maintained.

The development of York Instrument’s main data acquisition pipeline and a variety of GUIs was done in tandem with the hardware design in order to closely integrate the two. One of the most challenging aspects of the work involved developing a system that ensures hundreds of sensors, that were all connected to different computers, actually took measurements within microseconds of each other. Engineers managed this by means of a pair of counter rotating, fibre-optic loops, with a precise calibration algorithm.

The sensors send thousands of samples of data per second over the network to a single system. This system is required to rapidly match up each incoming sample so that all sample numbers are grouped together. Due to the volume of data that the system is required to match together and the minimal amount of time available to do it in, the multiplexer needs to be very efficient. Once the data has been gathered and grouped, it saves samples to HDF5 format and also multicasts to a LAN for real-time data consumers to present or process captured data in real time.

“The real time display we wrote implemented a noise cancellation system. The sizes of the magnetic field fluctuations caused by brain activity is tiny compared to electromagnetic noise created by external sources, such as a passing car. The noise cancellation system worked by having some extra sensors in the magnetically shielded room which were far enough from the head of the patient that they would not pick up the brain activity, only the noise. And then the readings for these were used with the some weightings to subtract the noise from the sensors around the brain.” – Michael Drake

Codethink’s engineers enjoyed working on a medical product, contributing to something that would, in turn, help others.

What you DON’T need to get a software job


During my time working in the software industry over the last 18 months, I have noticed that there seem to be a large number of people sharing a similar view. That is that in order to get a job in the industry, you need to be a standout computer science graduate, having achieved top marks in every exam from your introduction to the education system.

Okay, perhaps a slight exaggeration, but you get what I mean?

I’m writing this for anyone who has been told something like that and now feel that the software industry isn’t for them. I’m going to review the industry today at a high level

If you’re passionate about it and you’re driven enough to make yourself succeed, this industry is for you. I’m going to tell you why you don’t need a top computer science degree to get a job in software.

What employers looked for ten years ago isn’t what employers are looking for now.

There is currently a war for talent within the technology industry in the UK. A lot of companies are looking to hire but there are more jobs available than there are people who can fill them. As a result of this, the industry needs to become more accessible and work is under way to make that a reality.

Each year, Stack Overflow conduct their Annual Developer Survey. They collect data from their users on topics such as favourite programming languages and education history to identify trends from tens of thousands of responses.

Of all professional developers to respond, 79% have a degree, 63% of which studied computer science, computer engineering or software engineering. However, with this number not satisfying demand, it seems to be that in order to meet the requirement for talented technology professionals, value needs to be sought aside from the traditional degree route.

More employers nowadays are growing more interested in candidates who aren’t just demonstrating good marks in tests but are capable staff members in a number of other ways too.

Academic achievement is one thing but a strong work ethic, empathy and problem solving, is another thing entirely. Those qualities in an individual need to come from within. That’s why employers like to see graduates that show these capabilities already as it’s likely to have a positive influence on their retention numbers.

One particular trait that is highly desirable for employers is the ability to self-learn. If you can teach yourself something, especially if it’s something relevant like a programming language, then that will look great in any job application you make.

A question for the future will be whether these skills and traits will become more valuable than the traditional undergraduate degree.

Software employers have generally become increasingly open to applicants with backgrounds in other subjects as well. People from degrees in alternative subjects such as physics and maths make for great software engineers. I’ve known of successful coders that studied philosophy at University.

The way you get the job if you’ve not studied computer science, is to show a passion for software, to show where you’ve been coding in your degree, and make your intelligence come across in your application. To really sure your application up however, you’ll want to be coding in your spare time. Share your GitHub, even if it’s not perfect. You need to show them that you’re one of them. It just might take that bit extra work.

It makes sense that employers would look outside of the traditional computer science degree. After all, people who have studied different degrees think in different ways and a result, will approach problems differently. Diversity of thought is something a workplace should aspire towards.

Degree apprenticeships are a more recent development and are offered by some universities. They combine part time study in University with work at an employer, the idea being that you study and work at the same time which would end up with a job with the employer after the course, all being well. As degree apprenticeships are relatively new, they haven’t been taken up in every university. As such, available places are limited but they are expected to increase in number.

But what if you don’t have a degree?

In the past few years there has been a growing interest in alternatives to going to University. Traditionally, gaining a degree has been the route to a career but with a university level tuition becoming more and more expensive, it has become less of a practical option for a growing number of people.

When there’s a lack of skills, this creates a need for other routes to employment to emerge. After all, a degree isn’t the only signifier of intelligence.

Coding schools are another option increasingly in popularity in recent years. Northcoders is an example of one of these schools. The benefits of working with organisations like this are that they have direct links to employers, meaning that getting a job can be easier. However, convenience comes at a cost – education is expensive nowadays. They attract the employers by putting the costs onto the attendees. From everything I heard it’s worthwhile if you can do it but it might not be an option for a lot of people.

There is a way for you to gain experience working with other developers, develop your understanding of software practices and further practise your programming skills:

Open Source.

Getting involved with open source and contributing to projects is a great way to develop your programming understanding. Working with developers more experienced than you and having the opportunity for their insight on your code will allow you to progress well.

For more advice on getting started, see the resources below:

Getting into open source

How to Git Going in FOSS