Как программирование позволяет логично выражать мысли
Распространено мнение о том, что программы могут выполнять лишь набор заложенных в них команд и ничего больше. Так ли это на самом деле?
Этим вопросом в одной из своих статей задается один из основателей MIT Media Lab Марвин Минский. Он пытается развеять миф о том, что программа — лишь набор строгих правил и инструкций. Минский пишет: «Это ложное убеждение возникает из-за того, что люди путают форму с содержанием […] Разработчик должен четко следовать синтаксису выбранного языка, но содержание, которое он хочет через него выразить, ничем не ограничивается».
Программа STUDENT, разработанная сотрудником исследовательского центра Пало-Альто Дэниелем Боброу (Daniel Bobrow) еще в 1964 году, решала школьные задачки по алгебре в таком виде:
Маша была в два раза старше Ани, когда Маше было столько лет, сколько сейчас Ане. Если Маше сейчас 24, то сколько лет Ане?
Программа справляется с большинством заданий, так как может более или менее точно выделить из задачи ряд данных и на их основе составить и решить уравнение.
Далее, Минский обращает внимание на еще одно распространенное заблуждение. Естественно, что при написании программы нужно строго соблюдать ее синтаксис. Но это вовсе не означает, что вы имеете полное представление о том, что будет делать ваша программа.
Если вы пишите программу на Fortran и хотите вызвать уже имеющуюся процедуру, вам нужно воспользоваться одной из строго фиксированных команд, например, GO TO. Вы не можете заменить ее другой командой, но вы можете перейти с ее помощью в любое место программы, то есть у вас есть определенная свобода действий.
Хуже, когда человек считает, будто причина такой строгости кроется в самом компьютере. На самом же деле причина — в языке программирования. Суть любого языка программирования — перевести ваши мысли в набор нулей и единиц, которые будут понятны компьютеру, то есть язык — это средство, с помощью которого программист может выразить любые, порой даже самые сложные идеи.
Уместно вспомнить теорию Сепира-Уорфа, согласно которой язык, которым мы пользуемся, определяет наше мышление. Эта теория применима и к языкам программирования. Любой язык программирования — это инструмент, и для разных задач мы используем разные инструменты.
Трактор, велосипед и автомобиль Tesla — транспортные средства, но их используют для разных целей. То же и с языками. Ruby и JavaScript идеально подходят для создания сайтов, Java и C++ часто используют для создания торговых алгоритмов, Python и R отлично справляются со статистическими задачами и обработкой информации.
Языки часто выбирают на основе их удобства, безопасности и скорости — как и транспорт — в соответствии с текущей задачей. Поэтому обычно мы выбираем язык, который больше нам подходит. Некоторые разработчики выбирают Ruby за его гибкость, другие предпочитают строгость Java. Но иногда встречаются те, кто не любит объектно-ориентированное программирование: эти люди не используют его преимуществ просто потому, что они больше работали с методами процедурных языков.
Таким образом, особенности языка и в самом деле ограничивают наше мышление. Однако мы сами можем преодолеть эти ограничения. Например, в Lisp есть несколько необычных выражений («cons», «sexp», «car», «cdr»), не имеющих аналогов в других языках. И все же Lisp дает нам свободу выражения своих идей в рамках этого языка.
В книге Design Patterns хорошо показано, как нужно выражать мысли в C++. Больше половины паттернов из книги отсутствует в Lisp, так как их можно выразить в нем, не меняя структуры языка. Выходит, что языки программирования формируют ход наших мыслей, причем каждый по-своему.
Чтобы в этом убедиться, достаточно написать одну и ту же программу на разных языках и посмотреть, какие они выдадут результаты. Затем перевести программу с одного языка на другой. При том, что выбирать следует значительно отличающиеся друг от друга языки, например, те же Lisp и C++. В итоге вы поймете, что язык выражает не все ваши мысли, но самое главное — это то, что он позволяет оценить, что реализовать легко, а что — сложно.
Все языки объединяет то, что они могут выразить практически любые человеческие мысли и идеи. Студент, постоянно оставляющий флешку в компьютерном классе, может решить свою проблему, написав на Python клиентскую и серверную части приложения для хранения файлов в облаке. Так, к примеру, появился Dropbox.
Продолжая тему Python, можно вспомнить написанный на нем открытый проект Django. В 2003 году новостное агентство World Online решило заняться разработкой веб-фреймворка, который бы экономил время работы разработчиков. Два года спустя проект стал открытым. Python хорош тем, что он несложный, а главное — он позволяет разработчику быстро создать рабочий прототип.
Поэтому им часто пользуются в стартапах, а его популярность за последние несколько лет выросла до небес. Среди других продуктов на Python выделяются BitTorrent, MyPait, MoinMoin и другие. Этот язык можно дополнить Javascript, который помогает презентовать свои идеи. В итоге связка Python + Javascript идеально подойдет для реализации и представления любых бизнес-идей, а также их масштабирования.
Бывший сотрудник Microsoft Майк Болодзин в интервью Business Insider рассказывает о важности умения выражать свои мысли. Программисты должны уметь грамотно выражать даже самые обыкновенные идеи в письменной форме (помимо программирования).
Это поможет не только эффективнее общаться с руководством, но и предъявлять права на результаты своей работы. Болодзин вспоминает, как однажды не признали его вклад в работу: «Я спорил, что это моя идея, и знал, что этого не могли не заметить». Более ясная презентация своих идей позволит вам избежать подобных ситуаций.
Кроме того, если вы пишете хорошее программное обеспечение, вам, наверняка, придется больше общаться с другими людьми. По мнению Болодзина, если вы показываете хороший результат, то вам придется писать на родном языке столько, сколько вы обычно пишите на Java или Objective C. Для этого достаточно выработать привычку регулярно писать: это не сложнее, чем вести свой блог.
P.S. Мы достаточно регулярно разбираем подобные (и другие) вопросы на наших мероприятиях: основатели обмениваются опытом и могут обратиться за помощью к коллегам и экспертам. Вот тут можно ознакомиться с календарем семинаров, которые мы проводим по всей стране.
В качестве дополнительного чтения по теме — пара наших публикаций на Хабре: