O trafności dokonywania wyborów przy tworzeniu oprogramowania

Każdy twórca oprogramowania staje od czasu do czasu przed dylematem jaką technologię wybrać do tworzenia nowego projektu informatycznego. Decyzja taka powinna być szczególnie przemyślana przy dużych projektach, gdyż może mieć ona bardzo duży wpływ na powodzenie realizacji projektu, a pośrednio również na nasze zadowolenie z pracy. Nawet przy mniejszych projektach istotne jest, aby brać pod uwagę możliwość rozwoju programu do stopnia o jakim na etapie planowania nawet nie myśleliśmy.
Może się zdarzyć, że po “puszczeniu” do użytkowników pierwszej wersji programu, okaże się, że będzie na niego duży popyt oraz zarysują się perspektywy jego dalszego intensywnego rozwoju. W takim właśnie przypadku w razie chybionego wyboru technologii, programista lub zespół programistów będzie sobie rwał włosy z głowy, bo okaże się, że wybrana technologia, która miała pozwolić na błyskawiczne stworzenie pierwszej wersji oprogramowania, stawia duże ograniczenia przy dalszym jego rozwoju.

Na podstawie mojego krótkiego doświadczenia jako osoby zajmującej się rozwojem oprogramowania dla firm, przychodzi mi do głowy kilka czynników, nad którymi należy się zastanowić przy planowaniu nowego projektu informatycznego:

Jakim budżetem dysponujemy?

Czy program jest naszym pomysłem i naszą inwestycją, czy np jest pisany na zlecenie i ma sponsora. Od tego zależy to na co możemy sobie pozwolić. Czy musimy się skupić na szybkim ukończeniu produktu, czy też możemy sobie pozwolić na nieco innowacyjności, zakup bibliotek, narzędzi itp.

Jakie narzędzia już posiadamy?

Wiadomo, że posiadając oprogramowanie, zakupione za ciężkie pieniądze należało by je wykorzystać, o ile oczywiście spełnia ono wymagania stawiane przez projekt. Nieco inaczej jest gdy projekt powstaje na zlecenie. Wówczas należało by wziąć pod uwagę ewentualny zakup narzędzi programistycznych, bibliotek itp. Zakup taki oczywiście musi mieć swoje uzasadnienie ekonomiczne ( płaci za nie zleceniodawca ), i nie powinna być to jedynie chęć poznania np nowego języka programowania czy nowej bazy danych. Powinien on skutkować skróceniem prac programistycznych, lepszą jakością końcowego produktu oraz przede wszystkim jasnymi perspektywami dalszego rozwoju programu.

Jaką wiedzą dysponujemy?

Samobójstwem byłoby rozpoczynanie dużego projektu z wykorzystaniem technologii, o której nie mamy pojęcia. Wybieramy albo sprawdzone rozwiązania, albo przed wyborem robimy dogłębne rozeznanie mające na celu określenie możliwości i zagrożeń danej technologii. Istotne jest aby nie wybierać żadnych “modnych nowości”, choć często jest taka pokusa. Mają one to do siebie, że równie szybko umierają jak się rodzą, co może mieć dla nas katastrofalne skutki.

Dlaczego popełniłem ten wpis? Ano dlatego, że od paru lat rozwijam pewnien program w technologii X, i gdy zaistnieje potrzeba dodania do niego jakiejś funckjonalności, pojawia się myśl, jak proste by to było gdyby program był napisany w technologii Y. Przepisanie programu niestety jest nierealne - za duża “kobyła”.

Życzę więc dobrych wyborów kolegom po fachu! 

oprogramowanie programowanie

Komentarze (22)

avatar | 17.01.2012 21:44
Ciekawy wpis. Ostatnio sobie robię powtórkę z Thinking in C++ i właśnie o podobnych rzeczyach czytam.

Mógłbyś napisać co kryje się pod X i Y? :)
avatar | 17.01.2012 21:58
Do akapitu "Jaką wiedzą dysponujemy?" dorzuciłbym mały komentarz.

Często jeśli zaczynamy projekt od nowa i mamy wolną rękę warto wybrać coś nowego i rozwijać się.
Mieliśmy tak kiedyś z MVC. Wszystko do tej pory dla www tworzyliśmy w czystym ASP. Gdy przyszedł nowy projekt, który mieliśmy robić od nowa, wybraliśmy MVC, mimo, że nie tworzyliśmy nic wcześniej w nim. Dzięki pójściu na głęboką wodę, nauczyliśmy się naprawdę dużo. Było warto.

Dodam, że w firmie ZAWSZE jest zły moment na wejście w coś nowego. Czasem trzeba zaryzykować, aby móc iść dalej. Stanie w miejscu obecnie to tak naprawdę, cofanie się.

Też jestem ciekaw co to za technologie X i Y :)
avatar | 17.01.2012 22:16
Najbardziej daje mi w kość sama baza danych. Czyli X-em jest Ms Acces, natomiast Y to dowolna inna ( Serwerowa, nie plikowa! ) baza danych.
Co do języka programowania to moim zdaniem ważne jest to, aby istniało do niego dobre IDE a przede wszystkim dobre komponenty/biblioteki, wtedy możemy się skupić na rozwoju aplikacji a nie rzeźbieniu elementów wizualnych. Pod tym względem z tego co się orientuję, królują technologie Microsoftu. Chyba również najwięcej firm zewnętrznych tworzy biblioteki właśnie pod Visual Studio.
avatar | 17.01.2012 22:35
Naklepałem długi komentarz, ale poszedł chyba w kosmos :/
A więc jeszcze raz w skrócie:
X - to baza danych Access, Y - to dowolna baza oferująca to co wszystkie nawet przeciętne bazy serwerowe ( triggery, procedury z prawdziwego zdarzenia itp ) i nie mająca tylu upierdliwych ograniczeń i dziwnych rozwiązań ( może kiedyś skrobnę o tym posta dla potomnych ;) )

djfoxer: oczywiście masz rację. Głupotą byłoby zaczynanie projektu w czymś, co mimo że jest nam znane, jest już stare i nie rozwijane. Podam za przykład robiący kilka lat temu wrażenie między-platfomowy Kylix od Borlanda. Niby super, możliwości prawie jak w Deplhi, kompilacja na windows i linux, tylko że to już od dawna nie istnieje. A ktoś kto by rozpoczął wtedy pracę nad poważniejszym programem w tym środowisku miałby problem teraz z gonieniem konkurencji.
avatar | 17.01.2012 22:49
@djfoxer

Zmiana wzorca i zmiana technologii to chyba jednak troche inna parafia... Porownalbym to do zmiany sposobu jazdy z agresywnego na ekonomiczny (wzorzec projektowy) i zmiany jazdy samochodem na pilotowanie szybowcow (zmiana technologii).

@autor

Fajny wpis. Dodałbym jeszcze zasób ludzki do tych trzech elementow. Nie miesic mi sie bowiem do konca w zadnym z trzech przez Ciebie wymienionych, a moze dotyczyc kazdego z nich.
avatar
xm (niezalogowany)
| 17.01.2012 23:49
Tych czynników jest z pewnością więcej, żeby nie wspomnieć, że takie dylematy pojawiają się na każdym etapie wytwarzania oprogramowania. Często są konsekwencją ograniczeń stawianych przez klienta, np poprzez założenia polityki bezpieczeństwa, klient wyklucza użycie technologii (bądź jej konkretnej wersji).

Jeżeli już jesteśmy przy technologiach, to osobiście jestem zadeklarowanym zwolennikiem dobierania technologii adekwatnej do rozwiązania danego zagadnienia. Podobają mi się tutaj założenia platformy .NET, gdzie przykładowo większość kodu możemy napisać w C#, a pewne elementy w zupełnie innym języku (np Visual Basic, czy C++) bez problemu używać takiego połączenia. Innym częstym połączeniem jest używanie Scali w projektach Javowych, jeżeli użycie kodu funkcyjnego da nam odpowiednie korzyści.

Nie mniej na technologiach się nie kończy. Koledzy już nadmienili o wzorcach. Bba - cała architektura i projekt pełne są takich wyborów. Czy od razu rozpisujemy milion warstw? Czy korzystamy z mechanizmów ogólnych i wzorców projektowych, nawet jeżeli obecne założenia mówią, że będzie utworzymy tylko jedną strategię? (do czasu zmiany wymagań klienta ;)

Na tym właśnie polega sztuka tworzenia oprogramowania. To nie jest tylko rzemiosło, że bierzesz klawiaturę i klepiesz automatycznie kod. I to jest właśnie piękne :) Grunt, żeby możliwie unikać stania w miejscu, a nawiązując do pewnej książki, czasami trzeba zrobić krok wstecz, żeby pójść do przodu. A błędne decyzje stanowią cenne doświadczenie.
avatar | 17.01.2012 23:54
@dlpl Ja co chwila gdzieś czytam o powstaniu wtyczek różnej maści do Eclipse. Czytałem też, że profilowanie jest lepsze z narzędziami linuksowymi. Były to dyskusje, a nie artykuły, ale ostatecznie mogę Ci to wykopać jeśli jesteś zainteresowany.

Co do nowych technologii to wydaje się, że godnym następcą Javy może stać się Scala (Java pozostałaby rodzaje Asemblera w JVM), która już jest chyba wykorzystywana w dużych projektach (wiem, że któryś serwis się na to przeniósł… Twitter?). Z drugiej strony wielu programistów zainwestowało w Silverlighta, choć obecnie przyszłość nie wróży niczego dobrego dla tej technologii (nawet jeśli będzie dostarczane wsparcie techniczne, to nie będzie już rozwoju, a jak napisał @djfoxer stanie w miejscu to cofanie się).
avatar | 18.01.2012 0:03
Sorki ale temat w stylu

"przygotowywując uroczystą kolację musimy się zastanowić, ile mamy pieniędzy w portfelu,
z jakich składników przyrządzimy danie biorąc pod uwagę kucharskie skille"

Resztę "wywodów" można równie szyderczo sparafrazować. : )

Jeżeli już bierzemy / bierzecie się za PISANIE,
to wypadało by wyjść poza d* Maryny

; )
avatar
Bestia Błażej (niezalogowany)
| 18.01.2012 0:51
Wybaczcie, ale muszę zgodzić się socialkaos, wpis w sumie o niczym. Tego tematu nie da się zamknąć w 3 akapitach. Zbyt, krótko i zbyt ogólnie. Pomimo, że jestem właśnie na etapie tworzenia gry, do niczego ten wpis mi się nie przydał, kompletnie do niczego!
avatar
Anonim (niezalogowany)
| 18.01.2012 7:52
Cóż, nie miałem zamiaru pisać podręcznika, to jest tylko blog.

Odnośnie:
"przygotowywując uroczystą kolację musimy się zastanowić, ile mamy pieniędzy w portfelu,
z jakich składników przyrządzimy danie biorąc pod uwagę kucharskie skille"

Są ludzie którzy, jak tylko poczują oczami wyobraźni zapach uroczystej kolacji, w ciągu minuty podejmą decyzję o zakupie składników i zabiorą się za pichcenie. Skończy się na zmarnowanych pieniądzach ( bo wypasiona kolacja trochę kosztuje ), zmarnowanym wieczorze i rozstrojach żołądkowych.
Nie dla wszystkich wszystko jest wystarczająco oczywiste.
avatar | 18.01.2012 8:52
cześć! Bardzo ciekawy i fajny wpis, czytało się przyjemnie. To prawda, że należy dobrze przemyśleć realizację projektu, ale sam wiem po sobie jak kusi użycie nowości rynkowych, głównie ze względu podniesienia kwalifikacji i zdobycia dodatkowego doświadczenia... co nierzadko kończy się dużym problemem.
avatar | 18.01.2012 10:56
@Druedain

Dlaczego powtarzasz takie mity?

"Z drugiej strony wielu programistów zainwestowało w Silverlighta, choć obecnie przyszłość nie wróży niczego dobrego dla tej technologii (nawet jeśli będzie dostarczane wsparcie techniczne, to nie będzie już rozwoju, a jak napisał @djfoxer stanie w miejscu to cofanie się)."

Jesli nauczyles sie Silverlighta, to umiesz takze programowac na WP7, WPF i na tablety z Windows 8.
Z tych trzech dodatkowych technologii WPF jest intensywnie wykozystywany, Win 8 pewnie bedzie a WP7 sie zobaczy, ale osobiscie uwazam ze tez bedzie ok. Wiec nauka Silverlight nie okazala sie stracona bo wykozystuje sie ja obecnie w wielu obszarach.
avatar | 18.01.2012 11:42
Wiesz, wydaje mi się, że czas poświęcony na naukę obojętnie jakiego języka nigdy nie będzie czasem straconym, najważniejsza jest "myśl programistyczna" a język to tylko kilka wyrazów.
avatar
ITcrew (niezalogowany)
| 18.01.2012 14:03
Wiele na temat zarządzania projektem IT, czyli można powiedzieć o tym jak właściwie dobrać narzędzia i jak ułożyć sobie pracę przy tworzeniu oprogramowania znajdziecie na blogu http://itcrewblog.pl/
Myślę, że to dobra lektura rozwijająca ten artykuł.
avatar | 18.01.2012 14:31
@cybe

Najwazniejsze to dobrze zaplanowac aplikacje. Takie humorystyczne podejscie o mysli programistycznej sa dobre w idealnym swiecie aplikacji pisanych w oparciu o idealy, ktore nie obowiazuja w programowaniu komercyjnym. Teraz wazna jest wydajnosc aplikacji (ale nie systemowa, tylko ile zlotowek na godzine moze generowac/oszczedzac), potencjalne mozliwosci rozwoju (ale nie rozowoju osobowego i powiekszania doswiadczenia, a nauka zadowalania tych, ktorzy placa za moja prace) i oryginalnosc (w rozumienia nowosci na skale swiatowa, unikatowosci, a nie oryginalnego podejscia do otwarych standardow kodowania dokumentow).
avatar | 18.01.2012 18:02
@tfl
U nas nawet zmiana z WebForms (+EntityF) na MVC (+nHibernate) to było już coś i niby wydaje się Tobie to jako niewielka zmiana, nie każdemu to pasowało i nie obyło się bez kręcenie nosem. Poza tym różnice są dość spore.
avatar | 18.01.2012 18:27
Przy założeniu, że Win8 i WP7 nie zostanie ogłoszony wtopą jak Vista.
Przy założeniu, że te platformy będą czymś więcej niż jest obecnie WP7.

Obecnie, to popularniejsza jest Bada, a oni żeby zachęcić twórców spore nagrody dawali w konkursach. W praktyce szału chyba nie ma jeśli chodzi o ilość aplikacji w ich sklepie… Zamiast tego można znać Javę, a znając Javę pykać dla Dalvika bez większych trudności.
avatar | 18.01.2012 18:28
O Objective-C nie wspominając (o ile nie odstraszy kogoś zamknięcie ekosystemu)…
avatar | 18.01.2012 19:05
@Druedain
Pozwolę się nie zgodzić.
Jak już wspomniał StawikPiast, znając Silverlighta, można szybko wejść w WPFa i WP7.
WPF to nie tylko W8 i WP7, ale to np. aplikacje desktopowe na wszystko, gdzie można .NETa zainstalować, więc nie ma mowy tu o jakieś niepewnej przyszłości.

Poza tym coraz więcej jest ogłoszeń pracy dla programistów WP7. Ogólnie znajomość programowania w WP7 jest dość opłacalna teraz. Ogrom firm składa zamówienia na aplikacje na WP7.
avatar | 18.01.2012 19:59
@Druedain: w obu komentarzach mijasz się z prawdą.

Co ma wspólnego: WP7, Silverlight, WPF, W8?
po pierwsze XAML a po drugie sporo wspólnych namespace-ów.
Sądze, że ms uczy sie na błędach. Jeśli nawet SL jest już martwy to developerzy, którzy spędzili dużo czasu na naukę o wiele szybciej odnajdą się w W8 i wp7 (okrojony silverlight).

Co do nagród: ms dawał/daje telefon za 5 aplikacji. Twoim zdaniem to mało?

Objective-C to nie tylko macos i ios. To normalny język to wielu zastosowań. Jest stary i wyewoluował z C. Fakt, że jak dla mnie lekko zamotany ale jednak...
avatar | 22.01.2012 12:29
Zgadzam się - każdy przedsiębiorca powinien przeprowadzić taką analizę. Aczkolwiek temat wpisu godny uwagi. W praktyce wyboru narzędzi programistycznych dokonuje się w końcowej fazie planowania projektu. Drodzy programiści, może warto odpowiedzieć sobie na pytanie czy samo rozpoczęcie realizacji projektu nie będzie ekonomicznym samobójstwem. Dlatego warto planować, wybierać, analizować.
avatar | 25.01.2012 15:22
Szczerze mówiąc spodziewałem się czegoś innego.
To chyba oczywiste, że jak znam ASP to jego używam, a jak zdecydowanie lepiej czuję się w PHP to piszę w PHP. Czyż nie ?
Bo ja nie znam nikogo kto zna C/C++/C#/JAVA/PHP itd. na bardzo wysokim poziomie aby mógł tak sobie wybierać, a jakby znał to by na pewno nie brał się za takie niszowce.
Przykład FB. Pomysł, stworzyć portal, piszę w PHP bo jest łatwe i je znam.
O kurcze, miliony nas odwiedzają, czas napisać cześć portalu od nowa w C....
Dodaj komentarz