мы должны преподавать указатели в “основные принципы программирования” курса?

Это слишком долго для комментария.

Вы пытаетесь использовать проверочное ограничение для чего-то, для чего оно не предназначено. У вас есть org_id. У вас должна быть таблица organizations, в которой этот идентификатор используется в качестве первичного ключа.

Затем флаг, который вы хотите сохранить, должен быть в таблице organizations. Вуаля! Флаг сохраняется только один раз. Вам не нужно беспокоиться о синхронизации между разными строками.

5
задан Dervin Thunk 19 March 2009 в 15:33
поделиться

9 ответов

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

13
ответ дан 18 December 2019 в 06:04
поделиться

Да.

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

После того как Вы понимаете немного о том, как память выделяется, и как она обращается и управляется с указателями, объясняя, что много других конструкций становится легче. Например, объяснение a NullPointerException в Java, или даже понятие ссылок на таких языках является детскими игрушками, если у Вас есть кто-то, кто понимает указатели в C (и лучше все еще, если они также grok ссылки в C++).

6
ответ дан 18 December 2019 в 06:04
поделиться

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

В течение моего 2-го семестра я взял следующий курс в ряду, который был о C, и этот класс в большой степени полагался на указатели.

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

2
ответ дан 18 December 2019 в 06:04
поделиться

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

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

4
ответ дан 18 December 2019 в 06:04
поделиться

Профессионалы: основательное понимание способа, которым память используется машиной, различием между (и ловушки) указатели на данные по "куче" по сравнению с указателями на данные по стеку, передающим методам адресом, и т.д.

Недостатки: комплекс для аудитории, которая еще не хорошо осведомлена (или не имел достаточного количества времени для ассимиляции понятий) архитектуры ЭВМ, включая то, что является стеком, что является регистрами, соглашениями о вызовах, и т.д.

Так, для суммирования это во многом зависит от аудитории и от языка (языков), которым Вы займетесь (указатели будут бессмысленны в контексте LISP или Java), а также о том, как глубоко Вы готовы пойти в направлении того, что является "кучей", что является стеком, как объем переводится в стек (т.е. почему никогда не возвращать указатель на локальную переменную), и т.д.

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

1
ответ дан 18 December 2019 в 06:04
поделиться

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

Хорошим примером является последняя книга Stroustrup: Программирование - Принципы и Практика Используя C++, где он преподает, как сделать синтаксический анализатор, ввод-вывод (потоки) использование и использование GUI перед ровным разговором об указателях!

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

0
ответ дан 18 December 2019 в 06:04
поделиться

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

1
ответ дан 18 December 2019 в 06:04
поделиться

Это действительно зависит от цели Вашего курса - учащий, что программирующая и обучающая информатика является двумя отдельными целями, и хотя они не взаимоисключающие, вводные классы, обычно не преподают обоих одинаково хорошо. Вот пример различия: скажите, что мы хотим изучить, как отсортировать список. Ход программирования в C++ учил бы Вас использовать синтаксис станд.:: шаблон функции вида и домашняя работа могли бы писать несколько функторов сравнения. Курс информатики объяснил бы Вам, какова сортировка слиянием, на что алгоритм похож в псевдокоде и его характеристиках производительности/пространства, и домашняя работа записала бы саму функцию вида.

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

Если Вы преподаете информатику, то не, нет никакой потребности понять указатели на вводном уровне.

0
ответ дан 18 December 2019 в 06:04
поделиться

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

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

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

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

Мой первый вводный ход программирования использовал Haskell. Только в последующем курсе с помощью C, указатели были представлены (я уже был хорошим C и программистом на C++, когда я взял курс; те предметы были обязательны).

0
ответ дан 18 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: