Dobre Praktyki Programowania Odbierają Smak życia

Dobre praktyki programowania odbierają smak życia

Pamiętasz jak napisałeś pierwszy Hello World? Ja jestem młody i pamiętam. Myślałem, że mogę góry przenosić tworzyć kolejne systemy operacyjne, tworzyć gry konkurujące z Quake 3 lub nawet lepiej. Byłem potężny, mogłem ‚próbować’ stworzyć wszystko. Następnie odwiedza się parę blogasków programistycznych i innych stron poświęconych programowaniu, i dowiaduje się, że istnieje coś takiego jak:

Czytaj resztę...
Recenzja Książki: Rozmowa Rektrutacyjna Dla Programistów – Przewodnik Do Sukcesu

Recenzja książki: Rozmowa Rektrutacyjna dla programistów – Przewodnik do sukcesu

Krótko: Jeżeli planujesz dostać się do Google, Amazon, Microsoft, Facebook Yahoo, Apple jako programista, to kup tę książkę. W innym przypadku odpuść sobie.

Trochę dłusza, ale nadal krótka wersja

Tytuł oryginału: Cracking the Coding Interview: 150 Programming Questions and Solutions.
Autorka: Gayle Laakmann MacDowell.
Wydawnictwo Helion.pl.
ISBN: 978-83-246-9332-0

Czytaj resztę...
Ustaw Visual Studio Code Jako Domyślny Edytor Oraz Diff Tool

Ustaw Visual Studio Code jako domyślny edytor oraz diff tool

Jeżeli korzystasz z Visual Studio Code to też duże prawdopodobieństwo, że korzystasz także z Gita jako system kontroli wersji.

Według tych porad możesz ustawić Visual Studio Code jako domyślny edytor dla Gita oraz jako domyślny difftool czyli narzędzie pokazujące zmiany pomiędzy dwoma commitami.

Aby ustawić Visual Studio Code jako domyślny edytor to wykonaj taką komendę w konsoli

git config --global core.editor "code --wait"

Czytaj resztę...
Visual Studio Code – Synchronizacja Ustawień Między Komputerami

Visual Studio Code – Synchronizacja ustawień między komputerami

Korzystasz z wielu komputerów lub wielu maszyn wirtualnych? Lubisz mieć zawsze te same:

  • skróty klawiaturowe
  • snippety
  • ustawienia edytora
  • zainstalowane rozszerzenia

Jeżeli tak, to mam coś dla ciebie. Visual Studio Code Settings Sync rozszerzenie do Visual Studio Code, które korzystając z twojego konta na GitHub synchronizuje ustawienia pomiędzy komputera.

Czytaj resztę...
Benchmark-test Algorytmu LFU O(1) Vs. O(n)

Benchmark-test algorytmu LFU O(1) vs. O(n)

Komentarz Michała sprowokował ten wpis, aby porównać dwie implementacje LFU, jedną bazującą na dwóch słownikach (o złożoności obliczeniowej O(n)) oraz opartą na listach dwukierunkowych i słowniku (o złożoności obliczeniowej O(1)).

Zasady benchmarku

Czytaj resztę...
Algorytm LFU Dla Pamięci Cache – Rozwiązanie W Stałym Czasie – O(1)

Algorytm LFU dla pamięci cache – rozwiązanie w stałym czasie – O(1)

Z nieistniejącego jeszcze cyklu: pytania algorytmiczne oraz struktury danych u gigantów doliny krzemowej: Google, Amazon, Microsoft etc.

Pamięć podręczna cache to pamięć o bardzo szybkim dostępie, której jest bardzo mało. Tworząc procesor twórcy implementują jeden z algorytmów do zarządzania pamięcią, który decyduje, który element z pamięci ma wylecieć, aby utworzyć miejsce dla nowego elementu.

Wikipedia podaje kilkanaście różnych podejść w celu rozwiązania tego problemu. Miedzy innymi jest:

  • Usuwanie najdawniej użytego elementu – Least Recently Used (LRU)
  • Usuwanie ostatnio użytego elementu – Most Recently Used (MRU)
  • i bohater dzisiejszego odcinka – Usuwanie najrzadziej używanego elementu – Least Frequently Used (LFU)

Tych co nie wiedzą czym jest notacja Dużego-O, przypomnienie: O(x) określa jak rozwiązanie problemu w czasie, będzie wzrastać razem z zwiększeniem problemu. O(n) wzrost liniowy (szukanie elementu w tablicy), O(n^2) wzrost kwadratowy (sortowanie bąbelkowe), O(lg n) wzrost logarytmiczny (wyszukiwanie binarne), O(1) czas stały (dostęp do elementu w tablicy).

Jeżeli masz trudność z zdecydowaniem się jaki algorytm lub struktura danych ma jaką złożoność obliczeniową to udaj się na Big O Cheat Sheet.

Algorytmu do obsługi pamięci cache muszą być dwa.

  • wstawianie wartości metoda set(key, value): void
  • wyciąganie wartości metoda get(key): value

(po dwukropku informacja o wartości zwracanej przez funkcję).

Prostym rozwiązaniem, nie optymalnym jest wykorzystanie dwóch Hash Table, więc .NET’owych Dictionary.

Pierwszy Dictionary przechowuje wartości pod kluczem Dictionary<string, TValue>, drugi Dictionary przechowuje jak często dany klucz jest wykorzystany czyli Dictionary<string, int>.

Metoda get(key) zwiększa licznik użycia dla danego klucza oraz zwraca wartość przechowywaną w pierwszym Dictionary. Obie te operacje są operacjami O(1) więc wyjściowa złożoność get(key) jest równa O(1). Połowa za nami.

Druga metoda set(key, value), musi znaleźć najmniej używany klucz i go w to miejsce podmienić. Niestety operacja szukania najmniej używanego klucza „kosztuje nas” O(n), więc cała metoda kosztuje nas O(n).

Jak zoptymalizować to rozwiązanie? Do czasu O(1)

Czytaj resztę...
Visual Studio 1.8 Tryb Zen, Wyjście Na Gorąco Oraz łatwiejsza Edycja Ustawień Aplikacji.

Visual Studio 1.8 Tryb Zen, Wyjście na gorąco oraz łatwiejsza edycja ustawień aplikacji.

Nowy miesiąc duże zmiany w Visual Studio Code, bo zbliża się okres świąteczny, więc trzeba było zrobić nowych funkcjonaliści „na zapas”. Styczeń powinien być chudy jeżeli chodzi o usprawnienia mojego ulubionego edytora.

Pełna wersja angielska jest dostępna pod grudniowym adresem. A najlepsze kąski po polsku znajdziesz poniżej.

Hot Exit

Od teraz Visual Studio Code nie wyświetli takiego komunikatu przy wychodzeniu z programu (przez X w górnym prawym rogu):

unsaved_file

Nie zapisane zmiany będą trzymane w pamięci podręcznej aplikacji. W momencie gdy wrócisz z powrotem do twojego projektu, wszystkie zmiany bądą zachowane, czekając na twój zapis.

Funkcjonalność można wyłączyć w ustawieniach programu (File->Preferences->User Settings) ustawiając files.hotExit na wartość false. Domyślnie Hot Exit jest włączony.

To także oznacza, że przypadku kiedy Visual Studio Code przestanie nagle działać, to przywróci dane z swojego backupu, nie zależnie czy Hot Exit jest włączony czy nie.

Zmiany w Activity Bar

Activity Bar to nazwa dla tego paska narzędziowego:

activityBar

Czytaj resztę...