Magnetic tape was being introduced in the 1960s. This was seen as a better data storage medium compared to punch cards since it was cheaper, and the newer and more affordable (at the time) computers were smaller which made punch cards even more meaningless since those newer computers could not use them. Since punch cards were used to store the computations, a computer was meant to carry out, we can say that programming languages serve a similar purpose of storing instructions that a more advanced computer would need to perform those computations.
To make writing instructions for machines easier. Since computers can only process and execute instructions in binary, we would struggle if we only used binary to make our programs as we are restricted to using 0 and 1 to write our instructions.
To adapt to new technologies. As computers get more advanced, programming languages evolve to be more human-readable than before and to be usable on the new technology.
I use Python and I find that I do not like it when a program crashes as soon as an error is encountered. It is useful for debugging but I would not be able to test if any unrelated code that appears later in the program works properly until I fix that initial bug. I would prefer it if Python had the option to choose between logging the error during execution as opposed to crashing the program and reporting the logged errors after the entire program is executed.
I would start by defining the data types my language would support (like strings, integers, real numbers, etc.). Then I would define the different types of selection and iteration constructs I would use like “if” statements and loops. Once I do that I would consider special characters that would perform special functions like “\n” for line separation in Python.