To naturalny proces w rozwoju.
Najpierw ludzie dostosowywali się do maszyn. Wysyłali konkretne sygnały po konkretnych magistralach. Dla ułatwienia założono, że są dwa stany, czyli sygnał o odpowiednim napięciu - co odpowiada zeru i jedynce.
Jako, że człowiek jest leniwy, to powstały pierwsze asemblery (assembly). To one pozwalały napisać zamiast ciągu zer i jedynek w notatniku jakąś krótką, zwykle 3 literową, kombinację znaków. Ale to czas gdy już powstały pierwsze klawiatury.
Wcześniej zera i jedynki były w postaci dziurowanych taśm. Podobna technologia powstała w przypadku czytania płyt winylowych - obecnie, na wysokim poziomie technologicznym, odtwarzacze CD/DVD działają bardzo podobnie - też wyszukują pewnych pitów które dają konkretną informację, czy to jest zero, czy jedynka.
Gdy ilość programów zaczynała rosnąć a potrzeby chociażby naukowców czy wojska były coraz większe, coraz trudniej było pisać kod setkami tysięcy linii które robią jedną praktycznie funkcję.
Z zajeć w technikum pamiętam jak powstawały pierwsze kompilatory. Najpierw ludzie chodzili ze swoimi kartami dziurkowanymi do jakichś uczelnii. Ale zanim napisali swój program, musieli też napisać obsługę całej maszyny. Kod uruchamiający monitor, pozwalający na korzystanie z urządzeń peryferyjnych, obsługę kolejki itp. Po jakimś czasie ludzie tworzyli biblioteki takich aplikacji. Po co tracić czas na tworzenie kodu, który obsługuje maszynę, skoro można korzystać juz z gotowego. Do obsługi kolejek zatrudniano w końcu obsługę - osobę, która zapisywała harmonogram korzystania z maszyny - bo tego również na samym początku nie było. Szczegółów nie pamiętam, jednak powstanie większości współczesnych mechanizmów wykorzystywanych w kompilatorach zostało już wymyślone w czasach, gdy nikt nie myślał o klawiaturach i myszkach.
Z lenistwa, chęci oszczędzania pieniędzy i czasu oraz dbania o coraz większą niezawodność podjęto starania żeby proces tworzenia aplikacji był coraz łatwiejszy. Ludzie po pewnym czasie nie musieli pamiętać o powrotach karetki, nie musieli myśleć jak działa konkretny model maszyny, bo z miejsca otrzymywali jej obsługę, nie musieli nawet osobiście doglądać jej w trakcie pracy - wystarczyło, że nawet wysłali swoje karty pocztą a wyniki powróciły po jakimś czasie, również pocztą.
Powstanie asemblerów jedynie pomogło i przyśpieszyło, a było wyłącznie logicznym następstwem po płytach dziurowanych. Języki wysokiego poziomu to naturalne następstwo języków niskopoziomowych. A obiektowe paragydmaty itp. to już wymysł rządów i korporacji, o czym była anegdota w kodzie doskonałym (książka). Tak samo Bertrand Meyer podejmował bardzo szerokie działania w celu popularyzacji programowania obiektowego. Ale to już wynika nie z tego, że języki nieobiektowe nie maja takich możliwości jak obiektowe. To wynika z organizacji pracy wielu osób, a nawet wielu zespołów wieloosobowych. To desperacka próba ogarnięcia chaosu powstającego w trakcie programowania ;)