Zaczynam studia podyplomowe z inżynierii i będę pracował nad projektami z zakresu obliczeń naukowych. Zauważyłem, że dyskutowano o zaletach i wadach implementacji własnych algorytmów tutaj . Czy analiza kosztów i korzyści związanych z wdrażaniem własnych algorytmów w porównaniu do korzystania z bibliotek różni się w przypadku początkujących studentów?
10
Odpowiedzi:
Moim zdaniem, jako początkujący student nie zmienia odpowiedź David Ketcheson tutaj do kwestii związanej już w swoim poście.
Koduj minimalne wersje algorytmów, których chcesz się nauczyć. Następnie odłóż je na bok. Kodowanie własnych algorytmów jest najbardziej przydatne do nauki, ale do kodu badawczego (lub produkcyjnego), chyba że twoim celem badawczym jest napisanie oprogramowania, które ulepszy najnowocześniejsze biblioteki (jeśli w ogóle istnieją), „ lepiej skorzystać z bibliotek. Biblioteki będą prawdopodobnie lepiej udokumentowane, skalowalne i bardziej niezawodne niż to, co sam kodujesz, chyba że jesteś (lub staniesz się) naprawdę dobry w kodowaniu. Ponadto biblioteki prawdopodobnie zostaną dla Ciebie przetestowane i debugowane (choć oczywiście zależy to od tego, kto napisał bibliotekę ...). Będziesz odpowiedzialny za obsługę, debugowanie i testowanie kodu napisanego na potrzeby pracy magisterskiej, a aby zaoszczędzić czas, pomaga to zminimalizować ilość kodu, który musisz napisać.
Jedyne inne scenariusze, które mogę wymyślić (tzn. Mogą istnieć inne) to:
źródło
Chciałbym rozszerzyć rozważną odpowiedź Geoffa . W szczególności chcę dać ci nieco więcej spojrzenia na wartość twoich wysiłków programistycznych w porównaniu do wysiłków badawczych we wczesnej karierze akademickiej.
Przekonasz się, że umiejętność pisania oprogramowania wspomagającego twoje badania naukowe uczyni cię cennym członkiem niemal każdego zespołu badawczego. Jednak ten czas niekoniecznie zostanie uznany za „cenny” przez twoich rówieśników akademickich lub tych, którzy zatrudniają na stanowiska akademickie.
Z ankiety badawczej z 2011 r. Przeprowadzonej w Princeton, „A Survey of the Computational Science” :
Nie oznacza to, że nie jest dobrym pomysłem wdrożenie lub przeprojektowanie podstawowej biblioteki lub aplikacji, ale jeśli zamierzasz zaangażować się w poważne opracowanie oprogramowania (ponad 25% czasu pracujesz z kodem), zachowaj te trzy myśli w myślach.
Złożoność i ryzyko rosną wykładniczo wraz z wielkością projektu i liczbą programistów. Dopóki nie napiszesz ani nie pracujesz z większymi programami lub zespołami programistów, które wykraczają poza twoje laboratorium, trudno będzie ci dobrze docenić ten i właściwie przewidzieć wysiłek.
Musisz być dobry. Pisanie przydatnego oprogramowania wymaga pewnej dojrzałości, zarówno jako programista, jak i naukowiec aplikacji. Musisz wiedzieć, jakie są ważne funkcje, gdzie są ryzyka numeryczne, i umieć prognozować wysiłki programistyczne dla danego zestawu funkcji i niezawodności. Oczywiście jedynym sposobem na osiągnięcie dobrego jest poświęcenie czasu na projekty, na których nie jesteś wiodącym lub które mogą bezpiecznie zawieść lub zostać opóźnione, co prowadzi mnie do mojej ostatniej kwestii.
Chociaż wiele laboratoriów badawczych i stanowisk przemysłowych wysoko ceni doświadczenie w programowaniu, programowanie naukowe może stanowić potencjalną szkodę dla kariery naukowej, nawet jeśli oprogramowanie przynosi korzyści naukowe bardziej niż dokumenty. Cały ten czas poświęcasz na naukę dobrego programowania, programowania, dokumentowania swojego kodu i uczynienia go solidnym, co przekłada się na prace, które nie są pisane. Doradca nie zawsze będzie miał na względzie dobro swojego ucznia, ponieważ jest to jeden z tych przypadków, w których uczeń może zapewnić pracę, która jest korzystna dla grupy doradcy bez korzyści dla liczby cytowań ucznia. Znajdź jednego lub więcej zaufanych mentorów w dziedzinie, którą jesteś zainteresowany i upewnij się, że dobrze rozumiesz, jakie wkłady są uważane za wartościowe. academia.stackexchange.com jest doskonałym miejscem do zadawania dalszych pytań w tej sprawie.
Jako przypis: liczba projektów wysiłkowych jednoosobowych, które znacznie przyspieszają dowolne pole obliczeniowe, stale maleje, niezależnie od tego, czy jest to obszar zastosowania, czy coś bardziej technicznego, takiego jak gęsta algebra liniowa. Rosnąca liczba pakietów oprogramowania tworzących „chleb powszedni” badań obliczeniowych ma 10 lat lub więcej. Kod naukowy, który nie osiągnął tego poziomu dojrzałości, zwykle zawiera więcej błędów, mniej funkcji i rzadką dokumentację. Staraj się unikać pracy z niedojrzałym kodem, który nie jest aktywnie obsługiwany, niezależnie od tego, ile ma lat.
źródło
Myślę, że analiza kosztów i korzyści zależy od pożądanej wiedzy naukowej w zakresie informatyki, którą chcesz osiągnąć podczas studiów.
Dla większości naukowców, którzy pracują z komputerami biegłymi w obliczeniach naukowych, to wymaga: wysokiego poziomu (abstrakcyjnego) zrozumienia głównych stosowanych algorytmów i umiejętności programowania, które pozwalają efektywnie korzystać z bibliotek oprogramowania (budowanie oprogramowania, łączenie, używanie listy mailingowe).
Natomiast jeśli planujesz zostać ekspertem w dziedzinie naukowej informatyki, będziesz potrzebować głębokiego zrozumienia metod numerycznych, arytmetyki zmiennoprzecinkowej i technologii komputerowej. Teorii tych tematów możesz nauczyć się z książek, jednak doświadczenie i praktyka są potrzebne do budowania i utrzymywania zaawansowanych umiejętności. Dlatego dobrym pomysłem może być zaprogramowanie wszystkiego, czego używasz podczas nauki (np. Jeśli chcesz gotować jak szef kuchni: uczysz się, jedząc to, co gotujesz, i często gotując!)
Jaki jest odpowiedni poziom biegłości, zależy od twojej kariery. Zobacz, jakiego poziomu umiejętności używają ludzie pracujący w Twojej dziedzinie.
źródło