Po pierwsze, nie jest to ogólne pytanie „uczyń mnie lepszym programistą”, nawet jeśli wynik zadania tego pytania może wydawać się podobny. Na programmers.SE czytałem i widziałem, jak się zamykają tutaj , tutaj , tutaj , tutaj i tutaj .
Wszyscy wiemy, że istnieje wiele ogólnych sugestii na temat doskonalenia umiejętności programowania (np. Czytanie SO, czytanie zalecanych książek, obserwowanie blogów, angażowanie się w projekty typu open source itp.). To nie to, co ja jestem po.
Potwierdzam również aktywne czytelnictwo na tej stronie i mam nadzieję, że zadziała na moją korzyść, udzielając świetnych odpowiedzi. Z lektury korespondencji tutaj wynika, że istnieje ogromna liczba doświadczonych osób, które pracują lub pracowały w dziedzinach związanych z programowaniem. I większość z was może przekazać myśli w wymowny, zwięzły sposób.
Niedawno zauważyłem różnicę między kimś, kto potrafi programować, a programistą, który potrafi naprawdę myśleć . Nie wierzę, że aby zostać świetnym programistą, po prostu poddajemy się życiu przypominającemu gąbkę (tj. Wchłaniamy wszystko, co związane z naszą dziedziną, czytając, słuchając, oglądając itp.). Powiedziałbym nawet, że po prostu znając każdą koncepcję programowania, która pozwala ci rozwiązać problem X szybciej niż wszyscy wokół ciebie, jeśli nie możesz myśleć , ogromnie się ograniczasz - jesteś tylko szybkim robotem.
Lubię wierzyć, że jest jeszcze inne oblicze bycia świetnym programistą, niezwiązane z tym, ile wiesz o programowaniu, ale to, jak dobrze możesz przeplatać nowe koncepcje i stosować je w swoim zawodzie programistycznym lub hobby. Nie widziałem, żeby ktokolwiek zagłębiał się w ten aspekt ludzkiego umysłu i programowania, ani nie zajmował się nim. (Tak, możliwe też, że nie spojrzałem wystarczająco mocno - przepraszam, jeśli tak jest).
Więc dla każdego, kto spędził czas zastanawiając się nad tym, o czym wspomniałem powyżej - a może wszyscy są tutaj, ponieważ jestem trochę w tyle w moim rozwoju osobistym / zawodowym - jakie są twoje sugestie dotyczące uczenia się, jak myśleć? Oprócz zwykłego czytania, co jeszcze zrobiłeś, aby być lepszym niż inni ludzie w Twojej / naszej dziedzinie?
Odpowiedzi:
Moje sugestie dotyczące nauki myślenia:
I co ważniejsze, język określa co możemy nie myśleć.
źródło
Z mojego doświadczenia sprowadza się to do dwóch rzeczy:
Poza tym wszyscy różnią się pod względem sposobu myślenia o programowaniu lub uczenia się nowych umiejętności programowania. Sugeruję, abyś ciągle próbował nowych rzeczy i zachowywał to, co dla ciebie dobre.
źródło
Ćwiczyć. Ćwiczyć. Ćwiczyć.
Poważnie, aktywność umysłowa (tj. Myślenie) jest jak aktywność fizyczna. Im więcej to robisz, tym lepiej sobie z tym radzisz. (W rzeczywistości aktywność fizyczna obejmuje również rodzaj aktywności umysłowej. Najlepsi sportowcy nie tylko mają mięśnie we właściwym miejscu ...)
Jak więc (skutecznie) ćwiczysz myślenie?
(Tutaj generalizuję na podstawie czegoś innego ...)
Myślę, że zidentyfikujesz problemy myślenia, które uważasz za trudne (ale nie niemożliwe), i spróbujesz je rozwiązać (przemyśl je) i bardziej im podobne.
źródło
Mogą Cię zainteresować następujące dwie rzeczy:
Przepływ
Mihály Csíkszentmihályi , węgierski profesor psychologii, przedstawił pojęcie przepływu .
Mam szczęście, że mogę codziennie wchodzić w nurt, stosując starą technikę, której uczę się po zastosowaniu GTD, która jest kolejną akcją .
Mogę powiedzieć, że to naprawdę robi różnicę. Kiedy jestem w ruchu, produkuję wyższą jakość i szybciej niż kiedy nie jestem w tym stanie. Jestem całkowicie skoncentrowany na tym, co robię, dlatego myślę bardziej efektywnie.
Uważność
Zadałem pytanie dotyczące medytacji jakiś czas temu, ponieważ martwiłem się tym, że medytacja może zmniejszyć moje zdolności programistyczne (i kreatywne).
Właśnie rozpocząłem trening metody Jona Kabata-Zinna , więc jest za wcześnie, aby dzielić się z Tobą rozległymi doświadczeniami, ale z nielicznych, których do tej pory się uczę, mogę powiedzieć, że jest to prawdopodobnie coś, co będziesz chciał zrobić.
źródło
Zawsze wierzyłem, że dobrzy inżynierowie rodzą się, a nie są stworzeni.
Potrzebujesz do tego zestawu umysłu, logicznego, analitycznego, dedukcyjnego umysłu, w połączeniu z wytrwałością i dociekliwością potrzebną do uzyskania przeglądu i strukturalnego spojrzenia na problem w wydajny sposób i szybkiego przejścia od punktu A do punktu B, kierując umysł przez rozwiązanie.
Istnieje wiele badań sugerujących, że umiejętność ta jest znacznie wzmocniona przez dobre wczesne zetknięcie się z takimi rzeczami, a muzyka też pomaga. Po pewnym czasie twoje mapy mentalne są dość mocno podłączone. Nie pod względem tego , co myślisz, ale jak myślisz.
Czy możesz nauczyć się myśleć jako dorosły? Cóż, z pewnością można nauczyć się technik rozwiązywania problemów, ale wtedy trzeba postępować zgodnie z algorytmami, można, jak to się wymawia, stać się bardzo „szybkim robotem”. Intuicyjne zrozumienie jest prawdopodobnie wrodzone.
Nie jest to w żadnym wypadku ograniczone do naszego zawodu, wiele zestawów umiejętności jest zdominowanych przez umiejętności wrodzone, a nie nabytą odpowiedź. Ludzie mogą tego nie chcieć, ale najprawdopodobniej tak jest.
źródło
Znajdź forum online na temat swojej pasji. Coś, co ma jakąś społeczność. Najlepiej nie programować - fora programowania są zazwyczaj bardziej zorientowane na rozwiązania niż na dyskusje. Zająć stanowisko. Bronić tego. Użyj argumentów. Możesz także blogować, ale lepiej mieć przeciwnika. Chodzi o to, aby mieć sensowną i pisemną komunikację o czymś z kimś. Gdzie wymieniasz nieco większe fragmenty tekstu.
Nauczysz się przekazywać swoje pomysły i argumentować je. Ponieważ będziesz musiał bronić swoich poglądów, musisz poprzeć je faktami. Będziesz musiał coś wymyślić, wyartykułować swoją pozycję i wesprzeć ją; może nawet to zmieni.
Następnie skorzystaj z tej umiejętności analizy problemu i zsyntetyzuj opinię i zastosuj ją do czegokolwiek. Nawet programowanie.
źródło
Jedną rzeczą, o której myślę, jest to, że należy postrzegać rzeczy jako systemy, a wszystkie systemy są ze sobą powiązane. Każdy we wszechświecie. Ludzkość, planety, galaktyka, rośliny, światło słoneczne, fotosynteza, owady, skały, oceany, wszystkie systemy oddziałujące. Podobnie, z czasem cykle: narodziny, wzrost, rozkład, śmierć robaków, ludzi, cywilizacji, pasm górskich, układów gwiezdnych. Niekończąca się walka o energię. Wszystkie systemy
To jest Studium życia i natury w wielkim znaczeniu Studium. Zobacz wszystkie powiązane rzeczy, zobacz wszystkie interakcje. Skoncentruj się na tym, gdy oglądasz zachód słońca i wyczuwasz głębokość sił grawitacji, które wirują nas wokół Słońca, przyciągają nas na powierzchnię planety i słabnące światło słoneczne, które zaczerwienia się przed wejściem do siatkówki z prędkością 300 000 000 metrów na sekundę i robieniem zdjęć w mózgu naczelnych.
Kiedy zaczynasz myśleć o tym, o tym, jak wszystko jest powiązane, o tym, jak cena złota i niewolniczej siły roboczej i burz w całym Pacyfiku i kompleksach przemysłowych w Japonii są powiązane, a ty nie spiesz się, naprawdę nie spiesz się pomyślcie o tym wszystkim, wtedy wasze myślące „mięśnie” naprawdę będą się wyginać i rosnąć.
Teraz wiele z nich będzie poniżej progu ekspresji, ale nie pozwól, aby cię to powstrzymało. Twój mózg jest potężniejszy niż najpotężniejszy komputer. Popchnij. Nie sądzę, że można go podkręcić.
Przypomina mi się czarno-białe zdjęcie, na którym Albert Einstein wylegiwał się na leżaku na plaży i patrzył na ocean. Podpis brzmiał: „Tu siedzi Albert Einstein. Z jego mózgiem”.
Kolejnym wyzwaniem jest umiejętność komunikowania złożoności i współzależności wszystkich rzeczy w prosty sposób. To da ci coś do zrobienia, dopóki nie będziesz bardzo stary.
źródło
Jednym z podejść jest celowa praktyka .
Proste powtarzanie nie prowadzi do nabywania umiejętności - musisz być introspektywny, oceniać swoje wyniki, znajdować sposoby na lepsze działania.
Ilustracja: Mój bliski krewny rywalizuje w strzelaniu z pistoletu. Podczas treningu koncentruje się na sprawdzaniu każdego strzału, koncentrując się na prawidłowych krokach. Przeciwnie, intuicyjnie, mało uwagi skupia się na kiepskich ujęciach, ponieważ powtórzenie (próba) błędu to wzmacnia.
Po prostu wystrzelenie 100 strzałów w dół nic nie da. Umyślna praktyka strzelania 20 strzałami wzmocni dobre nawyki i doprowadzi do lepszej wydajności.
To samo dotyczy programowania - zastanów się, co robisz. Nie rób tego co miesiąc, co tydzień lub codziennie - rób to chwila po chwili, działanie po działaniu.
I tak dalej ...
źródło
Idź szturchać coś, co kochasz, aż znajdziesz przewagę.
Głęboki oddech,
Krok nad...
...
... Powiedz innym, co znalazłeś.
źródło
Więc chcesz pomyśleć
Wiele przeważnie świetnych sugestii z innych plakatów na temat tego, jak myśleć lub nauczyć się myśleć: przepływ, uważność, matematyka, pasja, praktyka ... więc nie pójdę tam, pokryty gruntem.
Ale nie wiadomo dlaczego. Jaki jest cel
Osobiście zrozumiałem, że zanim pomyślisz, musisz wiedzieć, dlaczego.
Najlepszą rzeczą do zrobienia jest słuchanie i patrzenie. (Traktuję oba jako całość, nie można ich rozdzielić)
Jedyny sposób na lepsze programowanie, niezależnie od tego, czy chodzi o gromadzenie wymagań, przekształcanie tych wymagań w szczegółowe specyfikacje systemowe, dopasowanie ich do dokumentów projektowych, wdrożenie kodu, debugowanie na całe życie, niezależnie od tego, czy pominiesz któryś z tych etapów, czy wszystkie, czy masz pięć minut na znalezienie rozwiązania, czy 20 lat, musisz słuchać i patrzeć.
Słuchaj tego, czego chce użytkownik, słuchaj tego, co użytkownik powiedział, że się wydarzyło, słuchaj, jak osoba wsparcia mówi ci, że widział. Słuchać. Słuchaj, nawet jeśli to nie ma sensu. Słuchaj, nawet jeśli jesteś przekonany, że się mylą. Słuchaj, a nie oceniaj.
Szukaj wskazówek, nie szukając, ale otwierając oczy. Spójrz na rzeczywistość. Nie możesz zacząć szukać odpowiedzi, zanim spojrzysz na miejsce zbrodni. Nie możesz znaleźć rozwiązania, dopóki nie udowodnisz wady.
Jeden przykład z mojego doświadczenia(w sprawie rozwiązywania błędów, ale można go naprawdę dostosować do wszystkiego). Z oczywistych względów (prawnych i innych) ukryję przed tym soczyste szczegóły. W systemie krytycznym dla bezpieczeństwa operator zgłosił poważną wadę. Niektóre geograficzne urządzenie śledzące faktycznie utraciło śledzenie, gdy „nie powinno”, z potencjalnym wpływem na życie (to „powinno” było prawdziwym błędem i wstrzymało nasze badania na zbyt długo). Na szczęście, chociaż zostało to znalezione tygodnie później prawie przypadkowo, ponieważ w odległym miejscu działał inny system, w przypadku którego inny operator przybył, aby udowodnić, że śledzenie nie zostało utracone w tym systemie. To zmusiło nas do ponownego myślenia. Nasz główny dostawca oprogramowania nie uwierzył nam ani sekundy, więc musieliśmy wyjść i udowodnić sprawę. Jedynym sposobem było przeszczepienie: budowanie symulacji w celu odtworzenia dokładnej sytuacji operacyjnej. Musieliśmy sfilmować dowód, aby dostawca nam uwierzył. Ostatecznie symulacja dostarczyła informacji przekraczających nasze nadzieje i doprowadziła nas do zrozumienia całego problemu. Potem nie trzeba było długo czekać.
Jedynym sposobem, w jaki doszliśmy do końca, było logiczne połączenie jednego zdalnego systemu z innym wykonującym podobną robotę, ale niezupełnie taką samą. To jest szukanie wskazówek (patrz). Było to możliwe tylko poprzez zaufanie do jednorazowego raportu i nie odrzucenie go jako przypadkowej usterki w systemie (Listen), a następnie ponowne usłyszenie drugiego raportu, który był sprzeczny z pierwszym (Listen).
Więc jeśli masz odpowiednie wskazówki (po wysłuchaniu i spojrzeniu), zdefiniujesz obszar problemu, zrozumiałeś pierwotną przyczynę lub kluczowe zasady, możesz najpierw pomyśleć o rozwiązaniach w celu dalszego zrozumienia (próba i błąd, symulacje, demonstracja, dowód koncepcji, makiety, wersje alfa, beta) i ostatecznie oferują solidne rozwiązanie (które czasami można ulepszyć po operacji w prawdziwym życiu).
Aby móc słuchać i patrzeć, trzeba mieć otwarty umysł, zaufanie i absolutne poświęcenie dla swoich celów. Jest to paliwo, o którym musisz pomyśleć, lub bardziej do tego stopnia, aby twoje myślenie koncentrowało się na właściwym celu (często problemem nie jest niezdolność do myślenia, ale brak dobrze zdefiniowanego celu, na którym można ćwiczyć umysł).
źródło
Myślę, że musisz wprowadzić rozróżnienie między różnymi rodzajami myślenia.
Kreatywne myślenie - jak wymyślić nowe pomysły, innowacyjne rozwiązania i nieoczekiwane rezultaty. Stoi za tym cała nauka, poszukaj Edwarda de Bono, technik kreatywnych itp. Niewielu programistów zagląda w tę dziedzinę.
Myślenie analityczne - mam na myśli proces naukowy. Spójrz na dane wejściowe, wyniki, zmierz to, co ważne, wyciągnij logiczne wnioski. Większość programistów zna technikę naukową, ale tak naprawdę nigdy jej nie używa. Zrób tak!
Krytyczne myślenie - myślę, że to bardziej filozofia. Odsuń się i spójrz na szerszy obraz, przejrzyj swoje założenia, czy naprawdę robisz to, co według ciebie brzmi, jakimi wartościami jesteś? Studiuj filozofię, istnieje mnóstwo świetnych autorów i pomysłów.
źródło
Matematyka uczy myślenia. Aplikacja wymaga kreatywności i doświadczenia.
Dobry wgląd. Z grubsza powiedziane, wymagania dotyczące „wielkości” zależą od twojej osobistej definicji „wielkości” ... i zmieniły się z czasem. Dziś sukces projektu polega na tym, że można szybko poskładać koncepcje i nie zagłębiać się w najdrobniejsze szczegóły. Osobisty sukces można zdefiniować jako opanowanie C # jak Jon Skeet.
Czytaj programistę w pracy . Znacznie bardziej doświadczeni koderzy niż szczegółowo to omawiam.
źródło
Pracuj nad zastosowaniem pomysłów i koncepcji z pozornie niezwiązanych ze sobą obszarów. Dla mnie błyskotliwość iPoda nie była inżynierią stojącą za stworzeniem świetnego odtwarzacza MP3, ale pomogła rozwiązać ogromny problem branży muzycznej z piracką muzyką i modelem sprzedaży płyt CD / Albumu. Jobs prawdopodobnie wykorzystał więcej tego, czego nauczył się w Pixar, w kontaktach z przemysłem filmowym. Wiedział, na czym polega prawdziwy problem.
źródło