Dla początkujących - co wolno, a czego nie wolno robić w programowaniu

Odpowiedz Nowy wątek
2019-08-03 01:01
19

Trochę mnie już męczy - tym bardziej, że często siedzę w dziale np. Edukacja czy wątkach bardziej entry level - że ludzie, którzy m.in.

  • uczą się podstaw programowania
  • mają jakieś podstawy i chcą zrobić krok dalej np. zacząć budować aplikacje webowe
  • mają pomysł na aplikację ale nie wiedzą, od której strony się za to zabrać
  • nauczyli się jakichś narzędzi, a teraz nie wiedzą, do czego je wykorzystać

Powtarzają jak mantrę jedno i to samo pytanie, zadawane pod różnymi postaciami, w mniej lub bardziej zawoalowany sposób, jednak zawsze sprowadzające się do tego samego dylematu:

Czy wolno mi wykorzystać framework X do zrobienia Y? Czy mogę napisać aplikację, która robi A w języku B?

Więc chyba najwyższa pora, by raz, wyraźnie i definitywnie odpowiedzieć na to pytanie nurtujące pokolenia:

TL;DR tak, wolno.

Nikt Ci nie może zabronić eksperymentowania i sprawdzania co działa, a co nie. Bycie programistą nie polega na tym, że robisz wszystko w jedyny sposób, dzierżąc dumnie w dłoni młotek i wbijając nim wszystko, co choć z grubsza przypomina gwoździa. Znaczy - tacy też są, ale chyba nie cieszą się zbyt wielkim poważaniem. Są też ludzie, dla których jedynym słusznym podejściem jest ich własne, niezależnie od faktów - które nie zawsze działają na ich korzyść. Czasami mogą być przekonywujący w swoich wywodach, a czasami sprzeciw lub wątpliwości wywołują u nich furię.

Jest jeszcze jedna grupa programistów, która na pytanie czy X nadaje się do Y? prawdopodobnie odpowie to zależy. I to jest zwykle najlepsza odpowiedź, bo istnieją tysiące czynników wpływających na odpowiedź na tego typu pytania. Dopiero z biegiem czasu uczysz się dostrzegać te czynniki i na ich podstawie dokonywać osądu... ale by móc dokonać trafnego osądu, musisz jak najlepiej znać kontekst - a takie ogólne pytania są go zwyczajnie pozbawione.

Szczękanie zębami w strachu, że wykorzystasz język/bibliotekę do celu, do którego nie została przewidziana donikąd Cię nie zaprowadzi. Niczego się w ten sposób nie nauczysz. Natomiast jeśli zamiast się zamartwiać, czy wolno Ci pisać coś w czymś po prostu spróbujesz, możesz się nauczyć kilku rzeczy:

  • że w ogóle nie da się tego zrobić
  • że da się zrobić, ale szkoda zachodu
  • że da się zrobić, ale kiepsko to działa i warto by poszukać innego rozwiązania
  • że da się zrobić i nawet szczególnie to nie boli
  • eureka, bibilioteka A w połączeniu z B doskonale nadaje się do robienia C!

Przy czym pewnie mnóstwo ludzi już to przed Tobą odkryło, jedni metodą prób i błędów, inni czytając książki, jeszcze inni prowadząc teoretyczne rozważania (i po drodze udowodnili pewnie coś ważnego, z czym wypadałoby się zapoznać). Ale Ty nie siedzisz w ich głowach, i jeśli nie zdążyłeś się czegoś dowiedzieć z książek, publikacji, wykładu na studiach albo czyjejś prelekcji na konferencji, to równie dobrze możesz spróbować na własnej skórze.

Czego więc nie wolno robić w programowaniu?

  • rzeczy niezgodnych z prawem
  • rzeczy łamiących licencje i inne takie
  • zakładać, że jest się najlepszym programistą na świecie
  • zakładać, że nie da się czegoś zrobić lepiej
  • nie robić nic ze strachu, że będzie zrobione "nieodpowiednio"

Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 1x, ostatnio: superdurszlak, 2019-08-03 11:22
2019-08-03 01:56
0

My thoughts exactly - jak to się mówi :) Programowanie to sztuka/rzemiosło a nie jakieś ścisłe wytyczne.

To nie jest coś, co jest jakąś tam bryłą wiedzy, którą trzeba się nauczyć, tylko to jest coś, co trzeba samemu opanować "na czuja" - bo programowanie polega głównie na rozwiązywaniu problemów.

A rozwiązywania problemów trzeba się nauczyć samemu. Nie znaczy, że trzeba wszystko klepać samemu, umiejętność wyszukania i nauczenia się biblioteki to też pewna samodzielność. Podobnie jak choćby umiejętność zrobienia proof of concept "czy to się da zrobić", ew. przeszukania zasobów internetu w poszukiwaniu prawdziwych case studies, kiedy ktoś użył np. jakiejś bazy danych do czegoś i czy mu się to opłaciło czy nie (zamiast pytania typu "czy Mongo nadaje się do klona FB?" czy podobnego)

Tak samo umiejętność opanowywania skutecznego stosowania wzorców projektowych i wiedzę o tym, kiedy stosować, a kiedy nie stosować danego wzorca - tego też trzeba się samemu nauczyć tak jak wiedzy o tym. Więc pytania typu "czy mogę użyć wzorca X w taki sposób" są równie bezsensowne jak "czy mogę zakładać slipki czy lepiej bokserki".


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 2x, ostatnio: LukeJL, 2019-08-03 02:01

Pozostało 580 znaków

2019-08-03 04:27
3
LukeJL napisał(a):

My thoughts exactly - jak to się mówi :) Programowanie to sztuka/rzemiosło a nie jakieś ścisłe wytyczne.

Nie zgadzam się. W moim rozumieniu programowanie czasem może być sztuką, ale czasem powinno/musi być być inżynierią. Co do rzemiosła – nie wiem. Ciekawe rozróżnienie zostało podane na Wikipedii: https://pl.wikipedia.org/wiki[...]eria,_rzemios%C5%82o_i_sztuka

To nie jest coś, co jest jakąś tam bryłą wiedzy, którą trzeba się nauczyć, tylko to jest coś, co trzeba samemu opanować "na czuja" - bo programowanie polega głównie na rozwiązywaniu problemów.

Tak, ale zauważ, @LukeJL, że równie dobrze można tak powiedzieć o programowaniu układu sterującego ruchem promu kosmicznego, co o budowaniu mostu. Jedno i drugie wymaga stosowania się do pewnych zasad niezależnie od tego, czy dana osoba uznaje te zasady za właściwe, czy nie. (Jeśli nie – należy zmienić zweryfikować zasady, a nie przestać się do nich stosować). W dalszej części swojego posta wspominasz między wersami o tym, że należy podać kontekst, mówiąc o wyborach w programowaniu. I moim zdaniem należy właśnie podkreślić kontekst i/lub zasady, zamiast podkreślenia opanowywania "na czuja".

Chyba że mówisz o programowaniu w oddzieleniu od inżynierii (wtedy bym się zgodził z podkreśleniem). Jednak ogólnie – nie zgadzam się też z takim podejściem; to jednak inny temat.


edytowany 4x, ostatnio: Silv, 2019-08-03 04:32

Pozostało 580 znaków

2019-08-03 07:48
2

spoko, tylko że pytanie "czy wolno" może się odnosić też do sytuacji służbowej gdzie juniorowi tysiąc razy się powie i napisze "nie wolno" a ten przeczyta że programowanie jest sztuką i po cichu będzie odp* głupoty

Pozostało 580 znaków

2019-08-03 08:01
1
Miang napisał(a):

spoko, tylko że pytanie "czy wolno" może się odnosić też do sytuacji służbowej gdzie juniorowi tysiąc razy się powie i napisze "nie wolno" a ten przeczyta że programowanie jest sztuką i po cichu będzie odp* głupoty

Jeśli junior pyta na forum, czy wolno mu pisać serwis z, powiedzmy, przepisami na domowy twaróg w Spring Boocie albo w czym powinien napisać kółko i krzyżyk to coś chyba poszło mocno nie tak przy rekrutacji :)


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 1x, ostatnio: superdurszlak, 2019-08-03 08:03
ale czasem można poznać że dane pytanie jest np. zadaniem ze studiów tylko że autor zapomniał podać połowy warunków brzegowych - Miang 2019-08-03 08:03
No, ale pisałem też w poście o tym jak ważny jest kontekst. Poza tym jak widzę że ktoś robi copypaste zadania ze studiów to przeważnie po prostu raportuję i wątek spada z rowerka - superdurszlak 2019-08-03 08:06

Pozostało 580 znaków

2019-08-03 08:55
3

Jeśli programista robi "sztukę", w kodzie to taki kod potem jest cierniem w dupie systemu. Wiadomo - IT to młoda dziedzina ale już mamy jakieś standardy. Jak pisze się jakieś większe systemy www to według wzorca MVC. Co prawda teraz wprowadza się reaktywność, ale nadal to poligon i nie wiadomo jakie podejście wygra. Jak jakieś API to wiadomo, że WCF, SOAP, lub lekki REST po HTTP.Aplikacje okienkowe - jeśli coś małego to na eventach z kreatora można zrobić, ale, żeby miało to sensowną strukturę to może MVC lub MVVM. Też już są jakieś standardy składania obiektów przez fabryki i wstrzykiwanie zależności - mało kto powinien ręcznie robić obiekty przez new. Są zasady, luźnego powiązania komponentów systemu .... tego są tony już przemaglowanej praktycznie wiedzy z ostatnich 50 lat. Nie jest tego mało, ale wystarczy poczytać. Mówienie, że programowanie to sztuka i jak pionierzy rozwiązujemy problemy, jest co najmniej ignorancją. Owszem znajduje się problemy, które nie mają rozwiązania gdzieś opisanego, ale to jest raczej obecnie rzadkie. LZD(Liczba Z d**y) ale 99% problemów jakie napotyka Junior jest dobrze rozpoznane, ktoś już to robił i jest 1-2 najlepsze sposoby na jego rozwiązanie. Robienie tutaj sztuki nie sprzyja dobremu kodowi, a sprawia często błędne wrażenie dla autora kodu, że jest zajebisty i utwierdza się w pisaniu antywzorców.

Pozostało 580 znaków

2019-08-03 11:50
1

@somedev: tylko zauważ, to co opisujesz to jest trochę inny etap i inny poziom rozważań. Delikwent, który właśnie wziął szturmem kolejny rozdział tutoriala i czuje, że chce napisać swoją aplikację tylko nie wie, w czym i jaką to trochę inny poziom dyskusji niż ktoś, kto ma dylemat czy lecieć w MCV czy w reaktywność albo czy w takim a siakim przypadku jest sens pchać się w kolejny API endpoint i strzelać do niego z karabinu maszynowego, czy jednak zrobić websockety. Tu już na ogół jest podany jakikolwiek kontekst. Tu na ogół OP ma zagwozdkę, jak coś zrobić lepiej, albo żeby w ogóle miało ręce i nogi bo wychodzi mu kaszanka, pyta o dobre praktyki itp. Szuka porad i opinii, a nie pozwolenia na robienie czegoś albo potwierdzenia że nikt go nie zamknie za używanie tej biblioteki a nie innej.

Co innego z kimś na poziomie przerobiłem 3/4 tutoriala i chciałbym napisać swoją aplikację do X. MVC, SOAP, REST to dla takiego jakieś niezrozumiałe zlepki literek, być może będzie kojarzył MVC bo akurat składał Contoso University z kursu Microsoftu albo klecił coś w NodeJS z tutoriala do NodeJS i tam pisało, że to jest RESTowe. Tutaj pojawiają się problemy egzystencjalne w stylu:

chcę napisać apkę webową czy mogę ją pisać w Pythonie i Django?

A skądże, Django to tylko taki bait na programistów, potem skanujemy GitHuba i zamykamy w więzieniu ludzi piszących apki webowe w Django.

chcę napisać platformówkę, czy mogę ją napisać w Javie?

Nie, pisanie platformówek w Javie jest zabronione przez konwencje genewskie

czy mogę użyć Laravela do napisania apki webowej, która będzie zwracała negatyw wrzuconego obrazka?

Broń Boże, Laravela używa się do pisania stron dla sklepów rowerowych, ewentualnie apek do zwracania wpisanego tekstu tyłem, jeśli chcesz robić negatywy obrazków to zostaje Ci Symfony.

Na tego typu pytania aż cisną się na język (na klawiaturę?) tego typu sarkastyczne odpowiedzi, bo pytania są zwyczajnie z czapy. Na ogół są bez kontekstu - ba, kontekst w ogóle nie istnieje, bo OP dopiero ma jakiś pomysł albo wręcz szuka pomysłu - nie wiadomo, czego OP oczekuje. Na ogół nawet z punktu widzenia choćby użycia jakichś wzorców są bez znaczenia, bo co za różnica czy wykorzystasz MVC w tym czy innym frameworku, co za różnica czy postawi REST API ze Spring Bootem czy z Flaskiem, skoro po prostu chce mieć jakieś REST API (o ile już wie, że chce!) i nawet nie jest w stanie sformułować jakichś dodatkowych wymagań, które mogłyby wpłynąć na ostateczny wybór.


Prosząc o pomoc w wiadomości prywatnej odbierasz sobie szansę na otrzymanie pomocy od kogoś bardziej kompetentnego :)
edytowany 1x, ostatnio: superdurszlak, 2019-08-03 11:51

Pozostało 580 znaków

2019-08-03 12:12
0
Silv napisał(a):
LukeJL napisał(a):

My thoughts exactly - jak to się mówi :) Programowanie to sztuka/rzemiosło a nie jakieś ścisłe wytyczne.

Nie zgadzam się. W moim rozumieniu programowanie czasem może być sztuką, ale czasem powinno/musi być być inżynierią. Co do rzemiosła – nie wiem. Ciekawe rozróżnienie zostało podane na Wikipedii: https://pl.wikipedia.org/wiki[...]eria,_rzemios%C5%82o_i_sztuka

wg tej definicji na wikipedii to programowanie jest jednocześnie sztuką, rzemiosłem jak i inżynierią:

w inżynierii pierwszoplanową rolę gra wiedza techniczno-naukowa, podczas gdy w rzemiośle najważniejsze jest doświadczenie a w sztuce kreatywność.

W pracy programisty widzę element kreatywny - musisz wymyśleć jak coś zrobić czyli kreatywność (co nie zawsze jest oczywiste, trzeba czasem przemyśleć różne rozwiązania, pogłówkować), jest element doświadczenia (trzeba popróbować różne rzeczy, i wysuwać wnioski na podstawie swoich błędów i sukcesów z przeszłości), jak i gra rolę wiedza techniczno-naukowa (opis algorytmów w książce czy spis wzorców projektowych to przykłady takiej wiedzy).

somedev napisał(a):

Mówienie, że programowanie to sztuka i jak pionierzy rozwiązujemy problemy, jest co najmniej ignorancją.

Jeśli nie rozwiązujesz problemów jako programista, to twoja praca jest w kolejce do zastąpienia przez AI, bo generatory kodu wg ustalonych schematów już są.


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);

Pozostało 580 znaków

2019-08-03 12:40
0

Ta... generatory kodu to już miały powstać w latach 80. Twoja praca chyba będzie prędzej zastąpiona przez innego programistę, bo nie wiem jak można rak bardzo nie rozumieć tekstu ;) Wszak odnoszę się do pracy juniora. Nikt zdrowy nie zleci juniorowi odkrywczej pracy. Pisałem kilka systemów real time w których trzeba było wymyślić pare sposobów na przetwarzanie live pewnych danych. Samo opracowanie sposobu było odkrywcze i trwało z polowe czasu przeznaczonego na projekt ale potem w kodzie było to z 20% całości a reszte 80% oczywistego kodu też musiał ktoś napisać i potem zintegrować - tutaj wkraczają juniorzy.

Pozostało 580 znaków

2019-08-03 12:57
1

Sam zmieniłeś kontekst wypowiedzi. Najpierw:

somedev napisał(a):

Mówienie, że programowanie to sztuka i jak pionierzy rozwiązujemy problemy, jest co najmniej ignorancją.

Czyli rozumiem, że mówisz ogólnie o programistach. A potem dopiero napisałeś, że junior:

ale 99% problemów jakie napotyka Junior jest dobrze rozpoznane, ktoś już to robił i jest 1-2 najlepsze sposoby na jego rozwiązanie.

Co do juniorów to jak dla mnie, to też muszą rozwiązywać problemy. Bo nawet odnalezienie tych 1-2 najlepszych sposobów na jego rozwiązanie wymaga np. znalezienia informacji na ten temat w StackOverflow (co nie każdy umie, szukanie informacji to również problem solving).

Powiedzmy, że taki junior może mieć za zadanie wycentrować diva w pionie w CSS. I jest to realny problem do rozwiązania (z którego się nawet ludzie śmieją, że to jeszcze do niedawna był największy problem w CSS). Więc taki junior musi albo wykombinować samemu, albo zajrzeć na Stack Overflow czy poczytać o flexbox itp. ale tak czy siak musi umieć rozwiązać ten problem, bo od tego zależy czy task przejdzie do kolumny Done. Tak więc gdyby nie było żadnych problemów, to ten junior w ogóle nie byłby potrzebny. A jeśli zatrudniają juniora, to widocznie jakieś problemy są do rozwiązania.


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 1x, ostatnio: LukeJL, 2019-08-03 12:58
Widocznie junior front-end developer powinien wycentrować diva w poziomie, a centrowanie w pionie zostawić midowi albo seniorowi :] dobrze że ktoś wymyślił pair programming, przynajmniej będzie można to popchnąć w jednym commicie - superdurszlak 2019-08-03 13:05

Pozostało 580 znaków

2019-08-03 13:19
2

Odnośnie rozwiązań przy budowaniu apek.
Musi być ruch w biznesie, nie w programowaniu, a w biznesie, bo programowanie to biznes.

Wiele osób się zastawia czemu powstaje tyle rozwiązań i czemu aż tle jest utrzymywanych, bo to jest biznes.
Firma X robi aplikację, po kilku latach firma Y dzwoni i proponuje aplikację na innym frameworku+coś tam gratis, potem po kilku firma Z znowu przekonuje, że zrobi coś szybszego na innym fw w którym się specjalizuje i tak się biznes kręci :)
Gdyby wszystkie rozwiązania były idealne to z czasem nie byłoby pracy, bo nie byłoby co robić, wszystko działa super to po co zmieniać.
Takie decyzje są zwykle na poziomie biznesowym, a nie logiczno-programistycznym.

Nawet ostatnio przerabiałem stronę, goowno straszne, pytam się po co w ogóle to przerabiać skoro taniej zaorać i zrobić nowe, a to się okazało, że firma syna kolegi prezesa ją robiła i mamy stronę utrzymywać przy życiu za wszelką cenę.


Pokaż pozostałe 3 komentarze
"Firma X robi aplikację, po kilku latach firma Y dzwoni i proponuje aplikację na innym frameworku+coś tam gratis, potem po kilku firma Z ", a ja mam zupełnie inne doświadczenie. Może przy małych projektach/ firmach to tak działa, ale przy dużych kluczowych systemach obsługujących średnie i duże firmy, argument szybszego działania na nowszym frameworku nie jest żadnym argumentem. Wprowadzenie nowego systemu często wiąże się z ogromnymi problemami organizacyjnymi (np. szkolenia), migracją danych, przerwami w pracy i ogólnie kosztami niezwiązanymi bezpośrednio z informatyką. - cw 2019-08-06 11:08
W takim przypadku ten gratis może być dla firmy na dużym minusie. Poza tym często w tego typu projektach współpraca opiera się na pewnym zaufaniu (oczywiście prawnicy muszą zrobić swoje) zdobytym przez lata rozwoju oprogramowania np. programiści "czują" problemu firmy i rozumieją jej specyfikę - cw 2019-08-06 11:10
@cw: co to znaczy "prawnicy muszą zrobić swoje"? - Silv 2019-08-06 21:45
bo zwykle są dwie płaszczyzny współpracy, ta oficjalna opisana umowami oraz mniej oficjalna oparta na długoletniej współpracy ze sobą poszczególnych osób - cw 2019-08-06 23:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

2 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 2

Robot: Bot (2x)