Czy programista powinien wziąć lekcje pisania, aby zwiększyć ekspresję kodu?


15

Biorąc pod uwagę, że programiści są autorami i piszą kod w celu wyrażenia abstrakcyjnych myśli i pojęć, a dobry kod powinien być czytany przez innych programistów bez trudności i nieporozumień, czy programiści powinni wziąć lekcje pisania, aby napisać lepszy kod?

Wyodrębnianie pojęć i rzeczywistych problemów / podmiotów jest ważną częścią pisania dobrego kodu, a dobre opanowanie języka używanego do kodowania powinno pozwolić programiście na łatwiejsze lub lepsze wyrażanie myśli. Poza tym, próbując napisać lub przepisać jakiś kod, aby go poprawić, dużo czasu można poświęcić na wybranie nazw funkcji, zmiennych lub struktur danych.

Myślę, że mogłoby to również pomóc w uniknięciu pisania kodu o więcej niż jednym znaczeniu, często z powodu nieporozumień między różnymi programistami. Kod powinien zawsze jednoznacznie wyrażać jasno swoją funkcję.



2
Byłoby miło, gdyby ludzie mogli nauczyć się pisać wyraźnie po ukończeniu 18 roku życia, szczególnie gdy używają języka obcego (jak w przypadku IT). Pytanie brzmi, czy istnieje metoda nauczania, która mogłaby osiągnąć dobre wyniki w stosunkowo krótkim czasie. Pamiętam, kiedy po raz pierwszy dostałem się na uniwersytet, dostałem kurs naukowego języka angielskiego, chyba trochę mi to pomógł (tak, pisałem gorzej niż to :)).
NoChance

1
Co to jest „ekspresyjność kodu”? Rozumiem, że to coś innego niż ekspresja języka programowania , ponieważ żadna ilość lekcji pisania nie zmieni tego ...
Andres F.

1
blog.codinghorror.com/recommended-reading-for-developers -> Zobacz kod ukończony 2. Najlepsza książka „jak poprawnie pisać kod”, jaką kiedykolwiek czytałem.
Machado

1
@JoseFaeti, to pan ma dobry gust w książkach, proszę pana. :-) Niekończące się strony omawiające, jak poprawnie napisać instrukcję „jeśli”? Policz mnie. :-)
Machado

Odpowiedzi:


25

1. Lekcje pisania? Nie całkiem.

Pisanie kodu źródłowego różni się wystarczająco od pisania książki.

Podczas gdy obaj dążą do tych samych celów: są tak jednoznaczni, jak to możliwe i są łatwi do zrozumienia, robią to w zupełnie inny sposób, a rzeczy, których pisarz powinien się nauczyć, nie są tym samym, co rzeczy, których powinien nauczyć się programista.

Przykład 1: liczby mówione

Liczby mowy są cenne podczas pisania powieści, poezji itp., Ponieważ zwiększają ekspresję pisania.

Kiedy ostatni raz widziałeś oksymoron lub litotes w kodzie źródłowym ? Czy pomogłoby to mieć je, czy raczej byłoby wyjątkowo szkodliwe dla każdego programisty, który będzie musiał później zachować taki kod źródłowy?

Przykład 2: słownictwo

Bogate słownictwo jest bardzo cenione w literaturze. Na przykład słownictwo Williama Szekspira wynosi od dwudziestu tysięcy do dwudziestu pięciu tysięcy słów. Bogatsze słownictwo sprawia, że ​​czytanie powieści lub wiersza jest bardziej interesujące.

Kiedy piszesz kod źródłowy, oczekujesz, że zostanie on odczytany przez osoby, które nie mówią zbyt dobrze po angielsku . Wykazanie, jak dobrze znasz angielski, byłoby bardzo szkodliwe dla twojego kodu. Jeśli znasz fantazyjne słowo, które oznacza dokładnie to, czego potrzebujesz, ale wiesz, że wiele osób nie zna znaczenia tego słowa, powinieneś raczej znaleźć mniej wyrazisty synonim lub zestaw słów, które wyjaśniają znaczenie. Słownictwo składające się z kilku tysięcy słów jest często w dużej mierze wystarczające dla danego projektu.

Zwróć uwagę na ważny aspekt: ​​chociaż Tłumacz Google może być bardzo pomocny dla osób, które nie są językiem ojczystym, istnieją dwa problemy z dowolnym tłumaczem:

  • Para języków niekoniecznie musi mieć dopasowanie 1: 1 między słowami. Niektóre słowa nie mają żadnego tłumaczenia na inne języki lub wiele słów może zostać przetłumaczonych na jedno słowo w języku obcym. Na przykład w języku rosyjskim istnieje ogromna liczba słów, które dotyczą konkretnych stanów śniegu i zimna, a tłumaczenie ich na francuski lub hiszpański jest zwykle niemożliwe bez utraty ich specyfiki.

  • Słowo czasami ma wiele znaczeń, a znaczenie wywodzi się z kontekstu. Tłumacz Google, mimo swojej wysokiej jakości, zwykle nie jest w stanie wskazać znaczenia w żadnej, z wyjątkiem najbardziej podstawowych sytuacji.

Przykład 3: wyrażenia

Wyrażenia również wzbogacają prozę. Autor oczekuje, że czytelnik będzie miał pewną ogólną kulturę i wykorzystuje tę okazję, aby tekst był bardziej wyrazisty.

Podobnie jak w poprzednim przykładzie, takie wyrażenia mogą być bardzo problematyczne, gdy czytają je osoby, które nie są native speakerem. Ale jeśli zwykle można przełożyć ogólne słownictwo, wyrażenia są znacznie bardziej problematyczne.

Na przykład angielski nie jest moim pierwszym językiem i na co dzień spotykam wyrażenia, w tym tutaj na StackExchange, których nie znam. Próbuję odgadnąć ich znaczenie, a czasem mam rację. Ale czasami się mylę, a Google wyrażenia te nie pomagają.

Użytkownik w swoim komentarzu przypomniał mi przykład, który sprawił, że cierpiałem przez długi czas, gdy dopiero zaczynałem programować: igła PHP i stóg siana . Nie byłem świadomy odpowiadającej mi wypowiedzi, więc za każdym razem, gdy czytałem dokumentację, zastanawiałem się, o co w tym wszystkim chodzi. Nie trzeba dodawać, że C # sequence.Contains(element)lub doskonałe Pythony element in sequencesą znacznie lepszą alternatywą. Cóż, przynajmniej programiści, którzy nie znają hebrajskiego, również musieli cierpieć na PHP , ale to inna historia.

Przykład 4: odniesienia kulturowe

Referencje kulturowe. W literaturze kuszące jest włączanie elementów z danej kultury, co także sprawia, że ​​książka jest bogatsza, a czasem ciekawsza do czytania.

Kod jest jednak adresowany do programistów z całego świata. Dlatego to, co jest oczywistym odniesieniem dla włoskiego programisty, może nie być tak oczywiste dla rosyjskiego, a to, co wie każdy indyjski chłopiec lub dziewczynka, niekoniecznie musi być znane amerykańskiemu programistowi.

Ten sam użytkownik, który mówił o igle i stogu siana, podał także doskonały przykład takiego odniesienia kulturowego: Graala. Kto nie wie, co to jest Graal? Mam na myśli, że to „Graal” po francusku, „Grial” po hiszpańsku i… „Kutsal Kâse” po turecku, ale nadal. Ile jednak amerykańskich lub europejskich deweloperów zna średniowieczną historię Chin lub Indii? Dlaczego ktokolwiek miałby zakładać, że każdy programista z Chin i Indii musi znać odniesienie do Świętego Graala?

2. Lekcje pisania ekspresyjnego kodu źródłowego? Pewnie.

  • Każdy programista powinien nauczyć się pisać ekspresyjny kod źródłowy.

  • Każdy programista powinien wyjaśnić, dlaczego komentarz w:

    int j = i + 1; // Creating i and adding 1 to it.
    

    jest złe, pomijając fakt, że jest całkowicie błędne.

  • Każdy programista powinien być w stanie zrozumieć podstawowe refaktoryzowanie i sposób, w jaki pomaga uczynić kod źródłowy bardziej wyrazistym.

  • Każdy programista powinien pamiętać, że 20% czasu spędza się na tworzeniu kodu, a 80% na jego utrzymywaniu. W przypadku niektórych projektów jest to około 5% - 95%.

  • itp.


Zasadniczo programowanie jest zbliżone do dokumentacji technicznej. Czy osoba, która pisze specyfikację dla śruby, musi brać lekcje pisania? Nie całkiem. To samo dotyczy programistów. Każdy powinien pisać bez popełniania błędów ortograficznych w każdym słowie, a każdy powinien mieć możliwość wyraźnego przekazania swoich pomysłów. Poza tym nie jestem pewien, w jaki sposób lekcje pisania byłyby bardziej przydatne niż, powiedzmy, kurs informatyki, bezpieczeństwa IT czy cokolwiek innego.

Ekspresyjności kodu źródłowego można nauczyć się innymi sposobami. superM wspomniał o jednym z nich w swojej odpowiedzi : czytaniu dobrego kodu. Mogę wymienić kilka innych:

  • Czytanie książek takich jak Beautiful Code lub Code Complete,

  • Poproś bardziej doświadczonego programistę o sprawdzenie kodu,

  • Zrozumienie wzorców oraz tego, jak i kiedy ich używać.


+1 dobra odpowiedź. Wyraziste i zwięzłe jest bardzo ważne, ale pisanie lekcji może nie być najlepszym wykorzystaniem czasu na szkolenie. Świadomie dążenie do pisania oczywistego, samoopisującego się kodu jest czymś, co każdy powinien zrobić, i myślę, że reszta po prostu działa, bez potrzeby faktycznych lekcji.
Daniel B

Jest dokumentacja, e-maile, ... a także kod - pisemna część komunikacji ze współpracownikami, szefami, użytkownikami, przyszłym sobą itp. Ale proszę, nie ma poezji.
Steve314,

Mam rację. Właściwie myślałem więcej o użyciu języków specyficznych dla domeny. Doszedłem do punktu, w którym czuję się bardziej swobodnie w programowaniu w języku specyficznym dla domeny, zamiast używać podstawowej składni języka programowania ogólnego przeznaczenia. To sprawia, że ​​kod jest łatwiejszy do zrozumienia i prostszy, nawet dla osób niebędących programistami. Zastanawiałem się, czy to z powodu mojego złego słownictwa angielskiego, stąd myśl o lekcjach pisania.
Jose Faeti

Ogólnie dobra odpowiedź, ale widziałem cyfry mowy w kodzie. Na przykład jedną z niewielu dobrych cech PHP jest to, że wszystkie jego funkcje wyszukiwania / wyszukiwania szukają igieł w stogach siana.
user949300

@ user949300: i to jest jeden z powodów, dla których tak bardzo nienawidzę PHP. Jako nieanglojęzyczny użytkownik języka angielskiego nie znałem odpowiedniego wyrażenia i dla mnie te terminy były bardzo pomocne. Porównaj to do C # sequence.Contains(element)lub doskonałych Python element in sequence. Więc nie, figury mowy nie mają miejsca w interfejsach API.
Arseni Mourzenko

11

czy programista powinien wziąć lekcje pisania, aby napisać lepszy kod?

Nie . Programista powinien wziąć lekcje pisania, aby nauczyć się pisać lepszą prozę. Programista powinien wziąć lekcje programowania, aby nauczyć się pisać lepszy kod. Mimo pewnych podobieństw pisanie prozy i pisanie kodu są zupełnie inne.

Nie oznacza to, że programiści nie powinni brać lekcji pisania. Oni powinni! Pewne powody:

  • Pisanie jest niezbędną umiejętnością dla każdej wykształconej osoby. Będziesz wydawać się mądrzejszy, jeśli umiesz dobrze pisać.

  • Pomimo dołożenia wszelkich starań programiści często muszą komunikować się z innymi ludźmi, często używając słowa pisanego.

  • Nauczysz się umiejętności pisania poza zajęciami pisania, a te są często przydatne dla programistów. Na przykład nauczysz się dyskutować o pracy innych ludzi, nie raniąc ich uczuć, i nauczysz się akceptować krytykę innych bez przyjmowania jej osobiście.


O to chodzi. Nawet jeśli Twój kod niekoniecznie będzie lepszy, staniesz się lepszą osobą, szczególnie w komunikacji z innymi programistami lub współpracownikami. Myślę, że moje pytanie powinno zostać sformułowane inaczej :)
Wydaje

2
Bardzo to. Umiejętność dobrego pisania prozy to kluczowa umiejętność każdego profesjonalisty
Zachary K.

6

Mój kod w coraz większym stopniu zależy od stworzenia wspólnego słownictwa między biznesem a zespołami technicznymi. Powiedziałbym, że doskonalenie umiejętności pisania może pomóc w zmniejszeniu dwuznaczności i nieporozumień w tych wysiłkach, ale raczej nie pomoże w ekspresji twojego kodu.

Literackie pojęcie ekspresji nie jest tym samym, co programowe pojęcie ekspresji. W wielu przypadkach dwuznaczność języka może być używana jako narzędzie literackie, nawet w literaturze faktu, w formie, która zwiększa ekspresję, ponieważ wywoła u czytelnika różne skojarzenia kulturowe, językowe i symboliczne, zarówno zamierzone, jak i niezamierzone. Ten rodzaj ekspresji nie jest pożądany w programowaniu; abstrakcja jest cenniejsza niż dwuznaczność. W programowaniu abstrakcja zwiększa elastyczność przy być może pewnym koszcie obciążenia poznawczego. Abstrakcja w formie literackiej może mieć odwrotny skutek niż programowanie: im bardziej abstrakcyjne jest twoje pisanie, tym bardziej prawdopodobne jest, że czytelnik będzie miał wrażenie, że nic nie mówisz. Wszystkie te symbole i skojarzenia wynikające z konkretnej mowy mają wartość,

Jednak programista nie jest maszyną. Ludzie w nieoczekiwany sposób korzystają ze wzrostu intelektualnego i emocjonalnego. Poprawa pisania może skutkować większą empatią klientów, ponieważ zmuszasz się do zmagania się z wyzwaniami komunikacyjnymi; być może poczujesz tego klienta, który powie, czego chce, a następnie dostarczysz go i zrozumie, że to nie jest to, czego potrzebuje. Być może nauczysz się koncentrować na tym, co nie zostało powiedziane.

Być może nauka rzucania gliną na koło garncarskie pomoże ci dostrzec podobieństwa między kunsztem a tworzeniem oprogramowania. Studiowanie sposobu, w jaki architekci budynku komunikują się, może sprawić, że będziesz bardziej doceniał budowanie słownictwa wzorców projektowych w programowaniu. Badanie biologii może prowadzić do fascynujących spostrzeżeń na temat tego, jak mrówki i pszczoły znajdują i komunikują się na temat źródeł pożywienia oraz w jaki sposób te proste mechanizmy można przełożyć na algorytmy wyszukiwania ścieżek.

Warto uczyć się rzeczy poza podstawową domeną, ponieważ ciekawscy ludzie są lepszymi programistami niż ludzie, którzy nie są.

Z tego, co warto, byłam prawie literaturą; Skończyłem na studiach wschodnioazjatyckich, ponieważ byłem bardziej zainteresowany zajęciami na tym wydziale. Jest szansa, że ​​nie będę w branży, gdybym nie studiował studiów wschodnioazjatyckich, ponieważ efekt uboczny nauki japońskiego sprawił, że stałem się bardziej cenny w czasie, gdy firma programistyczna zatrudniła mnie częściowo ze względu na umiejętności językowe. Nadal musiałem budować głębsze portfolio umiejętności technicznych, ale niezamierzone skutki uboczne uczenia się czegokolwiek mogą sprawić, że będziesz lepszym, bardziej odpowiednim specjalistą od oprogramowania.


+1: „Mój kod w coraz większym stopniu zależy od stworzenia wspólnego słownictwa między biznesem a zespołami technicznymi.”: Bardzo ważny punkt! Wiele błędów wynika z nieporozumień, ponieważ analitycy i programiści używają określonego terminu dla dwóch różnych rzeczy.
Giorgio,

4

Kiedy projekty programistyczne kończą się niepowodzeniem, zwykle jest to spowodowane nieudaną komunikacją, ogólnie wokół wymagań. Mimo że przeciętna znajomość języka angielskiego może wystarczyć do napisania kodu, dobra znajomość jest niezbędna do napisania odpowiedniego kodu. W dobie zdalnej komunikacji opartej na tekście pisanie w języku angielskim jest bardzo ważną umiejętnością komunikacyjną.

To powiedziawszy, twoje pytanie jest napisane w bardzo jasny i zwięzły sposób - lepiej niż większość programistów, z którymi pracowałem. Nie widząc swojego kodu, sugeruję skoncentrowanie się na wyrażaniu siebie w wybranym przez siebie języku kodowania. W przypadku Javy polecam książkę Joshuy Blocha „Skuteczna Java”.


Dziękuję, staram się jak najlepiej! W rzeczywistości doszedłem do punktu, w którym składnia języka programowania ogólnego przeznaczenia nie wystarcza, aby wyrazić siebie podczas kodowania. Teraz programuję narzędzia preprocesora w celu ulepszenia składni języka i implementuję języki specyficzne dla domeny w tej samej sprawie, co może być lepsze niż próba wymuszenia ekspresji w języku programowania ogólnego przeznaczenia.
Jose Faeti

3

Podobnie jak pisarzy uczy się czytając klasykę świata, tak więc programiści kształcą się, czytając dobrze kod. Ale jest jeden mały problem. Chociaż w literaturze są znani olbrzymy, jest ich niewielu w programowaniu. A jeśli tak, mogą „mówić” innym językiem. (Nie jestem nawet pewien, czy rozsądnie jest doradzić przeczytanie kodu źródłowego Minix przez Tanenbaum)

Istnieje wiele popularnych sposobów na uczynienie kodu bardziej czytelnym (=> łatwym do utrzymania), np. Pisanie komentarzy, nadawanie znaczących nazw itp. Poza tym wiele firm ustanawia swoje zasady pisania kodu, co znacznie ułatwia wszystko.

W każdym razie, podobnie jak wielu znakomitych pisarzy, programiści nigdy nie są zadowoleni z własnego kodu. Zatem wiedza, kiedy przestać, jest równie ważna jak pisanie kodu jakości.


2

Zawsze po prostu zatrzymuję się po każdym napisanym kodzie i czytam go ponownie, wyobrażając sobie, że nigdy go nie widziałeś, co daje mi długą drogę.

Jeszcze lepiej jest poprosić znajomego, który jest zaznajomiony z programowaniem, o przeczytanie kodu bez mówienia mu, co robi.


0

Nie sądzę, żeby to pomogło; kreatywne pisanie dotyczy fabuł, rozwoju postaci i dialogu, a nie jasnego wyrażania technicznych koncepcji. Pisanie techniczne może pomóc, ale wątpię - to tylko bardzo różne rodzaje pisania!

i zauważ, że „czytelny” kod jest subiektywny, a przede wszystkim kwestią stylu syntaktycznego i wspólnych idiomów (które różnią się między językami, a nawet zespołami)

ważne jest jednak wybranie dobrych nazw dla zmiennych, klas i metod. Każdy programista staje się do pewnego stopnia ekspertem merytorycznym w zakresie niektórych aspektów opracowywanej domeny, więc prawidłowe użycie terminologii domeny ma kluczowe znaczenie.

wzajemne oceny mogą pomóc Ci w tworzeniu słownictwa i pewności siebie


0

Z pewnością istnieje duża różnica między pisaniem kodu a pisaniem prozy.

W prozie zdania są łączone (lub rozdzielane) przez czas (sposób, w jaki podążają one w celu osiągnięcia celu lub znaczenia), ale w (wydajnym) kodzie można (ponownie) ładować części „historii” z tabel z powtarzalnymi działania / odpowiedzi. Tak więc interakcja z czytelnikiem (w prozie) lub użytkownikiem (kodu) jest zupełnie inna.

W inny sposób pisanie „ładnej” prozy i pisanie „ładnego” kodu jest podobne: nauka pisania (kod lub proza) jest procesem, który wymaga wielu błędów (lub myślenia / testowania ulepszeń lub przeformułowywania), aby je zdobyć ” elegancki'.

Myślę, że chemiczny układ okresowy pierwiastków jest elegancki, ze względu na bardzo zwarty sposób opisuje niektóre podstawowe właściwości podstawowych materiałów, których używamy, trochę jak wydajny kod, ale z pewnością nie jest proza. Żart ma wiele cech prozatorskich (wprowadzanie cię w pewien nastrój, utrzymywanie tego nastroju, a następnie zmienianie go, gdy jest nieoczekiwany), ale to okropna praktyka kodowania.

Ale oba rodzaje pisma wymagają kunsztu.


-1

z mojego punktu widzenia programista ma podstawową znajomość języka angielskiego i gramatykę. Ale wtedy każda rzecz, która przełamie monotonną rutynę programowania, zawsze będzie odmładzająca, więc lekcje pisania będą relaksujące dla programistów.


4
Monotonną rutynę programowania można by lepiej rozwiązać poprzez zmianę kariery niż pisanie lekcji.
Eliot Ball,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.