Czy kodowanie jest ważne, aby być dobrym w informatyce? Czy należy wdrożyć algorytm, aby dobrze go znać?
Pamiętam idiom profesora, że „ nigdy nie koduję”
Czy kodowanie jest ważne, aby być dobrym w informatyce? Czy należy wdrożyć algorytm, aby dobrze go znać?
Pamiętam idiom profesora, że „ nigdy nie koduję”
Odpowiedzi:
Naprawdę nie znasz dobrze algorytmu, dopóki go nie kodujesz.
Kodowanie nie jest ważne dla twojego profesora, ale musisz pamiętać, że nie jest opłacany za robienie rzeczy. Otrzymuje wynagrodzenie za POWIEDZENIE (i NAPISZ rzeczy).
Jestem byłym profesorem matematyki, więc dobrze rozumiem tę dynamikę.
Jeśli chcesz podążać jego ścieżką i być teoretycznym informatykiem, to tak, kodowanie ma mniejsze znaczenie. Ale jeśli to zrobisz, pamiętaj o zachowaniu pokory, wiedząc, że twoje wynagrodzenie jest wypłacane z zasobów zarobionych przez tych, którzy zdecydowali się ZROBIĆ.
Informatyka to nie tylko komputery, ale astronomia to teleskopy
- Edsger Dijkstra
Zwykle się zgadzam.
Jeśli mówisz o byciu czystym akademikiem informatyki specjalizującym się w abstrakcyjnych, fundamentalnych koncepcjach informatyki, niekoniecznie.
Zgubić analogię: to trochę jak pytanie, czy każdy naukowiec rakietowy w NASA powinien lecieć w kosmosie, aby być „dobrym naukowcem rakietowym”. Oczywiście nie. Bycie astronautą jest częścią przemysłu lotów kosmicznych i bardzo praktyczną częścią, ale to nie znaczy, że naziemni naukowcy nie są tak samo ważni na swój sposób.
To powiedziawszy, prawdopodobnie dobrym pomysłem jest ZASTOSOWANIE stworzonego przez siebie algorytmu, jeśli nie napisanie go w prawdziwym języku programowania. W tym sensie można myśleć o projektowaniu algorytmów jako gałęzi matematyki.
Kodowanie nie jest zbyt ważne, aby być prawdziwym informatykiem. A myślenie w kodzie może ograniczać myślenie, gdy starają się opracować użyteczne abstrakcyjne pojęcia. Większość doskonałych programistów nie ma intelektualnego narzędzia do analizowania złożonych algorytmów ani opracowywania pojęć, takich jak języki programowania, zaawansowane algorytmy wyszukiwania i sortowania, teoria skończonych automatów, teoria przetwarzania rozproszonego, R-drzewa, protokoły odporności na uszkodzenia, niezawodne protokoły komunikacyjne, cyfrowe algorytmy przetwarzania sygnałów, teoria kryptograficzna, analiza i optymalizacja wydajności, wydajne buforowanie, redukcja map, niezawodne protokoły bezpieczeństwa itp. Znakomici koderzy i inżynierowie komputerowi mogą zwykle wykorzystywać te teorie w systemach, które próbują zbudować i robią to dość skutecznie, ale tak naprawdę jest to dziedzina inżyniera systemów komputerowych lub programisty.
Kodowanie jest niezwykle ważne dla bycia programistą komputerowym. Przydatne jest również zrozumienie, w jaki sposób zakodować użyteczne abstrakcyjne pojęcia opracowane przez informatyków w działającym kodzie.
Jednym z dużych problemów w informatyce jest to, że często muszą znaleźć rozwiązania problemów matematycznych, które mają niewielką użyteczność w rozwiązywaniu dzisiejszych problemów programistycznych. Nawet gdyby kodowali rozwiązanie, nikt tak naprawdę nie byłby w stanie z niego skorzystać. Pomyśl o teorii cyfrowego przetwarzania sygnałów. Został wynaleziony przez ludzi takich jak Fourier, Hilbert i Shannon, ale zastosowanie do skomputeryzowanych problemów z DSP nie było powszechnie możliwe przed około 20 laty.
Dużym problemem w edukacji komputerowej jest to, że większość ludzi nauczanych przez informatyków nie zostanie informatykami. Ale zbyt wielu informatyków tego nie rozumie. Kodowanie może nie być dla nich ważne, ale jeśli jesteś w ich klasie, prawie na pewno będzie dla ciebie ważne.
Innym dużym problemem w edukacji komputerowej jest to, że wielu prawdziwych informatyków nie ma doświadczenia przemysłowego, aby być przydatnym w nauczaniu tworzenia oprogramowania. Zasadniczo starają się nauczyć czegoś, czego tak naprawdę nie znają. To powoduje, że tracą wiarygodność. Rzeczy ważne w środowisku przemysłowym po prostu często nie rejestrują się u niektórych z tych informatyków.
Długie i krótkie kodowanie jest ważne dla większości ludzi, którzy zostają „informatykami”, ponieważ większość z nich zostanie programistami i inżynierami systemów komputerowych.
Zależy od podpola, w którym przebywa profesor.
Każdy, kto jest kompetentny w analizie numerycznej, to prawdopodobnie świst z Fortranu. Każdy profesor AI zakoduje w Lisp lub Prolog lub coś w tym rodzaju.
W niektórych bardziej matematycznych obszarach naprawdę nie ma potrzeby kodowania. Sam wciąż byłbym podejrzliwy.
Brzmi jakby był bardziej dyskretnym facetem z matematyki ... tylko matematyką i teorią stojącą za informatyką. Weź to, co ci profesorowie mają do powiedzenia z odrobiną soli.
Możesz zrozumieć tylko teorię, ale zawsze odkryłem, że rozumiem algorytmy i takie 1000 razy lepiej po ich zakodowaniu (na przykład sortowanie bąbelkowe vs. Quicksort, dobrze jest znać Big-O, ale widzieć to w praktyce z dużymi danymi -set daje ci pewną aprobatę w świecie rzeczywistym w zakresie pomiaru złożoności obliczeniowej).
Jedną z interesujących rzeczy, które znalazłem, jest to, że im więcej studiujesz teoretyczne aspekty informatyki, tym łatwiejsze staje się kodowanie. W pewnym momencie przestajesz myśleć o rzeczach w określonym języku, ale raczej postrzegasz je jako szersze pojęcia sience computer.
To jest jak pytanie, czy wszyscy angielscy profesorowie powinni być w stanie pisać filmy, seriale telewizyjne, powieści, sztuki i wiersze. Podobnie wyobraź sobie profesora matematyki, który nigdy nie używa liczb do równie dziwacznego pomysłu. To znaczy, że istnieją pewne podstawowe elementy, które nadają kodowaniu pewne znaczenie w nauczaniu podstawowej informatyki. Dlatego profesor powinien znać podstawową składnię języka i pisać programy tak wyrafinowane, jak kursy, które wykłada profesor. Jeśli profesor uczy o projektowaniu kompilatora i nigdy wcześniej nie napisał kompilatora, byłby to poważny problem. Wyobraź sobie szefa kuchni gotującego ciasto, które nigdy wcześniej nie gotowało ani nie jadło ciasta. Aye carumba.
Chociaż widzę pewne zalety implementacji algorytmu, aby go znać, wątpię, że jest to wymóg. W końcu można się zastanawiać, jak daleko sięga do króliczej dziury implementacji, rozumiejąc, w jaki sposób algorytm jest implementowany? Na przykład, czy ktoś musi wziąć dowolny algorytm i wdrożyć go w ramach różnych paradygmatów, takich jak programowanie proceduralne, obiektowe i funkcjonalne, aby naprawdę go poznać? Czy muszą wiedzieć, w jaki sposób kompilatory tłumaczą cały kod i przenoszą bity na poziomie elektron-elektron, aby być raczej pedantycznym.
„Nigdy nie koduję” implikuje jednak ograniczenie zarówno przeszłości, jak i czasu teraźniejszego. Można również domniemywać, że „kodowanie” jest skromną rzeczą, która znajduje się poniżej profesora, w inny sposób, aby zobaczyć stwierdzenie, które może mieć raczej negatywny ton, który może nie wypaść dobrze w niektórych kręgach.
Pomimo tego, że jestem profesjonalnym programistą, uzyskałem dyplom inżyniera mechanika.
Możesz być dobrym projektantem mechanicznym z bardzo małym doświadczeniem w budowaniu i obróbce części, pozostawiając to zadanie operatorom. Ale wiedza, jak budować i obrabiać części, uczyni cię znacznie lepszym inżynierem, ponieważ możesz przewidzieć trudności związane z produkcją i montażem wszystkiego, co projektujesz.
To samo dotyczy oprogramowania. „Koder” to mechanik lub technik, podczas gdy inżynier oprogramowania to inżynier. W wielu miejscach jedna osoba wykonuje obie prace. Nie jest to niemożliwe, a w przypadku niektórych bardzo abstrakcyjnych kwestii może działać pozycja „tylko inżynierska”.
Ale w zdecydowanej większości nie ma żadnej korzyści z odmowy kodowania.
O ile nie zastanawiasz się i nie skończysz z problemem zatrzymania, zawsze jest zastosowanie kodowania w każdym aspekcie informatyki.
Jedyną klasą CS, którą wziąłem bez programowania, była teoria. Wyobrażam sobie, że jest wielu fizyków, którzy mówią: „Nigdy nie eksperymentuję”, ale prawdopodobnie są to również ci, którzy mówią: „Nigdy niczego nie odkrywam”. Byłbym zaskoczony, gdyby ich to obchodziło.
Jako student informatyki myślę, że na początku lepiej jest zrozumieć pojęcia związane z tworzeniem oprogramowania. Gdy poznasz ideę oprogramowania i jego współdziałanie z komputerem, nadszedł czas, aby rozpocząć kodowanie i rozwiązywanie określonych problemów związanych z implementacją.
Jest to tak jak „wyjątki programowe”, na początku zajmujesz się nimi tylko dlatego, że zrobiłeś coś, co nie było dozwolone. Następnie, kiedy się ich nauczysz, zacznij robić to samo z kodem, aby był bardziej szczegółowy.
Myślę, że ludzie, którym nie zależy na takich koncepcjach, jak programiści, którzy używają wyjątków jako normalnego przepływu pracy w swoich aplikacjach. Wiedzą JAK, ale tak naprawdę się nie DLACZEGO.
Mam inny idiom dla twojego profesora:
Ci, którzy potrafią, robią, ci, którzy nie mogą, nauczają.
imo, rozmowa jest tania. Każdy może bez końca gadać o „teorii” i nazwać to „informatyką”. Ale dopóki nie zostanie wprowadzona w życie, teoria nie jest zbyt przydatna, ponieważ nie ma możliwości jej potwierdzenia. Chciałbym wziąć prof za opinię o czymś znacznie bardziej poważnie , gdybym wiedział, że rzeczywiście rozwiązać konkretny problem w kodzie, niż gdyby po prostu regurgitating „teorii”, które mogą lub nie mogą mieć żadnego dowody potwierdzające w celu wykonania kopii zapasowej swojego punktu widzenia.