1 człowiekList NR.5 [Początek listu] Witaj

Jakiś czas temu znalazłem Twojego bloga, przeczytałem kilka wpisów i mi się spodobało. Potem straciłem go z oczu aż wczoraj trafiłem na niego znów a mówiąc dokładniej na wpis "Jak żyć jako programista". I tak znów zacząłem czytać Twój blog jednak postanowiłem pójść krok dalej i napisać, bo od pewnego czasu chciałbym coś zmienić w swoim życiu a nie bardzo wiem jak się do tego zabrać i po przeczytaniu kilku wpisów na Twoim blogu myślę, że mógłbyś mi pomóc. Nie lubię zaczynać "po amerykańsku" w stylu "cześć wszystkim, mam na imię ****** i jestem informatykiem ..." - "cześć ******..." jednak wypadałoby przede wszystkim się przedstawić więc - rzeczywiście mam na imię ******i jestem mówiąc ogólnie informatykiem.

Mam 37 lat. Przygodę z programowaniem zacząłem dawno temu jeszcze w języku Basic na Atari 65 XL. Potem była przerwa, potem szkoła policealna i kanon nauczania, czyli Turbo Pascal i C++. Potem zacząłem coś kombinować w Visual Basicu i Delphi. Przyszedł czas na studia - skończyłem studia licencjackie w Bydgoszczy Informatyka ze specjalizacją Projektowanie systemów informatycznych. Tu napisałem swój pierwszy "prawdziwy" program za pomocą Borland C++ Builder - w tych czasach (rok 2001-2004) biblioteka VCL Borlanda była dość popularna. Program, który napisałem - była to moja praca licencjacka, obsługa agenta ubezpieczeniowego - program funkcjonalny od początku do końca, nawet dogadałem się z lokalnym przedstawicielem firmy ubezpieczeniowej i zrobiłem to jak należy - wiesz cały ten wywiad z klientem, projektowanie, potem prezentacja szkieletu aplikacji itd... naprawdę mnie wciągnęło.

Cóż, gdybym miał pokazać dziś kod tej aplikacji pewnie bym się wstydził - 0 zaprojektowanych klas - wszystko pisane pod przyciskiem - programowanie obiektowe wtedy to była dla mnie czarna magia. Cóż skończyłem studia wróciłem do mojej miejscowości i chwyciłem pracę, która była - wtedy dla świeżo upieczonego studenta w 10.000 miasteczku to było coś. Zostałem Informatykiem w jednostce budżetowej - zarządzanie siecią komputerową na domenie Windows Server 2003 - gdzieś po drodze zrobiłem szkolenie z zarządzania serwerami klasy 2000 -2003. Świat poszedł do przodu, żona, dzieci, rodzina dom, gdzieś w ciągu tych lat wracałem do programowania, zamieniłem C++ Buildera na C# i uzupełniałem wiedzę - starałem się nadrobić wiadomości na temat programowania obiektowego, potem pojawiło się MVC, otarłem się też o Agile. Spotkałem też na swojej drodze PHP - nawet udało mi się napisać prosty szkielet CMS. Jednak osiadłem tu, w małym miasteczku na pograniczu Warmińsko-Mazurskiego i Kujawsko-Pomorskiego. Cóż, w zasadzie pasuje mi to, jestem informatykiem, zarządzam sieciami na Windows Server, Linuksach, a także vSphere itd...

Nie jestem w stanie rzucić tego i zacząć teraz kariery programisty w firmie w zasadzie nawet tego nie chcę. Fajnie piszesz o poszukiwaniu pracy i pracy jako programista na cały etat, myślę, że jest to naprawdę kawał dobrej roboty - za jakiś czas podrzucę linka do tych wpisów swojemu synowi, który ma 16 lat i zaczyna swoją przygodę z programowaniem. Przynudzałem Cię teraz historią życia a nie sprecyzowałem jeszcze po co tak właściwie piszę. Jak już pisałem zawsze ciągnęło mnie do programowania i chciałbym to robić nie jestem jednak w stanie zrezygnować z pracy i zostać programistą na pełen etat - z kilku powodów: usidliłem się i jest mi tu dobrze, a poza tym kręci mnie programowanie, ale pod warunkiem, że to ja decyduję co tworzę czyli jeśli wymyślę, zaprojektuję i wykonam - nie koniecznie sam, ale lubię mieć wrażenie, że cos tworzę a nie tylko klepię kod tworząc soft, który został wymyślony przez kogoś innego.

Chciałbym po godzinach robić coś produktywnego, bo czuję, że dałbym rade - realizowałbym się w ten sposób - tworząc oprogramowanie (nie koniecznie wielkie projekty), ale chciałbym to robić nie do szuflady chciałbym na tym też dorobić, bo wiem, że mam taki potencjał i boli mnie to, że z niego nie korzystam. Z uwagi na to, że jest tego dużo nie wiem za bardzo w co uderzyć i jak się do tego zabrać. Chciałbym docelowo tworzyć soft po godzinach pracy i zarobić na tym w miarę możliwości. Myślałem o tym żeby stworzyć swój CMS i wdrażać w jednostkach budżetowych (urzędy, administracja lokalna itd), ewentualnie oprogramowanie użytkowe - niewielkie bazy danych, programiki użyteczne jednak nieprzerastające moich możliwości - wiadomo, że programu do obsługi księgowości czy płac nie napiszę, ale system do obsługi liczników wody za jakiś czas pewnie znalazłby się w zasięgu, z racji, że jestem administratorem sieci i baz danych - główni e-oprogramowanie dziedzinowe urzędu jednak na co dzień od 12 lat pracuję z bazami danych i mam pojęcie jak są tworzone.

Problem polega na tym, że zupełnie nie wiem jak się do tego zabrać, znam podstawy C# i oglądając kursy dla początkujących czuje że tracę czas jednak zagadnienia bardziej zaawansowane przerastają mnie. Jest wiele kursów na temat języka (obecnie korzystam z prezentu od Microsoft i czerpię pełnymi garściami z Pluralsight) jednak mało albo wcale nie ma o metodach - jak to się po prostu robi - tworzysz przykładową aplikację, ale wiesz jednocześnie, że "prawdziwe" programy tworzy się inaczej.

Wiele bym dał za kurs, który pokazuje od a do z tworzenie aplikacji, ale tak jak się to robi w korporacjach, które się tym zajmują. Jak projektować klasy, co powinny zawierać - zakładając że chciałbym samodzielnie obsłużyć połączenia z bazą danych nie korzystając z np. Entity Framework to nie wiem jak zaprojektować klasę, która odpowiada za połączenie z bazą danych - ktoś kiedyś napisał "żadnych helperów i klas, do których wrzuca się wszystko" - nie chodzi mi o to żebyś napisał mi jak projektować klasy tylko skąd mam wiedzieć, że program, za który chcę wziąść pieniądze nadaje się do ludzi, że jest bezpieczny.

Niby wiem, że oddając program użytkownikowi nie ma dla niego znaczenia jak jest napisany kod i czy jest on zgodny z jakimiś zasadami (najwyżej ja natrudzę się potem rozwijając ten soft) tylko za to żeby program działał bezbłędnie i w sposób jaki oczekuje klient. Z powodu, że programując hobbystycznie łapałem się różnych zagadnień umiem trochę tego trochę tamtego, C# spoko, ale ASP.NET MVC musiałbym przysiąść, PHP - wrócić do tematu i nadrobić zaległości z bezpieczeństwa, próbowałem też sił w Unity - gry na urządzenia mobilne.

W tej chwili jestem na rozstaju i chciałbym żeby ktoś mi doradził - pokierował. Znam wszystkiego po trochu i czas przejść na następny poziom. Gdybyś mógł mi doradzić, może nawet stworzyć wpis na swoim blogu - być może jest więcej takich osób jak ja, co teraz ? Jak zostać programistą po godzinach - nie takim etatowym, ale też nie do końca "tylko" hobbystą, chciałbym tworzyć oprogramowanie i je sprzedawać jednak żeby było to coś co sam zaprojektuję i stworzę (sam lub w grupie 2-3 osobowej max). Pozostaje jeszcze temat jak takie aplikacje sprzedać, ale to już inna sprawa. Chciałbym żebyś doradził mi jak mógłbym zaistnieć na rynku tworząc swoje programy. Co do technologii też mam lekką zagwozdkę, bo zawsze lubiłem pisać aplikacje okienkowe jednak te już chyba się "kończą". Przeczytałem Twój kurs o ASP.NET MVC Core i muszę przyznać, że wciągnęło mnie. Jest jeszcze PHP ...

Kończę już ten wywód, przepraszam, że zabieram Ci cenny czas, ale zachęcasz do pisania więc piszę.
Gdy znajdziesz chwilę będę wdzięczny za jakiekolwiek wskazówki na temat, który wyżej poruszyłem.
Czekam też na dalszy ciąg ASP NET Core, fajnie, gdybyś zrobił wpis o tym, jak takie aplikacje hostować na Linuksie.

Życzę wszystkiego dobrego, twórz dalej bloga, bo naprawdę fajnie się czyta, piszesz w bardzo przejrzysty sposób - po ludzku, a to trafia do ludzi,

[Koniec listu]

Tworzenie aplikacji, ale tak jak się to robi w korporacjach

Rzeczywiście, żeby zdobyć taką wiedzę trzeba popracować w takich firmach. Ta wiedza jest płatna. Moim zdaniem jest to też powód, dla którego ludzie tak ochoczo chodzą na pewne kółka programistyczne, bo często tam osoby przekazują wiedzę, która ma wartość pieniężną. Na konferencjach np. 4Developers często są prezentacje, które listują liczbę rozwiązań i mówią to razem w kupie jakoś działa.  Przejrzyj kanał YT konferencji 4Developers może tam znajdziesz to, czego szukasz.

Wiedza jak “tworzyć aplikację” ma swoją cenę. Firmy często wysyłają szpiegów, płacą analitykom i konsultantom po to, by się dowiedzieć, że dana technologia może pomóc firmie, jeśli się zrobi X, Y, Z. Będą zyski więc jest sens wdrażać coś przez rok lub dłużej.

Czy jednak tak jest źle? Co tak naprawdę może zrobić jeden człowiek? Rzeczywistość nie jest aż taka straszna jak ją malujemy.

Aplikacje w korporacjach nie są doskonałe, są jednak oczywiście potężne, bo zostały napisane przez  zespół ludzi, a nie przez jednego człowieka. Jako pojedynczy człowiek oczywiste jest to, że nie byłbyś w stanie odwzorować takiej aplikacji. Nie żyjemy w latach 80, gdzie jeden człowiek mógł rzeczywiście napisać coś, co ma wielki wpływ na ludzkość.

Czy jednak aplikacje korporacyjne są rzeczywiście takie tajemnicze i super dobrze napisane, że tej wiedzy nie znajdziesz przykładowo na kursach Pluralsight? W firmach rzeczywiście istnieją pewne komponenty, którą zostały napisane ręcznie i od zera. Niestety te komponenty zazwyczaj „gówniane” działają.

Firmy nie są głupie. Po co programiści mają pisać coś od zera jak to już istnieje gdzieś i jest udostępnione za darmo lub za drobną opłatą. W takich chwilach przypominam sobie jak kiedyś widziałem firmową kontrolkę do ASP.NET, która generowała CAPTCHA. Ta kontrolka miała dwa problemy :

  • była ona już przestarzała i powodowała dziwne błędy
  • Programista, który ją napisał już nie pracował od 2 lat i nikt nie wiedział o co chodzi teraz

W rezultacie nie ma sensu pisać własnych kontrolek i własnych rozwiązań. W firmie nie było NHibernate i nie było Entity Framework. Zapytania do baz były wykonywane dziwnym wzorem i klasami, które tak naprawdę ukrywały klasyczne klasy ADO.NET. Otwierały one połączenie i wysłały dynamiczny napis SQL w formacie string do bazy. Tworzyło to wiele problemów i było widać, że w innych projektach woleli korzystać z LINQ to SQL niż z tego firmowego rozwiązania.

Istnieje tylko jedno miejsce, gdzie można napisać coś własnego i są to komponenty bezpieczeństwa. Oczywiście nikt ci nie powie jak to działa, bo to byłyby wycieki poufnych danych. Nie znaczy to też, że nie ma już gotowych komponentów bezpieczeństwa, które by ci pomogły w zabezpieczeniu twoich poufnych danych.

Masz więc gotowe komponenty i paczki, z których możesz skorzystać tak jak wielkie firmy. Nawet nie myśl o pisaniu własnych zapytań do SQL, gdy masz NHibernate lub Entity Framework. Te technologie po coś istnieją.  Nie obciążaj się pracą, którą już ktoś wykonał. Korporacje robią to samo.

Jak więc masz już pomysł na aplikację, to zobacz, jakie są gotowe paczki i rozwiązania, które by ci pomogły wykonać twoją pracę. Nie bądź też dla siebie surowy. Nikt nie tworzy dobrego oprogramowania, zwłaszcza za pierwszym razem. Jest to właśnie jeden z powodów, dla którego w porządnych firmach istnieją Behemoty programowania. Nawet duże firmy uczyły się na swoich własnych błędach, by stworzyć tę “dobrą” aplikację dla użytkownika i dla programistów.

Musisz od czegoś zacząć.

Skąd mam wiedzieć, że program jest bezpieczny

Nie jestem specjalistą od spraw bezpieczeństwa, ale jeśli twoja aplikacja jest odporna na popularne ataki jak SQL Injection i XSS, to moim zdaniem możesz stwierdzić, że aplikacja ma podstawowe bariery.

Zrób listę podstawowych ataków i zastanów się czy ty dałbyś radę to złamać. Ta wiedza - nie jest wiedzą tajemną. Można ją znaleźć prawie wszędzie.

Sprawy pieniężne jak przelewy są zazwyczaj rozwiązywane przez systemy trzecie. Kiedyś pisałem klasy, które współpracowały  z pewnym systemem zakupowo-przelewowym. Były one prymitywne w swoim działaniu. Korzystając z gotowego systemu płatniczego moim jedynym zmartwieniem było wysłanie danych i odpowiedni ich odbiór, gdy transakcja się wykonała. Bezpieczeństwo więc nie było moim problemem.

Jeśli w twojej stronie WWW chodzą poufne, to niestety, ale musisz kupić certyfikat i zaopatrzyć się w protokół HTTPS.

Samo bezpieczeństwo jest oczywiście poważnym zagadnieniem, ale moim zdaniem  nie będziesz pisał osobistego systemu bankowego.

ASP.NET MVC, PHP, Unity

Zastanów się na czym najbardziej ci zależy. Próbuj wszystko, bo trochę ograniczasz siebie. Zastanów się nad tym, w czym chcesz się specjalizować i tę jedną zdolność doprowadź do poziomu mistrzowskiego. 

Pisałem o tym wcześniej tutaj:

http://cezarywalenciuk.pl/blog/programing/post/specjalizacja-programisty-w-technologii--kariera-programisty

Własny Start-up

Bazowo gotowe paczki i rozwiązania powinny ci wystarczyć. Fakt napisania całej aplikacji wymaga wizji i niestety dużego ryzyka. Kto wie być może będziesz tworzył swoją aplikację w locie. Wiem jak to wygląda bo miałem kontakt z taki firmami.

Myślę, że największą twoją przeszkodzą w twoim startupie będzie proces tworzenia aplikacji, niż to “jak” ta aplikacja ma być napisana. Od strony biznesowej musisz się zastanowić nad słowem “dlaczego?”. Po co twoja aplikacja istnieje? Dlaczego? Dlaczego ona tutaj jest? Jeśli znasz odpowiedzi ułatwi ci to wiele spraw.

Jedyne co mogę doradzić, to zacząć od czegoś małego tak, aby można było się zorientować jak ten cały przepływ tworzenia aplikacji ma działać dla ciebie i całego twojego zespołu.

Dzięki za miłe słowa

Dobrze jest przeczytać taki list. Zwłaszcza że całkiem niedawno się rozchorowałem i przez miesiąc nie pisałem. Twoje słowa są motywacją, by wrócić do pisania kursu ASP.NET Core.