Я довольно часто помогаю начинающим программистам; объясняя, почему их код не работает, когда они спрашивают, предлагая решения и тому подобное. Люди, которым я помогаю, получают формальное образование по программированию из модуля первого года обучения на Java, но я чувствую, что не могу общаться с ними очень хорошо.
Например: можно написать функцию, но не понять, почему она не выполняется, не понимая, что они забыли ее вызвать. Если я использую фразы, как, "(make a) call (to) the function/it"
и "pass it the.."
я получаю пустые взгляды.
Тогда мой обычный процесс - найти в их коде место, где они вызывают функцию из языка, и сказать им, что они могут вызывать свои собственные функции так же, как они вызывали эту другую функцию. Иногда даже это выглядит пустым.
Существуют ли другие части словарного запаса, которые больше подходят (лучше?) Для помощи начинающим программистам? Или это не проблема общения?
источник
Ответы:
В конце концов им придется выучить правильные термины, чем раньше, тем лучше.
Используйте их правильно, и объясните их, когда вы получите пустой взгляд. Просто попробуйте отправить правильные сигналы, чтобы можно было спрашивать обо всем, что они не понимают - единственные глупые вопросы - это те, которые вы не задаете.
источник
В основном
Когда человек не понимает вас, у вас есть две альтернативы:
Адаптируйте словарный запас в соответствии с тем, что человек знает или нет,
Объясните человеку термины, которые она не понимает.
Первый случай работает хорошо, когда человек уже достаточно хорошо знает технический словарь, но не достаточно или не в вашей области.
Например, вы можете использовать термин метод в C # или Java, и человек, который в основном работает с каким-либо другим языком, не поймет этот термин. Затем вы объясните, что в C # или Java метод ссылается на то, что мы обычно называем функцией (например, в C), и что в C # или Java нет такого понятия, как функция . В PHP , например, существуют методы и функции, и они имеют другое значение . Если разница слишком болезненна для человека, вы будете говорить о функциях ради простоты.
В вашем конкретном случае вы вряд ли сможете выбрать первый: «вызов функции» нельзя переформулировать каким-либо более простым способом. Звонок это звонок. Вы не можете упростить это больше.
Это означает, что вы должны выбрать второй путь: объяснить человеку каждый технический термин.
Либо укажите человеку на словарь или Википедию, которая очень хорошо работает для основных понятий и терминологии.
Я бы выбрал это для часто используемых терминов . Например, я бы предпочел, чтобы человек прочитал Википедию, чтобы понять, что такое полиморфизм или что такое ковариация и контравариантность. Эти термины уже объяснены очень хорошо, поэтому не нужно изобретать колесо здесь.
Или объясни своими словами .
Я бы выбрал это для терминов, которые являются специфическими для контекста и / или принимают широкий спектр определений . Например, Википедия не очень помогает понять видение Microsoft облачных вычислений, и я бы лучше объяснил себе, что такое облако, кому-то, кто будет работать над приложением Windows Azure.
В вашем конкретном случае
Людям, с которыми вы разговариваете, не хватает самых основных понятий и терминов, используемых в программировании. Они не могут продолжать, не изучая этот основной словарный запас , потому что они вообще не могут общаться : они не могут читать книги о программировании или блогах, они не могут слушать своих коллег и даже не могут задавать вопросы на Стек сайтов Exchange, так как никто не поймет, о чем они спрашивают.
В вашем случае, вместо того, чтобы искать подходящий словарь, я бы потратил несколько дней или недель, обучая их основным концепциям программирования и часто используемым терминам . Через несколько дней вы сможете разговаривать с ними, не требуя постоянно «рисовать их картинки и использовать метафоры с участием кошек и собак» .
источник
Вместо функций начните с подпрограмм . Скажите им, что программа - это просто список инструкций, рецепт, чтобы рассказать компьютеру, как что-то сделать. И то, что он выполняется одна инструкция за другой (с возможностью сделать несколько шагов параллельно, но об этом позже).
Некоторые задачи являются довольно распространенными и повторяющимися, поэтому было бы ужасно, если бы нам приходилось записывать их снова и снова, поэтому мы пишем их только один раз и делаем из них «меньшую программу» - подпрограмму , которую можно использовать повторно другие части программы. Чтобы выполнить его несколько раз, мы даем ему осмысленное имя в нашей программе. И затем мы можем использовать это имя, когда хотим выполнить эту «маленькую программу» как часть более крупной, назвав ее по этому имени.
Вызов подпрограммы подобен вызову демона, который знает, как выполнить эту задачу, по имени этого демона. Поэтому, когда мы хотим выполнить эту конкретную задачу в нашей программе, мы пишем «вызвать демона по имени Аргот», и демон появляется и выполняет задачу за нас, как мы ему приказали, а затем уходит, и мы можем продолжать работа.
Иногда демону требуется некоторая дополнительная информация, без которой он не может решить, какую из задач выполнить, или чего мы действительно от него хотим. Например, если демон должен построить замок, ему, возможно, потребуется знать, где он должен его построить, или насколько велик и т. Д. Это аргументы, переданные демону ... Я имею в виду подпрограмму, которая теперь становится параметризованных .
Параметры - это те части информации, которые отсутствуют, но необходимы для выполнения задачи. Они немного меняют то, что может сделать подпрограмма. Они как пустые места в рецепте, которые нужно заполнить, прежде чем мы сможем его выполнить.
Аргументы , с другой стороны, представляют собой фактическую информацию (значения), которую мы предоставляем для этих параметров.
Что касается параллельного выполнения, мы можем думать об этом так: всегда есть кто-то (или что-то ), выполняющее программу (список инструкций). Это либо другой человек (вы знали, что «компьютер» когда-то был именем человека, который выполнял вычисления?), Либо машина. Программа - это просто список инструкций, она не работает сама по себе. Там должен быть кто-то или что-то, кто будет делать вычислительный процесс(выполните эти действия из списка). И иногда эти действия могут выполняться параллельно - мы можем раздать копии списка нескольким людям и позволить каждому из них выполнять различный набор задач из списка, если они не перебивают друг друга, или не нужно ждать результатов чужой работы. Это многопоточность для вас;)
Что касается различия между функциями и подпрограммами (также называемыми процедурами ), обычное отличие состоит в том, что функция вызывается для вычисления определенного значения, которое она возвращает в результате своего выполнения, в то время как процедуры выполняются просто для удовольствия;) AKA за их "побочные эффекты" - просто ради операций, выполняемых из списка.
Но если вызов процедуры или функции сначала вызывает некоторые проблемы, вы можете использовать другой термин, который когда-то был популярным: прыжки . Можно перейти в подпрограмму, что означает, что вы перестаете выполнять все, что делаете сейчас, и «перепрыгиваете» в другое место списка (или в другой список) - подпрограмму - для выполнения своих задач. Затем, когда вы закончите, вы «отпрыгнете», то есть вернетесь в место, где вас прервали, чтобы вы могли продолжить выполнение предыдущего задания. Разница между вызовом и прыжком в том, что теперь вы демон.
Что касается методов, упомянутых здесь кем-то, или того факта, что некоторые языки «не имеют функций, только методы» - это не совсем правильно, потому что методы - это функции! - особый их вид : это функции, которые используются для извлечения некоторой информации, инкапсулированной внутри объекта, или работы с ними. Они являются «методом оперирования этими данными». Название происходит от объектно-ориентированной парадигмы, в которой данные заключены в объекты и не могут работать напрямую, только с помощью специальных функций, называемых «методами».
Метод является особенным в некотором другом смысле: он должен знать, с каким конкретным объектом он должен работать / вызываться (объект "this"). Вот почему методы обычно украшаются дополнительным скрытым параметром, который хранит информацию об объекте, для которого он был вызван (указатель «this»). Это усложняет способ вызова функции, но это «деталь реализации», которой программист не должен сильно беспокоиться, если он знает, что делает.
источник