Jakie umiejętności są niezbędne do profesjonalnego programowania, które nie są powszechnie nauczane w szkole? [Zamknięte]


14

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!


8
to pytanie zostało zadane wiele razy na tej stronie na różne sposoby. najpierw wyszukaj, a następnie zapytaj. zajrzyj do FAQ; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog 20.04.2013

3
Szukałem i widziałem oba te pytania. Ale nie interesuje mnie nauka projektowania ani tworzenia stron internetowych. Martwię się o to, co wielu programistów uważa, że ​​tak naprawdę powinni byli nauczyć się w szkole. Te pytania mają kilka świetnych rad, ale nie są dokładnie tym, czego szukam. Dziękuję
Eric

+1 Jedyną umiejętnością, którą chciałbym opanować przed zostaniem pełnoetatowym programistą, są silne umiejętności matematyczne, ponieważ umiejętności matematyczne są prawdopodobnie najważniejszą umiejętnością, ponieważ trenuje umysł w zakresie rozwiązywania problemów i uczenia się nowych pojęć, a jako programista, że jest głównie tym, co będę robić codziennie.
Anthony

3
Przepływ pracy. Zdając sobie sprawę, że kod nie jest unikalnym płatkiem śniegu jednorożca. Podczas projektowania zastosuj zasadę najmniejszego zdziwienia. Pomyśl zanim to zrobisz. Zarządzanie złożonością staje się bardzo ważnym aspektem.
sleeplessnerd

1
Właściwie nie lubię bardzo pracować z ludźmi o silnych umiejętnościach matematycznych. Przekształcają wszystko w matematyczną formułę zamiast stosowania zasad inżynierii oprogramowania. Oprogramowanie NIE jest matematyką. Konieczne jest napisanie kodu, aby był łatwy do zrozumienia.
Rob K

Odpowiedzi:


21

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:

  • praca w ramach zespołu programistycznego
  • za pomocą kontroli wersji
  • za pomocą narzędzia do śledzenia błędów

Są to bardzo ważne umiejętności dla każdego programisty, i niestety prawdopodobnie nie dostaniesz ich w klasie.


4
Praca w zespole programistów to z pewnością subtelna i złożona sztuka. Nie rozumiem jednak, dlaczego kontrola wersji i śledzenie błędów są zawsze traktowane jako główna przeszkoda dla nowych programistów. Są to z pewnością ważne narzędzia, ale kierujesz nową osobę na strony podręcznika, książkę O'Reilly lub samouczek online, a one mogą odebrać zużycie chleba i masła w ciągu kilku godzin. Dlaczego marnujesz czas w klasie na coś takiego?
Charles E. Grant,

1
@ CharlesE.Grant Kontrola wersji jest podobna do programowania, ponieważ można uzyskać podstawy w stosunkowo krótkim czasie, ale efektywne korzystanie z niego wymaga doświadczenia. A DVCS jak git i Mercurial potrzebują więcej do zrozumienia niż CVCS jak svn.
Izkata,

8
Nigdy nie miałem zajęć na temat utrzymywania ustalonego kodu (co stanowi główną część pracy w zespole programistów), a moje doświadczenie w testowaniu kodu było minimalne.
Velociraptors

1
@ CharlesE.Grant: Przez kilka lat prowadziłem kursy dla absolwentów z zakresu programowania i pokrewnych tematów. Nawet absolwentom trudno jest zrozumieć, dlaczego powinni korzystać z dowolnego systemu kontroli wersji. A kiedy niechętnie zaczynają go używać, wydają się bardzo szybko zdezorientowani. +1 dla Masona za podniesienie go jako ważnego niezauważonego tematu.
Peter K.,

1
+1 +1 +1, jeden za każdy punkt. To jest tak głupie, że nie uczą cię tych rzeczy ... a przynajmniej próbują cię nauczyć.
Radu Murzea

20

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.


9

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.


+1 za część testową. Na moim uniwersytecie też tego nie uczą. Miałem 1 klasę (tak: jedna), w której nauczyciel wspominał o testowaniu jednostkowym ... przez około 3 minuty. Otóż ​​to.
Radu Murzea

Wiem, że to spóźniona odpowiedź, ale była to jedna z rzeczy, które sprawiły, że mój stopień matematyki przemówił do moich pracodawców. Ten pogląd jest zdecydowanie podzielany również wśród pracodawców.
Eric

Zgadzam się, w wielu szkołach algorytmy (aka „rozwiązywanie problemów”) nie są właściwie nauczane, w ogóle nie są nauczane lub nie uczą, jak stosować je w języku programowania, nawet jeśli muszę być „agnostyczny”.
umlcat,

Hmmmm .... twoja odpowiedź nie może być bardziej przeciwna do tego, czego doświadczyłem. Celem szkoły jest przedstawienie tła, abyś mógł skutecznie przestudiować problem, zrozumieć go i znaleźć rozwiązania. Nowy absolwent może nie być „dobry” w nowej szkole, ale z pewnością powinien być przeszkolony i zdolny do tego. W mojej szkole w ogóle nie uczyli programowania. Oczekiwano, że nauczysz się programować (samodzielnie), jednocześnie ucząc się informacji, których kurs chciał cię nauczyć. Więc skąd bierzesz, uczą tylko „mechaniki kodowania” poza mną…
Dunk

... W porządnych szkołach nie dostaniesz kredytu za naukę programowania. Jeśli korzystanie z kontroli wersji jest trudne, masz o wiele poważniejsze problemy, które nie będą w stanie pomóc żadnemu szkoleniu. Kiedy wpadniesz na ostateczny sposób pisania kodu, który jest łatwy w utrzymaniu, napisz książkę i wzbogac się. Nikt jeszcze nie rozwiązał tego problemu. Musiałeś przegapić części w szkole, w których musiałeś oddać swoje programy do przetestowania. Testy akceptacyjne / regresyjne są specyficzne dla branży i lepiej je uczyć w pracy, wykonując to w sposób firmowy niż w szkole.
Dunk

7

Moim zdaniem niektóre z najważniejszych rzeczy, których nie nauczyłem się (lub właściwie się nauczyłem) w szkole to:

  • Jak prawidłowo używać i IDE; wykorzystanie pełnej mocy nowoczesnego IDE zapewnia ogromny wzrost wydajności: automatyczne refaktoryzacja, nawigacja kodu, integracja VCS, analiza kodu, uzupełnianie kodu itp.
  • Jak poprawnie korzystać z debugera: debugowanie zdalne, debugowanie aplikacji wielowątkowych, ekspresowa ocena itp.
  • Naprawa i konserwacja błędów; na uniwersytecie nie uczą cię prawie niczego na ten temat, ale w branży naprawianie błędów jest dość powszechne.
  • Jak pracować w dużym zespole i przy dużym projekcie; zasadniczo na uniwersytetach projekty są w pewnym sensie małe w porównaniu z dużymi projektami przemysłowymi.
  • Jak napisać dobry kod i jak położyć nacisk na czytelność; wiąże się to z doświadczeniem, ale istnieją książki, które uczą podstaw (Code Complete, Clean Code itp.).
  • Jak korzystać z frameworka z pełną mocą, korzystając z możliwości dostosowywania; na uniwersytecie może nauczyłeś się korzystać z niektórych ram w niektórych bardzo podstawowych scenariuszach; w przemyśle dotrzesz do narożnych skrzynek.
  • Jak rozumieć i pisać kod po specyfikacji; prawdopodobnie nauczysz się pisać specyfikację, ale teraz jak ją odczytać i interpretować

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ść.


alias „Programowanie” to nie tylko znajomość języka programowania, istnieje „środowisko”, „ekosystem”, „framework” ...
umlcat,

4

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 mostinnymi 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.


1
Myślę, że brak edukacji w zakresie kontroli wersji zaczyna się zmieniać. Kontrola wersji była mocno obciążona w mojej szkole.
Southpaw Hare

@SouthpawHare: Nie twierdzę, że to nie istnieje, nawet nauczyli mnie tego za moich czasów. Tyle, że ludzie wychodzący z uniwersytetu z tym doświadczeniem wciąż stanowią mniejszość. I jako tacy ludzie, którzy go mają, są bardziej wartościowi. Nie zgadzam się, że zmieniło się bardzo w ciągu ostatnich 20 lat.
Martin York,

3

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.


2

jakiej umiejętności chciałbyś się nauczyć zanim zostałeś prawdziwym programistą?

Z mojego doświadczenia wynika, że ​​moja szkoła nigdy nie nauczyła mnie, jak rozwiązywać problemy.

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.


2

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ć.


2

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


1

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.


1
  • wymagania - popełnij je źle, a odpoczynek to głównie marnotrawstwo
  • priorytety (która funkcja w której wersji)
  • zrobić lub użyć po wyjęciu z pudełka (kup / darmowy)
  • Praca w zespole
  • zarządzanie projektami - wymagania, jakość (próbki danych w prod, przypadki testowe, jak testować, pokrycie przed kodowaniem, więcej kosztuje, ale nie ma znaczenia. przeczytaj książkę PMI
  • narzędzia komunikacji (poczta, spotkania: terminarz)
  • zarządzanie kodem źródłowym

0

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ę.


2
Tak, ale taki specjalista nigdy nie otworzy własnego sklepu. Jeśli marzysz o tym, by kiedyś zostać CEO własnego startupu, będziesz potrzebować ogromnego zestawu umiejętności.
Davor Ždralo
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.