Zastrzeżenia (proszę przeczytać przed przejściem do odpowiedzi):
Widziałem wiele pytań podobnych do tego, które chciałbym zadać, więc oto kilka podobnych pytań.
IMHO Nie są ani tym, o co pytam, ani nie są tak dokładne, na jakie mam nadzieję (nie mam zamiaru odpierać odpowiedzi na poniższe pytania, ani nie dyskredytuję pytających, po prostu chcę być trochę dokładniej):
Czy dyplom CS może być korzystny dla starszego programisty?
Czy stopień CS ma znaczenie przy ubieganiu się o stanowiska programistyczne?
Pozwólcie, że wyrażę się jasno, nie pytam:
- Jak nauczyć się programowania od zera (bez dyplomu z CS)
- Jak reklamować się jako dobry programista (bez dyplomu z CS)
- Jak zdobyć świetnie płatną pracę jako programista (bez dyplomu z CS)
Mały kontekst:
Teraz, gdy nie mam już żadnych zastrzeżeń, pozwólcie, że omówię moje pytanie, zaczynając od krótkiej historii mojego doświadczenia jako programisty.
Po pierwsze, miałem niewiarygodne szczęście. Dano mi kilka możliwości pracy (kilka ciężkich projektów PHP / MySQL z zapleczem i kilka aplikacji WP7 w XAML / C #), dzięki którym naprawdę nauczyłem się wszystkiego, co wiem o tworzeniu oprogramowania. Prawie wszystkie zadania związane z programowaniem, które miałem, były tymi, do których nie miałem odpowiednich kwalifikacji (i wyjaśniłem to moim pracodawcom, zanim mnie zatrudnili). Nie chcę przypisywać sobie uznania, gdy nie jest to należne, ale powiedziałbym, że doskonała pokora obala skromność .
W prawie każdej pracy, jaką wykonałem, przekroczyłem oczekiwania mojego pracodawcy i okazałem się cennym atutem. Istnieją oczywiście wyjątki 1 . Ale chodzi mi o to, że jestem dość inteligentny i mogłem nauczyć się tego, co musiałem wiedzieć, aby odnieść sukces w swojej pracy. Z każdą moją pracą byłem coraz bardziej naciągany.
Uczęszczam do kampusu Uniwersytetu Waszyngtońskiego w Seattle, a obecnie jestem na czwartym roku, kiedy pozostały mi dwa lata, pracując na kierunku matematyka. Podczas różnych prac, które miałem (patrz życiorys, jeśli chcesz tę listę) uczęszczałem również do szkoły jako student na pełen etat.
Jak myślę, że większość programistów zgodzi, studiując typowe ed ogóle licencjackich, w tym wprowadzających programowych kursów absolutnie blednie w porównaniu z pisania prawdziwy kod, budując prawdziwe 2 produkty, współpracując z wspaniałych ludzi i pozytywnie wpływając na życie użytkowników 3 .
Więc ... w miarę upływu czasu ... spędziłem znacznie więcej czasu i energii, pracując zamiast skupiać się na studiach. Czasami występowałem bardzo okropnie , ale w większości byłem w stanie utrzymać się na powierzchni z moimi ocenami.
Jednak program informatyczny na UW jest bardzo , bardzo , bardzo , bardzo konkurencyjny.
Nic więc dziwnego, że zostałem odrzucony przez program. Dwa razy. Jak na ironię, w tym samym półgodzinnym oknie, w którym otrzymałem zawsze uprzejme, choć rozczarowujące powiadomienie o odrzuceniu za pośrednictwem e-maila, dostałem telefon od Amazon oferujący mi letni staż 4 jako SDE.
Kiedy patrzę na innych mężczyzn w moim wieku (21), którzy mają takie same cele jak ja w rozwoju oprogramowania, czuję się całkiem dobrze z tym, gdzie jestem, czego się uczę, kim jestem i co Potrafię. Jest oczywiście o wiele, wiele, znacznie więcej genialnych 21-latków niż ja, nie chcę powiedzieć, że wyróżniam się w tłumie, po prostu czuję, że nie jestem beznadziejnie za postępem mojego przeciętnego rówieśnika .
Jestem przekonany, że mogę odnieść sukces w świecie oprogramowania. Co ważniejsze, czuję się pewny swoich umiejętności i chęci dalszego rozwoju, nauki i krępowania, kiedy naprawdę tego potrzebuję.
Stopień matematyki
Uczę się matematyki wyłącznie w celu uzyskania dyplomu. Są tacy, którzy mówią, że powinienem zrezygnować i zacząć pracę teraz (jak miałem okazję to zrobić), i tacy, którzy mówią, że powinienem naprawdę skończyć studia. Podjąłem decyzję, aby kontynuować studia z zupełnie innych powodów, niż którykolwiek z obozów ma tendencję do poruszania, więc proszę nie zachęcaj mnie w ten czy inny sposób. Rozważ problem „zamknięty” :)
* GŁĘBOKIE ODDECH * ... przepraszam, że jest dłuższy niż się spodziewałem
To w istocie moje pytanie:
- Jak obiektywnie określić, jakie obszary studiów, wiedzę ogólną i inne umiejętności zdobyłbym dzięki dyplomowi CS, którego teraz mogę nie mieć?
Jak posortować te umiejętności w kolejności od najważniejszej?
Jaki jest najlepszy sposób (w ciągu najbliższych dwóch lat), aby uzupełnić moją edukację, aby uzyskać te atrybuty w taki sposób, aby dopasować lub nawet przekroczyć poziom licencjata CS z najlepszego uniwersytetu?
Oto kroki, które już podejmuję:
- Zapytaj społeczność programistów (ten post)
- Kontynuujcie mentoring u doświadczonych programistów, którzy dzielą ze mną podobną ścieżkę kariery
- Zdefiniuj krótko- i długoterminowe cele „uczenia się” oraz kolejne sylaby przedstawiające tematy badań
- Kontynuuj pisanie kodu i pracuj nad projektami, które mnie pasjonują
Jeśli zaszedłeś tak daleko, zasługujesz na ciasteczko :) Doceniam twoją postawę wobec mnie.
Więc ... społeczność programistów, doświadczeni programiści, koledzy, którzy są na tej samej łodzi co ja, jaką radę byś otrzymał?
Ponadto ... proszę pamiętać o moich zastrzeżeniach na górze tego postu dotyczących tego, o co NIE proszę .
Aktualizacja:
Zdaję sobie sprawę, że nie podałem bardzo konkretnych parametrów dla tego, co uważam za udaną „odpowiedź” na moje pytanie (pytania). Myślę, że pytanie jest bardzo niejasne i może uzasadniać wiele „poprawnych” odpowiedzi.
Po rozsądnym czasie wybiorę odpowiedź, która pasuje do następujących atrybutów:
- Wyjaśnia, dlaczego stoi za ich odpowiedzią
- Potrafi mówić z pewnego poziomu doświadczenia (czy to zatrudniania / interakcji lub bycia kimś, kto ma / jest w moich butach)
- Jest zwięzły, ale dokładny, podaje ogólne zasady, najlepiej w połączeniu z konkretnymi przykładami
- Na koniec, biorąc pod uwagę długość, jakiej wydaje się wymagać dopasowanie do powyższego, spraw, aby była to dobrze przekazana odpowiedź, którą można przyjemnie przeczytać. Mam nadzieję, że inni, którzy mogą być tym zainteresowani w przyszłości, zapewnią rozrywkę i edukację dzięki tej odpowiedzi.
Są więc parametry „poprawne”. Wydaje mi się, że są bardzo wysokie, ale zaprojektowałem je jako zarys tego, co według mnie byłoby „najlepszą” odpowiedzią. Oczywiście, mając wystarczająco dużo czasu, jako „odpowiedź” wybiorę najbliższą pasującą odpowiedź.
(1) - Pracowałem nad wcześniejszą wersją tej witryny i chociaż nie mieliśmy wyraźnego rozmawiając o tym, czułem, że w ogóle nie byłem w stanie dobrze (to może być o czym świadczy fakt, że od tego czasu całkowicie zmienili swoją stronę internetową) (2) - Po pierwsze, tak, to prawdziwy produkt (mimo że piszę ten post w Chrome ...) i kopie tyłek. Po drugie, byłem programistą stażystów w testach, napisałem dowód kod koncepcyjny niektórych nowych funkcji dla IE8 ... tak było dawno temu. (3) - W chwili pisania tego posta jestem programistą, który napisał tę aplikację, już nie jestem odpowiedzialny za jego bazę kodu (4) - Mój staż rozpocznie się w czerwcu 2012 roku i będę pracował w sklepie internetowym zespół.
Odpowiedzi:
OK, uważam, że zbyt kuszące jest nie odpowiadanie na twoje pytanie, więc oto jestem ...
Najpierw kilka rzeczy o mnie
Mam 26 lat i dzięki mojemu ojcu (btw, matematykowi i obecnie profesorowi) miałem szansę od bardzo wczesnego etapu mojego życia być przy komputerach. (w 1986 roku, kiedy się urodziłem, choć nie jest to najczęstsza rzecz w tamtych czasach, zawsze mieliśmy jeden lub dwa komputery w domu). To powiedziawszy, i - oczywiście z powodu mojej ciekawej i skłonnej do matematyki / rozwiązywania problemów natury - nie trwało długo, zanim zakochałem się w programowaniu. Najpierw u Pascala w wieku 7-8 lat, a potem właściwie wszystko inne.
Po pierwsze, pozwól mi powiedzieć, że będąc w szkole, zawsze przodowałem we wszystkim, co dotyczy matematyki, po prostu dlatego, że mi się podobało, i szczerze mówiąc, mogłem łatwo pójść za przykładem ojca i zostać matematykiem. Ale tak się nie stało.
To, co się stało, było prawdopodobnie największym błędem w moim życiu (jak dotąd): jak byś to nazwał, gdy ktoś zakochany w kodzie , który mówi ponad 15 językami i napisał tysiące wierszy kodu (od kompilatorów po mikro-jądra i sieć) ramy) w wieku 18 lat, nagle (powody są wciąż zbyt niejasne w moim umyśle, ale ogólny, nawet jeśli subtelny wpływ twojego środowiska nigdy nie jest zbyt nieistotny) postanawia kontynuować karierę w medycynie ? Chyba „błąd”.
Wynik? 5 lat później (w wieku 23 lat) i 1 rok przed ukończeniem studiów medycznych (ciągle pracuję nad hobby jako osobiste projekty programistyczne) zdecydowałem, że mam dość i postanowiłem zrezygnować. I nie tylko tak bardzo nienawidziłem tej nowej dziedziny (medycyny), ale także, że było coś niepokojącego w tej całej sytuacji, nienasycony świąd ukryty głęboko w środku ... ( co by to było, gdyby ...? ) Co więcej, właśnie zdałem sobie sprawę, że moje hobby , które uważałem za wspaniałe, ale nawet nie wyobrażałem sobie, że jest prawdziwą pracą, może nie tylko przynieść trochę pieniędzy, ale także przynieść mi dużo + + utrzymać mnie jako indywidualną osobę. Więc zdecydowałem się rzucić. (= najlepszy wybór, nawet jeśli trochę się spóźniłem).
Oto jestem teraz doktorem (a konkretnie psychiatrą z załamaniem nerwowym, a ściślej mnie!) Idącym na stopień CS (właściwie na trzecim roku; i, szczerze mówiąc, dążenie do tego, aby nie skończyć z brakiem tych przerażających typowych kwalifikacji ...) i bardziej niż szczęśliwy zawodowiec pracujący nad czymś, co uwielbiam i zdecydowanie temat, który mam do zaoferowania najbardziej.
Kilka uwag (z własnego doświadczenia)
Programowanie jest jedną z niewielu dziedzin, w których naprawdę dobre zawsze znajdą się na górze, bez względu na wszystko. I to zdecydowanie NIE jest kwestia typowych kwalifikacji (szczerze mówiąc, gdybym miał firmę i chciałem zrekrutować programistów, w ciągu kilku minut mogę z łatwością stwierdzić, kto jest dobry - niezależnie od tego, czy w ogóle ma dyplom, czy nie)
Aby być dobrym programistą, należy: inteligencja zorientowana na matematykę (ale NIE sama matematyka) i pasja (które sprawią, że niekończące się godziny nauki będą przyjemnością zamiast ciężarem; i nawet jeśli nie zdawałem sobie z tego sprawy, zaufaj ja studiowałem TONY materiału na ten temat w moim życiu, wyłącznie na własną rękę) . Edukacja formalna jest fajna, ale jest nieco przereklamowana. Podstawowymi składnikami sukcesu są pierwsze dwa.
Matematyka jest zdecydowanie miejscem narodzin CS. Ale CS to już nie tylko matematyka. Zawsze miałem silny mózg zorientowany na matematykę, ale w żadnym wypadku nie jestem guru matematyki. I szczerze mówiąc, w codziennym programowaniu (chyba że zajmujesz się budowaniem silnika graficznego lub czymś zbyt zlokalizowanym) najprawdopodobniej nigdy nie potrzebujesz niczego innego niż prosta arytmetyka (dodawanie, odejmowanie, mnożenie, dzielenie, modulo) i kilka rzeczy o tablicach. (wielu nie zgodzi się ze mną, prawdopodobnie matematykami lub zbyt zorientowanymi na naukowców programistami, ale zdecydowanie opanowanie rachunku nie jest tym, czego potrzeba, aby być dobrym programistą). Posiadanie dobrego zaplecza matematycznego może ci pomóc, ale NIE z powodu samej matematyki; pomoże ci to wyłącznie w oparciu o jedną wspólną rzecz, którą dzielą te dwa pola: umiejętności rozwiązywania problemów.
Matematyka jest nauką (i nauką, którą szanuję).
Programowanie to sztuka. (Oraz naukę stosowaną, jeśli nalegasz) Ale pamiętaj o tym: sztuka - i tak zawsze ją traktowałem. I jak w przypadku wszystkich sztuk, nie można się tego nauczyć. Mogę nauczyć cię formalnego rysowania twarzy i uczynić cię lepszym niż przeciętna, ale to nie uczyni cię ani Da Vinci, ani Klimtem. Mona Lisas maluje Da Vincis, a nie starannie wykształceni malarze. Świetny kod jest pisany przez wielkich artystów kodu. A umiejętności i oddanie mogą łatwo zrównoważyć formalną edukację.
Co trzeba zrobić, aby zostać * naprawdę * dobrym programistą?
Na twoje pytania
Chociaż musiałbym naprawdę wiedzieć, co obejmuje dyplom z matematyki, pozwól mi podsumować to, czego najprawdopodobniej będziesz brakować na studiach CS (jako kursy / przedmioty / itp. - inspirowane programem studiów mojego uni ) w żadnej kolejności :
Wiedząc, co należy traktować priorytetowo w ciągle zmieniającej się dziedzinie, jako CS, zawsze będzie hazardem - gra polegająca na zgadywaniu .
Dowiedz się, co chcesz zrobić, i zaufaj swojemu instynktowi. Oczywiście posiadanie solidnej podstawowej wiedzy jest koniecznością. Ale w co zagłębisz się, zależy to wyłącznie od Ciebie. Ponadto starannie zaplanuj swoją karierę: jeśli chcesz zostać zatrudnionym, wybierz swój cel i bądź w tym świetny (np. Chęć zatrudnienia przez Google i nieumiejętność czytania prostego skryptu Python jest prawdopodobnie jedną z takich sytuacji ) . Jeśli zaczynasz coś sam (firma), to nie masz „szefa” do zaspokojenia; po prostu wybierz to, co najbardziej Ci odpowiada.
Na przykład, jeśli chcesz zrobić coś związanego z Internetem, zdecydowanie radzę wybrać: PHP / MySQL / HTML / CSS / JavaScript (+ jQuery / AJAX) . Ale to tylko ja. Ktoś może polubić (lub zobaczyć więcej w przyszłości) Ruby / Rails niż w PHP.
Na przykład teraz koduję przede wszystkim w Objective-C / Cocoa . Czy radziłbym ci to kontynuować? Absolutnie nie. To znaczy: chyba że interesujesz się komputerami Mac i nie chcesz kariery zawodowej sprzedającej oprogramowanie związane z komputerami Mac / iPhone. Jeśli jesteś zainteresowany programowaniem w systemie Windows, wybór C # / .NET Framework byłby prawdopodobnie najlepszym wyborem. (jeśli chcesz dowiedzieć się, co mnie interesuje, po prostu spójrz na mój profil StackOverflow )
Studiuj dużo (książki, internet, kod innych ludzi, cokolwiek) i pisz jak najwięcej kodu.
Ach, i spróbuj znaleźć pracę w dowolnym kodzie związanym z kodem. (Po raz pierwszy zacząłem pracować jako wolny strzelec i było to naprawdę cenne doświadczenie, aby zobaczyć, jak rzeczy naprawdę działają w prawdziwym świecie).
Tylko moje .2 przyjazne centy ... :-)
Sidenote: Wiem, że niektóre z moich kwestii mogą wydawać się kontrowersyjne i jestem pewien, że będzie wielu, którzy się ze mną nie zgodzą. To jest do przyjęcia. Ale to nie zmienia sposobu, w jaki postrzegam rzeczy - a zwłaszcza rzeczy, które kocham.
źródło
Przeglądaj program nauczania działu CS na UW, pożyczaj i przeglądaj wymagane lektury, spójrz na poprzednie egzaminy i ćwiczenia laboratoryjne (zadania domowe). Jeśli nie masz pojęcia, jak podejdziesz do problemu, masz dziurę w swojej wiedzy.
Zastanów się, jakiego rodzaju programowanie chciałbyś robić w przyszłości. Jeśli lubisz budować witryny i aplikacje CRUD, wydaje się, że masz już całą potrzebną wiedzę.
Edukacja CS wchodzi w grę, jeśli jesteś zainteresowany zrozumieniem, w jaki sposób [rozproszone] bazy danych, serwery internetowe, kompilatory i interpretatory, systemy operacyjne, protokoły sieciowe itp. Działają pod maską , i jesteś zainteresowany samodzielnym budowaniem takich systemów.
Nie wiem. Dla mnie największą korzyścią uniwersytetu było 1) poszerzenie moich horyzontów (zapomniałem 90% szczegółów, których nauczyłem się na uniwersytecie, ale pamiętam koncepcje i pomysły), oraz 2) zachowanie wewnętrznej motywacji do nauki rzeczy z zanikanie: Łatwiej jest utrzymać motywację, gdy dążysz do celu - egzaminu, kolejnego egzaminu itp. aż do ukończenia szkoły. (Także tworzenie samokształcenia nie jest łatwym zadaniem).
[Dodano: wybierz uniwersytet, którego program CS chcesz śledzić, wybierz kursy z interesujących Cię tematów i sam przejrzyj program nauczania: zadania domowe, egzaminy itp. Większość kursów publikuje slajdy z wykładów i zadania / egzaminy z wcześniejszych lat .]
Kilka rad: NIE rezygnuj z dyplomu z matematyki. Każda błyskotliwa osoba może nauczyć się programowania, ale matematyka zapewni ci przewagę konkurencyjną, jeśli kiedykolwiek będziesz chciał pracować nad aplikacjami innymi niż CRUD / frontend, na przykład płynami i symulacjami mechanicznymi, grafiką komputerową, przetwarzaniem obrazu, rozpoznawaniem i uczeniem maszynowym, (nawet finanse!) itp.
AKTUALIZACJA 2 - doświadczenie [długie]: uzyskałem tytuł magistra na wydziale EE: pierwsze dwa lata były wspólnym programem nauczania (fizyka, elektrotechnika, elektronika analogowa i cyfrowa oraz dużo matematyki - algebra liniowa; matematyka dyskretna; rzeczywista, wektorowa i złożona analiza stosowana.) Było to bardzo cenne, zwłaszcza. część EE i elektronika - pozwoliło mi to pracować nad mieszanymi projektami HW-SW, a współpraca z projektantami HW była bardzo ekscytująca. Nie włączyłem niczego w projektowanie HW, ale mogłem śledzić projektanta HW „debugującego” jego schemat i zadawać sensowne pytania [nie byliśmy pewni, czy błąd był w SW czy HW - okazało się, że to w HW: -)].
Następnie linie rozgałęziają się i wybieram linię CS. Niektóre z „szczegółów” przyczyniły się do zakorzenienia pojęć (np. „Ręczne uruchomienie algorytmu Dijkstry”). Dowiedziałem się także szczegółów o tym, jak działają procesory (sygnały magistrali, interpretacja diagramów magistrali, wykonanie itp.) Na przykładzie już wtedy przestarzałej Motoroli 68000, ale koncepcje wyuczone przez szczegóły nie są bardzo różne dla współczesnych procesorów.
Inne szczegóły, zwłaszcza Implementacje SW (np. Implementacja Dijkstry) były dla mnie [odkąd całkiem nieźle kodowałem w liceum] bezcelowe ćwiczenie w debugowaniu i przyczyniło się do ZERO w zrozumieniu pojęć.
A potem zapisałem się na program doktorancki, na którym musiałem wziąć udział w obowiązkowych kursach. Byłem rozczarowany wyborem kursów, ponieważ wiele z nich wydawało się bardziej zorientowanych na wymagania branży (np. Używanie Pythona do analizy danych naukowych - dziękuję, mogę programować i jestem w stanie sam się tego nauczyć - - co znowu wymagało dużo bezsensownego kodowania) niż nauczanie podstawowych pojęć (na szczęście wykopałem kursy dotyczące dyskretnej optymalizacji, analizy statycznej programów i analizy formalnej za pomocą Promela).
Tak więc niektóre szczegóły były przydatne do zakorzenienia pojęć, a niektóre były wręcz niepotrzebnym obciążeniem (inny przykład: programowanie komunikacji portu szeregowego między dwoma komputerami. Byłem już wtedy przyzwyczajony do czytania i interpretowania specyfikacji HW i programowania HW przez rejestry, więc było po prostu. nudne. Może jestem naiwny, zakładając, że przeciętni inżynierowie CS nie muszą być wykształceni na temat czytania dokumentów HW).
Podsumowując: wystaw się na wiele różnych koncepcji (pomysły na wysokim poziomie) i opisz szczegółowo te, w których chcesz nadać priorytet i stać się wyjątkowo dobrym. [NIE MOŻESZ być wyjątkowo dobry we wszystkim!]
źródło
Przeprowadzam wywiad i biorę udział w rekrutacji wielu młodszych osób po studiach. Jeszcze nie zatrudniłem nikogo w oparciu o umiejętności merytoryczne, które wybrali z dowolnego programu, który wybrali. Powód tego jest prosty: żaden program CS (ani żaden inny program), z którym się spotkałem, nie uczy żadnych konkretnych umiejętności związanych z programowaniem lub tworzeniem oprogramowania na profesjonalnym, komercyjnym poziomie. Zdolność do wypracowania modeli i rozwiązań złożonych równań różniczkowych oraz pisania zoptymalizowanych algorytmów sortowania specjalnego przeznaczenia może mieć wartość akademicką i / lub naukową, ale nie ma wpływu na ogólny rozwój oprogramowania.
Czego więc szukam? Cóż, oczekuję, że absolwent uczelni doskonali sztukę uczenia się. W końcu to właśnie dobre uczelnie powinny uczyć swoich studentów. Jak analizować i rozkładać ogólne problemy na logiczne, dyskretne komponenty, które można w przewidywalny sposób rozwiązać. Metodyczne podejście do znajdowania, oceny, organizowania i stosowania wiedzy i informacji w celu znalezienia rozwiązania.
Poszukuję także ludzi, którzy rozumieją, że grupa ludzi pracujących razem i komunikujących się jest warta znacznie więcej niż suma jej jednostek. Wymaga to dojrzałości i pokory oraz umiejętności udzielania i proszenia o pomoc.
Tak więc, aby powrócić do zakresu pytania: chociaż dyplom CS może zwiększyć twoje szanse na uzyskanie pierwszego wywiadu po studiach, uważam, że nie ma to żadnego wpływu na twój sukces lub biegłość programistyczną. Zawsze postępowałem zgodnie z filozofią „zatrudniaj do nastawienia, trenuj umiejętności” i dobrze się to opłaciło.
Moja rada: kontynuuj naukę matematyki, jeśli to Cię interesuje. Każda edukacja naukowa będzie dobrze służyć, więc wybierz ten, który najbardziej ci się podoba, ponieważ najbardziej prawdopodobne jest, że będziesz go wyróżniał. Następnie skup się na nauce ważnych rzeczy: jak się uczyć, jak analizować i podejść do rozwiązania problemu w ustrukturyzowany sposób, jak współdziałać i współpracować z innymi ludźmi, jak przejąć przywództwo i odpowiedzialność za dostarczanie własnych i członków zespołu. Reszta to tylko technologia i kodowanie, narzędzia handlu. Te możesz i nauczysz się samodzielnie. Zdobądź i przestudiuj wiedzę o ogólnym zastosowaniu, taką jak popularne wzorce projektowe i paradygmaty architektoniczne. Zacznij pisać programy do ćwiczeń. Wybierz bazę językową i technologiczną, która jest dość aktualna, ale nie popełnij błędu, myśląc o tym ” ostatni, którego się nauczysz. Narzędzia i języki zmieniają się przez cały czas, więc tworzenie oprogramowania jest ciągłym procesem uczenia się.
źródło
odpowiedź 1
Jeśli nauczysz się czegoś nowego ze swojego badania. Następnie możesz obiektywnie powiedzieć, że osiągnąłeś to dzięki dyplomowi CS.
A1. Dlaczego
Stopień CS koncepcyjnie dotyczy nauki. Jeśli ktoś wraca z dyplomu CS bez różnicy netto, wówczas jego główny cel nie jest spełniony. Egzaminy i zajęcia są „oficjalną” miarą tego, czego się nauczyliśmy. Jednak indywidualne rozumienie (czy nauczyłem się czegoś nowego?) Powinno być lepszym obiektywnym miernikiem.
A1. Doświadczenie
Oboje studiowałem w środowisku akademickim, a teraz pracuję zawodowo. Wybrałem tytuł magistra informatyki, ponieważ chciałem poszerzyć swoje zrozumienie i mam pasję do nauki.
Mój świat rozwinął się w wyniku zdobycia tytułu magistra w dziedzinie informatyki. Mój świat rozwinął się także z pracy zawodowej.
Odpowiedź 2
Znaczenie jest względne , kto pyta pytanie i na jakiej sytuacji. Jeśli chodzi o rozwój osobisty , to wszystko jest ważne. Jeśli jest to dla przemysłu, ważne są takie rzeczy jak algorytmy i dobre praktyki OOP / standardowe oprogramowanie.
A2 Dlaczego
„Zakres” znaczenia jest wysoce zależny od „kontekstu”. Bez kontekstu zalety umiejętności są trudne do sortowania.
A2 Doświadczenie
Przekonałem się, że umiejętności uzyskane od „uniwersytetu” kontra „w terenie” są różne. „Umiejętności” na uniwersytecie są bardziej „teorią”, od przemysłu bardziej „praktyką”. Z tego powodu ta różnica oznacza, że umiejętności są rzeczywiście różnie uszeregowane pod względem ważności.
Odpowiedź 3
Popchnij siebie ponad punkt krytyczny, a kiedy się zepsujesz, nie poddawaj się.
Co mam na myśli?
Jeśli dojdziesz do punktu, w którym nie rozumiesz, to się złamałeś. Ucz się dalej, aż zrozumiesz. Następnie posuwaj się dalej, aż znajdziesz coś, czego nie rozumiesz (ad infinitum) .
A3 Dlaczego
Jeśli tylko uczysz się i pozostajesz w obrębie swoich granic, będziesz tylko „ok”. Nie chcesz być po prostu „ok”. Chcesz być „najlepszym”, jakim możesz być. Nie możesz osiągnąć swojego prawdziwego potencjału, jeśli NIE WYMUSZASZ STAŁO przekraczania swoich granic.
A3 Doświadczenie
Zawsze będę studentem przez całe życie, nie będę wyliczał mojego obecnego zestawu umiejętności, jeśli jesteś ciekawy, możesz po prostu zobaczyć mój profil.
Powiem tylko, że to jedno. Nigdy nie jestem zadowolony z mojej obecnej wiedzy. Chcę latać wyżej, widzieć dalej i schodzić głębiej.
źródło
Wystarczy spojrzeć na wymagania dotyczące stopnia, a następnie przejrzeć sylabus dla każdej klasy.
Naprawdę nie możesz tego zrobić samemu bez perspektywy czasu. Powiedziałbym, że najważniejszą rzeczą, której brakuje większości samouków, jest analiza i projektowanie algorytmów. Resztę można odebrać z kawałka.
Nawet jeśli nie jesteś dopuszczony do programu, często możesz wziąć zajęcia z innych wydziałów jako przedmioty do wyboru. Jedną z moich ulubionych klas była klasa projektowa z inżynierii lotniczej, w której pracowałem nad elektroniką i oprogramowaniem dla małego satelity.
Możesz także kupić podręcznik, z którego korzysta wybrana klasa. Zrobiłem to przez kilka zajęć, których nie mogłem dopasować do mojego harmonogramu. Inną opcją jest otwarte oprogramowanie szkoleniowe MIT .
źródło
Dlaczego uważasz, że dyplom CS jest tak ważny, aby odnieść sukces jako programista ?
Aby odnieść sukces jako programista, potrzebujesz:
Zazwyczaj dyplom CS wprowadzi cię do branży, ale jeśli nie masz pasji i pragnienia wiedzy, cierpisz i nigdy nie będziesz dobrym programistą.
Wygląda na to, że już wkroczyłeś do branży i na pewno czujesz, że masz zarówno pasję, jak i pragnienie wiedzy.
Musisz dalej badać, uczyć się i zdobywać doświadczenie, a przemysł będzie wiedział, jak docenić cię bez dyplomu.
Przykład od kogoś, z kim pracuję
jeden z programistów pracujących w moim zespole ma wykształcenie prawnicze ... po kilku latach zrozumiała, że w ogóle nie lubi prawa i chce zostać programistą. nie mogła dostać pracy jako programista (bez doświadczenia, bez dyplomu), więc zrobiła 6-miesięczny kurs komputerowy, potem dostała pracę i od tego czasu jest świetnym programistą.
źródło
IMHO nie ma zadań programistycznych (ani zadań sprzedażowych, sysadminowych itp.), Są tylko zadania rozwiązywania problemów. Zatrudniamy i płacimy ludziom za rozwiązywanie problemów, pisanie kodu to tylko część rozwiązania problemu. Tak, nawet sprzedaż jest formą rozwiązywania problemów. Więc stopień matematyki dowodzi, że możesz rozwiązać problem, a także stopień CS.
Z twojego postu wynika, że masz duże doświadczenie / staże. Wspaniały! nie martw się o znalezienie pracy po ukończeniu studiów.
Aby spróbować odpowiedzieć na twoje pytania:
zajęcia? wybierz teoretyczne klasy CS zamiast klas pisania kodu. Znajdź niektóre klasy inne niż CS / matematyczne, np. filozofia pomoże ci wyróżnić się z tłumu
priorytety? ucz się nowych rzeczy (nie tylko łatwych zajęć, które już znasz)
następne dwa lata? rozmawiać z ludźmi, uczyć się, budować relacje, szukać działań na zewnątrz. (Hobby / sport / rozrywki poza pracą / nauką to jedna z wskazówek, jak przekonać się o motywacji kandydata).
Końcowe wskazówki: ukończ jak najszybciej. Zbuduj sieć kontaktów. A jedyną bezpieczną pracą jest tworzenie własnej pracy. Poszukaj pomysłów / możliwości, w których możesz założyć własny biznes. Powodzenia.
źródło
Po pierwsze, pozwól mi powiedzieć, że bardzo się cieszę, że zadałeś to pytanie, ponieważ zadawałem sobie to pytanie przez lata.
Wydaje mi się, że do tej pory mogłem uznać się za sukces w tej dziedzinie. Mam trochę doświadczenia na studiach i chciałbym w końcu ukończyć studia na kierunku informatyka, ale nie zasłużyłem na dyplom w tym momencie w moim życiu. Miałem jednak spory sukces w inżynierii oprogramowania pomimo tej wady (trwającej 10 lat). Muszę jednak być z tobą szczery, niekoniecznie była to łatwa rzecz (oczywiście postawiłbym na to, że cokolwiek warte jest najczęściej NIE jest najłatwiejsze). Powiem też, że wciąż nie jest to najłatwiejsza rzecz. Istnieje wiele firm, które chcą dać szansę odpowiedniemu kandydatowi, ale nawiązałem kontakt z innymi, które będą przeszkadzać z powodu braku tej „pieczęci aprobaty” uczelni. Jednak,
Zaczęło się w .net w bardzo dużej firmie. Jako mały programista (w tym czasie pracował jako przedstawiciel wsparcia technicznego) nauczyłem się wszystkiego, co mogłem, o językach i technologiach stosowanych w firmie, w której pracowałem. Co więcej, i to jest chyba najważniejsza rzecz, którą połączyłem w sieć. Wystrzeliłem wiadomość e-mail do każdej osoby, którą mogłem znaleźć w katalogu, w którym był Inżynier Oprogramowania. Czy byłem denerwujący? Prawdopodobnie. Byłem zawsze uprzejmy i pełen szacunku, chętny do nauki. Zaplanowałem lunch lub po prostu znajdę je w stołówce i usiądę, żeby spróbować porozmawiać. Czasami było to zawstydzające lub mnie lekceważyło, ale ostatecznie przyniosło oczekiwane rezultaty. Udało mi się uzyskać tymczasowe dane uwierzytelniające do niektórych wewnętrznych baz danych, a po pewnym czasie uzyskałem wymagane dane do opracowania oprogramowania na ich zastrzeżonej platformie. Niedługo potem znalazłem się w firmie, mogąc pożyczyć pewne umiejętności w zakresie tworzenia wewnętrznych narzędzi dla zespołu analitycznego, nad którym wtedy pracowałem. Odtąd zawsze starałem się być najmądrzejszym facetem w pokoju w możliwie najbardziej bezpretensjonalny sposób. Byłem chętny i upewniłem się, że wszyscy to wiedzą. Zawsze starałem się znaleźć rozwiązanie tam, gdzie było to możliwe, i stwierdziłem, że jeśli spróbujesz wystarczająco mocno, jest bardzo mało domen problemowych, których nie da się rozwiązać (być może poza teorią kwantową). Znalazłem się w pozycji wewnątrz firmy, która mogłaby pożyczyć pewne umiejętności w zakresie wewnętrznego opracowywania narzędzi dla zespołu analitycznego, nad którym wtedy pracowałem. Odtąd zawsze starałem się być najmądrzejszym facetem w pokoju w możliwie najbardziej bezpretensjonalny sposób. Byłem chętny i upewniłem się, że wszyscy to wiedzą. Zawsze starałem się znaleźć rozwiązanie tam, gdzie było to możliwe, i stwierdziłem, że jeśli spróbujesz wystarczająco mocno, jest bardzo mało domen problemowych, których nie da się rozwiązać (być może poza teorią kwantową). Znalazłem się w pozycji wewnątrz firmy, która mogłaby pożyczyć pewne umiejętności w zakresie wewnętrznego opracowywania narzędzi dla zespołu analitycznego, nad którym wtedy pracowałem. Odtąd zawsze starałem się być najmądrzejszym facetem w pokoju w możliwie najbardziej bezpretensjonalny sposób. Byłem chętny i upewniłem się, że wszyscy to wiedzą. Zawsze starałem się znaleźć rozwiązanie tam, gdzie było to możliwe, i stwierdziłem, że jeśli spróbujesz wystarczająco mocno, jest bardzo mało domen problemowych, których nie da się rozwiązać (być może poza teorią kwantową).
Podsumowując, co może być długą historią (a jeśli jesteś na północno-zachodnim wybrzeżu Pacyfiku, chciałbym porozmawiać przy piwie), dostałem swoją „wielką przerwę” przy małym małym startupie, który był gotów dać mi szansę . Wymieniłem mój brak doświadczenia na nieco mniejszą pensję, a ja uderzyłem o ziemię. Następnie w ciągu następnych kilku lat przeszedłem z jednego małego sklepu deweloperskiego do następnego, zdobywając przyjaźnie i umiejętności po drodze, do miejsca, w którym w końcu jestem głównym programistą i dyrektorem małej firmy inżynierskiej.
Kluczową kwestią tutaj, jeśli nie komunikowałem się wystarczająco skutecznie, jest to, że musisz się połączyć. Poznawaj przyjaciół, pij piwo i śmiej się, a także znajdź ludzi w dziedzinie, w której chcesz pracować (najlepiej w ramach stosu technologii do wyboru). Upewnij się, że ludzie znają Twoją gotowość do zrobienia czegokolwiek i chęć wykonania pracy, bez względu na to, jak monumentalna może być. Zasadniczo musisz „przezwyciężyć” brak formalnego wykształcenia. Wskocz i baw się dobrze. Ta branża jest najlepsza na świecie, IMHO. Nawiązałem trwałe przyjaźnie i kontakty, które pomogły mi z jednego miejsca do drugiego i będę nadal robił to samo dla nich, ilekroć nadarzy się okazja.
źródło
Po pierwsze, pozwólcie mi LOL na „zwięzłe, ale dokładne” postanowienie pod koniec waszego wielkiego dzieła. W dół do biznesu:
Jak wspomniano inni, możesz zacząć od katalogu kursów . Ale zachęcam cię do wyjścia poza granice tej listy. To naprawdę dobrze , że studiujesz matematykę. Wielu inżynierów, z którymi pracowałem, nie pamięta, jak przeprowadzić prostą integrację i nigdy nie badałem poza murami tradycyjnego kursu matematyki CS.
Ta odpowiedź wydaje się dość rzadka pod względem szczegółowym. Nie mam dyplomu CS i nie stwierdziłem, że brakuje mi niezbędnych obszarów. Żałuję jednak, że nie poświęciłem więcej czasu na inne rzeczy, które mnie zainteresowały. Na przykład historia, językoznawstwo i angielski.
Dowiedz się, co kochasz
Co jest dla ciebie ważne Co jest ważne dla pracodawców? Moją osobistą heurystką zawsze było uczyć się tego, co wydaje mi się najbardziej interesujące - musisz kochać to, co robisz; w przeciwnym razie wypalisz się. Oprogramowanie jest tak rozległym obszarem działań, że wydaje się, że zawsze jest dostępna praca dla kompetentnego programisty, który pasjonuje się którąkolwiek z tych umiejętności.
Naucz się uczyć i pchaj się
Wydaje mi się, że prowadzi mnie to do dwóch meta-umiejętności, które chciałbym postawić ponad resztę: uczyć się żarłocznie i ciężko pracować. Mogą to brzmieć banalnie i boleśnie oczywiste, ale połączenie jest rzadkie. Byłem na całej mapie pod względem umiejętności „potrzebnych” - frontonu HTML / javascript do rozszerzeń językowych do rozwoju mobilnego do wizji komputerowej do administrowania systemami iz powrotem, ponad 7+ języków. Jedyną prawdziwą umiejętnością podstawową, która sprawiła, że zwyciestwo mojej własnej ignorancji stało się nawykiem.
Naprawdę uwielbiam filozofię Jacka White'a dotyczącą gitar i muzyki (poważnie, obejrzyj to) i myślę, że ma ona największe zastosowanie w świecie programowania. Postaw rzeczy nieco poza zasięgiem. Wcisnąć się. Wtedy będzie to wydawać się łatwe, gdy wszystko, co ktoś chce dla ciebie, to twoja praca.
Nieszlachetne klasy CS
Podobnie jak ty, dział CS w UW odrzucił mnie ... chociaż myślę, że pozwoliłem im to zrobić po raz trzeci, zanim przejdę do zmysłów. Skończyłem specjalizację z informatyki i pracę w matematyce stosowanej. Ale nadal wybrałem cały nieszytki kawałek CS. To CSE 373, 410, 413, 415 i 417. Tak więc, na pewno wierzę, że powinieneś najpierw podążać za swoją pasją. Moje prowadzą mnie na te zajęcia. I myślę, że masz z nimi dość kompleksową edukację podstawową, chociaż może to być trochę światła z teoretycznej strony rzeczy.
A teraz fajna rzecz: w informatyce większość z nich wliczała się do moich wymaganych przedmiotów do wyboru. W dziale matematycznym może być konieczne uzyskanie wyraźnej zgody, a może to być rozciągnięcie na każdy z wyjątkiem CSE 417.
Przywołaj zapytanie DARS (prawdopodobnie link tylko do UWNetID) i sprawdź, co się dzieje. Robiłem to dla różnych kierunków reklamowych na muzeum .
Klasy AMATH
Zgodnie z tymi samymi zasadami, dział matematyki stosowanej ma pewne klasy, które można wykorzystać jako wymagania do wyboru. Możecie nawet nieletni w AMATH tak jak naprawdę.
Dlaczego o tym wspominam? Obliczenia numeryczne - np. AMATH 301/352 - to ogromna tajemnica dla większości programistów. Jeśli nic więcej z tego nie otrzymasz, będziesz mógł pisać ciekawe posty na blogu . Twierdzę jednak, że znajomość problemów związanych z typami liczbowymi języka oraz wiedza na temat ich pomiaru i poprawy jest bardzo ważna.
Zbuduj coś!
Najważniejsze, co możesz zrobić, to zbudować coś nowego. Pomyśl od początku do końca. Nie pozwól, aby było to coś łatwego w twojej strefie komfortu.
Najbardziej owocne zajęcia z programowania, które brałem, zawsze miały duży praktyczny komponent programowania. Dla inżyniera teoria jest niezwykle ważna - o ile można ją przekształcić w coś prawdziwego. Więc znajdź fajnie brzmiący papier CS i spróbuj go wdrożyć. Poważnie.
Dostać pracę
Wspomniałeś już, że masz staż w Amazon. To wspaniale. Rzeczywiste doświadczenie zawodowe jest naprawdę kluczowe! Istnieje wiele osób z dyplomem CS, które nie mogą zaprogramować wyjścia z mokrej papierowej torby. Mając dobre doświadczenia w pracy jest warta sposób ponad stopnia.
źródło
Jest więcej niż kilka historii o milionerach, którzy ukończyli studia, być może najbardziej słyszałem o Billu Gatesie. Ludzie z umiejętnościami niszowymi radzą sobie lepiej bez dyplomu niż absolwent CS z pieczęcią cookie.
Znajdź coś, w co niewielu ludzi jest zaangażowanych, zwykle coś nudnego, nudnego lub trudnego do nauczenia się, i naucz się dobrze, popadaj w obsesję. Niektóre obszary, o których słyszałem, to zaplecze uniksowe (nie Linux, chociaż Linux nie jest daleko w tyle), Flash (nie wiem wystarczająco dużo o Flashu, aby zapamiętać dokładnie, co to było, ale znam faceta, który się przeprowadził szybko wiedząc o tym i powiedział, że wciąż jest na to rynek, głównie dlatego, że ludzie mówią, że umiera i nie będzie się tego uczył). Być może będziesz musiał wziąć udział w kilku zajęciach, ale jeśli znasz swoje rzeczy i masz imponujące portfolio, są firmy, które będą cię potrzebować!
źródło