Witam jestem studentem 2 roku (4 semestr) studiów informatycznych. Nie długo będę aplikował podania na praktyki (6-cio tygodniowe). Chciałbym po takich praktykach załapać się na staż lub juniora, i tu moje pytanie jak zabłysnąć/ pokazać że się nadaję. Co muszę potrafić. Może ktoś ma doświadczenie którym mógł by się podzielić. Język którego się uczę to: C#. W planach technologie oraz HTML i CSS.
Podstawowe algorytmy: a) sortowania
Insertion Sort – chyba nie muszę tłumaczyć, proste wyszukiwanie po strukturze danych. Podstawa podstaw.
Selection Sort – podobnie jak na górze. Bardzo podstawowe, nieefektywne.
Bubble sort
Merge sort b) szukania
Linear Search – podstawa kompletna
Binary Search To chyba tyle z takich absolutnych podstaw. I teraz uwaga – czy każdy z tych algorytmów znam dokładnie na pamięć, implementowałem po kilka razy i wykorzystywałem własne, zmodyfikowane wersje? Nie. Po prostu wiem jak działają – znam schemat ich pracy, ich wady i zalety, kiedy użyć jakiego. Kiedy nie używać danego algorytmu, złe przypadki i tak dalej. Bo to ważne jest. Czasami diametralnie zmienia prędkość pracy naszego programu.
Jak już przy algorytmach jesteśmy, to warto wspomnieć o czymś takim jak rekursja, która jest z kolei czymś, co trzeba znać by poznać Merge sorta czy Binary search.
Następną rzeczą ważną jest złożoność obliczeniowa, czy też tak zwane big O. O co chodzi? Tak po chłopsku to jest to ilość jakiś tam ‘ruchów’, których nasz program będzie potrzebował do wykonania danej instrukcji dla zestawu danych n-elementowego. Wyróżniamy różne przypadki dla różnych sytuacji – w najlepszym przypadku, w najgorszym i w średnim. Zazwyczaj podaje się najgorszy, bo to pozwala nam stwierdzić, że ‘no cóż, gorzej już nie będzie’.
Czyli mówiąc jeszcze prościej, to liczba kroków potrzebnych do zrobienia czegoś i jak ona rośnie, kiedy tego czegoś jest więcej do zrobienia. Są różne złożoności - log n, n, n*n, ln n, 1 i tak dalej. O szczegółach rozpisywał się nie będę, szkoda czasu. Generalnie im mniejsza ta złożoność, tym program szybszy.
Struktury danych Tutaj sprawa jest prosta. Struktury danych to rzeczy, które niejednokrotnie mogą nam ułatwić znacząco życie. Tu warto trochę zagłębić się w szczegóły.
Jakie konkretnie te struktury danych kojarzyłem? Już mówię.
Array – chyba każdy zna, co?
Dictionary – też?
LinkedList – większość?
Stack
Heap
Set
Queue
Trees
HashTable
Trie Przy czym te trzy ostatnie to raczej tak ekstra, ponad poziom bym rzekł. Co tutaj warto wiedzieć? Jakie są wady/zalety danej struktury, kiedy jakiej używać. Złożoności obliczeniowe czy też pamięciowe dla nich i podstawowych operacji na nich jak szukania, wstawianie, sortowanie. Podobnie jak przy algorytmach.
Narzędzia:
IDE – PyCharm jak i Vim. Obecnie korzystam praktycznie jedynie z PyCharma no i teraz jeszcze sublime. Wcześniej był to vim z pluginami, ale… przy większym projekcie dla mnie wygodniejszy po prostu jest PyCharm.
Python – co to virtualenv, pip i te sprawy? Po co to, na co?
Virtualbox – ponownie, warto się troszkę przyuczyć, o co chodzi, bo przydatne narzędzia, zwłaszcza gdy pracujemy przy kilku większych projektach, tak samo jak vagrant.
A teraz dorzucę też trochę takich różnych ogólnych pojęć z szeroko rozumianej branży. Czy musicie każde z nich znać i kiedyś korzystać z danego narzędzia i tak dalej? No nie, ale fajnie jest kojarzyć chociaż, daje to takie rozeznanie i kiedy rozmawiamy z innymi ludźmi, może bardziej doświadczonymi, to pewne terminy będą dla nas znajome, chociaż część. Wtedy, zamiast jakiegoś niezrozumiałego żargonu słychać już minimalnie znajomy bełkot :D
VPS – w skrócie virtual private server, taki twój własny kawałek jakiegoś serwera można by powiedzieć
VPN – virtual private network, taka sieć prywatna można rzec
Docker, Vagrant – to pierwsze to tylko nazwe kojarzę, i że to coś z serwerami i deployem appki, a to drugie to już poczytajcie, bo fajne narzędzie
Protokół HTTP, HTTPS, SSL, SSH , IMAP, POP3 (!) - tak tylko pobieżnie który idzie do czego i czym się różnią
IDE – czyli zintegrowane środowisko programistyczne
MVC – model, view, controller – model przetwarzania danych używany w sporej ilości nowoczesnych frameworków
API – appilcation programming interface (!)
Cookie, Session, Cache – ciasteczka, sesja, cache storage
MySql, Postgres, mongodb, oracle, sqlite, sql, nosql, sql injection - (!) bazy danych, konieczność w większości aplikacji
Kody http: 3xx, 4xx, 5xx, ale w praktyce w sumie starczy: 300, 500, 200, 404
AJAX, JS, ecmascript – javascript, te sprawy, wiadomo
Klasa, Metoda, Obiektowość, programowanie obiektowe, funkcyjne, OOP (!!!) Generalnie obiektówka ważna sprawa
CMS – content managment system
DDOS, DOS – takie ataki złych hakerów
VCS – version control system, czy też system kontroli wersji, np. GIT
Devops – czym się tu zajmujemy
DOM – document object model – dla JS’owców konieczność
DRY, KISS, YAGNI (!!) - takie 3 zasady, których warto się trzymać podczas tworzenia kodu
linux, bash – linux to system operacyjny, bash to język skryptowy tak w uproszczeniu
Framework, library – różnice między nimi, czy to to samo?
Unit test, functional test, (!!) - testy jednostkowe i funkcjonalne, o nich niżej
Hash, crypto – co to takiego ten hash, kryptografia – czym to się w ogóle zajmuje.
Machine code, binary, hex – kod maszynowy, binarny, heksowy. Takie różne systemy liczbowe przydatne, bo nimi posługuje się komputer, a nie dziesiętnym.
Production, dev, qa, localhost – produkcja, czyli serwer, na którym stoi rzeczywista strona/appka klienta, dev – środowisko developerskie, lokalne, localhostowe, qa/testing – takie do testowania można rzec, zanim poleci na produkcje, często wędruje tam, chociaż jak to mówią najlepsze testy to tylko na produkcji. Tak serio to nie, nie próbujcie tego w domu.
Segfault – segmentation fault, czyli co się dzieje, jak trochę nie ogarniesz w niskopoziomowym języku, lub rzadziej, w wysokopoziomoowym
Serwer – tam sobie wrzucamy i odpalamy różne appki/strony (w ogromnym uproszczeniu) i one sobie tam żyją
Spaghetti code – po prostu kod, który jest tragiczny
TDD – test driven development, DDD – domain driven development, ot ciekawostka
Firewall - no chyba tłumaczyć nie trzeba
Compiler, linker, interpreter, assembly
Design pattern, the big4
PNG, JPG, GIF, image sprite - formaty plików w dużym uproszczeniu
IP, TCP, PORT, Apache, Nginx
Bootstrap, jQuery, Material Design, gulp
Dużo? W sumie to nie, bo większość ci się powinna obić kiedyś tam o uszy. Ponownie – chodzi o to, żebyś po prostu kojarzył te terminy i wiedział, o co w nich chodzi.
Większość z nich wyjaśniona jest tutaj: https://www.hackterms.com/ a jak tam nie? Google. Albo DuckDuckGo, kto co woli.
- do tego dobre praktyki, pisanie czystego, dobrze opisanego kodu
znajomość gita, repo na githubie, jakiś fajny blog na którym dzielisz się wiedzą, opisujesz projekty, podstawy linuxa, umiejętność debugowania/profilowania swojego kodu
Jak się wyróżnić? Just know your stuff. Znaj podstawy Informatyki (na poczatek polecam cs50, potem cs50 web) , znaj narzędzia na których pracujesz, odświez swoją wiedzę, bądź człowiekiem, bądź aktywny wykazuj inicjatywę, nie bój się pytać. That's all.
Jak chcesz poczytać więcej, to niżej:
Jak ja szukałem pracy/jak ją znalazłem: https://grski.pl/first-job.html
Co konkretnie umiałem: https://grski.pl/umiejetnosci.html
Pierwsze dni: https://grski.pl/pierwsze-dni.html
Angielski bardzo ważny: https://grski.pl/zacznij-angielski.html
bądź spójny
Mariusz Liszewski napisał(a):
Witam jestem studentem 2 roku (4 semestr) studiów informatycznych. Nie długo będę aplikował podania na praktyki (6-cio tygodniowe). Chciałbym po takich praktykach załapać się na staż lub juniora, i tu moje pytanie jak zabłysnąć/ pokazać że się nadaję. Co muszę potrafić. Może ktoś ma doświadczenie którym mógł by się podzielić. Język którego się uczę to: C#. W planach technologie oraz HTML i CSS.
A w jakim mieście szukasz stażu?