?

Log in

No account? Create an account

Об обучении программированию [1]

« previous entry | next entry »
Jan. 13th, 2008 | 09:18 pm

Эта запись чрезвычайно интересна как сама по себе, так и комментариями. Но есть
моменты, которые меня не устраивают: модальность и концентрация на одном
факторе.


> программисты очень резко делятся на хороших и плохих - и
пропасть между ними огромна.


Во-первых... да, у меня нет опыта работы в коллективе программистов
численностью хотя бы в сто человек. А уж тем более в десять тысяч. Но
"огромную пропасть" я всё-таки не видел. Может, это таки действительно
недостаток моего опыта, заранее согласен.

Во-вторых. Я не верю в чёткие разделения, возникающие природно. Ну не
делает так эволюция: даже половой дихотомизм имеет массу промежуточных
граней во всех аспектах и реализациях. А тем более - психологические
особенности. Чёткие психотипы (неважно, по каким осям деления) крайне
редки, практически все реальные случаи - смешанные. Значит, деление
возникает уже из-за неприродных причин. (Даже если это не так - это
хорошая рабочая гипотеза для того, чтобы попытаться от неё построить
теорию.) В первую очередь - неадекватное обучение. И потому, что никто
не ставил себе задачу обучать на программиста заранее; и потому, что,
вероятно, готовить к такому типу работы нужно значительно раньше, чем
это делается сейчас (в вузе, в крайнем случае в последних классах
школы). Качественное отличие _занятия_ программирования от большинства
прежних занятий людей достаточно очевидно, и вот это - то разделение,
которое и способно породить пропасть.

Чтобы это решить, попробуем поставить два вопроса:

- Есть ли среди ранее известных занятий аналоги программирования?
- Что требуется от человека, чтобы успешно ими заниматься?

Заранее скажу: я на второе ответа не вижу. Первое - называлось много
вариантов: например, строительство (и легендарный дятел опять долбит в
стену). Но это всё не то. "То" - конструирование. Причём значительно
ближе к экспериментальному, чем к серийному (хотя embedded, например,
ближе к серийному): цена копирования готовой программы ничтожно низка,
поэтому ограничения конструирования серийных изделий не имеют аналога.

Вспомним знаменитую цитату из Ершова:

"Программист должен обладать способностью первоклассного математика к
абстракции и логическому мышлению в сочетании с эдисоновским талантом
сооружать всё, что угодно, из нуля и единицы. Он должен сочетать
аккуратность бухгалтера с проницательностью разведчика, фантазию автора
детективных романов с трезвой практичностью экономиста." (Спасибо viskubovae за цитату.)

Про абстракцию scholar_vit рассказал, повторяться здесь не будем.
Аккуратность, проницательность, фантазия, практичность - это так или
иначе присутствует в любой профессии. А вот "сооружать всё, что угодно,
из нуля и единицы" - это и есть конструирование.

Но конструирование - если не считать инженеров советских НИИ,
протиравших штаны и решавших кроссворды - весьма редкое занятие. И
разница между конструктором низшего ранга, который решает заданные
начальством задачи уровня "подсчитать форму зубца шестерёнки", и автором
самолёта - в разы больше, чем между участковым "горло красное -
полоскать, это болит не понимаю где - вызывайте неотложку" и Грегом
Хаузом. Хотя сравнима с разницей между санитаром и опять же Хаузом.

Итак, что может влиять? Один фактор описан у scholar_vit: это умение
правильно абстрагироваться. Я уверен, что оно не абсолютное. И что те же
задачи на "Все кошки зелёные", если будут поставлены в правильный
контекст, могут быть решены любым ребёнком и взрослым. Для ребёнка это
будет игра: например, создание вымышленного царства, где все кошки
зелёные, и другого царства, где все кошки красные. Кому-то хватит
собственного воображения, кому-то нужен спектакль с детьми в костюмах
цветных кошек, а кто-то прочитает дилогию про Алису. Для взрослого -
не буду гадать, но хорошим предварительным критерием может быть
склонность к фантастике - где не столько необычные или острые ситуации в
известном мире, сколько неизвестный мир.

Но это фактор не единственный (хотя и, вероятно, самый главный).

Продолжение следует. Но решил разбить на несколько постингов... надеюсь, что хватит духу.


Тем временем в ленте увидел ещё обсуждение, у sergeyr (детально ещё не прочитал).

UPD:
часть 2

Link | Leave a comment |

Comments {20}

(no subject)

from: ospf_ripe
date: Jan. 13th, 2008 07:42 pm (UTC)
Link

резкой границы между хорошими и плохими программистами я тоже не наблюдаю, но то что продуктивность хороших и плохих программистов отличается раз в 10 это встречается не редко. Пропасть действительно огромна только она не пустая - есть и среднячки, но они не так заметны, может их действительно мало.

Reply | Thread

Всеволод Соловьёв

(no subject)

from: murkt
date: Jan. 13th, 2008 09:59 pm (UTC)
Link

Пропасть действительно огромна только она не пустая
То же самое хотел сказать.

Reply | Parent | Thread

Дон Карлос

(no subject)

from: kastaneda
date: Jan. 13th, 2008 08:49 pm (UTC)
Link

Есть там пропасть, есть :) Деление очень чёткое и без полутонов. Особенность в том, что плохие программисты (в том смысле, как в статье) довольно редко работают программистами. Плохим программистам доводится писать программы только в ВУЗах, после чего они держатся от программирования (не от всего IT) подальше. Поэтому сравнивая эникейщика и гуру, мы сравниваем внутри подгруппы хороших программистов.

Reply | Thread

netch

(no subject)

from: netch
date: Jan. 13th, 2008 08:55 pm (UTC)
Link

1. Тогда - получается, что разница моей обстановки и обстановки scholar_vit'а - в том, что у него достаточно много тех плохих программистов, которые таки как-то заканчивают и идут работать по этой неподходящей им специальности?

2. А как _ты_ обосновываешь причину чёткого деления?

Reply | Parent | Thread

Дон Карлос

(no subject)

from: kastaneda
date: Jan. 13th, 2008 09:54 pm (UTC)
Link

Тут уж надо самого scholar_vit'а спрашивать. Кроме того, для начала стоит определиться с терминологией. Я вот вижу много плохих программистов среди тестеров, дизайнеров, админов, верстальщиков, железячников и — о ужас — среди кодеров. Фигня в том, что кодер — это не всегда программист, это часто «оператор IDE с компилятором». Да и не станет программист долго работать «быдлокодером», ему захочется развиваться дальше.

Причину чёткого деления «программист/не программист» я не знаю. Знаю симптом — искренний интерес, блеск в глазах и шило в заднице. Никогда не слышал, чтобы кто-то стал программистом из-за внешнего влияния — у всех это «пёрло» изнутри.

Reply | Parent | Thread

netch

(no subject)

from: netch
date: Jan. 13th, 2008 10:35 pm (UTC)
Link

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

Reply | Parent | Thread

Дон Карлос

(no subject)

from: kastaneda
date: Jan. 13th, 2008 10:46 pm (UTC)
Link

Увы, так. Но после ухода интереса остаётся опыт. Профессионал от любителя тем и отличается, что будет работать не только над тем, что интересно. Крутой профи «с девяти до шести» в солидной конторе над большим проектом может работать почти так же хорошо, как программист в стартапе (здесь под словом «почти» я говорю не о строках кода и не о гениальности решений, а о том, что в конце концов проект должен быть сдан в эксплуатацию).

Reply | Parent | Thread

Денис

(no subject)

from: mithraen
date: Jan. 14th, 2008 08:39 am (UTC)
Link

Программист не сможет стать хорошим программистом если у него нет этого блеска в глазах.
Связано это с тем, что нет до сих пор ни одной готовой учебной программы "как из чайника сделать программиста". Даже ВУЗы не готовят программистов -- они готовят людей с обширным набором знаний, который позволяет им легче самим стать программистами.

Хороший программист это всегда самоучка. А самоучка без блеска в глазах никогда не сможет хорошо научиться.

Reply | Parent | Thread

Furry

(no subject)

from: furry
date: Jan. 30th, 2008 10:04 am (UTC)
Link

А это ж с любой деятельностью так - по крайней мере у определенного типа людей (вот у меня, например). Т.е. для того, чтобы было по-другому нужна или железная сила воли, или поразительная покорность судьбе..

Reply | Parent | Thread

Cepгe[й]р

(no subject)

from: sergeyr
date: Jan. 14th, 2008 07:22 am (UTC)
Link

> Никогда не слышал, чтобы кто-то стал программистом из-за внешнего влияния — у всех это «пёрло» изнутри.

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

Reply | Parent | Thread

Одинокий странник

(no subject)

from: lstranger
date: Jan. 14th, 2008 03:49 pm (UTC)
Link

А я думаю, что ноги у подобного деления растут оттуда же, откуда растут ноги у различия между мастером и профессионалом - для первого существенно "что", для второго - "как", и между этими признаками непреодолимая пропасть, потому одни походя сколачивают состояния (нередко для других, ага), а другие вкалывают, чтобы потом потратить "заработанное потом и кровью" на "отдых". Примерно так.

Reply | Parent | Thread

Есть там пропасть, есть :)

from: http://getopenid.com/vn_popov
date: Jan. 15th, 2008 11:43 am (UTC)
Link

Есть. Изначально (в момент времени 0) разница ничтожна, но фокус в том, что однажды оказавшись по "ту" сторону пропасти, идущий уже не останавливается. Поскольку его постоянно подгоняет его же естество. Так возникает пропасть.

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

Различия внутри подгруппы хороших программистов могут быть очень большими. Но у меня не повернётся назвать плохим программистом сисадмина, который однострочным перлом решает задачу (хоть сам он себя программистом уже не считает). Зато иначе как дрянными программистами не назову авторов приложения с 0.5 миллионом строк кода, если сама идея приложения - дрянь.

Reply | Parent | Thread

(no subject)

from: squadette
date: Jan. 13th, 2008 09:05 pm (UTC)
Link

у меня подозрение, что исходная посылка -- просто перевранная классическая фраза про разницу в производительности

Reply | Thread

Egor Egorov

(no subject)

from: egorfine
date: Jan. 13th, 2008 10:35 pm (UTC)
Link

Системное мышление. Раз, два.

Reply | Thread

netch

(no subject)

from: netch
date: Jan. 13th, 2008 10:46 pm (UTC)
Link

Ты знаешь... ответ ormuz'а, конечно, грубоват, но он хорошо показывает, что системное мышление так или иначе нужно всем. Особенно, если расширить толкование - от продавца до выдающегося игрока на бирже или коммерческого директора, от бухгалтера - до выдающегося финансиста, и так далее. Ну и для политика - тем более. В общем, я твою первую подачу однозначно отказываюсь принимать: она возникает только из-за неадекватности терминов (в постинге я это уже говорил - когда и участковая тётя Маша с почерком, который она сама не понимает, и спец мирового значения называются одним и тем же словом "врач").

А вот второй пример - да, достаточно показателен. Но у тебя обе модальности описаны как неадекватные. Что откровенно настораживает. И чем могла бы помешать локальная модальность кодеру, которому _здесь_ и _сейчас_ надо нарисовать цикл прохода по списку с поиском элемента по сложному критерию?

Reply | Parent | Thread

Дон Карлос

(no subject)

from: kastaneda
date: Jan. 13th, 2008 10:57 pm (UTC)
Link

системное мышление так или иначе нужно всем

Как и доброе здоровье, крепкая память и многое другое — не помешает. Есть крайне мало обязательных требований: дальтоник не может быть водителем, а хорошая ориентация в 3D необходима спелеологу. Ну на кой чёрт розничному торговцу системное мышление? Гораздо важнее личное обояние, вежливость и внимательность к деталям.

Reply | Parent | Thread

netch

(no subject)

from: netch
date: Jan. 14th, 2008 07:33 am (UTC)
Link

> на кой чёрт розничному торговцу системное мышление?

На кой чёрт быдлокодеру системное мышление?
На кой чёрт санитару в морге системное мышление?
На кой чёрт Машке из бухгалтерии системное мышление?

Ответ на все - для того, чтобы расти выше.

> Гораздо важнее личное обояние, вежливость и внимательность к деталям.

А это важно для его занятия на любом уровне.

Reply | Parent | Thread

Денис

(no subject)

from: mithraen
date: Jan. 14th, 2008 08:37 am (UTC)
Link

Системное программирование ближе всего к математике.
А вот прикладное -- к физике.

Есть какая-то задача из реального мира, и её надо описать математически. За пределами мира программирования этому действительно грамотно учат школьников/студентов только когда обучают физике.

А системное мышление оно, конечно, везде нужно. Только программирование одно из немногих областей где можно сразу -- по коду увидеть насколько оно у человека развито. Во многом это связано с замкнутостью мира программирования -- как поведет себя программа при необходимости можно однозначно специфицировать.

Когда врач лечит, например, другой даже самый гениальный врач не сможет с точностью 100% определить правильно ли это лечение. Всегда остается какой-то шанс на ошибку. В программировании этого шанса нет. Программа либо написана правильно, либо нет. Если нет (а чаще всего действительно нет) возможно при желании четко доказать наличие и место ошибки. Другое дело что это часто задача более сложная чем написание аналогичной программы.

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

Хороший игрок на бирже -- это математика + экономика + политика + психология. При этом можно выехать на одной математике (но тогда нельзя стать выдающимся). А вот на одной экономике -- опаньки, далеко не уедешь.

А по поводу программиста... дык многим до сих пор непонятно чем Дональд Кнут отличается от PHP-кодера ценой 500$ за штуку. Причем многим людям которые зарабатывают на программировании (то бишь профессиональным программистам) это совершенно непонятно. Вернее понятно что первый не зарабатывает денег на PHP-программировании, вот и вся разница для них.

Reply | Parent | Thread

Cepгe[й]р

(no subject)

from: sergeyr
date: Jan. 14th, 2008 07:30 am (UTC)
Link

Там некоторая лингвистическая путаница. Большинство комментаторов говорит о барьере, явно подразумевая описанное в статье двугорбое распределение - которое вполне может объясняться соверненно природными, эволюционными по происхождению, факторами. Может какое-то пороговое значение склонности к абстрагированию, без коего математические абстракции познаются нормально (в конце концов, они начинают познаваться ребёнком приобучении счёту), а вот машинная логика - к огромным скрипом. А может там "посерёдке" зона избегания (вполне могу себе представить, что если человек начинает врубаться как действует комп, но не может врубиться без напряжения, то его начинает плющить и он из этой области деятельности валит, чтобы избежать дискомфорта. У совсем плохого программиста этот дискомфорт может не возникать, потому что он вообще не видит что он чего-то не понимает.)

Reply | Thread

Детские подводные грабли

(no subject)

from: crazy_daemon
date: Jan. 14th, 2008 10:41 am (UTC)
Link

человек начинает врубаться как действует комп, но не может врубиться без напряжения, то его начинает плющить и он из этой области деятельности валит, чтобы избежать дискомфорта

У меня есть такой знакомый.

Reply | Parent | Thread