Categories
Ogólne

Wstęp

Wpis 1 z 4 w serii Motywacja

Kim jestem

Cześć! Mam na imię Grzesiek 🙂

W 2014 roku skończyłem budownictwo na Politechnice Poznańskiej. Przez 8 lat starałem się odnaleźć swoje miejsce na styku budownictwa i IT. W kolejnych firmach chciałem być motorem zmian, informatyzacji branży, usprawnień i ułatwień. Wielokrotnie zmagałem się z obawami, z chęcia pozostania przy status quo. W tym czasie miałem okazję tworzyć i rozwijać programy wykorzystujące API m.in. Tekli, wszelkich CAD’ów, Autodesk Robot, AxisVM.

Obecnie pracuję jako programista C#, bez powiązań z formalnym wykształceniem, które uzyskałem. Wielokrotnie odwlekałem decyzję o zmianie branży, tłumacząc sobie, że budownictwo musi przyspieszyć, że algorytmy już lada moment wyprą ‘palec boży’ projektanta, jego magiczną moc zawartą w zdobytych w trudzie uprawnieniach. Zmieniłem branżę z poczuciem porażki, że nie udało mi się trwale odcisnąć piętna na rzeczywistości, że mój wpływ był zawsze zbyt mały w stosunku do własnych oczekiwań.

Dlaczego mi się nie udało? Czy chciałem zbyt wiele czy trafiałem na złe miejsce/zły czas? To pytania bez jednoznacznej odpowiedzi, które są wygodnym powodem do odpuszczenia, do stwierdzenia ‘szkoda zdrowia, lepiej skupić się na czymś innym’. Tylko, że ja tak nie potrafię. Męczy mnie dramatyczny rozjazd pomiędzy szansami absolwentów budownictwa a informatyki. Fakt, że wybór podejmowany w dobrej wierze przez nieświadomego nastolatka skutkuje 5-krotną różnicą zarobków jest dla mnie trudny do pogodzenia.

Moja motywacja

Dlatego zdecydowałem się na rozpoczęcie tego bloga. Chcę dać Ci szansę na zdobycie nowych umiejętności, na poznanie świata IT, na nauczenie się podstaw programowania w kontekście Twojej codziennej pracy, tego co już znasz, na poprawienie pozycji na rynku pracy – niezależnie czy wykorzystasz nowe skille w budownictwie czy zdecydujesz się na zmianę branży.

Co ja z tego będę miał? Miliony monet płynące z wyświetlanych reklam… Żart, robię to non-profit. Uważam, że w budownictwie, zwłaszcza w polskim budownictwie niezbędne są zmiany, przede wszystkim w sposobie myślenia i umiejętnościach nowoczesnych inżynierów. Pozostawienie informatyzacji branży w rękach ‘zaciężnych hufców’ nie mających wiedzy budowlanej jest wg mnie utraconą szansą na Twój rozwój, na wykorzystanie tego co już znasz, na zbudowanie na fundamencie Twojej wiedzy solidnej konstrukcji będącej przejawem modernizacji branży.

Tak, wiem – jestem marzycielem 😛

Twoja motywacja

Zakładam dwa bazowe scenariusze:

  • zdałeś sobie sprawę, że nie da się klikać szybciej, a oczekiwanie na zmiany wprowadzane przez producentów oprogramowania to nie do końca pewna ścieżka. Wiesz, że ktoś, gdzieś tworzy jakieś nakładki/wtyczki do Twojego zestawu programów budowlanych i też chciałbyś to robić, ale nie wiesz od czego zacząć,
  • chcesz zmienić branżę, rzucić budowlany trud i znój w cholerę i skorzystać ze stale rosnągeo popytu na usługi IT, gdzie pracy jest dużo, a nowi pracownicy nie pojawiają się w wystarczającym tempie.

Dlaczego Let’s construct IT?

Bo sam nic nie zrobię. Próbowałem tego przez 8 lat, bez satysfakcjonującego efektu. Wola jednostki to zbyt mało aby odmienić oblicze tej branży. Potrzebna jest społeczność, grupa osób której motywacją nie jest wyłącznie interes ich macierzystych firm, ale przede wszystkim samorozwój realizowany w pracy zespołowej.

Chcę pokazać Ci jak wejść w ‘budowlane programowanie’, jakie możliwości kryją się w API popularnych programów. Wierzę, że z biegiem czasu, gdy nabierzesz umiejętności będziemy w stanie wspólnymi siłami tworzyć darmowe, open-source’owe wtyczki do znanych Ci programów jak i samodzielne aplikacje, które będa wspomagały codzienną pracę inżynierów budownictwa.

Na koniec przydałaby się jakaś odezwa, więc cytując klasyka: “teraz, choć Was nie słyszę, krzyczę Let’s construct IT!”.

Categories
Ogólne

Plany

Wpis 2 z 4 w serii Motywacja

W poprzednim wpisie opisałem motywacje, które skłoniły mnie do założenia społeczności Let’s construct IT. W tym wątku chcę przedstawić jakie plany chcę zrealizować w początkowym okresie.

Początkujący

Przez 8 lat pracowałem w różnych firmach około-budowlanych. W każdej z nich spotkałem się z osobami, które chciały wejść w świat programowania. Zawsze padał zestaw pytań: jak/kiedy/czy się nadaję? Pula wolnego czasu jakim dysponujemy maleje wraz z kolejnymi etapami życia. Posiadanie partnera czy narodziny dziecka to momenty reorganizujące nasze życie. Droga do programowania studenta-lekkoducha będzie zupełnie inna niż matki z trójką dzieci. W moim odczuciu kluczem do sukcesu jest stopniowe przekształcanie obecnego źródła dochodu w nowe – dlatego droga dla początkujących, którą będę prezentował będzie związana z codzienną pracą inżyniera budownictwa. W ten sposób dostarczysz w Twoim obecnym miejscu pracy nową wartość, zyskasz nowe kompetencje, które są obecnie cenne a które w przyszłości mogą stać się dla Ciebie trampoliną do nowego startu w innej branży.

Z myślą o początkujących chcę:

  • przekonać Cię, że już jesteś programistą,
  • pomóc w postawieniu pierwszych kroków w C#,
  • nakierować na wartościowe, darmowe kursy skupiające się na podstawach programowania,
  • wejść z Tobą w świat rozszerzania możliwości programów, z których korzystasz na co dzień: wszelkich CADów, Tekla Structures, Autodesk Robot, AxisVM,
  • zachęcić do założenia konta i współdziałania w ramach github.com,
  • przedstawić rolę testowania w programowaniu.

Zaawansowani

Jesteś “budowlano-programistą”, tworzysz programy/wtyczki na wewnętrzny użytek Twojego biura. Zastanawiasz się co dalej, szukasz wyzwań lub uznania i zrozumienia wśród podobnych Tobie. Wierzę, że prędzej czy później usłyszysz o naszej społeczności i z zainteresowaniem sprawdzisz nad czym pracujemy. Być może włączysz się wtedy w repozytoria poświęcone nowym narzędziom lub pozostaniesz w trybie pasywnym – skorzystasz z owoców naszej pracy do rozwoju wewnętrznych narzędzi w Twoim biurze. Let’s construct IT to organizacja non-profit, której głównym motorem jest zwiększenie grona osób, które rozumieją budownictwo i potrafią programować. Będzie mi bardzo miło, jeżeli włączysz się w te działania 🙂

Co możesz zyskać:

  • poznasz innych budowlano-programistów, co otworzy przed Tobą nowe możliwości,
  • biorąc udział w pracach w ramach repozytoriów na github’ie zbudujesz swój profil w ramach tej strony, który będzie Twoją wizytówką,
  • wykorzystasz narzędzia/biblioteki nad którymi będziemy pracować w Twoim biurze projektowym. Zdajesz już sobie sprawę jak przyjemnie jest sklejać różne biblioteki w celu uzyskania pożądanego celu. Pomyśl, że mógłbyś pobrać jako paczkę nugetową bibliotekę pokrywającą podstawowe obliczenia wytrzymałościowe w ramach EC2/EC3. Czujesz tę moc, prawda?

Obserwatorzy

Jesteś menadżerem zarządzającym zespołem inżynierów, nie masz czasu ani ochoty na naukę programowania. Czujesz jednak, że świat Ci odjeżdża, że to całe BIM’banie nie przynosi obiecanych przez marketing korzyści, że bez cyfryzacji procesów/ludzi Twój zespół pozostanie w tyle.

Możesz zachęcić ambitnych członków Twojego zespołu do włączenia się do prac społeczności Let’s construct IT licząc, że efekty ich pracy, wzrost umiejętności przełoży się na efektywność całego zespołu. Jednocześnie z tyłu głowy zdajesz sobie sprawę z ryzyka, że oni odejdą, że przejdą do IT. To oczywiście możliwe, ale jeżeli uczynisz z nich atut, Twoją kartę przetargową i będziesz stale motywował do rozwoju to uwierz mi – zaległości w budownictwie są tak duże, że dla dobrze poprowadzonych programistów pracy wystarczy tu na lata.

Społeczność ma charakter jawny – jesteśmy zawsze otwarci na nowe pomysły i wyzwania. Jeżeli masz gotowy koncept narzędzia, które wspomoże pracę Twojego zespołu a nie masz na pokładzie osób będących w stanie go zaimplemenotwać – zgłoś się do nas. Pamiętaj tylko, że efekty naszej pracy zwiększą powszechny zasób bibliotek społeczności – korzystać z nich będzie mógł każdy. Celem Let’s construct IT jest poprawa dobrostanu całej społeczności inżynierów czego nie da się zrealizować bez dobrych pomysłów na narzędzia/wtyczki.

Categories
Ogólne

Jesteś programistką/ą

Wpis 3 z 4 w serii Motywacja

Wait, what?

Prawdopodobnie ukończyłaś/eś lub jesteś w trakie studiów budowlanych. Pozycjonujesz się jako inżynier budownictwa i dokładnie tak zawodowo widzi Cię Twoje otoczenie.

Eurokody, kosztorysy, WZ-tki, umowy, rzuty, przekroje, IFC’ki – to Twój chleb powszedni. Związek powyższych haseł z programowaniem wydaje się być równie odległy co Mars.

I tak dochodzimy do mojego rozumienia słowa “programista”, które zauważ, pozbawione jest doprecyzowania, wskazania jakiego języka używasz, czy zajmujesz się stroną wizualną czy logiką aplikacji.

Dla mnie programista to ktoś, kto potrafi rozwiązać lub znaleźć rozwiązanie problemu, kto jest w stanie zamienić ludzkie czynności na zbiór precyzyjnych instrukcji, kto potrafi zalgorytmizować problem.

Przypomnij sobie Twoje studia, spójrz na swoją pracę, niemal zawsze tworzysz lub wykorzystujesz reguły, algorytmy. Prześledź proszę niniejsze sytuacje:

  • dostajesz wstępną geometrię obiektu, zakładane obciążenia, uwarunkowania środowiskowe. Po wykonaniu n-kroków wiesz jakie przekroje elementów są niezbędne, jaka klasa stali/betonu będzie odpowiednia, ile prętów trzeba włożyć w przekrój, żeby uniknąć scenariusza ‘Andrzej, to je*’,
  • dostajesz wstępną dokumentację obiektu, wyłuskujesz z niej przyjęte gabaryty elementów, dopytujesz o szczegóły, zliczasz elementy, kalkulujesz za ile warto by wejść w ten temat.

Projekt po projekcie – podążasz podobnymi torami, na pewnym poziomie abstrakcji byłbyś w stanie wydzielić zasadnicze czynności, które są niezbędne do zakończenia zadania, jesteś w stanie zalgorytmizować Twój problem.

Prawdopodobnie robisz to w języku ‘ludzkim’, opowiadając Twoim nowym kolegom/koleżankom na czym polega praca, konsultując ze starszymi wyjadaczami czy podjęte przez Ciebie działania są odpowiednie. Tylko czy aby na pewno robisz to wyłącznie w języku ‘ludzkim’?

Excel

Porównaj proszę zestaw pustych komórek, które wyświetlają się po utworzeniu nowego pliku Excela z Twoim najbardziej zaawansowanym arkuszem do obliczeń/kosztorysowania. Ździebko inne, prawda? 🙂

Według mnie aktywne korzystanie z Excela jest pierwszym wyznacznikiem, że nadajesz się na programistę. Skoro na pewnym etapie doszedłeś do wniosku, że warto przenieść ręczne obliczenia porozrzucane na kilku kartkach A4 połączonych Twoim studenckim kalkulatorem Casio w ramy ustrukturyzowanego arkusza obliczeniowego to potrafisz algorytmizować problemy.

Aha, nie przejmuj się, że Twój arkusz potrafisz zrozumieć tylko Ty. Efekty pracy początkującego programisty zazwyczaj też takie są. Dopiero praca zespołowa niejako przymusza nas do wyjścia poza ramy własnych skojarzeń/przyzwyczajeń na rzecz dobrych praktyk.

Mathcad/SMath/Scilab/Matlab

Czyli zestaw mniej popularnych narzędzi, które jednak pojawiają się w różnych firmach budowlanych. Do jednego worka wrzuciłem całą rodzinę programów, jednak jeżeli miałeś/masz okazję pracować w którymkolwiek z nich to jesteś już o krok od wkroczenia na ścieżkę programisty. Każde z nich służy do instruowania procesora w Twoim komputerze jak powinny zostać wykonane obliczenia lub w jaki sposób mają zostać zaprezentowane ich wyniki.

W świecie idealnym powyższe programy powinny służyć do szybkiego prototypowania nowych pomysłów, algorytmów. Sprawny inżynier może z ich pomocą w stosunkowo krótkim czasie sprawdzić sensowność nowej koncepcji. Po pozytywnej pierwszej fazie warto zastanowić się co dalej, jedną z możliwości jest przejście na właściwe programowanie z wykorzystaniem jednego z dostępnych języków.

Grasshopper/Dynamo

Programowanie wizualne to stale rosnący trend ostatnich lat. Żeby zrozumieć fenomen tego podejścia polecam zapoznać się ze Scratch, którego uczą się uczniowe podstawówek.

Niesamowite możliwości testowania, generowania dawniej niemożliwych brył, spinania procesów przy pomocy bloków funkcyjnych – bajka, która w wielu inżynierskich przypadkach wystarczy, jednak w moim odczuciu ma istotne ograniczenia.

Warto odnotować fenomenalną pracę wykonywaną przez Krzysztofa Wojsława, który dzieli się wiedzą związana z Grasshopperem na stronach learngrasshopper.com oraz bimcorner.com. Drugim wartym polecenia źródłem Grasshopperowej wiedzy jest Marcin Woch, który prowadzi bloga: bimdigitz.com

Jeżeli korzystasz już z powyższych narzędzi to pewnie odczuwasz pewien niedosyt – wtedy świetnym krokiem jest wejście w ‘prawdziwe’ programowanie. Algorytmizować problem już potrafisz 🙂

Categories
Ogólne

Języki programowania

Wpis 4 z 4 w serii Motywacja

Java, C++, C#, Visual Basic, Python, JavaScript, … – dlaczego tego tyle jest?

Heh, a dlaczego ludzie porozumiewają się w 7 tysiącach języków? 🙂

Informatyka to stosunkowo młoda dziedzina, która stale ewoluuje. Wraz z ciągłym rozwojem okazuje się, że rozwiązania z poprzednich lat nie zdają egzaminu zwiększonego popytu na usługi, stale rosnącej grupy użytkowników komputerów/sieci. W odpowiedzi na nowe potrzeby powstają nowe języki programowania lub istnieje konieczność znacznej modyfikacji już istniejącego języka, która wyklucza wsteczną kompatybilność z poprzednią wersją.

Wyobraź sobie, że jako administrator NASA planujesz program Apollo. Wiesz, że potrzebujesz zestawu narzędzi wspomagających obliczenia trajektorii lotu, że lot na księżyc powinien w maksymalnym stopniu polegać na przetestowanych procedurach. Zastanawiasz się w jakim języku zlecić stworzenie odpowiednich programów. W tym czasie jedynym sensownym rozwiązaniem jest Assembler – skomplikowany, niskopoziomowy język programowania. Wydajesz więc miliony $$ amerykańskich podatników na rozwój oprogramowania w tym języku.

Gdy opada kurz wzbity przez lądownik księzycowy wśród programistów rośnie na popularności COBOL, oferujący wyższą efektywność pracy, będący mniej siermiężny niż Assembler. Świetnie, tylko, że ogromne fundusze zostały władowane w rozwiązanie napisane w Assemblerze i teraz co, przepisujemy program Apollo na nowy język?

Albo inny przykład z naszego poletka. Efektywność energetyczna starych kamienic w centrach miast pozostawia wiele do życzenia. Spełnienie przez nie aktualnie wymaganych współczynników przenikania ciepła jest często niemożliwe. Czyli co? Burzymy i w to miejsce stawiamy obiekt z trójwarstwowymi ścianami? Czy może bardziej delikatnie: obklejamy dawną cegłę styropianem, metoda lekka-mokra i malujemy na pstrokate kolory tak powszechne na naszych osiedlach? Nie zawsze to co nowsze jest na tyle dobre, aby wymazać gumką poprzednie rozwiązania, zwłaszcza jeżeli poniesiono już ogromne nakłady kapitału.

Co roku pojawiają się kolejne języki programowania, które odpowiadają na specyficzne potrzeby grupy programistów. Jednocześnie niezbędne jest utrzymywanie i rozwijanie już napisanych programów – Ty jako użytkownik oczekujesz ciągłego rozwoju narzędzi z których korzystasz. Dlatego pojawianie się nowego języka nie usuwa z użycia poprzednich rozwiązań – ani programiści nie zmienią swojej specjalizacji na pstryknięcie palcami ani kod magicznie nie zostanie przetłumaczony na nowy język. Nie wspominając o testach skomplikowanych systemów.

Popularność języków programowania

Jeżeli ciekawi Cię, który język programowania jest najpowszechniej wykorzystywany to możesz odwiedzić stronę firmy TIOBE, która co miesiąc tworzy zestawienie języków ze względu na powszechność użycia. W chwili pisania tego posta TOP 3 to: Python / C / Java

Powyższy ranking nie do końca odpowiada na pytanie, które technologie są obecnie najbardziej poszukiwane na rynku pracy. W celu próby uzyskania odpowiedzi na takie pytanie polecam skorzystać z wyszukiwarki ofert pracy na portalu NoFluffJobs. Po wykonaniu paru kliknięć otrzymasz wyniki:

  • JavaScript – 677 ofert pracy
  • Java – 635
  • Python – 471
  • .NET (C#) – 292

Czyli co, uczymy się Javy* bo w sumie to 1300 ofert pracy? 😉

Porównywanie liczby aplikacji napisanych w C do obecnego popytu na programistów JavaScript porównałbym do liczby budynków w tradycyjnej technologii murowanej a zapotrzebownaia na konstrukcje szkieletowe. Wierzę, że teraz czujesz, że wybór języka, którego chcesz się nauczyć warto rozłożyć na czynniki pierwsze.

Języki programowania w budownictwie

Jestem zwolennikiem stopniowego zdobywania nowych umiejętności, najlepiej w ramach 8 godzin pracy. To założenie stanowi podstawowe założenie całego Let’s construct IT i rzutuje na wybór C# jako naszego głównego języka.

Dlaczego, zapytasz. Rozważmy dwa scenariusze dla początkującego, który pracuje w biurze projektowym, często łapie nadgodziny a po powrocie do domu czeka na niego dziecięce pandemonium:

  • ‘kurczę, ta JavaScript jest wszędzie, znajomy w to wszedł, bootcampy kuszą już za ~10k PLN, ofert pracy bez liku, wchodzę w to!’
    Super, tylko na jak długo wystarczy Ci motywacji, żeby uczyć się w czasie wolnym po 8 godzinach przepychanek z architektem, próbach dalszej optymalizacji tego już optymalne i odpowiadaniu na telefony z budowy, gdy znów coś się spier*? To kwestia indywidualna, ale moje doświadczenie wskazuje, że po 4 kawie zasób energetyczny nie odnawia się już liniowo, zaczynasz po prostu robić bokami.
  • ‘hmm, mamy w biurze x AutoCADów, y Revitów, z Tekli. Słyszałem, że można rozszerzyć możliwości tych programów, że mają jakieś API, może spróbuję, zobaczę jak i co.’
    To była moja droga (więc oczywiście musi być najlepsza, schemat identyczny jak z dziećmi 😛 ), sensowna choć dłuższa. W stosunku do pierwszego podejścia użyłbym porównania: sprint vs bieg długodystansowy. Nie każdy potrafi/ma warunki to szybkiego biegu. Życiowe ‘opony, które chwilowo trzymają nas za kolana skłaniają do rozłożenia tego wysiłku w dłuższym czasie.

Dlatego zachęcam do zapoznania się z tabelą zbierającą znane mi programy budowlane oraz języki programowania z których można korzystać w celu tworzenia wtyczek. Jeżeli poniższa lista jest niepełna/zawiera błędy daj mi znać 🙂

ProgramJęzyki API
AutoCAD + klonyAutoLisp, C++, C#
RevitC#, C++, Python
Tekla StructuresC#
AllplanPython
ArchiCADC++
Autodesk RobotC#, C++
RFEMC#, Python
AxisVMC#, C++, Python, Delphi
SCIA EngineerC#, Python

W powyższej tabeli nie uwzględniłem VBA czyli Visual Basica wkomponowanego w pakiet Office, w biurach projektowych wykorzystywanego głównie z poziomu Excela. Proszę, nie wchodź w to świadomie, to droga w jedną stronę, jego czas się skończył.

Druga ważna uwaga to fakt, że C# w powyższym zestawieniu może być zastąpiony VB.NET. Oba języki wykorzystują to samo środowisko uruchomieniowe .NET. Jednak liczba materiałów/samouczków/dokumentacji/ofer pracy zdecydowanie przechyla tę szalę (C# vs VB.NET) na rzecz C#.

C++

Pomimo faktu, że niemal każdy z dużych programów budowlanych jest napisany w tym języku – odradzam wybierania go jako pierwszy wybór. C++ jest z cała pewności ‘hard to master’, niestety nie spełnia pierwszej cześci tej maksymy, czyli ‘easy to learn’.

Python

Rozsądny wybór o ile zestaw programów z których korzystasz w biurze go wspiera. Python jest na fali, można w nim postawić stronę internetową, serwer, aplikację desktopową i wtyczkę do Allplana. Duża społeczność inżynierów i bibliotek matematycznych jest kolejną zaletą. Od niego zaczynałem, daaaaaaawno temu. Wspomnienia mam pozytywne 🙂

Punktem odniesienia Pythonowego ‘budowlano-programisty’ jest Łukasz Laba, którego w sieci można znaleźć pod adresem https://github.com/lukaszlaba

C#

Najcześciej spotykany język API w budownictwie. Odpowiedź Microsoftu na sukces Javy, która pozwoliła firmie z Redmond stworzyć cały ekosystem usług. Wykorzystywany wszędzie, dla mnie podstawowe źródło dochodów.

I to właśnie w C# będę przedstawiał zdecydowaną większość treści na tym blogu, choć w późniejszej fazie może zdarzyć coś frontendowego.

*Java vs JavaScript

To dwa diametralnie różne języki programowania. Zbieżność nazw wynika z zabiegu marketingowego, który został podjęty w 1995 roku przez firmę Netscape (łapka w górę kto pamięta tego dinozaura). W dużym uproszczeniu JavaScript jest królem frontendu, czyli stron WWW. Java z kolei … jest wszędzie (pamiętny ekran w trakcie instalacji), natomiast najcześciej spotykany jest po stronie backendu przeróżnych poważnych organizacji, czytaj banków.

Pamiętaj, nie bądź noob’em: Java != JavaScript 😉