о программистком опыте
Jun. 27th, 2007 03:33 amИнтересная у нас профессия, у программистов. Можно тридцать лет и три года сидеть на компьютере, и в результате знаний и осмысленного опыта практически столько же, сколько у двадцатилетнего хакера.
Есть ли действительное накопление опыта и знаний (настоящих знаний, не типа там библиотеки какой итп.) в программировании? Может, после того, как достигается определенный рубеж профпригодности, мы никуда не растем? Мне так иногда кажется; я вспоминаю себя, пишущего разные неплохие программы 15 и 10 лет назад, и мне неочевидно, что сейчас я умею их писать лучше. Именно "неочевидно": если как следует подумать, то все-таки, наверное, сейчас умею лучше, но это отнюдь не очевидное утверждение. И даже если умею лучше, то совсем не ясно, насколько это качественно лучшее умение, или скорее накопленное количество сведений: стандартов, протоколов, библиотек, методов сериализации или синхронизации...
С другой стороны,
С другой стороны, глянем на Эйнштейна. Для придумывания ОТО нужен были именно что опыт, потому что она растёт из не настолько простых идей. Недавно мне попалась "Сумма технологий" Лема; я поразился, насколько более глубоким и менее наивным сумел стать автор за 10 лет. Притом, что Лем, imho, один из гениев 20 века.
Перечитывая свой код месячной давности, думаешь, бывало: "какой балда его написал!". Код пятилетней давности, которой уже забыл -- "хм, да я уже тогда был ловок". Код 10-леьней давности -- "ужас, ужас, каким я был наивным неумехой".
Конечно, верно и то, что, вспоминая себя 15- и 10-летней давности, я невольно накладываю на свой тогдашний образ знания и понимание, которые у меня есть сейчас. Так что в каком-то смысле неудивительно, что глубокой разницы не замечаешь. Честно говоря, мне как-то и не хочется перечитывать свой код 10-летней давности, что бы он мне ни сообщил.
И вот что еще подумалось: может быть, одна из причин того, что в последнее время (год-два) я старался изучить больше совсем новых для себя по сути своей языков (Хаскель, Лисп) было тоже связано с этим, двигалось в том числе подспудным желанием смочь сказать самому себе: я действительно знаю больше, чем знал 10 лет назад, действительно понимал что-то совсем новое и мощное, что тогда не понимал. Может быть. Потому что, если честно, картина программирования как искусства, которое не становится лучше или хуже с годами, возможность того, что со временем ничему действительно новому не учишься, мне не то что не нравится, а в какой-то степени даже ужасает. Нехорошая эта картина, не по душе мне она - и мое стремление расширить свои знания, выучить что-то действительно новое было, возможно, стремлением от нее оттолкнуться.
А вы что о всем этом думаете?
no subject
Date: 2007-06-27 01:05 am (UTC)ужасающая картина
Date: 2007-06-27 01:10 am (UTC)Я уволилась, ищу что-нибудь другое, принципиально. Вернуться в науку, например... Но тяжело - приходится начинать с начала, а время упущено..
Re: ужасающая картина
Date: 2007-07-04 08:08 am (UTC)no subject
Date: 2007-06-27 01:29 am (UTC)no subject
Date: 2007-06-27 02:52 am (UTC)no subject
Date: 2007-06-27 06:01 am (UTC)no subject
Date: 2007-06-27 03:17 am (UTC)Мой непосредственный начальник, собственно, включает тест на "мудрость" в интервью, вчерне описывая наш проект и предлагая указать наиболее сложные места с точки зрения кандидата. Молодежь обычно попадает пальцем в небо.
no subject
no subject
no subject
Date: 2007-06-27 03:40 am (UTC)Сам по себе конкретный язык программирования (или несколько) не является столь сложным, чтобы изучать его несколько десятилетий. А вот опыт решения задач, умение абстрактно мыслить, правильно развивать архитектуру, масштабировать, участвовать в крупных проектах - это все накапливается, да.
Кстати, а если сравнить скажем студента-математика и матерого профессора, есть ли здесь аналогия?
P.S. Хотел спросить про Haskell. Какую большую задачу Вы решали на нем в процессе изучения. Я просто зашел в тупик: я не знаю чего можно на нем вообще написать, кроме коротких математических задачек типа Project Euler. Либо к нему нужны задачи сильно специфические, либо надо уметь его специфически использовать под произвольные задачи.
no subject
Date: 2007-06-27 04:17 am (UTC)точно, можно даже добавить -- и на высококвалифицированных тоже
какой, в сущности, кайф от того, что машина выполнила твои инструкции так, как и должна была выполнить? или от того, что инструкции написаны без ошибок? это все равно как наслаждаться тем, что умеешь грамотно писать, запятые расставлять -- сомнительное наслаждение
другое дело, написать повесть, или, возвращая аналогию -- изобрести эффективный алгоритм
но это в общем, не программирование, а скорее математика
no subject
Date: 2007-06-27 04:02 am (UTC)PS: А всех программистов убить, и уже сейчас. :-))
no subject
Date: 2007-06-27 04:07 am (UTC)Здесь уже звучало, что зрелые специалисты не решают задачи нахрапом - у них есть опыт. Это верно даже при работе над сложными проектами - их расчленяют и пытаются нормализовать к базису опыта, но при этом надо помнить о спирали развития. Действительно новые вещи не изучаются, они всплывают в результате "отчаяных атак", выходов за пределы. Таким образом, ваш опыт в деле роста - это балласт, который удерживает вас в заданном слое. Для того, чтобы открыть что-то подлинно новое, необходимо рискнуть.
no subject
Date: 2007-06-27 04:12 am (UTC)зато, если не зацикливаться на чистом программировании а как-то разнообразить это дело разными приложениями в других предметных областях, то возможности роста ничем не ограничены.
20-летний хакер во многом лучше человека с 10-летним опытом, но есть в вещи, для которых 20-летний хакер совсем не годится и, скорее даже вреден.
no subject
Date: 2007-06-27 04:15 am (UTC)То бишь за 30 лет человек привыкает решать определённые классы задач во сне и одной левой. Да, если не менять профиль, то будет скучно, а потом хакеры с библиотеками стандартных решений может набегут, но ведь можно и количество в качество переводить.
От решения конкретных задач к созданию библиотек, общих принципов, улучшение процесса и тому подобные качественные скачки.
no subject
Date: 2007-06-27 04:26 am (UTC)Но я думаю ты говориш о проблеме перехода количества в качество и я не вижу, как человек, может достичь тупиковости если он чем–то занят. Просто, я думаю, становятся не интересны задачи, если их уровень не повышается с опытом их решения и поэтому нет мотивации для новых качественных скачков.
Не знаю
Date: 2007-06-27 05:26 am (UTC)Re: Не знаю
Date: 2007-07-04 08:13 am (UTC)no subject
Date: 2007-06-27 05:26 am (UTC)no subject
Date: 2007-06-27 05:52 am (UTC)1) Анализ проблемы
2) Синтез решения
3) Запись на тарабарском языке
Конкретные персоны сильны не во всем. Первым двум пунктам меня учил учитель математики на уроках математики в школе. Третий пункт я освоил уже позже во студенчестве.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-06-27 06:43 am (UTC)no subject
Date: 2007-06-27 07:19 am (UTC)И там твои пределы ограничены только твоей башкой.
Сейчас произшло заметное раделение труда, и собственно "программист" остался в последней ипостаси - реализатор, если хотите слесарь, али плотник. Т.е. "программист" = инструмент, а не идея. Поэтому и скучно.
no subject
Date: 2007-06-27 08:19 am (UTC)no subject
Date: 2007-06-27 08:55 am (UTC)no subject
Date: 2007-06-27 08:19 am (UTC)Кто лучше смотрится на сцене? Опыт, умудрённость или энергия и энтузиазм ?
И возвращаясь к нашим бараном,
идеальный вариант это не идти в ногу с технологией ( и это не самый плохой вариант ) а создавать её. А для этого тебе как минимум надо знать чем занимались твои предшественники.
Вот такой спонтанный комментарий
no subject
Date: 2007-06-27 08:23 am (UTC)опыт (не только программисткий) позволяет быстро оценить задачу, накидать варианты решения (может быть в виде бредовых идей) без кропания кода, покрутить варианты в голове/на бумаге и т.п.
и как раз в этом, появляется преимущество перед вчерашним студентом, который может отлично знать язык программирования, но не решал сложных задач.
сюда же можно отнести и опыт чтения/фиксения чужого кода, в том числе и на незнакомых языках :-)
no subject
Date: 2007-06-27 08:57 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2007-06-27 08:38 am (UTC)no subject
Date: 2007-06-27 08:42 am (UTC)no subject
Date: 2007-06-27 08:53 am (UTC)---
Тут уместно как раз провести параллели с искусством, например с живописью. Там же как, есть техника, способность точно двигать кистью, смешивать краски чтобы получить именно то, что хочется, перспективу правильную делать. Но ведь великий художник -- это не тот, кто в совершенстве овладел техникой, а тот, кто с помощью техники делает интересные вещи.
Программирование в смысле написания кода может быть даже ещё более глубоко (в смысле, длиннее дорога к совершенству техники), чем живопись или музыка. Мощные ортогональные инструменты, вроде языка С или темплейтов, можно изучать десятки лет, периодически обнаруживая разные интересные приёмы (вроде Curiously Recurring Template Pattern, который я совершенно случайно открыл самостоятельно пару лет назад, очень был рад).
Но это вовсе не повод придавать технике какое-то особое значение. Да, она необходима, но по большому-то счёту важно не то, как ты пишешь, а то, что ты пишешь. Изучение FP тоже ценно не столько тем, что даёт новые инструменты, сколько тем, что позволяет придумывать что-то новое, выходить за границы применимости старых инструментов, даже нет, не границы применимости, а неявно подразумеваемые цели, диктуемые старыми инструментами.
no subject
Date: 2007-06-27 09:08 am (UTC)А если серьёзно - кроме собственно способности писать улучшается способность думать о проблемах и решать их, и я не понимаю как здесь можно достичь потолка.
no subject
Date: 2007-06-27 10:23 am (UTC)Заглядываю в свой старый код, написанный лет этак 4-8 назад. Ужас как криво... Странно, что еще работает (http://olegy.livejournal.com/6512.html)
Что касается развития. Когда в 90-х начинал, попал в лабораторию, где работали несколько поколений разработчиков. Я увидел тенденцию: практически каждый инженер в своем развитии доходил до непреодолимого барьера. При своем юношеском максимализме я определил этот баръер в 40 лет (мне сейчас 40 :-).
Среди схемотехников:
- Кто то не смог преодолеть барьер цифровой техники
- Кто то не смог преодолеть барьер микропроцессоров
Среди программистов:
- Кто то не смог преодолеть барьер С(pascal, ...) (остался не ассемблере)
- Кто то на смог преодолеть барьер операционной системы
(это я про 90-тые)
Сейчас у программистов появилось очень много барьеров.
Я уже вижу свой барьер (не скажу ;-), и странное дело, почему то нет желания его преодолевать.