
Ask HN: Moving into System Engineering - blacksoil
 Hi all,<p>I want to ask for advice regarding getting a career in system programming. I have about 7 years of professional working experience. Last 4 years has been in the area of full-stack development (Typescript, MySQL, AWS, etc). Prior to that, I spent 3 years working on Android OS, but more on the frameworks layer (Java, C++, C), while also having some level of exposures on low-level Android code (i.e. HAL) and Linux kernel programming.<p>I&#x27;ve been really interested to have a career in a low-level system programming, especially in Linux kernel. But there are some obstacles: (1) Other than hacking as a hobby on the side, I don&#x27;t have a concrete portfolio in system programming that I can show off to get an interview. (2) I&#x27;m currently based in South East Asia (Singapore), and it doesn&#x27;t seem like there&#x27;s that many system programming positions here?<p>I&#x27;m very tempted to take a few months off, to focus on building a portfolio around system programming. My questions are: (1) what would be a good project to work on or OSS to contribute to land a system programming job? (2) what career prospect is there for Linux kernel development? (3) what are the recommended system programming language with good career prospects? (4) how hard it is to get a remote system programming job? (5) is it a good idea to get an internship position to get my feet wet vs. just building a side project?<p>I&#x27;d really appreciate it if somebody in the industry can enlighten me :)
======
non-entity
Can't answer all your questions, I'm a hobbyist here, not a professional, but
I can offer a bit of insight on a few of them

1) The Linux kernel would be a good one to start. There are a lot of good
resources out there for getting started with that. Work on similar _nix
kernels could be helpful too. I 've done a little work on the FreeBSD kernel
which has decent document, and NetBSD, which has poorer documentation, but a
bit better code quality and a helpful community.

2) A good bit of companies hire people to do direct work on the kernel. Redhat
is the first that comes to mind. I imagine most if not all of the Big _N*
companies have teams working on doing kernel work. Many hardware and silicon
companies also have kernel work available. Not sure about companies in your
specific market, unfortunately.

3) C mostly. I imagine having solid C++ knowledge, but I don't think there's
much, if any, C++ directly in the Linux kernel. Knowing other languages never
hurts, I see a lot of relevant job postings mentions Python / Perl, I assume
mostly for automation. For more specialized roles I imagine there are some
other languages that could be useful.

I can't give much information on the other questions, as I'm just a hobbyist.
If I said anything that's flat out wrong, please feel free to correct me.

~~~
CyberFonic
AFAIK there is NO C++ in the Linux kernel. It's all C code.

~~~
non-entity
I kinda figured, just wasn't sure. I know the Window's kernel supports a
handful of features from C++

------
CyberFonic
May I assume that you read [https://lkml.org/](https://lkml.org/) ? If you
research the contributors, then you will be able to identify where they work
and thus identify any possible job openings.

Google's Fuschia project might also be of interest.

In general, kernel level programming requires years of experience. Most of the
work entails device drivers and sub-systems, e.g. filesystems, networking --
all of which rely on knowing standards and their implementations.

Being located in SE Asia, I would think that equipment manufacturers could be
interested in your skills in writing device drivers for their products.
Another area might be embedded systems, which in addition to Linux might use
one of the BSD variants.

In order to be effective at the low-levels, you need a good grasp of CPU
architectures and their many idiosyncrasies. In addition to x86-64, ARM and
RISC-V knowledge should be very applicable.

~~~
blacksoil
Researching LKML contributors is a really good idea. Thanks!

Yeah Linux kernel positions seem to require extensive experience. Do you have
any suggestion on what would be a good way to bootstrap such experience? Would
making contribution to Linux kernel OSS be the best way?

