In 2015 I had the very fortunate opportunity to invest some time in my skill as a programmer. At this time I had an undergraduate degree (Bachelor of Science) double majoring in software and computer networks. I had also completed the first two thirds of a masters degree, also in computer science. I chose not to complete the thesis because I felt I did not have anything to add to the field, graduating with a diploma of Computer Science (pass with high distinction).
Part 2 of this series outlines a method for starting to learn the process of Linux kernel development. As stated in part 1, this is but one method. The aim of this post is to illuminate a pathway starting at the point when you have had your first patch merged into the mainline. If you have not had your first patch merged you may like to read part 1 of this series.
This is the first in a series of posts about getting started in Linux kernel development. Most of what is written in this post is already available on the web. It is provided here for completeness and as a pre-amble to the next post in the series.
Kselftest is an effort to enable a developer-focused unit test
framework in the kernel to ensure the quality of new kernel
- Shua Khan
Install and run Linux kernel selftests on Ubuntu 16.04
A Fenwick tree is a data structure that holds an ordered collection and supports
update, both in O(log n) time.
… understand just how astonishingly commonplace (and important) graph problems are
they should be part of every working programmer’s toolkit. - Stevey
The graph data structure is of high utility across the field of computer science. Graph problems come in many shapes and sizes but once modeled can typically be represented by a limited number of graph data type variants.
To appreciate programming as an intellectual activity in its own right … you must read and write computer programs - many of them.[ASS96]
For the past nine weeks I have been working on programming questions at HackerRank completing questions in the ‘practice area’ i.e I have not competed in any competitive programming competitions offered by the site. Today I reached the first milestone I had set, namely, to get a top 1000 ranking (96th percentile) in the algorithms sub domain.
A heap is a data structure that supports the operations insert and extract. Heaps typically come in two varieties, min heap (for extracting the minimum value) and max heap. A heap is built using a binary tree where each node is said to dominate the nodes below it. The meaning of dominate depends on the type of heap being implemented, for a min heap the key of each node is less than the keys of both of child nodes.
A deque is type of queue which enables adding and removing items from both ends. Deque ends have such names as left/right, front/rear or, as we will use here, front and back. The add/remove operations on a deque are typically called enqueue and dequeue. For ease of explanation but without loss of generality, we limit discussion to a deque of integers.