Dlaczego kodowanie jest takie trudne? | Część 1

To jest post o temacie technicznym: kodowaniu. Ale żeby było jasne, nie mam technicznego wykształcenia.

Jestem dumnym synem artysty, który nauczył mnie, jak używać emocji jako kompasu do nawigacji w życiu, a nie logiki. Glina, grafit, tusz, farba, płótno, papier i klej płyną w moich żyłach.

Miałem problemy w szkole z wielu powodów – wśród nich były dwa problemy z nauką: uszkodzenie nerwów mózgowych w wyniku komplikacji przy porodzie i dysleksja, która nie została zdiagnozowana aż do moich późnych lat 20-tych. Moje najlepsze wyniki testów były tak złe, że prawie nie dostałam się na studia.

Studiowałam nauki polityczne w szkole, a moje pierwsze nieudane próby kariery dotyczyły filmu i projektowania graficznego.

Nauczyłam się kodować – to jedna z najtrudniejszych rzeczy, jakie kiedykolwiek zrobiłam. Uczę również kodu w bootcampie tutaj w Waszyngtonie od około 5 lat i mentoruję przyjaciół na i poza nim.

Choć jest to trudne, nie jest to niemożliwe. Kiedy jesteś samoukiem, uczysz się bitów i kawałków. Czasami coś ma sens od razu, podczas gdy inne będzie kliknięcie lat od teraz. Ścieżka wyjaśnienia jest dobrze wydeptana, ale znalazłem twoje doświadczenia życiowe, dyspozycje i wykształcenie oznaczają, że połowa twojej bitwy to znalezienie odpowiednich zasobów do nauki.

Dwie rzeczy zanim zaczniemy:

  1. Jeśli ja mogę to zrobić, ty też możesz.
  2. Nie jesteś sam.

Nowe słownictwo, nowe koncepcje, nowe… wszystko

Jedną z trudnych barier w nauce kodowania jest to, że terminy używane do opisania czegokolwiek w „mowie kodu” często mogą oznaczać coś zupełnie innego w zwykłym angielskim. Moim ulubionym przykładem jest słowo „klasa”.

W przeciwieństwie do akademickich lub socjologicznych konotacji, do których jesteśmy przyzwyczajeni, klasa w mowie programowania jest inna w zależności od tego, jakiego języka programowania używasz. Jeszcze bardziej zagmatwane w tych różnych językach programowania, klasa jest zarówno powiązana wystarczająco koncepcyjnie, aby narysować paralele podobieństwa, dlaczego jej oryginalni autorzy wybrali ją, aby być nazywaną klasą, ale rzeczywiste użycie jest wystarczająco różne, aby naprawdę być czymś zupełnie innym. (Konkretnie klasy CSS vs Object Oriented Classes)

Mówienie kodem jest prawie podobne do slangu, co jak każdy rodzic wie, jest frustrujące. Na początku może być trudno określić, co jest normalnym angielskim słowem, a co terminem „kodowym”.

Co więcej, często słyszy się je w szybkim tempie, więc pełne zdanie w języku kodowym będzie poprawne gramatycznie i będziesz znał każde z tych słów osobno, ale nie wtedy, gdy są ułożone w ten sposób.

„Po tym, jak przepłukałem zarówno pamięć podręczną przeglądarki na poziomie lokalnym, jak i poprosiłem Johna o wyczyszczenie pamięci podręcznej serwera na poziomie inscenizacji, myśląc, że musi to być jakiś rodzaj problemu z pamięcią trwałą lub stanem, okazało się, że jest to kolizja nazewnictwa nadpisująca inwokacje zdefiniowane wcześniej w korzeniu. Zrobię ticket, aby dodać mapy źródeł, abyśmy mogli łatwiej śledzić instancje zamiast przeszukiwać repo.” -Aktualne zdanie, które powiedziałem mojemu szefowi, który skinął głową aprobująco.

Nie tylko zaczynanie od zera, definiowanie tego, czym jest zera

Na dodatek, istnieją koncepcje, z którymi nigdy wcześniej nie musiałeś się spotkać, a tym bardziej walczyć.

Przykład, którego lubię używać z moimi studentami to:
Powiedzmy, że chcesz zaprogramować swój komputer, aby zrobił ci filiżankę kawy. Proste prawda?

Ty: Hej Komputer: zrób mi filiżankę kawy.

Komputer: BEEP BOOP: SURE PAT. CO TO JEST KAWA I CO TO JEST MAKE?

Wyobraź sobie wszystkie sposoby, na jakie możesz zrobić kawę… a następnie wyobraź sobie proces pozyskiwania ziaren kawy z drzewa, na którym rosły, do postaci, której możesz użyć w tym procesie… yikes.

Często zaczynamy od zera, a nawet małe, proste rzeczy dla nas są w rzeczywistości często oszałamiająco skomplikowane do osiągnięcia za pomocą kodu.

Nie musisz po prostu programować rzeczy, musisz określić, czym są w pierwszej kolejności. Następnie musisz wzmocnić swój kod, aby obsłużyć wszystkie możliwe sposoby, w jakie może się nie udać. Proste zadania stają się oszałamiającymi katedrami honorującymi bogów explicite.

„Just Google it”

Prawdopodobnie rada, która najbardziej mnie wkurza od moich rówieśników dla nowych programistów, to „Google it”.

Każdy, kto był po uszy w błocie, wie, jak bardzo jest to niepomocne.

A. Nie wiesz jak zdiagnozować co jest nie tak, więc nie wiesz nawet od czego zacząć. (Gdybyś wiedział, nie pytałbyś o to).
B. Nawet gdybyś wiedział, nie wiesz, jakie terminy są związane z problemem.
C. A nawet gdybyś wiedział, wyniki są często tak oszałamiające, że nie wiedziałbyś, gdyby patrzyły prosto na ciebie. (Albo jak mawiał mój dziadek, nie byłby w stanie wylać wody z buta, gdyby na spodzie była instrukcja.)

Kodowanie jest jak język obcy

Istnieją uderzające podobieństwa do nauki kodowania i nauki języka obcego. Stwierdziłem, że studenci języka, angielskiego lub innego, mają tendencję do szybszego przyswajania składni.

Tak, istnieją wzorce i logika systemów.

Tak, niektóre rzeczy są idiosynkratyczne i nie mogą być zwięźle przekazane w ich angielskim odpowiedniku.

Tak, istnieją wyjątki od powyższych 2 punktów, które są sprzeczne lub nie mają sensu, ale tak właśnie jest, więc musisz to zapamiętać.

Pół Pastor / Pół Naukowiec

Prawdopodobnie najbardziej szaloną sprzecznością jaką musi spełnić programista jest to, że masz za zadanie zarówno wiedzieć jak to wszystko działa, jak i przypisywać zdrową większość do wiary.

Aby programować, musisz używać logiki, rozumu i wnioskowania. Debugowanie jest procesem dedukcyjnym. Dobry kod jest dobrze skonstruowany, celowo logiczny i dobrze zorganizowany.

Z drugiej strony, używamy skał, które podstępnie zmusiliśmy do myślenia (komputery). Polegamy na frameworkach, bibliotekach i skrawkach napisanych przez innych ludzi, których albo nie rozumiemy z powodu czasu, albo bierzemy wyłącznie na wiarę. W każdej linijce kodu dzieje się tak wiele, że nigdy nie moglibyśmy ukończyć funkcji, gdybyśmy musieli się zatrzymać i zastanowić, co to wszystko robi.

Aby być programistą, musisz być zarówno po części opartym na wierze kapłanem/kapłanką, jak i zimnym jak kamień logikiem Spockiem.

Image via Paramount Pictures.

Zakończenie

Jak więc widzicie, mamy przed sobą sporo pracy. Ale tak jak nie przyszliśmy na ten świat wiedząc jak mówić, pisać, czy wykonywać jakiekolwiek z zadań, które teraz uważamy za rutynowe, ale z którymi kiedyś się zmagaliśmy: możemy to zrobić.

Głęboka prawda kryjąca się za kodowaniem jest taka, że jest ono produktem, poziomem najlepszych wysiłków – dobrych intencji – szczerym darem niektórych bardzo inteligentnych ludzi, aby uczynić życie łatwiejszym. Jakaś mądra osoba, gdzieś powiedziała: „To jest do bani. Musi być lepszy sposób niż ten.”

I kod wziął swój pierwszy oddech.

W następnej sekcji podam Ci kilka strategii, które ułatwią ten proces i sprawią, że ruszysz w kierunku swoich celów. Kod jest tutaj, aby pozostać, jest tutaj, aby pomóc, a jeśli nic innego, możesz po prostu mieć trochę zabawy.

Leave a Reply

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.