Stosunkowo często pomagam początkującym programistom; wyjaśniając, dlaczego ich kod nie będzie działał, gdy o to poproszą, sugerując rozwiązania i tym podobne. Ludzie, którym pomagam, mają formalne wykształcenie w zakresie programowania z modułu pierwszego stopnia, w Javie, ale wydaje mi się, że nie potrafię się z nimi bardzo dobrze komunikować.
Na przykład: ktoś może napisać funkcję, ale nie rozumie, dlaczego nie jest wykonywana, nie zdając sobie sprawy, że zapomniał ją wywołać. Jeśli użyję wyrażeń takich jak "(make a) call (to) the function/it"
i "pass it the.."
dostanę puste spojrzenia.
Moim normalnym procesem byłoby wtedy znalezienie miejsca w kodzie, w którym wywołują funkcję z języka, i powiedzieć im, że mogą wywoływać własne funkcje w taki sam sposób, jak nazywają tę inną funkcję. Czasami nawet to robi się puste.
Czy są inne słownictwo, które są bardziej odpowiednie (lepsze dla?), Pomagając początkującym programistom? Czy to nie jest kwestia komunikacji?
źródło
Odpowiedzi:
W końcu będą musieli nauczyć się właściwych terminów, im szybciej, tym lepiej.
Używaj ich poprawnie i wyjaśniaj, gdy tylko zobaczysz puste spojrzenie. Po prostu spróbuj wysłać odpowiednie sygnały, że możesz pytać o wszystko, czego nie rozumieją - jedyne głupie pytania to te, których nie zadajesz.
źródło
Ogólnie
Kiedy dana osoba Cię nie rozumie, masz dwie możliwości:
Dostosuj słownictwo do tego, co dana osoba wie lub nie,
Wyjaśnij osobie warunki, których nie rozumie.
Pierwszy przypadek działa dobrze, gdy osoba zna już słownictwo techniczne dość dobrze, ale niewystarczająco lub w Twojej domenie.
Na przykład możesz użyć metody termin w języku C # lub Java, a osoba, która w większości pracuje z innym językiem, nie zrozumie tego terminu. Wyjaśnisz następnie, że w C # lub Javie metoda odnosi się do tego, co zwykle nazywamy funkcją (na przykład w C) i że nie ma czegoś takiego jak funkcja w C # lub Java . Na przykład w PHP istnieją zarówno metody , jak i funkcje, i mają inne znaczenie . Jeśli różnica jest zbyt bolesna dla osoby, będziesz mówić o funkcjach dla uproszczenia.
W twoim konkretnym przypadku trudno wybrać pierwszy: „wykonać wywołanie funkcji” nie może być przeformułowany w prostszy sposób. Połączenie to połączenie. Nie możesz tego bardziej uprościć.
Oznacza to, że musisz wybrać drugi sposób: wyjaśnić osobie każdy termin techniczny.
Wskaż osobę na słownik lub Wikipedię, która działa bardzo dobrze w przypadku podstawowych pojęć i terminologii.
Wybrałbym to dla często używanych terminów . Na przykład wolałbym zaprosić osobę do przeczytania Wikipedii, aby zrozumieć, czym jest polimorfizm, a co to jest kowariancja i kontrawariancja. Pojęcia te zostały już bardzo dobrze wyjaśnione, więc nie trzeba tutaj wymyślać koła na nowo.
Lub wytłumacz własnymi słowami .
Wybrałbym to dla terminów specyficznych dla kontekstu i / lub akceptujących szeroki zakres definicji . Na przykład Wikipedia nie jest zbyt pomocna w zrozumieniu wizji Microsoft w zakresie przetwarzania w chmurze, a ja wolałbym wyjaśnić, czym jest chmura, komuś, kto będzie pracował nad aplikacją Windows Azure.
W twoim szczególnym przypadku
Ludziom, z którymi rozmawiasz, brakuje najbardziej podstawowych pojęć i terminów używanych w programowaniu. Nie mogą kontynuować nauki bez podstawowego słownictwa , ponieważ w ogóle nie są w stanie się komunikować : nie mogą czytać książek o programowaniu lub blogach, nie mogą słuchać swoich kolegów, a nawet nie mogą zadawać pytań na Stosy witryn internetowych Exchange, ponieważ nikt nie zrozumie, o co pytają.
W twoim przypadku zamiast poszukiwania odpowiedniego słownictwa spędziłbym kilka dni lub tygodni, ucząc ich podstawowych pojęć programistycznych i powszechnie używanych terminów . Po kilku dniach będziesz mógł z nimi rozmawiać bez konieczności ciągłego „rysowania im zdjęć i posługiwania się metaforami dotyczącymi kotów i psów” .
źródło
Zamiast funkcji zacznij od podprogramów . Powiedz im, że program to tylko lista instrukcji, przepis, który mówi komputerowi, jak coś zrobić. I że jest wykonywana jedna instrukcja po drugiej (z możliwością wykonania kilku kroków równolegle, ale więcej o tym później).
Niektóre zadania są dość powszechne i powtarzalne, więc byłoby okropne, gdybyśmy musieli je zawsze zapisywać raz za razem, więc piszemy je tylko raz i tworzymy z niego „mniejszy program” - podprogram , który może być ponownie wykorzystany przez inne części programu. Aby móc go wykonać więcej niż raz, nadajemy mu znaczącą nazwę w naszym programie. A potem możemy użyć tej nazwy, gdy chcemy uruchomić ten „mały program” jako część większego, nazywając go tą nazwą.
Wywołanie podprogramu przypomina przywołanie demona, który wie, jak wykonać to zadanie, pod nazwą tego demona. Kiedy więc chcemy wykonać to konkretne zadanie w naszym programie, piszemy „wzywamy demona o imieniu Argoth”, a demon pojawia się i wykonuje to zadanie, tak jak mu to nakazaliśmy, a następnie odchodzi i możemy kontynuować praca.
Czasami demon wymaga dodatkowych informacji, bez których nie może zdecydować, które zadania wykonać lub czego naprawdę od niego chcemy. Np. Jeśli demon ma zbudować zamek, może potrzebować wiedzieć, gdzie ma go zbudować, jak duży , itp. To są argumenty przekazane demonowi ... Mam na myśli podprogram, który teraz staje się sparametryzowane .
Parametry to te informacje, których brakuje, ale są wymagane do wykonania zadania. Zmieniają nieco to, co podprogram może zrobić. Są jak puste miejsca w przepisie, które należy wypełnić, zanim będziemy mogli je wykonać.
Z drugiej strony argumenty to rzeczywiste informacje (wartości), które podajemy dla tych parametrów.
Jeśli chodzi o wykonywanie równoległe, możemy myśleć o tym w ten sposób: zawsze ktoś (lub coś ) wykonuje program (lista instrukcji). To albo inna istota ludzka (czy wiesz, że „komputer” był kiedyś imieniem osoby wykonującej obliczenia?), Albo maszyna. Program jest tylko listą instrukcji, nie działa samodzielnie. Musi być ktoś lub coś, kto wykona proces obliczeniowy(wykonaj te czynności z listy). Czasami te czynności można wykonywać równolegle - możemy rozdzielić kopie listy kilku osobom i pozwolić każdemu z nich wykonać inny zestaw zadań z listy, o ile nie przeszkadzają sobie nawzajem lub nie „ muszę czekać na wyniki czyjejś pracy. To dla ciebie wielowątkowość ;)
Jeśli chodzi o różnicę między funkcjami i podprogramami (zwanymi również procedurami ), zwykle różni się to, że funkcja jest wywoływana w celu obliczenia pewnej wartości, którą zwraca w wyniku jej wykonania, podczas gdy procedury są wykonywane dla zabawy;) AKA za ich „skutki uboczne” - tylko ze względu na operacje wykonywane z listy.
Ale jeśli wywołanie procedury lub funkcji powoduje najpierw problemy, możesz użyć innego terminu, który był kiedyś popularny: skakanie . Można przejść do podprogramu, co oznacza, że przestajesz wykonywać to, co teraz robisz, i „przeskakujesz” do innego miejsca na liście (lub innej listy) - podprogramu - w celu wykonania jego zadań. Następnie, kiedy skończysz, „odskakujesz” - to znaczy wracasz do miejsca, w którym ci przeszkodzono, abyś mógł kontynuować poprzednie zadanie. Różnica między wzywaniem a skakaniem polega na tym, że teraz jesteś demonem.
Jeśli chodzi o metody wspomniane przez kogoś lub fakt, że niektóre języki „nie mają funkcji, tylko metody” - to nie do końca poprawne, ponieważ metody są funkcjami! - ich szczególny rodzaj : są to funkcje, które służą do wyszukiwania niektórych informacji zawartych w obiekcie lub do operowania nimi. Są „metodą operowania na tych danych”. Nazwa pochodzi od paradygmatu obiektowego, w którym dane są otoczone obiektami i nie mogą być obsługiwane bezpośrednio, tylko za pomocą specjalnych funkcji zwanych „metodami”.
Metoda jest wyjątkowa w pewien inny sposób: musi wiedzieć, który konkretny obiekt ma obsługiwać / być wywoływany (obiekt „ten”). Właśnie dlatego metody są zwykle ozdobione dodatkowym ukrytym parametrem, który przechowuje informacje o obiekcie, do którego został wywołany (wskaźnik „ten”). To komplikuje sposób, w jaki funkcja jest nieco nazywana, ale jest to „szczegół implementacji”, który programista nie powinien niepokoić, o ile wie, co robi.
źródło