Не секрет, что роботы и умные машины — это всего лишь воплощение неких концепций живой природы в виде созданных человеком механизмов. Жизнь за миллионы лет создала многообразие форм, и люди лишь копируют их в той или иной мере в своих инженерных творениях. Но возможно ли, чтобы концепции, применяемые людьми при разработке роботов и программ, которые ими управляют, использовались в реальной жизни для её изменения? Да, такое течение есть. Lifehacking это течение, которое зародилось как подход к построению собственной жизни как к написанию программы. При этом используются все те же подходы и приёмы, которые используют программисты.

Парадигмы программирования при решении обычных жизненных задач

  1. Процедурное программирование. Предполагает написание ряда подпрограмм, так называемых процедур, которые затем вызываются в основную программу и исполняются там. Это позволяет использовать нисходящий подход при написании программ, когда вначале пишется основной модуль, а при написании процедур подставляются "заглушки", а затем переходят к написанию каждой отдельной процедуры. Такой подход позволяет избежать некоторых ошибок при тестировании.

    В жизни такой подход соответствует разделению какой-то сложной задачи на несколько более простых подзадач. Например, когда планируется вымыть пол, вначале убирают все вещи, которые могут помешать мытью, затем пол подметают веником, после этого непосредственно моют пол, а затем, когда он высохнет, расставляют вещи на место. Каждая такая задача по отдельности гораздо проще и конкретнее, легче выполняется, чем если делать всё сразу.

  2. Функциональное программирование. Предполагает программу как особый вычислительный процесс, иногда рекурсивный, иногда циклический. Данные здесь нередко являются одним целым с исполняемым кодом.

    В жизни такой подход соответствует регулярной работе над задачей целенаправленно. Например, для того, чтобы заработать деньги, нужно запустить функцию работы, войти в неё и выполнять, пока не будет возвращён какой-то результат. При этом у нас нет какой-то цели чередовать те или иные состояния программы, делать акцент на результатах, важен только факт выполнения определённого процесса, функции. Это позволяет не отвлекаться на посторонние раздражители и в итоге добиваться больших результатов, чем если бы постоянно сверялись с тем, какое состояние дел хочется иметь в данный момент.

  3. Модульное программирование. Модульный подход предполагает вынесение различных процедур и функций, которые часто требуются в одном и том же виде и могут потребоваться несколько раз, за пределы основного кода, и объединять их в отдельные модули. Писать заново по десять раз один и тот же код при этом не требуется, модули находятся в библиотеке и к ним можно обращаться много раз, подключая их к выполняемой программе из библиотеки.

    В жизни данный подход можно тоже использовать. Например, можно подключить модуль "работа" и вызывать последовательно знакомые функции и процедуры, которые находятся в этом модуле. При этом сам человек на работе при этом не выгорает, поскольку подсознательно может внушать себе состояние обращения к функции из модуля и выполнять её фактически на автомате, сконцентрировав основное своё внимание на планировании других вещей, написании "основного кода".

    Объектно-ориентированный подход. Является расширением структурного программирования. В жизни данный поход может применяться при модифицировании отдельных процедур и функций. Например, на основе функции "дорога в магазин" можно создать класс, заложить в него основные методы, которые позволят его изменять, и сконцентрировать в нём основные процедуры и функции класса. В дальнейшем на основе этого класса можно создавать другие объекты: "дорога в школу", "дорога на работу", "дорога к родителям". Все они будут выполняться на основе уже готового "кода" с изменением лишь интерфейсной части.

    Существует великое множество других подходов к программированию, и все они могут применяться при планировании реальных жизненных задач.

Общие приёмы работы программиста, которые помогут решать жизненные проблемы

Тестирование — неотъемлемая часть написания любой программы. Она позволит выпустить надёжный код, который будет работать без ошибок. Обычно тестирование делится на три блока: Unit-тестирование, тестирование отдельных процедур и функций, объектов, которые должны работать при разных условиях и исключать ошибку при всех возможных входящих данных, затем — тестирование взаимодействия, когда тестируется взаимодействие друг с другом элементов программы, а после — общее тестирование всей программы.

Существует мнение, что должен соблюдаться принцип "пирамиды тестирования", при котором для написания юнит-тестов уделяется большая часть времени, основание "пирамиды", для написания тестов взаимодействия — поменьше, середина "пирамиды", и для общего тестирования всей программы, вершины, ещё меньше времени.

В жизни данный подход может быть реализован, например, при оценке перспективы брака с каким-то человеком. Например, известны отдельные части его "программы", "юниты", то, что он любит поздно вставать, храпит в постели, интересен в разговорах и имеет хорошую машину. Вначале проводят Unit-тесты, как придётся мириться с каждым из его недостатков в дальнейшем, например, есть ли возможность спать отдельно, если привычки сна не совпадают. Если этот этап не может завершиться — к дальнейшему тестированию переходить нет смысла. Затем можно провести тесты взаимодействия, например, представить, насколько он будет интересен в разговорах, если вы не выспались. Или выспались. И потом — провести какой-то общий анализ, на это уже нужно будет минимум времени.

Google hack. Если кто-то думает, что программист во время своей работы в основном пишет код, потом пробует его запускать, потом исправляет, если что-то не получается, то он не прав. По оценкам работы различных крупных компаний, программист около 80% времени проводит в интернет-поисковике, ища готовое решение проблемы, которое уже работает. Все функции и процедуры уже давным-давно написаны, собраны в модули, которые можно компоновать, модули можно найти в библиотеках. И нужно их только найти при помощи Гугл. Это называется Google-hack, программирование при помощи поисковика Google. Не обязательно ограничиваются только им, например, доступен StackOverflow-hack, чат-GPT-hack, YouTube-hack.

Если что-то не получается, спросите в поисковике! Современные системы поиска позволяют объединить знания людей по всему миру в огромную сеть и обмениваться ими, применять их на практике в разных условиях. Но в жизни не всегда нужно проводить столько же времени в поисковике, как программисты, порой нужно просто сосредоточиться на выполнении определённых функций.

Какой самый лучший язык для программирования, какой выучить первым? Большинство программистов скажут, что лучшим вариантом будет первым выучить английский язык. Это прямое следствие из предыдущего пункта. Если ищется решение в поиске на другом языке, то, возможно, найденных вариантов и не будет. Да и вся техническая документация продукта обычно записывается на английском языке. Английский — международный язык. И записывают свои решения на нём люди, владеющие многими другими языками. Одним словом, для того, кто знает английский, открыт весь мир. Точно так же для человека, который хорошо знает программирование, будет открыт весь мир. Потому что программирование это 11010000 10111011 11010001 10001110 11010000 10110001 11010000 10111110 11010000 10110010 11010001 10001100

Комментарии (2)


  1. Daddy_Cool
    18.01.2024 23:54
    +2

    Краткое содержание статьи:
    1. Примеры алгоритмов в жизни уровня первого урока по информатике в школе.
    2. Рекомендации использовать поисковик для... поиска информации.
    3. Рекомендация учить английский.
    -----
    P.S. В фильме/книге "Области тьмы" (про таблетки для ума) был русский бандит который произносит фразу:"А потом я открыл для себя Гугл!". Возможно среди читателей хабра найдутся товарищи для которых пункт 2 будет таким же открытием и рекомендации автора не пропадут втуне. /i


  1. Cels
    18.01.2024 23:54
    +1

    Какая-то ерунда, притянутая за уши