

What kind of companies hire C developers - _RPM

I like C and systems programming. How hard would it be to find a job doing this after I graduate next year with my CS degree?
======
MichaelCrawford
You could do kernel and embedded work. Actually there's quite a lot of that.
And device drivers.

That would include Linux for desktop (including ChromeOS), as well as mobile
(Android), embedded Linux.

Buy an embedded target board, then learn ARM and Thumb assembly code. Even if
you never actually write any, it's quite helpful to know the instruction set
architecture. The Raspberry PI is quite cheap, but I have a gumstix overo fire
as it is rather more featureful.

Also look at really low-power, cheap targets as the ARM7TDMI. That's not
something you'd use for mobile, but is quite common for embedded. Atmel makes
oodles of target boards with ARM7. There are also storage chips from Oxford
Semiconductor. They sell target boards that come with gcc for ARM.

Also look at embedded powerpc. I haven't done it myself, but powerpc is quite
a nice architecture. More or less the difference is that powerpc is more
powerful than arm, but typically needs to be plugged into the wall rather than
run off a rechargeable battery as with ARM.

Motorola 68k is still important for embedded. I think that's what the
dragonball is, an embedded 680-something. I once bought a Mac SE with a 40 MB
scsi drive, that still booted into system 6.5, for nine bucks at a thrift
store.

I used to dream of the day when I would have enough money for an SE.

Whatever box you presently have, install Linux or BSD into a VM. For Linux,
read "Understanding the Linux Kernel" by Bovet and Cesati, as well as "Linux
Device Drivers" by Corbet, Rubini and Kroah-Hartman. They're both published by
O'Reilly.

If you're going to do embedded, while not strictly necessary, it is helpful to
know how to build your own cross-compiler from source. Doing so will deepen
your understanding of the target architecture. It's also a huge PITA.

You'll need to know at least one scripting language to get a job. Getting
really good at any one of bash, python, perl or will be just fine, in addition
to GNU make.

~~~
MichaelCrawford
Look for "Android Platform Development" jobs.

That is, as opposed to "Android App Development".

Besides the kernel, there is userspace stuff like the OpenGL ES libraries,
audio and video codecs and the Dalvik JVM.

You could also work for Apple, doing all that stuff for iOS or Mac OS X. (OS X
drivers, and the driver architecture of the kernel are written in a greatly
simplified subset of C++, but the rest of the kernel is C, a massive fork of
*BSD on top of Mach, but not as a microkernel, rather Mach is statically
linked.)

To be an Android Platform Developer, you need to work for a handset
manufacturer, such as Sony Mobile, or Sharp Labs in Camas, Washington, or
someone who makes the components, like Intel, which has development shops all
over the world but is headquartered in Hillsboro, Oregon.

There are a few Android Platform Development consulting firms, but not many
that I know about. Most is done in-house, or like Intel, they provided
reference implementations so as to move their chips.

Work for anyone who makes the chips that go into mobile, like ARM Holdings -
mostly dev tools - or QualComm, mostly they do wireless I/O.

------
donavanm
We have people working on everything from firmware, network devices, kernel
and virtualization development, up to applications doing millions of tps and
serving billions of bits per second. Sounds like it's too late for internship
but we're always hiring. I didn't see contact information in your profile, but
get in touch if you're interested. I'll make sure you talk to someone relevant
to your interests.

edit: as general advice know your basic algorithms and data structures in your
choice of language. Focusing on C is fine, but I'd suggest familiarity with
something like python to make some of the interview questions faster. Outside
of that it would be good to have familiarity with fundamental tasks; word
counts, graph traversal, streaming sorts, approximate counts, type
conversions, etc. Oh, ask questions. Clarify and verify your tasks and
implementation. Bonus points for sketching out some quick tests. Practice on a
whiteboard, not your desktop, not paper. A whiteboard.

~~~
vram22
Hiring remote devs?

~~~
donavanm
Sorry, I dont think ive seen that. But we have offices all over and do sponser
where appropriate.

------
dllthomas
Unfortunately, _most_ of the things that _need_ to be written in C need to be
written by someone deeply experienced with C, which would not likely be an
optimal fit for a new grad. Fewer things are being written in C when they
don't need to - about which I have mixed feelings but which is also probably
the right thing.

To get to "deeply experienced with C" in that environment, you're likely
talking about personal projects, and/or working on existing code that doesn't
really need to be C any longer but is because porting the whole thing is more
work than worthwhile.

------
davismwfl
You can absolutely find a job writing C if you are a decent coder and you
desire to work in it. I'd slightly disagree but also agree with @dllthomas
too. A lot of times, new grads who want to work in C will get put on
maintenance tasks and small modifications until you can prove your abilities
not to screw up majorly. C can be a dangerous language in terms of causing
system instability through poor resource management, overflows etc. And while
smart pointers and other constructs are common now a days, a lot of older
C/C++ code didn't utilize (or have them available) so you are having to manage
all the details.

For a while C/C++ wasn't as popular and you saw people really ragging on C/C++
devs for being ancient etc... Now you have seen a bit of a come back, or maybe
just coming out, of a lot more people using C/C++ again. It really is powerful
and has its uses and purposes.

A number of Game companies use C for console development.

Embedded systems of course, as others have said.

The Space and defense industries still use C and C++, especially in and around
command and control systems.

Microsoft still has a lot of code in C/C++. Again, Linux kernel and device
drivers as @MichaelCrawford pointed out.

We are building some new sensor devices to join the Internet of Things, and we
are using C for some of that coding. It isn't quite embedded programming, but
C keeps us lean and mean on devices that don't have a ton of resources. And we
are not alone in this, we researched and found a lot of companies are doing
this.

------
brongondwana
At FastMail we do quite a lot of work on the Cyrus IMAP server. That's all in
C! Plenty of C out there still.

------
MichaelCrawford
Lots of crypto is done in C, with assembly code optimization for common
platforms.

