why-c.md (4667B)
1 # Why C? 2 3 Love it or hate it, 4 [C](https://en.wikipedia.org/wiki/C_(programming_language)) has 5 consistently been one of the most popular languages for the last 6 50 years or so. How did it become so popular? And why are people 7 (like me!) still using it? 8 9 ## Quirky, flawed, and an enormous success 10 11 I have recently read 12 [this article](http://cm.bell-labs.co/who/dmr/chist.html) 13 by Dennis Ritchie. Besides summarizing the history of the language, 14 in this paper Ritchie also tries to answer our first question. He 15 gives four reasons for C's success: 16 17 ### UNIX 18 19 C was the system language of UNIX, and the popularity of UNIX in 20 the 70's and 80's made C popular too. In other words, UNIX was the 21 [killer app](https://en.wikipedia.org/wiki/Killer_application) of C. 22 23 ### Simplicity 24 25 Ritchie phrases the simplicity of C in terms of how close it was to 26 machine instructions while still being sufficiently abstract. This 27 means that C compilers are easy to write, and the language could be 28 ported easily to different systems. 29 30 ### Pragmatism 31 32 C was designed with a concrete goal in mind, not as some kind of 33 abstract, ideal programming language. It was always in touch with 34 the "real world" and the needs of programmers. 35 36 ### Stability 37 38 Despite some changes throughout the years, C has always remained 39 remarkably stable and free of proprietary extensions. 40 41 ## Why did I choose C? 42 43 In 2019 I began working on a 44 [Rubik's cube solver](https://nissy.tronto.net). 45 At the time I had basic or intermediate level knowledge of multiple 46 programming languages, but I was not an expert of any of them. I 47 considered many languages for this project, including C, C++, Java, 48 Python and Rust - this last one I did not know at the time, but I 49 have wanted to learn it since 2013 or so. 50 51 In the end I picked C, and these were the main reasons: 52 53 ### Ubiquity 54 55 Since my program was going to be relevant to a small nice of people 56 who are not necessarily programmers, I wanted it to be as accessible 57 as possible in terms of required infrastructure (compiler, libraries). 58 Sure, I could provide *some* compiled executables, but not for all 59 systems. It would be much easier if people could just type `make` 60 or `./compile.sh`, and then run my program. 61 62 C compilers are everywhere, while the same cannot be said of e.g. Rust. 63 64 ### Simplicity 65 66 Since C is a simple language, knowing a bit of C means knowing quite 67 a big portion of it, in contrast to, say, C++. For this reason C 68 was the language I was more confident picking up to start a big 69 project, despite having more experience with Java or C++ at the 70 time. 71 72 ### Stability 73 74 I don't like to re-learn my language every couple of years for a 75 project that I am working on in my spare time. Backward-compatibility 76 is a thing, but, as languages introduce more features, the preferred 77 idiomatic way to do certain things changes, and old code starts to 78 "smell" without any good reason. 79 80 [RANT] 81 82 *Python2 was killed and now a bunch of tiny programs (mostly 83 [Project Euler](https://projecteuler.net) solutions that I have 84 no reason to "port" do not run anymore :( I want my print statements 85 back!* 86 87 *It seems Java has a new way of doing GUIs every time I look at it. 88 When I read my first Java book, 89 [AWT](https://en.wikipedia.org/wiki/Abstract_Window_Toolkit) was the 90 standard. When I read a second book, 91 [Swing](https://en.wikipedia.org/wiki/Swing_(Java)) was all the rage. 92 Then I went to university and they taught me 93 [JavaFX](https://en.wikipedia.org/wiki/JavaFX).* 94 95 [/RANT] 96 97 ### Performance 98 99 I knew from the start that performance was going to be important 100 for this project, not only from the algorithmic point of view but 101 also from the low-level side of things. I needed manual memory 102 management and little overhead. This ruled out Java and Python. 103 104 ## Conclusion (and memes) 105 106 I think there are some interesting similarities between the reasons 107 of C's success acoording to Ritchie and the reasons I picked it for 108 my personal project. I don't consider myself a C expert, and I know 109 even less about the other languages I talked about in this post, 110 so take my opinion as it is. 111 112 Instead of pretending to be more knowledgeable than I am and writing 113 some clever and insightful conclusion for this post, here is a short 114 list of memes and folklore about the C programming language. 115 If you know more of them send me an email and I'll update the list! 116 117 * [[YouTube, song] Program in C](https://www.youtube.com/watch?v=tas0O586t80) 118 * [[YouTube, song] Write in C](https://www.youtube.com/watch?v=1S1fISh-pag) 119 * [[Text] Linus Torvalds on C vs C++](https://harmful.cat-v.org/software/c++/linus) 120 * [[Wikipedia] Duff's device](https://en.wikipedia.org/wiki/Duff%27s_device)