User Эллеонора Керри
Эллеонора Керри
41 уровень

Кофе-брейк #83. Какие черты характера выделяют выдающихся программистов. Простое руководство по программированию: функции и методы

Статья из группы Random

Какие черты характера отличают выдающихся программистов

Источник: Hackernoon Что отличает выдающихся программистов от хороших? Я обнаружил две черты характера, которые присущи выдающимся программистам: они всегда были последовательны и настойчивы. Сами по себе эти черты не есть признаками гениальности, и при желании каждый может развить у себя эти черты, а затем применить их в работе. Кофе-брейк #83. Какие черты характера выделяют выдающихся программистов. Простое руководство по программированию: функции и методы - 1

1. Будьте последовательны

Хорошие программисты не занимаются программированием время от времени. Скорее, у них есть определенный график для улучшения своих знаний и навыков в свободное время: до или после работы и по выходным. Например, один мой знакомый программист тратит первые два часа в день — шесть дней в неделю — на личные учебные проекты или задачи. Нельзя сказать, что такие люди пишут код круглосуточно. Они, как и все мы, имеют время на личную жизнь, обязательства и интересы. Но они последовательны: программирование стало их привычкой. Как можно стать последовательным? Это то, чего многие из нас пытаются достичь. Я обнаружил, что тут есть несколько способов. Во-первых, определите количество часов в неделю, которое вы можете тратить на программирование. Это число — ваш еженедельный “программный пробег”. Как бывший бегун на длинные дистанции, я пробегал определенное количество миль каждую неделю. Это был мой еженедельный пробег. Теперь у меня есть свой опыт программирования: это количество часов, которые я трачу на программирование каждую неделю. Большинство людей пренебрегают этим этапом. Они сразу переходят к проекту, который хотят завершить, или к теме, которую хотят изучить, не задумываясь о том, откуда у них появится на это время. В результате они работают по ночам или по 16 часов в день. У этого подхода есть проблема: он неустойчив в долгосрочной перспективе. Отточить свои навыки программиста — это не то, чем вы занимаетесь в течение недели или двух напряженных дней. Вместо этого вы должны постоянно работать над этим долгое время. Вот почему так важно определить свой опыт программирования. Для этого рассмотрите возможность использования журнала учета рабочего времени, чтобы узнать, где и как вы проводите время. Возьмите лист бумаги и запишите все, что вы делаете каждый день, и сколько времени вы это делаете, включая пятиминутные проверки социальных сетей или электронной почты. Так вам станет проще находить свободные места в расписании. Может быть, вы даже сможете получить немного дополнительного времени на домашние дела или просмотр телевизора. Затем вы можете составить план тренировок по программированию, которого вам нужно придерживаться. План тренировок — один из самых эффективных способов быть последовательным. Он позволяет заранее распределять все детали. От вас остается только внедрять этот план в жизнь каждый божий день. В моих планах тренировок по бегу было указано, сколько миль мне нужно пробегать каждый день и с какой скоростью мне нужно их бегать. Теперь я создаю планы тренировок по программированию, которые служат той же цели: они говорят мне, что мне нужно делать каждый день. В конце дня я открываю Evernote на своем компьютере и составляю расписание на следующий день. Вот пример:
6:30 - 8:30 - Программирование
  1. Ревью Python Anki flashcard deck (20 минут).
  2. Решение задачи Word Cloud Data.
Я следую этому процессу в течение всего рабочего дня: обозначаю количество времени, которое я потрачу на задачу, и то, что я хочу выполнить за это время. Также я составляю ежемесячный план тренировок. В него я включаю три вещи, которые я хочу выполнить, изучить или завершить в предстоящий месяц. Раньше я составлял и квартальные планы. Но затем обнаружил, что слишком многое может измениться за три месяца. Месячный план дает достаточно времени, чтобы сделать значительные шаги в обучении.

2. Будьте настойчивы

Вторая черта хороших программистов — настойчивость. Они прорабатывают все варианты решения проблемы и находят ответ. В этом, кажется, секрет. Выдающиеся программисты, которых я встречал, обладали сверхъестественной способностью разбирать проблемы, искать различные варианты решения или выхода из сложной ситуации. Короче говоря, у них была система решения проблем. В средней школе у меня никогда не было системы решения. Когда мне задавали задачу на уроке математики, я сразу бросался в нее на полной скорости. Затем я продолжал это делать, уже когда начал программировать. Нет плана. Нет системы. Некогда думать. Никакого анализа. Неудивительно, что в обоих случаях я без надобности крутил колеса и постоянно сталкивался с препятствиями. Теперь у меня есть система решения проблем, которая помогает мне разбирать проблему, чтобы найти разные варианты. Например, первым шагом в моем процессе решения проблемы является постановка проблемы. Это первое. Как только я понимаю суть проблемы, я сосредотачиваюсь на каждом из следующих этапов.
  • Разбор входных данных и ожидаемых результатов.
  • Создание алгоритма действий.
  • Написание псевдокода.
  • Решение упрощенной версии проблемы.
Надеюсь, вы уловили идею. Этапы могут быть непростыми, но они управляемы. Решая трудную проблему, мы становимся лучше. Это также вселяет уверенность. Как только мы решим одну сложную проблему, мы будем готовы к новым.

3. Отношение к проблемам?

На пути к тому, чтобы стать лучшими программистами, нам следует учитывать еще кое-что: отношение. У вас должно быть свежее отношение к проблемам и двусмысленностям. Однажды я задал senior-разработчику несколько вопросов о проблеме, на которой застрял. Я был озадачен и разочарован. Поначалу озадачился и разработчик. Однако его ответ меня шокировал. «Вау, это крутая проблема», — сказал он. Его интерес вызвали детали, которые он обнаружил. Нельзя сказать, что выдающиеся программисты тоже не застревают в какой-то проблеме. Застревают. Но разница в отношении. Урок, который я усвоил в тот день, заключался в следующем: хорошие программисты не боятся рискнуть отправиться в неизведанное. Они понимают, что обязательно узнают что-то новое, изучая эту проблему. Мы можем многому научиться, изучая других программистов. Но в конечном итоге ответственность лежит на нас: нам нужно приступать к работе каждый день и действовать.

Простое руководство по программированию: функции и методы

Источник: DZone Что делает функцию или метод хорошими? Для этого нужна комбинация факторов, каждый из которых имеет значение. Давайте рассмотрим четыре наиболее важных из них. Кофе-брейк #83. Какие черты характера выделяют выдающихся программистов. Простое руководство по программированию: функции и методы - 2

Осмысленное название

Функции должны иметь имена, описывающие их назначение или функциональность. Когда функция имеет осмысленное название, ее легко прочитать и понять ее назначение. Например, если цель функции — найти клиента по идентификатору, хорошим именем может быть findCustomerById (id: String). Еще одним вариантом может быть findCustomer (id: String). Здесь сигнатура функции подразумевает, что покупатель найден по его идентификатору. Слово “найти” (find) также подразумевает, что покупатель может быть найден или не найден. Если имя функции изменить на getCustomer (id: String), то ее значение меняется, потому что теперь оно подразумевает отсутствие отката; клиент либо найден, либо функция терпит неудачу и, возможно, выдает исключение. Оба названия являются допустимыми именами для функции, но имеют разное значение, и поэтому их реализации также должны отличаться.

Как можно меньше параметров

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

fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
А вот другой вариант:

data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

Функция выполняет то, что ожидалось

Функция должна делать то, что от нее ожидается. Ни больше, ни меньше. Если функция названа как findAddress(latitude, longitude), то она должна найти адрес в заданных координатах, или, если адрес не может быть преобразован для координат, вернуть None, null, Empty или что-либо еще, что является подходящим типом для данного языка. Функция не должна делать ничего другого, например, искать соседние адреса или строить записи координат. Функция может иметь побочные эффекты, такие как ведение журнала или аналитика, но они невидимы для ввода и вывода.

Функцию можно протестировать

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

fun addCustomer(customer: Customer): Customer
С помощью данной сигнатуры функции мы можем вернуть добавленную сущность клиента вызываемому компоненту. Мы также можем проверить, выполняет ли функция то, что она должна делать с этим клиентским объектом (то есть, присваивает ему уникальный идентификатор).
Комментарии (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Максим Уровень 9 Тверь Россия
25 июля 2021
Супер!