На написание этой статьи меня натолкнуло общение с моими студентами. Попутно с изучением языка программирования PHP мы разбирали установку виртуальных машин. Данная концепция здорово перевернула мировоззрение многих из них. Кто-то, столкнувшись с проблемами при установке, стал писать мне письма о том, что тот или иной функционал не работает после N часов мучений. И я бы хотел поделиться с Вами мыслями о том, что же можно сделать, когда задача никак не решается.
Если Вы работаете с приложениями сложнее «Hello, World», то наверняка уже сталкивались с проблемой, о которой пойдёт речь. Вы хотите получить некую функциональность, которая будет удовлетворять Ваши требования. Вы выполнили определённый набор шагов, но в результате что-то/всё/вообще всё не работает. Вы начинаете разбираться, уходите вглубь выдачи Google, обнаруживая себя через продолжительное время в состоянии эмоционального истощения и кофеиновой зависимости. Но решения так и нет.
Любопытный факт состоит в том, что с такой проблемой сталкиваются не только новички, но и довольно матёрые профессионалы. И те, и другие лишь решают проблемы разного уровня, но приходят к некоему тупику в своих технологических работах. Но профессионалы не были бы профессионалами, если бы не умели искать выход из ситуации. И первое, что нужно запомнить в случае столкновения с подобным «непреодолимым» препятствием, это простая истина — нерешаемых задач не существует. Существуют сложные решения.
Самая первая ошибка, свойственная новичкам при столкновении с проблемой «нерешаемой задачи», это метания между решениями. То есть человек, потративший несколько часов на реализацию зачастую изначально правильного способа решения, вдруг начинает думать, что он идёт по ложному пути, и решает удалить всё и начать заново. Он находит другое решение и пытается применить его. Но в этот момент его эмоциональное состояние истощено, и он очень часто сдаётся даже раньше, чем в первом подходе. Затем ищет новые пути решения ещё и ещё, увязая в этой ловушке всё глубже.
0 Шаг. Остановиться и выпить кофе
Зачастую я вижу, что человек, попавший в петлю поиска, описанную выше, выбивается из сил и заканчивает поиск с эмоциональным: «Всё! Ничего не работает! Я уже всё перепробовал». В этот момент уже чётко ясно, что стоит переосмыслить свои действия. Человек в подобном состоянии похож на игрока в казино. Он уже проиграл много денег, но до последнего хочет отыграться. Как и везде, в данной ситуации нужно вовремя остановиться.
Как бы банально это ни звучало, но просто отойдите от компьютера, прогуляйтесь, отвлекитесь от проблемы. Не будет ничего страшного, если в течение ближайшего часа Вы просто пройдётесь в парке или посмотрите YouTube. Конечно, не злоупотребляйте этим советом, но в тупике очень важный шаг — перезагрузка, очистка сознания.
После того как поймёте, что Вы больше не думаете о проблеме, можете возвращаться к решению.
1 Шаг. Где я?
Перед тем, как приступать к решению, Вы должны чётко сформировать для себя ответы на следующие простые вопросы:
- Чего я хочу добиться?
- Что у меня есть сейчас?
- Что я сделал?
Этим шагом Вы начинаете освещать себе путь, понимая, в какой точке находитесь. Решая такую петлю Вы как будто копаете глубокую (выше Вашего роста) траншею. В определённый момент Вы сбиваетесь и начинаете копать куда-то не туда. И в данном шаге Вы занимаетесь тем, что вылезаете из траншеи, забираетесь на стоящее рядом дерево и пытаетесь посмотреть, как идёт работа и куда она движется. Для того, чтобы решить проблему, надо подняться над ней, понять её статус.
Если Вы ответили на вышеобозначенные вопросы и примерно понимаете свой статус в данный момент, можете переходить ко второму шагу.
2 Шаг. Понять причину
Очень часто петля проблемы заключается в том, что человек, который пытается её решить, применяет найденные решения бездумно, простым копированием. В мире IT это пагубный путь, ведущий в самые ужасные дебри спагетти-кода. Каждый шаг, который Вы делаете, должен быть осмысленным, либо стремиться к этому. Понятно, что Вам не нужно знать тонкостей механизмов виртуализации, чтобы работать с виртуальными машинами на стандартном уровне. Однако, Вы должны понимать, например,что виртуальная машина как-то должна общаться с машиной, на которой она работает. Вы всегда должны отдавать себе отчёт в том, что делаете. В момент, когда Вы просто копируете решение, Вы снова сворачиваете на тупиковый путь.
Если Вы нашли в Internet какой-либо мануал по установке того или иного решения, попытайтесь понять, что же Вы делаете на каждом шаге. Возмьём, к примеру, установку СуБД Percona Server. В его документации значатся несколько шагов
- yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
- yum list | grep percona
- yum install Percona-Server-server-57
Каждый из них несёт смысловую нагрузку. Попытайтесь понять, почему в первом шаге устанавливается rpm-пакет? Почему в третьем шаге в конце стоит именно цифра 57? И так далее. Понимание своих действий — ключ к решению любой проблемы. Вы должны понимать то, что делаете. Иначе Вы не сможете понять, где же оказались по результатам.
3 Шаг. Выработка решения
Этот шаг является логическим продолжением второго шага. Как только Вы осознали, где Вы находитесь, Вы сразу же загораетесь желанием действовать. Но не спешите. Как мы уже выяснили, без понимания действий далеко не уедешь. Вы должны чётко сформировать шаги решения, которое будете применять. Если Вы работаете с мануалом (руководством по установке и настройке), то этот шаг создатели решения уже сделали за Вас.
В таком случае Вам необходимо понять, что же Вы делаете на каждом из шагов, т.е. выполнить шаг 2 ещё раз, что никогда не будет лишним.
4 Шаг. Не надейтесь, что он Вам не пригодится
Может случиться так, что выбранное Вами решение на одном из шагов окажется неприменимым. И если Вы это поняли, то я написал эту статью не зря 🙂 В этом случае Вам нужно для начала не попасть в тупиковую ситуацию, которой мы пытаемся избежать. Не давайте волю эмоциям, сохраняйте спокойствие. Вам нужно выполнить шаги 0-2. И тогда Вы поймёте важную вещь, без которой в прошлый раз могли уйти в тупик. Вы осознаете, что же Вы делали не так. И это поможет Вам понять два момента. Во-первых, Вы выработаете более правильное решение в будущем. А во-вторых, что ещё более важно, Вы получите опыт, который при решении подобных задач позволит Вам выбирать пути решения быстрее и качественнее.
Никогда не тешьте себя иллюзией, что задача решится просто и с первого раза. Всегда будут возникать непредвиденные обстоятельства. Ограничения сети, малый объем ресурсов, сроки других задач, версии ПО — всё это и многое другое всегда будет сопутствовать любому IT-специалисту. Как известно, дьявол кроется в деталях.
Поэтому никогда не сдавайтесь, если понимаете, что зашли в тупик. Выработанный в процессе работы опыт в будущем пригодится Вам. А найденное решение принесёт ещё больше удовлетворения, когда Вы наконец решите сложную задачу и выйдете на новый уровень.
Надеюсь, моя статья была для Вас полезна. Не стесняйтесь писать мне о темах, которые Вы хотели бы обсудить!