Jak myśli programista? [zamknięte]

To może być beznadziejnie niejasne pytanie. Ale jestem zainteresowany, aby usłyszeć, jakie logiczne procesy myślowe ludzie przechodzą, gdy uczą się nowej koncepcji lub próbują uzyskać ich mózg wokół kodu, których nigdy wcześniej nie widzieli.

Zasadniczo, jakie ogólne kroki należy podjąć, aby przełamać problemy i co trzeba zrobić, aby "je zdobyć"? Gdybyś miał SCHEMAT BLOKOWY, jak działa twój proces umysłowy, gdy patrzysz na kod lub próbujesz rozwiązać problem, co może wyglądać na przykład?

Jakie typowe odniesienia, porady i założenia mentalne są przydatne w rozwiązywaniu problemów?

Czym się to różni między różnymi domenami? Na przykład w jaki sposób proces myślowy programisty jest podobny lub różni się od tradycyjnego procesu programisty aplikacji desktopowych?

 21
Author: Gordon Potter , 2009-08-04

10 answers

Jestem głęboko przekonany, że niezależnie od tego, jakiego rodzaju aplikacji szukasz po raz pierwszy, może to być aplikacja internetowa, aplikacja komputerowa, sterownik urządzenia lub cokolwiek innego, istnieją trzy kroki, które zwykle wykonuje jeden programista, aby zrozumieć, jak to działa:

Get The big picture:

  • Co to za aplikacja (web, desktop,...)?
  • Jak to jest warstwowe (standalone, klient-serwer, n-tier, ...)?
  • jaki jest cel aplikacji? Co to ma być do zrobienia?
  • dla kogo jest stworzona aplikacja?

Zobacz jak to działa:

  • jaki język(y) jest (są) używany?
  • Jak wygląda struktura kodu?
  • jak ustrukturyzowane są dane?

Zrozum (lub przynajmniej spróbuj) sposób, w jaki aplikacja została przemyślana:

    Czy to zostało w ogóle przemyślane?
  • czy aplikacja jest wyraźnie zoptymalizowana? (Na występy? Dla czytelności?)
  • czy aplikacja jest gotowa? Czy jest miejsce na ewolucje?
  • czy są oznaki wielu wydań?
  • itd...

Pierwszy i drugi etap są czysto techniczne, podczas gdy trzeci musi być tak nietechniczny , Jak to tylko możliwe... chodzi bardziej o psychologię i zrozumienie, w jaki sposób aplikacja została zbudowana. Oczywiście wymaga to doświadczenia, ale tak długo, jak myślisz wystarczająco mocno i nie trać czasu mózgu na szczegóły techniczne, w końcu to dostaniesz.

Cały ten proces nie powinien wymagać użycia klawiatura. Powinieneś tylko czytać, myśleć i robić notatki na papierze (nie żartuję: długopis i papier!).

 13
Author: Nicolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-09 07:23:38

Ho ho, powodzenia z tym. To świetne pytanie i jestem pewien, że dostaniesz mnóstwo odpowiedzi. Chociaż muszę powiedzieć, że nie mogę dać satysfakcjonującej odpowiedzi na to - ostatnią rzeczą, którą opisałbym moje procesy myślowe jako schemat blokowy - myślę, że nie ma na to żadnej złotej formuły.

Jedyną wskazówką w rozwiązywaniu problemów, którą mogę polecić, jest omówienie tego z kimś innym. W tych czasach, gdy uderzasz w ceglaną ścianę, przechodzenie przez nią z kolegą jest nieocenione. Dość często, jak również, w rzeczywistości nawet nie dodadzą wiele do dyskusji - w procesie uzyskiwania wszystkich swoich myśli na jawie, rozwiązanie może stać się jasne.

 12
Author: Steg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:45:43

Ludzie są notorycznie źli w badaniu własnych procesów myślowych, ale ja to zrobię. Testuję bardzo wysoko na zdolności wizualno-przestrzenne w testach IQ, średnio-do-wysokiej NA umiejętności słowne i umiarkowane na umiejętności matematyczne(wyjaśnia moją ocenę A-level z matematyki, jak sądzę). amd kiedy zaczynam projektować oprogramowanie, myślę o kształtach i połączeniach między nimi. Jeśli chodzi o opisanie tych myśli innym (lub wyjaśnienie ich dla siebie), używam prostych schematów blokowych lub diagramy obiektowe zaczerpnięte z metody Jacobsona Objectory - a nie zbyt skomplikowane rzeczy, które sugeruje UML. Czasami piszę tekstowe opisy złożonych rzeczy, głównie jako przypomnienia dla siebie, ale nigdy nie używam liczb ani matematyki.

OczywiĹ "cie to tylko ja - pracowaĹ' em z matematykami, ktĂłrzy byĹ ' y równie dobrymi lub nawet lepszymi programistami niĹź ja sam.

 4
Author: anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:46:41

Nie sądzę... Przetwarzam.

To jest właściwie mniej flip, niż się wydaje. Zawsze rozkładam zadania na ich komponenty, a następnie rozkładam je dalej, a to nie dotyczy tylko pisania oprogramowania! Podobnie jak @ Mark Pim u przejść rzeczy kolejno.

Moja żona bardzo się denerwuje, kiedy robię obiad, bo tak długo muszę zaczynać.

 3
Author: Hooloovoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:44:09

Divide & Conquer

Zaczynam od zrozumienia całego problemu takim, jakim jest, a następnie zaczynam odnajdywać wzory, które mogę rozpoznać i robić to samo dla nich w rodzaju rekurencyjnego procesu, dopóki nie będę miał zepsutego rozwiązania, które mogę zaimplementować i łatwiej śledzić.

 3
Author: Avihu Turzion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:47:48

To jeden z rzadkich przypadków, kiedy odpowiadałbym "to po prostu działa."Uczę się rzeczy, jeżdżąc przez nie. Nie mam sztuczek ani urządzeń, które mi pomogą. Trochę czasu zajęło mi nauczenie się PHP, ale po tym Javascript był znacznie łatwiejszy. Gdy zajmiesz się jedną rzeczą, kolejne przedmioty stają się skumulowane-łatwiejsze.

 2
Author: Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:39:12

Osobiście prowadzę wewnętrzny dialog ze sobą ' OK, więc musimy zapętlić tę listę liczb całkowitych. Ale możemy się złamać, gdy znajdziemy pożądaną wartość.''Ok, czy lista na pewno zostanie zainicjowana, gdy zaczniemy?'

Chciałbym zobaczyć, czy zostały przeprowadzone jakieś badania psychologiczne nad technikami rozwiązywania problemów.

 2
Author: Mark Pim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:40:54

Podobne do Jonathana Sampsona - to po prostu działa.

Kiedy atakuję prawdziwy problem, staram się myśleć o najbardziej logicznym sposobie przejścia przez niego. Potem, gdy wszystko idzie źle (jak to zwykle robi), muszę zrobić setki sidestepów, aby wszystko zrobić. Po prostu skup się na tym końcowym celu, na tej logicznej drodze, a dojdziesz do tego.

Ostatecznie jednak decyduje się na pracę dla mnie i kończę z gotowym produktem, który zwykle nie jest taki, jak planowałem out to be. Tak długo, jak klienci są zadowoleni, ja jestem!

 0
Author: Daniel May,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:45:03

Osobiście widzę kod w głowie Obrazkowo, a nie tekstowo (jak Neil Butterworth) - trochę trudno go opisać, ponieważ (cytując STIV) "nie ma wspólnej ramki odniesienia."

 0
Author: Skizz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:47:24

Moją główną umiejętnością jest identyfikowanie podobieństw między modelami lub systemami, o których już wiem, a zadaniem. Powiązania między niektórymi z nich mogą wydawać się dość abstrakcyjne; kluczem jest dostrzeżenie powiązań. Prowadzi to do abstrakcji wspólnych wzorców i podejść, które są szeroko stosowane. W związku z tym najważniejszą rzeczą, jaką dowiedziałem się o algorytmach, było to, że problemem nigdy nie jest "wymyślanie inteligentnego algorytmu do rozwiązania X". To " problem modelu X taki, że może być rozwiązane za pomocą istniejącego inteligentnego algorytmu Y'.

 0
Author: ire_and_curses,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-04 09:48:06