 Why does C make you responsible for keeping track of array length and staying within the array bounds? To answer this question, you need to understand that C was invented in 1972 and was first implemented on a computer called the PDP 1120. This computer had a 16-bit word, 56,000 bytes of memory, and 125 megahertz clock speed. If you bought a hard disk as a peripheral, it had a capacity of only 10 megabytes. The price for the computer, without hard disk, was $20,000 in 1972. In 2020, that works out to about $134,000. RAM was scarce, disk space was scarce, both were very expensive, and the machines were not incredibly fast. You can see why people wanted to avoid needing to store or process even one byte more than absolutely necessary. C was designed on a scarcity model. Also, given the price of hardware in comparison to the cost of programmer time, the fact that programmers needed to spend extra time thinking about and keeping track of things like array length was not considered to be tremendously important. Fast forward to today, where you can get a Raspberry Pi 4B computer that has a 64-bit word, 8 gigabytes of RAM, 1.5 gigahertz clock speed, and uses chips that can store 32 gigabytes, and that costs you $120. The computer is now essentially free, and your time is valuable. But the C software written for that PDP 1120 still had to remain compatible with newer, faster, more capable computers. That means the C we write today is still carrying the design decisions that were made in the days of the scarcity model.