[LAU] OT: C or C++?

Erik de Castro Lopo mle+la at mega-nerd.com
Thu Oct 14 04:17:06 UTC 2010

Josh Lawrence wrote:

> hi Erik, I'm glad you asked this question...I've always felt like a
> sub-par Linux user because I could not program.  I've also noticed
> that a lot of programs I've run across in my limited experience with
> Linux are written in C.  therefore, learning C could only help my
> understanding of my computer.

This is an interesting point. Yes, the vast majority of the small
useful utilities that run on a Linux machine have historically
been written in C. In addition, OS kernels, device drivers and
speed critical tasks are usually written in C. That means that
any professional programmer or dilligent amateur programmer
should know C.

However, for the small user space utilities, C is not the only
game in town. As part of my day job I ocassionally write similar
small utilities to run on our kiosk style linux systems. However,
I rarely write these utilities in C; C is way too flawed and
unsafe a language.

Instead, I write these utilities in strict statically typed
functional languages like Ocaml and (more recently) Haskell.
These languages are higher level so I don't have to worry about
things like memory allocation and buffer overflows. They also
have safe strings which makes string processing far easier than
in C or C++. The standard libraries of these languages have
simple, easy and guaranteed safe handling of high level data
structures like lists and dictionaries so I don't have the
write them from scratch.

However, most of the features above are also shared by languages
such as Ruby and Python. The big difference is that Ocaml and
Haskell programs compile to native binaries (like C and C++) and
that the compilers for these languages have a much more strict
type checkers (ie they find coding errors) than C or C++. This
means that many classes of bugs are found at compile time rather
than at run time like they would be for Ruby/Python/etc. The
native binaries produced from Ocaml and Haskell programs also
tend to run siginificantly faster than byte code interpretted
programs written in Ruby/Python/etc.

> also, I've noticed that at my local school most of the computer
> science majors use C, so I figure that if I learn C, I can at least
> understand that course material on some level.

As you might guess from what I've written in this thread, I am
quite interested in programming langauge research. From what I
have seen of this feild, the vast majority of programming
language centered computer science research (ie PhD research
and papers in reviewed journals) is done around Haskell and to
a lesser extent Ocaml.

In summary, since your interest seems to be in improving your
knowledge about Linux and how your machine works, C is definitely
the language to look at. However, C has many traps, requires 
strict attention to detail and can be rather unforgiving. Higher
level langauges like Python, Ruby, Ocaml and Haskell allow you 
to concentrate more on the problem than on the details.

Good luck.

Erik de Castro Lopo

More information about the Linux-audio-user mailing list