So you want to be a professional

Co wiesz po tych zajęciach?

  • Masz jakieś pojęcie o HTTP
  • Masz jakieś pojęcie o pisaniu
    aplikacji WWW

Co wiecie

Czas połowicznego rozpadu wiedzy

Dwie nieoczywiste rzeczy

Your job is not to write code

Your job is not to write code, your job is not to test, your job is not to write tests. Your job is to ship products... You're trying not to write code. If we could make all this money by not writing code we'd do it.

- Michael A. Cusumano: "Microsoft Secrets"

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.

Antoine de Saint-Exupéry 

Warsztat

Warsztat pracy programisty jest bardzo ważny.

Na warsztat składa się: 

  • Znajomość narzędzi 
  • Znajomość dobrych praktyk 
  • Dobre nawyki

Umiejętności miękkie

Są bardzo ważne 

Oprócz posiadania wiedzy, musicie: 

  • Umieć przekazać ją innym;
  • Przekonać innych, że ją macie;
  • Umieć przekonać innych do swoich racji.

Wiedza teoretyczna

  • Złożoność algorytmów
  • Podstawowe algorytmy i struktury danych
  • Zamiana zużycia CPU na zużycie pamięci
  • Algorytmy rozproszone 
  • Podstawy kryptografii
  • Jak działa System Operacyjny

Wiedza "Praktyczna" 

  • Wzorce projektowe
  • Jakie założenia można przyjąć przy budowie systemów rozproszonych 
  • Jak zaprojektować system 
  • Jak wdrożyć i zabezpieczyć system

Warsztat

  • Learn English
  • System kontroli wersji
  • Testowanie kodu
  • Systemy zadań (issue trackery)

Mniej ważne

  • (Automatyczne)? wdrażanie oprogramowania
  • Praca w zespole Zwinnym
  • Wirtualizacja / konteneryzacja

Narzędzia

  • Praca w powłoce (nie zawsze macie GUI)
  • Znajmość Waszego ulbionego OS
  • Umiejętność postawienia wirtualnej maszyny
  • Budowanie systemu z konsoli
  • Znajomość Waszego systemu tworzenia
    dokumentacji 

Dobry osąd

  • Pisanie kodu, który jest czytelny (samodokumentujący się);
  • Wiedza kiedy można napisać kod nieczytelny;
  • Co dokumentować; 
  • Jak dokumentwać; 
  • Kiedy można użyć zewnętrznych bibliotek, a kiedy nie warto. 

Warsztat/miękkie umiejętności

  • Czytanie kodu 
  • Rozumienie kodu który przyszedł bez dokumentacji
  • Robienie przeglądów kodu 
  • Dyskutowanie o kodzie 
  • Przekonywanie innych do swoich racji

Skąd zdobyć wiedzę

Wiedza teoretyczna

Można ją zdobyć poza uczelnią, 

Są dostępne fajne kursy

  • https://www.coursera.org
  • https://www.udacity.com/
  • http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/

Część kursów jest płatna, jest sporo bardzo dobrych darmowych materiałów. 

Wikipedia ma całkiem rozsądne podsumowanie wielu algorytmów: 

  • https://en.wikipedia.org/wiki/Category:Randomized_algorithms
  • https://en.wikipedia.org/wiki/Category:Algorithms

 

Warsztat

Można go poznać tylko praktycznie

  • Trzeba napisać samemu projekt który:
  • Ma kilka tysięcy linii (to nie jest wiele!) 
  • Robi coś sensownego
  • Ma użytkowników 
  • Umiejętności pracy zespołowej należy nauczyć się w zespole
  • Może być projekt open-source

Źrodła 

Ci dwaj założyli StackOverflow:

http://www.joelonsoftware.com/

http://blog.codinghorror.com/

Bardzo techniczne blogi: 

https://bitquabit.com/

http://danluu.com/

Uwaga: blogi, książki, prace naukowe, wykłady zawierają błędy i wszystkie należy czytać krytycznie. 

Książki

Robert L. Read: How to be a Programmer: A Short,
Comprehensive, and Personal Summary

Frederick Brooks: The Mythical Man Month

Gang of Four: Design Patterns

pro-programmer

By Jacek Bzdak

pro-programmer

  • 1,348