Co powinien nauczyć się typowy programista

0

Zastanawiam się nad tym co jest kluczowe w nauce programowania. Obecnie na studiach otarłem się o programowanie w Pascalu i C. W przyszłym semestrze z C przejdziemy na C++. Zdecydowanie C nie jest językiem w którym chciałbym pisać, wolałbym przenieść się na coś wyższego, bo z C łączy się asembler a to mnie nie interesuje.
Generalnie co powinien wiedzieć kandydat na programistę? Nie jakiś wymiatacz/olimpijczyk ale taki zwykły, typowy programista.
Język o którym myślę to Java pod webdev ale nie wiem czy jest sens uczyć się przed C++ nie znając obiektowości i mając mizerną wiedzę. Czy nie namieszam sobie ucząc się równolegle 2 języków?

Co mi się wydaje:

  • szukanie informacji
  • podstawowe obeznanie w języku - czyli co?
  • wkute algorytmy typu jak napisać np. listę jednokierunkową, sortowanie
  • bazy danych - SQL?
6

na pewno korzystać z wyszukiwarki, wpisywać odpowiednie zapytania po polsku jak i angielsku

2

Po pierwsze i najważniejsze- programować. Nie rozmawiać o programowaniu, nie teoretyzować, nie czytać masy książek o programowaniu, nie czytać masy artykułów, nie czytać o super "ficzerach" IDE którego używasz (a raczej planujesz używać). Ty teraz teoretyzujesz zamiast właśnie pisać kod w Javie. Na wszystko co wymieniłem przyjdzie czas ale fundamentalne w nauce programowania jest samo programowanie.

1

Według mnie początkujący w 1 pracy przede wszystkim powinien umieć, kolejność bez znaczenia:

  1. Komunikować się - informować o blokerach i nie marnować czasu pracodawcy i starszych kolegów
  2. Umieć szukać informacji
  3. Łatwo się nie poddawać i być dociekliwym - a nie rozkładać ręce przy każdym NullPointerze
  4. Angielski
  5. Podstawy SQL
  6. Podstawy Programowania - Składnia i jakieś proste projekty przy użyciu jakiegoś znanego frameworka, jeśli web to umieć napisać CRUDa
  7. Chęć do nauki
  8. Umieć failować i brać za to odpowiedzialność i przede wszystkim umieć wyciągać wnioski, im więcej iteracji, tym dalej jest w rozwoju u dużo mniej błędów popełnia
5

Zdobywać odpowiedzi na proste i trudne pytania, bez potrzeby tworzenia wątków na forach. Takich jak ten.

0

Właśnie specjalnie napisałem abyście dopisali coś nowego. A ten SQL to jako który? Oracle jak do Javy? Uczyć się tej Javy jak niedługo będę musiał uczyć się C++? Zaczynać już obiektówkę?

9

Czego.

0

Dwie rady mogę dorzucić od siebie.

ad. Algorytmy, sortowanie, drzewa - ciekawe, interesujące, ale w pracy programisty kompletnie niepotrzebne. Wszystkie technologie, których będziesz używał będą miały zaimplementowany quicksort w sobie i będziesz pisał "order by" albo .sort i po sprawie. Ale oczywiście podstawowe struktury danych i operacje na nich musisz mieć opanowane.

ad. SQL - warto poznać jednego, hmm może Oracle (chociaż jest trochę w odwrocie ;-)), albo mySql-a. Wybierz taką, która jest znana i można ściągnąć darmową wersję ;-). Wszystkie inne będą wyglądały podobnie. Coraz silniej wchodzą też bazy NoSQL i warto poznać chociaż koncepcję takiej bazy, która wydaje się nieźle pokopana i w rzeczywistości taka jest naprawdę, przykłady MongoDB, Mark Logic, Apache HBase, Elasticsearch, Apache Solr (te ostatnie to w rzeczywistości searchenginy). Ale na początek poczciwy SQL.

Generalnie praca w IT jest dynamiczna, tzn. nikt Ci nie napisze zestawu 10 technologii/tooli, które musisz umieć, żeby pracować. Powinieneś być elastyczny, trochę tego, trochę tego, trzeba coś na bieżąco doczytywać etc. To nie jest praca "od do".

0

A ten SQL to jako który? Oracle jak do Javy? Uczyć się tej Javy jak niedługo będę musiał uczyć się C++? Zaczynać już obiektówkę?

A niby piszesz ze wiesz ze trzeba szukac informacji...

A zadajesz pytania na ktore sam odpowiadalem wielokrotnie

0
  1. myśleć
  2. umieć zadać pytanie
  3. umieć wyszukać (w zasadzie 2 i 3 są ze sobą powiązoane, bo, żeby coś znaleźć treba umieć odpowiednio zadać pytanie w wyszukiwarce)
  4. wyćwiczyć się w technikach projektowo/programistycznych.
  5. poznać dobre zasady ułatwiające programowanie
  6. poznać kilka języków
0

. Obecnie na studiach otarłem się o programowanie w Pascalu i C. W przyszłym semestrze z C przejdziemy na C++. Zdecydowanie C nie jest językiem w którym chciałbym pisać, wolałbym przenieść się na coś wyższego, bo z C łączy się asembler a to mnie nie interesuje.
Generalnie co powinien wiedzieć kandydat na programistę? Nie jakiś wymiatacz/olimpijczyk ale taki zwykły, typowy programista.
Język o którym myślę to Java pod webdev ale nie wiem czy jest sens uczyć się przed C++ nie znając obiektowości i mając mizerną wiedzę.

Za dużą wagę przykładasz do języków programowania, zamiast po prostu usiąść i programować.
Za dużo patrzysz w kategoriach nauki, zamiast postawić sobie za cel np. "zrobić własną grę" i ją robić (zamiast gry możesz sobie podstawić "własną stronę internetową", "kopię Facebooka", "aplikację-budzik" czy cokolwiek), bo na tym polega właśnie nauka programowania - programista uczy się tworząc coś konkretnego. Wtedy dopiero stykając się z konkretnymi problemami, uczysz się jak je rozwiązywać (przy czym zwykle pierwsze próby będą beznadziejne. Ale nie warto się tym przejmować, tylko trzeba podejmować kolejne próby).

Ta obiektówka też jest po coś. Jeśli będziesz się uczył obiektówki dla samej obiektówki to programując w jakimkolwiek języku nauczysz się źle. Nie ma nic złego uczyć się konceptów (czym jest choćby klasa czy metoda), ale jednak "na koniec dnia" powinieneś napisać jakiś prawdziwy program, który robi coś konkretnego (wszystko jedno w jakim języku).

Natomiast nie liczyłbym tu na studia - bo studia jak wiadomo są znane z tego, że uczą rzeczy oderwanych od rzeczywistości biznesowej. A potem ludzie wychodzą po studiach w prawdziwy świat i niby "znają programowanie obiektowe", a mimo to nie umieją zaprojektować choćby prostej aplikacji.

  • wkute algorytmy typu jak napisać np. listę jednokierunkową, sortowanie

Algorytmów się nie wkuwa! Algorytmy się albo rozumie, albo, jeśli się ich nie potrafi zrozumieć, to po prostu się o nich czyta i przepisuje (tj. próbuje zaimplementować wg przeczytanego wzoru), albo używa gotowej biblioteki i to dopiero wtedy, kiedy algorytm będzie faktycznie potrzebny.

Generalnie co powinien wiedzieć kandydat na programistę? Nie jakiś wymiatacz/olimpijczyk ale taki zwykły, typowy programista.

Typowy programista, taki, który pracuje w firmie, powinien przede wszystkim posiąść umiejętności miękkie, pracy z ludźmi, komunikacji, umiejętność obrony własnego zdania. Także umiejętność negocjacji czy automarketingu (choćby przy rozmowach kwalifikacyjnych, żeby w ogóle pracę dostać).

Cierpliwość w rozmowach z osobami o niskiej inteligencji też się przydaje, bo z takimi osobami głównie będziesz pracować jako programista.

Także język angielski trzeba znać, bo prawie wszystkie materiały na temat programowania są po angielsku.

Oczywiście, trzeba znać jakieś podstawy programowania również, ale jeśli chodzi o programowanie to ważniejsza jest umiejętność szybkiej nauki niż umiejętności, które faktycznie posiadasz (bo nawet jak czegoś nie wiesz, to zawsze możesz się douczyć na bieżąco już pracując)

0

Co do mieszania się języków przy nauce to dorzucę kilka słów od siebie.

Z jakimkolwiek programowaniem mam styczność praktycznie od początku roku (sama końcówka grudnia i przerwa świąteczna kiedy to miałem chwile więcej czasu dla siebie i odpaliłem pierwsze tutoriale). Wcześniej moje pojęcie o na ten temar było praktycznie zerowe.
Stwierdziłem, że czas coś zmienić w sowim życiu i po prostu usiadłem uczyć się programować :)

Zacząłem od Javy i startując od kompletnego zera po ok dwóch miesiącach miałem na koncie 3 całkiem dobrze działające gry z wykorzystywaniem OOP i JavaFX. Pomijam proste kalkulatory i inne głupoty po drodze, jednak były to programy na których dalej ciągle się uczyłem i testowałem przeróżne funkcje z dokumentacji, które według mnie miały spełniać pewne założenia. Metodą prób i błędów oraz sporym bałaganem w kodzie (czego oczekiwać od 2miesiecznego programisty, który ucząc się wyświetlać okno z buttonem skończył na małej gierce penetrują z pasją dokumentacje) miałem swoje pierwsze doświadczenia z programowaniem.

Następnym krokiem była przygoda z webdevem ponieważ wpadła mi propozycja napisania pewnej aplikacji internetowej od znajomego skoro "coś tam programuje". Po odradzeniu na forum przez bardziej obeznane osoby pisania tego z ówczesną wiedzą i doświadczeniem w Javie z użyciem Springa i Hibernate (przyznam, że próbowałem do tego usiąść i faktycznie jest dość dużo nowych pojęć dla kompletnego nooba więc odpuściłem bo zależało mi na czasie) przeszedłem do nauki HTML i CSS. Pisanie statycznych stron jest stosunkowo proste, więc żeby mogły robić nieco więcej zacząłem poznawać PHP, później przyszedł czas na bazy danych więc wpadł SQL. Ostatnim krokiem była potrzeba napisania kilku bajerów na stronie oraz chęć skorzystanie z magicznego AJAXa więc zacząłem poznawać JavaScritp.
Za JS przyszedł JQuerry, który mimo faktycznego przyspieszenia oprogramowywania pewnych elementów, powodował dłuższe ładowanie się strony więc przepisałem all z powrotem na JS.

Cały czas uczę się czegoś nowego w każdym z tych języków i szczerze przyznam, że raczej nie mylą mi się one między sobą. Jak czegoś nie jestem pewny to Google -> dokumentacja rozwiązuje wątpliwości.

Obiektowość to obiektowość, chodzi bardziej o sposób myślenia i podejście w rozwiązywaniu problemów niż ukrytą i magiczną wiedzę. Wiadomo, składnia w językach się różni, ale jak zrozumiesz pewne wyższe koncepcje w jednym języku to szybko odnajdziesz się w innych. Najszybciej poznasz i zrozumiesz to wszystko siedząc i programując swoje kolejne aplikacje bo zobaczysz w praktyce co to daje i jak ułatwia życie :) Chociażby przy robieniu gry tak jak ja kiedy będziesz miał potrzebę stworzenie przeciwników w grze i będziesz chciał im nadać określone zachowanie, przypisać grafikę czy zmienić kolor pocisków, którymi strzelają :P

2
Krzywy Mleczarz napisał(a):
  • szukanie informacji

współcześnie brak umiejętności posługiwaniem się google to zakrawa o przejaw analfabetyzmu

Krzywy Mleczarz napisał(a):
  • podstawowe obeznanie w języku - czyli co?

Wszystko i nic. jak napiszesz dużo kodu i poznasz różne języki, to nauczenie się nowego to będzie nie więcej niż 2 tygodnie.
Ważniejsza jest dogłębna znajomość jakiegoś frameworka/biblioteki

Krzywy Mleczarz napisał(a):
  • wkute algorytmy typu jak napisać np. listę jednokierunkową, sortowanie

Jeśli cokolwiek planujesz "zakuwać" to pomyliłeś branżę. W pracy nikt nie będzie ci robił egzaminów. Trzeba rozumieć co, jak i kiedy, by jak przyjdzie co do czego, to masz wiedzieć czego trzeba użyć - a detale doczytasz po wyszukaniu w internecie. Niestety wiele widziałem programistów, którzy wymyślali koło na nowo, a kończyło się "sześciokątem".

Krzywy Mleczarz napisał(a):
  • bazy danych - SQL?
  • to jest tylko jeden ważny dział informatyki, większość aplikacji biznesowych korzysta z baz danych, jest jednak dużo projektów, gdzie ich wcale nie ma.
  • trzeba się w czymś wyspecjalizować i tyle

A co każdy programista powinien wiedzieć umieć, wiedzieć (kolejność istotna)?

  1. Angielski w mowie i piśmie
  2. Debugger - o zgrozo wielu jest takich co nie używają, bo nie wiedzą jak
  3. co to jest kodowanie napisów i jak to obsługiwać: Unicode UTF-8, UTF-16, UTF-32, Windows-1250, etc - nie chodzi o szczegóły, ale by mieć pojecie co i jak by nie robić głupot.
  4. kontrola wersji - git, mercurial, svn
  5. optymalne wykorzystanie pamięci (cache miss)
  6. Profiler - unikanie przedwczesnej optymalizacji
0

sporym bałaganem w kodzie (czego oczekiwać od 2miesiecznego programisty, który ucząc się wyświetlać okno z buttonem skończył na małej gierce penetrują z pasją dokumentacje)

To normalne. Ja ileś lat programuję i dalej tak robię.

Wg mnie różnica między zaawansowanym a początkującym polega niekoniecznie na tym, że zaawansowany programista pisze od razu porządny kod, a raczej na tym, że zaawansowany programista umie ten kod potem posprzątać, albo przepisać od nowa na czysto.

Poza tym zaczynanie rzeczy X, kończenie na rzeczy Y, całkowicie innej jest normalne, jeśli piszesz exploratory code, np. jeśli poznajesz jakieś API, albo chcesz sprawdzić pewne rzeczy, pewne pomysły, albo robisz prototyp czegoś, projektujesz iteracyjnie aplikację (iteracyjnie, w sensie nie naraz całą, tylko małymi kawałkami, i patrzysz co się sprawdza, co nie).

1

@krzywy Mleczarz Najpierw ustal co Cię naprawde interesuje (np. front/backend dev), a potem sprawdź jakimi technologiami możesz to osiągnąć i zabierz się za dokumentację i robienie swoich projektów.

Nie wiem co rozumieć przez "typowego programistę". Na pewno niezbędna jest dobra znajomość angielskiego, pojęcie o bazach danych, kontrola wersji, przydaje się wiedza z podstaw inżynierii oprogramowania.

Poczytaj ogłoszenia o pracę np. dla java developer, a zobaczysz czego się wymaga od programisty w danej technologii. Generalnie "typowy programista" powinien posiadać portfolio ze swoimi projektami. Zamiast rozpisywać się w CV nad swoimi umiejętnościami, lepiej wrzucić linka do GitHub'a. ;)

0

Typowy programista raczej nie musi wiedzieć wiele, jak będzie umiał odróżnić final od finally to da sobie radę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1