О знаниях и умениях программиста

Чулан
Предположим, что, прочитав предыдущий пост "Об информатике вообще", вы взвесили все ЗА и ПРОТИВ и решили стать программистом.

Какие способности в себе имеет смысл развивать и как узнать есть ли у вас призвание к программированию?

Принято считать, что хорошей основой для программирования является математика. Конечно, это верно. Человек должен быть знакомым с аристотелевской логикой и уметь решать математические задачи в три действия.
Но есть и другие требования…


Кстати, здесь уместно сказать, что программисту попадаются задачи не в три, а в 10000 действий. И эти действия необходимо уметь разбить на подзадачи, каждую из которых нужно чётко формально описать, оценить сложность, сформулировать критерии выполнения, поручить исполнение каждой из подзадач группам программистов (или себе самому), проконтролировать ход их выполнения (осуществить самоконтроль) и суметь вовремя внести важные корректировки по ходу выполнения заданий. Как-то так, как-то так … Ещё не раздумали становиться программистом?

Да, задачи программистам достаются сложные. И особенно важно умение программиста уменьшать эту сложность. Удивительно, но факт – два разных IT-специалиста (IT – информационные технологии) могут предложить два разных решения одной и той же задачи, которые в конечном итоге будут отличаться по трудозатратам в десятки раз. Угадать, какой из двух IT-специалистов более правильный, нелегко. В IT-индустрии основные риски по-прежнему связаны с набором персонала. Успешность проекта зависит от того, какая технология будет положена в основу, и какие люди будут закладывать базовую архитектуру продукта. Последнее наиболее важно. Выбор языка программирования и технологии обычно делается правильным. Так получается, что после формулировки задачи, элементарного анализа технологий и учёта имеющихся средств остается два-три варианта для выбора, и каждый из них может привести к успеху, если команда программистов в целом грамотная.

Непредсказуемость программиста (команды программистов) – это одна проблема. Она решается просто – нужно просто давать пробный строк. Но есть и другая проблема – неисправимый оптимизм программистов. Они действительно преуспевают в деле упрощения сложных задач, умеют находить архитектурные решения, которые сводят неподъемную с виду задачу к вполне осуществимой. Но они почти всегда переоценивают свои способности и верят, что всё будет хорошо, пока “несовершенная материя” в очередной раз не поставит их на место. Если вы станете программистом, который будет ошибаться в сроках выполнения задачи менее чем в два раза – вам цены не будет.

Итак, программисту нужны базовые математические знания, умение упрощать задачи (системный подход к решению задач) и умение адекватно оценивать сложность задачи.

Но, несмотря на очевидную необходимость математических знаний и способностей, не хотелось бы утверждать, что программистам нужно классическое математическое образование. Эта должна быть особенная математическая программа, в которой не так много непрерывного анализа, но много дискретной математики и логики. При этом значительную часть времени при подготовке программистов следует уделять способности ясного изложения мыслей. Регулярный тренинг должен быть таким: изучение текстов, их аннотирование, выделение главной мысли, оценка полезности, интересности и перспективности. Если говорить грубо, то программистов нужно делать из математиков, подготавливая их по программам лингвистических специальностей, либо из лингвистов – по программам компьютерных специальностей (это идея Непейводы Н.Н.).

Если провести анализ видов деятельности типичного IT-специалиста или программиста, то окажется, что это вовсе не работа с математическими абстракциями, а анализ технических текстов, аннотирование, выражение мыслей и концепций максимально кратко и чётко.

Более того, можно сказать, что будни программиста проходят в превращении мыслей в формальный язык. Эту работу естественно сравнить с работой переводчика – необходимо перевести технический текст на родном языке на язык программирования. Человек, неспособный чётко излагать свои мысли не сможет писать и логически целостные работающие программы. Программы должны быть хорошо структурированы и легко читаться. Сегодня это является одним из важнейших критериев качества программиста. Это связанно с тем, что программные системы усложняются, над ними работает большой коллектив и важно, чтобы члены команды читали и понимали код, написанный другими, и сами писали легко читаемый код. Важно не только умение складывать правильные красивые длинные предложения, но и талант гармоничного построения изложения, разбиения на части и расположения этих частей.

Языки программирования – не единственная область, где программист сталкивается с языками. Формальные языки используются для описания данных, протоколов, архитектур и процессов. Профессионального программиста можно сравнить с полиглотом, который уже знает достаточно много языков, каждый из которых увеличивает его способность кратко, точно и красиво выражать мысли. Изучение или разработка нового языка является типичной задачей программиста.
Теги:программированиеинформатикаобразование
Хабы: Чулан
+8
392 9
Комментарии 21

Похожие публикации

Лучшие публикации за сутки