Должны ли новички использовать автозаполнение IDE (Intellisense)? [закрыто]

35

Я часто сталкиваюсь с этим, когда помогаю кому-то, кто плохо знаком с программированием и изучает это впервые. Я говорю о действительно новых новичках, все еще изучающих OOness, конструирование объектов, вызовы методов и тому подобное. Обычно у них есть клавиатура, и я просто предлагаю руководство.

С одной стороны, функция автозаполнения IDE помогает им получить обратную связь о том, что они все делают правильно, и они быстро привыкли к этому и полагаются на него.

С другой стороны, я боюсь, что ранняя зависимость от автозаполнения IDE заставит их не понимать концепции и не сможет функционировать, если они однажды окажутся только с простым редактором.

Может кто-нибудь с большим опытом в этом отношении, пожалуйста, поделитесь своим мнением? Что лучше для новичка, автозаполнения или ручного набора текста?

Обновить

Благодарность за вклад каждого!

Многие ответы, кажется, сосредоточены на основном использовании автозаполнения, таких как завершение методов, обеспечение поиска методов, документирование и т. Д. Но в настоящее время IDE гораздо больше похожи.

  • При создании объекта типа List IDE автоматически заполняется до нового ArrayList с правой стороны. Новичку может быть не сразу понятно, почему он не может быть новым списком, но эй, это работает, поэтому они двигаются дальше.
  • Параметры метода заполнения на основе локальных переменных в контексте.
  • Выполнение бросков объекта
  • Автоматическое добавление операторов «import» или «using»

и многое другое. Это такие вещи, которые я имею в виду. Помните, я говорю о людях, которые занимаются программированием 101, на самом деле, только начинающих. Я наблюдал, как IDE делает то, о чем они не знают, но они просто продолжают.

Можно утверждать, что это помогает им сконцентрироваться на потоке программ и освоить все сначала, прежде чем углубляться в понимание нюансов языка, но я не уверен.

кода
источник
1
Я думаю, что это попадает в общий запрет: использовать инструмент. Не ленитесь использовать его вслепую.
Алекс Фейнман
Я думаю , что они должны использовать « стандартный текстовый редактор» ... gnu.org/fun/jokes/ed.msg
JoelFan
Я кратко изложил то, что я узнал здесь, в сообщении в блоге: codinguser.com/2011/01/abstraction-is-good-magic-is-bad
codinguser

Ответы:

11

Я думаю, что использование IDE помогает в процессе обучения. Методы, свойства, параметры, перегрузки и тому подобное являются обнаруживаемыми. Intellisense с огромными библиотеками помогает улучшить знания JIT. В современной среде программирования невозможно все изучить заранее, и обучение JIT часто является единственным практическим способом быстро стать продуктивным.

Я понимаю, что использование IDE может быть опорой, если вы используете его вслепую, но я думаю, что преимущества намного перевешивают негативы.

С другой стороны, использование шаблонов без понимания того, что было предварительно создано для вас, является большей проблемой. Я думаю, что они могут быть использованы в качестве инструмента обучения, если разработчик не торопится с чтением шаблонного кода. Но большинство людей не беспокоятся. Хотя это может быть отличным инструментом обучения.

Марк Фридман
источник
JIT? Разве вы не имеете в виду .NET FCL? =) Да, я согласен ... На протяжении многих лет intellisense доказал для меня инструмент обучения, я узнал о множестве новых классов, методов и свойств с его помощью.
Гидеон
1
Я имел в виду JIT-обучение, а не JIT-компиляцию;) Есть так много всего, что пытаться выучить все заранее нереально, поэтому, пока вы понимаете концепции, изучение специфики реализации может быть выполнено «вовремя».
Марк Фридман
75

Понимание концепций и запоминание десятков сотен глупых библиотечных классов и методов - это две совершенно разные вещи. Intellisense помогает полностью выбросить из головы все эти бесполезные знания, и чем раньше вы это сделаете, тем лучше. Оставьте больше места для полезных концепций, не тратьте свои ограниченные ресурсы на API.

Чтобы ответить на обновленную часть вопроса: небольшие детали синтаксиса, расположение файлов, вызов компилятора и компоновщика также не важны по сравнению с общими концепциями программирования. Как только они поймут, новичок больше не может углубиться в понимание того, как на самом деле работают вещи низкого уровня. Лучше сделать это, когда вы уже знаете основы, иначе есть вероятность, что вы обнаружите ряд опасных магических суеверий.

Например, DrScheme IDE имеет большой опыт в обучении программированию, и его успех в основном объясняется его способностью помогать сосредоточиться на том, что действительно важно.

SK-logic
источник
30
+1. В то время у меня были собеседования, в которых меня просили привести список параметров для некоторой функции Win32 API. Никогда не мог понять, какое значение могут иметь эти знания.
4
@codinguser: и это тоже не проблема. Я часто не могу вспомнить даже синтаксис языка, который я использую в настоящее время (даже если я разработал его сам). Есть гораздо более важные вещи, которые нужно запомнить, чем операторы импорта или как написать пару геттер / сеттер. А IDE делают больше полезных вещей - например, отображают типы во всплывающих подсказках.
SK-logic
4
@ Джош К, ты когда-нибудь слышал слово "абстракция"? Знаете ли вы, почему существуют разные уровни абстракции? Обращать внимание на все, что ниже уровня абстракции вашей текущей проблемной области, глупо и контрпродуктивно. И забрать эту разрушительную привычку в начале карьеры - это катастрофа. Мне потребовалось более десяти лет, чтобы частично восстановиться.
SK-logic
3
@ Джош К, ты настаиваешь на понимании того, что происходит вплоть до системных вызовов и далее? В этом понимании нет добавленной стоимости. Конечно, хороший программист должен уметь работать на всех уровнях, включая машинные коды, но хороший программист также должен уметь полностью абстрагироваться от ненужных вещей.
SK-logic
3
@ SK-logic: я согласен, и импорт и вызовы функций, которые вы используете напрямую , не являются чем-то отвлеченным.
Джош К
16

Использование автозаполнения совсем не плохо.

Это просто для скорости, и для меня было бы признаком того, что кто-то начинает понимать IDE и использует его хорошо.

Я не понимаю, как НЕ использование этого помогло бы им изучить ОО, например.

Ozz
источник
1
Я полностью за автозаполнение, когда вы освоили основы. Скорость хороша, когда ты знаешь, что ускоряешься. Но когда среда IDE автоматически заполняет параметр на основе локальной переменной того же типа или добавляет оператор импорта, она просто работает, и некоторые новички не совсем понимают это.
codinguser
Я прочитал ваше редактирование, но я хотел бы думать, что нубы, которых мы нанимаем, умные люди, которые будут смотреть на то, что заполнено, расспрашивать их и понимать их. Разве это происходит на практике, конечно, другой вопрос.
Оз
13

Обучив и обучая студентов, которые плохо знакомы с программированием, я обнаружил, что автозаполнение / интеллигенция иногда приносит больше вреда, чем пользы. Да, они могут написать программу, используя ее. Да, он компилируется и запускается и может даже делать то, что мы просили их сделать. Но они не понимают, что делают.

Когда они не понимают, что происходит, становится меньше программирования и больше вместе взламывается решение, чтобы получить оценки. Я обнаружил, что это часто случается со студентами, так как то, что мы просили их сделать, стало сложнее, они просто взламывали, пока что-то не заработало. Это всегда становилось ясным, когда наступал среднесрочный период, и студентов просили написать простые методы от руки ... они не могли.

Да, автозаполнение / intellisense помогает нам (профессиональным разработчикам) во многом благодаря ускорению. Нам не нужно запоминать все различные методы и списки параметров, но в то же время мы можем рискнуть угадать, какие параметры будет принимать метод, потому что у нас есть опыт программирования.

Новички не делают. Они будут ждать, пока их IDE не выведет список методов, они будут прокручивать этот список, пока не найдут тот, который, возможно, является тем, что им нужно, они посмотрят на параметры, которые ему нужны, и выяснят, есть ли у них их для передачи. ... и в конце они вместе взломают что-то, что смогут передать.

И в конце курса, когда они получат свой пропуск, они с небольшой победой уйдут из своего класса программирования, многие никогда больше не будут брать другой класс CS, потому что они не понимали ничего, что они делали или почему они делали Это.

Tyanna
источник
2
Я буду циничным и скажу, что в CS всегда были такие студенты. Если они хотят узнать, что Intellisense просто помогает им делать вещи быстрее, а не тратить время на поиск каждого имени функции в Google или книге
user151019
4
@ Марк, я согласен. Я предполагаю, что я сделал мой ответ слишком широким по охвату, подразумевающим всех студентов. Но я скажу это, после введения и IDE с автозаполнением в среде разработки курса, количество студентов, которые не поняли, когда, как и количество неудач на первом промежуточном этапе. Количество вопросов, которые я получил, значительно уменьшилось, но я узнал, что это не потому, что студенты лучше понимают, а потому, что они могут заставить программы работать, не тратя времени на понимание.
Тианна
students were asked to write simple methods by hand...they couldn't.Все сводится к тому, чему вы пытаетесь их научить. Общие концепции программирования или специфичный для языка синтаксис?
пряничный
9

Проблема со средами разработки и средами разработки в целом заключается не столько в автозаполнении, сколько в использовании шаблонных решений (файл | новый | проект), где множество «интересных» вещей уже сделано для вас и в той или иной степени скрыто ,

Для тех, кто в целом понимает, что происходит под капотом, это полезно, но для тех, кто изучает, что им нужно, это гораздо меньше.

Там также вопрос времени, затраченного на запуск тяжеловесной IDE ...

Поэтому я считаю, что использование чего-то более легкого по весу и возможность запуска приложений, в которых вы сами написали каждую строку кода, имеет значительные преимущества - особенно потому, что использование текстового редактора и компилятора демонстрирует важный момент, который вам не нужен. IDE и т. Д. Для написания программного обеспечения, но это не значит, что я хочу использовать текстовый редактор надолго, и это создает проблемы с точки зрения отладки - вы хотите иметь возможность делать точки останова и вы хотите иметь возможность пошагово выполнять код поскольку это облегчит понимание того, что происходит.

Конечно, мы можем еще больше запутать проблему, рассматривая такие вещи, как Python, где у вас есть «живая» командная строка ...

Хороший вопрос, нет ни одного хорошего ответа - за исключением того, что вы хотите изучить прогрессию и начать с текстового редактора и компилятора (или интерпретатора командной строки), что позволит вам сосредоточиться на основах синтаксиса и логики, прежде чем переходить к более сложному сложные вещи, которые будет легче сделать с более мощной средой разработки.

Murph
источник
2
Честно говоря, я считаю, что время, затраченное на запуск IDE, незначительно. Я провожу десятки часов, используя мою IDE между запуском. Это, безусловно, экономит больше, чем дополнительные 30-45 секунд времени, которое требуется, чтобы начать только с одного только завершения кода в течение этого промежутка.
EricBoersma
@Eric - в твоем контексте? Да, 100%. В контексте вопроса т.е. полные начинающие? Я подозреваю, что IDE будет открываться и закрываться чаще для более коротких сессий, и, как правило, все, что мешает, - это разочарование.
Murph
Мне кажется, что в отношении ORM начинающим базам данных нельзя позволять использовать их, потому что они недостаточно разбираются в разработке баз данных, чтобы использовать их хорошо. Отличный инструмент для людей, которые знают, что они делают, бедствия для новичка.
HLGEM
@HLGEM Я собирался предположить, что это немного сложнее, чем это ... но я не думаю, что я даже отдаленно квалифицирован, чтобы комментировать начинающих и базы данных больше) -: (И, для ясности, потому что я все еще изучать новые языки и фреймворки, я думаю, что могу прокомментировать проблему IDE - у меня есть особые воспоминания о ранних проблемах с .NET и Visual Studio, делающих слишком много)
Murph
4

Изучение трудного пути обычно остается с вами.

Как новичок, пожалуйста, не используйте IDE. Используйте командную строку, учитесь на своих ошибках. Это также поможет вам лучше понять параметры компилятора и компоновщика.

Так когда вы используете IDE? Когда вы проектируете что-то огромное или работаете над огромной базой кода с множеством классов, методов и переменных.

Fanatic23
источник
7
Какой смысл понимать параметры компилятора и компоновщика, если вы еще не знаете, что такое компилятор? Это обычно заканчивается беспорядком. Я потратил больше десяти лет на то, чтобы очистить свой собственный беспорядок, созданный вначале слишком глубоким и слишком низким уровнем воздействия (MACRO32, Fortran, DCL ...).
SK-logic
2
Согласовано. Например, нет смысла изучать ассемблер перед изучением Python или C # - это просто расстраивает вас больше. Как правило, вы изучаете концепции высокого уровня, а затем фильтруете их в концепции более низкого уровня или в другие придирчивые вещи.
DMan
4

Я был бы первым, кто сказал, что IDE - это благо для производительности, даже если я часто жалуюсь на их причуды. Тем не менее, я выучил BASIC, C, C ++, Java, Python, Perl, PHP и несколько других языков без чего-либо большего, чем редактор текстовой подсветки и компилятор / интерпретатор для языка. Я действительно изучил Java в Блокноте!

Изучение IDE продвигает «магию» - идею, что «это работает; не важно, как». Абстракция это хорошо; магия это плохо. Программист должен знать или уметь узнавать обо всем, что происходит в проекте. Хорошая IDE предназначена для того, чтобы заботиться о поддержке, а не контролировать проект. При правильном использовании это отличный инструмент. Но какой мастер начинает использовать фрезерный станок с ЧПУ?

Я думаю, что способ, которым я научился (необходимость набирать все и хорошо знать компилятор для создания проекта), неизмеримо помог мне, когда я наконец начал использовать IDE. Например, проект Java - это не маленькая папка в проекте Eclipse, а набор классов в структуре пакета с некоторыми файлами XML для путей, конфигурации и развертывания. Я не хотел бы создавать большие корпоративные приложения без IDE, но я могу создавать маленькие. Это облегчает понимание структуры больших, и когда мне нужно определенное поведение в сборке, скажем, я знаю, как работает javac, поэтому я могу настроить фактическое приглашение к сборке, вместо того, чтобы пытаться найти волшебную комбинацию, которая не не существует в конфигурации сборки. Я также считаю, что у меня есть более глубокое понимание сообщений об ошибках и как их найти и исправить.

Я бы не стал учить с использованием IDE. Я думаю, что начинающие проекты достаточно малы, поэтому аргументы для управления сложностью являются спорными. Например, если вы учите Java, вы можете поместить все свои классы в одну папку и javac *.java. Вам не нужна IDE для этого! Это говорит о том, что проекты должны быть небольшими, чуть больше, чем подтверждение концепции. Минимизируйте накладные расходы и сконцентрируйтесь на обучении концепции, которая нужна студентам. Большие проекты, в которых IDE была бы полезна, относятся либо к более продвинутым классам SE, либо к отдельным проектам.

Что касается помощи в поиске классов и исследования API, опять же, я считаю, что это спорный вопрос, если проекты остаются небольшими. Опять же на Java, Javadoc очень легко читать. Никто не может держать весь API там голову так или иначе, и Ther будет быть время , когда вам нужно будет исследовать в API без использования в IDE. Например, на других языках или при удаленном взаимодействии с сервером, где вы не можете открыть IDE. Научите, как найти документацию, а не «нажмите». и вы можете увидеть, что такое методы объекта ".

Любой программист может выучить IDE, но знание IDE не делает вас хорошим программистом. Помимо черного юмора, «магия» никогда не будет хорошим словом для программиста.

Майкл К
источник
Учился с выделением текста ... счастливый панк. У некоторых из нас есть только список ключевых слов и подсказка.
Мэтью Уайтед
@Matthew: Java я начал с блокнота ... :)
Майкл К
LOL ... Я начал на Apple IIc с Applesoft BASIC, который был встроен в ПЗУ. : o)
Мэтью Уайтед
Вау, мне повезло иметь QBasic!
Майкл К
4

Возможно, новичок должен сначала работать над более легкими проблемами. И нет, эти проблемы не должны требовать или поощрять использование IDE для выполнения задачи. Есть еще что-то, что можно получить в долгосрочной перспективе от понимания основных концепций. Инструменты должны прийти после.

Ни один деревообрабатывающий мастер не прыгнул бы с помощью строгального строгального станка с высокой мощностью, не разбираясь сначала в тонкостях дерева и ручного станка.

(Примечание: autocomplete и intellisense - это две совершенно разные вещи).

Интеллисенс сам по себе не плохой. Плохо только тогда, когда используется костыль, чтобы угадать функциональность, не читая и не понимая основную документацию или реализацию.

Побочное замечание: если для написания кода требуется IDE, язык, вероятно, находится на неправильном уровне абстракции для проблем, которые вы пытаетесь решить.

Райан МакГири
источник
2
+1 за боковую точку. Я фанат изучения нескольких языков, поэтому вы знаете, когда язык не подходит для какой-либо задачи.
Майкл К
3

Когда мы растем в детстве, нам не говорят, что мы должны понимать сложные правила английского языка, прежде чем мы сможем говорить. Нам не говорят, что мы должны полностью понимать правильное использование предлогов, союзов и избегать фрагментов предложений. Мы учимся на практике. Мы учимся на успехе и неудаче.

Среда IDE с автозаполнением помогает новому программисту обрести уверенность, облегчая создание программ, и при этом не борется с запоминанием каждой бесчисленной функции огромного множества библиотек.

Если бы кто-то действительно экстраполировал представление о том, что автозаполнение вредит новому программисту, потому что это делает его слишком легким для них, то вы могли бы поспорить, что справочники не должны использоваться при программировании, потому что концепции внутри должны быть вначале перенесены в память, так как отсутствие их запоминания замедляет их и не позволяет им сначала полностью понять концепции.

Автозаполнение - это инструмент, который используется для повышения производительности труда программиста. Как и в случае с изучением языка в первый раз, после того, как мы приобретаем уверенность и достигаем определенного уровня успеха в том, что мы изучаем, мы затем работаем над улучшением наших знаний.

Билл
источник
Это отличный аргумент для использования IDE. Это, кажется, ломается в CS, потому что, как мне кажется, многие не выходят за рамки простого «обучения говорить». Это потребовало бы рефакторинга учебного плана для явного обучения вещам, которые скрывает IDE.
Майкл К
2

В начале достаточно сложно создать что-то, что работает, поэтому все, что помогает бренду, становится лучше. Новому программисту понадобится кто-то постарше, чтобы он подумал о том, будут ли списки с привязкой к массиву или списки со связями лучше подходить для рассматриваемой проблемы. У каждого из них есть свои сильные и слабые стороны.

Независимо от того, есть ли у новичка IDE или он просматривает документы по API в Интернете, между созданным кодом не будет существенной разницы. Хотя справляться с болью написания синтаксических ошибок может быть обучающим опытом, слишком много нужно учиться, чтобы беспокоиться об этом в самом начале.

Вы не научитесь ходить по канату, идя прямо к проволоке без сети. Вы начинаете с ходьбы по веревке, которая находится в нескольких дюймах от земли. Рискну сказать, что большинство из нас работает с IDE и каким-то сценарием сборки (скрипт сборки Visual Studio создается в среде IDE, но он есть). Большинство из нас не создают свои классы вручную с помощью текстового редактора, а затем вызывают компилятор вручную. Почему мы должны навязывать это новичку, которому есть чему поучиться?

Берин Лорич
источник
2

Я не вижу необходимости страдать от вышеперечисленных инструментов, даже когда разработчик учится. Я считаю, что больше времени и усилий, которые потребуются для написания кода без инструментов, лучше потратить на изучение написания модульных тестов и отладки. Как только пользователь узнает, как проверить свой код и пройти его по ходу, он узнает много нового о том, что он на самом деле делает.

Кроме того, использование IDE не означает, что код сам пишет. Неумелый или начинающий разработчик собирается написать код, который не будет работать независимо от того, используют они IDE или нет.

Я просто вижу IDE как еще один уровень абстракции при кодировании. Если я пишу Java, мне обычно не нужно понимать, как работает генерируемый им байт-код. Если новый программист использует библиотеки Java, им не нужно знать, в каком пакете он находится, если IDE может добавить его автоматически для них. В любом случае, если может возникнуть ошибка или проблема на более низком уровне (например, столкновение имен классов), которая вызывает ошибку, то пришло время для разработчика взглянуть на нее вручную.

стихарь
источник
0

Множество других хороших ответов, поэтому не считайте это полным ответом, но для новичков, а также для опытных пользователей полезно видеть полную картину того, какие функции они имеют в своем распоряжении.

В Delphi я могу нажать ctrl-j и увижу список всех возможных вещей, которые я когда-либо мог бы синтаксически ожидать.

Я не обязательно согласен, но я прочитал аргументы о том, что программисты не должны даже смотреть на закрытые члены класса объектов, которые они используют, и таким образом, автозаполнение дает каждому пользователю мгновенную ссылку на API.

Более новые IDE позволяют пользователям и разработчикам языка помещать метаданные в их интеллектуальный смысл, что еще больше расширяет возможности чтения и понимания того, что делают функции, без чтения источника (что в любом случае им не нужно делать).

Возможно, новичкам лучше всего прочесть и понять все, что они реализуют. Но, возможно, было бы лучше задать вопрос, следует ли разрешать новичкам включать или импортировать любые пространства имен или единицы, которые они хотят, не документируя, почему они включают его.

Питер Тернер
источник
0

По моему опыту, использование среды IDE для изучения основ ОО - это здорово, потому что она скрывает некоторую сложность написания кода и позволяет новому разработчику сосредоточиться на логике программы. Однако вскоре после обучения программированию и основным принципам ОО я через курсовую работу был вынужден более точно понять, какие части должны взаимодействовать друг с другом в исходных файлах (не забывая операторы импорта, создание правильных классов и т. Д.) В ходе курса программирования. где нам приходилось использовать только терминальные машины Unix.

Это возможно в школе, потому что у кого-то есть «полномочия» заставить вас использовать инструменты lo-fi. Это было бы гораздо сложнее достичь в деловой или корпоративной среде.

Брайан Дж. Свифт
источник
0

У меня есть две мысли по этому поводу. Во-первых, чтобы действительно научиться чему-то, я считаю, что вы должны знать, что на самом деле происходит. И с тем, как хорошо IntelliSense получил, он может скрыть часть этого для нового разработчика. Например, в колледже у меня был урок веб-инжиниринга, где мы на самом деле создавали свои собственные веб-фреймворки для создания наших конечных приложений. Я вышел из этого класса с этой способностью адаптироваться практически к любой веб-среде, потому что у меня было понимание того, что было под всем этим с самого начала. Использование IDE не совсем на этом уровне, но я все же думаю, что дело в этом.

Тем не менее, использование IDE также может способствовать открытию API для новых разработчиков. Когда я начал серьезно программировать, интегрированная среда разработки мне очень помогла, потому что я делал такие вещи, как ввод объекта, использовал автозаполнение, чтобы увидеть, какие методы у него были, а затем исследовал их, используя доступные документы. Все это было сделано в среде IDE и стало отличным инструментом обучения.

Так что да, я считаю, что это нормально, если вы не торопитесь, чтобы понять, что происходит. Просто использовать приведение объекта, не понимая, зачем вам это нужно, действительно плохо, но если новый разработчик видит, что вы можете использовать приведение объекта, а затем смотрит, почему я не вижу ничего плохого.

оборота Corv1nus
источник
0

Обучение требует практики. Программирование может быть очень неприятной задачей, когда вы понятия не имеете, что вы можете сделать, или как все работает.

Скажем, непрактично читать много книг по принципам программирования, не написав ни единой строчки кода; никто ничего не изучает таким образом.

Intellisense очень помогает в предоставлении новым программистам помощи, необходимой им для продолжения программирования, продолжения практики и, следовательно, обучения.

Как уже было сказано, изучение конкретных API-интерфейсов - это не то же самое, что изучение принципов программирования. Несомненно, случится так, что новые программисты будут совершать ошибки (независимо от Intellisense), и то, как они решат исправить эти ошибки, заставит их стать хорошими программистами или плохими.

Если вы пытаетесь научить кого-то программировать, я бы заставил его использовать Intellisense и играть, пока он не застрянет. Тогда я попытался бы заложить фундамент, объяснив им причину, по которой они застряли.

Рем
источник
0

ИМО, IDE сделает вас более продуктивным. Но для начинающих вообще не стоит начинать программировать с IDE. Текстовых редакторов, таких как notepad ++, notepad и т. Д., Вполне достаточно.

Кроме того, обычно не считается хорошей идеей начинать изучение программирования с языка высокого уровня. Я бы предложил вам начать с ассемблера. Это научит вас основам, а также терпению.

NinjaCoder
источник