Збільшення складності систем невблаганне, гнітюче і, зрештою, калічить. Для мене, як програміста старшого покоління, це також гірко розчаровує.
Я програмую вже понад 40 років, написавши код на 50-100 різних мовах чи діалектах, і став експертом у 5-10. Причина, на яку я можу стверджувати так багато, полягає в тому, що вони здебільшого просто однією і тією ж мовою з налаштуваннями. Налаштування додають складності, роблячи кожну мову просто трохи іншою.
Я незмінно реалізував ті самі алгоритми: колекції, перетворення, сортування та пошук, кодування / декодування, форматування / розбору, буфери та рядки, арифметика, пам'ять, введення / виведення. Кожна нова реалізація додає складності, тому що кожна - просто трохи інша.
Цікаво, що чарівні виконавці трапецієподібних веб-рамок та мобільних додатків, як вони можуть створити щось таке прекрасне за такий короткий час. Тоді я усвідомлюю, наскільки вони не знають, скільки їм знадобиться дізнатися про дані чи комунікації, тестування чи теми чи що завгодно, перш ніж те, що вони роблять, стане корисним.
Я навчився майстерності в епоху мов четвертого покоління, де ми щиро вірили, що ми створимо наступні мови вищих і вищих рівнів, щоб поступово захоплювати все більше і більше повторюваних частин програмного забезпечення для написання. То як саме так вийшло?
Microsoft та IBM вбили цю ідею, повернувшись до C для написання програм для Windows та OS / 2, тоді як dBase / Foxpro та навіть Delphi знемагали. Тоді Інтернет зробив це знову з його остаточним тріо асемблерних мов: HTML, CSS та JavaScript / DOM. Звідти все було вниз. Завжди більше мов і більше бібліотек, більше рам і більше складності.
Ми знаємо, що ми повинні робити це інакше. Ми знаємо про CoffeeScript і Dart, про Less і Sass, про шаблон, щоб не писати HTML. Ми знаємо і все одно це робимо. У нас є свої рамки, сповнені проникливих абстракцій, і ми бачимо, які чудеса можуть зробити ті вибрані нечисленні, хто дізнаються про заклинання, але ми і наші програми опинилися в пастці, прийняті раніше. Це занадто складно, щоб змінити або почати спочатку.
У результаті виходить те, що речі, які повинні бути легкими, є непростими, а речі, які повинні бути можливими, майже неможливі через складність. Я можу оцінити витрати на внесення змін, щоб впровадити нову функцію у встановлену базу коду та бути впевненим, що я буду правильно. Я можу оцінити, але я не можу це виправдати чи пояснити. Це занадто складно.
Відповідаючи на ваше останнє запитання, я б настійно радив молодшим програмістам починати якомога вище шару торта, і лише піти на нижчі шари, оскільки потреба та бажання надають поштовх. Моя перевага - це мови, які не мають циклів, мало розгалуження чи явний стан. Лісп і Хаскелл приходять на думку. На практиці я завжди закінчую C # / Java, Ruby, Javascript, Python і SQL, тому що тут спільноти.
Заключні слова: складність - це кінцевий ворог! Побийте це, і життя стає простим.