diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2023-09-15 21:52:16 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2023-09-15 21:52:16 +0200 |
| commit | 873831bf00816fd8e4db5ca5ea72b54aa2391003 (patch) | |
| tree | 4ed9885971ff3142ab734a2aac3c60b480aec44e /src | |
| parent | 7cc5efcad7545a6ab3879795d84ddeb9fc4f1c5d (diff) | |
| download | sebastiano.tronto.net-873831bf00816fd8e4db5ca5ea72b54aa2391003.tar.gz sebastiano.tronto.net-873831bf00816fd8e4db5ca5ea72b54aa2391003.zip | |
Added blog post
Diffstat (limited to 'src')
| -rw-r--r-- | src/blog/2023-09-15-why-c/why-c.md | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/blog/2023-09-15-why-c/why-c.md b/src/blog/2023-09-15-why-c/why-c.md new file mode 100644 index 0000000..60a2c25 --- /dev/null +++ b/src/blog/2023-09-15-why-c/why-c.md | |||
| @@ -0,0 +1,120 @@ | |||
| 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) | ||
