Czy muszę rozumieć elementy wewnętrzne języka programowania?

11

Jestem początkującym w Pythonie i do tej pory bardzo mi się podoba. Jednym z pytań, które przychodzi mi do głowy bardzo często, jest to, czy muszę zrozumieć, a zatem nauczyć się języka wewnętrznego języka programowania (jak w moim przypadku Python). Jak zapewne wiesz, sam Python jest napisany w C.

Więc moje pytanie brzmi: jak głęboko trzeba nurkować w języku programowania, aby być biegłym lub biegłym w tym języku. Porównuję to pytanie do języków „naturalnych”. Nie znam wszystkich szczegółów gramatyki w moim języku ojczystym, ale jestem w stanie wyrazić się bez problemów w tym języku. To wtedy mówię, że mówię biegle w języku. Czy dotyczy to także języków programowania?

Flo Schönfeld
źródło
4
Elementy wewnętrzne stają się ważne, gdy musisz się martwić wydajnością.
Gort the Robot
7
Wiem sporo o wewnętrznych elementach CPython i PyPy, ale w 80% przypadków są one bezużyteczne (a nawet szkodliwe, jak w przypadku rozpraszania uwagi) w moim programowaniu w języku Python. Cieszę się, że wiem o tym pozostałe 20%, i nie chodzi tylko o wydajność, ale także o zrozumienie głupich komunikatów o błędach i unikanie nieprzenośnego zachowania.
2
Nie i nie. Na pewno nie duplikat żadnego z nich.
1
To zależy od tego, co rozumiesz przez „elementy wewnętrzne”, ale wiem, że profesjonalni programiści C # i Java nie są wcale tacy rzadcy, rozumiejąc CLI lub JVM.
user16764,

Odpowiedzi:

8

Nie musisz nic wiedzieć o wewnętrznych elementach języka programowania, aby pisać programy w tym języku. Jednak im lepiej rozumiesz język, tym lepsze będą twoje programy.

  1. Znajomość struktur danych i algorytmów pomoże ci wybrać struktury danych najbardziej odpowiednie dla danego zadania. Niektóre języki posiadają te struktury danych wewnętrznie.

  2. Zrozumienie „kultury” języka pomaga pisać programy zgodne z „najlepszymi praktykami”, dzięki czemu są łatwiejsze do zrozumienia, łatwiejsze w utrzymaniu i mają lepszą wydajność.

  3. Napisanie kompilatora dla tego języka (lub kompilatora dla innego języka w tym języku) może dać ci głębokie zrozumienie języka i ulepszyć twoje programy, które nie są jedynie przeciętne.

  4. Biegła znajomość innych języków (zwłaszcza tych z innym paradygmatem) sprawia, że ​​jesteś lepszym programistą w swoim podstawowym języku, ponieważ możesz wykorzystać te umiejętności i narzędzia w swoim podstawowym języku.

W rezultacie nie musisz nic wiedzieć o komputerze, aby pisać na nim programy. Ale wiedza o tym, jak działa komputer, ułatwia pisanie programów.

Robert Harvey
źródło
7

Nie znam wszystkich szczegółów gramatyki w moim języku ojczystym, ale jestem w stanie wyrazić się bez problemów w tym języku. To wtedy mówię, że mówię biegle w języku. Czy dotyczy to także języków programowania?

Po prostu tak. Tak długo, jak dobrze potrafisz wyrażać siebie (i rozumieć innych), jesteś uważany za biegłą w języku.

To powiedziawszy, po prostu płynność nie wystarcza do niektórych zadań. Pewni autorzy, prace wymagające wzorowych umiejętności wystąpień publicznych i niektórzy naukowcy, którzy koncentrują się na języku, powinni go znać „lepiej niż płynnie”. Podobnie niektóre specjalizacje programistów wymagają znajomości wewnętrznych elementów językowych, ale dla większości osób znających język programowania odpowiednik pytania o numer telefonu lub zamówienia cheeseburgera jest wystarczający.

Telastyn
źródło
0

Zdefiniowałbym „biegły” z językiem jako:

  • Zrozumienie większości składni i wystarczająca wiedza do zbadania nowych funkcji, które można znaleźć w kodzie innych osób.
  • Praktyczna znajomość dowolnych standardowych bibliotek i / lub frameworków oraz umiejętność znajdowania, czytania i rozumienia oficjalnej dokumentacji wszystkiego, czego potrzebujesz.
  • Zrozumienie i umiejętność używania typowych idiomów i konwencji nazewnictwa dla języka.

Zauważ, że działa ten język nie na tej liście, ale istnieje wiele „umiejętności uczenia się”. Posiadanie co najmniej pobieżnego zrozumienia elementów wewnętrznych może być pomocne, ale nie jest konieczne, aby być biegłym. Jednak wiedza na ich temat, że będziesz w stanie zrozumieć wszelkie odniesienia w czytanej dokumentacji, jest bardzo dobrym pomysłem.

Na przykład: Wiem, że zarówno VB.NET, jak i C # są kompilowane do IL .NET (Intermediate Language) .NET, który jest następnie kompilowany dla docelowego frameworka. Nie wiem dużo o IL, ale wiem wystarczająco dużo, aby ją rozpoznać, kiedy ją widzę i ogólnie rozumiem, w jaki sposób radzi sobie z niektórymi rzeczami. Uważam się za biegłego w języku C #, ale nie w VB.NET, mimo że „elementy wewnętrzne” są takie same, a moje rozumienie ich nie jest głębokie.

Bobson
źródło