Czy na codzień w pracy klepiecie kod z pamięci?

0

Już jakiś czas uczę się programować jednak cały czas muszę sprawdzać w dokumentacji albo na forach jak coś zrobić mimo, że już kiedyś coś takiego robiłem. A jak już mam zrobić coś czego w życiu nie robiłem i nawet nie widziałem kodu, ale wiem że to konkretnie jest mi potrzebne to wpisuje zagadnienie w google i zwykle wyskakują mi gotowce albo kilka kodów, których połączenie rozwiąże problem. Tylko czy to serio o to chodzi?

Jak wygląda to u was - jak coś robicie w pracy to też kopiujecie sobie gotowe rozwiązanie z innego projektu albo ciągle sięgacie do dokumentacji bo nie możecie sobie przypomnieć dokładnie składni?
Zaczyna mnie już dręczyć myśl, że mój mózg się do tego nie nadaje... Pamiętam składnie podstawowych rzeczy, pamiętam że istnieje to czy tamto co można zastowować w rozwiązaniu, ale nie pamiętam jak wyglądało. Potrafię nawet czytając jakieś kody zapamiętać, że ktoś ciekawie coś rozwiązał, ale wtedy pamiętam bardziej takie słowne wyjaśnienie, że "użył takiej funkcji i dopisał jeszcze funkcje obsługującą to, a no i tutaj dał zamiast int var żeby później...." itp.

Po prostu powiedzcie czy wszystko macie w głowie i sięgacie do dokumentacji albo stackoverflow sporadycznie?

3
Pozytywny_programista napisał(a):

Już jakiś czas...

Co to znaczy "jakiś czas"...? :)

U mnie jest tak, że po prostu rzeczy, których w kółko używam (ale tak naprawdę w kółko!) jakoś same wchodzą w pamięć i same przychodzą, kiedy są potrzebne. A patrzenie wciąż do dokumentacji to chyba standard...

A uważam się za nie najgorszego programistycznie osobnika, a i tak w kółko czegoś nowego uczę się ze stacka i inncyh forów.

0
koszalek-opalek napisał(a):
Pozytywny_programista napisał(a):

Już jakiś czas...

Co to znaczy "jakiś czas"...? :)

Jakiś czas tzn. tak około 1.5 roku może bliżej 2 lat. Początkowo to było skakanie po technologiach stąd też czasem łapie się na tym, że w czymś była jakaś opcja, a w czymś innym nie ma / jest nazwana inaczej i już leci czas na wyszukiwanie.
Głównie rozwiązując zadania ze stron typu SPOJ albo codewars pamiętam konstrukcje pętli, warunki, takie podstawy typu czym różnią się konkretne typy danych, jakieś podstawowe algorytmy na sortowanie chociażby. Trochę obawiam się, że jak juz zacznę kiedyś rozsyłać CV i ktoś zaprosi mnie na test i da jakieś zadanie, a ja będę musiał szperać po dokumentacji albo odpalić stronę gdzie pamiętam, że był potrzebny mi kod to zostanę wyśmiany i podziękują mi od razu bo nie umiem programować tylko ściągam gotowce :/

3

Obecnie naprawdę sporo IDE sporo podpowiada, a patrzę raczej aby pisać zgodnie z dokumentacją w miarę poprawny kod, aby nie było przypału ;)

5

Dobra, ale uściślij o co Ci dokładnie chodzi. Bo tutaj przynajmniej widzę dwie możliwości interpretacji:

  • sprawdzanie, jak się daną funkcję wywołuje, jakie argumenty trzeba przekazać, w jakiej kolejności wywołać poszczególne metody itp.
  • kopiowanie całych algorytmów/mechanizmów działania.

Odnośnie pierwszego - to jest logiczne, że jeśli nie korzystasz z jakichś funkcji codziennie, to że nie będziesz pamiętał szczegółów z nimi związanych. Tutaj normalną rzeczą jest zajrzenie do dokumentacji, chociaż nieraz nie jest to potrzebne, bo przecież IDE podpowiada, są różne mechanizmy uzupełniania kodu (ang. code completion), opisowe nazwy zmiennych i funkcji też pomagają w pracy. W każdym razie - nie ma powodu do wstydu ;)

A w zakresie drugiego punktu - zależy, czy ponownie wykorzystujesz wcześniejszy kod, bo inaczej byś nie umiał, czy tak jest Ci łatwiej. Sensowne jest podejście, w którym nie piszesz wszystkiego za każdym razem od nowa, tylko bierzesz coś, nad czym już pracowałeś, trochę przerabiasz i wykorzystujesz ponownie. Po pierwsze - w ten sposób oszczędzasz czas, a po drugie - skoro dany kod jest już gdzieś wykorzystywany, są duże szanse, że ewentualne błędy w nim zostały już wyłapane i poprawione. Tylko zakładam, że takie działanie jest wynikiem oszczędzania czasu oraz energii, a nie kwestią tego, że nie umiałbyś tego napisać ponownie. Bo bezmyślne kopiowanie, czy to swojego, czy gdzieś znalezionego kodu jest dość słabe. Może i nawet (zazwyczaj) działać, ale gdy nie rozumiesz co się dzieje, to po pierwsze nie możesz być pewien, czy nie ma tam błędów, a po drugie - kiepsko widzę jakiekolwiek poprawki w czymś, czego się nie ogarnia.

podstawowe algorytmy na sortowanie chociażby

Prawda jest taka, że taka znajomość przydaje się głównie na etapie nauki plus może podczas rozmów rekrutacyjnych. W 99% przypadków pisania realnych aplikacji, nikt raczej nie pisze samemu sortowania, bo są gotowe biblioteki, moduły i inne rozwiązania, które na pewno zrobią to poprawnie, prawdopodobnie zgrabniej i szybciej, niż jakiś kod pisany na szybko na kolanie, a do tego pozwolą zaoszczędzić parę godzin, które by trzeba było poświęcić na samodzielne pisanie algorytmu.

9

Ja nie, ja przepisuję z książki.

0
cerrato napisał(a):

Dobra, ale uściślij o co Ci dokładnie chodzi. Bo tutaj przynajmniej widzę dwie możliwości interpretacji:

  • sprawdzanie, jak się daną funkcję wywołuje, jakie argumenty trzeba przekazać, w jakiej kolejności wywołać poszczególne metody itp.
  • kopiowanie całych algorytmów/mechanizmów działania.

A w zakresie drugiego punktu - zależy, czy ponownie wykorzystujesz wcześniejszy kod, bo inaczej byś nie umiał, czy tak jest Ci łatwiej. Sensowne jest podejście, w którym nie piszesz wszystkiego za każdym razem od nowa, tylko bierzesz coś, nad czym już pracowałeś, trochę przerabiasz i wykorzystujesz ponownie.

Nie wiem jak to ująć inaczej ale nie umiem skorzystać z kodu, którego nie rozumiem bo przecież muszę wiedzieć gdzie go wkleić i co zmienić żeby pasował do mojego problemu. Także takie typowe gotowce na zasadzie "o ktoś zrobił to ja to przekleję i oddam jako swoje" to nie. Ale właśnie takie rzeczy, że coś mi nie działa, znajduję kod, który realizuje to co ja chcę zrobić, przerabiam mój na wzór tamtego albo przerabiam tamten pod resztę mojego kodu.

Jeśli mam już wcześniej coś co działa, a spędziłem na tym kilka godzin żeby działało to często kusi mnie skopiować go jak leci chociaż też gryzie mnie wtedy myśl, że ok raz to zrobiłem ale może nie umiem tego powtórzyć? Patrzę na kod - rozumiem go, pamiętam jak do tego doszedłem. Ale jak myślę, żeby pisać go od nowa jak nie jest główną funkcjonalnością nowego programu to trochę idę na łatwiznę i kopiuje. Chyba z lenistwa albo z przerażenia, że znowu zajmie mi to tyle samo godzin.

Bywały i takie razy, że chciałem zrobić coś czego kompletnie nigdy nie robiłem, nawet nie słyszałem o tym. No i zaczynałem szukanie w dokumentacji - jedna funkcja, druga, dziesiąta. Powiedzmy dwie pasowały teoretycznie w zamyśle do mojego programu ale nie rozumiałem ich więc próbowałem linia po linii dojść do tego o co chodzi i co to robi. Jak rozumiałem to używałem u siebie. Jak nie zrozumiałem to szukałem innego.

4

Wydaje mi się, że to, o czym piszesz jest całkowicie normalne. To trochę jakbyś miał mechanika, który ma swoje sprawdzone patenty, narzędzia, doświadczenie itp. Przecież koleś przy każdym samochodzie nie jedzie do Castoramy i nie kupuje kompletu kluczy, tylko korzysta z tego, co już ma i co się sprawdziło ;)

Wydaje mi się nawet, że logiczne jest korzystanie z gotowych fragmentów, a pisanie za każdym razem wszystkiego od zera byłoby bezsensownym marnowaniem czasu.

Fajnie, że rozumiesz o co chodzi, ale uwierz mi - wiele osób potrafi coś znaleźć w necie, bezmyślnie wkleić, a potem zakłada wątek na 4P, bo nie czai, co się dzieje w "jego" aplikacji ;)

0

Dzięki wam :) Trochę mi lżej na duszy.
To jeszcze takie pytanie około tematu - na pewno umiem jeszcze mniej niż mi się wydaje. Jest jakiś taki próg znajomości zagadnień, algorytmów, czasu wykonania konkretnego zadania, który pozwoliłby mi określić, że mogę/nie mogę aplikować na jakieś praktyki/staże? Z pewnością w tym roku to jeszcze za wcześnie ale chciałby móc jakoś sobie to rozpisać żeby wiedzieć do czego dążę. W ofertach pracy przewija się "znajomość języka programowania <tu daj dowolny na który chcesz aplikować>, znajomość jego frameworka lub technologii towarzyszącej, sql itd. Tylko no jak to określić?

Skoro powiedzmy jakoś sobie radzę z wyszukiwaniem informacji, używam ich, jakieś proste programy typu todolist, notatnik i takie pierdoły działają to jest to jakikolwiek poziom? Czy to już takie umiejętności dla ucznia podstawówki?
Gdzieś rzuciło mi się w oczy, że proponowali komuś napisanie programu do obsługi ftp - tutaj nie wiem nawet jak miałbym się za to zabrać chociaż mam chęć spróbować i pewnie w końcu zacznę szukać jakichś wskazówek.

3

Nikt (normalny) nie będzie oczekiwał od stażysty/praktykanta, żeby był on samodzielny i zdolny do robienia przydatnych do czegokolwiek rzeczy, a już na pewno nie na samym początku.

Nie wiem, czy masz prawo jazdy, jeśli nie masz to może i przykładu nie zrozumiesz :P Ale z tym jest podobnie, jak z osobą świeżo po egzaminie. Teoretycznie może jeździć,ale tak naprawdę po tych 20-30 wyjechanych godzinach to ona nic nie umie, kurs jedynie ją przygotował do zdania egzaminu, a dopiero teraz, gdy zacznie samodzielnie jeździć, to nastąpi właściwa nauka, która trwa miesiącami albo latami.

Czy myślisz, że ktoś by zatrudnił osobę świeżo po egzaminie jako kierowcę? Raczej nie, prawda? Tak samo jest z Tobą - jeśli uczciwie powiesz, że nie masz doświadczenia, że znasz niewiele, ale będziesz chciał się uczyć i rozwijać, to gdy Cię gdzieś przyjmą, nie powinni mieć pretensji, że nie piszesz samodzielnie skomplikowanych aplikacji. Zresztą po to jest rekrutacja, żeby sprawdzić, czy jesteś osoba, która nie ma doświadczenia, ale jest ogarnięta i rokująca, czy może jesteś totalną porażką i nadajesz się jedynie do pracy w charakterze pracownika utrzymania czystości w parkach miejskich ;)

Inną sprawą jest też, jak się przedstawisz podczas zgłaszania swojej kandydatury. Bo jeśli mocno ubarwisz swój skill, to potem pretensje możesz mieć tylko do siebie. Ale jeśli wprost zaznaczysz, że idziesz się uczyć, to firma powinna Ci to umożliwić, nadzorować i pomagać. A jeśli kogoś takiego nie szukają, to po prostu Cię nie wezmą i tyle w temacie.

3

Już jakiś czas uczę się programować jednak cały czas muszę sprawdzać w dokumentacji albo na forach jak coś zrobić mimo, że już kiedyś coś takiego robiłem.

To normalne. Na dodatek to nie znika, bo co prawda, jeśli będziesz dużo praktykować programowanie, to ci się większość rzeczy sama utrwali, to i tak:

  1. czasem czegoś zapomnisz (jakiejś konkretnej rzeczy) i znowu - będziesz musiał spojrzeć do dokumentacji (co nie jest problemem, ile to zajmuje - pół minuty?)
  2. będziesz musiał się douczać nowych rzeczy (np. poznawać nową bibliotekę, nowy projekt, nowe API, nowy algorytm itp.), więc ciągle będzie tak, że z jednej strony będziesz miał jakąś tam wiedzę utrwaloną, ale będzie też pełno wiedzy, którą będziesz musiał poznawać za pomocą dokumentacji, StackOverflow, pytając innych programistów itp.)
  3. czasem pewne rzeczy trzeba samemu rozkminić, rzeczy, których nie będzie w żadnej dokumentacji, bo będą zbyt specyficzne i dotyczące konkretnego problemu. Więc znowu nie będziesz mógł czegoś szybko zakodować, bo będziesz musiał rozkminiać albo eksperymentować, zanim wpadniesz na rozwiązanie.
5
Pozytywny_programista napisał(a):

Jak wygląda to u was - jak coś robicie w pracy to też kopiujecie sobie gotowe rozwiązanie z innego projektu albo ciągle sięgacie do dokumentacji bo nie możecie sobie przypomnieć dokładnie składni?

To zależy. Jeżeli coś jest dla mnie nowe/świeże lub nie używałem tego w ogóle to sięgam do zasobów githuba, stackoverflow i dokumentacji. Jeżeli zakoduje coś dwa-trzy razy, to kolejnym razem piszę to już z pamięci. Oczywiście pamięć bywa zawodna i czasem coś źle zapamiętam/zapomnę, przez co muszę znów sięgać do zasobów Internetu. Staram się zapamiętywać jak najwięcej, ponieważ kopiowanie kodu jest bardziej czasochłonne niż pisanie z pamięci. Wolny czas mogę dzięki temu przeznaczyć na picie kawy i granie w darta w kuchni.

1
Pozytywny_programista napisał(a):

Zaczyna mnie już dręczyć myśl, że mój mózg się do tego nie nadaje...

Ci bardziej otrzaskani nazywają to SODD (Stack Overflow Driven Development)
SOOD niedługo może zostać uznaną dyscypliną naukową. Więc nie przejmuj się, dajesz radę, masz dobre podejście tylko jeszcze nie potrafisz tego odpowiednio fachowo nazwać. ;)

https://dzone.com/articles/stack-overflow-driven-development-sodd-its-really
itp

PS
Jest jeszcze Google Oriented Programming ;)

1

Czasami korzystam z dokumentacji, SO raczej unikam. Prawde powiedziawszy wole nauczyć się choć podstaw narzędzia zamiast klepać na pałe i dlatego daję książki/kursy/prezentacje na 1 ogień.
Czasami korzystam w google w celu znalezienia dyskusji np. takich albo jakiś nowości których jeszcze nie ma za bardzo opisanych ;]

2
scibi92 napisał(a):

Czasami korzystam z dokumentacji, SO raczej unikam. Prawde powiedziawszy wole nauczyć się choć podstaw narzędzia zamiast klepać na pałe i dlatego daję książki/kursy/prezentacje na 1 ogień.
Czasami korzystam w google w celu znalezienia dyskusji np. takich albo jakiś nowości których jeszcze nie ma za bardzo opisanych ;]

Ja bym SO nie negował w czambuł, bo z niego można się wiele nauczyć -- trzeba po prostu czytać, a nie tylko kopiować na pałę...

1

Moim zdaniem powyższe odpowiedzi są sensowne. Tak trochę z boku jest jeszcze kwestia tego, czy:

  1. wiesz, co chcesz osiągnąć; masz to opracowane w głowie;
  2. umiesz zapisać to w języku naturalnym lub w pseudokodzie tak, by druga osoba zrozumiała, o co Ci chodzi.

PS. Nie chodzi mi o to, żebyś dążył do któregoś z tych punktów, ale moim zdaniem dobrze jest uświadomić sobie, które z nich potrafisz, a które nie (możesz potrafić p. 2, a nie potrafić p. 1, jak i na odwrót, jak i żadnego, jak i oba). Łatwiej wtedy idzie odpowiadanie na pytanie "czy muszę coś zmieniać, czy może to, co jest, mi wystarcza".

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