Staż/praca

0

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.

2
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

0

bądź spójny

0
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?

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