Cytat z Wikipedii artykułu „Język programowania wysokiego poziomu”:
Język programowania wysokiego poziomu jest językiem programowania o silnym oderwaniu od szczegółów komputera. W porównaniu z językami programowania niskiego poziomu może używać elementów języka naturalnego, być łatwiejszy w użyciu lub bardziej przenośny na różnych platformach. Takie języki ukrywają szczegóły operacji procesora, takie jak modele dostępu do pamięci i zarządzanie zakresem.
To znaczy, gdy poziom języka programowania rośnie, tym bardziej programista odchodzi od sprzętu, na którym działa program.
Teraz nie znam statystyk użycia języków na różnych poziomach, ale podejrzewam, że języki wyższego poziomu coraz częściej zastępują języki niższego poziomu. Jeśli tak, to czy może to prowadzić do deficytu programistów ze znajomością architektury komputera? Czy byłby to problem dla branży?
Chyba tak. Martwi mnie to trend. Żadna abstrakcja nie jest idealna ; gdyby istniał idealny sposób na uproszczenie złożonego problemu, bardzo szybko zastąpiłby oryginał. (To zdarzało się w przeszłości, czasami z komputerami, i znacznie częściej w innych dziedzinach, które nie martwią się tak bardzo o kompatybilność wsteczną jak my, takie jak fizyka.)
Oznacza to, że za każdym razem, gdy używasz abstrakcji, kryje się przed tobą jakiś ważny element o zasadniczej złożoności. Jeśli nie wiesz, co to jest, dlaczego tam jest i co robi, przypadkowo piszesz duże wraki pociągów i nie wiesz, jak je naprawić, ponieważ nie wiesz, co się naprawdę dzieje.
Każdy, kto próbuje ci powiedzieć inaczej, albo sprzedaje olej z węża, albo po prostu nie ma dużego doświadczenia z poważnym oprogramowaniem. W pracy pracuję nad programem, który uruchamia dobry procent wszystkich stacji telewizyjnych i radiowych w USA. W miarę jak stacje i sieci stają się coraz większe i bardziej złożone, szybkie i brudne techniki, które dobrze działały przy projektowaniu produktu dla jednej małej stacji, ostatecznie uderzają w duże techniczne ściany, gdy są wdrażane dla sieci z 50 stacjami i 200 kanałami! Bez głębokiego zrozumienia, jak działa język (i przede wszystkim wydajnego języka) i głębokiego zrozumienia, jak działa baza danych, nasi koderzy nigdy nie byliby w stanie skutecznie skalować produktu.
To też nie jest odosobniona historia. Oprogramowanie staje się coraz bardziej złożone, a nie prostsze, i obawiam się, że ten poziom wiedzy technicznej stanie się czymś zagubionym, a jutrzejsze programy będą gorsze niż dzisiejsze, a nie lepsze.
źródło
javascript:alert("Hello world")
wymaga to doktoratu z teorii strun.Tak, myślę, że ludzie będą mniej rozumieli sprzęt w miarę postępu języków (i podobnie, jak instrukcje ustawiają postęp). Ale jak zauważono w wielu innych miejscach, głównym ograniczeniem w większości programów teraz dni nie jest czas procesora lub wydajność, ale czas programisty. Jeśli ludzie, którzy projektują języki, nadal wykonują swoją pracę, aby sprawić, by abstrakcja była skuteczna, i jeśli ludzie nadal używają tych abstrakcji właściwie, zrozumienie architektury komputera nie jest całkowicie konieczne; przynajmniej pełna wiedza nie jest obecnie fundamentem dobrego bycia programistą.
źródło
Nie, nie doprowadzi to do deficytu programistów ze znajomością architektury komputera. Języki służą do rozwiązywania problemów w określonej domenie. Jeśli chcesz rozwiązać konkretny problem, użyj odpowiedniego języka lub wystarczająco dobrego, biorąc pod uwagę posiadane zasoby.
W rzeczywistości, jakie domeny faktycznie potrzebują wiedzy o architekturze komputera? To musi być związane z konkretną architekturą sprzętową? System operacyjny? Sterowniki urządzeń? Jasne, ale nawet wtedy tylko części takiego kodu wymagają specyficznej wiedzy architektonicznej.
Poprawa wydajności? Tak, możesz zastosować wiedzę na temat architektury komputera, aby poprawić wydajność algorytmów. Ale dwa inne czynniki mają większy wpływ na wydajność: zastosowanie lepszych algorytmów i znajomość środowiska wykonawczego języka.
Zasadniczo bardziej abstrakcyjne języki programowania rozwiązują problemy, dla których szczegóły architektury komputera nie są konieczne. Pozwalają rozwiązać więcej problemów. Ludzie, którzy ich używają, nie używają ich do rozwiązywania problemów zależnych od maszyny. Ludzie, którzy muszą rozwiązać problemy zależne od maszyny, będą nadal używać języków obsługiwanych przez maszynę. To nie jest kwestia sumy zerowej.
źródło