“Programmers who understand sophisticated problem-solving techniques and can write efficient and secure code continue to be in high demand.”
The C programming language, first released almost 50 years ago, remains extremely popular today, ranking second in 2019 (again) and even gaining traction last year, due to its speed, low-level capabilities, and platform-independent characteristics.
“In my own career, I’ve depended on C to do a lot of different types of projects, such as industry-related research projects creating simulation models,” says Radhika Grover, founder of SPEL Technologies, an educational product startup, and author of Programming with Java: A Multimedia Approach. Grover is teaching a self-paced, online, advanced C Programming course at UCSC Silicon Valley Extension.
Particularly popular in the semiconductor industry, C is widely used in embedded systems, writing drivers and compilers. The language is great for system-level programming because it’s close to the operating system making it easier to access system resources like memory.
A quick job search shows a diversity of job openings for engineers with C programming experience.
- Apple is developing special purpose cameras.
- Nvidia is building gaming platforms.
- Samsung is developing smart mobile robots.
- Boeing is developing on board space avionics.
- Verb Surgical is developing medical device robotics.
Glassdoor lists thousands of jobs in the areas of embedded systems, performance testing, firmware engineering and related fields that require C programming skills.
“Programmers who understand sophisticated problem-solving techniques and can write efficient and secure code continue to be in high demand,” Grover says.
What’s new in C?
And, the language continues to evolve. The C11 standard has added support for safe string manipulation functions, memory alignment, multi-threading, and atomic variables.
“The impact of these changes is to make programs more secure and portable,” Grover says. “However, it is important to understand how to use these features correctly to get the benefits.”
C Programming, Advanced—A Preview
Grover’s online course includes videos with step-by-step instructions that explain concepts and provide detailed examples of how to write complex programs in C. Students learn to avoid programming errors when using pointers, strings, and functions for memory allocation. They learn to write efficient programs by understanding the complexities of various algorithms.
Always the teacher, Grover explains by example.
There are five errors in the trivial C program example above, which reads a command line string and copies it into a buffer for further processing.
How can these errors be corrected?
Learning Data Structures
The course places an emphasis on programming that employs and improves upon a variety of data structures. Students will learn to write C programs for lists, queues, stacks, B-trees, binary and binomial heaps and queues. Students will also gain exposure to newer and improved data structures.
In a second example from Grover’s online course you see a circular linked list with a sentinel node.
What are the advantages and disadvantages of a linked list with sentinel nodes?
What are the different ways to implement this data structure?
Does the running time of operations improve when the linked list uses a sentinel node?
How Memory Is Used (heap vs. stack)
C also requires the programmer to have an understanding of how memory is used—heap vs. stack—and how function calls are executed. Using many examples, Grover explains memory allocation and how to trace the execution of functions on the stack. This discussion of the function call stack makes it easier for students to understand and trace the execution of complex algorithms, including some that use recursion like the merge sort algorithm and the Kosaraju-Sharir algorithm for strongly connected components. Here she shows how the inOrder function recursively prints out the keys of tree.
A C Programming Puzzle
A farmer has to purchase land for his farm in an area containing wells (W), lots (P), and quicksand (Q). It’s given that:
The farm must be either square or rectangular in shape.
The value of a lot depends upon its soil content and whether it has a well.
The farm cannot contain any lot with quicksand—only lots with quicksand have a value of 0 and all other lots have a value greater than 0.
The farm must contain at least one well.
The maximum number of rows and columns in the grid is 10.