Как написать на калькуляторе
Перейти к содержимому

Как написать на калькуляторе

  • автор:

Простой калькулятор на Python

Простой калькулятор на Python

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

Функции калькулятора

Созданный калькулятор будет иметь все базовые арифметические функции:

Также в калькуляторе будут предусмотрены расширенные функции:

  • расчет процента от числа;
  • возведение числа в степень;
  • логарифм числа.

Например, программа сможет выполнять такие вычисления:

Определив функции программы, можно приступать к написанию кода.

Отображение результата в коде

Для отображения текста и результатов мы будем использовать функцию print().

В качестве примера можно написать в консоли произвольный текст:

print ('Создаем калькулятор на Python!')

Результат:

Создаем калькулятор на Python!

print 795

Результат:

Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей

Работа с переменными

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

Это позволит проводить вычисления:

result = 7 * 6 print(result)

Результат:

Обработка ввода данных

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

Рассмотрим на примере имени и фамилии два результата — без ввода строки и с ним.

name = input() #Иван surname = input() #Петров print('Ваше имя и фамилия:') print(name) print(surname)

Результат:

Иван
Петров
Ваше имя и фамилия:
Иван
Петров

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

На практике пример с вводом выглядит следующим образом:

name = input('Укажите имя: ') #Иван surname = input('Укажите фамилию: ') #Петров print('Ваше имя и фамилия: ') print(name) print(surname)

Результат:

Укажите имя: Иван
Укажите фамилию: Петров
Ваше имя и фамилия:
Иван
Петров

По умолчанию каждый вызов print() разделяет текст переходом на новую строку. Это можно изменить, используя параметр end с аргументом «пробел»:

name = input('Укажите имя: ') #Иван surname = input('Укажите фамилию: ') #Петров print('Ваше имя и фамилия: ', end = ' ') print(name, end = ' ') print(surname)

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

Укажите имя: Иван
Укажите фамилию: Петров
Ваше имя и фамилия: Иван Петров

Вместо множественных вызовов print() можно эффективно управлять выводом текста с помощью методов объединения и форматирования строк.

Методы объединения и форматирования строк

Объединение (конкатенация) строк позволяет сделать код более чистым. При этом нужно не забывать добавлять пробел между именем и фамилией для читаемости.

name = input('Укажите имя: ') #Федор surname = input('Укажите фамилию: ') #Смирнов print('Ваше имя и фамилия: ' + name + ' ' + surname)

Результат:

Укажите имя: Федор
Укажите фамилию: Смирнов
Ваше имя и фамилия: Федор Смирнов

Аналогичный результат можно получить путем форматирования строк с использованием f-строк в Python. В этом случае переменные заключаются в фигурные скобки и вставляются прямо в строку, а перед ней ставится символ ‘f’.

name = input('Укажите имя: ') #Федор surname = input('Укажите фамилию: ') #Смирнов print(f'Ваше имя и фамилия: ')

Результат:

Укажите имя: Федор
Укажите фамилию: Смирнов
Ваше имя и фамилия: Федор Смирнов

Конвертация строк в числа

При использовании функции input() вводимые данные по умолчанию считываются как строки. Это может привести к неожиданным результатам при выполнении арифметических операций.

first = input('Укажите первое число: ') #70 second = input('Укажите второе число: ') #300 summ = first + second print(f'Сумма чисел: ')

Результат:

Укажите первое число: 70
Укажите второе число: 300
70300

Здесь произошла конкатенация (объединение) строк, а не сложение чисел. Чтобы калькулятор корректно выполнял сложение, строки нужно преобразовать в числа с помощью функции int().

first = int(input('Укажите первое число: ')) #70 second = int(input('Укажите второе число: ')) #300 summ = first + second print(f'Сумма чисел: ')

Результат:

Укажите первое число: 70
Укажите второе число: 300
Сумма чисел: 370

Работа с ошибками

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

first = int(input('Укажите первое число: ')) #abc

Результат:

Укажите первое число: abc
ValueError: invalid literal for int() with base 10: ‘abc’

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

Функциональная архитектура калькулятора

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

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

Каждая функция примет два аргумента: first и second.

def summa(first, second): return first + second 
def sub(first, second): return first - second 
def mult(first, second): return first * second
def div(first, second): return first / second

После определения функций проверим их работу:

num1 = int(input('Введите первое число: ')) num2 = int(input('Введите второе число: ')) print(f'Сумма двух чисел: , разность: , ' f'умножение: , частное: ')

Результат:

Введите первое число: 10
Введите второе число: 5
Сумма двух чисел: 15, разность: 5, умножение: 50, частное: 2.0

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

Управление потоком выполнения: if-операторы

Условные операторы (if-операторы) в Python позволяют управлять потоком выполнения программы.

Основной оператор if работает по простому принципу:

if условие_верно: # Выполняется данный блок кода

Простое сравнение чисел:

num1 = int(input('Введите первое число: ')) num2 = int(input('Введите второе число: ')) if num1 == num2: print('Одинаковые числа')

Результат:

Введите первое число: 9
Введите второе число: 9
Одинаковые числа

Если написать разные числа, то не будет никакого результата, так как нет инструкций для этого случая:

Введите первое число: 9
Введите второе число: 7

Для выполнения разных блоков кода в зависимости от условия используется конструкция if-else:

if условие_верно: # Выполняется данный блок кода else: # Выполняется данный блок кода 

Чтобы перебрать несколько инструкций, можно использовать ветвь if-elif-else:

if условие_1: # Блок кода 1 elif условие_2: # Блок кода 2 # . else: # Блок кода n

Пример с if-else — сравнение чисел:

num1 = int(input('Введите первое число: ')) num2 = int(input('Введите второе число: ')) if num1 == num2: print('Одинаковые числа') else: print('Числа разные')

Результат:

Введите первое число: 10
Введите второе число: 20
Числа разные

Пример выбора операции:

oper = input('Выберите операцию (Введите +, -, * или /): ') if oper == '+': print('Вы выбрали сумму') elif oper == '-': print('Вы выбрали разность') elif oper == '*': print('Вы выбрали умножение') elif oper == '/': print('Вы выбрали деление') else: print('Некорректная операция!')

Результат:

Выберите операцию (Введите +, -, * или /): *
Вы выбрали умножение
Выберите операцию (Введите +, -, * или /): Y
Некорректная операция!

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

Сборка функций в одну программу calculator

Для оптимизации кода и его легкой поддержки создадим три основные функции:

  • operation() для запроса операции от пользователя;
  • calc() для выполнения математических операций;
  • run() — главная функция, вызывающая остальные и управляющая ходом программы.

Функции operation() и calc():

def operation(): mes = input('Выберите операцию (Введите +, -, * или /): ') if mes == '+': print('Вы выбрали сумму') elif mes == '-': print('Вы выбрали разность') elif mes == '*': print('Вы выбрали умножение') elif mes == '/': print('Вы выбрали деление') return mes def calc(first, second, oper): result = None if oper == '+': result = summa(first, second) elif oper == '-': result = sub(first, second) elif oper == '*': result = mult(first, second) elif oper == '/': result = div(first, second) else: print('Некорректная операция!') return result 

В функции operation() пользователь выбирает операцию, которая затем возвращается. В calc() мы используем словарь для упрощения выбора операции и выполнения соответствующей математической функции.

def run(): first = int(input('Введите первое число: ')) second = int(input('Введите второе число: ')) oper = operation() result = calc(first, second, oper) print(f'Результат: ')

Эта функция интегрирует все предыдущие:

  • запрашивает числа;
  • вызывает operation() для выбора операции;
  • вызывает calc() для вычисления результата, который затем выводится.

Чтобы запустить программу, нужно вызвать функцию run().

Результаты работы:

Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): +
Вы выбрали сумму
Результат: 17
Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): *
Вы выбрали умножение
Результат: 70
Введите первое число: 7
Введите второе число: 10
Выберите операцию (Введите +, -, * или /): er
Некорректная операция!
Результат: None

Расширение функционала калькулятора

Чтобы улучшить калькулятор, можно добавить в него больше функций.
Например:

  • процент;
  • возведение в степень;
  • вычисление логарифма (потребуется импортировать библиотеку math).

Обновим функцию calc() следующим образом:

import math def calc(first, second, oper): result = None if oper == '+': result = first + second elif oper == '-': result = first - second elif oper == '*': result = first * second elif oper == '/': result = first / second elif oper == '%': result = (first / second) * 100 elif oper == '**': result = first ** second elif oper == 'log': result = math.log(first, second) else: print('Неизвестная операция!') return result

Теперь обновим функцию operation():

def operation(): mes = input('''Выберите операцию (Введите +, -, *, /, %, **, log): + - Сложение - - Вычитание * - Умножение / - Деление % - Процент первого числа от второго ** - Возведение в степень log - Логарифм первого числа по основанию второго\n''') if mes == '+': print('Вы выбрали сложение') elif mes == '-': print('Вы выбрали вычитание') elif mes == '*': print('Вы выбрали умножение') elif mes == '/': print('Вы выбрали деление') elif mes == '%': print('Вы выбрали нахождение процента первого числа от второго') elif mes == '**': print('Вы выбрали возведение в степень') elif mes == 'log': print('Вы выбрали логарифм') else: print('Неизвестная операция!') return mes

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

Для иллюстрации рассмотрим пример вычисления 30% от 100.

Введите первое число: 30
Введите второе число: 100
Выберите операцию (Введите +, -, *, /, %, **, log):
+ — сложение двух чисел
— — вычитание двух чисел
* — произведение двух чисел
/ — деление двух чисел
% — процент первого числа от второго
** — возведение первого числа в степень второго
log — логарифм первого числа по основанию второго
%
Вы выбрали процент
Результ: 30

Обработка исключений и улучшение кода

Чтобы сделать калькулятор более надежным и удобным, нужно доработать четыре задачи:

  • ошибку «деление на ноль»;
  • ввод нечисловых данных;
  • некорректный ввод символа операции;
  • работа программы calculator после завершения (по желанию пользователя).

Чтобы решить проблему с делением на ноль, нужно модифицировать функцию calc() следующим образом:

if (second == 0): print('Деление на ноль запрещено!') return

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

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

Использование циклов и обработка исключений

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

Для начала нужно написать список всех допустимых операций:

correct_operations = ['+', '-', '*', '/', '%', '**', 'log']

Следующим шагом будет проверка введенной операции. С помощью цикла while будем запрашивать повторный ввод, если операция некорректна:

while mes not in correct_operations: print('Такой операции нет в списке. Попробуйте ещё!') mes = input()

Для обработки ситуаций, когда введены не целые числа, добавим в функцию run() блок try-except:

try: first = int(input('Укажите первое число: ')) except ValueError: first = int(input('Вы ввели некорректные данные. Пожалуйста, введите целое число.')) try: second = int(input('Укажите второе число: ')) except ValueError: second = int(input('Вы ввели некорректные данные. Пожалуйста, введите целое число.'))

Для возможности продолжения работы с калькулятором после завершения одной операции, добавим следующий код:

progam_is_running = True while(progam_is_running): run() answer = input('Желаете продолжить?\n' ' Введите + если да и прочий символ, если нет: ') if answer != '+': progam_is_running = False 

Таким образом, программа будет работать в цикле до тех пор, пока пользователь не решит завершить ее работу.

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

import math def summa (first, second): return first + second def sub (first, second): return first - second def mult (first, second): return first * second def div (first, second): return first / second def calc(first, second, oper): result = None if oper == '+': result = summa(first, second) elif oper == '-': result = sub(first, second) elif oper == '*': result = mult(first, second) elif oper == '/': if (second == 0): print('Деление на ноль запрещено!') return result = div(first, second) elif oper == '%': result = first / second * 100 elif oper == '**': result = first ** second elif oper == 'log': result = math.log(first, second) else: print('Некорректная операция!') return result def operation(): mes = input('Выберите операцию (Введите +, -, *, /, %, **, log):\n ' '+ - сложение двух чисел\n' '- - вычитание двух чисел\n' '* - умножение двух чисел\n' '/ - деление двух чисел\n' '% - процент первого числа от второго\n' '** - возведение первого числа в степень второго\n' 'log - логарифм первого числа по основанию второго\n') if mes == '+': print('Вы выбрали сумму') elif mes == '-': print('Вы выбрали разность') elif mes == '*': print('Вы выбрали умножение') elif mes == '/': print('Вы выбрали деление') elif mes == '%': print('Вы выбрали нахождение процента первого числа от второго') elif mes == '**': print('Вы выбрали возведение в степень') elif mes == 'log': print('Вы выбрали логарифм') correct_operations = ['+', '-', '*', '/', '%', '**', 'log'] while mes not in correct_operations: print('Такой операции нет в списке. Попробуйте ещё!') mes = input() return mes def run(): try: first = int(input('Укажите первое число: ')) except ValueError: first = int(input('Вы ввели некорректные данные. Пожалуйста, введите целое число.')) try: second = int(input('Укажите второе число: ')) except ValueError: second = int(input('Вы ввели некорректные данные. Пожалуйста, введите целое число.')) op = operation() result = calc(first, second, op) print(f'Результат: ') progam_is_running = True while(progam_is_running): run() answer = input('Желаете продолжить?\n' ' Введите + если да и прочий символ, если нет: ') if answer != '+': progam_is_running = False

Заключение

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

Пишем калькулятор на JavaScript

В этой статье мы с вами, как следует из названия, напишем простой калькулятор на JavaScript.

Желание написать калькулятор возникло у меня после просмотра одного туториала, посвященного созданию «simple calculator», который оказался далеко не симпл и толком ничего не умел делать.

Наш калькулятор будет true simple (42 строки кода, включая пробелы между блоками), но при этом полнофункциональным и масштабируемым.

Без дальнейших предисловий, приступаем к делу.

Наша разметка выглядит так:

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

Подключаем стили:

* < margin: 0; padding: 0; box-sizing: border-box; >body < height: 100vh; background: radial-gradient(circle, skyblue, steelblue); display: flex; justify-content: center; align-items: center; >.calculator < width: 320px; height: 480px; background: #eee; border-radius: 5px; box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.2), -2px -2px 3px rgba(0, 0, 0, 0.2); >output < display: flex; justify-content: center; align-items: center; width: 300px; height: 40px; background: #fff; margin: 10px auto; border-radius: 5px; font-size: 1.4em; font-weight: bold; box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.3), inset -1px -1px 1px rgba(0, 0, 0, 0.3); >.keyboard < height: 440px; display: flex; flex-wrap: wrap; justify-content: space-evenly; align-items: flex-start; >button

Вот что мы имеем на данный момент:

Кнопки будут генерироваться программно.

Переходим к скрипту.

Определяем поле для вывода результата и создаем контейнер для клавиатуры:

const output = document.querySelector('output') const div = document.createElement('div') div.classList.add('keyboard') document.querySelector('.calculator').appendChild(div) 

Наша строка с символами выглядит так:

'C CE % / 7 8 9 * 4 5 6 - 1 2 3 + 0 ( ) =' 

Преобразуем данную строку в массив и создаем кнопки:

// разделителем служит пустая строка // можно было бы обойтись без пробелов, если бы у нас не было "CE" 'C CE % / 7 8 9 * 4 5 6 - 1 2 3 + 0 ( ) ='.split(' ') // пробегаемся по массиву // для каждого символа // создаем кнопку с помощью строкового литерала // записываем значение символа в атрибут "value" кнопки .map(symbol => < div.insertAdjacentHTML('beforeend', `">$ `) >) 

Находим созданные кнопки и добавляем к ним обработчик события «клик»:

document.querySelectorAll('button').forEach(button => < button.addEventListener('click', function () < // по клику вызывается функция со значением кнопки в качестве параметра calc(this.value) >) >) 

Мы также хотим иметь возможность вводить символы с помощью клавиатуры. Для этого нам необходимо добавить обработчик события «нажатие клавиши» к объекту «Document» или «Window», затем отфильтровать ненужные значения свойства «ключ» клавиши, например, с помощью регулярного выражения:

document.addEventListener('keydown', event => < if ((event.key).match(/[0-9%\/*\-+\(\)=]|Backspace|Enter/)) calc(event.key) >) 

Метод «match» в данном случае играет роль фильтра: он не позволяет передавать функции «calc» аргумент, не соответствующий заданному в нем условию.

Само условие звучит так: если значением event.key является один из символов, указанных в квадратных скобках ([]; цифра от 0 до 9, знаки деления, умножения, сложения, вычитания, открывающая, закрывающая круглые скобки или знак равенства; обратная косая черта — экранирование) или (| — альтерация) Backspace, или Enter, то вызываем calc с event.key в качестве параметра, иначе ничего не делаем (Shift также успешно отбрасывается).

Наша главная (и единственная) функция «calc» выглядит следующим образом (код следует читать снизу вверх):

// функция принимает значение кнопки или ключ клавиши function calc(value) < // если нажат знак равенства или Enter if (value.match(/=|Enter/)) < // пробуем выполнить операцию try < // вычисляем значение строки // это возможно благодаря методу "evaluate" объекта "math" // Math.trunc используется для округления до целого числа output.textContent = Math.trunc(math.evaluate(output.textContent)) // если операцию выполнить невозможно >catch < // сохраняем значение поля let oldValue = output.textContent // создаем новую переменную let newValue = 'недопустимое выражение' // выводим значение новой переменной в поле output.textContent = newValue // через полторы секунды возвращаем полю старое значение setTimeout(() =>< output.textContent = oldValue >, 1500) > // если нажат символ "C" > else if (value === 'C') < // очищаем поле output.textContent = '' // если нажат символ "СЕ" или Backspace >else if (value.match(/CE|Backspace/)) < // уменьшаем строку на один символ output.textContent = output.textContent.substring(0, output.textContent.length - 1) // если нажата любая другая (отфильтрованная) кнопка или клавиша >else < // записываем ее значение в поле output.textContent += value >> 

В завершение, парочка слов о заявленной масштабируемости и полнофункциональности.

Метод «evaluate» (ранее «eval») и другие методы Math.js имеют очень большие возможности. Опираясь на эти возможности, мы можем легко расширить функционал нашего калькулятора, добавив в него новые символы и операторы, предусмотрев возможность работы с числами с плавающей точкой (регулируя количество знаков после запятой с помощью переключателя и метода «toFixed») и т.д.

Благодарю за внимание. Надеюсь, вы нашли для себя что-то полезное. Хороших выходных и счастливого кодинга.

Использование Калькулятора на iPhone

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

Siri. Скажите, например: «Сколько будет 74 умножить на 9?» или «Сколько будет 18% от 225?» Узнайте, как использовать Siri.

Программирование как искусство или как написать «Калькулятор» за 30 дней

Доводилось ли тебе, дорогой читатель, когда-нибудь писать рассказы? Может быть это было сочинение в школе или эссе на тему «Как я провел Лето» «Смысл жизни» на факультете психологии в университете. Всегда от пишущего требовали одного, донести свои мысли четко и, по возможности, интересно. Мне хотелось бы поделиться с тобой историей о том, как я писал рассказ, в котором объяснял почему и почему . Статья несет в себе цель не сколько описать техническую сторону программирования, сколько ее эстетическую часть и, что главное, описать психологию программирования. Сопровождаться сия статья будет ссылками на коммиты в GitHub.

Немного о себе

К моменту начала истории с калькулятором я уже 2 месяца работал web-разработчиком в одном интернет-магазине (название пожалуй не буду упоминать) и проблем с работой не было, так как я обладал достаточными знаниями C# и сопутствующими технологиями для участия в полном цикле разработки и поддержки сайта. К тому же, так как проект уже был запущен к моменту моего прихода и функционировал более 4 лет, в мои задачи входило в основном расширение кода по «аналогии«. Однако существовала проблема, внимания которой я не уделял в должной мере, и имя этой проблеме «Стиль кода».

Осознание проблемы

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

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

Становление на путь исправления

Возврат в начало пути программиста и первый урок.

«Слушай дядю, дядя Senior, дядя плохого не скажет.»

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

Первым заданием, которое я получил, оказался типичный для любого начинающего программиста консольный калькулятор. «Что может быть проще» — подумал я, и, опять таки довольно быстро, написал сие творение. Это было несколько лучше парсера (за который мне, видимо, будет стыдно до конца времен), но все еще было очень далеко от того кода за который могло бы быть не стыдно. После первого же ревью на написанный мной код, я осознал с чем мне прийдется столкнуться. Ревью вроде даже был больше чем сам код (вместе с кодом стандартных библиотек .Net). Прочтя все замечания я внес изменения и попутно внес правки, которых, IMHO, не хватало данной великой программе. Я никогда так не лажал, друг мой. Код стал хуже, а я, впервые за сознательную жизнь программиста, столкнулся с яростью тим лида. Естественно я всячески оправдывал свои действия, но нет ничего более свирепого, чем ментор, чьи указы не выполняются или перекаверкиваются.

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

Теория или практика? Вот в чем вопрос. Второй урок

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

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

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

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

Код как искусство или последние уроки

Я думаю многие уже поняли о какой книге пойдет речь. «Чистый код» дядюшки Боба навел меня на мысль, которая, по моим ощущениям, засела глубоко и надолго в моем мозгу. Написать просто хороший алгоритм это 50% работы — написать же сложный алгоритм так, что бы человек, не особо разбирающийся в тонких материях, но хотя бы чуть-чуть знающий английский язык мог понять о чем ты написал — вот истинное искусство. И с этого момента обучение пошло легче, и конечно не без огрехов, не без огромных ревью и ударов по голове за глупейшие ошибки, но я таки привел код к тому виду, за который может быть не стыдно. Посмотреть его можно тут.

Какие же уроки я вынес к концу первого задания моего наставника?! Их не так много, но каждый из них стоит своего:

  • Дисциплина и сосредоточенность во всем — от написания кода, до поиска информации.
  • Умение балансировать. Равномерное наполение двух концов знаний — теории и практики.
  • Умение задавать вопросы по существу и главное, не боятся их задавать.
  • Думать. Постоянно думать и пытаться сделать лучше то, что казалось бы, уже сделано.
Вишенка на торте

Что же я получил в итоге. Как изменилось мое понимание программирования после месяца,
потраченного на калькулятор?! Все очень просто, изменилось моё отношение к коду. Буквально месяц назад тяжело было найти более несерьезного программиста, для которого любой код был лишь очередной шуткой, которую ты рассказал и забыл и неважно, понял ее кто-нибудь или нет. И вот я, стою перед исполинских размеров горой под названием «программирование», готовый карабкаться вверх и понимающий, что с каждым метром, с каждым шагом и с каждым вогнаным между камней скальным крюком будет все тяжелее и тяжелее. Но разве не за этим мы сюда пришли?! Разве не потому инженер-конструктор собирает новую модель свехбыстрого самолета или химик производит новые лекарства?! Ведь все это кому то нужно. И программирование, как явление, так же необходимо людям. И в такой ситуации относится к коду несерьезно было бы простым кощуством.

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

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

Спасибо за внимание

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *