![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Нет такой специальности "программист". А если и есть, то не одна а две.
На самом деле эта заметка является запоздалым ответом
nepejvoda_n_n - на его статью, адресованную
победителям олимпиад по программированию, которую я раскритиковал, но недостаточно
детально.
А также - мысли, касаюжиеся не только программироавания, но и многих других творческих
не-гуманитарных "созидательных профессий" - которые мне давно хотелось попробовать изложить.
На самом деле подобные профессии могут различаться по трем признакам:
1. Что дано - постановка задачи.
2. Что требуется получить в качестве результата.
3. Как выполняется работа (метод, инструменты).
1 и 3 на самом деле не слишком заметны со стороны (1 вообще может быть хорошо скрыто, 3 -
трудно определимо по крайней мере, пока работа далека еще от завершения). Поэтому мы, наблюдая
со стороны обычно судим о работе и профессии по 2. Если, скажем, видим человека с лопатой -
это землекоп (что часто недалеко от истины). Если со стетоскопом - врач. И.т.д.
Для меня ярким было детское впечетление - я еще учился в школе и уже увлекся программированием.
А программы писали тогда на "бланках" - напечатанных разлинованных листых бумаги, похожих на бухгалтерские
учетные или денежные ведомости - которые использовальсь повсюду в то, еще в основном, докомпьютерное
время. И вот - я еду в метро и пишу какую-то программу (или "кодирую" - то есть делаю то, что сейчас
задача компайлеров, то-есть заполняю столбцы числами в восьмеричной системе. И соседние старушки
обсуждают: какой прилежный ученик, да еще так увлеченный своей бухгалтерией...
Сейчас, когда инструментом для писания программ стали сами компьютеры стало еще запутаннее (со стороны) -
так много разных совершенно деятельностей состоит в сидении рядом с компьютером и нажиманием на
клавиши. И без рассмотрения 1 и 3 не обойтись. В том числе, даже, если работа состоит в создании програм
на каком-нибуть алгоритмическом языке, это могут быть две разные работы, в зависимости от цели/результата.
Еще один пример из другой области. Представим себе деятельность состоящую в строительстве, скажем, мостов.
Вроде одна профессия - ан нет! По крайней мере две:
1. Военный (кажется это называется сапер, хотя я не уверен) - специалист по переправам. Его результат - обеспечить
переход войск через реку.
2. Инженер по стоительству мостов. Его задача - построить удобный и красивый мост, который будет долго служить.
И надежный. И дешевый. Часто - существенно, чтобы проект можно было и использовать для многих будущих
мостов.
Цели - в значительной степени разные. И методы разные, хотя может оказаться, что лопата (это же упрощенный пример)
и там и там уместна.
Вот я и подошел к программированию - здесь профессии тоже две:
1 - Использование компьтеров (включающее создание програм) для решения задач. Скажем, найти 100000....-ю цифру
десятичного разложения числа пи. Или посчитать какой-нибудь интеграл (последним я зарабатывал 52 рубля 50 копеек
в месяц во время учебы в пединституте - считал интегралы для физиков из того-же института занимающихся
какими-то исследованиями).
2 - Создание программного обеспечения для массового использования. Например компайлера, операционной системы или
библиотеки стандартных (так это в те времена называли) программ.
1 - Исследователь, использующий компьютеры и пишущий программы. До какой-то степени в современном мире масса
прикладных специалистов попадает в эту группу.
2 - Инженер-программист создающий прграммное обеспечение (software).
Абсолютно четкой границы между 1 и 2 иногда нет. Но крайние случаи (то есть наиболее трудные, продвинутые) сильно отличаются.
№1 - в пределе - решение очень трудных задач из какой-то области. Компьютер и программа - только подсобные средства; часто
после завершения они не нужны. Сравнивая с мостами - красота и надежность не нужны - лишь бы полк переправился на другой
берег. Цена строительных материалов также часто не важна - она мала по сравнению с другими затратами.
Идеальный специалист представляется мне как способный математик, натренированный на головоломных задачах, и, конечно,
разбирающийся в проблемной области.
№2 - в пределе - создание программ и подходов к программированию, которые экономны, предназначены для массового применения.
Легко приспасабливаемые для слегка других задач. Легко отлаживаемые и понятные другим. Использующие ограниченные ресурсы, как
при разработке, так и при использовании.
Идеальный специалист совершенно не обязан быть гением умеющим решать очень трудные головоломкь. Но - это должен быть
инженер, хорошо разбирающийся в инструментах и строительных метериалах. А, главное, умеющий упрощать конструкции, разбивая их
на уровни и модули и отсекая лишние сущности и связи.
На моем опыте люди умеющие хорошо делать и то и другое встречаются не часто (и по моему мнению они представляют особенную
ценность). Большинство программистов тяготеют к №1 - и успех здесь в основном определяется способностями, любопытством и
трудолюбием.
№2 - здесь, скажем, способности типа решения олимпиадных задач не так уж важны. А "инженерное" мастерство обычно требует
обучения и опыта. И с обучением - проблемы, потому что учителя - часто академического тима и либо вообще склоняются к №1,
либо имеют ограниченный опыт.
№1 и №2 - это, ка я себе представляю, ученые и инженеры-конструкторы; подобное разделение, я думаю, существует
и в большинстве других научно-технических областай.
В серьезных проектах нужны и те и другие. Когда созданием software занимаются специалист №1, программы получаются
часто не надежные, не универсальные, дорогие и недолго живущие.
В противоположном случае, специалист №2 может создать паровоз, когда надо бы давно уже использовать фотонный
двигатель...
И, я бы сказал, подготовка специалистов типа 1 и 2 нужда разная - скажем, так же как классическая подготовка физиков
исследователей и инженеров.
Вот пожалуй и все - не знаю, насколько внятно мне удалось это изложить (первая попытка). Вероятно определения
этих двух подходов: научно-исследовательского и инженерно-конструкторского нуждаются в большей строгости.
Но, надеюсь, что все же основную идею я изложил понятно.
На самом деле эта заметка является запоздалым ответом
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
победителям олимпиад по программированию, которую я раскритиковал, но недостаточно
детально.
А также - мысли, касаюжиеся не только программироавания, но и многих других творческих
не-гуманитарных "созидательных профессий" - которые мне давно хотелось попробовать изложить.
На самом деле подобные профессии могут различаться по трем признакам:
1. Что дано - постановка задачи.
2. Что требуется получить в качестве результата.
3. Как выполняется работа (метод, инструменты).
1 и 3 на самом деле не слишком заметны со стороны (1 вообще может быть хорошо скрыто, 3 -
трудно определимо по крайней мере, пока работа далека еще от завершения). Поэтому мы, наблюдая
со стороны обычно судим о работе и профессии по 2. Если, скажем, видим человека с лопатой -
это землекоп (что часто недалеко от истины). Если со стетоскопом - врач. И.т.д.
Для меня ярким было детское впечетление - я еще учился в школе и уже увлекся программированием.
А программы писали тогда на "бланках" - напечатанных разлинованных листых бумаги, похожих на бухгалтерские
учетные или денежные ведомости - которые использовальсь повсюду в то, еще в основном, докомпьютерное
время. И вот - я еду в метро и пишу какую-то программу (или "кодирую" - то есть делаю то, что сейчас
задача компайлеров, то-есть заполняю столбцы числами в восьмеричной системе. И соседние старушки
обсуждают: какой прилежный ученик, да еще так увлеченный своей бухгалтерией...
Сейчас, когда инструментом для писания программ стали сами компьютеры стало еще запутаннее (со стороны) -
так много разных совершенно деятельностей состоит в сидении рядом с компьютером и нажиманием на
клавиши. И без рассмотрения 1 и 3 не обойтись. В том числе, даже, если работа состоит в создании програм
на каком-нибуть алгоритмическом языке, это могут быть две разные работы, в зависимости от цели/результата.
Еще один пример из другой области. Представим себе деятельность состоящую в строительстве, скажем, мостов.
Вроде одна профессия - ан нет! По крайней мере две:
1. Военный (кажется это называется сапер, хотя я не уверен) - специалист по переправам. Его результат - обеспечить
переход войск через реку.
2. Инженер по стоительству мостов. Его задача - построить удобный и красивый мост, который будет долго служить.
И надежный. И дешевый. Часто - существенно, чтобы проект можно было и использовать для многих будущих
мостов.
Цели - в значительной степени разные. И методы разные, хотя может оказаться, что лопата (это же упрощенный пример)
и там и там уместна.
Вот я и подошел к программированию - здесь профессии тоже две:
1 - Использование компьтеров (включающее создание програм) для решения задач. Скажем, найти 100000....-ю цифру
десятичного разложения числа пи. Или посчитать какой-нибудь интеграл (последним я зарабатывал 52 рубля 50 копеек
в месяц во время учебы в пединституте - считал интегралы для физиков из того-же института занимающихся
какими-то исследованиями).
2 - Создание программного обеспечения для массового использования. Например компайлера, операционной системы или
библиотеки стандартных (так это в те времена называли) программ.
1 - Исследователь, использующий компьютеры и пишущий программы. До какой-то степени в современном мире масса
прикладных специалистов попадает в эту группу.
2 - Инженер-программист создающий прграммное обеспечение (software).
Абсолютно четкой границы между 1 и 2 иногда нет. Но крайние случаи (то есть наиболее трудные, продвинутые) сильно отличаются.
№1 - в пределе - решение очень трудных задач из какой-то области. Компьютер и программа - только подсобные средства; часто
после завершения они не нужны. Сравнивая с мостами - красота и надежность не нужны - лишь бы полк переправился на другой
берег. Цена строительных материалов также часто не важна - она мала по сравнению с другими затратами.
Идеальный специалист представляется мне как способный математик, натренированный на головоломных задачах, и, конечно,
разбирающийся в проблемной области.
№2 - в пределе - создание программ и подходов к программированию, которые экономны, предназначены для массового применения.
Легко приспасабливаемые для слегка других задач. Легко отлаживаемые и понятные другим. Использующие ограниченные ресурсы, как
при разработке, так и при использовании.
Идеальный специалист совершенно не обязан быть гением умеющим решать очень трудные головоломкь. Но - это должен быть
инженер, хорошо разбирающийся в инструментах и строительных метериалах. А, главное, умеющий упрощать конструкции, разбивая их
на уровни и модули и отсекая лишние сущности и связи.
На моем опыте люди умеющие хорошо делать и то и другое встречаются не часто (и по моему мнению они представляют особенную
ценность). Большинство программистов тяготеют к №1 - и успех здесь в основном определяется способностями, любопытством и
трудолюбием.
№2 - здесь, скажем, способности типа решения олимпиадных задач не так уж важны. А "инженерное" мастерство обычно требует
обучения и опыта. И с обучением - проблемы, потому что учителя - часто академического тима и либо вообще склоняются к №1,
либо имеют ограниченный опыт.
№1 и №2 - это, ка я себе представляю, ученые и инженеры-конструкторы; подобное разделение, я думаю, существует
и в большинстве других научно-технических областай.
В серьезных проектах нужны и те и другие. Когда созданием software занимаются специалист №1, программы получаются
часто не надежные, не универсальные, дорогие и недолго живущие.
В противоположном случае, специалист №2 может создать паровоз, когда надо бы давно уже использовать фотонный
двигатель...
И, я бы сказал, подготовка специалистов типа 1 и 2 нужда разная - скажем, так же как классическая подготовка физиков
исследователей и инженеров.
Вот пожалуй и все - не знаю, насколько внятно мне удалось это изложить (первая попытка). Вероятно определения
этих двух подходов: научно-исследовательского и инженерно-конструкторского нуждаются в большей строгости.
Но, надеюсь, что все же основную идею я изложил понятно.