«Ці речі мають тенденцію ставати карго культом, а їхнє розуміння не може бути просто поміщене вам у мізки". Досвідчений СТО назвав топ-10 найважливіших знань для програмістів
Технічний директор Metatech, головний архітектор Metarhia & Metactos, викладач КПІ Тимур Шемседінов опублікував добірку найважливіших знань для програміста. Ось 10 пунктів, без знання та застосування яких програмістові розвиватися буде складно.
Технічний директор Metatech, головний архітектор Metarhia & Metactos, викладач КПІ Тимур Шемседінов опублікував добірку найважливіших знань для програміста. Ось 10 пунктів, без знання та застосування яких програмістові розвиватися буде складно.
Системи модульності, впровадження залежностей (DI) та інверсія управління (IoC), навички побудови структури застосунків. Тут же легендарна архітектура папочок, листкова та цибулева архітектура, гексагональна та pipeline — не можна все з них узяти, це суперечливі прийоми, потрібно обрати й осмислити.
Декомпозиція абстракцій і принципи GRASP: Information Expert, SOLID: єдиної відповідальності (SRP) і поділу інтерфейсів (ISP), закон Деметри (LoD).
Контрактне програмування і моделювання всього через схеми: бази даних, структури даних, контракти API, контракти модулів, форми, звіти, підсистеми, модулі, потрібен однорідний підхід.
Принципи ізоляції та Separation of concerns — ізолювати потрібно все, що повинно змінюватися незалежно, а спосіб ізоляції — інтерфейси і контракти, патерни, процеси і потоки, ізольовані контексти виконання.
Coupling і Cohesion, управління складністю та її приховування за абстракціями і фасадами, семантична складність набагато важливіша, ніж цикломатична.
Agnostic підходи: Platform-agnostic, Framework-agnostic, Protocol-agnostic: код не повинен змінюватися під час перенесення між фреймворками, наприклад, ендпоінти не повинні змінюватися навіть для роботи з різними протоколами. Звичайно, не потрібно цим зловживати.
Чиста архітектура і шарувата архітектура (Onion, Layered) — шарів може бути і один, не потрібно завжди робити їх два або три, не потрібно бездомно копіювати шаблон проєкту, шари абстракцій потрібно проєктувати
Створення доменних мов (DSL) — складність доменної зони коду, під час розвитку проєкту зазвичай приводить нас до необхідності різко спростити синтаксис, і ось наша мова, хоч би якою вона була, перестає підходити, потрібно зробити стрибок у виразності, інший синтаксис і семантика. Зрозуміло, що такі мови, як LISP і JS можуть самі собі бути DSL, але не завжди.
Поділ прикладного і системного коду (це різні спеціальності) — перетин знань мінімальний. У JavaScript прикладному програмісту можна думати про змінні, як про скалярне і змінне, а системний програміст уже повинен думати про зв’язування ідентифікаторів, хіп, стек, реєстрові змінні, форму об'єктів, оптимізацію і збирання сміття, тут можна на 10 годин лекцію затіяти.
Мультипарадигмове програмування: зациклюватися не можна ні на функціональному програмуванні або ООП, ні на моделі акторів і автоматному, реактивному і прототипному, потрібно вибирати з широкого спектра ідей, до речі, дуже часто звичайне процедурне дає несподівано хороший результат, спробуйте.
«Ці речі мають тенденцію ставати карго культом, а їхнє розуміння не може бути просто поміщене вам у мізки. Для різних мов все серйозно відрізняється, при бездумному перенесенні це будуть просто мертві церемонії. Їх можна оживити практикою, прив’язати до реалій, переосмислити, щоб вони не перетворювалися на монстрів і застиглий жах», — зазначив фахівець.
«Програмісти, які не експериментували зі штучним інтелектом, зазвичай не підходять». Колишній CEO Tripadvisor пояснив, яких кандидатів не взяв би на роботу