Програмування як краща форма, Комерція, Різне, статті

ПЕРЕДМОВА

У наш час – епоху інформаційного буму – число програмістів стрімко і неухильно зростає. Якийсь час тому мені стали цікаві об’єктивні причини такого блискучого підйому інформаційної науки (“computer science” – прим. пер.), і я провів деякі самостійні дослідження на цю тему, які і хочу зараз запропонувати вашій увазі. Оскільки сам я не можу претендувати на приналежність до хакерів, тези цієї статті краще сприймати як свого роду думка “людини зі сторони”.

Проте, працюючи психологом у великій компанії, що займається розробкою великих програмних проектів, неможливо не спілкуватися з програмістами, ніж я зазвичай і займаюся. Багато хто з моїх друзів – саме програмісти, так що моя думка в першу чергу грунтується на їх поглядах на життя в цілому і на свою професійну діяльність зокрема.

Можу відразу ж попередити вас, що не бачу сенсу в розгляді розвитку комп’ютерних технологій. Ця сторона питання вже досить висвітлена в спеціальних журналах, і тут, я вважаю, мені навряд чи вдасться посперечатися навіть з найменш поінформованими з вас. Ця стаття – не про комп’ютери. Мене цікавлять не комп’ютери, а люди, які проводять іноді по кілька діб поспіль у моніторів.

Я аналізую виключно людський фактор – і сподіваюся, що мої викладки здадуться для вас цікавими.

ШЛЯХ ДО ПРОГРАМУВАННЯ

Чим керується людина, вибираючи для себе професію? По перше, особистими уподобаннями. Для програмування потрібен певний склад розуму, а якщо вже ми говоримо про програмістів – розробників програмного забезпечення, а не про “упертих в науку” зашорених теоретиків, сформулювати особисті переваги саме по собі є досить цікавою і нетривіальним завданням. Чи знаєте ви, що програмісти частіше володіють технічним складом розуму, а не абстрактним, як, наприклад, математики, фізики та інші? І що технічний склад розуму зустрічається частіше у письменників, музикантів, перекладачів, а зовсім не у механіків, як це випливає з назви?

Так ми приходимо до розуміння того факту, що слово “програміст” зовсім не є синонімом визначення “прикладної математик”, хоча багато хто і не відчувають різниці між цими поняттями. Наприклад, Пол Хольцер (Paul Holtser – прим. Пер.), Мій хороший приятель, каже буквально наступне: “Я не використовую у своїй роботі практично нічого з вивченого в університеті. Математичний аналіз та інша абстрактна мате матики не дають мені способів написання елегантного і компактного коду програм. Можливо, для людей, поставлених перед необхідністю програмування вузькоспеціальних завдань в галузі математики, ці знання могли б стати в нагоді, але ми все таки працюємо не над відображенням тривимірних графічних сцен, а займаємося завданнями іншого рівня … Можу чесно зізнатися, що займаюся програмуванням не з точки зору практикуючого математика. Навпаки, я виконую роботу лінгвіста – перекладача з повсякденної мови на комп’ютерний, пояснюючи комп’ютера, що і як потрібно виконати, щоб прийти до бажаного результату “.

Що ж, в поєднанні з тим, що Пол вважається відмінним програмістом і лідером багатьох проектів, його слова не можна просто відкидати. Вони вимагають ретельного і вдумливого аналізу.

Пол цілком міг би стати перекладачем, літератором чи психологом, хоча і вчився на програміста. Поширене, але невірна думка університетських викладачів звучить так: “Ви повинні знати теорію, а практична реалізація тих чи інших речей настільки проста, що ми не будемо її розглядати “. І хоча я знаю багатьох людей, які не зустрічали ніяких труднощів з теорією, всі вони насилу проходили практичну реалізацію завдання. Зараз я можу з упевненістю сказати: їх мізки, здатні з легкістю вирішувати найскладніші диференціальні рівняння, просто пасували, коли виникала необхідність перекласти свої позамежні викладення в зручний і, головне, ефективний текст кінцевої програми. Зрештою, математиків, філософів і лінгвістів вчать на різних факультетах, чи не так?

Але звичайний програміст – не стільки математик, скільки лінгвіст і філософ в одній особі, активно застосовує положення формальної логіки. Ви ніколи не зустрічали програмістів, які не можуть докладно і ясно пояснити алгоритм вирішення того чи іншого завдання? Запевняю вас: з їх програмними продуктами краще не стикатися. Ці люди не мають точністю мислення і, як наслідок, виявляються просто не в стані породжувати хоч скільки небудь досконалий програмний код.

Повернемося до початкової теми, залишивши на деякий час міркування про наших особистих схильностях і перевагах. Отже, що ще ми можемо порахувати об’єктивними причинами для вибору цього шляху в житті? Зрозуміло, це фінансова сторона справи.

За роботу в аналізованої області в наш час добре платять. Напрямів для активної професійної діяльності стає все більше і більше, а обсяги інформації, супутні їм, змушують програмістів набувати досить жорстку спеціалізацію: бази даних, мережеві технології (і комунікації в цілому), графіка, прикладне програмування під різні платформи … Список можна продовжувати до нескінченності, але ви й самі розумієте, наскільки MFC і Qt різняться між собою. Коли програміст вирішує будь-яку задачу, йому волею-неволею доведеться тримати в голові всі нюанси тієї системи, в якій він працює, і все особливості тієї платформи, під яку він пише – в іншому випадку супровід цієї програми стане малореальним ще до закінчення робіт над першою, отладочной версією.

У великих компаніях, що розробляють серйозні проекти, справа, як правило, виглядає трохи інакше: роботу з базами даних нададуть групі співробітників, яка чудово знайома з цією темою – і вже явно не стануть турбувати цим завданням групу розробників драйверів.

Кожному – своє. Цей принцип лежить в основі всіх сучасних компаній, що лідирують сьогодні на ринку програмного забезпечення. Тому на роботу в такі компанії запрошують не всезнаючих “універсалів”, ледь Чи знайомих навіть з теорією, а умілих і активних експертів практиків. І, як наслідок, такі експерти практики можуть багато собі дозволити.

Займатися програмуванням зараз прибутково і престижно – і це не порожні слова.

ПРОГРАМУВАННЯ ЗСЕРЕДИНИ

Якщо ознайомитися з даним питанням докладно і предметно, легко помітити, що програмування – це не тільки бізнес. В куди більшою мірою це творчість. Подивіться, хіба не схожі ваші знайомі програмісти на представників богеми? Жартую, звісно, ​​- але кожна жарт має під собою якусь першооснову.

Якби програмування не носило в собі рис творчості, займатися їм було б нудно. Уявіть собі: 8:00 в день у вас перед очима монітор, заповнений нескінченною низкою символів. Вам б це набридло, чи не так? І мова тут йде не про гроші, а про ту віддачі, яка допомагає нам займатися своєю роботою від відпустки до відпустки. Якби програмісти не відчували морального задоволення від своєї діяльності, вони просто вимерли.

Отже, чому я можу з упевненістю заявити, що програмування є творчістю? Тому, що в програмуванні ми використовуємо стратегії, дуже схожі зі стратегіями літераторів (письменників, перекладачів). Відомі НЛП практики (можу привести в приклад книгу “Applications of NLP” by Dilts, в якій є стаття “Creative writing”) вчать тому, як правильно формувати художній текст і як оптимізувати (Поліпшити, спростити) сам процес написання. Ви замислювалися про те, що читає книгу людина мимоволі уподібнюється комп’ютера, послідовно відстежуючи думка автора через всі голови і параграфи? І про те, що в процесі написання програмного коду, ви забезпечуєте на деякий час компілятор (а трохи пізніше – і систему) цікавим чтивом? У всякому разі, ваш мозок давно знає і активно використовує цю схожість програмування і письменства.

Якщо в двох видах діяльності виявляються схожі методики і причинно слідчі ланцюжка, то суть цих видів діяльності єдина, якщо розглядати її в загальному вигляді (а значить, так, як її розглядає людський мозок).

Тепер поговоримо про відмінності будь-який інший форми творчості та програмування. Перше – і, без сумніву, саме значуще – відмінність формулюється так: “Програмування не використовує рефлексію як методу пізнання “. Дійсно, художник, композитор чи письменник, творячи, вирішують власні душевні проблеми. Така мотивація всіх видів творчості, і я радий, що з програмуванням все йде інакше. Хіба має значення, на яку тему замислюється програміст в даний момент? Навпаки, займаючись своєю справою, програміст відволікається від власних переживань, повністю перемикаючись на роботу. Таким чином, навіть депресивні стани майже не можуть негативно вплинути на якість і швидкість роботи програміста.

Друга відмінність я сформулював так: “Програмування не спрямоване на душу споживача”. Програмні продукти можуть допомогти вам у вашій роботі, розважити вас, пов’язати з іншими людьми, але вони ніяк не позначаться на вашому душевному стані. (Якщо не говорити про курйози на кшталт “психотерапевта” в редакторі Emacs і залишити в стороні випадки, коли програми працюють неякісно, ​​шокуючи вас в зневіру.) Одним словом, програміст творить як художник, а питають з нього як з ремісника. На мою думку, це золота середина. А по вашому?

Елемент рутини і ремісництва, якщо дивитися на речі реально, в програмуванні присутній лише тоді, коли справа доходить до налагодження і супроводу, але й там, за наявності добре розробленого проекту та плану роботи з пересічної “лову бліх” переростає у щось більше.

І, головне, в програмуванні практично відсутній плагіат. Дивіться самі: програміст вільний використовувати багато бібліотек, які є “у відкритому доступі”. Він може працювати з исходниками, написаними іншими людьми. Він реалізує свій продукт, який базується на чужих напрацюваннях (будь то напрацювання його колег чи плід праці програмістів проекту GNU з Європи). Уявіть собі художника, який використовує чужі роботи. Максимум, на що той здатний претендувати, – звання коллажіста, ремісника від живопису. Програміст, який використовує стандартні бібліотеки, пародією на такого “художника” аж ніяк не є. Його робота самостійна і цілком значима і варта.

Таким чином, програмісти можуть працювати і спільно, і окремо. У першому випадку при ефективній організації роботи якість вихідного продукту буде багато краще – що саме по собі не може не радувати. Посудіть самі, чи буде твором мистецтва картина або книга, яку створювали тридцять сорок чоловік, причому іноді навіть не зустрічаючись і не спілкуючись? Приклади програм, написаних у таких умовах можна зустріти на кожному кроці – і ви легко можете переконатися, що це не “буриме”, а цілком професійно зроблене і дуже стабільне програмне забезпечення.

Отже, шляхом порівняння програмування та інших видів творчості ми прийшли до того, що зазначено в назві статті: ПРОГРАМУВАННЯ – КРАЩА ТВОРЧА СПЕЦІАЛЬНІСТЬ. (Тим не менш, в російській перекладі стаття називається трохи інакше. Але, думаю, автор мені пробачить. – Прим. пер.)
Що ж із цього випливає?

ВИСНОВКИ

Повернемося ще раз до проекту GNU. Розробка програмних продуктів на основі чужих бібліотек та програм, поставлена ​​на потік – це чи не приклад спільності творчості програмістів? З їхньої співпраці народилося декілька операційних систем і величезна кількість прикладних програм, які, до речі, і поширюються безкоштовно. Останній факт я схильний вважати своєрідним проявом етики хакерів старої школи, які підводили солідну морально-філософську базу під своє гасло, що вимагає доступності будь-якої інформації для всіх. Вони відкидали модний в наші дні спосіб, коли команда розробників робить вихідні тексти своїх програм закритою інформацією, щоб конкуренти не змогли скористатися алгоритмами і методиками, використовуваними в цих исходниках. І, як наслідок, якість програм було цілком прийнятним – Навіть на простеньких за нинішніми мірками мікрокомп’ютерах з об’ємом ОЗУ не більше 64 Кб (на PDF10, наприклад, відмінно працювала UNIX).

Реалії сучасного життя істотно відрізняються від того духу загального співробітництва, який можна було відшукати не тільки серед студентів, а й серед молодих фахівців. Співпрацювати тоді було життєво важливо; зараз же дух конкуренції і комерції укупі зі звичайним індивідуалізмом комп’ютерників-професіоналів часто вбиває будь-яку співпрацю. Рівень консультацій в конференціях Інтернет за останні десять років сильно впав. Професіонали не бажають втрачати час на те, щоб просвіщати своїх потенційних конкурентів, а тому новачки повинні тепер переступати бар’єр власного незнання самостійно або навчаючись на спеціальних курсах, де викладачі виявляються просто не в змозі працювати з кожним із слухачів індивідуально.

Як наслідок, роз’єднаність комп’ютерного співтовариства неухильно зростає, і програмісти в деяких компаніях іноді не бажають працювати спільно. Такий стан речей сильно позначається на рівні стабільності програмного коду, що породжується цими робочими групами.

Індивідуалізм і ескапізм програмістів – ось те, що мене насторожує. Багато хто з моїх знайомих так чи інакше вважають себе краще за інших, і це не страшно, але коли люди відмовляють один одному у співпраці, керуючись тільки відчуттям власної значущості, можна з упевненістю заявити, що справа погано. Наприклад, зараз багато програмісти хизуються своїм віросповіданням (як правило, вони атеїсти) та політичними переконаннями (комуністи або що то начебто). При цьому вони зовсім не поважають суджень інших людей, тому конфлікти в багатьох групах відбуваються досить часто. Погіршення атмосфери в робочих колективах програмістів все частіше і частіше призводить багатьох фахівців в трудоголія і ініціює їх на вживання алкоголю і наркотиків. Я не стану багато говорити на цю тему і не буду приводити прикладів. Ви й самі добре знаєте про це, якщо не боїтеся чесно подивитися на відомі вам факти.

І ця сторона програмування – на жаль, також притаманна будь-якому з видів творчості, – не може не лякати. Я щиро сподіваюся, що засилля комерційної діяльності – не більше, ніж дитяча хвороба нашого соціуму, і пройде, як проходять вітрянка або кір.

Я сподіваюся, що питання Хіллела послужать ще кільком поколінням програмістів (*). Я сподіваюся, що до людей, рухають вперед проект GNU, приєднаються й інші. Я сподіваюся, що настігшіх наше суспільство психологічний криза програмістів практиків вирішиться Епохою Відродження. Другим Ренесансом.

If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?

Якщо я не живу для себе, хто буде жити для мене?
Якщо я живу тільки для себе, то хто я є?
Якщо не тепер, то коли?


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*