Алексей Пажитнов, создатель всем известной игры «Тетрис», в России был недооценен. Зато сейчас он работает в Редмонте, штат Калифорния. И его зарплата сравнима даже с деньгами, которые получает Билл Гейтс. На его счету такие разработки, как «Хатрис» и программное обеспечение для ряда видеоигр.
Да зачем нужны примеры? Разве у вас нет знакомого программиста, которой работает «за бугром» или уже пакует вещички, подписав выгодный контракт?
Компьютерная программа – скучное собрание математических символов? Нет! Это искусство. Как музыка или живопись.
Здесь есть и изящные миниатюры (компьютерные вирусы), и масштабные панорамы (игры и программы, создаваемые коллективами в сотню человек). Виды «кистей» зависят от жанра. Можно пользоваться неуклюжим, но четким машинным языком. А можно крутыми объективно-ориентированными «наречиями» вроде Smalltalk. Как и в искусстве, в программировании есть и дилетанты, и великие мастера. Последних мы и привыкли называть «хакерами».
Особенности мышления программистов:
• Постановка цели, четкий проект.
• Сделать проект максимально просто, не усложняя.
• Сделать свой продукт ценным для клиентов.
• Знание современных языков программирования пришло на смену знаний математики.
• Гибко подстраиваться под запросы клиента.
• Умение работать в команде разработчиков.
• Быть конкурентоспособным на рынке
– Почему ваши дети все время ссорятся?
– Kонфликт версий, – отвечает программист.
Составляющие мышления программистов.
• Высшее техническое образование. Креативное мышление. Профессионализм.
• Исключительное знание языков программирования. Умение свободно в них ориентироваться, находить оригинальные решения. Возможность работать сразу над несколькими задачами.
• Постоянный поиск нового. Все новые программные продукты увлеченные программисты осваивают до тонкостей. «Выжимают» максимум возможностей из новой техники. Коллекционируют всевозможные программные ухищрения и неожиданные решения.
• Фанатичная преданность своему призванию. Способность не спать и не есть ради скорейшего решения задачи. Самая большая радость программиста: удачно написанная программа, даже если автор – не он…
В искусстве программирования совершенство достигается тогда, когда программа, выполняющая свою функцию, занимает всего несколько строк. Когда одна программа делает то, что не может делать другая. Когда программа может манипулировать с файлами такими способами, которые ранее считались невозможными.
Совершенные программы, отдельные приемы программирования, удачные алгоритмы могут быть предметами коллекционирования и почитания.
Ильназ Гильязов, эксперт курса «Профессия веб-разработчик» университета digital-профессий Нетология уверен, что программисту необходимы следующие компетенции:
• Умение сформулировать/понять задачу.
• Умение упрощать.
• Умение декомпозировать, выделять главное, и выстраивать логическую цепочку.
• Умение выделять граничные значения и исключительные ситуации.
Михаил Субботин, преподаватель израильской высшей школы IT и безопасности HackerU считает, что главная задача программиста – понимать, как работает мир, разбивать сложные явления на простые инструкции, а потом собирать их воедино. Программист должен уметь правильно задавать вопросы и находить на них ответы
Сергей Шитиков, технический директор Суточно. ру подчеркивает, что самое важное качество разработчика, как и любого инженера – умение проектировать и прогнозировать возможные сценарии работы, отличные от стандартного. Что произойдет, если ответ от сервера не придет? А если придет, то вдруг он будет некорректный? Или будет идти слишком долго?
Рассуждая, таким образом, и внося соответствующие изменения, разработчик может сделать код более стабильным. К тому же, сравнивая собственные прогнозы с проблемами, которые могут возникнуть при реальном использовании, он получает ценную обратную связь и понимает, какие из его сценариев оказались верными, какие нет, и почему это произошло
Один программист, радостно:
– Я тут с девушкой познакомился, красивая, обалдеть!
Второй, настороженно:
– А ты ее во всех браузерах видел?
Алгоритм мышления программиста.
1. Постановка цели и задач. Держи цель в голове, помни о цели своего проекта, как помочь пользователям оптимально и легко.
2. Уметь декомпозировать цели на задачи. И превращение их в а пошаговые алгоритмы.
3. «Затачивание головы под задачу». Поиск и анализ вариантов решения. Все внимание концентрируется на конкретной цели программы.
4. Контролируй сложность. «Управление сложностью – это сущность компьютерного программирования» – Брайан Керниган. Сложность – источник неудач программного обеспечения.
5. Автоматизируй то, что можешь, чтобы не заниматься рутиной. Не трать своё время на рутину. Настрой и забудь. Повторяющиеся задачи могут выполняться в фоне, пока ты спишь.
6. Отбор вариантов. Поиск наиболее эффективного и выгодного решения.
7. Тестирование программы, повышение качества написанного кода.