Jestem studentem informatyki pierwszego roku. Poszedłem na targi pracy, rozdałem CV, ku mojemu zaskoczeniu dostałem rozmowę kwalifikacyjną i ostatecznie staż jako programista.
Wyjaśniłem ankieterowi (który będzie moim szefem), że mam dopiero pierwszy rok i nie mam dużego doświadczenia w programowaniu. Po prostu powiedział mi, że ponieważ mam duże doświadczenie matematyczne (prawie skończyłem studia licencjackie z matematyki, a także mam kilka kursów gradowych za paskiem), jest pewien, że poradzę sobie dobrze.
Dobrze sobie radzę na wszystkich kursach programistycznych, ale nadal uważam, że jestem w niekorzystnej sytuacji. W tej chwili naprawdę chcę po prostu dobrze wykonywać tę pracę, gdy się zacznie. Praca będzie używać głównie języka C #, ale poza oczywistym nauczeniem się języka C #, jakiej umiejętności chciałbyś się nauczyć zanim zostaniesz prawdziwym programistą?
Wszelkie porady są mile widziane, ale jeśli masz na myśli jakieś książki, powiedz o tym. Dzięki!
Odpowiedzi:
W szkole uczysz się pisania kodu. Czego się nie uczysz, to reszta oprogramowania. Główne rzeczy, których nigdy nie nauczyłem się w szkole, to:
Są to bardzo ważne umiejętności dla każdego programisty, i niestety prawdopodobnie nie dostaniesz ich w klasie.
źródło
Chciałbym wiedzieć wcześniej na początku swojej kariery, że jako programista mam bardzo ważną rolę w tym biznesie . Nie jestem tylko małpą kodową.
Jako programista masz duży udział w działach związanych z oprogramowaniem, nad którym pracujesz.
Jeśli Twoja firma nie pisze testów dla swojego kodu, zacznij pisać testy już teraz.
Jeśli nie śledzą błędów, znajdź teraz odpowiedni moduł do śledzenia błędów.
Jeśli Twój szef chce, abyś natychmiast zaczął pracować nad fantazyjną animacją ekranu powitalnego aplikacji arkusza kalkulacyjnego - ale wciąż masz dziesiątki błędów do naprawienia i kilka krytycznych niedokończonych funkcji przed upływem terminu wydania kolejnego klienta - porozmawiaj na temat prawidłowego priorytetyzacji pracy .
Nawet jeśli jesteś „zwykłym pracownikiem”, działanie jak konsultant to świetny sposób na wyróżnienie się spośród innych programistów, którzy po prostu piszą kod i nie zachowują się tak, jakby byli zainteresowani biznesem.
źródło
Moja szkoła nigdy nie nauczyła mnie, jak rozwiązywać problemy. Nauczyli mnie mechaniki kodowania, ale tego, czego nie nauczyli, być w stanie przestudiować problem, zrozumieć go i znaleźć rozwiązanie. Wymaga cierpliwości, dyscypliny i intuicji, a także zrozumienia języka programowania.
Nie nauczali także o pracy zespołowej, kontroli wersji i znaczeniu pisania kodu, który jest łatwy w utrzymaniu. Nie nauczyli też wiele o testowaniu oprogramowania. Mogli dotknąć testów jednostkowych, ale nie zagłębili się zbytnio w koncepcje testów akceptacyjnych, testów regresyjnych itp.
Uwaga: Poszedłem na studia w latach 80-tych. Widzę to jednak w przypadku osób, które dziś zatrudniam - świeżych absolwentów, którzy mają bardzo małą wiedzę na temat prawdziwego świata programowania: kontroli wersji, testowania, czystego kodowania, umiejętności debugowania itp.
źródło
Moim zdaniem niektóre z najważniejszych rzeczy, których nie nauczyłem się (lub właściwie się nauczyłem) w szkole to:
VCS, systemy śledzenia błędów, narzędzia do budowania itp. To narzędzia, których musisz się nauczyć, aby móc współpracować z zespołem; nie wymagają dużo czasu na naukę na poziomie podstawowym, a potem są dość proste (przynajmniej na początku); powyższa lista zawiera subtelności, które, jeśli są znane, zwiększają produktywność.
źródło
Najważniejszą rzeczą, której brakuje nowym absolwentom, jest dobre zrozumienie kontroli wersji.
Jeśli masz doświadczenie w tworzeniu oprogramowania typu open source przy użyciu repozytoriów kodu źródłowego (takich jak GitHub ), jesteś o krok przed
most
innymi kolegami z klasy.Drugą rzeczą jest zrozumienie złożoności (
big O
). Większość osób po studiach słyszała o tym, ale jeszcze nie opracowała prawdziwego oprogramowania, które wchodzi w grę, a zatem nie rozumie jego prawdziwego znaczenia.Kiedy twoje zbiory danych są tak duże, że brutalna siła nigdy ich nie wycina, a zrozumienie innych technik jest przydatne i możliwość odgadnięcia, kiedy brutalna siła będzie odpowiednia w danej sytuacji, jest czymś, co rozwijasz z doświadczeniem i popełnianiem błędów.
źródło
Jak dobrze debugować, szczególnie przy użyciu debugera i odpowiedniego podejścia do rozwiązania problemu, tj. Dowiedzieć się, co jest przyczyną, dowiedzieć się, dlaczego to powoduje i zrozumieć, dlaczego rozwiązanie to naprawia, zamiast po prostu próbować różnych rzeczy i mieć nadzieję.
Większość absolwentów informatyki jest uderzająco słaba w debugowaniu, a w rezultacie zajmuje dużo więcej czasu na naprawę rzeczy, niż jest to potrzebne, i powoduje przy tym więcej błędów.
Warto wspomnieć o innych kwestiach, takich jak kontrola wersji, śledzenie błędów itp., Ale moim zdaniem brak rozsądnego podejścia do debugowania jest znacznie większym problemem i wymaga więcej nauki.
źródło
Z mojego doświadczenia wynika, że programowanie polega na rozwiązywaniu problemów. W mojej szkole sprawdzali tylko, czy możesz pisać program bez błędu składniowego. To, co jest rzeczywiście wymagane, nie jest podawane jako dane wejściowe. Składnia to po prostu coś, co można wyszukać w dowolnej książce, jeśli zajdzie taka potrzeba. Ale umiejętności rozwiązania problemu nie można uzyskać nigdzie, poza tym, że dobrze ćwiczysz i trenujesz się w tym zakresie.
Niech będzie dowolnego rodzaju, spróbuj wypełnić jak najwięcej pytań, abyś nabrał pewności siebie. Spróbuj zrobić to z pewną pasją, a na pewno sobie poradzisz.
źródło
Poświęć trochę czasu na poznanie typowych wzorców projektowych: fabryka, singleton, adapter, dowodzenie i obserwator (moja uczelnia ich nie nauczyła).
Jeśli firma używa metodologii Agile do opracowywania oprogramowania, warto ją trochę zrozumieć.
źródło
Wiele umiejętności potrzebnych jako profesjonalny programista jest prawie niemożliwych dla każdego w środowisku uniwersyteckim / akademickim.
Mogą pochodzić wyłącznie z doświadczenia pracującego bezpośrednio w terenie.
Dowiedz się, jak współpracować i komunikować się z osobami spoza „zawodu”, takimi jak graficy, projektanci produktów, menedżerowie itp.
Zrozumienie, że Twoim zadaniem nie jest pisanie kodu, ale ożywienie produktu. Łatwiej powiedzieć niż zrobić.
Umiejętność zrównoważenia dobrych praktyk kodowania z względami praktycznymi. Nabycie umiejętności oceny, kiedy kod jest „wystarczająco dobry”, „przepracowany” lub „wymaga refaktoryzacji”.
Nauka przezwyciężania własnych słabości i niepewności. Nabycie umiejętności wytrzymania krytyki. Odpuszczając swoje ego. Dowiedz się, co to znaczy wziąć osobistą odpowiedzialność, a następnie wziąć to na siebie.
O tym wszystkim łatwo przeczytać. Zupełnie inną rzeczą jest przećwiczenie tego. Jedynym sposobem jest zrobienie tego. Zostaniesz ugryziony wiele razy i prawdopodobnie będzie bolało, ale wyjdziesz z niego silniejszy i lepszy.
Odpowiednia lektura: Wzory praktyk
źródło
Wszystko zależy od szkoły. Na mojej uczelni mamy wiele praktycznych projektów. Dość często w zespołach i przy użyciu różnych kontroli źródła. Myślę więc, że niektóre szkoły koncentrują się na nich.
Ale jedna szkoła nie uczy: szczegóły. Dość często, gdy szkoła uczy jakiejś technologii lub praktyki (takich jak tworzenie stron internetowych, tworzenie JAVA UI, zaawansowane bazy danych), tylko drapią one powierzchnię i nigdy nie zagłębiają się w szczegóły, które byłyby konieczne do korzystania z tej technologii lub praktyki w prawdziwym biznesie. Otrzymasz ogólny przegląd możliwych sposobów rozwiązania problemów, ale musisz nauczyć się niezbędnych szczegółów.
Jedyny czas, kiedy szkoła uczy czegoś w szczegółach, ma silne zaplecze matematyczne lub teoretyczne. Rzeczy takie jak języki formalne lub bazy danych SQL są dość często podstawową częścią szkolnego programu nauczania, ponieważ są oparte na matematycznych podstawach i są często używane w informatyce lub inżynierii.
źródło
źródło
Chciałbym wcześniej zdecydować, czy chcę zostać programistą, uczyć się wielu różnych rzeczy, języków, baz danych i platform, a ostatecznie zostać programistą, czy powinienem po prostu specjalizować się w jednym systemie CMS, lub nawet po prostu specjalizować się w Photoshopie, będąc specjalistą, Twoje umiejętności byłyby tak samo cenne i opłacalne, niż wiedza o tym, co powinien wiedzieć prawdziwy programista. Innymi słowy, jeśli po prostu chcesz zarabiać dobre pieniądze, po prostu specjalizuj się w JEDNEJ RZECZY. Jeśli kochasz komputer i lubisz rozwiązywać problemy, bądź programistą.
[refleksja nad i po nauczeniu się 4 lub 5 różnych „frameworków” javascript, zanim JQuery naprawdę wyszedł na dobre, uzyskiwanie certyfikatu w JAVA i nigdy nie uzyskiwanie pozycji java oraz po pracy na wielu platformach; AS400-rpg,> .NET-c # i PHP, zanim żałuję, że nie opanowałem Photoshopa i zarabiałem tyle samo bez konieczności poprawiania błędów lub pisania oprogramowania. ]
Mam na myśli pewną satysfakcję ze znajomości szerokiego zakresu tematów, ale satysfakcja jest kłopotliwa, gdy widzisz kogoś, kto tylko zna Photoshopa, wypłaca tę samą wypłatę.
źródło