Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I started with assembly language and I thought C was heaven. Of course, there are easier languages, there are more powerful languages, there are fancier languages and whatnot. I like Python and I adore Lisp. But I still love C most.

C is the sweet spot where I can extend my programs to do high-level stuff while still keep my hands down on the actual hardware I'm programming. I like that a lot, probably because I grew up banging hardware. Or maybe it is because I like to keep in touch with the actual device that I program: bending some definitions, C is what my machine does. Even if I embed Lua and script parts of my program, I'm still conceptually working on a C runtime, complete with addresses, pointers, integers and registers. That's why I also like LLVM as it abstracts away different instruction sets into a generic high-level instruction set, much like C abstracts different assembly languages into a generic high-level assembly language.

C also has the property of being most enjoyable code to read. I've spent a lot of time just reading C out of sheer enjoyment. C is tricky: it can be a total mess or it can be terse and beautiful and clear. No matter what, it describes exactly what it does to my machine. Read some of D.J. Bernsteins source trees to get an idea of how neat C can be.



Reading DJB's code can be both awesome in that his code is written clearly and neatly, yet at the same time it can be an excercise in frustration because he has foregone most of the standard library and written his own (especially string management, which is superior, in my humble opinion), so it can look foreign or weird to people looking at it.

The source to qmail/daemontools is a pleasure to read though and having read it I feel like I have learned a lot from what it has to offer.


djb once wrote a FORTH implementation for the IOCC. It would be cool to get it running under current BSD/Linux/Solaris.

Arthur Whitney is another I would put on par with djb. He's a bit older than djb.

For expertise you can't beat W. Richard Stevens. He also studies and wrote about FORTH before focusing on solely on C.

Both Whitney and djb have a true appreciation for speed, efficiency and succinctness; both have solid foundations in maths; both can build very level abstractions. But they have different areas of focus.

djb - secure systems administration and networking. (Stevens - documentation.) Whitney - Lisp background; big data.

Whitney has proven that it's possible, using a matrix-based approach, to meet or beat the speed of C with an interpreted language.

But it's difficult to write UNIX systems or networking code without knowing C. For guidance on navigating the many pitfalls of C, djb and Stevens are as good as it gets.


My intro course in college was run this way as well and to this day, I'm very glad to have started my career bottom up instead of top down...


I did top down starting at Lisp. I'm not unhappy with this choice, know assembly by now, and by the way, totally love C.


Bottom-up and top-down are both better than the worst learning method, which is to start somewhere in the middle and just stay there.


Nice try Mr. Daniel J. Bernstein.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: