Сложнее всего писать программы, которые будут как-то взаимодействовать с пользователем.
Любые даже навороченные математические алгоритмы воплощать проще.
Почему?
Во-первых, пользователь будет вести себя деструктивно.
Он будет
- пытаться создать два файла с одинаковым именем;
- передумывать и прерывать работу программы на середине;
- пытаться вручную редактировать файлы настроек;
- загружать в программу неформатные данные;
- дважды параллельно запускать одну и ту же программу;
- пытаться одновременно редактировать одни и те же данные в разных программах;
- удалять данные, а потом полгода спустя интересоваться, куда они делись;
и много чего еще.
Если всего этого не учитывать, то программа будет как карточный домик. До поры, до времени стоИт, но малейшее колебание — и всё рушится.
Во-вторых, пользователю должно быть всё понятно.
Человек и компьютер мыслят по-разному, но при этом в этой паре работает и отчитывается — компьютер, а главным остается человек.
С одной стороны, надо дать пользователю много возможностей, но с другой стороны нельзя перенагружать экран кнопками, панельками, менюшками и т.д.
С одной стороны, надо эффективно обращать внимание пользователя на важные вещи, но с другой стороны нельзя создавать у пользователя ощущение беспокойства, беды или принуждения.
Пользователь, как любой реальный человек, проявляет забывчивость, внимательность, вздорность, потребность в надежности, потребность в ясности, переменчивость, нетерпеливость — причем всё одновременно.
Проведем сравнение.
Представьте себе, что вы инструктируете родственника из деревни, когда тот
а) собирается впервые ехать на другой континент;
б) собирается использовать микроволновую печь.
Объяснить человеку, как пользоваться микроволновкой, гораздо проще, чем объяснить, как общаться с людьми незнакомой нации.
Потому что у микроволновки несколько ручек и ровно одно предназначение. А люди — это многомерный мир.
То же самое и в проектировании программ.
Воплотить сложный математический алгоритм довольно трудно.
Но во много раз труднее подготовить программу к взаимодействию с реальными людьми.