04 января 2018
08 января 2018
Python
variables
Первое с чем сталкивает человек изучающий программирование это концепция переменных(Что такое переменные). Это сложная тема абстрактных понятий очень часто является барьером в изучении компьютерных наук. У новичков сразу возникают вопросы что такое перменные, какие типы переменных существуют, как правильно и не правильно использовать переменные, почему всё устроенно именно так. Если не разобраться с этим понятием то невозможно продолжить изучение программирования, а если углубиться в изучение концепции переменнных, то очень многие абстракции в программировании станут понятны сами по себе, по крайней мере интуиция будет подсказывать почему всё устроено именно так, а не иначе.
Понимание концепции переменных является ключевым пунктом к изучению программирования. Компьютерные переменные это абстракция которую придумали инженеры и окружили её аурой загадачного жаргона. Но если немного отвлечься от программирования и поглядеть на нашу жизнь со стороны то можно увидеть следующее: когда человек рождается то его память пуста, он не знает ни одного слова и даже не знает своего имени. Но постепенно общаясь с родителями, с другими людьми он учится связывать объекты реального мира со звуками которые произносят люди. Так он узнат что женщина которая его кормит и ухаживает за ним это мама, что когда мама произносит некоторое имя, например Вова, то это значит, что она обращается к нему, он начинает различать интонации в произношении различных слов учится работать с контекстом. Этот процесс можно назвать загрузкой сознания человека. В сознании ребёнка образы различных объектов начинают связываются с их названиями. Когда он впервые слышит слово "ты" то для него это слово ничего не означает, но в результате многократного повторения слова и связанного действия в памяти ребёнка закрепляется связь слова "ты" с набором объектов и ощущений. Все прекрасно помнят те моменты когда ребёнок начинает спрашивать у родителей "что это такое?" показывая на различные предметы и родители, отвечая на это вопросы, загружают в сознание ребёнка названия объектов и тем самым формируют его сознание и направление развития. Получается, что в этой ситуции ребёнок выступает в роли своеобразного компьтера, а родители в роли программистов которые составляют программу с помощью которой этот компьютер будет развиваться и взаимодействовать с другими живыми системами. А в компьютерном понимании это выглядит следующим образом: существует реальность в которой существуют различные объекты и явления с которыми необходимо воздействовать и название этих объектов и явлений необходимы для того чтобы к ним можно было обращаться с помощью речевых команд. Так например простой вопрос "где бобо" подразумевает, что ребёнок должен понять что от него хотят чтобы он указал на то место которое у него болит, то-есть происходит обращение к двум алгоритмам:
- определение места где болит
- указать на него каким либо способом
Если родители уже успели заложить в него связи между этими словами и алгоритмами то ребёнок сумеет выполнить команду. Этот пример наглядно показывает, что названия крайне необходимы для выполнения любых разумных и осмысленных действий. Если эти связи не установлены и для ребёнка слова родителей ничего не значат, то не возможно и управлять действиями ребёнка. Тут я ввожу понятие: алгоритм это набор действий приводящий к определённом результату, очевидно что алгоритмы так же должны иметь название и по сути так же являются объектами к которым можно обратиться через название.
Получается, что процесс воспитания ребёнка является программированием сознания ребёнка с помощью выстраивания связей между объектами и явлениями реального мира с названиями объектов и явлений в нашей речи, на нашем языке. В компьютерной среде происходит тоже самое программист работает в среде оперативной памяти компьютера, а в этой памяти располагаться объекты которые создаёт сам программист или которые там были созданы другими программистами. Например, программист создаёт внутри оперативной памяти список учеников и даёт ему некоторое название (можно сказать даёт ему кличку) которое существует в контексте этой программы и для того чтобы повторно обратиться к этому списку программа использует название которое программист присвоил ему при создании. По сути, вся работа программиста заключается в том, что он создаёт объекты в оперативной памяти компьютера, даёт названия объектам и создаёт алгоритмы взаимодействия объектов с помощью названий. От того насколько эффективно он создаёт эти объект и насколько то что он создаёт понятно другим людям зависит профессионализм программиста. Для сравнения можно взять Льва Толстого и его роман "Война и Мир". В этой книге, писатель с помощью правильных связей с названий и удачных конструкций определяющих конекст создал программу которая вызывает практически во всех людях одинаковые эмоции -- именно по этому этот писатель считается Великим, такое могут далеко не все, чаще всего люди собственной речью не могут выразить то что хотят сказать и тем более у них не получается вызывать те же образы что и самого автора.
Я использовал аналогию с обучением ребёнка для того, чтобы стало очевидно то, что для нашей разумной деятельность крайне важно то что мы знаем названия того с чем мы взаимодействуем, без этого невозможно выполнение разумной и упорядоченной деятельности и точно так же в программирование без знания названий сущностей внутри оперативной памяти невозможно делать что либо разумное. Таким образом получается, что на самом деле самос компьютерные "переменные" это всего лишь объекты и названия объектов внутри оперативной памяти. Но очевидно что использование слова "переменные" более удобно и наглядно чем выражение "объекты и названия объектов" для тех понимает о чём речь.
Поняв вышеизложенное становится очевидно, что когда программист говорит, что он создал переменную то он всего лишь создал объект в оперативной памяти компьютера и дал название этому объекту, когда программист говорит что он обратился к переменной то это означает что он заставил программу обратиться к объекту по его имени. В этом смысле программисты подобны творцам, которые создают объекты, дают им названия, учат эти объекты взаимодействовать друг с другом, создают целые миры из объектов подчняющихся действию алгоримов взаимодействия и даже общению с объектами из миров созданных другими творцами. Так что на самом деле программирование это очень простое и увлекательное творчество, посоревноваться с которым может лишь творчество которое вызывает у людей сильные эмоции, это я сейчас про кино, музыку и всякую прочую живопись, только в программировании гораздо меньше возможностей для субъективизма и больше логики.
... статья в разработке, продолжение следует
Так же с помощью этого примера можно понять что названия не являются постоянными(константыми), например, объект реального мира "яблоко" может иметь название "яблоко" или "apple" так как это зависит от того в какой семье воспитывается ребёнок, это явление назвается контекст, то-есть одно и тоже явление может называться по разному в зависимости от контекста.
И так в нашем собственном сознании присутвтвуют переменные. Среди них можно выделить переменные долгосрочные и короткосрочные. Например, слово мама почти у каждого человека связыватся с одним единственным человеком на свете, то-есть в сознании этого человека есть конкретная связь между этим названием и конкретным объектом реального мира. Связь с составными названиеми "моя машина", "твоя машина" и реальным объектом реального мира показывает, что переменные бывают не постоянными, а с деньгами понимание недолговременности существования переменных становится ещё очевиднее.