Jakie umiejętności powinien posiadać każdy programista kończący studia? [Zamknięte]

9

Mieliśmy gościnnego wykładowcę w naszej szkole, który przeszedł na tangens dotyczący absolwentów, którzy nie osiągnęli wymaganego poziomu umiejętności, tj. znajomość jednego, dobrze skompilowanego języka, takiego jak Java, C ++ lub C #, jednego języka skryptowego, takiego jak Python lub Ruby, jednego frameworka sieciowego. Jakie inne umiejętności według was powinny być absolutnie kluczowe dla ukończenia studiów?


źródło
Zakładam, że masz na myśli ukończenie uniwersytetu?
Michael Shaw
1
@Ptolemy: W Stanach Zjednoczonych termin college jest poprawny.
Macneil
1
Chęć kopnięcia się w tyłek i oduczenie sms-ów, młodzi punki! socializedpr.com/…
Job

Odpowiedzi:

27

Zdecydowanie chciałbym się nauczyć. College tak naprawdę nie ma na celu dostarczenia umiejętności potrzebnych do zostania programistą. Ma na celu nauczyć cię umiejętności, których potrzebujesz, aby nauczyć się tych umiejętności.

Jason Baker
źródło
Nie mógłbym tego lepiej powiedzieć.
Chris,
4

Nowi absolwenci potrzebują czegoś więcej niż tylko chęci do nauki, potrzebują obsesji na punkcie nauki, zrozumienia, jak się uczyć i solidnego zakorzenienia w realiach oprogramowania. Zasadniczo nie obchodzi mnie, jakie znasz języki, ale każdy uczeń musi:

  1. Zrozum historię . Informatyka to dobrze zbadana dziedzina z wieloma rozwiązanymi problemami. Znajomość tego faktu otwiera drzwi do uczenia się na podstawie tego, co jest przed tobą. Nawet wiedza, że ​​istnieje bogata historia do wydobywania wiedzy, jest więcej niż wielu absolwentów. Obejmuje to takie rzeczy, jak notacja big-O, historia algorytmów, zasady proroków (Knuth, K&R, Hofstdater itp.) Oraz powszechnie akceptowane praktyki i wzorce.

  2. Wiedz, że można to rozwiązać . Zawsze jestem zaskoczony, gdy programista napotyka problem. Częścią nauki uczenia się jest prosta zasada, że ​​problemy są zawsze łatwe do rozwiązania. Gdy się o tym dowiesz, otacza to twoje myślenie o znalezieniu rozsądnej odpowiedzi.

  3. Zrozum rozkład . Nie tylko można rozwiązać problemy, ale droga do tego jest tak prosta, jak dzielenie i podbijanie. Ogranicz problem do prostszych elementów, a Twoja odpowiedź zawsze się pojawi.

  4. Wiedzieć, jak mierzyć . Oprócz możliwości rozkładania problemów nowi programiści muszą wiedzieć, jak gromadzić informacje na temat tych problemów. Jak długo? Jak duży? Jak szybko? Ile? Proste fakty są krokiem do zrozumienia i obiektywnego myślenia. Przyjmowanie założeń bez faktów jest łatwym sposobem na zagubienie się w przestrzeni problemów.

  5. Bądź obiektywny . Wszystkie problemy można łatwo rozłożyć, zmierzyć i zrozumieć. Problemy, których nie można zrozumieć, wymagają jedynie dodatkowego rozkładu, pomiaru i zrozumienia. Nie ma sensu się denerwować ani sfrustrować, nie jest też produktywne spieranie się o teorie lub obwinianie. Wszelkie irracjonalne zachowania lub przekonania związane z procesem rozwiązywania problemów są trucizną, co sprawia, że ​​znalezienie rozwiązań jest bardzo trudne.

  6. Preferuj wzorce i zasady . Poznasz dziesiątki właściwych sposobów robienia rzeczy, języków, modeli programowania, architektur komputerowych, a nawet metod inżynieryjnych. Nie ma jednego właściwego sposobu, ale istnieją solidne podstawowe koncepcje, które można zastosować w kółko. Naucz się widzieć te wzorce, które poprowadzą cię do nauki i myślenia na każdym kroku.

Bruce Alderson
źródło
1
  1. Pasja do dobrego programowania
  2. Pokora
  3. Możliwość szybkiego uczenia się nowych rzeczy
TaylorOtwell
źródło
0

Jako pracodawca będę zatrudniać tylko programistów, którzy:

  1. Mieć doświadczenie w pojedynczym przechodzeniu przez kod.
  2. Potrafi wybrać odpowiedni wzór projektu, aby rozwiązać prosty konkretny problem.
  3. Potrafi implementować kod, który odzwierciedla wybrany przez nich projekt.

Z mojego doświadczenia wynika, że ​​mniej niż 5% absolwentów informatyki ubiegających się o pracę programistyczną faktycznie posiada te umiejętności na poziomie podstawowym. Są to minimalne umiejętności potrzebne do komercyjnego wykorzystania i, co ważne, nie każdy jest w stanie nauczyć się tych umiejętności.

Inne miłe do zrobienia to:

  • Doświadczenie w pracy nad projektem zespołowym
  • Korzystanie z kontroli źródła
  • Doświadczenie w testowaniu jednostkowym

Ułatwiają one integrację z istniejącym zespołem programistów, ale są to przedmioty, których normalnie można się uczyć w pracy.

Michael Shaw
źródło
0

Kiedyś miałem zespół, który „odziedziczyłem” z przeważnie świeżo wyszkoloną kadrą i miałem doświadczenie, że ci, którzy wykonali prawdziwe programowanie „obok” studiów (aby zarobić dodatkowe pieniądze) byli najbardziej zdolnymi członkami zespołu. Stąd doświadczenie jest kluczem i nie ma znaczenia, jaki język.

Jednak jeśli spojrzysz na to, czego szukają rekruterzy (we wszystkich popularnych witrynach rekrutacyjnych, takich jak jobserver.com itp.), Interesujące jest, że często pyta się o C ++, C #, Java, ale są też inne, których szukał i także „egzotyczne” rzeczy, takie jak COBOL, wciąż istnieją.

hol
źródło
0
  1. Umiejętności interpersonalne i komunikacyjne
  2. Podejście pragmatyczne (nie ta teoria akademicka)
  3. Umiejętność myślenia jak klient, który nie jest technicznie skłonny
  4. Umiejętność oceny tego, co jest ważne / a co można zignorować pod względem kosztów / korzyści
  5. Umiejętność pracy w zespole
  6. Umiejętność strategicznego myślenia: architektura, rozszerzalność, skalowalność
  7. Otwartość na zaakceptowanie tego, że nauki uniwersyteckie mają niewiele wspólnego z prawdziwym światem (zależy od uniwersytetu - niektórzy lepiej sobie z tym radzą).

Proces uczenia się w tym zawodzie nigdy się nie kończy. Trzeba się ciągle uczyć i doskonalić, w przeciwnym razie „szybko wyskoczy” z gry.

Wieża
źródło
Wszystkie są przydatne. Jednak ma je prawie zero absolwentów uniwersytetów i nie są one krytyczne, ponieważ większość z nich można łatwo zdobyć w miejscu pracy. Myślę, że odpowiadałeś na inne pytanie.
dbkk
@dbkk - błagam o wybaczenie, ale pytanie nie brzmiało „jakie umiejętności mają absolwenci programistów”, ale „jakie ... powinny mieć”. Nie, niełatwo je zdobyć. Wręcz przeciwnie - najczęściej ludzie z wieloletnim doświadczeniem wciąż brakuje większości z nich.
Rook
1
Są to umiejętności ogólne i wiele z nich nie nadaje się do nauki w szkole.
David Thornley,
-1

Inne odpowiedzi są dobre, ale powiedziałbym, że przeoczoną umiejętnością nr 1 na uniwersytecie wydaje się być faktyczna inżynieria oprogramowania .

Podstawowe klasy do nauczania OOP i języka takiego jak Java są świetne, ale w trzecim i czwartym roku dlaczego studenci (przynajmniej na moim lokalnym uniwersytecie) piszą kompilatory i systemy operacyjne zamiast uczyć się, jak identyfikować i tworzyć dobrą architekturę, jak analizować wymagania i tworzyć z nich listę specyfikacji technicznych, a może przede wszystkim, jaka jest różnica między dobrym kodem, który działa, a złym kodem, który działa.

To tak, jakby nasze uniwersytety prawie chciały produkować kodery zamiast inżynierów oprogramowania . Nigdy nie zatrudniłbym kogoś, kto nie wykazywałby się pewnymi umiejętnościami / talentem w inżynierii.

Nicole
źródło
4
Ponieważ ludzie uczą się informatyki, a nie inżynierii oprogramowania. Ten problem zniknąłby, gdyby uniwersytety i studenci zdali sobie sprawę, że informatyka! = Inżynieria oprogramowania, informatyka to nauka, informatyka nie polega na programowaniu, a inżynieria oprogramowania to coś więcej niż programowanie.
Thomas Owens
-1. Nauczenie się, jak działają rzeczy pod maską (kompilatory, system operacyjny, język asemblera itp.) Jest ważne, nawet jeśli nigdy nie pracujesz na tym poziomie, ponieważ w pewnym momencie napotkasz nieszczelne abstrakcje.
dsimcha
@dsimcha, jeśli w to wierzysz, masz bardzo wąski pogląd na to, jakiego rodzaju inżynierów oprogramowania zatrudniają obecnie firmy w prawdziwym świecie. Nie chodzi o to, że te rzeczy nie wnoszą żadnej wartości - to koszt alternatywny nieuczenia czegoś ważniejszego.
Nicole