Definicja testów jednostkowych nie jest jednoznaczna i moim zdaniem zmieniała się przez lata. Jednostkę (“unit”) można w różny sposób interpretować. Wiele programistów uważa, że należy testować wyłącznie poszczególne klasy. Dobrą stroną takiego podejścia jest fakt, że jak test zakończy się niepowodzeniem, wtedy od razu wiadomo gdzie szukać przyczyny. Przy dobrym zestawie testów, debugger przestaje być potrzebny. Osobiście preferuje zupełnie inne podejście. W aplikacjach biznesowych, moim zdaniem aż t...
Sztuka programowania 2734 dni, 15 godzin, 53 minuty temu 262 źrodło rozwiń
Naturalnym krokiem po omówieniu testów parametryzowanych jest przejście do testów kombinatorycznych i sekwencyjnych. Do dyspozycji mamy dwa atrybuty NUnita — [Combinatorial] oraz [Sequential]. Sprawa jest bardzo prosta, więc zrozumienie działania tych dwóch funkcjonalności nie przysporzy żadnych problemów.
Sztuka programowania 2734 dni, 15 godzin, 53 minuty temu 169 źrodło rozwiń
Rynek IT wyglądał zupełnie inaczej gdy w 2008 roku podjąłem moją pierwszą, poważną pracę w branży. Nie wiele wtedy się mówiło o czymś takim jak frontend, czy backend, a i tytuły stanowisk nazywały się inaczej - tak jakoś bardziej polsko. W ogłoszeniach najczęściej szukano programistów C++ i JAVY, a także webmasterów PHP. Tych z pierwszej grupy szuka się nadal, aczkolwiek teraz mamy ładniejsze nazwy stanowisk. Spore zmiany zaszły za to w świecie webmasterów....
Sztuka programowania 2744 dni, 13 godzin, 21 minut temu 520 źrodło rozwiń
Borys najlepiej dryblował, Cybor kręcił najlepsze rogale, było kilku kajtków, którzy robili 200 kapek. Alternatywna recenzja książki Amy Hoy. Czyli rzecz o dostarczaniu.
Sztuka programowania 2744 dni, 13 godzin, 21 minut temu 249 źrodło rozwiń
Zapewne widzieliście już prezentację Erika Meijera z Reaktor Dev Day 2014. Prelegent postanowił rozprawić się z całą tą ściemą, jaką jest Agile, a jako jej alternatywę zaprezentował podejście „One Hacker Way” – nieskomplikowane, bo sprowadzającą się prostu do … pisania kodu. Ilu z Was łyknęło tę nowinkę niczym młody pelikan swoją pierwszą sardynkę (rym niezamierzony)? Jeśli to kupiliście, to muszę Was zmartwić – zostaliście zhakowani.
Sztuka programowania 2749 dni, 11 godzin, 33 minuty temu 388 źrodło rozwiń
Agile Principles, Patterns, and Practices in C# by Uncle Bob is the best book about modern Software Development I have ever read. First section (chapters 1-6) is an Overview of Agile, Extreme Programming (XP), and TDD. Very good introduction to modern software development. Chapter 6. shows all these techniques by example, by creating “The Bowling Game” application...
Sztuka programowania 2749 dni, 11 godzin, 33 minuty temu 245 źrodło rozwiń
Będąc programistą, bardzo często mam styczność z kodem innych. Jest to naturalne, bo nawet jeśli nie pracuję w danym momencie zespołowo, to i tak mogę wykorzystywać rozwiązania stworzone przez moich współpracowników, bądź też po prostu takie, które znalazłem w sieci. W wielu przypadkach są to dobre i przemyślane rozwiązania, ale czasem zdarzają się takie, które najchętniej od razu bym zrefaktoryzował.
Sztuka programowania 2750 dni, 10 godzin, 13 minut temu 656 źrodło rozwiń
ASP. NET.NET, asp, datagrid, web formsprzemek Niedawno miałem zadanie napisania szybko aplikacji w ASP .NET Web Forms, w której miała być zaimplementowana funkcjonalność edycji wielu wierszy na raz w kontrolce DataGrid. Niestety standardowe podejście do tematu powoduje, że natrafiamy na problem. Problem polega na tym, że standardowo można edytować tylko jeden wiersz w kontrolce DataGrid. Poniżej przykład standardowego kodu, który umożliwia wyświetlenie danych oraz ich edycje: Poniżej to c...
Sztuka programowania 2750 dni, 10 godzin, 13 minut temu 129 źrodło rozwiń
„Linq to Object” jest bardzo dobrze wyposażonym mechanizmem. Posiada wiele metod, które generalnie pokrywają 70% potrzeb podczas projektowania aplikacji. Jednak czasami potrzebujemy tych 30%, których nie ma. Poniżej pokazuje jak napisać własną metodę rozszerzeń (extension method) do Linq To Object na przykładzie autorskiej metody SplitIntoParts. Aby napisać dobrą metodę rozszerzeń należy spełnić kilka warunków...
Sztuka programowania 2760 dni, 3 godziny, 13 minut temu 182 źrodło rozwiń
“Learn at least one new language every year” – The Pragmatic Programmer book. Late 2014 I have decided to learn F#. This is my first attempt at String Calculator Kata in F#.
Sztuka programowania 2760 dni, 3 godziny, 13 minut temu 153 źrodło rozwiń
Przy okazji codziennej prasówki natknąłem się na ten artykuł na temat wydajności pętli for w JavaScript'cie dla różnych przeglądarek. W skrócie chodzi o to czy powinniśmy pisać pętlą for tak...
Sztuka programowania 2762 dni, 10 godzin, 8 minut temu 436 źrodło rozwiń
One can ask why we need to think of CR practices at all. Review of code written by another team member can be done without any preparation or introduction. It is true, but there are some aspects that we need to think of. In my opinion, we especially need to support the following values:Quality – Code Review should be done in the same way, no matter if you are hurrying, bored or it’s your 3rd hour of doing CR,Motivation – team has to see value in Code Review, and this value shouldn’t be lost because of ne...
Sztuka programowania 2762 dni, 10 godzin, 8 minut temu 187 źrodło rozwiń
C#.NET, c#, CurrentCulture, globalization, InvariantCulture, stringprzemek Wiele razy stykam się z sytuacją, że gdy ReSharper podpowiada programistom, że należy użyć w metodzie ToString parametru CultureInfo, każdy wstawia tam najbezpieczniejsza wersję czyli InvariantCulture. A może czasem warto wstawić coś innego? Poniżej opisuje, czym jest CultureInfo i jak go używać. CultureInfo Klasa CultureInfo jest używana między innymi wtedy gdy chcemy rozwiązać problem używania odpowiednich separatorów...
Sztuka programowania 2769 dni, 4 godziny, 38 minut temu 301 źrodło rozwiń
Nadszedł czas na kolejną porcję przykładów z wykorzystaniem ThreadSafe collection. W tym poscie po krótce opisze do czego i w jaki sposób używać kolekcji ConcurrentStack
Sztuka programowania 2769 dni, 17 godzin, 28 minut temu 212 źrodło rozwiń
Od razu po Nowym Roku wracamy z mocnym uderzeniem: na warsztacie tym razem znalazło się programowanie funkcyjne! Mój gość to Michał Łusiak – programista, prelegent, blogger. Możecie go znaleźć również na Twitterze: @mlusiak. W temacie programowania funkcyjnego rozprawiamy o tym po co odchodzić od “standardowego” obiektowego podejścia, jakimi językami warto się zainteresować a nawet: jak zacząć z F# nie mając możliwości jego komercyjnego zastos...
Sztuka programowania 2769 dni, 17 godzin, 28 minut temu 240 źrodło rozwiń
W C# możemy tworzyć własne konwersji obiektów. Przy użyciu słów kluczowych Explicit i Implicit możemy przeprowadzić konwersję typów referencyjnych na wartościowe i odwrotnie. Na początek podstawy. Konwersje Implicit nie wymagają żadnych dodatkowych słów kluczowych, ponieważ kompilator dopuszcza tylko takie konwersje, które są bezpieczne (czyli na przykład takich, w których nie ma utraty precyzji). Przykład poniżej: int i = 1234; double d = i;...
Sztuka programowania 2769 dni, 17 godzin, 28 minut temu 193 źrodło rozwiń
Do dzisiejszego wpisu zainspirowała mnie aplikacja, którą współtworzymy z Tymkiem Kęstowiczem. Potrzebowaliśmy połączyć naszą aplikację napisaną w MVC z bazą danych (tu wybór padł na MySQL). Zdecydowanie chcieliśmy uniknąć strzelania z armaty ...
Sztuka programowania 2771 dni, 1 godzinę, 51 minut temu 278 źrodło rozwiń
Programowanie nigdy nie było łatwe i szybkie, ale największe wyzwania stoją przed tymi, którzy chcą stworzyć prosty, czytelny, elastyczny i wydajny kod. Czy da się zawsze ładnie połączyć wszystkie elementy tej układanki? Niestety nie, ale to nie oznacza, że powinniśmy łatwo się poddawać.
Sztuka programowania 2772 dni, 13 godzin, 4 minuty temu 509 źrodło rozwiń
O korzyściach z modyfikatora sealed, od strony projektowej pisałem już tutaj. Dzisiaj postanowiłem jednak napisać prosty program, który pokaże nam czy faktycznie są jakieś różnice wydajnościowe. Oczywiście jest to raczej ciekawostka dla ludzi zajmujących się c# internals. Jeśli zależy nam na optymalizacji, zawsze zaczynajmy od ulepszenia samego algorytmu (zmniejszenia jego złożoności), a w ostateczności sięgajmy po mikro-optymalizacje. Warto stosować wspominane wskazówki, ale ze względu na dobre praktyk...
Sztuka programowania 2774 dni, 8 godzin, 37 minut temu 242 źrodło rozwiń
W moich zamierzeniach ten temat miał być omówiony w jednej części, ale duża ilość komentarzy, pytań i uwag spowodowała, że powstała część druga. Istnienie drugiej (nieplanowanej) części posta mogłoby sugerować, że chcę się wycofać z części poglądów, które przedstawiłem w części pierwszej. Częściowo tak, ale nie w tę stronę co myślicie. Rzeczywiście zmieniłem zdanie, od dzisiaj będę pisał ToString() jeszcze częściej, tzn. dla każdej swojej klasy i struktury, nawet jeżeli tworzyłbym bibliotekę dla klienta...
Sztuka programowania 2778 dni, 17 godzin temu 289 źrodło rozwiń