Jak mam wytłumaczyć rodzicom, że uczę się języków programowania?

64

Obecnie kończę mgr informatyki. Interesuję się językami programowania, szczególnie systemami typu. Zainteresowałem się badaniami w tej dziedzinie i w następnym semestrze rozpocznę doktorat na ten temat.

Oto prawdziwe pytanie: jak mogę wyjaśnić, co (chcę) zrobić osobom bez wcześniejszej wiedzy w dziedzinie informatyki lub dziedzin pokrewnych?

Tytuł pochodzi od faktów, że nawet nie jestem w stanie wyjaśnić, co robię moim rodzicom, znajomym i tak dalej. Tak, mogę powiedzieć „chodzi o to, aby pomóc twórcom oprogramowania pisać lepsze oprogramowanie” , ale nie sądzę, aby było to naprawdę przydatne: nie są świadomi „programowania”, nie mają pojęcia, co to znaczy. Wydaje mi się, że mówię, że jestem mechanikiem samochodowym dla kogoś ze średniowiecza: po prostu nie wiedzą o czym mówię, nie mówiąc już o tym, jak to poprawić.

Czy ktoś ma dobre analogie ze światem rzeczywistym? Oświecające przykłady powodujące momenty „a-ha”? Czy powinienem pokazywać krótki i prosty fragment kodu osobom w wieku 60+ bez doświadczenia informatycznego (ani naukowego)? Jeśli tak, jakiego języka powinienem użyć? Czy ktoś tutaj miał podobne problemy?

effeffe
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
DW
3
To pytanie uzyskało negatywną opinię i jedną lub więcej flag zamkniętych, jeśli poprawnie rozumiem panel. Zastanów się nad pozostawieniem komentarza, bym mógł go poprawić. Chociaż czajam się tu od dłuższego czasu, po raz pierwszy aktywnie uczestniczę w witrynie i być może nie znam niektórych zasad.
effeffe
Powiązane pytanie .
Raphael
1
Po prostu nie rozumiem, dlaczego to pytanie jest bardziej głosowane niż pytanie związane z konkretnym problemem, co jest bardziej przydatne. To pytanie jest absurdalne i zostało śmiesznie podniesione. Niesamowite!
nbro
2
@ nbro Nie rozumiem, co jest śmiesznego w tym pytaniu i nie jestem pewien, w jaki sposób zdecydowałeś, że konkretne pytanie jest „bardziej przydatne” niż inne.
effeffe

Odpowiedzi:

59

Jeśli masz kilka minut, większość ludzi wie, jak dodać i pomnożyć dwie trzycyfrowe liczby na papierze. Poproś ich, aby to zrobili (lub przyznać, że mogliby, gdyby musieli) i poproś ich, aby potwierdzili, że wykonują to zadanie metodycznie: jeśli liczba ta jest większa niż 9, to dodaj przeniesienie i tak dalej. Podany przez nich opis tego, co należy zrobić, jest przykładem algorytmu .

W ten sposób uczę ludzi algorytmu słownego i z mojego doświadczenia był to najlepszy przykład. Następnie możesz wyjaśnić, że można sobie wyobrazić, że są bardziej złożone zadania, które muszą wykonać komputery, i dlatego istnieje potrzeba jednoznacznego języka, aby zasilić komputer tymi algorytmami. Nastąpiło więc rozpowszechnienie języków programowania , ponieważ ludzie wyrażają swoje myśli w różny sposób, a ty poszukujesz sposobów zaprojektowania tych języków, aby trudniej było popełnić błędy.

To bardzo rozpoznawalna sytuacja. Większość ludzi nie ma pojęcia, że ​​komputery, których używają, uruchamiają programy lub że programy te są pisanymi przez ludzi kodami źródłowymi lub że komputer może „odczytać” kod źródłowy, lub że obliczenia, które kojarzą z arytmetyką, są jedyną rzeczą, na którą komputery zrobić (i może przenosić dane i sieci).

Moje badania dotyczą komputerów kwantowych, więc kiedy ludzie pytają mnie, co robię, nie próbuję tego wyjaśniać. Zamiast tego próbuję wyjaśnić, że istnieje fizyka kwantowa (zwykle słyszeli o kocie Schrödingera i rzeczy, które znajdują się w dwóch miejscach jednocześnie) i że z powodu tej dziwnej fizyki możliwe jest szybsze obliczenia.

Moim celem jest sprawienie, by osoba poczuła się trochę bardziej kompetentna niż weszła, podekscytowana światem, o którym istnieniu nie wiedzieli, ale z którym go teraz poznaliście. Uważam, że jest to o wiele cenniejsze niż wyjaśnianie moich konkretnych pytań badawczych.

Lieuwe Vinkhuijzen
źródło
27
Sortowanie talii kart jest również łatwym sposobem na wprowadzenie pojęcia algorytmów.
Morwenn
2
@Morwenn To prawda! Istnieje mnóstwo algorytmów, które wykonujemy w życiu codziennym! Radzenie sobie z kartami jest algorytmiczne, ruch ma wiele aspektów algorytmicznych, chociaż są one oparte na zdarzeniach i nie są konieczne, gotowanie jest algorytmiczne, gdy robisz to na automatycznym pilocie. Powodem, dla którego lubię dodawanie, jest to, że wszyscy nauczyli się tego samego algorytmu w szkole podstawowej, podczas gdy aby posortować listę liczb, strategie ludzi różnią się i nie są metodyczne: starają się znaleźć wzorce liczb bliskich, sąsiadujących i nie każdy zna i tak należy zamówić talię kart (czy to serca przed pikami?)
Lieuwe Vinkhuijzen
Osobiście zapytany o obliczenia kwantowe staram się całkowicie unikać fizyki, ale staram się dać ogólny pomysł (że komputer kwantowy nie działa lepiej lub szybciej, ale może po prostu wykonywać obliczenia w sposób, który jest poza zasięgiem normalnych komputerów). Jeśli pytają, jak to jest, są zadowoleni z uproszczonego widoku, w zasadzie przetwarzania SIMD (z zasobami liniowymi wystarczającymi do uzyskania wykładniczego rozmiaru równoległych danych wejściowych), którym w końcu są większość algorytmów.
The Vee
Możesz wyjść poza zwykłe karty; Niedawno odkryłem, że używam wariantu Quicksort do sortowania stosu dokumentów, które musiałem uporządkować, nawet o tym nie myśląc, ponieważ było ich zbyt wiele, by posortować je w prosty sposób.
Jab
@JAB To niesamowite! Ale prawdopodobnie znasz już Quicksort. Zaletą wyjaśniania dodawania vs. sortowania jest to, że każdy ma ten sam algorytm dodawania, ale żaden laik nie ma metodycznego algorytmu sortowania. Z drugiej strony może to być zaletą! Możesz wyjaśnić różne algorytmy. To jest droga, którą wybieram, gdy rozmawiam z kimś matematykiem spoza cs, i przechodzi przez koncepcję różnych algorytmów dla tego samego zadania z różnymi granicami czasowymi i dlaczego dolne granice są trudne.
Lieuwe Vinkhuijzen
18

Spróbowałbym czegoś takiego:

Programiści mogą informować komputery, co mają robić. Aby to zrobić, muszą używać języka programowania. To jest język zrozumiały zarówno dla komputerów, jak i ludzi. Na przykład, jeśli edytujesz dokument Word i naciśniesz klawisz, komputer wyświetli naciśniętą literę. Wynika to z faktu, że programista napisał program: Jeśli użytkownik naciśnie „A”, wstaw „A” do dokumentu. Jeśli użytkownik naciśnie „B”, wstaw „B” do dokumentu i tak dalej. Komputer po prostu przestrzega zasad programu napisanych przez programistę.

Teraz czasami programiści omyłkowo piszą głupią regułę. Komputer i tak spróbuje przestrzegać głupiej reguły, ale jeśli zastosujesz się do złej reguły, wydarzy się coś złego. Na przykład czasami podczas edytowania dokumentu Word nagle wszystko zawiesza się, a komputer przestaje reagować. Może to być spowodowane tym, że jakiś programista Microsoft napisał niezbyt doskonały program.

Moja praca polega na opracowaniu metod sprawdzania programów pod kątem takich i innych błędów, przy użyciu innych programów i matematyki. Podstawową ideą jest dowiedzieć się, jak przewidzieć, co się stanie, gdy program zostanie wykonany, bez jego wykonywania.

Oczywiście, ponieważ są to badania, pracuję tylko nad małym aspektem tego, nie wszystkim na raz, ale to jest duży obraz tego, co próbujemy osiągnąć.

Używam wyjaśnień w podobnym stylu dla mojej dziedziny (języki specyficzne dla domeny) i mogę zgłosić, że często pomogło mi to przezwyciężyć „och, jesteś informatykiem, nigdy nie mógłbym tego zrobić, pozwalając mi odejść i przestać mówić do Ciebie ”. Wydaje się, że kluczem jest wydobycie pierwszych par zdań, dopóki nie dojdzie do przykładu, do którego druga osoba może się odnieść, podobnie jak w tym przypadku dokumenty Word. Punkty bonusowe za specjalne udostępnianie przykładu drugiej osobie, takie jak Excel dla księgowych lub Powerpoint dla szefów lub gry komputerowe dla graczy lub przeglądarek internetowych itp.

Pamiętaj, że nie musisz pozostać na tym powierzchownym poziomie. Jeśli Ty (i druga osoba!) Chcesz, możesz zagłębić się w szczegóły tego, co dokładnie robisz. Na przykład: „W moim obecnym projekcie próbuję matematycznie udowodnić, że to, co wymyśliłem w zeszłym roku, faktycznie działa. Oznacza to, że muszę bardzo dokładnie zdefiniować, co tak naprawdę oznacza program i co mój wynalazek przewiduje dla programu, a następnie Mogę pokazać, że prognozy są słuszne ”.

Toxaris
źródło
12

Większość ludzi rozumie przepisy kulinarne. Jeśli postępujesz zgodnie z instrukcjami, dostaniesz porządny posiłek. Czasami jednak instrukcje mogą być trudne do wykonania. Na przykład, kiedy robisz perogie, znajdziesz takie instrukcje, wzięte słowo w słowo z polskich perogii babci :

Aby gotować perogie: Zagotuj duży garnek lekko osolonej wody. Upuszczaj perogie na raz. Wykonuje się je, gdy unoszą się na szczyt. Nie gotuj zbyt długo, bo będą rozmoczone! Usuń łyżką cedzakową.

Yikes. Przejrzyjmy dla nas życzliwą poradę babci. Upuszczaj je pojedynczo ... aby wszyscy mieli różną długość czasu w puli. Rozumiem. Robi się to, gdy unoszą się na szczyt . Ile to jest „oni”? Czy łapię każdego, gdy się pojawia? Czy czekam, aż 80% pojawi się na górze, a następnie zdobędę je wszystkie? To jest szalone niedokładne. Nie gotuj zbyt długo, bo będą rozmoczone! Jak zmierzyć, kiedy będą rozmoczeni, aby nie trwało to zbyt długo? Jeśli pięć osób wyskoczy jednocześnie na górę, czy będę miał czas na zdobycie ich wszystkich?

I zaufaj mi, zepsułem wiele perogii w ciągu dnia. Jest to poważny problem, na który wcześniej natknął się każdy kucharz perogie. Ale pomimo tych problemów, które ujawniają się nawet po najbardziej podstawowej analizie, ludzie nadal są w stanie robić perogie przy użyciu tej samej metody. Ale czy jest coś, co możemy zrobić, aby więcej serii perogii zakończyło się sukcesem i mniej partii perogii zawiodło?

Czy nie byłoby wspaniale, gdyby ktoś specjalizował się w tworzeniu bardziej niezawodnych przepisów? Ktoś, kto powiedział: „możemy potoczyć perogie, aby wyskoczyły z wody!” lub „możemy dodać specjalny barwnik do perogii, oczywiście bezpieczny do spożycia, który daje im różne odcienie i wiemy, że najpierw wyjmujemy te najciemniejsze, ponieważ są najbardziej narażone na rozmoczenie”. Chcemy eksperta, który może wziąć ten przepis i rozwiązać potencjalne problemy z nim. Życie kucharzy perogie na całym świecie będzie łatwiejsze, a psu będzie podawać mniej rozmoczonych kawałków makaronu i ziemniaków.

Programiści cały czas przestrzegają przepisów. Ale czasami sprzęt, którego używają, instrukcje, których używają, i interpretacje, których używają, nie łączą się, aby przygotować obfity posiłek, którego chcieli. Na szczęście są ludzie, którzy poświęcają swoją karierę, aby uczynić życie programisty bardziej produktywnym. W twoim przypadku specjalizujesz się w jednym z narzędzi używanych przez programistę, języku, aby spróbować je ulepszyć.

corsiKa
źródło
7

Oto jak chciałbym (spróbować) wyjaśnić to mojej mamie:

Języki programowania są używane przez ludzi do przekazywania instrukcji komputerowi. Wszystko, co robi komputer, odbywa się za pomocą kodu napisanego w języku programowania przez programistę.

Jeśli na przykład chcemy, aby kanał telewizyjny zmienił się po naciśnięciu przycisku, musielibyśmy napisać kod w języku programowania, aby to zrobić. To samo dotyczy wszystkiego, co dzieje się z laptopem, smartfonem i wszystkim innym, których działanie wymaga komputera.

Może się wydawać, że może istnieć jeden język programowania, którego programiści mogliby używać do pisania wszystkich programów. Ale tak nie jest. Istnieją różne języki programowania dla różnych typów aplikacji.

Niektóre są używane do tworzenia stron internetowych, inne do tworzenia aplikacji na laptopa (takich jak Microsoft Word).

Jednym z powodów, dla których istnieje wiele różnych języków programowania, jest to, że niektóre z nich lepiej nadają się do niektórych zadań niż inne. Innym powodem jest to, że niektóre języki są zaprojektowane do użytku z różnymi komputerami. Dlatego nie zawsze możesz wziąć kod napisany dla smartfona i uruchomić go na laptopie. I podczas gdy niektórzy programiści mogą programować w wielu językach, a wielu jest w stanie lub szybko uczy się nowych języków, każdy programista zna niektóre języki lepiej niż inne, a niektóre wcale.

Tak więc języki programowania są jedną z kluczowych technologii, dzięki którym komputery działają. Dobrze zaprojektowane języki programowania mogą znacznie zwiększyć wydajność programistów. Mogą także poprawić bezpieczeństwo i zmniejszyć błędy programistyczne, błędy i usterki.

I tak w zasadzie to właśnie studiuję: w jaki sposób różne części języków programowania wpływają na wydajność programisty? Które części danego języka ułatwiają pisanie kodu dla strony internetowej? Dlaczego niektóre języki są bardziej popularne niż inne?

Choć może się wydawać, że pytania te są ezoteryczne i dalekie od codziennego życia przeciętnego człowieka, jest odwrotnie. Nauka języków programowania jest niezbędna dla każdego produktu lub usługi korzystającej z komputera. A dziś oznacza to prawie wszystko;)

Matt Hall
źródło
7

Najlepszym rozwiązaniem może być stworzenie analogii z ludzkimi językami.

Języki programowania służą do przekazywania instrukcji komputerom. Języki ludzkie są używane do przekazywania pomysłów innym ludziom i do formowania własnych myśli. Hipoteza Sapira-Whorfa mówi, że język, który używasz wpływa swoją myśl. (Stopień, w jakim hipoteza Sapira-Whorfa jest prawdziwa, jest dyskutowany, ale możemy zaakceptować, że jest ona prawdziwa podczas omawiania języków programowania. W przeciwnym razie równie dobrze możesz zrezygnować z doktoratu.)

Istnieje wiele różnych języków ludzkich, niektóre z funkcjami, które uważamy za egzotyczne. Na przykład:

  • Niektóre języki wymagają podania dowodu tożsamości przy każdym oświadczeniu: czy oświadczenie wynika z własnego doświadczenia, własnego wnioskowania, pogłoski, spekulacji itp.
  • Niektóre języki tworzą wielkie słowa poprzez aglutynację; każde słowo może być wysoce zmodyfikowane, aby zakodować wiele informacji o jego roli gramatycznej. Inne języki prawie nigdy nie modyfikują słów i opierają się na kolejności słów lub cząstkach, aby wyrazić te informacje.
  • Języki różnią się rozmiarem słownictwa . Niektóre języki zawierają słowa, które można przetłumaczyć tylko z obrzezaniem (np. 엄친아 ). Niektóre języki mają genialne wyrażenia, które są tak dobre, że inne języki je pożyczają (np. Schadenfreude).
  • Niektóre języki nie mają pojęcia lewy / prawy; musisz wyrazić wszystko w kategoriach północ / południe / wschód / zachód.
  • Niektóre języki nie mają numerów. Języki różnią się także liczbą popularnych nazw kolorów .
  • Języki różnią się pod względem fonotaktyki. Na przykład szybkość sylaby jest różna, przy czym język japoński ma tendencję do używania wielu prostych sylab, podczas gdy chiński jest wolniejszy, ale koduje informacje tonami.
  • Języki różnią się gęstością informacji . Jeśli spojrzysz na tłumaczenie chińsko-angielsko-francuskie, zobaczysz, że chińska wersja jest bardzo zwarta na papierze, a francuski zajmie najwięcej miejsca.
  • Niektóre języki, takie jak angielski, są rozwiązłe: każdy może swobodnie pożyczyć słowo z innego języka i je zredagować. Inne języki, takie jak francuski, mają znormalizowany organ, który jest odporny na zmiany. Na przykład islandzki jest z natury bardzo konserwatywny.

Czy istnieje najlepszy język, mówiąc obiektywnie? Odpowiedź może zależeć od tego, co próbujesz zrobić.

  • Jeśli próbujesz porozumiewać się przez radio, Navajo będzie dobrym wyborem. (Wspomnij o swoim ulubionym języku „tylko do zapisu”).
  • Jeśli próbujesz napisać ostrzeżenie dla przyszłych pokoleń, a napis musi być zrozumiały za kilka tysięcy lat, możesz chcieć użyć chińskiego (ze względu na dużą liczbę głośników i stabilność jego systemu pisania), a może Angielski (który zmienił się dramatycznie w ciągu ostatniego tysiąclecia, ale jest bardzo powszechnie znany). (C i JavaScript prawdopodobnie będą działać „na zawsze”).
  • Chińczycy, mający dużo homofonów, świetnie nadają się do karania . (Poezja Perla)
  • Być może ważna jest neutralność, w którym to przypadku możesz wybrać esperanto. (Java jest zaprojektowana jako przenośna; C jest mniej).
  • Być może musisz wyrazić myśl z pełną precyzją, a naturalny język nie wystarczy. Musisz uciekać się do Ithkuil !
  • Tłumaczenie niektórych par językowych (np. Arabsko-angielski ) może być bardzo trudne z powodu ogromnych różnic kulturowych i konotacji kulturowych z pewnymi słowami. Podobnie, niektóre pomysły nie są łatwe do wyrażenia w niektórych językach komputerowych, ponieważ koncepcja po prostu nie istnieje (np. Rekurencyjność ogona).

Ostatecznie wszystko na komputerze zostaje przetłumaczone na język maszynowy, ale wybór odpowiedniego języka dla zadania może znacznie wpłynąć na produktywność, niezawodność, wydajność i sprawność oprogramowania. Wybieramy języki kaftana bezpieczeństwa, takie jak Ada lub Java, do „poważnych” projektów, a Ruby lub Perl, aby uzyskać maksymalną szybkość . W przypadku zapytań do bazy danych SQL jest zwykłym językiem; pisanie własnego kodu C byłoby idiotyczne.

Na podstawie tych analogii jestem pewien, że przez kilka godzin możesz objaśniać takie pomysły, jak programowanie funkcjonalne, bezpieczeństwo typów, wnioskowanie o typach itp.

200_sukces
źródło
1
Jedną z trudności jest to, że niektórzy nigdy tak naprawdę nie zastanawiali się nad własnym językiem naturalnym. Przykłady językowe mogą być dla niektórych osób równie trudne, jak pojęcie języka programowania. Jeśli wiesz, że dana osoba jest (przynajmniej) dwujęzyczna, szanse są prawdopodobnie lepsze ....
TextGeek
@TextGeek Nawet w języku angielskim istnieją dialekty. Ludzie kłócą się o reguły językowe, takie jak podwójne negatywy i kończenie zdań przyimkiem. Język ewoluuje cały czas, czasem w kontrowersyjny sposób. Popularność SMS-ów doprowadziła do nowych skrótów. W amerykańskim angielskim można zamienić dowolny rzeczownik w skandal, dodając przyrostek „-gate”. Nie sądzę, że musisz być dwujęzyczny, aby docenić innowacje językowe i różnorodność.
200_sukces
3
  • języki komputerowe odnoszą się w przybliżeniu do języków ludzkich. używają standardowych / wspólnych / wspólnych słów. weź pod uwagę, że istnieją tysiące ludzkich języków, niektóre z nich są nieużywane, inne są aktywne, a ich słownictwo i użycie stale się rozwija z czasem. niektórzy ludzie tworzą nowe przydatne słowa do wyrażania pojęć, których wcześniej nie dało się wyrazić. innym nakładającym się aspektem języka komputerowego i języka ludzkiego jest gramatyka . niektóre języki, np. angielski, mają bardzo złożoną gramatykę. weź pod uwagę wszystkie różne czasy i złożone reguły, które nimi rządzą. inne języki nie mają tych samych czasów . inna korelacja dotyczy części mowykategorie, np. rzeczownik, czasownik, przysłówek, przymiotnik itp., działają one podobnie jak typy w językach komputerowych. wyobraź sobie tworzenie nowych języków z różnymi częściami kategorii mowy, które wcześniej nie były brane pod uwagę, lub z nowymi kombinacjami części mowy, które pochodzą z różnych języków itp .; należy więc pamiętać, że językoznawstwo ma związek z informatyką, np. szczególnie w teorii języka Chomskiego.

  • oprogramowanie i sprzęt często są powiązane z silnikami i maszynami, a nawet nazwane po nich. istnieje stara analogia oprogramowania, że ​​próba modyfikacji złożonego systemu produkcyjnego 24/7 przypomina zmianę silników samolotu podczas lotu . należy również zauważyć, że silniki odrzutowe są bardzo złożone i wymagają ogromnej, precyzyjnej specyfikacji wymiennych częścia tutaj jest trochę analogii do języków komputerowych sterujących sprzętem. wyobraź sobie całą złożoność dokumentów, które dokładnie opisują, jak budować silniki odrzutowe: wszystkie części, jak są skonstruowane, jak pasują do siebie, jak są montowane itp .; są tworzone / kompilowane przez inżynierów przy użyciu precyzyjnego formatu / struktury / konwencjonalnych reguł; oprogramowanie jest nieco analogiczne do tego.

  • Jeśli chodzi o maszyny, każdy bez wykształcenia naukowego lub matematycznego, a nawet dziecko, może zrozumieć podstawową koncepcję i wiele aspektów maszyny Turinga! cudowne stworzenie. podejrzewa się, że Turing został zainspirowany maszynami do pisania i / lub maszynami do nadawania numerów. można opisać tabelę stanów i pokazać im przykładową tabelę stanów, która oblicza mnożenie, a ktoś może obejrzeć animację youtube maszyny Turinga obliczyć podstawowe obliczenia, takie jak mnożenie. powiedz im, że tabela stanu może obliczyć lub dosłownie zdecydować o języku, a dane wejściowe są dosłownie nazywane słowami . w rzeczywistości maszyny Turinga akceptują słowa w językachitd., a następnie powiedz im, że istnieją dwie tabele stanów, które obliczają mnożenie, ale jedna jest znacznie szybsza lub bardziej wydajna od drugiej, i że twoje badania wymagają znalezienia lepszych koncepcji tabeli stanów. zastanawianie się, jak skutecznie budować tabele stanów, obejmuje języki programowania podsumowujące zawartość dużych tabel stanów! kompilator konwertuje kod napisany w języku programowania na dużym stole państwowej.

  • Algorytmy sortowania są doskonałą metaforą na poziomie podstawowym w informatyce. można spojrzeć na różne listy instrukcji aka algorytm dla każdego rodzaju. można dowiedzieć się, czym jest sortowanie bąbelkowe w porównaniu do rodzaju wstawiania, można użyć talii kart. teraz skup się na różnych zestawach instrukcji i zastanów się, że muszą być napisane w bardzo precyzyjnym języku, tak precyzyjnym jak wyrażenia matematyczne, które mają ścisłą składnię itp. i mają podstawowe podobieństwa / struktury: logikę warunkową, pętle, zmienne itp. i wyjaśnij, że sztuka tej precyzyjnej specyfikacji dotyczy języków komputerowych, i że niektóre różne języki mogą dawać te same algorytmy, ale że istnieją pewne subtelne różnice stylistyczne w tych językach, które są badane na dużych głębokościach itp.

vzn
źródło
1
Dlaczego warto głosować za tym? Myślę, że jest wiele spostrzeżeń. Można nie zgodzić się we wszystkich punktach, ale jest tu wiele możliwości. +1
obowiązuje
3

Mówisz po prostu: „Pomagam chłopakom, którzy uczą działanie komputerów”

Chodzi o to, że programiści uczą komputery robienia rzeczy za pomocą programów, a ty im pomagasz. Myślę, że to zadziała, zakładając, że już trochę wiedzą o komputerach.

lal
źródło
„Myślę, że to zadziała, zakładając, że już trochę wiedzą o komputerach”. Właśnie o to chodzi: jeśli uważnie przeczytasz moją odpowiedź, zobaczysz, że głównym problemem jest wyjaśnienie, co robię tym, którzy nie mają pojęcia, jak naprawdę komputer działa .
effeffe
@effeffe: ale wiedzą, że komputery istnieją? I prawdopodobnie mają pojęcie, że istnieją rzeczy zwane „programami”, „aplikacjami” lub „aplikacjami”, nawet jeśli sami nigdy świadomie nie korzystali z komputera. Dla uproszczenia programowanie polega (między innymi) na tworzeniu aplikacji poprzez zapisywanie instrukcji, które komputer może wykonać. Oczywiście zajęłoby im dużo czasu i instrukcji, aby docenili każdy szczegół programowania lub tego, jak można go ulepszyć, ale jeśli wiedzą, że komputery i programy stają się lepsze w miarę upływu czasu, wiedzą przynajmniej trochę o komputerach.
Steve Jessop
3

Jeśli nie chcesz używać porównań, chociaż uważam, że „algorytm”, który przywołał Lieuwe, jest bardzo miły do ​​przekazania tego pomysłu, możesz powiedzieć, że chcesz zmniejszyć nieporozumienia między ludźmi a komputerami. W końcu masz do czynienia z językami, a to chyba coś bardzo podstawowego dla ludzi. Dlaczego więc nie udawać, że komputer to kolejny umysł, z którym chcesz porozmawiać?

Ludzie stworzyli komputery, więc wiemy, jak działa umysł komputera. Ale komputer zwykle nie „wie”, jak działają nasze umysły. (Lub jaka była nasza rzeczywista intencja, kiedy piszemy skomplikowany i drobiazgowo wykonany błąd, który żyje w szczęściu w naszym kodzie przez wiele cykli;)) Zatem do nas należy dopracowanie języka, w którym się komunikujemy, i zmniejszyć możliwości nieporozumień. I to właśnie robisz. Analogie, takie jak sprawdzanie pisowni lub gramatyka, są oczywiście bardzo mile widziane w tym kontekście.

Sir Jane
źródło
3

Oto dwie analogie, które mogą okazać się przydatne:

  • Moja praca przypomina trochę odkrywanie nowych podejść do notacji muzycznej. ( przykład ) Chociaż dominujące systemy notacji są dość skomplikowane, warto zbadać alternatywy, które skracają czas / wysiłek / błędy kompozytora, wykonawcy lub pozwalają na wyrażanie niezgrabnych lub niemożliwych do wyrażenia elementów w dominującym systemie, lub nawet promują różne rodzaje myślenia, a tym samym prowadzą do nowatorskich kompozycji. (Ułatwia to zrozumienie, że jednym z wyzwań jest przekonanie ludzi do przyjęcia nowych rzeczy).

  • Pomagam projektować lepsze narzędzia dla ludzi w mojej branży. Podobnie jak ludzie w branży produkcyjnej są wspierani przez innowacje, takie jak wiertarki bezprzewodowe, wycinarki laserowe i drukarki 3D (z których żadna nie istniała 60 lat temu), ludzie w branży tworzenia oprogramowania są wspierani przez mocniejsze, bardziej precyzyjne, bardziej niezawodne lub łatwiejsze w obsłudze języki programowania i ich funkcje.

Artelius
źródło
2

Najprawdopodobniej masz jakiś powód do nauki języków - skorzystaj z tego powodu. Na przykład:

Staram się, aby komputery i ich aplikacje były tańsze, łatwiejsze w użyciu i bezpieczniejsze.

Jeśli to przykuwa ich uwagę, możesz zagłębić się nieco głębiej, ale nie zapominaj o dystansie wnioskowania - większość ludzi ma ogromne problemy z wyjaśnieniem czegoś, co jest zbyt dalekie od istniejącego doświadczenia i wiedzy ucznia.

Języki są daleko w dół po drabinie komputerowej. Ludzie, których próbujesz wyjaśnić, prawdopodobnie nie wiedzą, co to jest algorytm , tym bardziej, że istnieją różne sposoby reprezentowania tego algorytmu, które są mniej lub bardziej przydatne. Możesz wyjaśnić wszystko, jeśli przejdziesz wystarczająco delikatnie, ale bądź przygotowany na przejście przez wiele warstw, jeśli chcesz wyjaśnić coś tak „głębokiego” jak „język programowania RnD”. Pomaga, jeśli ludzie, których wyjaśniasz, dobrze radzą sobie z matematyką, ale jest to tak rzadkie jak znajomość obsługi komputera :)

Łatwo analogie. Brzmią jak oni pomagać, ale z mojego doświadczenia wynika, że zwykle dodać do zamieszania, nawet jeśli ty myślą, że są bardzo pomocne. Języki programowania są trochę jak adwokat mówić ... ale to nie jest bardzo pomocne dla osób, które nie już rozumieją zarówno programowanie i prawniczych, naprawdę. Jeśli naprawdę potrzebujesz dodatkowej pomocy, przykłady działają wystarczająco dobrze - ale musisz przydzielić je osobie, której wyjaśniasz (i co dokładnie badasz)

Wiesz, jak nie możesz podzielić przez zero? Staram się upewnić, że komputery nigdy nie próbują dzielić przez zero, aby nie ulegały awarii, gdy ktoś popełni błąd.

Luaan
źródło
▲ za zasugerowanie stopniowego i delikatnego podejścia.
PJTraill,
1

Uważam, że najlepsze analogie są dostosowane do osoby, z którą rozmawiasz. Czy oni są malarzami? Omów, w jaki sposób to, co robisz, jest ekwiwalentem eksploracji teorii tworzenia lepszych pędzli, tylko to pole ma tylko 60 lat zamiast 600! Equestrians? Porównaj to z rozwojem podkowy do zadań na przestrzeni lat.

Jeśli naprawdę chcą lepiej zrozumieć, moim ulubionym sposobem na wyjaśnienie tego jest porozmawianie o wypełnianiu formularzy podatkowych i instrukcji w każdej linii. Uważam, że większość osób powyżej 20 roku życia ma pewne doświadczenie z formularzem IRS 1040, a wypełnione przez ciebie pola całkiem ładnie odpowiadają mówieniu o przypisywaniu zmiennych. Następnie zwracam uwagę, że oprogramowanie odpowiada około 2 miliardom z nich na minutę (liczba wymyślona, ​​ale ma sens). Jeśli uczysz się języków komputerowych, łatwo jest zrozumieć, dlaczego lepsze instrukcje są tak ważne =)

Jeśli nadal wydają się zainteresowani, chodzi o moment, w którym zaczynam próbować wyjaśnić kontrolę przepływu. Zwykle, kiedy kończę dyskusję na temat kontroli przepływu nad formularzem 1040, zaczynają się ekscytować i pytają, czy sprzedałem rządowi którykolwiek z moich pomysłów!

Często mówię o systemach wbudowanych, więc czasami łączę analogię Form 1040 z robotem gotującym bochenek chleba (lub 500). Zwykle działa dobrze, choć z jakiegoś powodu przejście od formularzy podatkowych IRS do zrobienia czegoś, co pozostawia dobry smak w ustach, jest naprawdę trudne dla niektórych osób.

Cort Ammon
źródło
1

Twoi rodzice mają jakiś komputer. Prawdopodobnie nie jeden, ale wielu. Mogą mieć komputer stacjonarny, laptop, telefon lub iPad. Jeśli nie, to mają pralkę lub nagranie wideo, odtwarzacz DVD lub coś z komputerem w środku.

Jeśli nie, mówisz: „Przepraszam, ale udało ci się całkowicie żyć bez komputerów. Więc nie mogę ci wytłumaczyć, co robię. Ale świat się zmienia. Musisz mi tylko zaufać Wiem co robię. "

Jeśli mają jakiś komputer, mówisz: „To jest komputer i nie działa on tylko magicznie. Działa, ponieważ jakiś sprytny mężczyzna lub kobieta napisał program, który mówi komputerowi, jak ma działać. ci sprytni mężczyźni i kobiety są naprawdę trudni, a to, co robię, pomaga im ułatwić pracę ”.

gnasher729
źródło
-1

Jakiś czas temu zdecydowałem, że dobrą analogią do programowania, która mogłaby być łatwo zrozumiała dla osób z małym lub żadnym doświadczeniem komputerowym, byłoby pisanie przepisów na drutach .

Dobry przepis na drutach zawiera kilka rozmiarów z tej samej listy instrukcji, które dają pętle i instrukcje if. Jest nieczytelny dla tych, którzy nie robią na drutach, a jeśli zawiera błędy, kończy się to niedopasowaniem wzorów lub dodatkowym rękawem. To od Ciebie - jako autora przepisu - zależy, na podstawie niewłaściwych swetrów, gdzie jest przepis, który jest zły, i naprawić go.

Następnie możesz użyć przykładu „Patrzę na różnice w przepisach dotyczących robienia na drutach, szydełkowania, Nålebinding i podobnych” i uczenia się języka X (gdzie musisz znaleźć analogię do tego, co faktycznie robisz ).

Thorbjørn Ravn Andersen
źródło
Pytający nie uczy się programowania. Studiują projektowanie języków programowania.
David Richerby
@DavidRicherby Właśnie dlatego zasugerowałem skorzystanie z przykładu OP, w którym przepisy wyglądają na różne rodzaje pracy ręcznej. Najwyraźniej są one również bardzo różne.
Thorbjørn Ravn Andersen
-1

To magia!

Kiedy ludzie bez wiedzy technicznej pytają, co to znaczy pisać oprogramowanie / programy / zajmować się inżynierią oprogramowania, mówię im, czym tak naprawdę jest: magia. Magowie rzucają zaklęcia w ezoterycznym języku, aby wykonywać określone zadania, machają różdżkami i dzieje się coś magicznego. Wdaję pewne zaklęcia w ezoteryczny język, poruszam myszką i dzieje się coś magicznego (jeśli o to chodzi).

Jeśli nie są przekonani, poprosiłem ich, aby włączyli swój smartfon i powiedzieli mi, jak wszystko działa. Zwykle mówią: „Nie wiem, po prostu to robi. Naciskam przyciski i coś się dzieje”. Następnie mówię im: „Tak, dokładnie, ale wiem, co się naprawdę dzieje, i to w zasadzie to samo, co Harry Potter macha różdżką i mówi:„ Hocus pocus ”„ Dla wszystkich intencji i celów, dla laika, ja myślę, że jest to całkowicie uzasadnione wytłumaczenie.

Prawie wszyscy wiedzą, kim jest Harry Potter, co robi i co czyni go wyjątkowym (przynajmniej że jest magikiem i może robić potężne rzeczy za pomocą magii). Możesz po prostu wyjaśnić, że czasami magicy muszą pisać swoje zaklęcia w nowym języku, aby ich magia była jeszcze potężniejsza, co nie jest tak dalekie od prawdy. Możesz po prostu powiedzieć im, że studiujesz proces tworzenia potężniejszych ksiąg czarów, aby pomóc pokoleniu jeszcze potężniejszych czarodziejów, którzy mogą tworzyć jeszcze większą magię na swoich ulubionych urządzeniach konsumenckich. Wszyscy to doceniają.

Epicka porażka

Jeśli to się nie powiedzie, wracam do przykładu przepisu, ponieważ niejednorodność rozwiązań przynajmniej uczy ludzi, że istnieje więcej niż jeden sposób na skórowanie kota (lub upiec ciasto), a to jest część tego, co sprawia, że ​​programowanie jest tak zdradliwy. Pomaga również postawić osobę w pozycji procesora i czasami postępować zgodnie z instrukcjami, których może nie rozumieć (większość ludzi prawdopodobnie nie zna różnicy między sodą do pieczenia a proszkiem do pieczenia i dlaczego przepis miałby taki czy inny).

Dead Ends

Nie lubię używać matematyki jako przykładu, ponieważ aby robić matematykę, musisz zrozumieć, po co są kroki. Nie możesz wiele zrobić z matematyki, postępując zgodnie z instrukcjami na ślepo (cóż, możesz, ale zwykle nie tak uczą się ludzie). Nie podoba mi się sortowanie jako przykład, ponieważ jest to zbyt techniczne dla laika. Jeśli rozmawiam z kimś, kto może docenić przykład sortowania, prawdopodobnie ma już pojęcie o programowaniu i prawdopodobnie sam go wypróbował.

Kosiarz umyslów
źródło
1
Nie rozumiem, co to ma wspólnego z pytaniem. W szczególności pytaniem jest, jak wyjaśnić laikom teorię typów, a teoria typów to matematyka.
David Richerby
Być może niestety, ale nie, ale ogólnie programowanie to zamknięta książka dla ponad 99% populacji świata. Spędziłem sporo czasu przez lata, próbując przekonać nie-programistów do zrozumienia programowania, bez powodzenia. Wyjaśnianie zawiłości i przysmaków różnych systemów typów przypomina wyjaśnienie fizyki cząstek subatomowych tym samym ludziom - ich oczy będą się szklić i prawdopodobnie będą grzeczni, ale tego nie zrozumieją. I to jest w porządku - NIE POTRZEBUJĄ tego zrozumieć i najprawdopodobniej NIE ZACHOWUJĄ, że tego nie rozumieją. Wystarczy, że MY. :-)
Bob Jarvis