Jak przygotować się do rozmowy rekrutacyjnej na Python Developera
Warsztat developera
-
Upload
maciej-miasik -
Category
Self Improvement
-
view
631 -
download
2
description
Transcript of Warsztat developera
WARSZTAT DEVELOPERA
Gdzie, co i jak
Wykład z kursu Digital Frontier – digitalfrontier.pl
Co to warsztat?
Co kryje się pod tym pojęciem?
Warsztat to:
Miejsce pracy. Niezbędne narzędzia. Procesy produkcyjne i sposoby pracy. Wiedza niezbędna do ich wykonywania.
Czyli o zaletach dobrego warsztatu
Dlaczego warsztat jest ważny
Zalety dla nas
Wpływa na jakość naszych produktów. Ułatwia nam pracę. Obniża frustrację. Daje więcej satysfakcji - szybciej, lepiej,
łatwiej. Podnosi nam samo-ocenę. Podnosi bezpieczeństwo.
Zalety dla innych
Ułatwia współpracę z innymi. Czyni z nas atrakcyjniejszego partnera. Podnosi bezpieczeństwo współpracy z
nami. Jest dobrą wizytówką.
Inaczej miejscówka
Miejsce
Moja hierarchia miejsc
Gabinet domowy. Własne biuro. Mały pokój biurowy: 2-5 osób. Średnie pokoje: 5-10 osób. Open plan office (open space): od 10 do
100+.
Samemu czy w grupie
Sam (1-5 osób)
Zalety Cisza, spokój, skupienie. Customizacja (brak lepszego słowa)
wszystkiego: światło, dźwięk, temperatura, meble, aranżacja, dekoracja.
Wady Izolacja. Gorsza komunikacja, „wypadnięcie z gry”. Brak pozytywnej rywalizacji. Brnięcie w ślepe zaułki.
W grupie (5+)
Zalety: Komunikacja i wymiana doświadczeń. Inspiracja pracą innych. Pozytywna rywalizacja.
Wady: Hałas, rozpraszanie, światło, temperatura. Konieczność dostosowania się do innych. Brak możliwości customizacji. Furniture Police.
Niezbędne wyposażenie
Własny kącik
Biurko
Duże i szerokie, zdolne pomieścić kilka monitorów, klawiaturę, dodatkowe wyposażenie.
Solidny blat – nie może się uginać pod ciężarem sprzętu i/lub developera.
Materiał, kolor, inne zalety są drugorzędne. Podstawki na monitory, szuflady na klawiaturę
to kwestie indywidualnych upodobań. Ostatnio: regulowana wysokość pozwalająca
na pracę na stojąco.
Biurko
Coś pod biurko
Na rzeczy prywatne: Dokumenty. Zupki instant. Napoje
energetyczne. Inne rzeczy. Kable. Bałagan z biurka.
Fotel
Najważniejszy mebel developera. Inwestycja na lata – nie warto oszczędzać. Zły fotel boli całe życie (oraz rzycie). Domagaj się dobrego fotela od pracodawcy. Jeśli sam się zatrudniasz, kup sobie dobry
fotel – będziesz sobie sam potem wdzięczny. Wygodny, regulowany, podparcie
lędźwiowe, mechanizm „synchro”. Bujanie i resor to nie wszystko – najgorszy
fotel to ma.
Fotel
Oświetlenie
Kwestia osobistych preferencji: Słoneczne Żarowe/halogenowe Świetlówki Bezpośrednie Rozproszone
Biura standardowe sprzyjają: świetlówkom i bezpośredniemu oświetleniu.
Biura własne pozwalają na lepsze rozwiązania.
Oświetlenie
Cała reszta
Słuchawki! Lodówka, ekspres do kawy, czajnik. Miejsca spotkań. Miejsca wypoczynku/rekreacji. Catering/restauracje/bary/jedzenie na
wynos. Klimatyzacja/wentylacja. Czystość i porządek. Tablice korkowe i suchościeralne.
Jak to wygląda w praktyce
Jak to wygląda w praktyce
Jak to wygląda w praktyce
Jak to wygląda w praktyce
Sprzęt i oprogramowanie
Narzędzia
Hardware
Sprzęt
Komputer
Microsoft Windows platformą dominującą w tworzeniu gier: Podstawowa platforma do tworzenia gier na
inne platformy. Najwięcej aplikacji i najlepsze (z
wyjątkami). Specjalistyczne aplikacje tylko na Windows.
Specjaliści czasem mogą próbować zaszyć się na OS X, ale ogólna gawiedź musi się pogodzić z Windows.
Komputer
Developer powinien mieć dobry, wydajny komputer.
Nie musi to być topowa maszyna, ale nie warto też za bardzo oszczędzać.
Liczy się wydajność deva, a nie jego gry (to jest osobny temat).
Cokolwiek, co podnosi znacząco komfort pracy jest dobrą inwestycją: dużo RAM, dyski SSD.
Komputer
Stacja robocza to nie wszystko – zespół wymaga więcej.
Serwery plików (NAS). Serwery niezbędnych usług (np.
systemów kontroli wersji). Szybka sieć do połączenia wszystkich
nawzajem i z serwerami. Internet.
Monitory
Jeden to za mało. Dwa to dobrze, a trzy też nieźle.
Wiele monitorów ułatwia pracę i podnosi jej efektywność.
Monitory LCD są tanie, warto zainwestować w minimum 2.
Typ, rozmiar, jakość – kwestia indywidualnych wyborów, najlepiej jednak 22-24”, IPS, czasem z pivotem (dla koderów).
Peryferia
Dobre myszki, wygodne klawiatury. I znów, średnia półka jest zupełnie wystarczająca.
Drukarka laserowa (kolor kosztuje). Fajnie, gdy ma A3.
Skaner. Dyski zewnętrzne na kopie zapasowe.
Sprzęt się psuje i starzeje
Ważna jest gwarancja i serwis: Markowe komputery są droższe, ale oferują
lepsze warunku i lepszy serwis (np. NBD). Jeśli mamy ważny projekt, warto mieć
komputer zapasowy. Kopie zapasowe (o tym dalej). Komputery trzeba upgradować – warto
to wkalkulować w rozwój projektu/firmy.
Software
Oprogramowanie
Oprogramowanie specjalistyczne
Każda dziedzina ma swoje. Często jest bardzo drogie i nie mamy
wyboru. Warto poznawać alternatywy. Nie każde studio/projekt może udźwignąć
koszty wymarzonego softu – dobrze znać te tańsze/darmowe.
Trzeba umieć „sprzedać” swoje potrzeby w tym zakresie – czasem inwestycja jest bardzo opłacalna.
Przeglądarka web
Internet Explorer jest najlepszą przeglądarką, aby ściągnąć inną przeglądarkę: Google Chrome Mozilla Firefox Safari Opera
To podstawowe narzędzie do uruchamiania rosnącej rzeszy aplikacji webowych.
Pakiet biurowy
Najlepszym rozwiązaniem jest Microsoft Office. MS Office produkuje „standardowe” dokumenty. Arkusz kalkulacyjny przydaje się każdemu:
programiście, artyście, projektantowi, producentowi.
Duże możliwości tworzenia pięknych dokumentów.
MS Visio – znakomity program do diagramów LibreOffice – też da radę, choć widać, że to
biedniejszy brat, ale za to za darmo.
Pakiet biurowy online
Można wybierać: Google Docs (Drive) Zoho Office Suite Office Web Apps
Tanio i każdy może je mieć. Dostępność z dowolnego miejsca. Możliwość łatwego dzielenia
dokumentów, kooperacji oraz publikowania.
Ciągle powiększane możliwości.
Google Apps
Aplikacje Google we własnej domenie: Poczta (z klientem web). Kalendarz. Komunikator w ramach domeny. Pakiet biurowy (Google Drive). Limit użytkowników: 10 w wersji darmowej.
Nie znam powodów, dla których nie powinno się z tej oferty skorzystać.
Programy narzędziowe
Idealny rozwiązaniem tej kwestii są pakiety narzędzi portable (przenośnych): Liberkey PortableApps.com Suite
Trywialna instalacja, same się aktualizują. Można je łatwo przenosić pomiędzy
komputerami. Można je mieć zawsze przy sobie (pendrive). Szeroki wachlarz narzędzi – bez problemu
załatwią 99,9% potrzeb.
Aplikacje portable
Systemy kontroli wersji
Niezbędne narzędzie w każdej pracy kreatywnej oraz pracy grupowej.
Zapewniają dostęp do poprzednich wersji naszych plików.
Oferują mechanizm wymiany zmienionych plików pomiędzy członkami zespołu.
Zapobiegają/wykrywają/niwelują konflikty w dostępie i modyfikacji tych samych plików.
I mnóstwo innych, o czym później.
Systemy kontroli wersji
Scentralizowane systemy kontroli wersji (uniwersalne): Subversion Perforce
Rozproszone systemy kontroli wersji, głównie do kodu: Git Mercurial
Narzędzia kopii zapasowych
Regularne wykonywania kopii w inne miejsce, choćby poprzez narzędzia standardowe.
Zautomatyzowane narzędzia do wykonywania kopii zapasowych (np. przyrostowych).
Systemu wykonywania kopii zapasowych w chmurę (np. polecam CrashPlan)
Systemy archiwizacji kopii roboczych.
System archiwizacji kopii roboczych Narzędzie, które „śledzi” wybrane pliki/folder
i wykrywa, gdy została zapisana nowa wersja pliku – wtedy robi jej kopię w innym miejscu.
Automatyczny system wersjonowania plików, na którymi pracujemy – możemy nawet mieć wszystkie poprzednie wersji.
Zawsze możemy wrócić do poprzedniej wersji i ocalić zepsuty pomysł, bo mamy dużo kopii zapasowych.
Polecane narzędzie – FileHamster.
Inne narzędzia
Kodeki – niezbędne do odtwarzania plików mediów oraz do tworzenia ich: K-Lite Codec Pack
Archiwizer – 7-Zip. Antywirus i Zapora. Szyfrowanie dysków (np. Truecrypt). Program katalogujący – jeśli robimy backupy
na fizyczne nośniki. Komunikatory – Skype i Miranda Dropbox, Google Drive, Box Net, etc.
I dobre warsztatowe praktyki
Procesy
Porządek w plikach
Podział dysku na partycje, C: nie wystarcza. Folder roboczy, nie desktop. Jasna i czytelna struktura folderów. System nazewnictwa plików (najlepiej stałej
długości) – znamy i przestrzegany. Konsekwencja w używaniu małych/wielkich
liter. Unikanie znaków diakrytycznych. Osobno źródła, osobno rezultaty.
Zarządzanie plikami
Wygodne narzędzia do operacji na plikach: Total Commander, Altap Salamander.
Umiejętność wykonywania operacji masowych na plikach: wybiórczego kasowania/ przenoszenia/ kopiowania dużych liczb plików.
Umiejętność masowego zmieniania nazw plików.
Praca z systemami kontroli wersji Systemy te zapewniają:
Synchronizację pomiędzy członkami zespołu. Kopie zapasowe. Dostęp do poprzednich wersji. Możliwość cofania zmian (bliskich i dalekich). Śledzenie zmian. Archiwizacja i tagowanie. Określanie autorstwa. Branch and merge.
Praca z systemami kontroli wersji Repozytorium (server) i kopia robocze
(klient) Pierwszy checkout, a potem:
Zmiany, a potem commit Update, oby otrzymać zmiany innych
I tak w kółko Tryby:
merge Lock
http://betterexplained.com/articles/a-visual-guide-to-version-control/
Kopie zapasowe
Sprzęt się psuje, ludzie popełniają pomyłki. Kopie zapasowe mają chronić przed
powyższym. Systemy automatycznej archiwizacji i
wersjonowania. Kopie do innych folderów, na inne dyski. Kopie off-site (wynoszone). Kopie w chmurę (cloud). Kopie proste i przyrostowe. Kopie kopii (np. kopie repozytorium)
Kopie zapasowe
Coraz więcej danych przechowujemy u innych: Pocztę elektroniczną. Dokumenty. Czasem kod i dane (zewnętrzne repozytoria).
Może zostać pozbawieni dostępu w dowolnym momencie.
Musimy robić sobie kopie zapasowe lokalnie, a te kopie gdzieś sobie dla bezpieczeństwa kopiować.
Archiwizacja
Nigdy nie wiadomo, kiedy wrócimy do rzeczy sprzed lat.
Dysponuję kopiami prac sprzed 20 lat. Należy stosować standardowe archiwizery. Pamiętajmy, że nośniki fizyczne mają
ograniczony czas życia. Redundancja pomaga w odzyskaniu
danych po latach. Odświeżanie jest dobrym sposobem na
utrzymanie dostępu do starych danych.
Automatyzacja
Wiele procesów wymaga wykonywania podobnych, albo takich samych ciągów czynności.
To doskonała właściwość do zastosowania automatyzacji.
Tworzenie kopii zapasowych/wersji jest dobrym przykładem procesu, który może być całkiem automatyczny – wystarczy dobrać narzędzie.
Automatyzacja
Często proces tworzenia czegoś nie dostarcza danych w odpowiednim formacie dla gry.
Trzeba je przetworzyć – wyeksportować, zaimportować, itp.
Czasem jest to kilka etapów, podczas których łatwo o pomyłkę.
Automatyzacja pozwala unikać pomyłek, oraz przyspieszyć proces.
Automatyzacja
Skrypty wiersza poleceń – pliki .BAT Łatwy język skryptowy do operacji na plikach. Możliwość przetwarzania plików poprzez
narzędzia dające się uruchamiać z parametrami wiersza poleceń.
Języki skryptowe – bardziej zaawansowane języki typu Perl czy Python, które pozwalają na wykonywanie bardziej skomplikowanych operacji na plikach czy wręcz na zawartych w nich danych.
Automatyzacja
Wykonywanie operacji na podstawie reguł: Narzędzie budujące – make Narzędzie budujące – Apache Ant
Przetwarzają dane wejściowe na podstawie raz zdefiniowanych reguł.
Pozwalają one na tworzenie różnych wynikowych danych na podstawie zadanych parametrów.
Głównie używane do tworzenia buildów – lokalnych lub globalnych.
Automatyzacja
Ciągła integracja i automatyczne tworzenie buildów dla zespołu wraz z ich dystrybucją: Instant builds Daily/nightly builds
Automatyczne testowanie: Testy jednostkowe Automatyczne smoke tests Testy wydajnościowe
Identyfikacja wersji
System nazewnictwa powinien pozwalać łatwo rozróżniać podobne dane np. do różnych języków.
Kolejne wersje gry powinny się różnić – proces tworzenia gry powinien automatycznie zmieniać jej oznaczenie wersji.
Warianty powinny być także jasno oznaczane – poprzez umieszczania danych wynikowy w różnych, odpowiednio oznaczonych folderach.
Dobrze oznaczone wersje łatwiej identyfikować (raporty), przekazywać (wysyłka) i archiwizować.
Zarządzanie dokumentami
Dokumenty współdzielone online rozwiązują wiele problemów: Zawsze jest aktualna wersja. Można współedytować w tym samym czasie. Widać kto i kiedy edytował. Widać co zostało zmienione. Jest historia zmian. Łatwo udostępnia się kolejnym uczestnikom. Daje się przeszukiwać.
Dokumenty online oferują ubogie formatowanie i możliwości, oraz nie wszystkie typy dokumentów.
Zarządzanie dokumentami
Dokumenty tworzone tradycyjnie można dzielić i zarządzać w systemie kontroli wersji: System z wyłącznością edycji zabezpiecza
przed konfliktami. Jest zawsze aktualizowany. Jest historia zmian. Jest dostęp dla każdego. Nie można go jednak przeszukiwać. Tylko jedna osoba może edytować dokument.
Baza wiedzy
Nie zawsze zbiór dokumentów w serwisie online czy repozytorium jest dobrym sposobem na dokumentowanie wiedzy.
Jest zapewne najprostszym do wypełnienia, ale nie do użytkowania.
Wiedza na temat gry czy procesów produkcyjnych może być lepiej przedstawiona w formie wiki.
Wiki jest trudniejsze w utrzymaniu (szczególnie oparte o mark up) i ma ograniczone (znów) możliwości formatowania.
Zarządzanie procesami etapowymi Wiele procesów produkcyjnych w grach jest
wieloetapowych, gdzie każdy etap wykonywany jest przez różnych ludzi.
Musi istnieć dobry mechanizm przekazywania sobie prac pomiędzy etapami – np. poprzez umieszczanie ich w odpowiednich folderach repozytorium.
Kolejni wykonawcy muszą wiedzieć, że czeka ich nowa praca – mogą sprawdzać foldery, ale też można zorganizować jakiś system informowania się o zakończeniu etapu.
Zarządzanie procesami etapowymi Można trzymać wspólny arkusz kalkulacyjny, w
którym oznacza się statusy odpowiednich obiektów.
Można też mieć tablicę z karteczkami, które wędrują do odpowiednich przedziałów informując kolejnych wykonawców, że czeka ich praca.
Czasem owa praca to akceptacja. Można zrealizować tablicę w formie
elektronicznej, choćby w systemie Trello.com Warto poczytać o metodyce Kanban.
Zarządzanie swoim czasem
Pamięć jest zawodna – lepiej jakoś zapisywać, co chcemy robić.
Najprostsze są choćby listy to-do. Większość z nich to aplikacje webowe,
dostępne z każdej przeglądarki i aplikacji mobilnych.
Nierzadko mogą pomóc nas w zarządzaniu małym i niemałym zespołem.
Zarządzanie swoim czasem
trello.com
todoist.com
basecamp.com
teuxdeux.com
Praca efektywna
Prokrastynacja Stwierdzenie
zjawiska Walka z nim
Flow Walka z rutyną,
znudzeniem i wypaleniem.
Zbieranie danych
Zbyt wiele rzeczy ocenianych jest „na czuja” i na podstawie tych obserwacji wyciągane są wnioski i wprowadzane zmiany.
Często obserwacje są błędne, obarczone błędami psychologicznymi.
Skuteczność wprowadzonych na skutek błędnych zmian oceniania jest ponownie błędnymi obserwacjami.
Problem pogłębia się zamiast znikać.
Zbieranie danych
Znacznie lepszy sposobem jest zbierania twardych danych, opartych na obiektywnych pomiarach (tzw. metrics).
Obiektywne dane nie oznaczają, że wyciągniemy właściwe wnioski, ale możemy ponownie zweryfikować rezultat w oparciu o obiektywne dane.
Obróbka statystyczna może być trudna, ale tu możemy poprosić o pomoc.
Zbieranie danych
Metrics nie muszą dotyczyć gry, ale także mogą dotyczyć procesów produkcji.
Możliwość śledzenia czasów produkcji podobnych elementów umożliwia obiektywne stwierdzenie wpływu udoskonaleń procesu. Można też wykryć zjawiska, które wpływają na zakłócanie procesu, czy potencjalne wąskie gardła.
Autopromocja i nauka
Pokazujmy innym w zespole, co tam robimy: Róbmy snapshoty. Pokazujmy je i dyskutujmy. Chwalmy się i pobudzajmy zdrową rywalizację. Mentorujmy młodszym
Uczmy się od innych w zespole: Róbmy regularne przeglądy naszych prac. Patrzmy co ktoś zrobił i jak. Pytajmy się i uczmy od starszych.
Dokumentowanie projektu
Chodzi o dokumentowanie tego, co się w projekcie działo.
Zapamiętywanie zadań z systemu zarządzania nimi (fajna historia zadań).
Robienie screenshotów i filmików regularnie co jakiś interwał, aby móc odtworzyć proces przemiany gry.
Archiwizacja co jakiś czas gry w jej aktualnym stanie – znów fajna możliwość prześledzenia zmian.
Zdjęcia z pracy i zabawy – fajnie do nich wrócić po latach.
Co generalnie warto znać
Wiedza
Wiedza
Stale pogłębiana wiedza na temat specyficznych narzędzi i procesów w naszej dziedzinie.
Zapoznawanie się z nowymi/innymi narzędziami, nawet jeśli ich nie używamy w danym momencie.
Podglądanie pracy innych, wymiana doświadczeń.
Gromadzenie referencji, które mogą się na przydać w pracy, czy współpracy z innymi.
Wiedza
Wyrażenia regularne – nieocenione w zamianie nazwa plików, wyszukiwaniu plików czy bardziej skomplikowanych operacjach na tekstach.
Składnie skryptów .BAT Co to jest CSV, XML oraz JSON i dlaczego w tym
ostatnim warto przesyłać dane. Co to są bazy NoSQL i dlaczego fajnie w nich
trzymać dane do analiz (metrics). Fajnie wiedzieć coś o metodykach zwinnych
(agile). Jak zamieniać nasze dokumenty na PDFy!