-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!news.chmurka.net!not-for-mail
From: Andrzej Jarzabek <a...@g...com>
Newsgroups: pl.comp.programming
Subject: Problemy inzynieryjne, bylo: sortowanie
Date: Tue, 16 Oct 2012 23:04:07 +0100
Organization: news.chmurka.net
Lines: 140
Message-ID: <a...@n...chmurka.net>
References: <k59gbj$be7$1@node2.news.atman.pl>
<6...@g...com>
<k59jgh$mb7$1@mx1.internetia.pl> <k59jvr$360$1@node1.news.atman.pl>
<k59q5n$np3$1@mx1.internetia.pl> <k5bc6k$4ea$1@mx1.internetia.pl>
<k5bkvg$jtk$1@mx1.internetia.pl> <k5bnr3$n79$1@mx1.internetia.pl>
<k5bpdr$755$1@node1.news.atman.pl> <k5bqo8$n79$4@mx1.internetia.pl>
<k5bqv6$8oq$1@node1.news.atman.pl> <k5bsuf$n79$5@mx1.internetia.pl>
<k5bsva$aoq$1@node1.news.atman.pl> <k5bvic$n79$6@mx1.internetia.pl>
<k5cqnf$gac$1@node2.news.atman.pl> <k5hnqe$86f$1@adenine.netfront.net>
<3...@g...com>
<a...@n...chmurka.net>
<a...@g...com>
NNTP-Posting-Host: 5ac53c40.bb.sky.com
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: avenger.news.chmurka.net 1350425047 7238 90.197.60.64 (16 Oct 2012 22:04:07
GMT)
X-Complaints-To: abuse-news.(at).chmurka.net
NNTP-Posting-Date: Tue, 16 Oct 2012 22:04:07 +0000 (UTC)
In-Reply-To: <a...@g...com>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120907
Thunderbird/15.0.1
X-Authenticated-User: ajarzabek
Xref: news-archive.icm.edu.pl pl.comp.programming:200022
[ ukryj nagłówki ]On 16/10/2012 00:51, M.M. wrote:
> W dniu poniedziałek, 15 października 2012 23:59:13 UTC+2 użytkownik Andrzej
Jarzabek napisał:
>
>> sieczka gdzieniegdzie zrobi, to da się ją posprzątać. Powiesz, że
>> klienta nie interesuje, czy jest sieczka, czy nie. Ale czy nie
>> interesuje go również, czy zaimplementowanie kolejnego wymagania zajmie
>> dwa tygodnie, czy - z powodu sieczki - dziesięć? Czy nie interesuje go
>> ile razy na miesiąć system będzie padał i jaki będzie miał downtime?
> Raczej powiem że w praktyce nie potrafię albo przepchnąć takiej argumentacji,
> pomimo że moim zdaniem też jest oczywista, albo w praktyce zrobienie dobrego
> projektu jest w ogóle trudne do osiągnięcia.
Tru dat. Dlatego w swojej masie projekty programistyczne przekraczają
budżety, terminy i produkują duże ilości bugów. Ale tak w ogóle da się
zrobić dobrze, i nawet nie o to chodzi, że zrobienie dobrze jest trudne
samo w sobie - jest trudne w pewnych organizacjach, z pewnycmi ludźmi,
dla pewnych klientów.
> Chodzi mi o taką praktykę...
> jakby to zgrabnie określić, może... całą praktykę biznesową, nie tylko
programistyczną.
> Nie potrafię przepchnąć takiej argumentacji w najróżniejszych okolicznościach. A to
w
> rozmowie z kolegą z zespołu ciężko, bo zaraz rozmowa przyjmie taki ton, że
> uważam iż on zrobił sieczkę a nie porządny kod. Gdy poczuje zagrożenie z mojej
> strony, to strach się bać co mi za plecami odwinie.
Znaczy ne należy przyjmować takiego tonu z jednej strony, ale z drugiej
też nie należy się bać. Po pierwsze można od razu powiedzieć, że to nie
musi być czyjaś wina, że robi sieczkę, tylko że taka jest naturalna
tendencja w kodzie utrzymywanym na dłuższym odcinku czasu. I może w
ogóle lepiej przedstawić całą sprawę jako "odkryłem zajebisty sposób na
to, żeby nie mieć problemów takich, jakie mamy" niż "robisz kaszanę,
kaszaniarzu".
Z drugiej strony jeśli nie można powiedzieć, że coś dobrze by było
naprawić czy zrobić lepiej, bo od razu ktoś poczuje się urażony, to też
nie jest najzdrowsza sytuacja.
> Z managementem ciężko, bo łatwo górę bierze chciwość i zaoszczędzenie odrobiny
czasu.
Znowu, można próbować przekonać, że jeśli program ma być dalej
rozwijany, to tak będzie szybciej i taniej. Jeśli nie są przekonani, to
można zbierać na nich kwity w postaci "mogę to zrobić trochę szybciej
teraz, ale jeśli dalej będzie ten program trzeba utrzymywać, to będzie
to trwało przez to dłużej i będzie więcej bugów, proszę o decyzję" - jak
masz na piśmie kilka decyzji "zrób szybciej teraz, chrzanić później" -
to potem możesz pokazać, że bugi, zawalone terminy itd. wynikają
bezpośrednio z decyzji managementu. :)
> Z klientem to już w ogóle najtrudniej, bo klient nie dysponuje odpowiednią
> wiedzą, a często chce narzucać pewne rzeczy.
Ale chyba raczej niekoniecznie to, jak ma wyglądać kod.
> Kolejna sprawa to wypada operować konkretami.
Ale właśnie o to chodzi, że zwykle nie ma konkretów, są tylko
niewiadome. O sensowne danej liczbowe też ciężko, najlepiej chyba w
takiej sytuacji wyjść z takiej pozycji, że jako praktyk masz opinię, że
lepiej (taniej, szybciej) będzie właśnie tak i tyle, a jak chcą zrobić
inaczej, to potem mogą mieć tylko pretensje do siebie.
> Trzeba podać jakie rozbudowy, o ile przyspieszą późniejszy czas wykonania,
> itd.
Jak już masz rzucać jakąś liczbą, to ja bym rzucił taką, że sensowne
oszacowanie wysiłku to 20% tego wysiłku - i to się nie wlicza do dalszej
pracy, czyli jak zrobienie czegoś będzie trwało 10 miesięcy, to
oszacowanie tego faktu zajmie miesiące dwa, a oszacowanie i zrobienie 12.
> Nie da się przecież tak zaprojektować programu, żeby zupełnie każda modyfikacja
była w
> przyszłości łatwa.
Da się (relatywnie), tylko nie tak, jak myślisz. Projektowanie programu
od początku tak, żeby był jak najbardziej elastyczny jest niewłaściwą
techniką.
> Z kolei żeby operować konkretami to trzeba dobrze znać dziedzinę, ale
> nawet jak się zna dziedzinę to jest trudno oszacować czas i próg opłacalności.
IMO znajomość dziedziny niewiele ci da. Tego, co zajmie ci najwięcej
czasu i tak i tak nie przewidzisz.
> W mojej praktyce nigdy większego projektu nie robiłem dla dziedziny o której
> na starcie miałem pojęcie. Zawsze musiałem douczyć się na szybko. Właściwie to
> nie wiedziałem nawet co w ogóle może być użyteczne w systemie i jakie rozbudowy
> zaproponować.
Najlepiej w ogóle nic nie proponować. Jedyne, co trzeba ustalić, to czy
klient sam będzie chciał rozbudowy - z mojego doświadczenia wynika, że o
ile używa programu, to będzie.
> W takich warunkach musiałem oszacować czas, cenę i, co tu dużo mówić,
> odgadnąć jaki projekt będzie najlepszy. Nie można bez dobrej znajomości dziedziny
zrobić
> dobrego projektu, można go co najwyżej odgadnąć.
E tam. Zrobienie dobrego projektu nie ma wiele wspólnego z
przewidywaniem przyszłych wymagań. Jeśli program spełnia wyamagania
aktualne, a przy tym ma prostą konstrukcję i czytelny kod, to już
projekt jest dobry.
> Kolejny problem jest taki, że krótko po
> rozpoczęciu chcą zobaczyć jakiś prototyp, tak jakby dla pewności że prace w
> ogóle trwają.
No więc praca w ten sposób, żeby bieżący stan można było krótko po
rozpoczęciu i często potem demonstrowac jest bardzo dobrą praktyką...
> Prototyp wprost z definicji da się wykonać na skróty.
...tylko że do tego nie należy stosować prototypu w takim sensie.
Takie prototypy (zwane niekiedy spike solutions) mają prawo bytu, ale
przy zrozumieniu, że po wykonaniu są wwyrzucane, więc jako takie nie
dają żadnej pewności, że "prace trwają".
Natomiast owszem, jak najszybsze doprowadzenie kodu właściwego do stanu,
w którym można pokazać, że działa, jest bardzo wartościowe. Ale to
wszystko pod warunkiem, że wszystko jest obwarowane solidnymi testami i
porządnie napisane.
> Chociażby
> można go zrobić bez uprzedniego przemyślenia jak będzie testowany, ale jest
> więcej pułapek. Potem przy przechodzeniu z prototypu do pełnej wersji może nagle
> się okazać, że program będzie bardzo trudny w testowaniu.
Najlepiej zatem zacząć od pisania testów.
> We wszystko powyższe czasami wplata się problem wydajnościowy, a kod
> po zoptymalizowaniu to już masakra w utrzymaniu.
Bo ja wiem? Niezrozumiałe identyfikatory wcale nie działają szybciej od
zrozumiałych. Zamiana bloku kodu w funkcji na wywołanie funkcji inline
niczego nie spowalnia. W C++ nawet obiektowe wrappery na proste typu nic
nie kosztują.
> P.S.
> Czy widac polskie znaki?
Bez problemu.
Następne wpisy z tego wątku
- 17.10.12 00:05 M.M.
- 17.10.12 00:15 Baranosiu
- 17.10.12 00:19 Andrzej Jarzabek
- 17.10.12 01:38 PK
- 17.10.12 01:58 M.M.
- 17.10.12 02:02 M.M.
- 17.10.12 03:46 M.M.
- 17.10.12 04:06 bartekltg
- 17.10.12 04:41 M.M.
- 17.10.12 05:07 M.M.
- 17.10.12 05:26 bartekltg
- 17.10.12 05:28 bartekltg
- 17.10.12 05:44 M.M.
- 17.10.12 08:26 Stachu 'Dozzie' K.
- 17.10.12 08:30 M.M.
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2025-01-01 Już nie płoną
- 2025-01-01 Digikey, SN74CBT3253CD, FST3253, ktoś ma?
- 2025-01-01 Co tam u Was
- 2025-01-01 Koder szuka pracy. Koduję w j.: Asembler, C, C++ (z bibl. Qt) i D.
- 2025-01-01 Gdańsk => Delphi Programmer <=
- 2025-01-01 Łódź => Programista Full Stack .Net <=
- 2025-01-01 Żerniki => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-01 Wrocław => Specjalista ds. Sprzedaży <=
- 2024-12-31 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-31 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-01 Przypomnienie: Mini Netykieta polskich grup dyskusyjnych wer. 3.2.2
- 2024-12-31 Zamykanie konta dziecka.
- 2024-12-31 Czy apka bankowa to gra komputerowa?
- 2024-12-31 Szukam: czujnik ruchu z możliwością zaączenia na stałe
- 2024-12-31 Warszawa => Solution Architect (Java background) <=