Jestem dość sprawnym inżynierem oprogramowania, ale niewiele wiem teorii. Chcę dowiedzieć się więcej teorii. Szczególne tematy, którymi się interesuję, to: złożoność obliczeniowa, języki formalne i teoria typów. Ale nie wiem, jak zacząć uczyć się o tych dziedzinach.
Jakie zasoby poleciłbyś komuś, kto chce nauczyć się więcej teorii poprzez samokształcenie? Czy są jakieś teoretyczne przewodniki do samodzielnej nauki dla inżynierów oprogramowania?
soft-question
teaching
books
Henry H.
źródło
źródło
Odpowiedzi:
To szerokie pole z kilkoma całkiem różnymi obszarami.
Zacznę od kilku najbardziej podstawowych pomysłów na temat komputerów: Hopcroft i Ullman, „Wprowadzenie do teorii automatów, języków i obliczeń”.
Powodem, dla którego szczególnie polecam, jest nacisk na dowody. Prowadzą cię przez rygorystyczny sposób myślenia. To jest różnica między pisaniem programów a byciem naukowym.
źródło
Istnieje kilka sposobów na poznanie teorii typów. Dla działającego programisty Typy i języki programowania autorstwa B. Pierce to dobry początek. Praktyczne podstawy dla języków programowania autorstwa R. Harpera również mogą być dobre. Jeśli chcesz trochę czytelnego tła na temat semantyki operacyjnej, polecam G. Winskel's, The Formal Semantics of Programming Languages: An Introduction . Z T. Nipkow, G. Klein, Concrete Semantics , wariant książki Winskela został sformalizowany dla interaktywnego asystenta dowodu Isabelle / HOL. Podejrzewam, że naprawdę trudno jest poradzić sobie z koniczyną właśnie z tej (lub dowolnej) książki, chciałbyś, aby ekspert w pobliżu zadawał pytania. Jeśli chcesz bardziej matematycznego podejścia do teorii typów, możesz spojrzeć na JR Hindleya, JP Seldina,Rachunek Lambda i kombinatory: wprowadzenie lub H. Barendregt's, Lambda Calculi z typami . Chociaż nie polecałbym zaczynać od Barendregt.
Jeśli chcesz jednej rekomendacji, powiedziałbym, że przeczytałeś wszystkie artykuły Pierce z wyjątkiem Części VI (Systemy wyższego rzędu) i zaimplementowałem języki zabawek omówione w książce. Skończysz z silnym ugruntowaniem teorii typów i prawdopodobnie lepszym programistą.
źródło
Polecam Obliczalność, złożoność i języki autorstwa Martina Davisa, Rona Sigala i Elaine Weyuker.
źródło
Jestem wielkim fanem teorii i algorytmów. Miałem kiedyś okazję odwiedzić Teoretyczną Informatykę w Indian Institute of Technology, Madras (IIT-M), Indie. Znam wielu teoretyków tam w IIT-M. Kiedy tam pojechałem, nie miałem pojęcia, czym była teoria, ale dzisiaj jestem z nią całkowicie zakochany.
Dzięki @Kate F dla wskaźnika, tak Hopcroft i Ullman to doskonałe miejsce do rozpoczęcia.
Jednak oto jak zacząłem,
Przeczytaj wprowadzenie do algorytmów autorstwa Cormena. <\ Br> To doskonałe miejsce na rozpoczęcie. Podczas nauki staraj się zrozumieć każdy dowód tak długo, jak to możliwe. Jeśli dobrze rozumiesz dowód, spróbuj zakodować tę samą logikę w dowolnym wybranym języku. (Trwa to trochę dłużej, ale warto spróbować)
Śledź najważniejsze konferencje w teorii, takie jak
FOCS
SODA
STOC
EC (Handel elektroniczny) - Algorytmiczna teoria gier
COLT (Konferencja na temat teorii uczenia się) - Nauka teorii
CRYPTO - Kryptografia
SOCG (Sympozjum na temat geometrii obliczeniowej) - Geometria obliczeniowa
CCC (Konferencja na temat Złożoność obliczeniowa) - teoria złożoności
Nawet jeśli nie rozumiesz zbyt wiele, staraj się czytać i MYŚLEĆ jak najwięcej. Musisz zrobić jak najwięcej dowodów.
źródło