Często się z tym spotykam, kiedy pomagam komuś, kto jest nowy w programowaniu i uczę się go po raz pierwszy. Mówię o naprawdę nowych początkujących, wciąż uczących się o OOness, konstruowaniu obiektów, wywoływaniu metod i tym podobnych. Zwykle mają klawiaturę, a ja po prostu udzielam wskazówek.
Z jednej strony funkcja autouzupełniania IDE pomaga przekazać opinię, że robią to dobrze i szybko polubią i na nich polegają.
Z drugiej strony obawiam się, że wczesna zależność od autouzupełniania IDE sprawiłaby, że tak naprawdę nie rozumieliby pojęć lub nie mogliby funkcjonować, gdyby pewnego dnia znaleźli się tylko z prostym edytorem.
Czy ktoś z większym doświadczeniem w tym zakresie może podzielić się swoją opinią? Co jest lepsze dla początkujących, autouzupełniania lub pisania ręcznego?
Aktualizacja
Dziękujemy za wkład wszystkim!
Wydaje się, że wiele odpowiedzi koncentruje się na głównym użyciu autouzupełniania, takim jak uzupełnianie metod, wyszukiwanie metod i dokumentacji itp. Ale IDE w dzisiejszych czasach są o wiele bardziej podobne.
- Podczas tworzenia obiektu typu List IDE automatycznie uzupełnia nową ArrayList po prawej stronie. Dla początkującego może nie być jasne, dlaczego nie może to być nowa lista, ale hej, to działa, więc idą dalej.
- Parametry metody wypełniania oparte na zmiennych lokalnych w kontekście.
- Wykonywanie rzutów obiektów
- Automatyczne dodawanie instrukcji „import” lub „using”
i wiele więcej. Mam na myśli takie rzeczy. Pamiętaj, że mówię o ludziach, którzy programują 101, naprawdę dopiero zaczynają. Widziałem, jak IDE robi te rzeczy, o których nie mają pojęcia, ale po prostu kontynuują.
Można argumentować, że pomaga im to skoncentrować się na przepływie programu i zrozumieniu rzeczy przed głębszym zrozumieniem niuansów języka, ale nie jestem pewien.
źródło
Odpowiedzi:
Myślę, że korzystanie z IDE pomaga w procesie uczenia się. Metody, właściwości, parametry, przeciążenia i tym podobne są wykrywalne. Dzięki przytłaczająco ogromnym bibliotekom Intellisense pomaga pozyskać wiedzę o JIT. W dzisiejszym środowisku kodowania niemożliwe jest nauczenie się wszystkiego z góry, a uczenie się JIT jest często jedynym praktycznym sposobem na szybkie osiągnięcie produktywności.
Rozumiem, że używanie IDE może być kulą, jeśli używasz go na ślepo, ale myślę, że korzyści znacznie przewyższają negatywy.
Z drugiej strony korzystanie z szablonów bez zrozumienia tego, co zostało wcześniej przygotowane, stanowi większy problem. Myślę, że można ich użyć jako narzędzia do nauki, jeśli programista poświęci trochę czasu na przeczytanie kodu wzorcowego. Ale większość ludzi nie zawraca sobie głowy. Może to być świetne narzędzie do nauki.
źródło
Zrozumienie pojęć i zapamiętanie dziesiątek setek głupich klas i metod bibliotecznych to dwie zupełnie różne rzeczy. Intellisense pomaga całkowicie wyrzucić z pamięci całą tę bezużyteczną wiedzę, a im wcześniej to zrobisz, tym lepiej. Zostaw więcej miejsca na przydatne koncepcje, nie marnuj swoich ograniczonych zasobów na interfejsy API.
Aby odpowiedzieć na zaktualizowaną część pytania: małe szczegóły składni, układ plików, wywołanie kompilatora i linkera są również nieistotne w porównaniu do ogólnych pojęć programistycznych. Po ich zrozumieniu początkujący nowicjusz nie może głębiej zrozumieć, jak naprawdę działają rzeczy niskiego poziomu. Lepiej to zrobić, gdy znasz już podstawy, w przeciwnym razie istnieje szansa, że zbierzesz wiele niebezpiecznych przesądów magicznych.
Na przykład, DrScheme IDE ma duże doświadczenie w nauczaniu programowania, a jego sukces wynika głównie z jego zdolności do koncentracji na tym, co jest naprawdę ważne.
źródło
Korzystanie z autouzupełniania wcale nie jest takie złe.
To po prostu szybkość, a dla mnie byłby to znak, że ktoś zaczyna chwytać IDE i dobrze go używa.
Nie rozumiem, w jaki sposób NIE użycie go pomogłoby im na przykład nauczyć się OO.
źródło
Po nauczeniu i szkoleniu studentów, którzy są nowicjuszami w programowaniu, stwierdzam, że autouzupełnianie / inteligencja czasami powoduje więcej szkody niż pożytku. Tak, mogą napisać program, używając go. Tak, kompiluje się i uruchamia, a może nawet zrobić to, o co poprosiliśmy. Ale nie rozumieją, co robią.
Kiedy nie rozumieją, co się dzieje, staje się mniej programowania i więcej hakowania rozwiązania, aby uzyskać oceny. Przekonałem się, że zdarzyło się to często z uczniami, ponieważ to, o co poprosiliśmy, stało się trudniejsze, po prostu hakowali, aż coś zadziałało. To zawsze stawało się jasne, gdy zbliżał się termin i uczniowie byli proszeni o pisanie prostych metod ręcznie ... nie mogli.
Tak, autouzupełnianie / intellisense pomaga nam (profesjonalnym programistom) bardzo często przyspieszać. Nie musimy zapamiętywać wszystkich różnych metod i list parametrów, ale jednocześnie możemy zaryzykować zgadnięcie, jakie parametry przyjmie metoda, o której wiemy, że mamy doświadczenie w programowaniu.
Początkujący nie. Będą czekać, aż IDE pobierze listę metod, będą przewijać tę listę, dopóki nie znajdą takiej, która może być tym, czego potrzebują, sprawdzą parametry, których potrzebuje i zobaczą, czy mają ją przekazać. .. i na koniec zhakują razem coś, co mogą oddać.
I pod koniec kursu, kiedy dostaną przepustkę, odejdą z klasy programistycznej z płytkim zwycięstwem, wielu nigdy więcej nie podejmie kolejnej klasy CS, bo nie rozumieli nic, co zrobili ani dlaczego to.
źródło
students were asked to write simple methods by hand...they couldn't.
Wszystko sprowadza się do tego, czego próbujesz ich nauczyć. Ogólne koncepcje programowania lub składnia specyficzna dla języka?Problem z IDE i środowiskami programistycznymi ogólnie nie polega na autouzupełnianiu, ale na zastosowaniu rozwiązań szablonowych (plik | nowy | projekt), w których wiele „interesujących” rzeczy zostało już dla Ciebie zrobionych i są w różnym stopniu ukryte .
Jest to pomocne dla kogoś, kto na ogół rozumie, co dzieje się pod maską - ale dla kogoś, kto potrzebuje tego, czego potrzebuje, jest mniej.
Jest też kwestia czasu potrzebnego na odpalenie ciężkiego IDE ...
Dlatego uważam, że używanie czegoś lżejszego i możliwość uruchamiania aplikacji, w których sam napisałeś każdy wiersz kodu, ma spore zalety - zwłaszcza, że użycie edytora tekstu i kompilatora pokazuje ważną kwestię, że nie potrzebujesz IDE itp. Do pisania oprogramowania, ale to nie znaczy, że chcę używać edytora tekstów przez długi czas i to stwarza wyzwania w zakresie debugowania - chcesz być w stanie robić punkty przerwania i możesz być w stanie przejść krok po kroku przez kod ponieważ ułatwi to zrozumienie, co się dzieje.
Oczywiście możemy jeszcze bardziej pomylić ten problem, rozważając takie rzeczy jak Python, w którym masz wiersz poleceń „na żywo” ...
Dobre pytanie, żadna dobra odpowiedź - z wyjątkiem tego, że chcesz uczyć się progresji i zacząć od edytora tekstów i kompilatora (lub interpretera wiersza poleceń) pozwoli ci skoncentrować się na podstawach składni i logiki, zanim przejdziesz do dalszych złożone rzeczy, które łatwiej będzie zrobić w bardziej rozbudowanym środowisku programistycznym.
źródło
Uczenie się na własnej skórze zwykle pozostaje przy tobie.
Jako początkujący NIE używaj IDE. Użyj wiersza poleceń, ucz się na własnych błędach. Pomoże to również lepiej zrozumieć opcje kompilatora i linkera.
Kiedy więc używasz IDE? Kiedy projektujesz coś wielkiego lub pracujesz na ogromnej bazie kodu z mnóstwem klas, metod i zmiennych.
źródło
Jako pierwszy powiedziałbym, że IDE są dobrodziejstwem dla produktywności, nawet jeśli często narzekam na ich dziwactwa. Jednak nauczyłem się BASIC, C, C ++, Java, Python, Perl, PHP i kilku innych języków bez niczego poza edytorem podświetlania tekstu oraz kompilatorem / interpretatorem języka. Właściwie nauczyłem się Java w Notatniku!
Nauka IDE podpowiada „magię” - idea, że „to działa; nie ważne jak”. Abstrakcja jest dobra; magia jest zła. Programista powinien wiedzieć lub być w stanie dowiedzieć się wszystkiego, co dzieje się w projekcie. Dobre IDE ma za zadanie zajmować się księgowością, a nie kontrolowaniem projektu. Właściwie użyte to świetne narzędzie. Ale jaki rzemieślnik zaczyna od korzystania z routera CNC?
Myślę, że sposób, w jaki się nauczyłem (pisanie wszystkiego i znajomość kompilatora, aby zbudować projekt) pomógł mi niezmiernie, kiedy w końcu zacząłem używać IDE. Na przykład projekt Java nie jest małym folderem w projekcie Eclipse, ale zbiorem klas w strukturze pakietu z niektórymi plikami XML do ścieżek, konfiguracji i wdrażania. Nie chciałbym budować aplikacji dla dużych przedsiębiorstw bez IDE, ale mogę budować małe. Ułatwia to zrozumienie struktury dużych, a kiedy chcę określonego zachowania w kompilacji, powiedzmy, wiem, jak działa javac, więc mogę dostosować rzeczywistą monit kompilacji, zamiast próbować znaleźć magiczną kombinację, która nie działa istnieją w konfiguracji kompilacji. Uważam również, że lepiej rozumiem komunikaty o błędach oraz sposoby ich znajdowania i naprawiania.
Nie nauczałbym używając IDE. Myślę, że początkowe projekty są na tyle małe, że argumenty za zarządzaniem złożonością są dyskusyjne. Jeśli uczysz na przykład języka Java, możesz umieścić wszystkie swoje klasy w tym samym folderze i
javac *.java
. Nie potrzebujesz do tego IDE! To przemawia za tym, aby projekty były małe, niewiele więcej niż weryfikacja koncepcji. Zminimalizuj koszty ogólne i skoncentruj się na nauczaniu koncepcji, której potrzebują uczniowie. Większe projekty, w których przydatne byłoby IDE, należą do bardziej zaawansowanych klas SE lub projektów dedykowanych.Jeśli chodzi o pomoc w znalezieniu klas i badań API, ponownie uważam, że jest to dyskusyjne, jeśli projekty są utrzymywane na małym poziomie. Również w Javie javadoc jest bardzo łatwy do odczytania. Zresztą nikt nie może utrzymać całego interfejsu API i będzie czas, kiedy będziesz musiał zbadać API bez korzyści dla IDE. Na przykład w innych językach lub w przypadku zdalnego przesyłania na serwer, na którym nie można otworzyć IDE. Naucz, jak znaleźć dokumentację, a nie „naciśnij”. i możesz zobaczyć, jakie są metody obiektu ”.
Każdy programista może nauczyć się IDE, ale znajomość IDE nie czyni z ciebie dobrego programisty. Pomijając czarny humor, „magia” nigdy nie jest dobrym słowem dla programisty.
źródło
Być może początkujący powinien po prostu najpierw pracować nad łatwiejszymi problemami. I nie, te problemy nie powinny wymagać ani zachęcać do korzystania z IDE do wykonania zadania. W dłuższej perspektywie można zyskać więcej dzięki zrozumieniu podstawowych pojęć. Narzędzia powinny przyjść później.
Żaden rzemieślnik do obróbki drewna nie skoczyłby prosto do użycia strugarki o dużej mocy bez uprzedniego zrozumienia zawiłości zarówno rodzaju drewna, jak i płaszczyzny ręcznej.
(Uwaga: autouzupełnianie i inteligencja to dwie drastycznie różne rzeczy).
Intellisense samo w sobie nie jest złe. Jest to złe tylko wtedy, gdy używa się kuli do zgadywania funkcjonalności bez czytania lub rozumienia podstawowej dokumentacji lub implementacji.
Punkt boczny: jeśli język wymaga IDE do kodowania dla ciebie, prawdopodobnie język ma niewłaściwy poziom abstrakcji dla problemów, które próbujesz rozwiązać.
źródło
Kiedy dorastamy jako dziecko, nie mówi się nam, że musimy zrozumieć zawiłe zasady języka angielskiego, zanim będziemy mogli mówić. Nie powiedziano nam, że musimy w pełni zrozumieć właściwe użycie przyimków, spójników i unikać fragmentów zdań. Uczymy się przez działanie. Uczymy się przez sukces i porażkę.
IDE z autouzupełnianiem pomaga nowemu programiście zdobyć zaufanie, ułatwiając tworzenie programów, nie zmagając się z zapamiętywaniem wszystkich niezliczonych funkcji ogromnej liczby bibliotek.
Gdyby ktoś naprawdę ekstrapolował pogląd, że autouzupełnianie szkodzi nowemu programistowi, ponieważ sprawia, że jest to dla nich zbyt łatwe, można argumentować, że nie należy używać podręczników podczas programowania, ponieważ zawarte w nim pojęcia należy najpierw zapisać w pamięci, ponieważ brak ich zapamiętania spowalnia je i nie pozwala im w pełni zrozumieć pojęć.
Autouzupełnianie to narzędzie, które służy do zwiększenia produktywności programisty. Podobnie jak w przypadku nauki języka po raz pierwszy, po zdobyciu pewności siebie i poziomu sukcesu z tym, czego się uczymy, pracujemy nad poprawą naszej wiedzy.
źródło
Na początku trudno zbudować coś, co działa, więc wszystko, co pomaga marce, tym lepiej. Nowy programista będzie potrzebował kogoś starszego, aby zastanowił się, czy listy powiązane z tablicą lub listy połączone będą lepiej pasować do danego problemu. Każdy z nich ma swoje mocne i słabe strony.
Bez względu na to, czy początkujący ma IDE, czy przegląda dokumenty API online, nie będzie żadnej różnicy między tworzonym przez siebie kodem. Podczas gdy radzenie sobie z bólem związanym z pisaniem błędów składniowych może być doświadczeniem uczenia się, jest zbyt wiele do nauczenia się martwić na samym początku.
Nie uczysz się chodzić po linie, idąc prosto na drut bez siatki. Zaczynasz od chodzenia po linie o centymetrach od ziemi. Zaryzykuję stwierdzenie, że większość z nas pracuje z IDE i jakimś skryptem kompilacji (skrypt kompilacji Visual Studio jest tworzony przez IDE, ale on tam jest). Większość z nas nie buduje naszych klas ręcznie za pomocą edytora tekstu, a następnie ręcznie wywołuje kompilator. Dlaczego powinniśmy narzucać to nowicjuszowi, który ma o wiele więcej do nauczenia się?
źródło
Nie widzę potrzeby cierpienia z powodu rezygnacji z narzędzi, nawet gdy programista się uczy. Uważam, że dodatkowy czas i wysiłek, który trzeba by napisać kod bez narzędzi, lepiej byłoby poświęcić na naukę pisania testów jednostkowych i debugowania. Gdy użytkownik będzie wiedział, jak przetestować swój kod i przejść przez niego podczas działania, dowie się wiele o tym, co faktycznie robi.
Poza tym to nie jest tak, że użycie IDE oznacza, że kod sam się pisze. Nieudolny lub początkujący programista napisze kod, który nie będzie działał bez względu na to, czy używa IDE, czy nie.
Po prostu widzę IDE jako kolejny poziom abstrakcji podczas kodowania. Pisząc Javę, generalnie nie muszę rozumieć, jak działa kod bajtowy, który generuje. Jeśli nowy programista korzysta z bibliotek Java, nie musi wiedzieć, w jakim pakiecie się znajduje, jeśli IDE może dla nich dodać je automatycznie. W obu przypadkach, gdy może pojawić się błąd lub problem na niższym poziomie (np. Kolizja nazwy klasy), który powoduje błąd, wtedy nadszedł czas, aby programista spojrzał na niego ręcznie.
źródło
Wiele innych dobrych odpowiedzi, więc nie uważaj tego za kompletną odpowiedź, ale dla początkujących i doświadczonych użytkowników dobrze jest zobaczyć pełny obraz funkcji, jakie mają do dyspozycji.
W Delphi mogę nacisnąć ctrl-j i zobaczę listę wszystkich możliwych rzeczy, których syntaktycznie mogłem się spodziewać.
Niekoniecznie się zgadzam, ale przeczytałem argumenty, że programiści nie powinni nawet patrzeć na członków klasy prywatnej obiektów, których używają iw ten sposób automatyczne uzupełnianie zapewnia każdemu użytkownikowi natychmiastowe odniesienie do interfejsu API.
Nowsze IDE pozwala użytkownikom i programistom języka umieszczać meta-dane w swojej inteligencji, co dodatkowo zwiększa zdolność do czytania i rozumienia, co robią funkcje, bez czytania źródła (co jest czymś, czego i tak nie powinni robić).
Być może dla początkujących najlepiej jest przeczytać i zrozumieć wszystko, co wdrażają. Ale może lepiej byłoby zadać pytanie, czy początkujący powinni mieć możliwość dołączania lub importowania dowolnych przestrzeni nazw lub jednostek bez dokumentacji, dlaczego to robią.
źródło
Z mojego doświadczenia wynika, że używanie IDE do nauki podstaw obsługi OO jest świetne, ponieważ ukrywa część złożoności pisania kodu, jednocześnie pozwalając nowemu programistowi skupić się na logice programu. Jednak wkrótce po nauczeniu się programowania i podstawowych zasad OO byłem, poprzez zajęcia zmuszone do dokładniejszego zrozumienia, jakie elementy potrzebne są do interakcji ze sobą w plikach źródłowych (nie zapominając o instrukcjach importu, tworzeniu odpowiednich klas itp.) Przez kurs programowania gdzie musieliśmy używać terminalu tylko maszyn Unix.
Jest to możliwe w szkole, ponieważ ktoś ma „władzę”, aby zmusić cię do korzystania z narzędzi lo-fi. Byłoby o wiele trudniejsze do osiągnięcia w działalności gospodarczej lub środowisku korporacyjnym.
źródło
Mam dwie przemyślenia na ten temat. Po pierwsze, aby naprawdę się czegoś nauczyć, uważam, że musisz wiedzieć, co się naprawdę dzieje. Dzięki temu, jak dobry jest IntelliSense, może ukryć niektóre z nich przed nowym programistą. Na przykład miałem klasę inżynierii sieci w college'u, gdzie właściwie zbudowaliśmy własne ramy sieciowe, aby zbudować nasze końcowe aplikacje. Wyszedłem z tej klasy z umiejętnością dostosowania się do prawie każdego frameworka sieciowego, ponieważ miałem zrozumienie tego, co było pod tym wszystkim na początek. Używanie IDE nie jest do tego stopnia, ale myślę, że wciąż jest o co chodzi.
Jednak korzystanie z IDE może także powodować otwieranie interfejsów API dla nowych programistów. Kiedy zacząłem poważnie kodować, używane przeze mnie IDE pomogło mi ogromnie, ponieważ robiłem takie rzeczy, jak pisanie w obiekcie, używaj autouzupełniania, aby zobaczyć, jakie metody on posiada, a następnie badaj je przy użyciu dostępnych dokumentów. Wszystko to zostało wykonane w ramach IDE i było doskonałym narzędziem do nauki.
Tak, uważam, że korzystanie z nich jest OK, o ile poświęcisz czas na zrozumienie, co się dzieje. Samo użycie rzutowania obiektu bez zrozumienia, dlaczego musiałeś to zrobić, jest naprawdę złe, ale jeśli nowy programista zobaczy, że możesz użyć rzutowania obiektu, a następnie zobaczy, dlaczego nie widzę nic złego.
źródło
Uczenie się wymaga praktyki. Programowanie może być bardzo frustrującym zadaniem, gdy nie masz pojęcia, co możesz zrobić ani jak to działa.
Powiedzmy, że niepraktyczne jest czytanie wielu książek o zasadach programowania bez pisania jednego wiersza kodu; niczego się nie uczy w ten sposób.
Intellisense jest bardzo pomocny w udzielaniu nowym programistom pomocy, której potrzebują, aby kontynuować programowanie, ćwiczyć, a tym samym uczyć się.
Jak już powiedziano, uczenie się konkretnych interfejsów API nie jest tym samym, co uczenie się zasad programowania. Niewątpliwie stanie się to, że nowi programiści będą popełniać błędy (niezależnie od Intellisense), a sposób, w jaki zdecydują się naprawić te błędy, doprowadzi ich do zostania dobrymi lub biednymi programistami.
Jeśli próbujesz nauczyć kogoś programowania, zachęcę go do korzystania z Intellisense i zabawy, dopóki się nie utkną. Wtedy próbowałem zbudować fundament, ucząc ich, dlaczego utknęli.
źródło
IMO, IDE sprawi, że będziesz bardziej produktywny. Jednak dla początkujących programowanie w IDE nie jest na ogół dobrym pomysłem. Wystarczyłyby edytory tekstu, takie jak notatnik ++, notatnik itp.
Ponadto ogólnie nie uważa się za dobry pomysł, aby rozpocząć naukę programowania w języku wysokiego poziomu. Proponuję zacząć od języka asemblera. To nauczy Cię podstaw, a także cierpliwości.
źródło