Po pierwsze, przeszukałem już stronę i przeczytałem wszystkie poprzednie tematy „samouków vs. uczelni”. Większość odpowiedzi broniła, że pójście na studia było najlepszym wyborem z dwóch głównych powodów:
Idąc na studia daje papier, który jest niezbędny do lądowania miejsc pracy, szczególnie w trudnych czasach ekonomicznych.
Uczęszczanie na studia daje ci solidne podstawy programistyczne, ucząc cię zasad, które będą niezbędne bez względu na język / ścieżkę, którą podążasz.
Oto moje pytanie: w ogóle nie martwię się o przyczynę 1, ponieważ mam już własną firmę (buduję strony internetowe / zajmuję się marketingiem afiliacyjnym) i stabilną sytuację finansową, więc jestem pewien, że nie będę musiał się rozglądać dla pracy.
Martwię się jednak o powód 2. To znaczy, chcę się upewnić, że będę miał solidne podstawy programistyczne, jak wszyscy inni, i zastanawiam się, czy jest to możliwe dzięki samokształceniu.
Załóżmy, że poświęcam swój czas na studiowanie bardzo podstawowych zagadnień, takich jak matematyka dyskretna, projektowanie algorytmów, logika programowania, architektura komputerów, asemblowanie, programowanie C, bazy danych i struktury danych - głównie przy użyciu książek, zasobów online i dużej ilości kodowania. Powiedzmy, że spędzam 1-2 lata na opisywaniu tych podstaw.
Myślisz, że mój fundament byłby solidny, czy wciąż brakuje go w porównaniu z kimś, kto poszedł na studia?
Odpowiedzi:
Absolutnie zdecydowanie. Tak, to możliwe. Skąd mam wiedzieć? Ponieważ to zrobiłem!
To jest trudne. Nie miej złudzeń co do tego. Bez nauczyciela, do którego można się udać, gdy coś nie działa, musisz sam rozwiązać problemy. Jest wiele do nauczenia się, a jeśli nie jesteś zmotywowany lub nie jesteś wystarczająco oddany, nie będziesz w stanie tego zrobić. Dla mnie trudno jest być zmotywowanym do wszystkiego, ale tak bardzo lubię się uczyć i programować, że nie muszę sam walczyć.
Kilka porad:
Skąd wiesz, kiedy skończysz? Powodem, dla którego podejmujesz studia, jest to, że staniesz się biegły w programowaniu. Jeśli masz pewność, że możesz napisać dowolne oprogramowanie w rozsądnym czasie, jesteś programistą, ale to nie znaczy, że powinieneś przestać się uczyć.
Nawiasem mówiąc, teraz cierpię z powodu punktu pierwszego. Bycie daleko od jakichkolwiek firm tworzących oprogramowanie też nie pomaga.
źródło
Myślę, że najważniejszym oznaczeniem College / University jest nauczenie cię samodzielnego uczenia się. Nie ma znaczenia, czy to programowanie, fizyka, chemia, matematyka itp. Uniwersytet nauczył mnie, jak się uczyć bez niczyjej pomocy.
źródło
Niektóre osoby rozwijają się w środowisku akademickim, a nawet wymagają od nich nauki (zwykle jako forma motywacji). Inni (jak ja) tego nie robią i mogą nawet uznać je za odrażające.
Miałem długą karierę w oprogramowaniu bez dyplomu. Pod koniec kariery zawodowej pełniłem rolę architekta, a starszy architekt mojego projektu powiedział, że moja wiedza na temat oprogramowania i informatyki (te dwie rzeczy to nie to samo!) Łatwo dorównuje posiadaniu magistra z Waterloo University (jeden najlepszych kanadyjskich szkół CS).
W mojej puli wiedzy są oczywiście pewne braki. Moje umiejętności matematyczne są wystarczające, aby nadążyć za tym, czego się dzisiaj uczę. Nienawidzę czystej matematyki i generalnie nie można tego robić, aby być na bieżąco z najnowszymi i najlepszymi. Czasami to utrudniało mi rozumienie rzeczy (np. Haskell), dopóki nie podniosłem moich umiejętności matematycznych do poziomu wystarczającego do zrozumienia pojęć. Ale faktem jest, że informacje są dostępne bez mojej obecności w pobliżu uniwersyteckiego działu CS lub matematyki. Wszystko, co naprawdę mogę powiedzieć, to to, że czasami moja sekwencja uczenia się jest nieoptymalna - czasami muszę cofnąć się i wypełnić jakiś fundamentalny materiał, zanim przejdę dalej do tego, co robię.
źródło
Myślę, że twoje podstawy będą solidne, pod warunkiem, że będziesz miał dyscyplinę, by usiąść i nauczyć się tych wszystkich rzeczy i przejrzeć przykłady. Mam dyplom, ale to inżynier, a nie informatyka. Pracowałem z wieloma doskonałymi profesjonalnymi programistami, którzy nauczyli się wszystkiego, co powinni wiedzieć. Samokształcenie jest czymś, co musisz mieć, aby być dobrym programistą, ponieważ zawsze pojawia się nowa technologia, której nie nauczyłeś się w szkole.
źródło
Jak w przypadku większości rzeczy w życiu, moja odpowiedź jest solidna , zależy od osoby . Mocno wierzę, że nie potrzebujesz licencjata, aby zostać programistą; Jednak w oparciu o moje doświadczenie, uczelnia ma tendencję do wystawiania ludzi na problemy i pomysły, z którymi nie mogliby sami się spotkać poprzez niezależne badania.
W dzisiejszych czasach zmotywowana osoba może przejść do trybu online, a dzięki źródłom takim jak MIT Open Courseware , przygotowuje kurs niezależnych badań, który zapewni mu dość szeroki zakres wiedzy, i to właśnie ta wiedza, którą czuję, jest co czyni dobrego programistę. Jednak osoba, która nie jest tak zmotywowana, może odkryć, że jest w stanie się nauczyć, ucząc się jednego języka, i może po prostu osiągnąć karierę zawodową.
Jak już wspomniałem, uważam, że to dobro wiedzy jest tym, co czyni dobrego programistę, ponieważ oznacza to, że byli narażeni na więcej problemów i rozwinęli swoje umiejętności rozwiązywania problemów. Nie musisz chodzić do szkoły, aby zdobyć tak szeroki zakres wiedzy, ale szkoła zdecydowanie pomaga w tym zakresie, ponieważ program dobrego stopnia zmusi cię do rozwinięcia zakresu wiedzy.
źródło
Jako programista stale się bawię interfejsami API i językami niezwiązanymi z pracą (Ruby on Rails, Python, Node.js itp.). Robię to bardziej dla zainteresowania niż dla pracy. Mam 2 stopnie naukowe, ale nawet po 10 latach programowania w Javie / JEE stwierdzam, że naprawdę tęsknię za teorią BS (Big O, Algorytmy, Descrete Math itp.).
Biorę wieczorowe zajęcia w niepełnym wymiarze godzin, aby uzyskać licencjat z systemów informatycznych, ale w tym programie nie ma zbyt wielu teorii CS. Zdobywam dyplom głównie po to, żeby mieć „papier”, ponieważ jest to bardziej biznes niż techniczny, ale to moja jedyna opcja na zajęcia wieczorowe.
Sprawdź MIT Open Coursware . To nic nie kosztuje i jest świetnym źródłem do uzupełnienia luk w teorii CS / Math.
źródło
Uważam, że błędem jest myśleć, że uniwersytet z definicji da ci dobre podstawy programistyczne. Nauczą cię wielu teorii i wielu różnych sposobów myślenia o problemie. To wszystko dobrze i dobrze, ale przekształcenie tej teorii w praktykę to inny zestaw umiejętności.
Jedynym skutecznym sposobem nauczenia właściwego stosowania teorii jest mentoring i działanie. Krótko mówiąc, musisz spróbować zastosować teorię najlepiej, jak potrafisz, i polegać na kimś z większym doświadczeniem, aby dać ci konstruktywną krytykę lub wskazać właściwy kierunek. Twój mentor nie wykona za ciebie pracy, ale pomoże ci lepiej wykonywać swoją pracę.
Nie byłbym programistą, którym jestem dzisiaj bez pomocy dobrych mentorów na początku mojej kariery. Praca nad projektami typu open source to dobry sposób na znalezienie mentorów, którzy chętnie spędzą trochę czasu na opracowywaniu szczegółów. Przynajmniej takie było moje doświadczenie. Miałem też mentora w mojej pierwszej pracy programistycznej, która pomogła mi zrozumieć, jak projektować łatwo rozszerzalne aplikacje.
Czy jest więc korzyść dla uczelni wyższej? Tak. Nie są one jednak przystosowane do tego, aby pomóc ci w przełożeniu teorii na praktykę, chyba że weźmiesz ją na siebie. Jeśli zaczniesz próbować zastosować to, czego się uczysz na uniwersytecie, możesz zacząć zadawać odpowiednie rodzaje pytań, które pomogą ci naprawdę zrozumieć teorię na bardziej praktycznym poziomie. Jeśli czekasz, aż znajdziesz się w pracy, właśnie opóźniłeś ten ważny proces uczenia się.
źródło
Ludzie mają tendencję do przeceniania znaczenia podstaw teoretycznych, matematyki i wiedzy algorytmicznej IMO. Powody, dla których programiści popychają te rzeczy i przeprowadzają z nimi wywiady, to fakt, że sami są „miłośnikami” matematyki.
Teraz jest oczywiście trochę programowania, w którym warto wiedzieć, czym jest „maszyna stanowa” lub jak korzystać z wyszukiwania „Booyer-Moore”. Istnieją nawet problemy, w których przydatne może być poznanie prawdziwej matematyki, na przykład w przypadku obliczeń finansowych lub symulacji fizycznych.
Chodzi o to, że 90% programowania na ogół nie jest żadnym z nich, niewielu z nas robi hardkorowy rozwój algorytmów. Większość rzeczy, których musisz się nauczyć, możesz nauczyć się w miarę postępów. Nie trzeba budować olbrzymich budowli fundamentowych, ale raczej stale ciekaw, jak rozwiązywać różne problemy.
Jestem w 100% samoukiem i nigdy nie miałem problemu z poznaniem algorytmów. Wykonałem pracę w systemach finansowych i nawet to było wykonalne bez głębszych teoretycznych umiejętności matematycznych.
Dobra znajomość programowania nie polega na podstawach, ale na ciągłym rozszerzaniu zestawu narzędzi, a zdobywana wiedza jest o wiele bardziej warta, gdy można umieścić ją w kontekście problemu, który naprawdę wymaga rozwiązania, a nie tylko badań teoretycznych.
Nie musisz wiedzieć wszystkiego szczegółowo, po to jest Google, StackOverflow i Wikipedia :) Musisz jednak wiedzieć o istnieniu różnych narzędzi i metod, aby uświadomić sobie, że są one odpowiednie i możliwe do zastosowania w twojej sytuacji. Musisz także mieć doświadczenie w wyborze narzędzia, które najlepiej zastosować. Podstawy są na ogół rozpieszczane przez początkujących, ponieważ nie mają doświadczenia, dlaczego dane narzędzie byłoby przydatne. Jeśli masz duże doświadczenie, niektóre rzeczy po prostu „klikną” na swoje miejsce.
Niektóre rzeczy poleciłbym jednak:
Jeśli nie, zacznij uczyć się o wzorach projektowych, jest to najbardziej praktyczne i uniwersalne narzędzie w twoim zestawie narzędzi.
Jeśli jesteś ciekawy, przeczytaj kilka ogólnych przeglądów różnych algorytmów, abyś wiedział, co tam jest, kiedy może być potrzebny
Dowiedz się więcej o równoległości i wielowątkowości (i niektórych programach funkcjonalnych). Możliwość obsługi wielu rdzeni jest dziś ważna i wkrótce stanie się niezbędna, więc jest to kluczowa wiedza.
Wykonuj ambitne i eksperymentalne projekty hobby, które popychają Twoje umiejętności do przodu i zmuszają Cię do uczenia się w kontekście.
źródło
Jedną z rzeczy, które pomoże Ci college, z którą możesz mieć trudności w samodzielnym dostępie, jest umiejętność czytania i rozumienia prac naukowych, zwłaszcza matematyki. Jednak nawet to można osiągnąć samodzielnie, ale pomaga to instruktorom i rówieśnikom, którzy prowadzą Cię w procesie uczenia się, aby szybciej i łatwiej zdobywać wiedzę.
Jako generalny programista systemów informatycznych prawdopodobnie nie będziesz czytać prac naukowych, które mają się dobrze. Dzisiejsze systemy informacyjne są dość proste, a większość intensywnych algorytmów, takich jak wyszukiwanie, sortowanie i indeksowanie, jest wykonywana przez systemy baz danych. Dopóki rozumiesz pojęcia, nie powinieneś mieć trudności.
Jeśli zdecydujesz się zaangażować w trudniejsze obszary programowania, takie jak opracowywanie mikroprocesorów, rozwój kompilatora, sztuczna inteligencja itp., To umiejętność czytania i rozumienia dokumentów naukowych może mieć kluczowe znaczenie dla szybkiego i wydajnego wdrażania systemów.
O ile jest w stanie zastosować wiedzę, jest to bardzo indywidualne. Ludzie, którzy chodzą na studia, mogą nie być w stanie stosować zasad, a także osoby, które nie chodzą na studia. Istnieje stare powiedzenie: „nie ma znaczenia, co wchodzi, ale co wychodzi”.
Podsumowując, wiedza, którą zdobywasz na studiach, może pomóc ci lepiej zrozumieć świat akademicki i komunikować się z nim. Wiedzę można jednak zdobyć bez konieczności pójścia na studia. Dyplom ułatwia przekonanie innych, że wiesz, co robisz i że rozumiesz akademickie prace badawcze.
źródło
Nie sądzę, aby wielu ludzi uzyskało tak samo „fundament” dzięki samokształceniu, jak gdyby poszło na uniwersytet, przynajmniej nie w tym samym czasie. Dwa lata czytania przypadkowych książek i zabawy problemami z zabawkami w wolnym czasie nie doprowadzą cię do tego samego poziomu, co dwa lata skoncentrowanego studiowania ze zorganizowanym programem nauczania. Czy to wystarczy, aby się utrzymać? Całkiem możliwe. Ale jeśli naprawdę chcesz „tak dobrego fundamentu jak ktokolwiek inny”, to potrwa to dłużej niż dwa lata.
Aby cię nie zniechęcić, na pewno nie byłaby to strata czasu. Po prostu nie jestem zbyt pewny, że wiele osób może zebrać równowartość dwóch lat studiów w ciągu dwóch lat, prowadząc własną działalność gospodarczą i prowadząc życie osobiste / rodzinne.
źródło
Od dziesięciu lat rozwijam się zawodowo bez dyplomu. Kiedy przeprowadzam wywiad z ludźmi, jestem zainteresowany ich zdolnością do rozwiązywania problemów i kodowania. Mówiąc to, są pewne firmy / role, do których nie kwalifikuję się wyłącznie dlatego, że nalegają na dyplom. Niektóre firmy konsultingowe mają te zasady, ponieważ mogą sprzedawać ci więcej klientów.
źródło
Jeśli grasz w gry liczbowe, osoby z wykształceniem wyższym otrzymują lepszą pracę i wynagrodzenie.
Nie każdy, kto uzyskał stopień naukowy, coś zapamiętał.
Większość ludzi nie poświęciłaby czasu na poznanie teorii / tła / podstaw, tak jak gdyby poszła na studia. Może twoi rodzice wsparliby cię przez 4 lata samodzielnej nauki; wszyscy inni muszą znaleźć pracę.
Wadą byłoby, gdybyś miał stopień CS i nie osiągnął określonego poziomu, możesz być postrzegany jako posiadający małą moc. Spójrzmy prawdzie w oczy, jeśli nie dostaniesz go w ciągu 4 lat karmienia łyżką, nie rozwiążesz go na boku, trzymając się i pracując w pełnym wymiarze godzin. Oczywiście wyjątki.
źródło
Jeśli naprawdę chcesz zarabiać na życie w dziedzinie tworzenia oprogramowania bez dyplomu, proponuję skontaktować się z lokalnym uniwersytetem. Zdobądź od nich listę kursów, które byłyby wymagane, gdybyś uzyskał dyplom. Zdecydowana większość uniwersytetów będzie miała te informacje na żądanie, a także streszczenie / sylabus / listę książek dla każdego z kursów. Zejdź na dół tej listy. Sprawdź książki, o których mowa. Zobacz, jakie tematy obejmują. Jeśli zobaczysz coś, czego nie rozumiesz, kup / sprawdź książkę i naucz się jej. Pod koniec tego procesu powinieneś przynajmniej wiedzieć, co wiesz, a czego nie, i być dość konkurencyjnym ze swoim przeciętnym absolwentem college'u (który i tak mógł spać / oszukiwać przez niektóre z tych kursów).
źródło
Tak i nie. Niektóre rzeczy są brutalnie trudne do zrozumienia bez nauczyciela. Zwykle jest to bardziej matematyczna sprawa.
Wierzę - i nadal wierzę po tym , jak pomogłem w rozpoczęciu kierunków CS jako TA - że każdy bez upośledzenia umysłowego może nauczyć się kodować na poziomie PHP / Java / C #. Zasadniczo nie jest to trudne.
W tym przypadku nie ma też montażu ani innych obszarów technologicznych, o których wspominasz. Są to szczegóły implementacji, które warto znać.
Struktury danych, algorytmy, projektowanie cyfrowe, architektura komputerowa i algebra bazy danych są dość trudne, jeśli nauka jest głęboka.
źródło
Nie mam wątpliwości, że zmotywowana i oddana osoba mogłaby osiągnąć solidne podstawy, ale jeśli zdecydujesz się nie iść na stopień, stracisz wiele aspektów, które poprawią twój rozwój. Jedną z tych rzeczy i być może najważniejszą jest kontakt z podobnie myślącymi ludźmi, z którymi możesz wymieniać pomysły i koncepcje. Bardzo miło jest także słuchać doświadczeń instruktorów, którzy mają cenne mądrości do przekazania, a czasem potrafią wyjaśnić źle zrozumiane pojęcia w jednym lub dwóch zdaniach. Miło jest móc wyjaśnić pojęcia w momencie pierwszego ujawnienia, a nie mieć złe pomysły i rozwiązać je później.
źródło