Інші відповіді були зосереджені на тому, що таке клієнтське та серверне програмування: які мови в основному використовуються, які завдання потрібно виконати тощо.
Це абсолютно правильно, але я пропускаю трохи акцентувати увагу на відмінності між обома типами програмування в контексті веб-програмування. Дозвольте спробувати вирішити це.
Безпека та дозволи
У програмуванні на стороні клієнта ви не маєте доступу до повної системи через проблеми безпеки. Користувачеві не обов’язково довіряти кожен фрагмент коду, який завантажується з Інтернету та виконується на його машині, і це головна мета дизайну для клієнтського середовища (браузера та двигуна JavaScript): забезпечити ізольоване середовище де клієнтський код може виконуватись, але не може отримати доступ до нічого, що не дозволено.
У серверному програмуванні добре застосовувати також обмеження доступу кожної програми до базової системи, але це значно менше накладається на вас, оскільки, зрештою, ви або ваша компанія контролюєте цю систему. Цей дизайн "ізольованої клітки" не вбудований у інструменти та мови програмування на стороні сервера, а здійснюється за допомогою установки інсталяції (використовуючи виділених користувачів з обмеженими дозволами, вибираючи порти, які вимагають або не потребують кореневих дозволів тощо).
Розгортання та платформа
У програмуванні на стороні сервера розгортання має відбуватися за межами коду, використовуючи якийсь інструмент (навіть якщо він є make install
чи а git clone
), і це розгортання зазвичай ручне - або, принаймні, очікується, що воно відбудеться під наглядом шлях. Система (мається на увазі ОС), в якій ви розгортаєтесь, зазвичай є рівномірною для декількох машин, але вона може бути сильно налаштована під ваші потреби.
У програмуванні на стороні клієнта розгортання відбувається з вашого серверного коду, який обслуговує клієнтів автоматично та без нагляду. Базова система (мається на увазі головним чином браузер) може бути дуже різною для значно більшої кількості машин. Для того, щоб зробити розгортання взагалі можливим, потрібно дотримуватися стандартів, і існує набагато сильніша тенденція до єдиної мови та середовища.
Ось чому копіювання коду на стороні сервера з однієї машини на інший може зайняти кілька тижнів, тоді як код на стороні клієнта зазвичай тривіальний для виконання на різних машинах.
Державні та вторинні ефекти
(Відмова: це, безумовно, самий суб'єктивний пункт із усіх. Напевно, у моїй аргументації є багато неправильних аспектів. На мою думку, це просто цікава гіпотеза.)
У серверному програмуванні стан викликає набагато більшу стурбованість, тобто, як отримати та оновити дані на вимогу користувача з можливістю конфліктів через одночасність. Навіть якщо більша частина цієї складності завантажена на сервер бази даних, це відповідальність коду на стороні сервера, щоб дозволити базі даних зберігати гарантії цілісності даних, використовуючи правильно свій інтерфейс (наприклад, не використовувати кеш для оновлень, які ніколи не бачать БД), хоча кодом на сервері також є мета не перевантажувати базу даних роботою, а користувач чекати відповіді.
У програмуванні на стороні клієнта представлення результатів користувачеві викликає набагато більшу стурбованість, і це передбачає вторинні ефекти (переважно друк на екран). Це не означає, що немає жодної держави (наприклад, файли cookie), а лише те, що головна мета коду - це фактично взаємодія з користувачем, і це не може відбутися без вторинних наслідків.
Ось чому програмування на стороні клієнта зазвичай вимагає (у якийсь момент) дивитися на екран з демонстраційною версією, щоб перевірити, чи всі кольори та макет правильні, тоді як програмування на стороні сервера може відбуватися майже виключно в текстово-орієнтованому середовищі, де автоматизовано тести перевіряють, чи логіка все ще робить те, що належить робити.