Czy powinienem być dobrym programistą zaraz po studiach?


28

Możliwy duplikat:
ukończyłem studia informatyczne, ale nie wydaje mi się, żebym był prawie ekspertem programistycznym

Niedawno ukończyłem uniwersytet i od tego czasu dołączyłem do zespołu programistów, w którym jestem zdecydowanie najmniej doświadczonym programistą i może z kilkoma warunkami pracy. Tymczasem reszta zespołu zdobywa 5-10 lat doświadczenia.

Byłem bardzo dobrym studentem i całkiem dobrym programistą, jeśli chodzi o butelkowane zadania i testy. Pracowałem z powodzeniem nad niektórymi projektami, ale teraz pracuję z dużo większą bazą kodu, a krzywa uczenia się jest znacznie wyższa.

Zastanawiałem się, ilu innych programistów zaczynało swoją karierę w zespołach i odeszło, jakby byli do kitu. Kiedy to się zmienia? Jak mogę przyspieszyć proces? Moi seniorzy pomagają mi, ale chcę być świetny i pokazać moją wartość teraz.

Odpowiedzi:


50

Interesującą rzeczą w tworzeniu oprogramowania jest to, że nie ma znaczenia, jak dobry jesteś - zawsze jest ktoś lepszy lub przynajmniej na tyle różny, aby nadal cię czegoś nauczyć. Nierzadko jest również spojrzeć na kod napisany kilka miesięcy temu i pomyśleć, że jest do bani, niezależnie od poziomu doświadczenia.

Dla mnie, kiedy zdałem sobie sprawę z rozbieżności między moimi umiejętnościami a umiejętnościami moich współpracowników, zacząłem uczyć się tak, jak nigdy wcześniej się nie uczyłem - czytając kod innych ludzi, posty na blogach, książki, zwracając uwagę na to, jak moi współpracownicy dokonali rzeczy itp. Uniwersytet przygotował mnie do informatyki, ale tak naprawdę nie do tworzenia oprogramowania. To prawie 4 lata później i jestem znacznie silniejszym programistą niż kiedyś. Więc po prostu trzymaj się tam i ucz jak najwięcej od ludzi wokół ciebie. Będzie lepiej.


+1. Bardzo lubiłem też być tym, który ssie coś w zespole, i to zmusiło mnie do dostosowania mojej wiedzy.

27
+1University prepared me for computer science, but not really for software development.
George Marian

1
Mam nadzieję, że mam to samo doświadczenie, kiedy kończę studia wyższe i dostaję pierwszą (och, zaraz, drugą) pracę w branży programistycznej.
gablin

4
@George: Gorzej jest to, że dużo rozwoju oprogramowania w świecie rzeczywistym mieści się pod parasolem „IT”, co zwykle sprowadza się do nakładania brzydkich interfejsów użytkownika na tabele bazy danych. :( Niezupełnie coś, na co uniwersytet mógłby cię kiedykolwiek przygotować.
Adam Paynter

@adam Absolutnie. Chociaż czasami rozumiem potrzebę, to podejście „wystarczająco dobre” doprowadza mnie do szału.
George Marian

23

Nie. Nauczyłem się znacznie więcej o programowaniu / inżynierii oprogramowania w ciągu pierwszych 6 miesięcy pracy po ukończeniu studiów niż w poprzednich latach. Nie oznacza to jednak, że uniwersytet był stratą czasu, przygotował mój umysł i zapewnił podstawową wiedzę, na której można budować.

Z drugiej strony, patrząc wstecz, wciąż nie wiedziałem, co robię za 6 miesięcy.


4
Dobrze powiedziane, moi profesorowie zawsze mówili „Istnieje duża różnica między przemysłem a środowiskiem akademickim”. Trudno w to uwierzyć, dopóki nie wyjdziesz do prawdziwego świata i nie uświadomisz sobie, że tak naprawdę jest!
Chris,

To. Właśnie dlatego staż, bezpłatny lub cokolwiek, co możesz uzyskać, jest tak cenny. Do diabła, nawet staż niezwiązany z programowaniem jest o wiele bardziej cenny w doświadczeniu niż jakakolwiek pojedyncza klasa, ponieważ poznajesz niektóre pułapki związane z pracą z ludźmi.
Kzqai,

10

Edukacja daje podstawy, na których można budować, ale nie przygotuje Cię do rozwoju oprogramowania w prawdziwym życiu. To pochodzi z doświadczeniem. Na pewno byłem w takiej samej sytuacji jak Ty, kiedy zaczynałem programować pracę. Tak długo, jak będziesz się uczyć, czytać książki, posty na blogu i stosować to, czego nauczysz się w pracy , będziesz się doskonalić. Kluczem jest zastosowanie tego, czego się uczysz. Samo czytanie nie pomoże, musisz aktywnie zastosować nową wiedzę.


+1 za zastosowanie tego, czego się uczysz. Zapomniałem wspomnieć o tej części. :)
Adam Lear

7

Zdecydowanie tak myślałem, ale nie byłem.

Zaufaj mi, w pewnym momencie swojej kariery zamierzasz wrócić i pracować nad kodem, który napisałeś, ale nie dotykałeś go od lat i desperacko chcę, aby żaden inny profesjonalny programista nigdy nie widział tego kodu ani nie wiedział, że go napisałeś. Oznacza to, że rośniesz.


4

Pod pewnymi względami wybór języka programowania jest podobny do wyboru języka naturalnego. Możesz nauczyć się sporo teorii w szkole. Uczysz się gramatyki i podstawowych elementów słownictwa i myślisz, że jesteś całkiem dobry, aż do prawdziwej rozmowy z native speakerem, a potem jesteś całkowicie zagubiony.

Sposób, w jaki naprawdę uczysz się języka, do tego stopnia, że ​​możesz rozmawiać z rodzimymi użytkownikami języka, polega na tym, by mówić językiem, co godzinę każdego dnia. Zazwyczaj oznacza to zamieszkanie w miejscu, w którym się mówi. I wtedy dzieje się coś interesującego. Chociaż to, czego nauczyłeś się w szkole, jest samo w sobie bezwartościowe na ulicach obcego kraju, daje ci dobre, solidne podstawy teoretyczne, które znacznie ułatwiają naukę języka. (Przynajmniej takie było moje doświadczenie z hiszpańskim.)

Programowanie jest takie samo. To, czego uczysz się w szkole, nie przygotowuje cię do pracy, którą musisz wykonać jako prawdziwy programista, ale (zakładając, że jesteś w kompetentnej szkole, która nie głupi wszystkiego w interesie popularności), pomaga przygotować się twój umysł, aby kiedy nadszedł czas, aby nauczyć się być dobrym programistą, podstawowe pojęcia, których potrzebujesz, są już gotowe. (Przynajmniej takie było moje doświadczenie z programowaniem.) :-)


2
Dobra odpowiedź, ale nie posunąłbym się nawet do stwierdzenia, że ​​„to, czego [nauczyłem się] w szkole, jest bezwartościowe”. Wiem jednak, do czego zmierzasz.
gablin

4

Wielu dobrych programistów pochodzi z uniwersyteckich stopni informatycznych, głównie tych samych, którzy do nich przystąpili.

W informatyce chodzi o to, że - jak ludzie mówili powyżej - nie jest tym samym, co programowanie. Wiele rzeczy studiowałem na uniwersytecie, na które w zasadzie nie byłem gotowy - było wiele rzeczy, które wydawały się bzdurnym nonsensem akademickim, kiedy słuchałem wykładów na ten temat, ale kilka lat później żałowałem, że nie zwróciłem na to większą uwagę, kiedy znów dowiedziałem się wielu rzeczy, które zapisałem jako bezużyteczne. Właściwie myślę, że można by zrobić kilka lat programowania w środowisku komercyjnym przed rozpoczęciem studiów informatycznych, jeśli to jest to, co chcesz zrobić.

Myślę też, że często na uniwersytecie niekoniecznie wiesz, jak się uczyć. Wiele rzeczy, których nauczyłem się przez pomyłkę lub naukę od innych programistów, to z pewnością rzeczy, które moi wykładowcy i studenci znali na uniwersytecie, ale nie miałem pojęcia, że ​​przydałoby się je zrozumieć. Zapytanie ludzi o problemy, które masz podczas nauki czegoś (a dotyczy to naprawdę wszystkiego), sprawia, że ​​proces uczenia się jest płynniejszy i mniej bolesny. Większość rzeczy, których możesz się nauczyć dla siebie lub od innych ludzi - biorąc pod uwagę, że wiele lekcji, których nauczyłem się dla siebie, zostało wyciągniętych z moich bolesnych błędów, postanowiłbym uczyć się od innych ludzi, kiedy mogę ...


2

Cytuję post Briana Hurta

Informatyka i programowanie to osobne rzeczy

który odnosi się również do programowania licencjackiego Joela Spolsky'ego i genialnego artykułu zatytułowanego Who Killed the Software Engineer

Wszystkie te dyskusje dość dobrze opisują rzeczywistość i, moim zdaniem, odpowiedzcie na swoje pytanie „Nie”, ponieważ uniwersytet nie uczyni was dobrym programistą. Musisz sam stać się dobrym programistą.

Nie mam dyplomu z CS, ale profesjonalnie programuję i rozwijam oprogramowanie od 8 lat. Wszystkie umiejętności programowania mam, sam się nauczyłem.


1

Nie, udawałem, że jestem programistą i nauczyłem się tego na własnej skórze. Dostałem pierwszego klienta jako freelancer i bardzo źle walczyłem z C / C ++ i ostatecznie wygrałem. Pamiętam, że zajęło mi to kilka godzin, aby zrozumieć, że wykonanie malloc na strukturze nie wystarczyło, aby przydzielić również pamięć wskaźnikom w strukturze.


Jaki był twój oryginalny stopień naukowy? Czy twoja ciężka praca w końcu się opłaciła?
rwong

Jestem inżynierem elektronikiem, całkiem dobrze znałem Matalb, ale z bardzo małą znajomością C / C ++ i Java. Wierzcie lub nie, moim pierwszym prawdziwym zadaniem programistycznym było pisanie sterowników dla Windows CE i portowanie na to urządzenie: eurotech.com/EN/innovation.aspx?pg=wearable . Miałem niewielką pomoc ze strony firmy, ale w zasadzie pracowałem sam w domu, tracąc dużo czasu na bardzo małe rzeczy. Ale założycie się, że niczego nie zapomniałem! Wciąż się uczę, ale teraz mam startup, który robi naprawdę duży program ... więc się opłaciło.
martjno

1

Byłem dość dobrym programistą, kiedy ukończyłem uniwersytet. Miałem też niesamowitą ofertę pracy kilka miesięcy przed ukończeniem studiów (którą mogłem odrzucić, by uzyskać jeszcze bardziej snazzier).

Kluczem było to, że wykonałem dużo pracy jako hobbysta, pracując jako programista w ciągu roku szkolnego i odbywając wysokiej jakości letnie staże z IBM („Zespoły speedBlue ExtremeBlue” i odpowiedni program ExtremeBlue). Dobry preprofessional doświadczenie będzie pozwalają pominąć trochę rzeczy entry-level po przejściu.

(To powiedziawszy, nadal byłem znacznie lepszy w programowaniu przez pierwsze sześć miesięcy w prawdziwej pracy (tm). Nie to, że skończyłem później, ale wtedy naprawdę dużo pokazywałem.)


1

Mogę udzielić odpowiedzi odwrotnej, ponieważ przeszedłem prosto ze szkoły średniej do pracy. Zacząłem pracować jako samodzielny programista i niemal natychmiast byłem produktywny przy projekcie, który otrzymali ode mnie pracodawcy. Miałem kilku współpracowników, którzy uzyskali świeży stopień informatyki, i wcale nie byli produktywni.

Z czasem niektórzy dyplomowani współpracownicy znacznie poprawili swoje umiejętności, podczas gdy inni nie, i to nie było związane z ich GPA.


1

Uniwersytet nie uczy, jak zostać prawdziwym programistą. Domyślam się, że jest to podobne w przypadku wielu miejsc pracy w porównaniu do ich programów studiów. Nie powiedziałbym, że nie dostałem nic z mojego stopnia, ale było to o wiele mniej przydatne niż spędzanie 4 lat w pracy.

Ale jest dobrze. Do każdej rozpoczętej pracy prawdopodobnie nie miałem wystarczających kwalifikacji. Jeśli jesteś pewny swoich umiejętności i poświęcasz się nauce, możesz przyspieszyć i wykonać zadanie.


1

Chyba nie poznałem żadnych faktów na temat programowania w ogóle, na których przynajmniej nie byłem narażony na studiach. Jasne, tu i ówdzie wybrałem nowe języki programowania, nauczyłem się nowych interfejsów API, nowych baz kodu i nowych narzędzi, ale ogólne koncepcje były obecne zaraz po szkole.

To, co robisz z doświadczeniem, jest rodzajem instynktu, który przyspiesza zawężanie zgłaszanego błędu lub prowadzi prosto do najbardziej niezawodnego sposobu pisania nowego kodu. Gdy jesteś nowy, nadal możesz naprawić ten sam błąd lub wdrożyć tę samą funkcję, ale trwa to dłużej i prawdopodobnie będziesz musiał wrócić i naprawić go z powodu nieprzewidzianego problemu.

Dlatego ważne jest, aby bardziej doświadczeni koledzy mogli cię mentorować. Idź do nich i powiedz: „Tak myślę, że należy sobie z tym poradzić. Czy możesz wymyślić lepszy sposób?” Daje to korzyść zarówno z samodzielnego zrozumienia tego, jak i uczenia się z doświadczeń innych.


0

Byłem lepszym programistą niż moi nauczyciele na uniwersytecie.

Potem nauczyłem się wspaniałych praktyk programistycznych, kiedy zacząłem pracować.


0

Dobry programista zawsze uczy się ... uczy się innego sposobu na zrobienie tego lub lepszego sposobu na zrobienie tego. Cokolwiek wasi programiści muszą was nauczyć, słuchałbym.


0

Jedną z rzeczy, o których nikt nie wspominał, jest to, że problemy, które masz rozwiązywać w szkole, zostały celowo stępione, aby ułatwić zrozumienie, w jaki sposób używasz konkretnej techniki, której się uczysz. Zazwyczaj wiesz, jaką technikę zastosować do tego konkretnego problemu, ponieważ jest to ta, którą właśnie omówiłeś na zajęciach. Projekty całego semestru są trochę lepsze, ale nadal mają ograniczony zakres i złożoność w porównaniu do realnego świata.

Rzeczywiste projekty są chaotyczne i ewoluują przez lata (nasze oprogramowanie ma ponad dziesięć lat i ciągle się zmienia od tego czasu) i jest dotykane przez wiele różnych osób o różnych poziomach umiejętności. Być może nadal dotykasz 10-letniej wersji bazy danych i nie możesz w ogóle korzystać z nowszych technik SQL. Być może używasz narzędzia, które było świetne 8 lat temu, ale którego nie nauczyłeś się w szkole, ponieważ zostało ono zastąpione przez coś innego. Ale firma nie chce płacić za wiele miesięcy prac rozwojowych, aby całkowicie go zastąpić.

Utkniesz w świecie, w którym czas na rozwój jest poważnie ograniczony przez to, za co klient zapłaci i jakie są, czasem (OK zwykle) sztuczne terminy.

Możesz być zmuszony do korzystania z narzędzi, o które specjalnie poprosił klient. Możesz mieć niejasne wymagania lub te, które nie mają większego sensu. Być może masz do czynienia z bardzo złożoną domeną biznesową, o której nic nie wiesz, a zatem nie możesz nawet ocenić, czy wymagania mają sens.

Rzeczywiste problemy świata nie są w żaden sposób porównywalne z ładnymi, czystymi problemami, które dają ci w szkole. Jeśli przez większość pierwszego roku nie będziesz zdezorientowany i czujesz się nie na miejscu, martwię się o ciebie.


0

Jest jeszcze gorzej ... po kilku latach pracy będziesz dobrze się czuć z tym, czego się nauczyłeś. Ale wtedy zmienisz pracę, a twoja nowa firma (a może nawet nowa grupa w tej samej firmie) zrobi wszystko inaczej i poczujesz się, jakbyś był na pierwszym miejscu. Będzie inny kod, różne standardy kodowania, różne narzędzia i różne procesy, a po dwóch dniach będziesz się zastanawiać, czy naprawdę nauczyłeś się czegoś na ostatniej pracy. Tym razem szybciej poczujesz się jak z rybą, ale nadal potrwa to dłużej, niż chcesz.

Za każdym razem, gdy zmieniasz zadania, obowiązuje okres adaptacji. Skraca się w miarę zdobywania doświadczenia, ale zawsze tam jest.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.