Сучасна IT-галузь змінюється і розвивається настільки швидко, що просто фізично не встигаєш за нею.
Обмежені в своїх можливостях статичні web-сторінки були витіснені Rich UI c функціоналом, подібним до операційних систем. JavaScript разом з CSS стали всюдисущими. Все менше і менше людей користуються стаціонарними комп'ютерами і вважають за краще мобільні рішення - додатки та сайти еволюціонують за потребами користувачів. Якщо раніше сайти можна було крутити хоч на локальній машині, то зараз все мігрує в хмару. Бази даних - і ті з табличного вигляду все частіше приймають вигляд, який ефективніше представляє доменну область. Про waterfall вже ходять легенди, і всі ведуть Agile-розробку. І так куди не глянь.
Це колесо крутиться так швидко, що якщо зупинитися перепочити на пару хвилин, вже можна не наздогнати його, а якщо постійно бігти - перегораєш або починаєш п'яніти від передозування IT-технологій, концепцій і підходів. Як і при будь-якому сп'янінні і згодом - запамороченні, хочеться намацати тверду землю, так би мовити заземлитися.
Так що там з приводу намацати фундамент?
А фундамент - це і є фундаментальні знання. Легко можна забути API чергової технології, але принципи та засади - ні. Так само, як навчившись плавати одним стилем, ви зможете при належній фізичній підготовці і бажанні освоїти будь-який інший стиль плавання.
Основ у програмування дуже багато. Не можна обмежувати себе тільки тими, що потрібні кров з носа: ваша серверна мова програмування, OOP, HTTP, SQL, JavaScript, HTML, CSS, ваша IDE і т. д. Потрібно вчити також вищу математику, алгоритми, теорію ймовірності, матстатистику, мат. методи дослідження операцій та т. п.
Але поки це голі слова, і ви можете задати логічне питання: "Чи потрібно мені все це, щоб займатися щоденною рутиною - пиляти формочки, фіксувати елементарні баги і писати найпростіші запити в базу даних?" Як показує практика - ні.
Так чому ж на співбесідах запитують речі з якими, за рідкісним винятком, ви ніколи не зустрічаєтеся? Навіщо потрібні логічні задачі і взагалі завдання, навіщо потрібні питання з математики, структур даних або речі, приховані від вашого повсякденного погляду? Чому такі гіганти, як Google, Amazon та інші, роблять на це наголос?
А тому, що роботодавця та й вас самих турбують не ваші вміння запам'ятовувати відповіді на питання, що з кожною співбесідою стає робити набагато легше, і навіть не знання всіх нових API. А все ж оцінюється ваш розум: наскільки він гнучкий; чи зможе він вивчити щось нове і бажано швидко.
Що дають для програмування деякі з основ?
Математика
Алгебра і геометрія - це перші кроки в логічному мисленні. Ще Аристотель описав основи логіки, що в подальшому вплинуло на багатьох грецьких філософів / математиків. Це здається дико, але не завжди легко зрозуміти, що було причиною того чи іншого бага або проблем з системою. А логіка математики може допомогти в розвитку таких навичок.
Фізика
Фізика розширює наші спільні знання про Всесвіт. Багато хто міг чути про кота Шредінгера і про те, що частка може появитися в будь-який момент часу в будь-якій частині Всесвіту, але мало хто розуміє, що це означає. Фізика вчить нас критичного мислення - відрізняти досяжне від недосяжного.
Теорія ймовірності і матстатистика
Важко уявити сучасні системи без величезної кількості івентів. Big data тут, big data там. А там, де є купа івентів, завжди є і необхідність їх аналізу. Вид нормального розподілу не той - пора бити тривогу. Але якщо для вас це просто графік, то в наступний раз вам його навіть не покажуть.
Структури даних
Дані всюди і їх треба десь зберігати. Але у нас вже є стандартні структури на зразок list і map! Як показує практика, їх можливостей починає не вистачати в самий невідповідний момент, і щоб це швидко усунути, потрібно знати альтернативи, знати, де вони вже використовуються, - все це може допомогти в найнесподіваніший момент.
Алгоритми
Це наступний крок в логіці. І якщо математичні теореми не припускали особливих варіантів, то алгоритми вводять поняття складності, проблеми вибору, оптимального саме для вашого завдання. Це допоможе вам навчитися порівнювати альтернативи, зважуючи всі за і проти.
Бази даних
Можна швидко навчитися писати запити, але ось проектувати їх - це вже інший рівень. Для цього потрібно вміти аналізувати предметну область, правильно компонувати суті і створювати зв'язки між ними. Можливо, на практиці такий шанс просто не випаде, якщо ви з цим не були знайомі раніше і не чули про нормальні форми.
Комп'ютерні мережі
Нас вже не дивує той факт, що навіть найпростіша програма вимагає підключення до інтернету, і взагалі велика частина нашого життя протікає там. Але в більшості випадків ми не зможемо пояснити, як наш браузер знаходить конкретний сайт, як комп'ютер підключається до іншого і чому нам потрібні інші протоколи крім http / https.
Електротехніка
Ми звикли приймати нову техніку за таку, що сама собою зрозуміла, але хтось взагалі замислювався, як вона працює? Що такого цікавого дають нам NPN- і PNP-переходи і що привносять в нашу цивілізацію транзистори?
Математичні методи дослідження операцій
Вміти шукати оптимальні рішення - це те, чого не вистачає багатьом, більшість приймає рішення по інтуїції. Але виявляється, існують підходи, які допоможуть вам в цій важкій справі.
Проектування систем
Ви могли чути про GRASP-патерни, про те, що Coupling повинен бути low, а Cohesion - high. Але чути - це одне, а розуміти і навіть робити - зовсім інше.
Патерни / антипаттерни
Як будь-який дантист повинен знати всі типові способи лікування зубів і також помилки в цьому процесі, так і ви повинні знати переважну більшість патернів і антипаттернів. І тоді наступного разу, коли буде необхідність розбиратися з новинкою, ви подивитеся не тільки на API, але і в саму суть технології. І згодом можете сказати собі, що у вас є варіант оптимальніший, ніж витрачати на це свій час.
Технології ускладнюються і еволюціонують, щоб відповідати вимогам часу, і з цим потрібно змиритися. Але так як технології не роблять концептуальний крок вперед, то і встигнути за цим всім абсолютно реально.
Пізнавайте основи, і це окупиться повністю!