title: How do I practice Unix programming in C?
body: <p>After five years of professional Java (and to a lesser extent, Python) programming and slowly feeling my computer science education slip away, I decided I wanted to broaden my horizons / general usefulness to the world and do something that feels more (to me) like I really have an influence over the machine. I chose to learn C and Unix programming since I feel like that is where many of the most interesting problems are.</p>
  
  <p>My end goal is to be able to do this professionally, if for no other reason than the fact that I have to spend 40-50 hours per week on work that pays the bills, so it may as well also be the type of coding I want to get better at. Of course, you don't get hired to do things you haven't done before, so for now I am ramping up on my own.</p>
  
  <p>To this end, I started with K&amp;R, which was a great resource in part due to the exercises spread throughout each chapter. After that I moved on to <a href="https://rads.stackoverflow.com/amzn/click/com/013034074X" rel="nofollow noreferrer" rel="nofollow noreferrer">Computer Systems: A Programmer's Perspective</a>, followed by ten chapters of <a href="https://rads.stackoverflow.com/amzn/click/com/0131411543" rel="nofollow noreferrer" rel="nofollow noreferrer">Advanced Programming in the Unix Environment</a>. When I am done with this book, I will read <a href="https://rads.stackoverflow.com/amzn/click/com/013490012X" rel="nofollow noreferrer" rel="nofollow noreferrer">Unix Network Programming</a>.</p>
  
  <p>What I'm missing in the Stevens books is the lack of programming problems; they mainly document functionality and provide examples, with a few end-of-chapter questions following. I feel that I would benefit much more from being challenged to use the knowledge in each chapter a la K&amp;R. I could write some test program for each function, but this is a less desirable method as (1) I would probably be less motivated than if I were rising to some external challenge, and (2) I will naturally only think to use the function in the ways that have already occurred to me.</p>
  
  <p>So, I'd like to get some recommendations on how to practice. Obviously, my first choice would be to find some resource that has Unix programming challenges. I have also considered finding and attempting to contribute to some open source C project, but this is a bit daunting as there would be some overhead in learning to use the software, then learning the codebase. The only open-source C project I can think of that I use regularly is Python, and I'm not sure how easy that would be to get started on.</p>
  
  <p>That said, I'm open to all kinds of suggestions as there are likely things I haven't even thought of.</p>