моя контактная информация
почта[email protected]
2024-10-03
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
боб отвечает«кризис 35-ти лет» программиста:
думатьидея о том, что программирование предназначено только для молодежи, на самом деле является иллюзией., но это действительно очень влиятельная иллюзия. эта иллюзия существует потому, что спрос на программистов взлетел как ракета за последние 70 лет.
на самом деле мы, «старые программисты», еще есть, но их количество не столь заметно.
автор | ван цилун
продюсер: |новый программист》редакционный отдел
представьте себе, если бы вы писали код более пятидесяти лет в своей жизни и продолжали бы программировать, пока вам не исполнился 71 год. как бы вы восприняли нынешнюю эпоху взрывного программирования ии?
роберт к. мартин известен как всемирно известный гуру программирования. этого человека зовут «.дядя бобстарик (дядя боб) — пионер гибкой разработки и шаблонов проектирования. он профессионально занимается программным обеспечением с 1970 года и занимается смежной деятельностью более 50 лет. знаменитые «пять принципов твердости» — это пять. принципы проектирования в области объектно-ориентированного программирования, вышли из его рук. отношение дяди боба к ии весьма неоднозначно: с практической точки зрения он многозначительно жаловался, что «.сегодняшний ии — это всего лишь младший программист, у которого только половина мозга, и он никогда по-настоящему не вырастет.", потому что задачи, которые может выполнить ии, весьма ограничены; но даже несмотря на то, что ему больше 60 лет, он все еще возлагает большие надежды на будущее: "когда-нибудь в будущем мы создадим машины, способные думать как люди, навыки программирования устареют.”
будучи всемирно известным гуру в области разработки программного обеспечения, дядя боб в своем шедевре «чистый код» однажды определил, что такое «чистый код», и описал ряд эффективных методов работы.
недавно вышла китайская версия последней книги дяди боба «функциональный дизайн: принципы, шаблоны и практики». многие задаются вопросом, почему этот лидер объектно-ориентированного программирования «предал» «лагерю врага», и дядюшка боб тоже его вывел. его всегда прямолинейный характер и прямо «опровергал»: «в последние годы в некоторых статьях утверждалось, что функциональное программирование противоположно объектно-ориентированному программированию и что объектно-ориентированное программирование устарело. я не согласился с этой точкой зрения и решил написать эту книгу.”
функциональное программирование — это больше, чем просто «программирование с помощью функций». функциональное программирование — это программирование без операторов присваивания.
как только вы попробуете программировать без операторов присваивания, все остальные возможности функционального программирования встанут на свои места. если вы хотите иметь дело с функциями, вы должны использовать рекурсию. все это происходит естественным образом в тот момент, когда вы решаете не присваивать значения. вот в чем суть функционального программирования.
—— «функциональный дизайн», роберт к. мартин
все приведенные выше замечания взяты из интервью с дядей бобом, опубликованным csdn «новый программист». мы подробно пообщались с этим «живым ископаемым гибкой разработки» и выслушали его личный рассказ о том, как он, будучи одним из 17 лидеров индустрии программного обеспечения, 23 года назад (2001 г.) опубликовал «agile manifesto».исторические подробности, а также узнал последние взгляды на программирование искусственного интеллекта от этого старшего программиста с более чем 50-летним опытом разработки, что освежило прошлые взгляды многих людей на дядю боба.историческое впечатление. следующая статья начнется с воспоминаний дяди боба о 1970 году и вернет читателей в «древнюю эпоху программистов», когда еще не родилась всемирная паутина.
«новый программист»: прежде чем начать интервью, не могли бы вы кратко представиться?
дядя боб:хорошо, меня зовут боб мартин. некоторые называют меня дядей бобом. я уже давно работаю программистом.более пятидесяти лет.когда я впервые начал программировать, компьютеры были достаточно большими, чтобы заполнить большую комнату, и стоили миллионы долларов.
я работал с различными языками программирования, включаяязык ассемблера, cobol, fortran, pl/i, c, c++, pascal, java, c#ждать. на протяжении многих лет я участвовал в разработке различных систем, от финансовых систем до встроенных систем реального времени и систем управления процессами. поэтому можно сказать, что у меня большой опыт работы в этой отрасли.
кроме того, я написал несколько книг, в том числе «чистый код» (чистый код), «путь к чистой архитектуре» (чистая архитектура), а книга, которую мы сегодня обсуждаем, называется «функциональный дизайн》(функциональный дизайн)。
«новый программист»:помимо написания книг, чем вы занимаетесь в свободное время? кстати, я часто читаю ваш твиттер и обнаружил, что около 50% ваших твитов — это социальные новости о выборах в сша и трампе, а остальные 50% — о техническом контенте, программировании и ваших взглядах на код.
дядя боб:действительно. в годы, когда не было выборов, около 90% моих твитов посвящены программному обеспечению. но поскольку это год выборов, есть больше контента, посвященного другим темам. когда я не пишу книги и не программирую, я занимаюсь множеством дел. я люблю кататься на велосипеде и много путешествовать. я также пилот, и мне очень нравится летать на собственном самолете. у меня огромная семья счетверо детей и десять внуков., я обычно посещаю их по мере возможности, поэтому мое время распределяется очень полно.
«новый программист»: пожалуйста, вернитесь к отправной точке вашей карьеры программиста и расскажите нам историю того, как вы начали работать программистом в 1970 году. вам тогда было 18 лет, и первыми языками, которые вы выучили, были ассемблер и cobol. можете ли вы рассказать о своем опыте, когда вы только начинали?
дядя боб: ну, в то время в колледже было не так много курсов. в то время у меня не было никакого интереса к школе. в то время бушевала война во вьетнаме, и в кампусе было много беспорядков и волнений. и,я много узнал о компьютерном программировании, выучил cobol и fortran и даже несколько языков компьютерной ассемблера. поэтому я не думаю, что есть необходимость идти в колледж.。
что касается того, с чего началась моя карьера программиста, то все началось с того, что моя мама купила мне маленький пластиковый компьютер, когда мне было 12 лет. в этой игрушке есть три триггера и шесть логических элементов и, и чтобы управлять ею, вам нужно повернуть небольшой рычаг. некоторые резиновые ленты и рычаги внутри перемещают детали, позволяя ей выполнять простые вычисления, например, считать от 0 до 7 или. счет от 7 до 7. счет возвращается к 0. кроме того, вы также можете запрограммировать его на добавление двух битов для генерации бита суммы и бита переноса. я даже написал на нем много интересных программ - процесс программирования заключается в добавлении небольшой трубки, вставленной в защелку, эти трубки блокируются. стержень от входа в прорезь, тем самым изменяя состояние спускового крючка.
итак, я провел несколько недель, изучая, как заставить работать этот игрушечный компьютер, и в результате этого процесса я стал программистом.с тех пор я программист。
это была моя отправная точка, а потом мой отец купил много книг о компьютерах и языках программирования, чтобы дать мне как можно больше информации. затем, в 16 лет, я получил работу по написанию программ для honeywell 200. работа длилась две или три недели, когда явсе еще просто мальчикя сделал это во время летних каникул, и это было очень весело.
примерно два года спустя, когда мне было 18, я получил постоянную работу по написанию языка ассемблера и cobol для ibm 360. вскоре после этого я начал программировать множество микрокомпьютеров на языке ассемблера. в то время, когда эти компьютеры производила корпорация varian, многие компании в то время производили микрокомпьютеры, но лишь немногие добились успеха, и именно digital equipment corporation (dec) доминировала в этой области. затем я стал очень опытным в программировании pdp 8 и pdp 11, устройств, которые производились в начале 1970-х годов.
«новый программист»: 1970-е годы были действительно интересным временем. всемирная паутина еще не была изобретена, а usenet только появился.появляться. вы один из первых пользователей usenet в мире, и я также узнал, что прозвище «дядя боб» изначально дал вам коллега из компании. позже вы по ошибке использовали этот псевдоним в качестве подписи в usenet, и в конечном итоге имя успешно изменилось с псевдонима на ваше настоящее имя. можете ли вы поделиться этой историей?
дядя боб: я работал в стартапе clear communication, который стал началом моей карьеры.четвертая остановкагде-то между 1987 и 1989 годами. там коллега дал каждому прозвище, мое было «дядя боб». поначалу это немного раздражало, потому что он всегда ходил вокруг и называл меня по этому прозвищу: «дядя боб, а что насчет этого?» «дядя боб, а что насчет этого?».
я ушел из этой компании и стал консультантом, и никто больше не называл меня «дядя боб». оказывается, я пропустил заголовок, поэтому допустил ошибку, добавив его в подпись электронного письма.
в то время я был очень активен в usenet, часто публиковал статьи в группах новостей, таких как comp.object и comp.lang.c++, и люди начали замечать в моей подписи «дядю боба». однажды я был на конференции по c++, наверное, где-то в 1990 году, и кто-то указал на меня через зал и сказал: «смотри, это дядя боб, и я подумал: «о, черт возьми, я совершил ошибку, мне действительно стоит сменить свое!» подпись - но потом я понял, что «дядя боб» на самом деле будет хорошим брендом, поэтому сохранил его.
«новый программист»: usenet можно рассматривать как первую социальную сеть, в которой вы участвуете. как и многие легендарные разработчики, вы любите участвовать в различных сообществах или форумах. однажды я видел, как вы писали в hash note: «я роберт мартин. вы можете задавать мне вопросы. в то время многие разработчики активно задавали вам вопросы и присоединяйтесь». разговор. теперь это общение, похоже, происходит в основном в твиттере.
дядя боб:верно,твиттертеперь моя основная соц. я также использую facebook, но в основном для того, чтобы поддерживать связь с семьей и друзьями.
«новый программист»: вас изначально привлекали c и c++, но вы также упомянули, что из интереса пробовали такие языки, как snobol, focal, alcom и basic. какие еще языки программирования, по вашему мнению, можно назвать «интересными»? какие из новых языков программирования, появившихся в последние годы, особенно вам интересны?
дядя боб: язык, который я считаю наиболее интересным на данный момент, этоклоджур, язык, в изучение которого я потратил много времени. это меня удивило, потому что clojure на самом делелиспдиалект лиспа, который я никогда не думал, что выучу.
первые тридцать лет своей карьеры я никогда не думал об изучении лиспа, потому что считал это ужасным языком — потому что, конечно, я его вообще не понимал. пока однажды я не прочитал книгу «структура и интерпретация компьютерных программ». в книге использовался язык lisp, который меня сразу привлек. внезапно я стал большим поклонником лиспа. я хочу найтиспособы использования lisp в повседневной жизни, так я познакомился с clojure.
эквивалент clojureдиалект lisp, который может работать на jvm (виртуальной машине java)., это было идеально для меня, поэтому я начал учиться программировать на clojure и получать от этого удовольствие, для меня это было отличным времяпрепровождением.
кроме того, есть и другие интересные языки, такие какфорт, стековый язык, основанный на постфиксных выражениях, который отличается от любого языка, который я когда-либо использовал, и очень интересен.прологэто также очень интересный язык. вам не нужно напрямую сообщать машине, что является правильным, но позвольте машине получить правильный результат, решив его. в целом, это очень интересные языки, которые стоит проверить каждому, поскольку они очень уникальны.как только вы выучите совершенно другой язык, это изменит весь ваш взгляд на код.。
«новый программист»: я понимаю некоторые ваши предыдущие комментарии по поводу кода ии. по вашему мнению, большие языковые модели иногда хороши, а иногда глупы. хотя объяснение кода ии немного помогло, вы все равно заявили, что ему не следует слепо доверять.
дядя боб: да, программистлегко стать чрезмерно зависимым от таких инструментов, как copilot, и некритически принять код, который они генерируют, когда вы его видите, и это опасно. вам нужно быть критичным, и хотя часть этого кода в порядке, большую часть времени вам нужно быть очень осторожным с кодом, сгенерированным ии. итак, мое предложение таково:будьте осторожны, используйте его как инструмент и всегда помните, что инструменты могут вам навредить при неправильном использовании.
«новый программист»: итак, как же использовать ии для роста программистам, которые только начинают учиться? в интервью я слышал две совершенно разные точки зрения: одна заключается в том, что начинающие программисты должны полностью использовать ии; другая заключается в том, что ии уничтожит младших программистов, потому что эти люди не имеют возможности судить о качестве кода ии.
дядя боб: точно так же, как юным пилотам не следует пользоваться автопилотом.пожалуйста, сначала научитесь управлять самолетом, а затем используйте автопилот, когда вам не нужно обращать внимание на детали. то же самое верно и для ии.младшим программистам не следует вначале полагаться на ии, поскольку они еще не знают, как оценить качество выходного кода. зачастую этот код не просто плох, он просто неправильный и вообще не работает.
что меня действительно беспокоит, так это когда младшим программистам дают задачу, и они решают использовать ии для ее реализации. после того как ии даст код, эти новички всегда будут думать: «ну, его дал ии, должно быть все в порядке», а потом потеряют работу. итак, мое предложение таково:вам следует даже сократить использование искусственного интеллекта в течение первых нескольких лет вашей карьеры.。
«новый программист»: в настоящее время в различных проектах используется все больше кодов, сгенерированных ии. как сбалансировать качество кода и эффективность генерации?
дядя боб: мой способ балансировкииспользуйте ии, чтобы сначала сгенерировать код, а затем очистить его. я не позволю впихивать в проект плохой код. итак, если код, сгенерированный ии, работает и проходит мои тесты, то я без колебаний вернусь к нему и проведу рефакторинг, очистку и улучшение. например, изменение названия, извлечение некоторых функций, корректировка структуры и так далее.
потому что я не ожидаю, что ии будет генерировать отличный код. так что я подчищу это и превращу в свой собственный код. таким образом, это мой проект и код, который я написал.
«новый программист»: лет пять назад кто-то спросил вас «какие тенденции в разработке программного обеспечения переоценены», и вы обругали микросервисы?будут ли через пять лет какие-либо другие тенденции, которые будут переоценены?
дядя боб:переоцененная тенденция сейчас — это, конечно, генеративный искусственный интеллект, в этом нет никаких сомнений.. это новое, а все новое переоценено. через пять лет все оглянутся назад и скажут: «наверное, мы переоценили это».
«новый программист»: ваш старый знакомый кент бек что-то сказал, когда волна ии поднималась. он сказал, что неохотно использовал chatgpt и обнаружил, что 90% его навыков теперь бесполезны, а ценность остальных 10% выросла в тысячу раз. насколько полезным может быть генеративный ии?
дядя боб: честно говоря, я не думаю, что ии особенно полезен. в самых простых случаях это может быть в некоторой степени полезно. например, когда я выполнял какую-то очень простую работу по кодированию, ии давал мне некоторый код, я смотрел на него и думал, что все в порядке, поэтому продолжал над ним работать. затем ии часто будет продолжать работать в соответствии с контекстом, пока все не станет интересным, и ии станет все более ненадежным——чем сложнее что-то, тем менее полезно。
ии может справиться с мелочами, но не совсем, если я хочу, чтобы он провел рефакторинг и улучшил дизайн. более того, ии мало чем может помочь, когда дело доходит до написания тестов.
«новый программист»: вы уже говорили, что пройдет много времени, прежде чем школы программирования устареют. будет ли какой-то конкретный момент времени, который идентифицирует этот момент? есть ли конец технологиям?
дядя боб: это интересный вопрос, но я бы подумал об этом с точки зрения научной фантастики.когда-нибудь в будущем мы создадим машины, способные думать как люди, навыки программирования устареют. но давайте будем честными, именно тогда все навыки устаревают.так что я не уверен, что этого стоит ожидать. если это и произойдет, я думаю, что это очень, очень далеко в будущем. знаете, человеческий мозг устроен гораздо сложнее, чем весь интернет.
«новый программист»: действительно, это мне напоминает, что вы тоже говорили, что всем следует вернуться к азимову.три закона робототехники, даже если это создаст расу «роботов-рабов». как вы понимаете общий искусственный интеллект (agi) с философской точки зрения?
дядя боб: да, хотя я думаю, что это вряд ли будет достигнуто в краткосрочной перспективе, у нас уже есть генетические технологии. если мы когда-нибудь создадим сознательные машины для нашего собственного выживания, я думаю, что-то вроде трех законов азимова будет абсолютно необходимо.
«новый программист»: исходя из этого, ии должен бытьоткрытый исходный кодчтобы этого не произошло? нужен ли людям открытый ии или закрытый ии?
дядя боб: разные компании определенно хотят хранить свои секреты, и я не думаю, что в этом есть что-то плохое само по себе.настоящая проблема ии — это потребление энергии.он потребляет много энергии и будет продолжать расти по мере того, как технологии становятся более сложными. это делает его стоимость достаточно высокой. итак, нам нужно увидеть, как далеко может развиваться сегодня ии, и насколько хорошо могут работать эти большие языковые модели. однако они потребляют много энергии, как и атомные электростанции.
«новый программист»: давайте отойдём от искусственного интеллекта и поговорим о человеческих темах.
кто-то однажды спросил: «кто ваш наставник в жизни?», и вы ответили: «книги — мой наставник». через книги вы познакомились с такими выдающимися личностями, как мартин фаулер и кент бек, и даже впоследствии работали с этими двумя. итак, как в том годуодин из 17 человек, создавших agile-манифест., можешь рассказать, какие у вас отношения?
дядя боб: раньше у нас часто было много встреч, связанных с программным обеспечением, но сейчас таких встреч гораздо меньше. я посещаю различные типы конференций, такие как конференции по языку c, конференции по шаблонам проектирования и некоторые общие конференции по разработке программного обеспечения. благодаря этой деятельности я познакомился со многими людьми.
например, я встретился на конференции по шаблонам проектирования.кент бек, встретились на одной из первых конференций по экстремальному программированию.мартин фаулер. с большинством этих людей я встречался лично. они были и моими партнерами, и моими наставниками. я многому у них научился. они также мои ровесники, и мы вместе учимся и прогрессируем. многое из того, что я узнал, было взято из книг по программированию 1960-х и 1970-х годов, таких как «искусство компьютерного программирования» дональда кнута, и книги той эпохи были для меня очень важными источниками информации.
итак, когда мне исполнилось около 30 лет моей карьеры, я начал ходить на конференции и встречаться с людьми лицом к лицу, и именно в этой среде мы основалигибкая встреча. большую часть людей, присутствовавших на конференциях agile, я знал раньше либо по переписке, либо встречаясь на конференциях.
«новый программист»: мы часто можем увидеть точку зрения, а именно: «действительно ли применима гибкая разработка?»
в прошлом был период, когда многие разработчики стремились к быстрой доставке и игнорировали качество программного обеспечения. возможно, это неправильное понимание гибкости.
дядя боб: это действительно неправильное понимание agile. agile — это не значит быть быстрее, это значит понимать, где вы находитесь. вы занимаетесь гибкой разработкой, чтобы точно знать, какого прогресса вы добиваетесь, как быстро вы его делаете и соблюдаете ли вы сроки. другими словами, agile — отличный способ помочь вам понять, в каких проблемах вы находитесь. это гарантирует, что вы не удивитесь, когда сроки сдвинутся, и дает каждому четкое представление о прогрессе, потому что мы можем быть не такими быстрыми, как мы думали.
многие люди ошибочно полагают, что agile — это быстрый метод, а некоторые также позиционируют его как быстрый метод, но это всегда недоразумение.ловкость — это не способ сделать вас быстрее, это способ показать вам, насколько вы быстры.итак, agile не устарел; это не устаревшая технология. если вы хотите знать фактический прогресс и дату завершения вашего проекта, agile — отличный способ сделать это.
«новый программист»: меня очень глубоко поразил один из ваших твитов: «изначально компания agility была основанаразработчикинициирован, норуководитель проектавмешательство на ранних этапах agile-движения разрушило первоначальные отношения сотрудничества. можете ли вы рассказать мне эту историю?
дядя боб: действительно, agile-движение изначально было начато группойпрограммистинициирован. семнадцать участников встретились на курорте snowbird resort, чтобы создать agile-манифест. мы все программисты или, по крайней мере, имеем сильный технический опыт. это движение началось не с точки зрения управления проектами, но один из основателей, кен швабер, решил начать курс под названием «сертификация».скрам-мастер(scrum master)». этот курс предназначен для обучения людей, которые хотят стать scrum-мастерами, и научит их тому, как помогать команде в использованиискрам-метод——это модель гибкой разработки.
менеджеры проектов проявили большой интерес и записались на такие курсы. поскольку большинство участников были менеджерами проектов, а не программистами, в результате получился оригинальныйдвижение, начатое разработчиками, постепенно трансформировалось в движение, возглавляемое менеджерами проектов.программисты были недовольны, поскольку чувствовали, что их исключают из этой инициативы.
чтобы решить эту проблему, группа из нас началадвижение за создание программного обеспечения(software craftsmanship) и выпустил манифест мастерства в попытке воссоединить менеджеров проектов и разработчиков. однако существенных результатов это не принесло.
в конечном итоге мы выделили «официальное движение agile», сосредоточенное вокруг управления проектами, и настоящее движение agile, возглавляемое разработчиками. последний по-прежнему намерен работать четко и упорядоченно, уточняя свою позицию и направление развития.
«новый программист»: итак, в чем же значение роли scrum master? в чем важность этой роли? как вырастить отличного scrum-мастера?
дядя боб: скрам-мастер изначально был задуман как член команды, ответственный за напоминание другим членам об обязательствах, взятых на себя при использовании методов scrum или agile. в обязанности входит еженедельная проверка прогресса команды, например, подтверждение того, что тестовый код был написан в соответствии с планом и что были соблюдены заранее определенные методы оценки. эта роль чередуется внутри команды, обычно между разными участниками. в зрелых командах после нескольких недель практики нет необходимости в курировании выделенного scrum-мастера, поскольку члены команды уже способны сознательно выполнять установленный процесс.однако с привлечением менеджера проекта эта роль постепенно превратилась в функцию управления проектом, что далеко от первоначального замысла scrum-мастера.в результате роль скрам-мастера сегодня существенно изменилась.
«новый программист»: вы только что упомянули историю создания программного обеспечения, которая напомнила мне, что ваша подпись в твиттере также гласит: «мастерство(мастерство), это очень старое слово, сегодня его следует переводить как «дух мастера”。
как следует понимать это слово? неужели в сегодняшней быстрорастущей отрасли нет времени сосредоточиться на качестве? по мере развития ии доставка программного обеспечения становится все быстрее. я думаю, ии поможет, верно?
дядя боб: эти большие языковые модели — действительно интересные инструменты, и я думаю, они будут полезны программистам. но они не заменят программистов и не будут заниматься всем кодированием. они не очень хороши в написании кода, но могут предложить несколько интересных предложений. так что я думаюони будут полезны, но не настолько, чтобы нам больше не нужны программисты.
что касается мастерства, то это отношение, отношение к работе. лучший способ объяснить это так: когда вы приходите домой после долгого рабочего дня и смотрите в зеркало, вы можете сказать себе: «я сегодня отлично поработал и горжусь своей работой».как ведет себя мастер.мастера удовлетворены качеством своей работы. они усердны и дисциплинированы, чтобы выполнять высококачественную работу. это основа мастерства разработки программного обеспечения.
конечно, мы можем обсуждать множество технологий и методов, таких как разработка через тестирование (tdd), простое проектирование, принципы solid и т. д. существует множество технологий и концепций. но основная идея заключается в том, что в конце каждого дня вы можете сказать себе: «я сегодня отлично поработал». к сожалению, многие программисты идут домой, смотрят в зеркало и чувствуют, что им нужно принять душ. потому что они чувствуют, что у них был плохой день. они написали кучу плохого кода только для того, чтобы уложиться в срок, и им нужно смыть эти плохие чувства. в этом и заключается мастерство – идти домой, зная, что ты хорошо поработал, и чувствуя гордость за свою работу.
«новый программист»: ваша книга "способ очистки кода" (чистый код) также отражает принцип мастерства. сосредоточено ли так называемое «дао» чистого кода на реализации бизнес-логики, а не на системном программировании? или между ними нет никакой разницы?
дядя боб:чистый код — это набор концепций и методов, которые помогут вам работать как мастер, и вы сможете пойти домой с гордостью за свою работу.неважно, реализуете ли вы бизнес-логику или занимаетесь системным программированием. это всего лишь набор техник и концепций, которые помогают вам хорошо выполнять свою работу и приносят чувство удовлетворения.
«новый программист»: раньше я обнаружил, что многие люди, будь то сообщество разработчиков в китае или сша, думают, что чистый код означает многоабстрактный. так как же нам избежать написания чрезмерно продуманного и чрезмерно абстрактного кода?
дядя боб: да, это очень странное явление, потому что моя книга сама по себе не рекомендует чрезмерной абстракции и не пропагандирует большую абстракцию. книга предлагает следующее:используйте абстракции умеренно и уместно, но не рекомендуется переусердствовать с дизайном.. судя по всему, есть некоторые программисты, которые считают, что любая формакосвенныйвсе плохие, они думают, что единственный способ написать хороший код — это попытатьсяпрямой. я не согласен с этой точкой зрения. я думаю, что умеренное количество косвенности и абстракции может быть полезным, но вы должны быть очень осторожны, потому что за абстракцию приходится платить. итак, используйте абстракцию, когда она помогает решить проблему, но помните о ее стоимости и используйте ее экономно.
«новый программист»: вероятно, именно поэтому вы некоторое время назад сказали, что выпустите новую версию "чистоты кода". могу ли я понимать это как очистку исходников? но раз уж вы решили полностью переделать и переписать книгу, почему бы не дать ей новое имя?
дядя боб: название книги было выбрано издателем. в основном я хотел повторить основную концепцию «чистого кода», но использовал другие выражения и развивал тему с разных точек зрения.
оригинальная книга была написана 16 или 17 лет назад для тогдашней аудитории. и сейчас я пишу эту книгу для сегодняшних читателей. оно попробуетрешайте более распространенные проблемы сегодня. я бы использовал другой язык и использовал разные подходы, делая его менее директивным и более информативным, пытаясь передать одну и ту же мысль разными способами. послание то же самое, просто выражено по-другому. я думаю, что эти две книги в конечном итоге будут дополнять друг друга, и читатели должны прочитать их обе.
«новый программист»: давайте поговорим о вашей новой книге «функциональный дизайн».. прежде всего, почему вы решили написать эту книгу?
дядя боб:за последнее десятилетие значение функционального программирования возросло. хотя люди начали обращать внимание на функциональное программирование примерно в 2005 году, на самом деле это более старая концепция, существующая как математический язык с 1936 года, и один из самых ранних языков программирования был функциональным.
на заре функциональные языки были дорогими в исполнении, медленными и требовали больших объемов памяти. но теперь прогресс в вычислительной мощности и ресурсах памяти сделал стоимость функционального программирования практически незначительной. это дает преимущества функционального программирования, особенно когда речь идет о многопоточном программировании. функциональное программирование позволяет писать многопоточный код, не беспокоясь об условиях гонки или одновременных обновлениях. это связано с тем, что функциональное программирование не имеет операторов присваивания и не меняет состояние переменных.
когда я изучал clojure, я обнаружил, что это интересный способ кодирования и решения проблем. я думаю, его следует сочетать с другими инструментами, такими как объектно-ориентированное программирование и структурное программирование.однако в последние годы в некоторых статьях утверждается, что функциональное программирование противоположно объектно-ориентированному программированию и что объектно-ориентированное программирование устарело. я не согласился с этой точкой зрения и решил написать эту книгу.
обложка книги «функциональный дизайн: принципы, шаблоны и практика».
в этой книге обсуждается, как функциональное, объектно-ориентированное и структурное программирование работают вместе для создания более совершенных систем. он начинается с базовых концепций, постепенно выстраивает принципы и шаблоны проектирования и, наконец, объединяет их в законченное небольшое приложение. надеюсь читатели поймутфункциональное программирование не существует изолированно., который работает со всем, чему мы научились за последние 50 лет.
«новый программист»: я также собрал много вопросов о новой книге от сообщества разработчиков csdn, и большинству людей больше всего интересно, почему вы выбрали именно ее.клоджурвместо scala писать код в книге? это потому, что вы хотите использовать более функциональный язык, не поддерживающий классы и наследование, чтобы доказать, что ваши принципы solid применимы и в функциональном дизайне?
дядя боб: часть причиныдействительно. хотя clojure не является «чистым» функциональным языком, он очень удобен для написания функциональных программ. однако есть еще одна, возможно, более важная причина, по которой я выбрал clojure:clojure очень простой。
в этой книге я хочу донести идею функционального программирования, а не преподавать сложный язык функционального программирования. особенно мне не хочется учить язык со сложной грамматикой. синтаксис clojure очень прост и почти не имеет сложного синтаксиса. изучить clojure легко, и вы можете освоить его, прочитав код clojure.
поэтому, когда я показываю код в книге, я не вдаюсь в подробности того, как работает clojure. вместо этого я объясняю некоторые основные концепции и позволяю читателю разобраться с большей частью остального. я также рекомендую заинтересованным читателям ознакомиться с некоторыми другими документами. но в целом clojure очень прост для понимания, поэтомуте читатели, которые мало что знают о clojure или функциональном программировании, могут больше сосредоточиться на концепции функционального программирования, не беспокоясь о самом языке.
«новый программист»: я помню, как вы однажды сказали в твиттере, что если кто-то хочет, чтобы его упомянули в вашей следующей книге, он может предоставить фрагмент кода, который, по его мнению, будет самым аккуратным. часто ли это происходит? сколько человек обычно отправляют код? могут ли китайские разработчики тоже подать заявку?
дядя боб:да, я написал это в твиттере и получил довольно много ответов. некоторые люди отправляют фрагменты кода по ссылкам github или напрямую. вероятно, я буду использовать часть этого кода в следующей книге.если китайские разработчики захотят представить код, который, по их мнению, будет очень аккуратным, я буду рад его рассмотреть.но я не могу обещать использовать код каждого, потому что объем книги ограничен, и я не могу поместить в нее код каждого.
«новый программист»: есть ли у вас какие-либо инновационные идеи для цифровых учебников и платформ онлайн-обучения? в наши дни люди, кажется, менее охотно читают бумажные книги. как эти новые форматы произведут революцию в преподавании и изучении программирования? как вы планируете обучать программированию следующее поколение?
дядя боб:действительно,сейчас мы живем в эпоху цифровых технологий, когда продолжительность концентрации внимания сократилась до менее 20 минут. но если вы действительно хотите чему-то научиться, вам нужно замедлиться и сосредоточиться на учебе. некоторые из моих последних книг сопровождаютсявидеосодержание, читатели могут посмотреть живые демонстрации сеансов программирования по url-адресу в книге. такое сочетание текста и видео очень эффективно.
кроме того, есть очень интересный способ.онлайн лекция. например, после прочтения печатного материала книга предложит вам посетить определенный url-адрес, чтобы посмотреть соответствующую лекцию. я считаю, что эти методы очень полезны.
я не думаю, что времена бумажных книг прошли. их можно преобразовать в электронные книги, pdf-файлы или версии для онлайн-читалок, но учебники не исчезнут. текст — это носитель с очень высокой плотностью информации, который более плотен, чем видео или лекции, а также на нем удобнее контролировать ход обучения. поэтому я думаю, что сочетание различных форматов обучения может быть более эффективным, используя как текст, так и видео.
«новый программист»: ваша книга предназначена для читателей всех уровней знаний, от новичков до опытных профессионалов. это, безусловно, создает различные проблемы, когда речь идет о балансе глубины и широты контента.
дядя боб: моя книга действительно ориентирована на самую разную группу людей, как начинающих, так и профессиональных программистов. ключевым моментом является обеспечение ценности для обоих типов читателей, не усложняя чтение для одного и не упрощая для другого.
когда я преподаю и пишу, я предполагаю, что мои слушатели или читатели такие же умные, как и я, и могут понять мой контент. возможно, с их стороны это потребует некоторых усилий, но я уверен, что они поймут. я не корректирую содержание, основываясь на своем мнении о способностях читателя. я просто передаю свое сообщение напрямую, как будто разговариваю со сверстником.
может быть, у меня больше опыта, может быть, я прошел через больше и совершил больше ошибок. поэтому я могу поделиться своим опытом и историями. но я не буду замедлять или упрощать это.
«новый программист»: как за эти годы изменился способ преподавания программирования? какие новые подходы и уроки вы усвоили, чтобы идти в ногу с развивающейся технологической средой?
дядя боб: раньше я обычно использовалпрозрачные пленкии отображать содержимое курса через проектор, обычно подготавливая большую стопку пленки для отображения содержимого страница за страницей. со временем теперь используюipadочень весело делать презентацию, подключить ее к проектору и рисовать на экране ipad с помощью apple pencil, и все будет отображаться на большом экране в реальном времени.
во время пандемии covid-19 мы начали преподавать с помощью инструментов дистанционного обучения, таких как zoom. сейчас большая часть моего преподавания проводится удаленно. я до сих пор использую слайд-презентации и экранные рисунки, и эти методы по-прежнему работают. единственная разница в том, что при дистанционном обучении я не могу напрямую видеть реакцию аудитории, а это не так важно.половина удовольствия。
«новый программист»: еще одно изменение, вызванное эпидемией, заключается в том, что многие программисты обеспокоены тем, что их заменит искусственный интеллект. ранее я видел заявление о том, что изучение функционального дизайна может помочь им сохранить работу. можете ли вы рассказать об этом подробнее?
дядя боб: функциональный дизайн и концепции из книг по функциональному дизайну на самом деле созданы для того, чтобы помочь вам стать более зрелым программистом.добавляйте новые инструменты в свой «набор инструментов». функциональное программирование — хороший инструмент, объектно-ориентированное программирование — хороший инструмент, а структурное программирование — тоже хороший инструмент. они должны быть в вашем наборе инструментов. разработка через тестирование — отличный инструмент, и лучше всего иметь его под рукой. принципы solid тоже хороши и обязательно должны быть в вашем наборе инструментов. итак, цель этой книги — расширить инструментарий разработчика, который обязательно поможет вам сохранить свою работу.но я не думаю, что вам стоит слишком беспокоиться о том, что вас заменит ии. это вряд ли произойдет при моей жизни, а может, и не произойдет при вашей жизни, а может, и никогда не произойдет. у меня такое ощущение, что мы не увидим машин, способных обладать интеллектом человеческого уровня.
«новый программист»: что касается функционального дизайна и объектно-ориентированного программирования, я думаю, многие люди спрашивали вас, какой из них лучше. но я хочу спросить: как вы думаете,в чем нынешний ии лучше?например, подходит ли функциональное программирование для генерации кода ии? у него нет состояния, функция может быть сгенерирована при использовании, и каждая функция также может автоматически генерироваться и проверяться ии. итак, если ии лучше разбирается в функциональном проектировании, столкнутся ли программисты, знающие только функциональное программирование, с более серьезным кризисом?
дядя боб:это не имеет значения, потому что ии ничего не может сделать, и он не лучше генерирует функциональный код, чем объектно-ориентированный или структурированный код.вы можете думать об ии как омладшие программисты с половиной мозга, которые так и не повзрослеют. он даст вам несколько предложений, большинство из которых не очень хороши, а некоторые могут быть и хороши, но их необходимо изменить, потому что код, написанный ии, всегда беспорядочен.
ии — это то, что он есть, и он может быть полезен, но вам не следует менять направление своей карьеры, чтобы приспособиться к ии. ии — это инструмент, и вы можете научиться им пользоваться, но не стоит менять свои карьерные планы только ради определенного инструмента ии.
«новый программист»: если бы к вам подошел новый человек и спросил: «какой язык мне выбрать в качестве первого языка программирования?» как бы вы обычно ответили?
дядя боб: ну, вы можете выбрать яву. при этом c# также является очень хорошим языком. clojure тоже хорош. также доступен язык c. c++ немного сложен и сложен, но это тоже вариант. язык go тоже очень хорош, это хороший язык...
на самом деле, какой из них вы выберете, не так уж и важно. программирование есть программирование, не важно, с какого языка вы начинаете. самое главное, вам нужно выучить следующий язык. не останавливайтесь на одном языке.выучите один, потратьте несколько месяцев, пока не достигнете определенного уровня владения, затем выучите другой и так далее, каждый год изучая новый язык. думайте об изучении языка как о развлечении и найдите язык, который вы еще не выучили. вы можете никогда не использовать его на работе и никогда больше не использовать его, но возьмите за привычку изучать новый язык каждый год или два.неважно, с чего вы начнете, важно то, что вы продолжаете учиться.
«новый программист»: порекомендовали бы вы младшим программистам участвовать в проектах с открытым исходным кодом? в каких впечатляющих проектах с открытым исходным кодом вы принимали участие и можете ли вы поделиться этой историей?
дядя боб: мы с сыном начали проект 20 лет назад, и он продолжается до сих пор, и это отличный проект. хотя я больше не участвую в этом, многие другие продолжают.
если вы младший программист или молодой программист и хотите освоить новые идеи, я рекомендую присоединиться к проекту с открытым исходным кодом. попробуйте отправить несколько запросов на включение и внесите свой вклад, чем сможете. это, во-первых, отличный способ помочь другим, а во-вторых, прекрасная возможность для обучения. в любом случае, вы правы, я очень рекомендую людям участвовать в проектах с открытым исходным кодом, это отличный способ расширить свою карьеру.
«новый программист»: знаете ли вы о «кризисе 35»? многие программисты по достижении определенного возраста сталкиваются с двумя путями: либо перейти на менеджмент, либо уйти на пенсию.
дядя боб: это реальная проблема, учитывая предпочтение технологической индустрии молодым людям. на самом деле, разработчик задал мне аналогичный вопрос, и я его хорошо помню. его точные слова были: «дядя боб, почему ты все еще занимаешься программированием в 70 лет?» он прав, мне сейчас 71 год, и я все еще пишу код.
идея о том, что программирование предназначено только для молодежи, на самом деле является иллюзией, но на самом деле это очень влиятельная иллюзия. эта иллюзия существует потому, что спрос на программистов взлетел как ракета за последние 70 лет.
подумайте об этом так: каждые пять лет число программистов в мире удваивается. это означает, что нам приходится удваивать число программистов каждые пять лет, а это означает, что половина программистов в мире имеют опыт менее пяти лет, а три четверти программистов имеют опыт менее десяти лет. другими словами, три четверти программистов в мире моложе 35 лет. поэтому, когда вы оглядываетесь вокруг, вы видите только молодых людей. вы можете спросить, где же все эти старые программисты?на самом деле мы все еще здесь, просто не так заметны в численности.
это создает иллюзию, что программирование подходит только молодежи, но на самом деле это совершенно неверно. чтобы стать по-настоящему сильным программистом, нужно много времени на накопление. возможно, некоторые старшие программисты считают, что иметь десятилетний опыт — это здорово, но еще через пять лет он может стать лучшим программистом.
итак, если вам действительно нравится писать код, вы думаете, что это ваше любимое занятие, и хотите продолжать этим заниматься, не сдавайтесь. вам не обязательно быть менеджером. если есть люди, которые умеют управлять, позвольте им это сделать. если вы хотите продолжать писать код, продолжайте в том же духе. вам не обязательно менять карьеру или рано выходить на пенсию. это не значит, что ваш мозг перестанет работать, когда вам исполнится 36 лет. действительно, сейчас в эту отрасль приходит так много новых людей, и программированию учатся не только молодые люди, но и люди всех возрастов.это не значит, что у вас нет шанса.
«новый программист»: это напоминает мне, что многие программисты сейчас испытывают неуверенность в себе, столкнувшись с ии. но на самом деле в неуверенности в себе нет ничего нового, и в предыдущие эпохи многие старые программисты сталкивались с той же проблемой. испытывали ли вы когда-нибудь раньше чувство неуверенности в себе?
дядя боб: когда я впервые начал программировать, я был еще ребенком и всегда чувствовал, что могу сделать себе имя. в то время у меня никогда не было сомнений в себе.
вместо этого я начал совершать ошибки, меня увольняли и терпели другие неудачи. неуверенность в себе в это время на самом деле полезна.умеренная неуверенность в себе на самом деле вполне полезна. потому что со временем ты научишься с этим справляться.вы думаете: «хорошо, я знаю, как избежать этих ошибок. я знаю, что я не идеален, но пока я концентрируюсь, буду осторожен и разговариваю с другими, я смогу постепенно решить эти проблемы». уилл преодолеет эти неуверенность в себе. на самом деле, период неуверенности в себе – это не обязательно плохо. это позволяет вам расти и становиться сильнее.
«новый программист»:напоследок, можете ли вы дать какой-нибудь совет нынешним разработчикам? особенно те программисты, которые растеряны или находятся в растерянности, когда дело доходит до программирования ии.
дядя боб:если вы не знаете, что делать, столкнувшись с программированием ии, отключите ии. просто игнорируйте это.потратьте еще месяц на написание кода самостоятельно, а затем включите ии. возможно, тогда он посмотрит на ваш код и увидит, что вы хотите сделать, и тогда сможет дать лучшие предложения.
например, представьте, что вы новичок и учитесь водить машину. вы никогда не прикасались к рулю и хотите использовать автоматическое вождение, как только начнете движение. как только вы нажмете «автопилот», машина начнет двигаться. вы можете до смерти испугаться, думая: «сначала мне придется выключить эту штуку. дай мне немного опыта. пока ты не научишься водить, попробуй автопилот еще раз». подумайте: «о, теперь я понимаю, как эта штука работает». тогда вы сможете лучше использовать ее.то же самое относится и к ии. поначалу это может быть не так гладко, но со временем вы будете становиться все более и более опытными.