Czy deweloper powinien zostać zmuszony do zapamiętania szczegółów? [Zamknięte]

33

Wiele razy zapominam o mojej aplikacji. Nie zapamiętywam nazw tabel ani tego, co zrobiło zapytanie, i szukam tego, czego chcę. Mój lider zespołu powiedział mi, że mam zapamiętać nazwy tabel, których używam.

Czy programista musi zapamiętać nazwy tabel w bazie danych, nazwy klas itp.? A jeśli odpowiedź brzmi „Tak, cały czas”, co powinienem zrobić, aby zapamiętać te rzeczy?

Anyname Donotcare
źródło
27
Chciałbym móc je zapomnieć.
JeffO
6
Powiedz mu, że powinien pisać lewą ręką (co dla niektórych jest niezwykle łatwe, a dla innych trudne).
Job
4
„Zmuszony do zapamiętania nazw tabel” ??? WTF !? „Każdy musi nauczyć się tych dziesięciu tysięcy nazw kolumn do końca tygodnia! Potem będzie test; każdy, kto nie otrzyma 100%, będzie najpierw karmiony siłą stóp ku mojej prywatnej dumie wściekłych lwów !!! Bwahahahahaa !!!!! ”
Donal Fellows,
4
Kiedy byłem studentem spółdzielni, pracowałem z facetem, który tego ode mnie dokładnie zażądał, powiedział mi, że „tracę czas”, kiedy spojrzałem na to, powiedziałem „mówiłeś, że się tego uczysz!” kiedy nie mogłem recytować nazw tabel (i ich zawartości) z pamięci, i wykorzystałem brak zaangażowania w zapamiętywanie nazw tabel jako pretekst, aby całkowicie przestać mnie mentorować. Zaskoczyłem go w moim raporcie o współpracy.
user16764
2
Nie zapamiętuj, zapamiętuj.
tylermac

Odpowiedzi:

63

Nie powinieneś jawnie zapamiętywać tych rzeczy. Rozumiem przez to, że usiądź i naucz się ich, tak jak listy słów do testu pisowni. Po pierwsze, nazwy powinny być niezapomniane i możliwe do odkrycia , abyś mógł je znaleźć bez większego wysiłku.

Powinieneś także mieć dostęp do narzędzi, które pomogą ci tutaj z autouzupełnianiem i tym podobne.

W dużym systemie ponad 100 tabel nie można oczekiwać, że zapamiętasz każdą nazwę tabeli i nazwę każdej kolumny, jednak dzięki pamiętnym, wykrywalnym nazwom i regularnemu używaniu powinieneś pamiętać najważniejsze szczegóły i te, z których korzystasz dzień.

ChrisF
źródło
6
Pracując w aplikacji ze stołami 4k, mogę potwierdzić przydatność tej porady. Zapamiętywanie nie pomaga, konwencje projektu robią to (szczególnie gdy są one egzekwowane, a jeśli nie, musisz polegać na swojej pamięci).
Vineet Reynolds,
1
Aby ułatwić wykrywanie, utwórz ściągawki i / lub (modeluj) diagramy potrzebnych rzeczy. W ten sposób wystarczy spojrzeć na papier lub dokument / obraz i wyszukać odpowiednie nazwy tabel i kolumn.
Kissaki,
34

Einstein powiedział „nigdy nie zapamiętuj tego, na co możesz spojrzeć [w książkach]”, i całkowicie się z tym zgadzam.

Wykorzystaj swoją pamięć na rzeczy abstrakcyjne (techniki i zasady rozwoju), a nie na fakty, które możesz znaleźć, kiedy ich potrzebujesz.

Szczęśliwy kot
źródło
tak ... nie zapamiętuj tego, pojawi się, gdy wykorzystasz informacje. Miej zawsze przy sobie dokumenty referencyjne do tego podręcznika.
Newtopian
17

Żenujące przyznać - używam C od prawie 30 lat, ale nigdy nie pamiętam, jak zadeklarować wskaźniki funkcji - zawsze muszę wyjść z K&R, aby sprawdzić składnię.

Jeszcze bardziej zawstydzające, muszę naprawdę mocno przemyśleć, jak działa typedef - czy to:

 typedef foo int;

lub

 typedef int foo;

To są moje osobiste martwe punkty. Nie martwiłbym się, jeśli masz podobne.

Neil Butterworth
źródło
2
+1: Zacząłem programować C w 1985 roku i wciąż muszę szukać sposobu na deklarowanie wskaźników funkcji. Któregoś dnia zrobiłem sobie dźgnięcie i zadziałało i byłem z siebie całkiem zadowolony. (Pamiętam, jak pisać na maszynie ... :-)
Bob Murphy,
2
Cieszę się, że w języku, w którym pracuję (C #), odpowiednik wskaźników funkcji jest w rzeczywistości analizowalny przez ludzi, a nie tylko kompilator.
svick
@svick Och, nie mam problemu z odczytaniem wskaźników funkcji, to pamiętam, jak je napisać, z którymi mam problem.
Neil Butterworth,
3
Celowo nie zapamiętałem tabel pierwszeństwa C lub C ++. Mam je pod ręką w razie potrzeby, i naprawdę nie chcę pisać kodu, który dezorientuje kogoś, kto ich nie zapamiętał.
David Thornley,
Kod zależny od nieoczywistych reguł pierwszeństwa jest złym kodem.
Gort the Robot
9

Komputery dobrze pamiętają rzeczy. Komputery są również dobre w znajdowaniu rzeczy, które wcześniej zapamiętały.

Kluczową umiejętnością jest więc używanie komputera jako rozszerzenia pamięci. Napisz czysty kod, dokumentuj, naucz się efektywnie korzystać z narzędzi wyszukiwania, skonfiguruj środowisko programistyczne, aby łatwo było znaleźć rzeczy itp.

Przyjemnym efektem ubocznym jest to, że ułatwisz również innym czytanie twojego kodu.

tdammers
źródło
5

Pamięć jest ważna

Silna pamięć jest rzeczywiście jednym z najlepszych talentów, jakie może posiadać programista; właściwie każdy może to mieć. To naprawdę wyjątkowa rzecz, której zazdroszczę i podziwiam błogosławionych. Z pewnością może pomóc osobie stać się silniejszym programistą, prawnikiem, mechanikiem lub (wstaw tutaj wybraną pracę).

Ile powinno być wymagane?

Ale nie sądzę, aby wymaganie zapamiętywania wszystkich rzeczy było słusznym wymogiem. Wierzę, że zaczniecie zapisywać rzeczy w pamięci jako naturalną część robienia rzeczy. Dlatego czytanie książki o języku i używanie jej w środowisku produkcyjnym to nie to samo. Gdy codziennie pracujesz z czymś (niektórzy nazywają to „praktyką”), zaczniesz nadawać niektórym rzeczom drugą naturę.

Podobnie jak w przypadku innych plakatów, wierzę, że zapamiętanie kluczowych części aplikacji pomaga. Jednak nie jestem pewien, czy inwestowanie w zapamiętywanie tego wszystkiego jest warte inwestycji, gdy możesz skorzystać z funkcji takich jak Intellisense, która jest coraz bardziej powszechna w nowoczesnych narzędziach.

Jak możesz poprawić?

Nie jestem ekspertem od pamięci, ale niektórzy uważają, że rzeczywiście można poprawić pamięć poprzez ćwiczenia umysłowe, takie jak gry mózgowe (krzyżówki, sudoku, łamigłówki itp.). Teoria jest taka, że ​​twój mózg jest jak mięsień i jeśli użyjesz go na różne sposoby i ćwiczysz, możesz go wzmocnić.

Interesujące byłoby zbadanie, w jaki sposób rzeczy takie jak wykonywanie gier mózgu, programowanie i interaktywne działania wpłynęłyby na mózg z czasem. Czy takie rzeczy mogłyby pomóc w walce z początkiem utraty pamięci spowodowanym wiekiem lub demencją?

Bernard Dy
źródło
5

Tam, skąd pochodzę, jest takie stare powiedzenie, które w języku angielskim brzmi mniej więcej tak: „Głupiec zapamiętuje, pisze mądry człowiek”. Zasadniczo, bez względu na to, jak dobra jest twoja pamięć, zapomnisz . Jesteś tylko człowiekiem. A to powoduje, że poleganie na ludzkiej pamięci ... no cóż, zawodne. Nawet jeśli uważasz, że pamiętasz te nazwy tabel, czy możesz być w 100% pewien? Potrzebujesz kilku sekund, aby wyszukać nazwy tabel, ale możesz potrzebować godzin, a nawet dni, aby wyśledzić błędy spowodowane błędną pisownią.

Podsumowując, nie, jest to absurdalny wymóg, szczególnie w przypadku dużych projektów, które mogą mieć tysiące tabel i klas.

Davor Ždralo
źródło
3

Jeśli jest to coś, nad czym pracujesz i jest to zadanie długoterminowe, to tak, powinieneś dążyć do nauki i móc pamiętać różne nazwy tabel i kolumn, klasy, zmienne i metody. To będzie coś, co nadejdzie w czasie, gdy będziesz z nimi pracować. Nie nauczysz się ich wszystkich z dnia na dzień, ale powinieneś starać się wiedzieć jak najwięcej o systemie, nad którym pracujesz. Ponadto w dużym systemie nie ma możliwości zapamiętania wszystkiego, ale nie ma powodu, aby nie uczyć się i zapamiętywać jak najwięcej.

Ciągłe sprawdzanie wszystkiego to tylko hit wydajności - jeśli pracujesz nad zadaniem i musisz się zatrzymywać i sprawdzać co kilka minut, to jest przerwa w koncentracji. Użyj odpowiednich narzędzi, aby Ci pomóc, i naucz się / zapamiętuj, co potrafisz. To znacznie poprawi Twoją wydajność.

Thomas Owens
źródło
1
Zdecydowanie nie zgadzam się z zapamiętywaniem szczegółów. Powinieneś pamiętać pojęcia i funkcje. Oznacza to, że wiesz, co potrafi twój system i jak dowiedzieć się, jaka jest dokładna nazwa metody / zmiennej / kolumny.
edA-qa mort-ora-y
1
Nie spodziewałbym się, że będziesz wiedział wszystko, ale spodziewałbym się, że każdy, kto pracuje nad danym podsystemem, znałby ten podsystem od wewnątrz i na zewnątrz. Rozważałbym tę wiedzę dotyczącą twojej pracy.
Thomas Owens
3

Czy warto zapamiętać dokładne nazwy klas? Nie wydaje mi się

Czy warto wiedzieć, jakich terminów używa twój projekt w nazwach klas, abyś mógł je szybciej wyszukiwać? Zdecydowanie.

Scott McIntyre
źródło
2

Nie zgadzam się, że powinieneś zapamiętać nazwy tabel, ale powinny być łatwe do odgadnięcia. Aby ułatwić odgadnięcie, bądź konsekwentny. W ten sposób nie będziesz pytać siebie: „Hmm .. czy tabela foo jest w liczbie mnogiej czy pojedynczej? Czy identyfikator klucza podstawowego lub RID czy FooRID?”

Earlz
źródło
2

Nie wiem, w jaki sposób można zapytać bazę danych w dowolnym momencie, nie znając głównych nazw tabel i krytycznych nazw kolumn (ale na pewno nie wszystko). Wiem, że ludzie, którzy znają te rzeczy, bez konieczności ich rozgryzania, za każdym razem stają się bardziej wartościowi dla organizacji i stają się ludźmi „idź do”, gdy inni utkną.

Często stwierdzam, że kiedy ludzie nie zaczynają się tego uczyć, popełniają błędy w zapytaniach, nie zdając sobie z tego sprawy. Błędy, które często zauważam natychmiast w recenzjach kodu, ponieważ rozumiem naszą strukturę bazy danych i to, jak tabele odnoszą się do siebie oraz jakie są najważniejsze reguły biznesowe bez konieczności ich sprawdzania.

Osobiście uważam, że ludzie, którzy nie zawracają sobie głowy poznawaniem struktury, często pozostają na poziomie początkującym w zapytaniach do tej konkretnej bazy danych. Mają też tendencję do nie przetrwania zwolnień. Myślę, że twój szef próbuje wyświadczyć ci przysługę, abyś zwrócił większą uwagę.

HLGEM
źródło
1

Bardziej niż mocna pamięć, ta, która bardzo pomaga, to projektowanie oparte na domenie i przestrzeganie łatwych konwencji, takich jak nazwy tabel i klas, aby były takie same. Jeśli właściciel firmy mówi ci o tym wymaganiu, w kodzie powinny znajdować się warunki specyficzne dla domeny. W takim przypadku nie musimy pamiętać mapowań między warunkami handlowymi a nazwami w kodzie. Ten nawyk zajmuje trochę czasu, ale jest bardzo przydatny, ponieważ zmniejsza również błędy tłumaczeń tam iz powrotem między właścicielami firm i programistami.

Wraz z tym, jeśli czas trwania projektu jest bardzo długi, wygodne korzystanie z bazy kodu przez pewien czas podświadomie pomoże pamięci.

Vinod R.
źródło
przepraszam, czy mógłbyś wyjaśnić, co to znaczy domain driven design?
Anyname Donotcare
1
@ just_name Zacząłem od tego martinfowler.com/bliki/EvansClassification.html
Vinod R