Специалист по информатике часто сталкивается с большой проблемой, которая в основном носит абстрактный характер.Однако компьютеры принимают только небольшие инструкции: сложите эти числа, вычтите эти числа.Компьютеры еще не достигли точки, когда мы можем просто сказать: «Компьютер, решите эту проблему».- мы должны сформулировать проблему как серию небольших инструкций, понятных компьютеру.
Сравните это с поваром на кухне.Если он пишет кулинарную книгу, он не может просто сказать «John's Special Chili» - он должен записать, какие ингредиенты используются, какие процедуры используются для приготовления или приготовления различных ингредиентов, какие количества использовать и т. Д.
Аналогично, специалист по информатике должен взять абстрактную проблему и разбить ее на инструкции, которые машина может использовать для получения правильного результата, учитывая ввод проблемы.Этот акт разбивания более крупной проблемы, часто сводящейся к более мелким задачам, прежде чем, наконец, прийти к коду, является фундаментальным навыком для любого программиста и, возможно, самым трудным навыком для обучения, поскольку он опирается на способности человека решать задачи *.1005 *
Алгоритмы, по сути, являются результатом решения проблемы: алгоритм, как определено в Викисловарь, - это «Точный пошаговый план для вычислительной процедуры, которая начинается с входного значения и дает выходное значение вконечное число шагов. "Это метод, с помощью которого вы переходите от входа к выходу, и это обычно то, что программисты должны выяснить.Конечно, некоторые проблемы уже решены: сортировка, являющаяся примером, обычно предоставляемым начинающим ученикам, имеет известный алгоритм: обычно вы просто реализуете это на определенном языке.
Как только основы пройдены, частопроблема уникальна.Затем программист должен разработать алгоритм.Обычный совет - «разбить проблему на более мелкие, более простые для решения подзадач» - часто две (или более) меньшие проблемы эквивалентны вашей более крупной проблеме.Если мы хотим решить проблему «перевернуть файл изображения вверх ногами», я могу разбить его на:
- Загрузить изображение
- Перевернуть ряды пикселей на изображении
- Запишите получившееся изображение обратно в файл
Каждый из них все еще очень абстрактен, и его нужно будет еще конкретизировать, но идея та же: продолжайте разбивать его на частиДо тех пор, пока идея не станет достаточно простой для перевода в код.В зависимости от того, какой язык вы используете, человеческая форма проблемы будет переводиться по-разному.Я бы не писал тот же код на C или C ++, как на Python или Java, и т. Д.
(PS: вопрос сложный для понимания, поэтому, если он не отвечает на ваши вопросы)или, если что-то неясно, пожалуйста, прокомментируйте как таковой.)