Jak prawy mózg może poradzić sobie z ogromnym kodem lewy mózg? [Zamknięte]


11

Jestem głównie artystą, choć opisuję siebie jako artystę / fizyka. Chociaż potrafię robić matematykę, radzić sobie ze słowami i „logicznymi” rzeczami uważanymi za lewy mózg, to wysiłek i popełniam błędy, podczas gdy mam się dobrze i przez większość czasu myślę w kategoriach rzeczy związanych z prawym mózgiem myślenie - relacje przestrzenne, holistyczny kontekst dużego obrazu itp. Oczywiście wszystko to jest rozmyte, ponieważ teoria prawej-lewej mózgu jest nadmiernie uproszczona i żadna aktywność umysłowa nie jest tak prosta. Jednak wydaje mi się, że dobrze wpasowuję się w artystów, reżyserów wideo, szefów kuchni i inne niewerbalne, kreatywne typy, podczas gdy większość ludzi w „IT” lub hardkorowych inżynierach oprogramowania ma umysły, które działają inaczej, z dbałością o szczegóły, trzymając się jednocześnie wiele szczegółów na myśli oraz silne racjonalne i werbalne możliwości.

Więc tutaj dostaję wynagrodzenie za naprawianie wybrednych i niejasnych błędów w ogromnym roju oprogramowania C ++, bardzo obciążającego OO, i żaden wiersz kodu nie ma sensu, chyba że mam na myśli około dwudziestu innych nazw klas i metod, relacje między nimi, przebieg egzekucji (bardzo podobny do spaghetti) i inne szczegóły.

Poza tym jestem też zdecydowanie przeciwny wielu współczesnym stylom C ++ i OO. Ci, którzy napisali ten kod, naprawdę pili głębokie OO i Modern C ++ kool-ade. Uważam, że w rzeczywistości kod jest znacznie trudniejszy do naśladowania, trudniej jest zdecydować, gdzie coś naprawić lub zmienić. Nie wiem, czy jest to część różnicy między lewą a prawą stroną (czy jakkolwiek chcesz to nazwać), czy nie.

Ale muszę pracować nad C ++ - ludzie zależą ode mnie od moich dochodów. Jakie są wskazówki i techniki radzenia sobie z tą sytuacją, aby były jak najbardziej skuteczne dla mojego pracodawcy?


9
To nie jest różnica między lewym a prawym mózgiem - nikt nie może zrozumieć lub zmodyfikować tego rodzaju kodu C ++ bez ogromnego wysiłku, poza osobą, która go napisała (często nawet nimi). Po prostu upewnij się, że kiedy zostaniesz poproszony o oszacowanie, ile czasu to zajmie, wypisz to dobre kilkaset procent, aby poradzić sobie z „współczesnym” projektem.
Carson63000,

8
Nie denerwuj się. C ++ jest bardzo dziwnym językiem, w którym celem projektu nie była użyteczność (dla ludzi) ani kompatybilność, jasność, poprawność (dla kompilatorów). Jedynym celem projektowym C ++ było uczynienie każdej możliwej permutacji leksykalnej coś znaczącego, nawet jeśli było to całkowicie niepraktyczne.

1
@Rocket: Wysadziłeś to w powietrze :-), ale zgadzam się w kawałkach.
Geek,

@mojuba - tak, używamy bardzo zaawansowanej formy C ++: D
DarenW

2
Nazywa się to „Legacy Code”, a problem nie dotyczy wyłącznie ciebie. Zobacz en.wikipedia.org/wiki/Legacy_code, aby znaleźć link do książki Michaela Feathersa o tym, jak oswoić taką bestię.

Odpowiedzi:


2

Spróbuj w większym stopniu zająć się projektowaniem rzeczy, w których wygoda z rozmytością jest siłą, która byłaby moją sugestią w zakresie rozwoju kariery. Dla kogoś, kto lubi być kreatywny, praca nad konserwacją może nie być świetnym dopasowaniem, podczas gdy praca nad nowymi rzeczami może być lepsza, jeśli jest to możliwe.

Chociaż nie ma nic złego w chęci dumy ze swojej pracy, chęć niezaangażowania się w szczegóły może być czymś, co może wymagać znalezienia nowego podejścia do poprawy. Zamiast patrzeć na to, jak się psuje i brudzi, może być inna perspektywa, która może sprawić, że będzie to zabawne.


Wsparcie i konserwacja prawdopodobnie mają swoich fanów, ponieważ niektórzy woleliby ulepszać istniejące systemy niż instalować nowy. Wiem, że lepiej pracuję z istniejącym systemem, który zmieniam, zamiast próbować wyciągnąć coś z eteru.

Możesz spróbować zauważyć, kiedy ludzie chcą pomysłów na radzenie sobie z różnymi problemami i rozwiązaniami burzy mózgów, ponieważ jest to część tego, co lubisz. Nie chodzi o to, aby wiedzieć, które wiersze kodu należy zmienić, ale raczej, czy możesz komuś powiedzieć: „Czy spojrzałeś na ten obiekt i sprawdziłeś, czy robi więcej, niż twierdzi?” rodzaj rzeczy.

Kolejną kwestią jest wiedza, co chcesz stworzyć: grafika, aplikacje, strony internetowe, procesy lub systemy? To są nieco inne rzeczy, które chcąc stworzyć, możesz zostać poproszony o „Stwórz co?”


Ten pomysł jest prawie od razu wczoraj ze spotkania z moim szefem. Zastanawiam się - czy tworzenie rzeczy nie jest zawsze bardziej pożądane przez wszystkich, a utrzymanie zawsze przypomina czyszczenie toalet? Gdyby ktoś krążył wokół i powiedział: „Wolę TWORZYĆ rzeczy!” czy byliby traktowani poważnie?
DarenW,

4
I podoba konserwacji kodu. To bardziej przypomina operację niż czyszczenie toalet: musisz naprawić część działającego systemu, nie psując go.
Frank Shearar

„wyciągnij coś z eteru” - przypomina mi sen, w którym wyciągałem z powietrza cytrynowe pączki, by zaimponować dziewczynie: D Ale poważnie, to dla mnie kluczowy punkt - zawsze chcę o tym myśleć, tworzenie nowych rzeczy.
DarenW,

3
@FrankShearar Czasami jest to jak operacja wykonana w toalecie; (
mlvljr

16

Nie brzmi (przynajmniej dla mnie), jakby Twój kod był szczególnie obiektowy lub szczególnie podobny do „Modern C ++”. Przeciwnie, jednym z kluczowych elementów dobrej orientacji obiektowej jest hermetyzacja, której głównym celem jest zmniejszenie liczby rzeczy, które musisz śledzić w danym momencie. Podobnie, „bardzo spaghetti… przepływ wykonania” nie brzmi ani zorientowany obiektowo, ani nowoczesny (cokolwiek).

Teraz przypuszczam, że jeśli spojrzałbym na kod, który przechowujesz, mógłbym zobaczyć go inaczej i / lub możesz zobaczyć mój kod jako podobny do tego, który trzymasz w tej chwili - to trochę trudne do odgadnięcia. Prawdą jest, że jeśli spróbujesz prześledzić każdy szczegół działania mojego kodu, przypuszczam, że mógłbyś postrzegać go jako raczej spaghetti przepływ kontroli.

Na przykład lubię (lub przynajmniej toleruję) całkiem sporo ukrytych konwersji niż wielu programistów - używam rzeczy takich jak klasy proxy. Oznacza to, że w trakcie wywoływania jednej funkcji mogą być łatwo utworzone trzy lub cztery obiekty tymczasowe różnych typów (i zauważ, że nie mówię o tym, że faktycznie wykonuję tę funkcję, tylko ją wywołuję ). Oczywiście wszystkie te obiekty tymczasowe zostaną ponownie zniszczone na końcu wyrażenia zawierającego wywołanie funkcji. Jeśli policzysz to, możesz łatwo wywołać pół tuzina lub więcej oddzielnych funkcji wywoływanych podczas wywoływania / powrotu z jednej funkcji, która jest „widocznie” wywołana w kodzie.

Celem robienia tego w ten sposób jest jednak ułatwienie zignorowania większości drobiazgów związanych z (na przykład) radzeniem sobie ze szczegółami, takimi jak reprezentacja danego obiektu, i skoncentrowanie się wyłącznie na tym, czym tak naprawdę jest . Z większością tego kodu będziesz musiał sobie poradzić tylko wtedy, gdy zobaczysz błąd w tej konkretnej części. Staram się jednak tego unikać, tworząc klasy tak małe i proste, że robią tak niewiele, że uświadomienie sobie, że jest to oczywiście poprawne, wymaga jedynie jednego spojrzenia , więc odtąd łatwo je zignorować.


Ugh! Tego rodzaju rzeczy powodują, że kulę się! Być może mój styl myślenia jest zbyt niski, tj. „Programowanie zorientowane na kodowanie”, aby czuć się komfortowo.
DarenW,

2
Co do „ułatwienia ignorowania większości ciekawostek” - styl kodowania wydaje się być gloryfikatorem ciekawostek. Próbując naprawić jedną drobną rzecz w tym tygodniu, było niewiarygodne ilości szczegółów, które tak naprawdę nic nie robią.
DarenW,

„... tworząc klasy tak małe i proste, które robią tak mało, że potrzeba tylko jednego spojrzenia ...” Czy istnieją jakieś dobre przykłady tego typu open source?
DarenW,

2
@darrenw pewnie, smalltalk 80
Tim Williscroft

10

Ostrzeżenie : ta odpowiedź jest bardzo długa i ma wiele psychobabble (co staram się wyjaśnić, ale nadal). Co mogę powiedzieć? Psychologia jest jednym z moich ulubionych przedmiotów poza programowaniem.

Jestem głównie artystą, choć opisuję siebie jako artystę / fizyka. Chociaż potrafię robić matematykę, radzić sobie ze słowami i „logicznymi” rzeczami uważanymi za lewy mózg, to wysiłek i popełniam błędy, podczas gdy mam się dobrze i przez większość czasu myślę w kategoriach rzeczy związanych z prawym mózgiem myślenie - relacje przestrzenne, holistyczny kontekst dużego obrazu itp. Oczywiście wszystko to jest rozmyte, ponieważ teoria prawej-lewej mózgu jest nadmiernie uproszczona i żadna aktywność umysłowa nie jest tak prosta. Jednak wydaje mi się, że dobrze wpasowuję się w artystów, reżyserów wideo, szefów kuchni i inne niewerbalne, kreatywne typy, podczas gdy większość ludzi w „IT” lub hardkorowych inżynierach oprogramowania ma umysły, które działają inaczej, z dbałością o szczegóły, trzymając się jednocześnie wiele szczegółów na myśli oraz silne racjonalne i werbalne możliwości.

Opiera się to na nieco przestarzałym spojrzeniu na neuronaukę. W pewnym momencie naukowcy uważali, że lewy mózg był odpowiedzialny tylko za logikę i surowe dane sensoryczne, podczas gdy prawy mózg był odpowiedzialny wyłącznie za intuicję i odczuwanie. Jak się okazuje, lewy mózg jest naprawdę zdolny do wszystkiego, co jest prawy mózg i odwrotnie. Jako osoba wyjątkowo mądra, ale logiczna, okropna kierunkami i orientacją przestrzenną, całkowicie pozbawiona kreatywności artystycznej tradycyjnie związanej z właściwym mózgiem, mogę to potwierdzić.

Najlepszym sposobem, aby pomyśleć o różnicy między lewym i prawym mózgiem, jest postrzeganie ich jako odbicia lustrzanego. Aby to zrozumieć, potrzebujesz danych w tle. Psycholog Carl Jung opracował teorię osobowości w latach dwudziestych, która podzieliła osobowość na kilka wymiarów. Prawdopodobnie słyszałeś o jednym z nich: introwersja kontra ekstrawersja. Napisałem kilka postów na ten temat, ale w zasadzie sprowadza się to do tego: introwersja odróżnia się od innych, podczas gdy ekstrawersja koncentruje się na tym, jak może łączyć się z innymi. Jest to określane jako „postawa”.

Następnie masz cztery różne funkcje poznawcze: myślenie, odczuwanie, odczucie i intuicja. Dla uproszczenia powiedzmy, że dwie z tych funkcji są uważane za funkcje „osądzania” (myślenia i odczuwania), podczas gdy dwie pozostałe są funkcjami „postrzegania”. Funkcje sędziowskie podejmują decyzje. Kiedy jesteś nastawiony na ocenianie, starasz się unikać niespodzianek. Chcesz wcześniej podjąć wszystkie właściwe decyzje, abyś nie musiał się dostosowywać, gdy pojawią się niespodzianki. Ponieważ tyle zaplanowałeś z wyprzedzeniem, możesz mieć skłonność do stania się sztywnym i nieelastycznym po podjęciu decyzji. Z drugiej strony postrzegający sposób myślenia woli latać przy siedzeniu spodni i toczyć się z ciosami.

Ogólnie rzecz biorąc, łączysz funkcję i postawę, aby stworzyć (kreatywnie nazwaną) postawę funkcyjną (introwertyczne myślenie, ekstrawertyczne uczucie itp.). Świadome osobowości ludzi są definiowane głównie przez dominującą postawę funkcyjną i pomocniczą postawę funkcyjną. W końcu psychologowie doszli do wniosku, że istnieją zasadniczo dwa rodzaje ludzi: ludzie, których dwie podstawowe funkcje składają się z introwertycznej funkcji osądu i ekstrawertycznej funkcji postrzegania, lub ludzie, których dwie podstawowe funkcje składają się z wywróconej funkcji oceny i introwertycznej funkcji postrzegania . Jeśli kiedykolwiek zdałeś test MBTI lub podobny test osobowości, ostatni list mówi, do której kategorii należysz. Jeśli jesteś P, oznacza to, że jesteś introwertycznym sędzią / ekstrawertycznym postrzegającym, a J jest na odwrót.

Nadal jesteś ze mną? Tutaj dochodzę do tego, co miałem na myśli, mówiąc, że obie strony są lustrzanymi odbiciami siebie. Nikt wtedy nie zdawał sobie z tego sprawy, ale w zasadzie budowali szkic tego, gdzie funkcjonuje mózg. Rzeczywiście, każda z funkcji Junga została przyporządkowana do szorstkiej lokalizacji w mózgu. Jak się okazuje, wszystkie funkcje P (introwertyk oceniający i ekstrawertyczne postrzeganie) znajdują się po prawej stronie mózgu, a funkcje J po lewej stronie mózgu.

Ilekroć mówisz, że ludzie o lewych mózgach są dobrzy w szczegółach, a ludzie o prawych mózgach są dobrzy w „dużym obrazie” (chociaż powiedziałbym, że „cały obraz” byłby dokładniejszy), skupiasz się na wywróconej stronie rzeczy . Jeśli osoba o lewym mózgu zarządza osobą o prawym mózgu, lewica będzie chciała poznać wszystkie szczegóły dotyczące tego, jak prawy będzie wykonywać swoją pracę z góry iz góry. Chcą, aby wymagania określone w kamieniu i twarde terminy były ustalane z góry. Righty chce po prostu bardzo szerokiego wyobrażenia o tym, co musi zrobić, aby później uzupełnić szczegóły.

Pamiętaj jednak, że nie jest to coś, czego doświadczasz. Wygląda na to, że kod lewicy prawdopodobnie nie był zbyt dobrze przemyślany z góry i ma pewne problemy, którym można by zapobiec przez pewne przemyślenia. Wynika to z faktu, że kiedy budujesz w głowie abstrakcyjne modele takich rzeczy, jak kod, używasz introwertycznej funkcji, która działa na odwrót. Righty chce wcześniej zbudować ten model i zrobić to w taki sposób, aby wypełniał wszystkie niezbędne szczegóły lub łatwo mógł uzupełnić wszystkie szczegóły. Ponadto mogą stać się sztywne pod względem najlepszego podejścia (pamiętaj, że twardo traktujesz swoje zdanie na temat bardziej zaawansowanych funkcji C ++). Model lewicowców będzie bardziej ad hoc i będzie uzupełniany w miarę upływu czasu.

Z mojego doświadczenia wynika, że ​​z tego powodu lewicowcy będą oskarżać prawicowców o nadmierną inżynierię wszystkiego, podczas gdy prawicowi będą oskarżać lewicowców o zbyt szybką i brudną sytuację. Obie strony mają w sobie ziarno prawdy, ale tylko wtedy, gdy podejście to jest skrajne. Oto, co jest śmieszne: przyjmują przeciwne podejścia, aby osiągnąć ten sam cel (to znaczy załatwić sprawę). Słudzy chcą, aby ich model zdecydował z góry, aby mogli poświęcić mniej czasu na wdrożenie rzeczy, a tym samym szybsze wykonanie całego projektu. Lewicowcy chcą spędzać mniej czasu na architekturze, aby mogli szybciej załatwić sprawę.

Nawiasem mówiąc, te dwie postawy są odwrócone, jeśli chodzi o rzeczy typu zarządzania projektami (określanie terminów, wymyślanie wymagań itp.). Może to prowadzić do naprawdę zagmatwanej sytuacji, w której jedna strona oskarża drugą o zbyt sztywne podejście, podczas gdy druga twierdzi, że druga strona nie planuje wystarczająco naprzód, a następnie w następnym argumencie obie strony przyjmują dokładnie przeciwne stanowisko.

Co możesz z tym wszystkim zrobić? Nic innego, jak być świadomym tych różnic i starać się jak najbardziej dostosować do poglądów drugiej strony. Problem polega jednak na tym, że dzieje się to w obie strony. Możesz zrozumieć i zadowolić lewaków w jak największym stopniu, ale nie zrobi to dużej różnicy, chyba że będą próbować odwdzięczyć się. To zawsze jest wyzwanie. Nie dlatego, że lewacy są dupkami i chcą sprawić, by ich życie było nieszczęśliwe, ale dlatego, że lewacy są przyzwyczajeni do dominacji w dziedzinie programowania. Jeśli twój sposób myślenia został powtórzony przez prawie wszystkich innych, byłbyś całkiem przekonany, że również masz rację.


Ładnie głęboka i wystarczająco długa, by czytać, aby odłożyć na chwilę prawdziwą pracę!
DarenW

6
Bardzo interesujące rzeczy. Masz jakieś źródła?
Mason Wheeler

4

Zaufaj swojej intuicji. Jeśli jesteś dobrym profesjonalistą, oznacza to, bez względu na swoją „inteligencję” - lewą czy prawą - rzeczy, które lewoskrętni robią świadomie, możesz to zrobić intuicyjnie. W końcu to to samo. Niestety nie kontrolujemy naszej podświadomości, ale działa ona szybciej niż nasza świadomość, jeśli w ogóle to robi. Te intuicyjne spostrzeżenia wychodzące znikąd są dokładnie wynikiem podświadomych obliczeń.

Aha, i możesz zawieść, to zbyt zawodne. Ale skoro zapytałeś ...;)


2

Myślę też wizualnie, a szczegóły typografii opierają się na mnie.

Warunki Google: brytyjska strona z dysleksją Style uczenia się: wizualne myślenie przestrzenne, nauka w całości lub w części.

Po pierwsze, porady po

  1. Osoby o prawidłowych mózgach wyobrażają sobie wszystko w „oku umysłu”.
  2. Kiedy twoja wizualizacja dobrze odpowiada rzeczywistości, praca jest łatwa
  3. Praworóżni myśliciele, którzy tego nie robią Dobrze myślący lewostronnie muszą polegać na wizualizacji
  4. Uczniowie o prawidłowych mózgach uczą się wszystkiego od razu „aha!” następnie dopasuj szczegóły do ​​mentalnej konstrukcji. Potrzebują najpierw przeglądu, a następnie szczegółów.
  5. Bez przeglądu kontekstu szczegóły unoszą się w próżni, niepołączone z okiem umysłu - więc należy użyć zapamiętywania brutalnej siły. Bardzo trudne dla praworęcznych.

WSKAZÓWKI, które pomogły mi:

  • 1 Użyj Koloru, aby rozróżnić części składniowe
    1. napisz pseudokod debugowanego kodu: robi to, a następnie przejdź tutaj i oznacz sekcje kodu, aby pasowały
    2. gdyby obiekty były, powiedzmy, prawdziwymi zwierzętami, miałyby nawyki i oczekiwane zachowania. Jest to łatwiejszy do zwizualizowania sposób myślenia o kodowaniu.
    3. Wyobrażam sobie kod jako historię z pseudokodem jako notatkami, a następnie śledzę cały proces.

  • Którą sekcję naprawić następnie?

  • Mój przepływ pracy

  • Kto tam mieszka? (proces, połączenia, dane itp.)

  • co oni muszą zrobić? (funkcja) OK

    dobrze

  • kod gdzieś to może być sprawdzone pod kątem składni / pisowni OK skopiuj i wklej

  • Test

    Wynik -> to działa? Tak, kontynuuj

    Nie? Bohaterowie muszą odgrywać rolę Hamleta tam, gdzie wszyscy umierają.

  • Powrót do środowiska

  • coś pominął ?, błędy sysntax
  • potrzebuje połączenia
  • potrzebuje danych
  • kod błędu ma znaczenie?
  • działa w innej części kodu?
  • Problem z wersją?
  • ma działać
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.