JavaRush /Java блог /Random UA /Кава-брейк #83. Які риси характеру виділяють видатних про...

Кава-брейк #83. Які риси характеру виділяють видатних програмістів. Просте посібник з програмування: функції та методи

Стаття з групи Random UA

Які риси характеру відрізняють видатних програмістів

Джерело: 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
За допомогою цієї сигнатури функції ми можемо повернути додану сутність клієнта компоненту, що викликається. Ми також можемо перевірити, чи функція виконує те, що вона повинна робити з цим клієнтським об'єктом (тобто, присвоює йому унікальний ідентифікатор).
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ