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-06 15:06
2

Ale zrozumienie, kiedy co się sprawdza, kiedy których należy używać, i jakie są konsekwencje ich nieużycia, wymaga właśnie doświadczenia

Owszem, ale można też bazować na doświadczeniu innych. Jeśli uczeń u mechanika nie wie, jakim kluczem odkręcić dany element, to może spróbować 20 różnych. Opcje są 2: albo w końcu się uda i będzie wiedział, że do takiego celu nadaje się dany klucz, albo podczas próby numer 7 rozwali odkręcany element i pojawi się problem. Może też zapytać kogoś bardziej doświadczonego, kto od razu powie, jakim narzędziem podejść do tego tematu.

Niekoniecznie doświadczenie trzeba zdobywać w oparciu o własne działania. Równie dobrze można korzystać z wiedzy i doświadczenia innych. Jest takie powiedzenie "człowiek uczy się na błędach" - owszem, ale jeśli można, to lepiej na błędach popełnionych przez innych jakiś czas temu.


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say

Pozostało 580 znaków

2019-08-06 17:26
3

Ale ja cały czas nie mówię, żeby nie bazować na doświadczeniu innych. Ja mówię, że doświadczenia nie da się transferować, można je tylko zdobywać.

Można komuś powiedzieć, że w zetknięciu z jakimś problemem rozwiązanie X dało nam lepsze efekty niż rozwiązanie Y, ale jeśli ten ktoś nigdy nie zetknął się z takim problemem, to nie zrozumie ani czemu, ani o co w ogóle chodzi.

Przykład, który podałeś to właśnie przykład zdobywania doświadczenia przez własne działania. Uczeń ma problem, bo próbuje odkręcić element. Robi coś, więc doświadcza, z jego doświadczenia wynika, że dany element jest problematyczny. Gdy starszy kolega mu odpowie, którego narzędzia lepiej użyć, to prawdopodobnie zrozumie dlaczego, a być może też czemu na czym polegał jego błąd i z czego wynikało fiasko poprzednich prób.
Abstrahując już od tego, że odkręcanie elementów nie ma żadnego związku z inżynierią.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2019-08-06 17:26

Pozostało 580 znaków

2019-08-06 21:57
1
somekind napisał(a):

Można komuś powiedzieć, że w zetknięciu z jakimś problemem rozwiązanie X dało nam lepsze efekty niż rozwiązanie Y, ale jeśli ten ktoś nigdy nie zetknął się z takim problemem, to nie zrozumie ani czemu, ani o co w ogóle chodzi.

Ponadto szukanie gotowych recept i stosowanie ich bezmyślnie prowadzi bardzo łatwo do cargo kultu.

Uczeń widzi niebieski element i pyta mechanika, jakim kluczem go odkręcić. Mechanik wskazuje mu dany klucz. A potem za każdym razem, kiedy uczeń widzi niebieski element, próbuje ją odkręcić danym kluczem (mimo, że kolor śrubki nie będzie mieć znaczenia, po prostu przypadek sprawił, że za pierwszym razem była niebieska - no ale uczeń nie mając doświadczenia, a jedynie mając wyrwane z kontekstu info, że mechanik powiedział, że do niebieskiego elementu pasuje taki i taki klucz).

Podobną sytuację widuję np. wtedy, kiedy ludzie wyczytają jakiś przykład z tutoriala, gdzie był zastosowany wzorzec projektowy X (albo np. została użyta jakaś specyficzna konstrukcja języka) i potem są wielce przekonani, że używając danej biblioteki muszą korzystać z danego wzorca czy konstrukcji języka, bo nie odróżniają tego co faktycznie istotne i niezbędne, od tego co arbitralne.

Jednak właśnie - tutaj właśnie wiele ludzi popełnia błąd, że ucząc się z tutoriala czy podręcznika nie idą dalej i nie podejmują własnych eksperymentów, ale zakładają, że muszą robić kod cały czas w wyczytanym kiedyś tutorialu (bo gdyby eksperymentowali, to sami by odkryli/doszli do tego, że można użyć innego wzorca/konstrukcji językowej niż w tutorialu).

(przykład: wiele ludzi myśli, że reducery w Redux muszą mieć switch/case w środku, bo tak jest w tutorialach...).


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 3x, ostatnio: LukeJL, 2019-08-06 22:02
Hmm na pewno chodziło Ci o słowo arbitralne? - anonimowy 2019-08-07 07:07
@anonimowy dziwne, SJP podaje znaczenie o 180 stopni inne https://sjp.pwn.pl/slowniki/arbitralny.html ale już wiktionary podaje znaczenie takie, o jakie mi chodziło https://pl.wiktionary.org/wiki/arbitralny Obstawiam, że to dlatego, że język jest żywy i nie zawsze słowniki oddają uzus. Z drugiej strony podobno nawet językoznawcy używają tego słowa w tym drugim znaczeniu: https://sjp.pwn.pl/poradnia/haslo/Arbitralny;18789.html - LukeJL 2019-08-07 11:06
No jak tego zdania ze słowem "arbitralny" w ogóle nie rozumiem. Że niby to słowo ma oznaczać "umowne"? - somekind 2019-08-11 01:47
może jakiś anglicyzm się wdarł, bo po angielsku ma to więcej sensu https://www.merriam-webster.com/dictionary/arbitrary based on or determined by individual preference or convenience rather than by necessity or the intrinsic nature of something - LukeJL 2019-08-11 02:34

Pozostało 580 znaków

2019-08-10 09:25
3

Nie czytam tych elaboratów wyżej tylko odpowiadam na pytanie:
Nie wolno zwracać null


:D Krótko i na temat :D - cerrato 2019-08-10 09:28
A ja uważam, że lepiej null niż undefined. - Silv 2019-08-10 16:36

Pozostało 580 znaków

2019-08-10 22:45
3

Odnośnie tego co wolno - wolno zmieniać zdanie. Na różne tematy, również te technologiczne. Wspominam, bo to dość niecodzienna cecha, szczególnie u tych bardziej doświadczonych.


Pokaż pozostałe 3 komentarze
Jak ktoś robi code review i co pół godziny ma inną wizję tego, jak Twój PR powinien wyglądać, to człowiek po paru iteracjach ma ochotę powiedzieć sam to sobie zmień i już mnie nie denerwuj tylko trochę dosadniej :/ - superdurszlak 2019-08-10 22:56
Code review to już "po ptokach", a nie moment na dyskusje nad tym, jak dany fragment powinien wyglądać. Moim zdaniem tego typu dyskusje to etap analizy i wstępnego planowania - właśnie po to, żeby potem ograniczyć wojenki, zaskoczenia i inne nieprzyjemności. Ja raczej mówię o zmianie zdania w szerszym kontekście - np. testujesz bibliotekę w wersji 0.0.1 i jest niestabilna, a potem przez kolejne 5 lat opowiadasz, żeby trzymać się od niej z daleka. Albo np. nie dotykasz danego obszaru od 5 lat i powtarzasz opinie np. z 2012. - psmyrdek 2019-08-10 22:59
ja jak wyszedł VSCode to go palcem nie tykałem, tylko w Atomie robiłem. A teraz proszę bardzo, piszę w VSCode (inna sprawa, że faktycznie właśnie VSCode jak wychodził to był gówniany, i dopiero potem to doprowadzili do poziomu używalności). Więc czasem trzeba dać pewnym narzędziom czas na to, żeby się rozwinęły. - LukeJL 2019-08-11 00:07
@superdurszlak: to brzmi jak jakaś patologia. - somekind 2019-08-11 01:48

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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