Программирование объяснил кто-то, кто привык к этому отстой (и это нормально!)

«Почему вы не изучаете информатику?»

Информатика и разработка программного обеспечения - две из самых быстрорастущих профессий в США. Даже непрограммисты знакомы с такими словами, как большие данные, кодирование и алгоритмы. Это модно и прибыльно, и оно надолго. Так почему же не все его изучают?

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

  • Мне это кажется скучным. Достаточно справедливо. Мне это тоже сначала показалось скучным. Но, как и любая другая дисциплина, информатика опирается на множество навыков и может применяться в невероятно разнообразных ситуациях. Это требует творчества, находчивости, любопытства и внимания к деталям. Возможно, вам покажутся некоторые разделы информатики скучными, но не исключено, что вы сможете найти свою нишу.
  • Я недостаточно умен для такой работы. Это звучит как классический страх неудачи, который преследует молодое поколение. Это нормально - попробовать что-то и не преуспеть в этом сразу. Настоящие навыки приобретаются со временем, а природный талант имеет мало общего с долгосрочным успехом. Когда я только начал изучать информатику, у меня было много проблем с этим, и я определенно сомневался, принадлежу ли я к своим классам. Но мне нравилось программировать, поэтому я продолжал им заниматься и в конечном итоге стал намного увереннее в своих силах. Итог: неуверенности в себе нет места в обучении.
  • У меня никогда не было возможности научиться. И многие этого не сделали! К счастью, все больше и больше образовательных ресурсов становятся доступными для тех, кто хочет учиться, но так и не успел. В конце этой статьи вы найдете лучшие ресурсы для начинающих.

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

Основы

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

Но давайте начнем с малого. На самом деле, давайте начнем с крошечного. Допустим, я хочу, чтобы компьютер отображал все, что я ему говорю. Итак, если я наберу «Привет!» Я хочу, чтобы компьютер повторял «Привет!» обратно.

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

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

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

Запуск Tiny

В Python, если вы хотите, чтобы компьютер отображал то, что вы ему указываете, вы можете использовать небольшой трюк под названием print(). Здесь попробуйте сами - посмотрите, что произойдет, если вы введете print(“Hello!”) в этот веб-сайт, который может запускать код Python для вас, а затем нажмете кнопку Выполнить. Вы заметите, что слово Привет! появляется в поле Результат. Вы можете попробовать запустить print() еще пару раз с разными элементами в скобках. Попробуйте выполнить с вашим любимым номером или своим именем в кавычках. Все, что находится в этих скобках, отображается в результатах. Магия!

Но давайте посмотрим, что здесь происходит на самом деле. print() - это пример функции. Функции существуют для выполнения одной конкретной задачи, часто (но не всегда!) путем приема входных данных и создания выходных данных. Идея аналогична тому, как математическая функция f (x) = 2x + 5 принимает входные данные x и выдает результат 2x + 5 .

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

Верно, но почему буквы должны быть в кавычках, а числа - нет? Если вы попытаетесь выполнить print(), не заключая числа в кавычки, все будет нормально. Но если проделать то же самое с буквами, вы получите что-то вроде такой ошибки:

Чтобы понять, почему это происходит, давайте поговорим о том, что называется типами данных. В программировании данные - это контент, который обрабатывается компьютером. Он может принимать форму чисел, текста, изображений и т. Д. Но при программировании с текстом вы должны различать слова, которые вы используете, чтобы давать инструкции компьютеру, и слова, которые компьютер должен обрабатывать как данные. Когда вы не заключаете слова в кавычки, компьютер пытается интерпретировать эти слова как инструкции, но не понимает, что они означают. Поэтому, если вы работаете с данными в виде букв, заключите их в кавычки. PS: они называются строками.

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

Помещение «удовольствия» в «функцию»

Итак, вы уже знаете, что print() - это функция, но знали ли вы, что можно создавать свои собственные функции? Фактически, несмотря на то, что в Python встроено множество функций, таких как print(), программисты обычно должны создавать свои собственные функции и объединять их все вместе, чтобы решить возникшую проблему.

При создании собственной функции на Python вы должны использовать ключевое слово def, что является сокращением от «определить». Когда вы определяете функцию, вы сообщаете ей, что она должна делать, когда она позже увидит имя этой функции в вашей программе. Давайте рассмотрим несколько примеров функций, чтобы лучше понять, как они работают:

def add_two_numbers(x, y):
    return x + y

Вышеупомянутая функция называется add_two_numbers(). Название говорит само за себя, но давайте рассмотрим его еще раз, чтобы было понятнее. Подобно тому, как print() может принимать данные в круглые скобки, add_two_numbers() принимает два числа, x и y. Прямо сейчас x и y в основном являются заполнителями для действительных чисел. Когда эти заполнители являются входными данными для функции, как здесь, они называются параметрами. Мы можем скорректировать приведенную ранее функциональную диаграмму, чтобы применить ее к этой:

Затем функция add_two_numbers() использует ключевое слово return, чтобы указать, каким должен быть результат. Когда компьютер видит слово return внутри функции, он сохраняет все, что стоит после слова return, как результат функции и считает свою работу по чтению этой функции выполненной. Через минуту это станет более понятным.

Когда вы вызываете функцию, вы вводите фактические данные вместо параметров и ожидаете вывода. Попробуйте сами, набрав определение функции для add_two_numbers() в онлайн-редакторе Python, а затем добавив следующую строку под ним: print(add_two_numbers(3, 5)). Напомним, что вам не нужен def при вызове функции, потому что вы уже определили его!

Если вы выполните код, вы, надеюсь, увидите цифру 8 в поле «Результат». Мы просто вызывали одну функцию, add_two_numbers(), а затем использовали результат в качестве параметра для другой функции print().

Компьютер только что нашел место в коде, где был определен add_two_numbers(), следуя инструкциям, сложил вместе 3 и 5, а затем заменил add_two_numbers(3, 5) его выводом, 8. В результате мы получили print(8), который вы видите в Поле «Результат».

Но мы можем сделать больше. Попробуйте заменить print(add_two_numbers(3, 5)) следующим:

xy_sum = add_two_numbers(3, 5)
print(xy_sum)

Вы увидите тот же результат, напечатанный при выполнении этого кода. Так в чем же разница? Во-первых, print(xy_sum) определенно легче читать, чем print(add_two_numbers(3, 5)), а удобочитаемость чрезвычайно важна в программировании. Но самое интересное в том, что мы делаем то же самое, что и при использовании параметров: мы используем заполнитель, к которому мы можем легко обратиться позже, не набирая add_two_numbers(3, 5) каждый раз, когда нам это нужно.

Здесь xy_sum - это пример переменной, которая определяется как имя, которое вы можете использовать для ссылки на данные в вашей программе, не используя сами данные. И оказывается, что параметры, о которых мы говорили ранее, - это просто тип переменной, поэтому мы можем вызывать add_two_numbers() с любыми числами вместо x и y, и функция все равно Работа.

Переменные становятся полезными, если вы вообразите, что add_two_numbers() - всего лишь отдельная часть большой программы. Представьте, что мы действительно хотим взять среднее из двух чисел, а не просто сложить их. Напомним, что математическое среднее двух чисел вычисляется путем сложения чисел и последующего деления на 2. Чтобы запрограммировать это, сначала мы могли бы сложить числа, используя add_two_numbers(), но затем нам пришлось бы разделить эту сумму на 2, чтобы получить среднее . Этот процесс состоит из множества этапов, и переменные могут помочь в их достижении.

def add_two_numbers(x, y):
    return x + y
def get_average(x, y):
    xy_sum = add_two_numbers(x, y)
    average = xy_sum / 2
    return average
x1 = 3
y1 = 5
average = get_average(x1, y1)
print(average)

Вот тот же код без использования каких-либо функций или переменных:

print((3 + 5) / 2)

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

sum1 = add_two_numbers(3, 5)
sum2 = add_two_numbers(4, 6)
sum3 = add_two_numbers(8, 4)
sum4 = add_two_numbers(5, 1)
average1 = get_average(sum1, sum2)
average2 = get_average(sum3, sum4)
final_sum = add_two_numbers(average1, average2)
print(final_sum)

Теперь попробуйте написать однострочную версию приведенного выше кода. Сложно, правда? Это будет выглядеть примерно так:

print((3 + 5 + 4 + 6) / 2 + (8 + 4 + 5 + 1) / 2))

Что, если нам нужно заменить sum1 на сумму разных чисел? Было бы довольно просто изменить переменную sum1 в первой версии кода, но не так просто во второй версии, когда сложнее определить, какие числа соответствуют sum1. Также обратите внимание на все эти + знаки во второй версии. Здесь много повторений математики, к тому же сложнее понять, что пытается сделать код. И в этом прелесть функций и переменных: они позволяют писать эффективный, повторяемый код, который легче изменить и легче понять.

Это было много. Давайте сделаем передышку. Вот щенок в чашке:

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

def adult_or_minor(birth_year):
    current_year = 2020
    age = current_year — birth_year

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

Следующим шагом в этой функции является определение того, будет ли кто-то рассчитанного нами возраста считаться несовершеннолетним или взрослым. Давайте придумаем логику на английском, прежде чем переходить к Python. Мы знаем, что взрослые старше 18 лет, а несовершеннолетние моложе 18 лет. Поэтому, если переменная age равна 18 или больше, мы хотим, чтобы наша функция выводила «Взрослый»; в противном случае функция должна вывести «Незначительное». Мы можем запрограммировать эту логику, используя небольшую удобную функцию под названием условные выражения.

    if age >= 18:
        return “Adult”
    else:
        return “Minor”

Когда компьютер интерпретирует ваш код, он попытается определить, больше или равен ли рассчитанный им возраст 18. Если да, он выведет Взрослый; в противном случае выполняется переход сразу к условию else и вместо этого выводится Minor. Здесь age >= 18 называется условным оператором; компьютер определит, является ли условное выражение истинным или ложным, и затем выполнит соответствующие инструкции.

Вот краткое описание того, что мы только что сделали:

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

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

Готовы к тесту?

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

Ниже приведены несколько функций, которые очень похожи на те, которые мы написали вместе. Постарайтесь понять, можете ли вы в целом понять, что каждая функция пытается выполнить, а также то, что делает каждая строка. Если это поможет, вы можете вставить их в редактор Python и поэкспериментировать с ними. Вот первый:

def respond_to_insult(insulting_word):
    return “I know you are “ + insulting_word + “, but what am I?”

Знаю, весело. Попробуйте следующее:

def letter_grade(score):
    if score >= 93:
        return “A”
    if score >= 90:
        return “A-”
    if score >= 87:
        return “B+”
    if score >= 83:
        return “B”
    if score >= 80:
        return “B-”
    if score >= 77:
        return “C+”
    if score >= 73:
        return “C”
    if score >= 70:
        return “C-”
    if score >= 67:
        return “D+”
    if score >= 63:
        return “D”
    if score >= 60:
        return “D-”
    else:
        return “F”

И, наконец, ниже представлена ​​еще одна немного более сложная функция. В нем есть некоторые команды и ключевые слова, которые мы еще не рассмотрели в этом кратком введении в программирование, но это нормально! Мы здесь только для того, чтобы понять, сможем ли мы с помощью имеющихся у нас инструментов понять общую идею, лежащую в основе функции. Попробуйте:

def pig_latin(word):
    word = word.lower()
    vowels = “aeiou”
    first_letter = word[0]
    if first_letter in vowels:
        return word + “way”
    else:
        rest_of_word = word[1:]
        return rest_of_word + first_letter + “ay”

Думаешь, у тебя есть все? Вот объяснения:

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

Хотите продолжать учиться?

Интересуетесь программированием? Потрясающие! Читайте бесплатные онлайн-ресурсы, чтобы продолжить обучение.



Гарвардский всесторонний вводный курс программирования, который предлагается бесплатно на EdX, обучает нескольким языкам программирования и позволяет студентам специализироваться в соответствии с их интересами. За 13 трудных и напряженных недель CS50 превращает начинающих программистов в профессионалов.



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



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



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



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

Удачного обучения!