Jaki jest najtrudniejszy przedmiot / teorię CS, którą studiowałeś, ale ważny w tej dziedzinie? A powód proszę?
Jaki jest najtrudniejszy przedmiot / teorię CS, którą studiowałeś, ale ważny w tej dziedzinie? A powód proszę?
Odpowiedzi:
„W informatyce występują 2 trudne problemy: pamięć podręczna, nazewnictwo i błędy off-by-1”
Szczerze mówiąc, konstrukcja kompilatora!
Projektowanie i analiza algorytmów
Myślę, że to pytanie zależy od nauczyciela, którego miałeś i od tego, jak ten temat był zorganizowany w twojej karierze.
Analiza algorytmów może być tak trudna, jak ktoś chce. Weź pod uwagę, że istnieją nierozwiązane problemy, a nie tylko to: problemy, których nie można rozwiązać.
Chodzi o to, że możesz mieć problem, a jeśli wiesz, że nie można go rozwiązać, to idealnie. Ale co jeśli nie? Możesz spędzić dużo czasu próbując wykazać, że jest to NP-Complete, lub próbując znaleźć rozwiązanie czasu wielomianowego, aby je rozwiązać.
Wykazanie kompletności NP nie jest łatwe. Tak, znanych jest wiele problemów, ale chodzi o znalezienie redukcji, aby wykazać, że jest to NP-Complete. A co, jeśli spędzasz wiele godzin / dni / miesięcy próbując to zademonstrować, a można to rozwiązać w czasie wielomianowym? :)
Istnieją również inne przedmioty, takie jak kompilatory , teoria grup i pierwotne funkcje rekurencyjne, które mogą być tak trudne, jak plan zajęć lub nauczyciel chce;)
Rozpoznawanie wzorów, tj. Sztuczna inteligencja. Odnosi się to do inteligentnego przetwarzania wraz z innymi narzędziami do rozpoznawania wzorów, takimi jak optyczne rozpoznawanie znaków, głos do tekstu, identyfikacja twarzy itp.
Wiele „fajnych” rzeczy, które możesz zrobić lub chcesz zrobić z komputerami, polegają na tych algorytmach, a od dziesięcioleci staramy się je doskonalić bez większego sukcesu.
Moim wyborem jest teoria obliczalności
(Hmm ... może to nie jest takie ważne, ale z pewnością było trudne)
Istnieją tylko dwa trudne problemy w informatyce: unieważnienie pamięci podręcznej i nadawanie nazw. - Phil Karlton
teoria kategorii (matematyka dyskretna), ale warto
Kryptografia
Jeśli zrobisz to trochę źle, może kosztować firmę miliony.
Systemy operacyjne, szczególnie część, która ma coś wspólnego z wątkami.
A powodem nie jest to, że tak trudno było zmusić 5 filozofów do zjedzenia pizzy widelcem. Powodem jest to, że pisanie wielowątkowego kodu jest samo w sobie trudne i niekoniecznie łatwe dla ludzkiego (przynajmniej męskiego - według mojej żony) umysłu do obliczenia.
Ja również głosuję na projekt kompilatora. Zwłaszcza tam, gdzie wchodzi część DFA i NFA. Nie jestem też tak jasny na temat problemów związanych z NP.
Technicznie jest to gałąź matematyki, ale jest bardzo istotna w CS.
Prawie wszystko w CS opiera się na kolejkach (widoczne (oczywiste) i niewidoczne (nie tak oczywiste ani dorozumiane)).
W pierwszych dniach CS kolejki były oczywiste.
Kolejka programów (każdy program talia kart).
W dzisiejszych czasach kolejki nie są tak oczywiste. Internet na przykład: sieć z komutacją pakietów, ale pakiety tworzą kolejki, a routing pakietów jest formą minimalizacji kolejki.
Problemy z zabawkami, które dostajesz na kursie, nie są zbyt trudne, ale kiedy zaczniesz rozważać prawdziwe problemy, zamieni się to w ciężką harówkę.
Interpretowanie wymagań klienta, gdy klient tak naprawdę nie wie, czego chce. Tego nie uczy się na studiach i jest to jedna z najważniejszych umiejętności.
Osobiście moja była logiką formalną. Trudno było zacząć od tego, ale kiedy już zrzucisz zasady i uda ci się z nimi grać wystarczająco dużo, twój mózg idzie Logic++;
, co w rozwoju jest bardzo dobrą rzeczą.
Na marginesie, odpowiadam bezpośrednio na to pytanie - zdecydowanie nie był to najtrudniejszy temat, kiedy ukończyłem studia, ale prawdopodobnie był to najtrudniejszy temat „odpowiedni do życia”.
Konstrukcje kompilatora. Trudno, ale trzeba zrozumieć koncepcje
Kernel Design ktoś? Cóż, tak naprawdę nie wiem, jak to się robi i jakie są docelowe funkcje systemu operacyjnego, ale dla mnie myślenie o zaprojektowaniu jądra musi być trudnym zadaniem.
Myślę też o bezpieczeństwie komputerowym ; Naprawdę nie wiem, co sprawia, że system jest niebezpieczny, z wyjątkiem oczywiście oczywistych przepełnień bufora, zastrzyków XSS i SQL.
Nie jestem pewien, ale wydaje się, że niektóre algorytmy są również niebezpieczne; Spójrz na projekt MetaSploit, zawiera listę wszystkich rodzajów i rodzajów naruszeń bezpieczeństwa: widać, że istnieje wiele sposobów, w jakie program może zostać uszkodzony.
Istnieje wiele niezręcznych tematów w tej dziedzinie, ale moje wybory dla samej ciągłej trudności to te dotyczące Global System Properties . Przykłady tego ogólnego tematu obejmują:
Są trudne, ponieważ szukasz czegoś, co istnieje tylko wtedy, gdy wszystko jest w porządku; trzeba Global Property systemu i jeszcze praktycznie wszystkich dostępnych narzędzi (oraz wszystkie te, które skala do rzeczywistych problemów w moim doświadczeniu) tylko naprawdę lokalnej rozumowania. Jest to trudny proces przechodzenia od wnioskowania na temat fragmentów programu do całego shebang, szczególnie dlatego, że całkowicie możliwe jest posiadanie kawałków, które same w sobie są poprawne, ale gdzie nadal występują subtelne błędy, ponieważ komponenty są nieprawidłowo rozmieszczone; błędy mogą być niepożądanymi nowymi cechami…
Usługi informacji zarządczej
W czasie studiów miałem jeden przedmiot zarządzania w każdym semestrze, co całkowicie mnie wkurzyło.
Twardy! oraz przedmioty, takie jak Compiler projekt , OS projekt etc są trudne, ale są naprawdę interesujące i wyzywające. Naprawdę pomieszałem w tematach takich jak System informacji zarządczej / Usługi itp., Ponieważ są one pełne nudy i trzeba przejść wiele teorii.
Jeśli pracujesz w C / C ++, najważniejsze są najważniejsze pojęcia. Ale jakoś nigdy nie zrozumiałem tego w pełni na studiach.
Projektowanie i analiza algorytmów. Nie chodzi o to, że trudno jest zrozumieć i przeanalizować znane algorytmy, ale o to, że projektowanie i analiza nowych algorytmów dla trudnych problemów jest trudna i wymaga szerokiego zrozumienia wielu obszarów i praktyki w stosowaniu wielu różnych technik.
Jaki jest najtrudniejszy przedmiot / teorię CS, którą studiowałeś, ale ważny w tej dziedzinie?
Dyskretna matematyka.
Było to trudne, ponieważ teorie są bardzo luźno ze sobą powiązane, ale są stosowane w CS. Myślę, że za dużo zapamiętywania ...
Dowód indukcji, Big O, rekurencja, dzielenie i podbijanie, teoria grafów, bla bla ... argh!
Kompilator był dla mnie łatwy, ponieważ musieliśmy wziąć teorię automatów. ^^
Lubię twoje odpowiedzi (i nie zapomniałem o ich poprawieniu), takie jak kompilator, jądro itp., Ale większość programistów nigdy nie spotkała się z tymi problemami. Jest nieco łatwiejszy, ale bardziej powszechny problem: współbieżność - wątki, blokowanie. Bardzo łatwo jest napisać program, który generuje magiczne błędy, jeśli popełniamy nawet mały błąd w architekturze współbieżności.
Mówię więc, że nie jest to najtrudniejszy problem w informatyce, ale ponieważ jest powszechnie używany, jest niebezpieczny.
Programowanie obiektowe
Prawdopodobnie dlatego, że obciąłem zęby FORTRAN i APL, ale od lat zmagałem się z językami ściśle proceduralnymi do przedmiotów. Nie pomaga to, że tak zwani „eksperci” piszą sprzeczne artykuły i samouczki na temat tego, co to znaczy być zorientowanym obiektowo oraz najlepszych / właściwych sposobów konstruowania programów zorientowanych obiektowo.