Автор: Чжан Шэньцзя
Впервые опубликовано в официальном аккаунте WeChat: Jia Talk (jia-talking)
В ресторане был повар, который очень хорошо готовил. Благодаря сарафанному радио клиенты приходили отовсюду. Но для владельца ресторана это было не только хорошей новостью, потому что клиенты приходили ради мастерства повара, а не ради ресторана. Владельцу пришлось найти способ удержать повара; иначе, как только его переманят к себе, дела ресторана резко пойдут вниз. Однако даже если владелец не жалел средств, чтобы обеспечить преданность повара, риски всё равно существовали:
Когда повар отдыхал или уходил в отпуск, вкус блюд не мог удовлетворить клиентов;
Был всего один повар. Если вы хотели открыть филиалы в нескольких местах, вкус нельзя было гарантировать;
Каким бы искусным ни был повар, он мог готовить только одно блюдо за раз, и поскольку клиентов становилось всё больше, выпуск всегда отставал от спроса;
Повар в конце концов состарится и уйдёт на пенсию. Если он возьмёт учеников, как можно будет и дальше гарантировать их верность?
Однажды владелец внезапно осознал, что вкус блюд определялся процессом приготовления повара, а не самим поваром. Если повар согласится записать рецепт каждого блюда, разве нельзя нанять других поваров, чтобы они следовали ему? Хотя другие, готовя по рецепту, возможно, и не достигнут исходных 100 баллов, они всегда смогут достичь 90 баллов, а такая разница незаметна для обычных посетителей. Таким образом, пока существует рецепт, качество блюд ресторана можно гарантировать, и расширение торговой точки или открытие филиалов больше не будет проблемой.
Итак, владелец проговорил с поваром всю ночь и убедил его присоединиться и внести свои рецепты в качестве технической доли. Несколько лет спустя ресторанный бизнес становился всё лучше и лучше, было открыто бесчисленное множество филиалов, владелец заработал много денег, а повар также получил щедрые дивиденды и больше не должен был каждый день полагаться на своё кулинарное мастерство.
Что такое программирование?
До появления стиральных машин люди могли стирать одежду только вручную, что требовало ряда процессов: замачивания, трения, полоскания и отжима. Изобретение полностью автоматической стиральной машины сделало стирку настолько простой, что её мог выполнить каждый, тем самым высвободив время, которое раньше уходило на стирку, для других дел. По мере того как стиральные машины продолжают развиваться и совершенствоваться, весь процесс стирки в конечном итоге будет забыт людьми; только инженеры, проектирующие стиральные машины, понимают этот процесс, поскольку они отвечают за его оптимизацию и улучшение.
Так называемаяпрограмма — это логический поток, предназначенный для реализации требования.Рецепты шеф-повара и рабочий процесс стиральной машины — и то и другое программы, только первые исполняются людьми, а второй — машинами. Именно благодаря тому, что программы служат посредником, мы можем разделить роли проектировщика, вызывающего и исполнителя. Хотя результат выполнения программы может не удовлетворить её проектировщика, она уже может существовать независимо от ограничений проектировщика по времени и пространству и может быть выполнена, проверена и улучшена другими.
Так называемоепрограммирование — это написание программ.Запись процесса приготовления в рецепты по сути и есть программирование. Благодаря программированию мы более полно понимаем и раскрываем суть вещей, позволяя тому, что когда-то было доступно только человеку, группе, месту или даже моменту, существовать и развиваться независимо. С этой точки зрения не будет преувеличением сказать, что программирование — это создание жизни.
Программирование можно назвать своего рода стандартизированным письмом.Стандартизация гарантирует качество услуг и продуктов, а также делает возможным крупномасштабное тиражирование и расширение. KFC полагается на свое руководство по обработке пищевых продуктов, детализированное вплоть до температуры масла и секунд жарки картофеля фри, чтобы открывать филиалы по всему миру. Если бы Тао Хуаби не могла четко описать рецепт и процесс производства своего соуса чили и передать их стандартизированной производственной линии для изготовления, то сегодня «Lao Gan Ma» была бы в лучшем случае продуктом уровня мастерской в маленькой деревне и никогда не смогла бы попасть на наш обеденный стол.
В нашей повседневной жизни мы взаимодействуем с разными технологическими продуктами и услугами, такими как навигация, поисковые системы, чат-программы... Вы когда-нибудь задумывались, какие принципы стоят за этими продуктами и услугами? Я считаю, что за исключением сообщества программистов, подавляющее большинство людей не будет задумываться над этими вопросами, потому что:
«Это меня не касается! Я не собираюсь заниматься этим делом...»
«Только профессионалы могут это понять. Я на это не способен!»
«Главное, чтобы работало, зачем столько думать? Это слишком утомительно!»
Они не ошибаются, думая так, потому чтосуть программирования в следующем: спроектировать логический поток для реализации заданного требования, чтобы вызывающие могли достичь своей цели, не нуждаясь в понимании деталей реализации.
Поскольку широкие понятия программы и программирования слишком общие, чтобы избежать концептуальной путаницы, «программа» и «программирование», упоминаемые ниже, конкретно относятся к программам, написанным на компьютерных языках программирования и выполняемым машинами.
Освободите время и внимание
Предположим, вы некоторое время работали на должности и, основываясь на опыте, пришли к выводу, что перед уходом с работы каждый день нужно сделать следующие три вещи:
A. Запросить данные определенного бизнеса за день во внутрикорпоративной системе компании (около 10 минут)
B. Оформите это в ежедневный отчёт и сохраните в архив (около 15 минут)
C. Отправьте ключевые данные по электронной почте руководителю (около 5 минут)
Вы можете, тщательно всё упорядочив, записать этот процесс, прикрепить его к столу или держать в голове. Это, естественно, намного лучше, чем у тех, кто не знает процесса; вы можете гарантировать, что каждый шаг выполняется без пропусков (хотя это и не полностью гарантировано). Но даже если вы потратили время на тщательное обдумывание, вам всё равно придётся самому выполнять этот скучный процесс каждый день... Подождите, разве я не могу нанять секретаря для этой задачи?
Конечно, можете.Наём других — это решение, которое обменивает деньги на время.Но при этом одновременно возникает много новых проблем:
Вам нужно тратить деньги (очевидно)
Вам нужно объяснить секретарю, что делать, и убедиться, что он понял (затраты на коммуникацию)
Когда секретарь не работает или в отпуске, вам всё равно придётся делать это самому (ограничение по времени)
Вам придётся нести ответственность за ошибки секретаря (качество не гарантировано)
Каждый раз, когда секретарь ошибается, вам нужно его обучать (затраты на обучение)
Секретарь будет напрямую иметь доступ к деловым данным и информации, и трудно предотвратить возможные утечки (риск безопасности)
Если вы смените секретаря на нового, всё вышеперечисленное придётся повторить...
Разве это не усложняет дело?Стоимость человеческого труда слишком высока, а предоставляемые услуги ненадёжны.Но если вы умеете программировать, возможно, вы сможете:
Напишите небольшую программу, которая выполняет процесс запроса данных, создания отчётов и отправки электронных писем, и настройте запланированную задачу для автоматического запуска каждый день;
Если вы осторожны, можете сделать так, чтобы программа сначала отправляла письмо на вашу собственную электронную почту, а после проверки, что всё в порядке, пересылала руководителю,
При необходимости вы также можете сделать так, чтобы программа отправляла аварийное уведомление на вашу электронную почту или телефон, когда во время выполнения происходит что-то неожиданное;
Если хотите, вы можете даже напрямую добавить функцию отправки отчётов по электронной почте во внутреннюю офисную систему...
Предположим, изначально у вас уходило 30 минут на выполнение процессов A, B и C вручную; тогда каждый запуск вашей программы экономит вам 30 минут. Если вы потратили три часа на написание программы, вы окупите затраты в течение недели, а всё после этого — чистая прибыль. Если программа работает достаточно долго, амортизированная стоимость одного запуска будет стремиться к нулю. Как видно,программирование — это решение, которое обменивает время на время.
Конечно, вам нужно записать процесс в виде программы, понятной машине; если требования изменятся, вам нужно соответствующим образом изменить программу; если во время выполнения возникнет ошибка, вам нужно отладить и исправить её... Но что важнее:Программа не получает зарплату, не может уволиться, не нуждается в отдыхе, не будет устраивать истерик и не может ошибаться. Пока ваш процесс правильный и ресурсы, от которых он зависит, не выходят из строя, она может работать 7*24 часа.
Каждый раз, когда мы пишем программу для реализации требования, это похоже на создание молотка. В будущем, когда вы столкнётесь с похожими проблемами, вы сможете использовать его для их решения. Конечно, молоток может быть неудобным, и его нужно постоянно улучшать и оптимизировать. Но в большинстве случаев этот молоток можно использовать напрямую. Иными словами:Вам нужно решить одну и ту же проблему только один раз, и вы не будете тратить время на повторяющуюся работу.
С помощью программирования вы можете передать часть или даже всю скучную повторяющуюся работу машинам, тем самымосвобождая своё время и внимание от конкретных дел, чтобы заниматься более ценными вещами.Например, исследовать и оптимизировать рабочие процессы, проводить время с семьёй или читать книгу...
Ощутите жизнь «с включёнными читами»
Друзья, которые любят онлайн-игры, возможно, знают о читах/плагинах. Это небольшие программы, работающие вместе с игрой, чтобы улучшить игровой опыт. Читы обычно делятся на две категории: одни — вспомогательные читы, упрощающие действия игрока в рамках игровой системы и предоставляющие такие функции, как автоподбор, автобой и переназначение клавиш; другие — жульнические читы, использующие уязвимости игры для создания несправедливых преимуществ и предоставляющие такие функции, как раскрытие карты, ускорение и бессмертие.
С быстрым развитием игровой индустрии многие современные онлайн-игры уже оснащены функциями, которые изначально предоставлялись вспомогательными читами. Вспомогательные читы постепенно отмирают, оставляя только жульнические читы и ряд производных цепочек индустрии чёрного рынка, знаете ли.
Когда мы говорим, что кто-то «читерит» (kāiguà), мы на самом деле имеем в виду, что его показатели (количество, скорость, точность...) явно выходят за пределы нормального диапазона. Когда первобытные люди племён сталкиваются с современными людьми, использующими различные технологические продукты, это, вероятно, ощущается как «Чёрт возьми, этот парень что, читерит?»
Вы должны знать, что причина, по которой люди, не отличающиеся физической силой, смогли покорить Землю, заключается в том, что мы создаём и используем инструменты, чтобы преодолевать физиологические ограничения и совершать то, что изначально было невозможно.В грядущую эпоху всеобщей информации программирование станет основным способом создания инструментов и даже их использования.
Большинство людей пассивно ждут, пока другие удовлетворят их потребности.Они используют программное обеспечение, которое им продвигают через различные каналы, такие как рекомендации друзей и реклама, а затем восхищаются: "Вау, оно даже это умеет!" Они пользуются только стандартными функциями существующего ПО, а любые персонализированные особые требования просто отбрасывают, потому что программы их не поддерживают. Это как с одеждой — большинство покупает только стандартные размеры. Если где-то жмёт, где-то болтается, где-то длинно, где-то коротко, приходится мириться.
Кроме того,Небольшая часть людей будет инициативно думать о том, как удовлетворить свои особые потребности.Они подумают: "Вот бы были функции XXX..." Они будут активно искать ПО, способное удовлетворить их потребности, изучать персонализированные параметры настройки программы или предлагать функции разработчикам. Подобно этому, люди, стремящиеся к индивидуальности, могут найти портного, чтобы сшить или перешить одежду на заказ так, чтобы она сидела как можно лучше.
ТолькоЧрезвычайно малая доля людей обладает способностью реализовывать те потребности, которые другие не могут удовлетворить.Они могут разрабатывать плагины на основе существующего ПО, проводить вторичную разработку программы или даже создавать совершенно новое ПО. Подобно этому, перфекционисты могут сами придумывать одежду и продолжать её переделывать, пока не останутся полностью довольны.
Если хорошее владение английским может открыть дверь в ваш мир и дать вам больше выбора, тохорошее владение программированием может дать вам возможность понимать и преобразовывать этот мир с "точки зрения Бога", с почти безграничными возможностями.Потому что в реальности всё в конечном итоге будет оцифровано, и с помощью программирования вы сможете обрабатывать и манипулировать информацией в любой форме — если вы можете это задумать, вы можете этого достичь.
Хотите испытать жизнь с "читерством"? Тогда начните изучать программирование прямо сейчас.
Воспитывайте глубокий способ мышления
Каждый должен учиться программировать, потому что это учит думать. — Стив Джобс, основатель Apple
Мышление — это то, что делает нас людьми, а программирование — это акт переосмысления человеческой мысли.Нам не нужно ясно продумывать каждое дело, чтобы выжить в реальном мире. В некоторых профессиях, связанных с механическими операциями, мышление вообще не требуется. Но при программировании мы можем написать программу только после того, как ясно всё продумаем. Создавая правильные, эффективные и элегантные программы, мы также формируем свой мозг, чтобы он мыслил яснее и работал эффективнее.
Программирование требует от нас объективно мыслить о сути вещей, сосредоточивая внимание на самих вещах, а не на их отношении к нам.Когда женщина в древности стирала грязную одежду у реки, она могла думать: «Вода в реке такая холодная... у этой одежды такой красивый цвет... почему мой ребёнок такой озорной...» Но когда мы проектируем программы для стиральной машины, мы думаем только: «О, есть куча грязной одежды, которую нужно постирать». На самом деле многие проблемы, которые долго вас мучили, становятся простыми и легко решаемыми, как только вы выходите за рамки «я» и начинаете мыслить «безличностно».
Программирование — это процесс «материализации» человеческих идей, который требует от нас мыслить глубже, тщательнее и всестороннее.Чтобы реализовать требование, нужно очень хорошо понимать его принципы и ход работы; иначе вы не сможете точно описать его на языке программирования так, чтобы машина могла это выполнить. В процессе материализации естественным образом всплывают структурные недостатки и логические пробелы в ваших идеях — вы всегда будете обнаруживать возможности, которые не рассматривали, и детали, требующие дополнительного обдумывания.
Программирование требует от нас разбивать вещи и процессы на части и мыслить целостно, самосогласованно на разных уровнях абстракции, что позволяет нам решать задачи огромного масштаба.При реализации требования любого значительного размера мы вряд ли будем одновременно рассматривать основной поток и детали работы, а также не можем думать сразу с нескольких точек зрения. После разумной декомпозиции мелкозернистые требования становятся простыми и понятными, что значительно снижает сложность реализации и при этом позволяет распределить работу между многими людьми. В зрелой программной или интернет-компании обычное дело, когда более тысячи инженеров совместно разрабатывают один и тот же продукт. Можете ли вы представить, чтобы столько людей вместе писали книгу?
Программирование — это непрерывный процесс решения задач, а также непрерывный процесс совершенствования методологии решения задач.Выдающийся программист всегда мастер по решению задач. На каждом этапе программирования — определении требований, проектировании решения, написании кода, отладке, исправлении ошибок — вы сталкиваетесь с бесконечными задачами. Стоит ли решать эту задачу? Когда? Какова её первопричина? Какие аспекты нужно учесть? Как следует делать компромиссы? Какие есть варианты? Каковы принципы выбора? ... Методология решения задач при полном раскрытии могла бы занять целую книгу, и я напишу отдельную статью о ней, когда у меня будет время.
Лучше выживать в будущем
Полвека назад 70% американского населения работало на фермах; с широким распространением автоматизированного сельского хозяйства эта доля сейчас составляет менее 1%. —Кевин Келли, «Неизбежно»
От высадки на Луну до производства нанороботов мы достигли того, что люди никогда не смогли бы сделать голыми руками, благодаря разработке и использованию различных машин. На сегодняшний день,простая повторяющаяся работа, выполняемая людьми, — такая как стирка, сельское хозяйство и производство, — почти полностью перешла к машинам, а деятельность человечества сместилась в сторону исследований, разработки и обслуживания машин.А работа, требующая сложных знаний и точных операций, — такая как вождение автомобиля и проведение хирургических операций, — также постепенно переходит к машинам.
Стиральные машины освободили руки домохозяек, а полностью автоматизированные сборочные линии сократили большинство заводских рабочих. Только в некоторых развивающихся странах, всё ещё пользующихся демографическим дивидендом (таких как Китай и Индия), где стоимость внедрения технологий выше стоимости рабочей силы, у работников ручного труда ещё остаётся некоторое пространство для выживания. Но стоимость технологий неизбежно будет продолжать быстро падать, и окно демографического дивиденда быстро закроется. Переломный момент скоро наступит.
У капитала есть своя воля, и она не меняется из-за человеческой природы.Когда качество продукции остаётся неизменным, а затраты на технологии значительно ниже затрат на рабочую силу, почти все работники ручного труда потеряют работу. Машины никогда не устают и не жалуются; они работают быстрее, лучше и дешевле людей. Как люди могут конкурировать с машинами?
В то же время,искусственный интеллект постепенно берёт на себя простые, повторяющиеся мыслительные задачи — такие как прокладка маршрутов и перевод, — а людям нужно лишь отдавать команды, задавать принципы и делать выбор.Искусственный интеллект даже вошёл в области, которые люди считали «тем, что делает нас людьми»: писательство, сочинение музыки, живопись...
Победа AlphaGo от Google над Ли Седолем стала знаковым событием, доказав, что искусственный интеллект уже может превзойти человека именно в той области, где люди превосходят всех больше всего — в мышлении. Сегодня лучшие шахматисты учатся у ИИ, и ежедневные тренировки между профессиональными игроками и ИИ стали нормой. Чистая машина побеждает чистого человека, а человек-машина побеждает чистую машину — это давно стало консенсусом в шахматном мире.
Когда способность ИИ в той или иной области мышления приближается к человеческой или превосходит её — что уже произошло во многих сферах — а его стоимость становится крайне низкой — что лишь вопрос времени — тогда, движимая волей капитала, эта область будет необратимо и стремительно захвачена ИИ. Сегодня мы уже привыкли использовать калькуляторы вместо собственного мозга для арифметики. В ближайшем будущем мы также привыкнем передавать многие задачи, которые когда-то требовали нашего собственного мышления, искусственному интеллекту, состоящему из бесчисленных программ. В обозримом будущем,вся нетворческая работа, основанная на опыте и навыках, исчезнет, а труд человечества сместится в сторону исследований, разработки и поддержки искусственного интеллекта.
Эпоха повсеместного внедрения ИИ несётся к нам со скоростью света, и в следующий миг она может оставить нас далеко позади, так что мы не успеем увидеть даже её задних огней. К тому времени почти всякая работа будет неотделима от искусственного интеллекта.Только те, кто понимает ИИ, умеет хорошо сотрудничать с ИИ и помогает улучшать ИИ, смогут лучше выжить в ту эпоху.
Каждому следует начать учиться программированию как можно раньше. Мои дети начали слишком поздно — я считаю, им следовало начать ещё тогда, когда они учили азбуку и цвета. — Барак Обама, 44-й президент США
В статье «Какой язык нам стоит учить в будущем?» я когда-то представлял технологию интерфейса «мозг-компьютер», которая может появиться в будущем, а вместе с ней — структурированный язык, общий для людей и машин. К тому времени наши мозги будут напрямую подключены к интернету и искусственному интеллекту, что позволит мгновенно загружать в мозг нужные знания и информацию... Мы станем подобны богам. Но предпосылка в том, что у тебя должна быть основа в программировании, чтобы наслаждаться плодами этой революционной технологии.
Что, ты к тому времени так и не выучил программирование? Тогда можешь умыться и идти спать.
Я знаю, ты спросишь...
Но я не собираюсь становиться программистом, так неужели действительно нужно учить программирование?
Ты можешь уметь водить машину, даже быть опытным водителем, которому действительно нравится водить, но это не значит, что ты готов стать таксистом, верно? Точно так же изучение программирования не обязательно означает, что ты станешь программистом, но оно может дать тебе совершенно новый взгляд, более глубокие способы мышления и мышление, нацеленное на эффективность, — всё это станет для тебя важной мягкой силой.В ближайшем будущем программирование станет навыком, необходимым каждому, так же как английский и вождение.К тому времени кем ты хочешь быть — опытным водителем или одним из автостопщиков?
«А разве этому вообще стоит учиться?» — на самом деле ужасный образ мыслей. Потому что многое сейчас кажется бесполезным, большинство людей отказывается это изучать, и лишь немногие пробуют с мыслью: «посмотрим, где это может пригодиться». А потом, в один день, когда этот навык и знание действительно понадобятся, те, кто решил отказаться, могут лишь вздыхать: «Вот если бы я выучил это тогда...» — а те, кто решил учиться, будут приятно удивлены: «Ого, это и здесь пригодилось!»...Так называемые «сюрпризы» и «удача» на самом деле всего лишь это: ты уже подготовился заранее, даже не осознавая этого.
Тогда могу ли я просто сейчас усердно работать, чтобы заработать денег, и позже нанять профессионального программиста?
Да, вы можете найти программиста, который воплотит ваши идеи, но все те многочисленные проблемы, с которыми мы сталкивались, когда раньше нанимали секретарей, нахлынут снова. Что ещё важнее, если вы не понимаете программирование, вы, возможно, даже не сможете вообще придумать жизнеспособную идею. Так же как человек, никогда не видевший автомобиля, подумал бы только о том, чтобы кто-нибудь другой построил ему более быструю конную повозку.Только после понимания принципов чего-либо его концепция может стать ясной в вашем сознании и по-настоящему встроиться в вашу когнитивную структуру.
Только имея ясную концепцию, вы можете думать о ней, судить, что она может, а что не может. Если концепция неясна, вы не сможете даже чётко сформулировать собственные потребности, не говоря уже о том, чтобы общаться и сотрудничать с программистами. Любой программист не выдержит, столкнувшись с требованием вроде «сделай мне Taobao».
Мой английский ужасен. Могу ли я всё ещё научиться программировать?
Английский — не узкое место в изучении программирования. Ключ — в понимании концепций и принципов, а также в изменении образа мышления.Хотя почти все ключевые слова языков программирования на английском, часто используемых из них всего несколько, и у книг по популярным языкам есть переводные издания. Если хотите, вы можете даже называть переменные и функции по-китайски. Так же как вы можете играть в английские игры, если узнаёте start/save/load/quit, и путешествовать за границей, если умеете сказать sorry и how much.
Я работаю уже много лет. Не слишком ли поздно начинать учиться сейчас? С чего мне начать?
Никогда не поздно начать, и, конечно же, чем раньше, тем лучше.Ван Цзянминь, автор первого китайского антивируса KV300, начал учиться программированию только в 38 лет. Что касается того, как учиться и с чего начать, это будет главной темой моих размышлений в этом году. Следите за моей последующей серией статей. А пока можете попробовать эти сайты:
http://www.codecombat.com : Учитесь через игру, есть китайская версия, подходит для начинающих
http://www.khanacademy.org : Видеоуроки исключительно на английском, подходят для отличников и тех, кто ведёт конспекты
http://www.codecademy.com : Интерактивная практика с практическими заданиями, лучшие результаты, но требуется некоторая база
Послесловие
Когда-то, чтобы создать веб-сервис, нужно было купить профессиональные серверы стоимостью в десятки тысяч юаней, платить большие деньги за аренду хостинга и пропускной способности, нанимать профессиональных специалистов-разработчиков или команды для его создания, а затем привлекать пользователей через рекламные и маркетинговые кампании... Порог был настолько высок, что большинство людей отказывались от затеи, и только предприятия могли себе это позволить.
Сейчас облачные серверы даже дешевле домашнего широкополосного интернета, различные технологии с открытым исходным кодом легкодоступны, а открытые платформы предоставляют бесплатных пользователей и каналы. Приложение может за одну ночь стать вирусным по всей стране благодаря социальным сетям... С ультрадешёвыми компьютерами размером с карту, такими как Raspberry Pi, а также с учётом того, что различные бытовые приборы становятся умнее, использовать программирование, чтобы воплотить свои маленькие творческие идеи в жизнь, совсем не сложно.
Мы живём в эпоху, когда, если вы готовы думать, вы можете изменить мир.Итак, вы готовы изменить мир или ждать, пока мир изменит вас?
Ссылки
[1] Стив Джобс — Утраченное интервью (1995), http://v.youku.com/v_show/id_XNDI1NjE1OTIw.html
[2] Обама: каждый должен научиться программировать, http://www.recode.net/2015/2/14/11559052/obama-everybodys-got-to-learn-how-to-code
Об авторе: родился в 1986 году, Стрелец, из Сианя, провинция Шэньси. Программист с независимым мышлением и любовью к чистоте кода, с широким кругом интересов. Хардкорный геймер, добившийся первого места в стране в кубике Рубика, сапёре, тетрисе и других областях, неоднократно бивший национальные рекорды, участвовал в качестве гостя в таких программах, как «Best Films» и «Day Day Up». Основатель сайта по сапёру (saolei.net).