Zadania kompilatora - ile potrzeba edukacji [zamknięte]

15

Motywowało mnie pytanie dotyczące kompilatora jako tematu i pomyślałem, że zadam to pytanie.

Słyszałem od kilku osób, że mają dobry „zespół kompilatorów” (nie pytaj, skąd to usłyszałem, nie pamiętam), co skłoniło mnie do zastanowienia się, jak zdobyć pracę w takim zespole ?

Wiem, że są zajęcia w programach licencjackich i tym podobne, ale czy jest to coś, co dyplom ukończenia studiów byłby minimalny (taki jak co najmniej magister)?

Zaczynam studia magisterskie z informatyki za dwa miesiące, a szkoła, w której mam, ma dwie klasy kompilatorów. Czy to wystarczy, aby znaleźć pracę przy opracowywaniu kompilatora, czy też trzeba będzie w to zainwestować więcej czasu?

Jetti
źródło
2
Ogromną zaletą byłby udział w projekcie kompilatora typu open source (np. Llvm).
SK-logic
Ditta @ SK-Logic Obecnie piszę kompilator do mojego finału IB CS. Zdobywanie doświadczenia w pisaniu kompilatorów jest prawdopodobnie najlepszym sposobem ... tak jak w każdym innym przypadku.
1
Zwracam uwagę, że jedna z największych nazwisk w kompilatorach i środowiskach wykonawczych nie ma stopnia naukowego. Anders Hejlsberg ... mózg za Turbo Pascal, Delphi, C #, TypeScript
Matthew Whited

Odpowiedzi:

17

Cóż, rozwój kompilatora jest ultra hardcore, co oznacza, że ​​wymaga dużo cierpliwości, pasji i solidnej wiedzy. Nie myl cierpliwości, pasji i solidnej wiedzy z jakimkolwiek stopniem naukowym. Widzieliśmy kilku kandydatów ze stopniem magistra, którzy nie potrafili nawet rozpoznać strlen()w czterech liniach kodu C.

Zdecydowanie uczęszczaj na te zajęcia i zdobywaj praktyczną wiedzę. Być może nawet nie polubisz programowania kompilatora, ale zdobyte doświadczenie pomoże ci zdobyć inną bardzo interesującą pracę programistyczną.

sharptooth
źródło
Dzięki za odpowiedzi. Czy dałbyś szansę komuś, kto był samoukiem i nie miał akademickiego doświadczenia w CS?
Jetti
3
po prostu sprawdź kurs MIT OCW
segfault
3
@Jetti: Dałbym szansę każdemu, kto przez lata wniósł znaczący wkład w kompilator open source, bez względu na pochodzenie :)
Matthieu M.
@Jetti: Zdecydowanie przyniosę dowód, że mają prawdziwą wiedzę. Na przykład, jeśli napisali testy dla kompilatora optymalizującego generator kodu, prawdopodobnie są warte więcej niż przeciętny absolwent uniwersytetu.
sharptooth 27.01.11
Staje się jeszcze bardziej interesujący, gdy kompilator jest napisany w swoim własnym języku.
ott--
5

Pierwszym krokiem jest dobre przygotowanie CS - potencjalnie im więcej, tym lepiej, ale przynajmniej ukończone studia licencjackie z wyróżnieniem. W rzeczywistości istnieje pewne uzasadnienie tego, że kompilatory (ogólnie tłumacze języków) i związane z nimi techniki (leksykanie, parsowanie) są dobrze zbadanymi podstawami informatyki.

Uważam, że znaczny rozwój kompilatora przemysłowego (w tym open source) oczywiście złagodziłby brak dyplomów akademickich - ale zależy w dużej mierze od pochodzenia kandydata. Zauważ, że rozwój kompilatora obejmowałby również interpretatory i powiązane narzędzia do analizowania.

Potrzebne są ogólne kompetencje w zakresie inżynierii oprogramowania. Dodatkowa jest również znajomość dziedzinowa aplikacji wymagających dobrych kompilatorów (np. Obliczenia naukowe, tworzenie gier) lub doświadczenie w programowaniu w asemblerze, wykraczającym poza ogólne tło programowania w języku wysokiego poziomu. Znajomość języka implementowanego przez kompilator na poziomie eksperckim jest również plusem.

Oświadczenie: Jestem programistą kompilatorów i brałem udział w przeprowadzaniu wywiadów z kandydatami.

Grrussel
źródło
5

Obecnie narzędzia takie jak Flex , YACC i kilka podobnych narzędzi znacznie upraszczają budowę kompilatora. Jeśli chcesz podejść do tego jak hobby, ponieważ fascynuje cię, te narzędzia pomogą ci i będziesz w stanie zbudować przyzwoity interfejs kompilatora w ciągu miesiąca.

Dragon Book to jedna z ulubionych książek dla wszystkich, którzy chcą nauczyć się budowy kompilatora. W miarę przemieszczania się spędzasz trochę czasu na czytaniu kodów kompilatora opensource .


źródło
5

Jeśli poważnie myślisz o karierze w kompilatorach, uważam, że potrzebujesz przynajmniej formalnego wykształcenia w zakresie teorii języków, zwłaszcza teorii typów, semantyki formalnej i teorii obliczeń. Te obszary byłyby trudne do nauczenia się poza środowiskiem akademickim. W większości przypadków konstrukcja kompilatora jako taka jest tematem, który inteligentny deweloper może samodzielnie nauczyć się podstaw. Jednakże, jeśli chcesz pracować nad najnowszymi kompilatorami, które używają obszernej analizy semantycznej i oprzyrządowania dla bezpieczeństwa i optymalizacji, prawdopodobnie potrzebowałbyś przynajmniej pracy magisterskiej w tej dziedzinie.

ThomasMcLeod
źródło
1
To brzmi bardziej jak rola badawczo-rozwojowa niż „rola inżynierii produktu”. Byłem inżynierem produktu w armcc i LLVM (dwa kompilatory C / C ++ o jakości produkcyjnej) i nigdy nie potrzebowałem żadnego z tych tematów, ani nawet nie widziałem odniesienia do nich w ciągu 2 lat pracy w tym obszarze.
dune.rocks