Секрет швидкого програмування: не замислюйтесь



Програмувати швидко — це легко! Так вважає інженер-програміст компанії Google, який всі публікації в своєму блозі підписує лаконічним «Макс». Макс також працює головним архітектором, ком'юніті-менеджером і реліз-менеджером в Bugzilla Project. Ми в Alconost вразили і перевели його поради про те, чи як навчитися програмувати з космічною швидкістю.

Якщо обговорювати з розробниками складність коду, вони часто говорять, що хочуть писати простий код, але із-за тиску дедлайнів і більш глибинних причин у них не вистачає часу або знань для того, щоб виконати завдання і оптимізувати рішення до максимальної простоти.

Вони, звичайно, мають рацію в тому, що в умовах стислих термінів розробники, як правило, будуть писати складний код. Втім, дедлайни не повинні призводити до складності. Замість фрази «Цей дедлайн завадив мені написати простий код» можна вимовити рівноцінну: «Я недостатньо швидко програмують, щоб писати просто». Тобто чим швидше ви як програміст — тим менше впливу на якість вашого коду мають дедлайни.

Тепер давайте розберемося, як, власне, стати швидше? Може, це вроджене магічне вміння? Треба бути «розумнішими» інших, щоб бути швидким?

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

Читати далі →

Clean Recycler Adapter. Частина 1

Введення


Списки, списки, списки… Вертикальні, горизонтальні, комбіновані. Практично ні один мобільний додаток не обходиться без них. Більше того, нерідко додатки складаються з одних тільки списків.

І якщо в «однорідних» списках немає нічого страшного, то різні типи комірок вже можуть викликати питання, основні з яких:

  • як полегшити зміна і масштабування типів комірок
  • як мінімізувати кількість місць для зміни, знизивши ризик потенційних помилок
  • як позбутися if-else каліцтва
  • як позбутися потворних перевірок на тип і небезпечних привидів типів

Читати далі →

Закон Деметри

Введення
На даний момент існує безліч доведених часом практик, що допомагають розробникам писати добре підтримуваний, гнучкий і зручно читається код. Закон Деметри — одна з таких практик.

Читати далі →

The Pros & Cons of Test-Driven Development



Test-driven development (TDD) — практика, відома вже досить давно. Розробка через короткі цикли «насамперед пишемо юніт-тест, потім-код, потім проводимо рефакторинг, повторюємо» в ряді компаній прийнята в якості стандарту. Але обов'язково команда, яка досягла хорошій ступеня зрілості процесу розробки, повинна приймати TDD? Як і для більшості інших практик Extreme Programming, спори з приводу TDD досі не вщухають. Справджуються початкові витрати на навчання та впровадження TDD? Дає TDD відчутний виграш? Можна цей виграш виміряти? Чи немає випадків, коли TDD проекту шкодить? А чи є ситуації, коли без TDD вирішити завдання просто неможливо?

Про це ми поговорили з розробниками-експертами Андрієм Солнцевым asolntsev (розробник з таллінській компанії Codeborne, який практикує Extreme Programming і дотримується TDD) і Тагіром Валеевым lany (розробник у JetBrains, також розробляє опенсорсную бібліотеку StreamEx і аналізатор байткода Java HuntBugs; переконаний, що TDD — марна практика). Цікаво? Ласкаво просимо під кат!

Читати далі →

Головні характеристики якісного коду


Як часто ви поражаетесь, читаючи чужий код, і думаєте «господи, ну і каша...». Швидше за все, досить часто. І чи можете ви бути впевненим, що ніхто не думав також коли читав ваш код? Іншими словами, наскільки ви впевнені в чистоті свого коду? Можна бути впевненим тільки якщо повністю розумієш, що означає чистий код.
Складно дати точне визначення чистого коду, і, швидше за все, скільки програмістів — стільки визначень. Однак, деякі принципи достатньо універсальні. Я зібрав дев'ять найбільш релевантних і описав нижче.
1.Поганий код робить занадто багато, чистий код сфокусований
Кожен клас, метод і будь-яка інша субстанція повинна залишатися неспотвореної. Вона повинна слідувати принципом єдиною обов'язки. Коротко можна сказати так: якщо подумати про причини зміни класу, то можна придумати більше однієї гарної причини.
Але я б не обмежував визначення класами. У свій останній статті Ральф Вестфал (Ralf Westphal) представив більш широке визначення принципу єдиною обов'язки:
Функціональна одиниця на певному рівні абстракції повинна відповідати за один аспект вимог системи. Аспект вимог це ознака або властивість вимоги, яка може змінюватися незалежно від інших аспектів.

Читати далі →

Що робити з чужими боргами?

Один з аспектів професії розробника — посвята профанів в особливості процесу розробки ПЗ.
С. Макконнелл, Досконалий код
Мета цієї публікації — поділитися досвідом роботи над проектом зі складною історією і тяжкою спадщиною. Після відходу з чергового т. н. «стартапу», я вирішив що хочу спробувати нових відчуттів: enterprise, legacy, etc. Для цього взявся за роботу над корпоративним додатком для транснаціонального концерну. Розробка на той момент йшла вже третій рік, додаток пережило кілька поколінь розробників, але стабільного релізу так і не було.

Вважаю публікація буде корисною:

  • розробникам приймаючим аналогічне рішення, щоб зважити всі за і проти
  • менеджерам «непростих» проектів, щоб краще зрозуміти причини і наслідки технічних проблем
  • і, звичайно, просто допитливим
Порушувалися у статті питання:

  • Низька компетенція розробників, і що з цим можна вдіяти?
  • Які аргументи переконливі в очах замовника для функціональних змін у проекті?
  • Чому робота аналітиків і QA дуже важлива з точки зору розробки зокрема і для проекту в цілому?

Читати далі →

Як розрівняти Піраміду смерті

Налаштувати webpack по мануали, запрограмувати ангуляр і навіть послати json з ajax — кажись кожен може, але як глянеш на сам код… В цьому пості буде показана різниця між нововведеннями.

Отже ви відкрили ноду і побачили, що майже всі функції «з коробки» останнім аргументом приймають колбек.

var fs = require("fs");
fs.readdir(__dirname, function(error, files) {
if (error) {
console.помилка(error);
} else {
for (var i = 0, j = files.length; i < j; i++) {
console.log(files[i]);
}
}
});


Піраміда смерті

Читати далі →

Почалося змагання «Make with Ada» для розробників вбудованих систем



AdaCore організовує новий конкурс для розробників. Як і в минулі рази, на підготовку дається значно більше часу, ніж в олімпіадах з иноформатике. Це як раз підходить тим, кому не подобаються змагання з швидкого написання страшного коду, який потім тільки викинути.

Сьогодні на порядку денному — розробка для ARM на голому залозі і технології верифікації. Загальний призовий фонд — більше 8000€.

Читати далі →

Do good code: 8 правил хорошого коду

Практично всім, хто навчався програмування, відома книга Стіва Макконнелла «Досконалий код». Вона завжди справляє враження, перш за все, значною товщиною (близько 900 сторінок). На жаль, реальність така, що іноді враження цим і обмежуються. А даремно. У подальшій професійній діяльності програмісти стикаються практично з усіма ситуаціями, описаними в книзі, і приходять досвідченим шляхом до тих самих висновків. У той час як більш тісне знайомство могло б заощадити час і сили. Ми в GeekBrains дотримуємося комплексного підходу в навчанні, тому провели для слухачів вебінар за правилами створення гарного коду.

В коментарях до нашого першого посаді на Хабре користувачі активно обговорювали канали сприйняття інформації. Ми подумали і вирішили, що тему «досконалого коду» варто розвинути і викласти ще і письмово — адже базові принципи хорошого коду єдині для програмістів, які пишуть на будь-якій мові.

Читати далі →

Як писати досліджуваний код

image

Якщо ви програміст (або чого гірше архітектор), то чи можете ви відповісти на таке просте питання: як писати НЕ досліджуваний код? Задумалися? Якщо з працею можете назвати хоча б 3 способи домогтися не тестованого коду, то стаття для вас.

Багато хто скаже: а навіщо мені знати, як писати не досліджуваний код, поганому хочеш мене навчити? Відповідаю: якщо знати типові паттерни не тестованого коду, то, якщо вони є, можна легко побачити їх у своєму проекті. А, як відомо, визнання проблеми — вже половина шляху до лікування. Також у статті дається відповідь, як власне здійснюється таке лікування. Прошу під кат.

Читати далі →