#main, 11 lipca 2016

By 11 lipca 2016#main

W dzisiejszym #main wyniki ostatniej ankiety (oraz jej kontynuacja!), parę słów o twórcy C++ i kolejne newsy/ciekawostki ze świata oraz ważną zapowiedź. Zachęcamy do lektury!

Uwaga! Z uwagi na sezon wakacyjny a także inne obowiązki w tym czasie, do końca września seria #main będzie się pojawiać z mniejszą częstotliwością – raz na dwa tygodnie, a nie jak wcześniej raz na tydzień. Mamy nadzieję, że zrozumiesz, i że pomoże nam to uczynić blog jeszcze ciekawszym na przyszłość!

Cykl #main to punkt początkowy Waszego tygodnia,  prasówka, w której zbieramy ciekawe linki, dzielimy się informacjami, a także podsyłamy programistyczne zadanie. Mamy nadzieję, że w ten sposób umilimy Wam poniedziałkowy powrót do rzeczywistości ;)
Obrazek w nagłówku pochodzi z serwisu freepik.com

Podsumowanie ankiety z zeszłego tygodnia

wyniki ankiety.001

Faworytem ankiety okazały się serie związane z konkretnymi projektami – w dzisiejszym #mainie kolejna związana z tym ankieta – jakiego rodzaju projekt chciałabyś zobaczyć w najbliższym czasie opisany na kobietydokodu.pl ? Oczywiście nie porzucamy innych serii, ale w miarę możliwości postaramy się skupić na preferowanych opcjach ;)

Udział IntelliJ rośnie!

Przez długi czas w kwestii wyboru IDE do Javy panowała właściwie hegemonia Eclipse – nie było to idealne środowisko, ale konkurenci byli jeszcze gorsi ;) Odkąd pojawił się IntelliJ IDEA obserwujemy coraz większą migrację i wyrównywanie się udziału obu IDE – wg jednej z ostatnich ankiet proporcja ta wynosi już 48% dla Eclipse do 44% dla IntelliJ! Na szczęście konkurencja ta ma wiele korzyści – oba produkty poprzez walkę o ‚udziały’ stają się lepsze, bardziej uniwersalne i przyjaźniejsze dla użytkownika – oby tak dalej!

Wyniki ankiety na blogu baeldung.com

Google prawdę Ci powie

Google odświeżyło stronę ‚my activity’ – znajdziesz tam nie tylko informacje o swoich wyszukiwaniach, ale też ogólnie o Twojej aktywności w sieci. Warto zerknąć, co Google o Tobie wie, i być może zastanowić się czy nie warto pomyśleć o większej prywatności na przyszłość.

Artykuł w serwisie techviral.com

Bezpłatne (legalne) ebooki i książki

Książki nadal są i pewnie przez długi czas będą jednym z ważniejszych źródeł wiedzy i pomocy w nauce. Portal TradePub to system, w którym możemy otrzymać kompletne, pełnowartościowe pozycje w zamian za pozostawienie swoich danych kontaktowych i informacji o zatrudnieniu – dane te są używane do statystyk ale także do prezentowania celowanych ofert. Mimo wszystko, nie jest to wysoka cena za dobrej jakości materiały!

Portal Trade Pub

O tym, jak wygląda studio i jak powstają gry

Nasze rodzime studio CDPROJECT RED (twórcy m.in. serii Wiedźmin) we współpracy z Jackiem Gadzinowskim uchyliło rąbka tajemnicy i pokazało jak wygląda ich miejsce pracy, oraz przede wszystkim jak powstają popularne na całym świecie gry. Oczywiście jest to wideo promocyjne firmy, ale świetnie wykonane i przede wszystkim – ciekawe! Oby więcej takich!

Film przygotowany przez CDPROJECT RED

Odpowiedź na pytanie z zeszłego tygodnia

A pytaliśmy o to: jak zaprojektowałabyś klasy do gry w warcaby?

Tego rodzaju pytanie możesz trafić na rekrutacji do większych firm, i nie ma na nie jednej, poprawnej odpowiedzi (o ile rekruter się nie uprze na jakąś konkretną wersję, ale nie o tym mówimy…). Poniższy model jest najprostszą implementacją:

chekcers_simpleW tym wariancie mamy klasę, która reprezentuje pionek oraz taką, która reprezentuje grę. Plansza jest tutaj reprezentowana jako tablica 8×8, a pola są reprezentowane liczbą (np. w pierwszym rzędzie pola mają numery 1-8, w drugim 9-16 itd – jeśli takie pytanie padło podczas rekrutacji, warto powiedzieć jak numerujesz pola, żeby nie było wątpliwości). Klasa gry ma dwie metody – jedną do poruszania pionkami, drugą do sprawdzenia czy gra się już zakończyła. Pionek ma jedną metodę, która pozwala uczynić z niego ‚króla’.

Ta implementacja ma jednak kilka problemów: teoretycznie ten sam obiekt pionka może się znajdować na kilku polach w tablicy (implementacja musi pilnować, żeby tak się nie stało), reprezentacja tablicowa nie jest też najwydajniejsza w zakresie pamięci.

Alternatywnym podejściem jest przechowywanie pozycji pionków w postaci zbioru (implementacja Set w Javie, alternatywnie mapy pozycja -> pionek), gdzie pozycję pionka przechowujemy w obiekcie typu PiecePosition. W tym wypadku metody by się nie zmieniły.

Jeszcze innym podejściem jest przeniesienie pozycji do klasy Piece – w tym wypadku metoda movePiece może zostać przeniesiona także do tej klasy (ale nie musi), możemy też mieć metodę movePiece w głównej klasie gry (odpowiadającą za sprawdzenie czy ruch jest możliwy, czy pionek nie bije, czy nie zamienia się w króla itp), która wywołuje metodę moveTo w klasie Piece (ta metoda jedynie zmieniałaby zapisaną pozycje pionka).

W każdej z opcji potrzebne są oczywiście dodatkowe metody pomocnicze, które pozwolą nam sprawdzić czy pionek może zostać przesunięty na dane pole, czy nie bije innego pionka, jaki jest obecny wynik, usuwający ‚zbity’ pionek z planszy itp.

Jeśli tego rodzaju pytanie trafi Ci się na rekrutacji, pamiętaj że każda opcja jest prawidłowa, o ile spełnia warunki narzucone przez rekrutera (może on zastrzec, że rozwiązanie np. ‚nie może używać tablic’).

Jak można tworzyć beany w Springu?

Oczywiście zachęcamy do samodzielnego odpowiedzenia na pytanie. Za tydzień nasza odpowiedź.

Więcej pytań technicznych z poprzednich mainów wraz z linkami do odpowiedzi znajdziesz tutaj! 

Bjarne Stroustrup

Język C++ być może nie każdy zna, ale na pewno o nim słyszał bądź kiedyś widział. Był on dość przełomowy jeśli chodzi o podejście do tworzenia aplikacji – podczas gdy język C był projektowany i rozwijany ‚równolegle’ do sprzętu i urządzeń, w języku C++ górę wzięło podejście biznesowe do tworzenia aplikacji, obiektowość itp. Sam język jest dziełem jednego człowieka – Bjarna Stroustrup.

Bjarne pochodzi z Danii, gdzie uzyskał tytuł magistra, po czym obronił doktorat na uniwersytecie Cambridge w 1979 roku. Podczas pracy doktorskiej korzystał z C, na podstawie którego stworzył (jak sam to nazwał) „C z klasami”. Była to podstawa do języka C++, który stał się standardem w branży na długie lata (nadal nim jest w niektórych zastosowaniach). Bjarne jest odpowiedzialny za pierwszą specyfikację, określenie i definicje kryteriów, które C++ musiał spełniać, pierwszą implementację oraz doprowadzenie do włączenia rozszerzeń w poczet języka przez komitet standaryzacyjny C++. Stworzył także podręcznik/dokumentację „The C++ Programming reference”.

W późniejszych latach kierował m.in. działem rozwoju projektów wielkoskalowych w labolatorium AT&T Bell, uczestniczył także w pracach organizacji IEEE. Posiada tytuł profesora oraz tytuły honorowe kilku uniwersytetów. Aktualnie kieruje działem technicznym w banku Morgan Stanley oraz gościnnie udziela wykładów na Uniwersytecie Columbia.

Notka biograficzna w Wikipedii
Prywatna strona

Pytanie na ten tydzień

Jakiego typu projekt chciałabyś zobaczyć na kobietydokodu.pl jako kolejną serię?
  • Add your answer

* seria oczywiście będzie kontynuowana i dokończona - niestety na tą chwilę mamy duże problemy z wolnym czasem, przez co skupiamy się na innych seriach

  •  
  •  
  •  
  •  
  •  
  • Wojtek Nowaczyk

    Super! Bardzo przydatny newsletter :)

  • Piotr Aleksander Chmielowski

    Odnośnie gry w Warcaby: ja bym stworzył osobną klasę: Board, która by wewnątrz zawierała tablicę (lub jakąkolwiek inną implementację). Dzięki temu obiekt klasy Piece nie musiałby wiedzieć nic o tym w jaki sposób pozycja pionka jest przechowywana.
    Dodatkowo u mnie Piece byłby interfejsem lub klasą abstrakcyjną, po której dziedziczyłyby klasy Man i King – myślę, że to ładniejsze rozwiązanie niż stosowanie enuma.

    Musicie więcej pisać w #mainie o architekturze oprogramowania i dzieleniu kodu na klasy bo to strasznie ciekawy temat! :)

    • Temat równie ciekawy co płynny – ciężko o jedną dobrą odpowiedź ;) W przedstawionym przykładzie rolę klasy Board pełni Game – można rozdzielić je jeszcze bardziej tak jak sugerujesz, ale nie daje to jawnych korzyści.
      Co do pionka – problemem staje się ‚transformacja’ Man w King – usuwamy jeden obiekt i zastępujemy go drugim zasadniczo. Pytanie czy rodzaj pionka jest informacją (tak by się działo, jeśli informacje o położeniu przechowujemy ‚poza’ klasą pionka i sam ruch wykonywany jest też w innej klasie) czy też jego rolą (w tym wypadku możemy ruch zaimplementować przez polimorfizm, ale pionek musi wiedzieć o planszy i swojej pozycji na niej). Innymi słowy jak to z architekturą, rozwiązań jest milion, każde poprawne na swój sposób i zależy od sytuacji i interpretacji ;)