14 советов, с которыми ты начнёшь мыслить как программист


Оглавление (нажмите, чтобы открыть):

/привет/мир/etc

Периодические заметки о программировании

понедельник, 28 апреля 2014 г.

Мыслить как программист. Учимся с Python

Представляю вашему вниманию книгу «Мыслить как программист. Учимся с Python», 2-е издание. Это книга для тех, кто хочет научиться программировать. Книга учит программированию, используя язык Python как средство обучения.

Это открытая книга, по аналогии с открытым кодом.

Написанная Джеффри Элкнером (Jeffrey Elkner), Алленом Б. Дауни (Allen B. Downey) и Крисом Мейерсом (Chris Meyers), книга несколько лет использовалась учениками старшей школы как учебное пособие для изучения программирования. За это время она вобрала в себя замечания и дополнения сотен ее читателей. В 2010 — 2012 годах я перевел книгу на русский язык и незначительно переработал ее.

Предисловие к русскому изданию

Эту книгу я встретил очень кстати. У меня давно зрело желание познакомиться с языком Python, и вот весной 2010 года вместе с моим 10-летним сыном Иваном мы решили его осуществить.

Мы читали вслух 2-ое издание книги «Мыслить как программист. Учимся с Python» на английском языке. В результате, Ваня познакомился с основами программирования и научился писать простые программы на Python. Энтузиазм, с которым он осваивал программирование, заглядывал вперед, делился сделанными открытиями стал для меня неожиданной и очень приятной наградой. Книга ориентирована на учеников старших классов школы, поэтому время от времени Ивану требовались дополнительные разъяснения. Но это сделало совместное изучение книги только интереснее.

Книга приятно удивила меня вот в каком отношении. Хотя она адресована людям, которые только начинают изучать программирование, книга рассказывает о приемах и лучших практиках разработки из арсенала профессиональных программистов. Это разработка дизайна программы, автоматическое модульное тестирование, приемы отладки, использующие вспомогательный код (“строительные леса”), и многое другое. Таким образом, книга не играет в программирование с новичками, а дает основные понятия и навыки, необходимые для профессиональной работы.

В книге нет обсуждения низкоуровневых деталей программирования, таких, как двоичный код или байтовая организация данных. Однако есть обсуждение типов данных, встроенных в Python, а также абстрактных структур данных: списков, словаря, стека, очередей, деревьев. Читатель, кроме конструкций языка Python, знакомится с понятиями алгоритма, рекурсии, чистых функций и функций с побочными эффектами, осваивает основы процедурного и объектно-ориентированного программирования. То есть, книга учит читателя как раз тому, что обещает ее название: мыслить (и работать) как программист.

Работая над русским вариантом книги, я сделал некоторые изменения и дополнения.

Авторы исходили из того, что читатель работает с Python в ОС семейства Linux, и в ряде мест в оригинале даже присутствует привязка к конкретным версиям ОС Ubuntu. Я отступил от этой практики. Ведь изучать программирование с помощью Python можно с равным успехом и в ОС Windows.

Англоязычные строки и комментарии в примерах программ оставлены без изменения. Дело в том, что использование русского языка в программах требует дополнительных знаний и усилий. А начинающим программистам дополнительные сложности ни к чему. Однако, в Приложении A подробно изложено, как подружить Python и русский язык, если вы работаете в ОС Windows. Руководствуясь приведенными инструкциями, все желающие смогут русифицировать примеры из книги.

Я добавил новые и незначительно изменил некоторые из упражнений, помещенных в конце каждой главы. Иногда это сделано для того, чтобы подчеркнуть аспекты, недостаточно раскрытые в тексте главы. В других случаях — для того, чтобы читатель дополнительно попрактиковался в том, что я считаю важным.

Отмечу один случай нетрадиционного перевода термина. Исходные тексты программ на интерпретируемых языках программирования по-английски называют “script”. Это слово в литературе по программированию часто переводят на русский как “сценарий”. Слово “script” имеет много значений, связанных с письменностью. И “сценарий” — лишь одно из них. Ни я, ни кто-либо из моих знакомых коллег-программистов не использует слово “сценарий” в повседневном профессиональном общении, предпочитая ему короткое “скрипт”. Вот почему в книге используется слово “скрипт”.

В разных странах при записи чисел по-разному отделяют целую часть числа от дробной. В России пишут 3,14 через запятую. Во многих англоязычных странах, а также в языках программирования, пишут 3.14, через точку. Поскольку в книге много примеров программ и объяснений этих примеров, то для единообразия я повсюду использую точку в качестве такого разделителя. А тип данных для хранения действительных чисел называется “число с плавающей точкой” вместо “число с плавающей запятой”. Надеюсь, что последовательное применение точки в примерах и остальном тексте книги не затруднит, а облегчит чтение.

Я убрал из книги упоминание библиотеки GASP, примеры ее использования, а также главу, посвященную работе с этой библиотекой. Джеффри Элкнер, один из авторов книги, разработал эту библиотеку, чтобы оживить графикой процесс изучения языка Python в школе. Не сомневаюсь, что библиотека GASP выполняет свою функцию в курсе программирования Джеффри Элкнера. Однако считаю, что ее изучение и работа с ней необязательны для изучающих Python.

Для меня перевод книги такого объема был совершенно новым делом, и в ходе работы я сделал для себя много попутных открытий. Среди прочего, мне пришлось учиться работать с литературным текстом, освоить систему подготовки документации Sphinx. Кроме того, пришлось потребовать от себя элементарной дисциплины для того, чтобы завершить начатую работу. Соприкоснувшись с Python и его “экосистемой”, насчитывающей тысячи библиотек и пакетов для разных приложений, я также понял одну важную вещь. Я понял, что информационные технологии обязаны занять в интеллектуальной жизни человека более важное место, чем они занимают сегодня.

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

Читая эту книгу — не пренебрегайте упражнениями. И обязательно сами ставьте перед собой вопросы и находите ответы на них при помощи экспериментов с Python. Вкус к программированию приобретается активной работой с компьютером для решения задач и удовлетворения собственного любопытства.

Оригинальную версию книги на английском языке можно найти на сайте проекта Открытая Книга по адресу http://openbookproject.net. Размещенные там книги доступны для скачивания, чтения, изменения и распространения без каких-либо практических ограничений. Такой подход создает отличную возможность для улучшения текстов, их адаптации к конкретным нуждам и распространения среди всех заинтересованных лиц. Данный перевод книги на русский язык не является исключением, см. раздел О правах на эту книгу. Как и открытый код в программировании, открытые книги способствуют коллективному и личному творчеству, и свободному развитию тех, кто с ними соприкасается.

Андрей Трофимов,
инженер-программист,
Владивосток, Россия

Скачать книгу в zip-архиве

Читать в оригинале на сайте Open Book Project

Страница поста от канала Библиотека программиста

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме

Пожаловаться

Обращаем внимание, что мы не несем ответственности за содержимое(content) того или иного канала размещенный на нашем сайте так как не мы являемся авторами этой информации и на сайте она размещается в автоматическом режиме

14 советов, с которыми ты начнёшь мыслить как программист

69’510 подписчиков
14’726 просмотров на пост

Полезные материалы по всему, что может быть интересно программисту.

Детальная рекламная статистика будет доступна после прохождения простой процедуры регистрации

  • Детальная аналитика 70’046 каналов
  • Доступ к 28’004’146 рекламных постов
  • Поиск по 112’332’059 постам
  • Отдача с каждой купленной рекламы
  • Графики динамики изменения показателей канала
  • Где и как размещался канал
  • Детальная статистика по подпискам и отпискам

Найдено 1677 постов

​​Хочешь работать в IT? Стань веб-разработчиком! Сделай первый шаг — присоединяйся к онлайн-интенсиву от основателя SymbioWay!

Подробности по ссылке �� https://clc.to/lzdfLA

�� Всего за три дня ты создашь полноценный лендинг, который станет визитной карточкой фрилансера по созданию сайтов.
�� Три лучших участника поступят на бюджет в онлайн-университет Skillbox.
�� Все участники, дошедшие до конца, получат сертификаты на изучение английского языка от EnglishDom.

Меняй жизнь прямо сейчас!

Что я узнал о машинном обучении, поработав в 12 стартапах

Поработав в 12 стартапах в сфере машинного обучения, я сделал восемь полезных выводов о продуктах, данных и людях. Вот они.

Серьёзный курс о тонкостях разработки на C++ для продолжающих – об асинхронном программировании и шаблонной магии проектирования, паттернах, работе с сетью и большими данными, а также популярных ML-библиотеках.

Берут не всех, нужны базовые знания синтаксиса плюсов, умение оценивать сложность алгоритмов и разбираться в основах SQL и многопоточного программирования.

Пройдите вступительный тест для проверки знаний: https://otus.pw/Acom/

Я выбираю тебя! Кто лучший покемон из JavaScript-фреймворков?

Руководство для тренеров JavaScript-фреймворков. Три самых прокачанных покемона – Angulard, Reactle и Vuebasaur – наконец встретились!

Тестируем мобильные приложения с AWS Device Farm

Задумывались над автоматизацией тестирования? Узнайте, как использовать общедоступное облако AWS Device Farm и интегрировать в процесс сборки.

Чем хорош язык Go и зачем его изучать? Все плюшки Golang

Язык Go – серверный язык будущего. В этой статье мы не будем разбирать «Hello World!», но затронем важность Golang и его характеристики.

9 вопросов для получения должности JavaScript-разработчик

Мечтаете о должности JavaScript-разработчик? Держите ответы на каверзные и популярные вопросы на собеседовании. Примеры кода прилагаются.

Бесплатный сеанс удаленной помощи с компьютером, смартфоном, планшетом или Smart TV для тех, кто скачает приложение “Служба добрых дел”. Отличная штука для себя или на случай, если кто-то надоел вам с просьбами помочь с девайсами.

Новый сервис позволяет мастеру удаленно подключиться к устройству клиента и решить практически любую проблему с софтом. Хороший способ установить программы, «почистить» устройство от мусора и вирусов, улучшить производительность или обучиться чему-то новому.

Если бесплатный сеанс понравится, то купить такой же можно всего за 990 рублей вне зависимости от сложности задачи. Также, за 2490 рублей можно оформить годовую подписку с неограниченным количеством обращений!

Скачать приложение для первого бесплатного обращения можно по этой ссылке: https://sddhelp.page.link/proglib

Осваиваем парсинг сайта: короткий туториал на Python

Постоянно в Интернете, ничего не успеваете? Парсинг сайта спешит на помощь! Разбираемся, как автоматизировать получение нужной информации.

​​Пройдите путь до трудоустройства Java Developer и получите опыт разработки в бизнес проекте. Наши студенты с личным наставником начинают карьеру в IT за 8 месяцев.

На Java у вас большие возможности для разработки и высокий спрос на специалистов. А средняя зарплата ведущего джависта 200 000 рублей.

Выберете программу, которая подходит вам:
— Полная подготовка с нуля и до трудоустройства
— Опыт боевой разработки в бизнес проекте для начала карьеры

1. Даем вам гарантию трудоустройства или вернем все деньги, если вы не устроитесь на работу.
2. Наши наставники будут обучать вас по индивидуальной программе и поддерживать до первого рабочего дня без ограничений в общении.
3. У нас вы будете работать над настоящим коммерческим проектом и запишите свой опыт в резюме.
4. Каждый выпускник получает от 5 предложений о работе.
5. Пройдите 5 пробных дней с ментором в мае и получите специальное предложение по оплате и доступ к закрытому Java сообществу с первого пробного дня.
Пройти 5 пробных дней: https://vk.cc/9pvvgq

ТОП-10 самых полезных DevOps тенденций 2020 года

DevOps – не модное слово, а основное направление в формировании мира ПО. Представляем ТОП DevOps тенденций развития в 2020 году.

Современный язык C++: что нужно знать разработчику

Язык C++ не стоит на месте – с 2011 года в нём произошли существенные изменения. Теперь это современный и непрерывно развивающийся язык.

Муки выбора: какой язык программирования изучать в 2020

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

Программная реализация 10 математических задач

В этой подборке собрано 10 реализаций математических задач, которые с легкостью решаются программно. Сможете ли решить все самостоятельно?

​​Какие книги читать, чтобы стать веб-разработчиком? С чего начать изучать веб-разработку и какие вопросы будут на собеседовании?

Привет, меня зовут Дарья Пушкарская, я веб-разработчик с опытом работы в компаниях 2GIS, Mail.ru и Tinkoff.ru. Я знаю, что тебе нужно, чтобы успешно стартовать в новой профессии и за 3 месяца найти работу.

Приглашаю тебя на БЕСПЛАТНЫЙ марафон «С чего начать изучать веб-разработку и как понять, что это твое?», который пройдет 3 дня. Где ты узнаешь:
⚡️ Будет ли существовать твоя текущая профессия в будущем?
⚡️ Какие профессии появятся? Почему стоит идти в IT-сферу?
⚡️ Какие существуют сферы программирования? Как выбрать подходящую? Какая нужна подготовка? Кто может стать программистом?
⚡️Почему именно веб-разработка? Что нужно изучать, чтобы устроиться на работу?
⚡️ Получить пошаговый план обучения.
⚡️ Узнаешь как попасть на работу в крупную IT-компанию?
⚡️ Получишь список вопросов для собеседования.
⚡️ Особенности работы на фриланс и удаленной работе. Как находить заказы?
⚡️ Основные ошибки новичков в изучении веб-разработки.
�� Напишешь свой первый код!

❗️Участие в марафоне бесплатное, но места ограничены. Поэтому успевай занять место.

Почему марафон бесплатный? Во-первых, я хочу чтобы как можно больше людей узнало, что веб-разработчиком может стать любой и не имеет значения твой пол, возраст и высшее образование. А во-вторых, после марафона я предложу продолжить обучения на моей платной программе, если тебе понравится учиться у меня. Ты получаешь знания на марафоне, после которых сможешь продолжить обучаться самостоятельно по индивидуальному плану, а я потенциально могу получить уже подготовленного студента. Все в выигрыше!

�� Среди участников марафона я разыграю место на бесплатное обучение в нашей школе.

❗️Места на марафоне ограничены. Старт марафона уже в понедельник.

Регистрируйся и СРАЗУ получишь вводный урок и задание

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

Мастер Йода рекомендует:  8 ловушек программирования

10 шагов навстречу собственному безлимитному VPN

С рунетом что-то не так: сначала Роскомнадзор и блокировки, теперь «суверенный» интернет. Пора поднимать собственный VPN!

​​Появилась возможность влиться в самые востребованные направления программирования с хорошей выгодой!

Можно изучить с нуля или прокачать свои знания в веб-разработке, frontend-разработке или Java со скидкой до 40% http://bit.ly/2Hz227n

А если хотите гарантию трудоустройства после обучения, ловите скидку до 40 000 рублей на факультеты Искусственного интеллекта, Python-разработки и Аналитики Big Data http://bit.ly/2VFPIG5 или факультеты Веб-разработки и Java-разработки http://bit.ly/2M6417h

До 31 мая вы можете записаться на последние «горящие» места на курсах GeekBrains и Mail ru Group по сниженной цене. Успевайте!

8 самых распространенных ошибок веб-разработчика

Сложный и громоздкий проект чреват серьезными ошибками: это знает каждый. Смотрите наш ТОП-8 ошибок веб-разработчика и не совершайте их!

Могут ли спецслужбы читать вашу переписку?

1. Какие вирусы представляют для вас реальную угрозу?
2. Хотите сами разобраться, а не верить слухам?
3. Хотите получать проверенную и действительно полезную информацию от экспертов?

Тогда вам следует подписаться на канал @PenetrationTestshow, где сертифицированные IT специалисты подробно разбирают каждую информационную угрозу и дают рекомендации как себя обезопасить.

Книги для программистов рекомендуют: https://t.me/penetrationtestshow

Глубокое погружение в асинхронные JavaScript функции

JavaScript функции async и await – то, что важно понимать web-разработчику в 2020 году. В статье примеры кода и детальное погружение в тему.

Мысли как программист, чтобы находить необычные решения

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

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

«Практически все работодатели сначала ставят приоритеты в решении проблем. Умение решать проблемы является самым важным навыком, который работодатели хотят видеть у своего сотрудника: оно важнее, чем знание языков программирования, отладка и дизайн системы. Демонстрация вычислительного мышления или способность преодолевать большие сложные проблемы столь же ценны (если не более), как и базовые технические навыки, необходимые для работы» — цитата на одном из крупнейших хакерских форумов.

Так что же ты должен делать, столкнувшись с очередной проблемой?

1. Пойми суть

Большинство проблем могут показаться нерешаемыми, потому что ты не понимаешь их сути. Но как найти ее, если кажется, будто нет выхода? Разложи ситуацию на составляющие и объясни все максимально простым языком. Когда ты проговариваешь каждый волнующий тебя момент и ищешь решение, то вскоре найдешь логические несостыковки, которые помогут выйти из ситуации. Большинство программистов так и поступают, когда пытаются найти ошибку в коде: они ищут «дыры» в логике действий и системы. Вот почему ты должен раскладывать каждую ситуацию и объяснять все происходящее простым языком — делай это для самого себя.

«Если вы не можете объяснить что-то простым языком, вы этого не понимаете».
– Ричард Фейнман –

2. Составь план

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

3. Дроби проблему на составные части

Не пытайся решить проблему разом — это неправильный путь, который не позволит действовать разумно и методично. Разбей проблему на составные части и разбирайся с каждой из них по отдельности, чтобы не столкнуться с непреодолимыми трудностями. Начинай всегда с самого простого, переходя к более сложным задачам. Этот метод активно используют программисты, и ты должен научиться мыслить и действовать подобным образом. Такая последовательность мысли поможет разложить проблему на составляющие и разобраться с ними индивидуально. Быстро и эффективно.

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

Уменьшите проблему до того момента, когда вы знаете, как ее решить, и напишите решение. Затем немного разверните проблему и перепишите решение, чтобы оно соответствовало. Продолжайте движение, пока вы не вернетесь туда, откуда начали».

4. Что делать, если все-таки безнадежно застрял

Что же, подобные неудачи происходят со всеми — главное, сделай глубокий вдох и успокойся: паника лишь усугубляет ситуацию. Профессиональные программисты смотрят глубже и пытаются бороться не с симптомами, а с самой проблемой. Зачем пытаться противостоять последствиям, если необходимо решить именно ее?

Представь, что человек, у которого аллергия на апельсины, продолжает употреблять их в пищу, а потом борется с сыпью на коже. Он мажет раздраженные участки мазью, но продолжает упорно кушать апельсины и даже не принимает никакие средства для того, чтобы купировать приступ. Так же и во всем остальном: все проблемы имеют свои причины, с которыми необходимо бороться, а обращать внимание лишь на симптомы — глупо.

5. Практикуйся

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

11 умных книг, чтобы «мыслить как программист»

Вместе с «Мобильной библиотекой МТС» мы составляем «списки книг от профессионалов». Сегодня программист и аналитик данных, который читает более ста книг в год, рассказывает о тех из них, что помогут лучше думать и понимать мир.

Юрий Разумов

Разработчик, аналитик данных в Targetprocess («Таргетпроусес»). Читает более ста книг в год и «ничего необычного» в этом не видит. Если помните, мы писали о нем здесь.

– Я не хочу говорить «читайте книги обязательно», ведь примерно то же самое можно узнавать из других мест. Например, я бы хотел читать больше научных статей, по крайней мере делать это внимательнее. Но книги во многих случаях удобнее, чем что бы то ни было.

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

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

«Рациональность: от ИИ до зомби», Элиезер Юдковски


Rationality: From AI to Zombies, by Eliezer Yudkowsky

Самая базовая, хоть и огромная, книга из подборки. Это отредактированные Sequences (цепочки постов) сообщества LessWrong («ЛессРон»).

Очень сложно рассказать, о чем книжка примерно на полторы тысячи страниц (улыбается). Она рассказывает, как думать о мире правильнее и рациональнее, начиная с базовых вещей вроде теоремы Фалеса и заканчивая тем, как думать вероятностями. В ней есть и рациональные части про квантовую механику, которые можно пропускать.

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

Кажется, есть волонтерская работа по переводу этой книги: она частично есть на русском в открытом доступе.

Дальше перейдем к самому важному – экономике. Люди почти ничего не знают о ней, и это очень плохо, потому что она многое объясняет. И здесь вы можете начать или с любого учебника по экономике, или взять какую-нибудь популярную книжку.

Читайте Rationality: From AI to Zombies в Мобильной библиотеке МТС. Первые 3 дня – бесплатно.

«Экономист под прикрытием», Тим Харфорд

The Undercover Economist, by Tim Harford

Есть неправильное представление, что экономисты занимаются какими-то отвлеченными от реальности моделями, ерундой, никак не связанной с настоящей экономикой, которая еще и не может идеально предсказать макроэкономический кризис.

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

Читайте «Экономист под прикрытием» в Мобильной библиотеке МТС. Стоимость – 1,5 рубля, если прочесть за 6 дней.

И сразу хочу сказать: лучший способ узнать что-либо про какую-то область – взять учебник. Вместо популярных книг можно поискать стартовый курс какого-нибудь хорошего университета, посмотреть, какую книжку там рекомендуют, и прочитать ее.

Thinking in Bets: Making Smarter Decisions When You Don’t Have All the Facts, by Annie Duke

Эта книга пока не переведена, зато у нас есть спойлер.

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

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

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

«Как измерить все что угодно. Оценка стоимости нематериального в бизнесе», Дуглас Хаббард

How to Measure Anything: Finding the Value of Intangibles in Business, by Douglas W. Hubbard

Смежная с предыдущей книжка о том, что делать в условиях неопределенности. Во многих областях люди часто любят говорить: «Есть вещи, которые мы не можем измерить». Это чаще всего не так: измерить в каком-то смысле можно всегда и все.

Измерение – это просто уменьшение неопределенности. И измерять полезно, даже если итоговое значение не будет точным: использовать числа нужно, чтобы лучше принимать решения.

Если нужно оценить какое-то значение и у вас нет совершенно никаких представлений, вы можете найти пять человек, которые теоретически что-то про это знают, и предложить им оценить это значение.

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

Читайте «Как измерить все что угодно» в Мобильной библиотеке МТС. Стоимость – 2 рубля, если прочесть за 8 дней.

«Алгоритмы для жизни. Простые способы принимать верные решения», Брайан Кристиан, Том Гриффитс

Algorithms to Live By: The Computer Science of Human Decisions, by Brian Christian , Tom Griffiths

Эта книга – подтверждение того, что использовать числа в реальной жизни нужно и полезно, что делать что-то с неточными числами лучше, чем с никакими.

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

Задача такая: вам нужно из ста человек выбрать одного, кандидату можно только сразу сказать «да» или «нет», но при этом вы умеете хорошо оценивать его профессиональные качества. На каком из ста нужно остановиться и при этом повысить вероятность набора как можно лучшего из них?

Оптимальная стратегия – опросить примерно треть и после этого брать первого лучшего кандидата. Понятно, что в реальной жизни есть усложнения. Вам может не повезти и самый лучший придет первым, но вы не знаете этого заранее, вы знаете только, что дальше может быть либо лучше, либо хуже.

Читайте «Алгоритмы для жизни» в Мобильной библиотеке МТС. Стоимость – 2 рубля, если прочесть за 8 дней.

Что-то о реальном мире мы узнаем через науку. Есть простые ее ответвления вроде физики: мы можем взять систему, перенести ее в совершенно другое место, но все в ней будет работать точно так же. А есть сложные социальные науки: в них мы не можем просто так сравнивать двух разных людей. Поэтому лучшее, что можно сделать, – агрегировать, проводить много рандомизированных экспериментов, что делать не очень просто, и об этом следующая книжка.

«Обман в науке», Бен Голдакр

Bad Science, by Ben Goldacre

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

«Блэкуел (1972) провел серию экспериментов, участниками которых стали 57 студентов колледжа, чтобы установить влияние цвета и количества таблеток на оказываемый эффект. Испытуемые сидели на длинной и скучной лекции и получали одну или две пилюли, которые были либо голубыми, либо розовыми. Им сказали, что они получают либо возбуждающее, либо успокоительное средство. Студенты были психологами, и вы могли говорить им все что угодно, даже лгать – все лечение состояло из сахарных пилюль, которые отличались только цветом. Затем, когда измерялась степень концентрации внимания студентов – так же, как любой другой субъективный эффект, – исследователи обнаружили, что две пилюли были более действенными, чем одна, как и можно было предположить (две пилюли также давали больше побочных эффектов). Кроме того, они обнаружили, что цвет пилюли влиял на результат: розовые лучше помогали поддерживать концентрацию, чем голубые. Поскольку сам по себе цвет не имеет никаких фармакологических свойств, разница в результате может объясняться только сложившимися культурными представлениями о голубом и розовом цвете: розовый является возбуждающим, голубой охлаждающим.

Фармацевтические компании лучше, чем большинство из нас, осведомлены о преимуществах правильного оформления своей продукции: они тратят на грамотный пиар больше, чем на исследования и научные разработки. Как и следует ожидать от практичных людей, живущих в больших загородных домах, они воплощают свои теоретические идеи в практику: так, “Прозак”, например, бывает белым и голубым; и если вам кажется, что я преувеличиваю, то исследование, касающееся цвета пилюль, обнаружило, что стимулирующие препараты чаще имеют красный, оранжевый или желтый цвет, в то время как антидепрессанты и транквилизаторы в основном голубые, зеленые или фиолетовые».

Читайте Bad Science в Мобильной библиотеке МТС. Первые 3 дня –бесплатно.

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

Мастер Йода рекомендует:  Как дела у Go и так ли популярен Python, как кажется — тренды языков программирования

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

The Elephant in the Brain, by Kevin Simler, Robin Hanson

Эта книга пока не переведена, но у нас снова есть спойлер!

Хорошая книга этого года про эволюционную психологию. Она в основном про одну тему – сигналы: делая что-то, люди руководствуются не только осознанием полезности, они делают это для того, чтобы послать другим людям сообщества какой-то сигнал.

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

Если человек водит Toyota Prius, возможно, ему нравится Prius, возможно, он думает, что это полезно для экологии, но кроме того он хочет сказать всем окружающим людям: «Смотрите, я человек, который думает об экологии». И люди вокруг оценивают его уже по-другому.

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

«Хорошее самочувствие: Новая терапия настроений», Дэвид Бернc

Feeling Good: The New Mood Therapy, by David D. Burns

Вместо этой книги мог быть совет «сходите к психотерапевту», потому что это стоит делать всем. Но, если у вас пока не хватает на это моральных сил, почитайте что-нибудь про когнитивную терапию: например, эту книгу.

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

Обзор книги «Хорошее самочувствие» читайте в Мобильной библиотеке МТС. Первые 3 дня – бесплатно.

И вот мы стали чуть больше понимать мир, узнали про рациональность, о том, как измерять вещи, как считать, узнали, что экономика важна. Но что теперь с этим делать? На этот вопрос ответят следующие три книги.

«Ум во благо. От добрых намерений – к эффективному альтруизму», Уильям Макаскилл

Doing Good Better: How Effective Altruism Can Help You Make a Difference, by William MacAskill

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

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

Читайте «Ум во благо. От добрых намерений – к эффективному альтруизму» в Мобильной библиотеке МТС. Стоимость – 1,25 рубля, если прочесть за 5 дней.

Against Empathy: The Case for Rational Compassion, by Paul Bloom

Эта книга пока не переведена.

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

Stubborn Attachments: A Vision for a Society of Free, Prosperous, and Responsible Indiv > Эта книга пока не переведена.

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

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

Думать как программист — руководство для начинающих

Стив Джобс как-то сказал: “Каждый в нашей стране должен научиться программировать, потому что это учит думать”.

Что это значит, думать как программист?

По сути, речь идет о более эффективном способе решения проблем.

Цель моей статьи — научить вас этому. После прочтения вы поймете, как действовать, чтобы стать лучшим в решением проблем.

Почему это так важно?

Решение проблем-это мета-навык.

У всех нас есть проблемы. Маленькие и большие. То, как мы их решаем, может многое о нас сказать.

Когда я начал программировать, у меня не было никакой системы, и все проблемы решались следующим образом:

  • Я пробовал какое-то решение.
  • Если это не срабатывало, пробовал другое.
  • Если и оно не работало, повторял пункт 2, пока не повезет.

Иногда реально везло. Но это худший способ решения проблем и огромная трата времени!

Многие работодатели готовы взять на работу менее опытного специалиста, но с мышлением, ориентированным на решение проблем.

Способность разбивать большие и сложные проблемы на мелкие и легкие столь же важна (если даже не больше), как базовые технические навыки, необходимые для работы.

Итак, что же делать, когда вы столкнулись с проблемой?

Большинство проблем кажутся нам трудными только потому, что мы их не понимаем. Важно точно знать, что от нас требуется.

Как узнать, понимаете вы проблему или нет? Если вы можете объяснить её простым языком, то всё хорошо.

Бывало у вас такое, что вы зависли на какой-то проблеме, но как только начинали обсуждать ее с другими, мгновенно находили решение? Программистам знакомо это чувство.

Поэтому следует делать заметки, рисовать диаграммы или рассказывать кому-то о проблеме.

«Если вы не можете объяснить что-то простым языком, вы этого не понимаете». — Ричард Фейнман

2. Составьте план

Не бросайтесь с головой в решение проблем без плана. Не надейтесь на авось, потому что вы потеряете время и ничего не добьетесь.

Ничто не поможет, если у вас нет алгоритма действий.

В программировании это означает, что вы не начинаете писать программу моментально. Дайте вашему мозгу время на анализ проблемы и обработку информации.

Этот вопрос поможет вам построить хороший план действий:

«Я нахожусь в точке А. Какие шаги мне нужно предпринять, чтобы оказаться в точке Б?»

У программистов есть отличный способ для решения подобной задачи — псевдокод!

3. Разбейте на составляющие

Не ешьте слона целиком!

Разбейте проблему на части. Эти подзадачи гораздо проще решить. Затем решайте каждую подзадачу поочередно. Начните с самой простой.

После того, как вы решите каждую подзадачу, соедините всё в единую картину.

Поздравляю! Большая, страшная проблема решена!

Этот метод является краеугольным камнем решения проблем. Запомните это (повторите этот шаг, если нужно).

“Если бы я мог научить каждого начинающего программиста только одному навыку решения проблем, это бы сильно упростило жизнь”.

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

Если вы застряли на решении, уменьшите проблему до чего-то более простого. Вместо третьего по величине числа,найдите самое большое? Все еще слишком трудно? Как насчет того, чтобы найти наибольшее из трех чисел? Или большее из двух?

Упростите задачу до такой степени, когда вы точно знаете, как её решить. Идите от простого к сложному.”V. Anton Spraul

Сейчас вы, наверное, сидите и думаете: “Ну,да. Это круто и все такое, но что, если я застрял и не могу решить даже подзадачу??”

Во-первых, сделайте глубокий вдох.

Не волнуйтесь. Это случается со всеми!

Знаете, что отличает крутого программиста от остальных? Его не раздражают ошибки, наоборот, они его интересуют. Опыт приходит вместе с ошибками.

Вот три вещи, которые нужно попробовать, когда сталкиваетесь с трудностями:

Отладка: шаг за шагом пройдите через свое решение, пытаясь найти, где вы ошиблись. Программисты называют это отладкой (на самом деле, это все, что делает отладчик).

Свежий взгляд: посмотрите на проблему с другой точки зрения. Может, она решается на поверхностном уровне, а вы сами всё усложняйте. Или же начните заново. Я серьезно. Вы будете ошеломлены тем, насколько это эффективно.

Погуглите: Да, возможно, это пункт надо было сделать первым, но это было бы слишком просто. Независимо от того, какая у вас проблема, кто-то уже сталкивался с ней до вас. Найдите решение. И даже если вы уже решили проблему, перепроверьте себя.

Мой вам совет, не ищите готовое решение. Ищите пути решения. Потому что, если вы не приложите хоть немного усилий, вы ничего не узнаете. Если вы ничего не узнаете, вы потратили свое время впустую.

Не ожидайте, что через неделю вы станете мыслить, как программист.

Практика. Практика. Практика. Пройдет много времени, прежде чем вы узнаете, что “эта проблема может быть легко решена с помощью ”.

Шахматы, головоломки, видеоигры, математические задачи, монополия и множество других игр и увлечений развивают мышление. Например, Питер Тиль играет в шахматы, а Илон Маск играет в видеоигры. Но это не значит, что теперь вы можете сутками напролёт играть в видеоигры.

Подводя итог, мыслить, как программист — это составлять в голове алгоритм решения проблемы. Осознавать проблему, разбивать её на составляющие, решать подзадачи и потом собрать всё воедино.

Теперь вы знаете, что мышление, ориентированное на решение проблем, можно и нужно развивать.

Я желаю вам почаще сталкиваться с проблемами.

Вы правильно это прочитали. По крайней мере, теперь вы знаете, как их решать! Преодолевая трудности, вы становитесь опытнее и мудрее.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

14 советов, с которыми ты начнёшь мыслить как программист

Полезные материалы по всему, что может быть интересно программисту.

About
Platform

Мы также активно разыскиваем авторов статей для нашего сайта. Даже если у вас нет солидного портфолио, но вы грамотно умеете формулировать свои мысли и хотите делиться знаниями, попробуйте!

ТОП-10 книг по Python: эффективно, емко, доходчиво

В любом обучении важен сам процесс и то, какой материал вы используете. Предлагаем рассмотреть подборку книг по Python на любой случай.

Думаете, что доли в банках выдают только финансистам? Так и есть, если речь не про Тинькофф: там среди совладельцев десятки айтишников.


По факту это IT-компания с банковской лицензией, 70% сотрудников которой — разработчики. Среди совладельцев также много программистов и аналитиков: они запускали мобильное приложение банка, развивали CRM систему и многое другое. Они своими руками повышали стоимость акций на рынке.

Теперь под их управлением 176 миллионов долларов. Если поделить на всех, то в среднем по 1,76 миллиона на человека. Такого же талантливого программиста, как и вы, который пошел работать в правильное место.

Думаете что вам с того? Хорошие новости, людей в программе будет больше. Настало время выбрать правильное место работы:
https://youtu.be/Or2ieQW83vU

ТОП-8 трендов web-разработки, обязательных в 2020 году

«К успеху пришел» в 2020 – это особая ачивка для web-разработки. У нас здесь собрались главные тренды года: берите на карандаш.

Быстрый путеводитель по Python: cписки за 7 минут

Не путайте в Python списки и массивы: в первых можно хранить разнородные объекты. Здесь кратко описаны все основные методы списков Python 3.x.

Исследование аудитории Telegram 2020

Друзья, команда TGStat проводит масштабное исследование аудитории мессенджера. Кто же он — пользователь Telegram 2020 года? Страдает ли он из-за блокировки, каково на сегодня распределение по полу, возрасту, интересам и десятку других параметров?

Исследование поможет удовлетворить не только научный интерес, и не только интерес брендов, но и интерес всего сообщества, противостоящего блокировкам.

Опрос займет всего 5 минут! Не поленитесь)
Ваше мнение очень важно!

Твиттер на Vue.js: руководство для начинающих

Мы построим свой твиттер с лайками и комментариями! Присоединяйся, заодно разберешься с крутым JavaScript-фреймворком Vue.js.

Как научиться решать алгоритмические задачи?

Перед вами руководство для того, чтобы научиться быстро и без труда решать алгоритмические задачи. Готовьтесь к собеседованиям правильно.

14 советов, с которыми ты начнёшь мыслить как программист

Изменить свой образ мышления – не самая простая задача. Эти 14 крутых советов помогут тебе начать мыслить как программист.

Лучшие актуальные шпаргалки по C# на все случаи жизни

Шпаргалки по C# помогут забыть о поиске простой информации и сосредоточиться на действительно важных моментах программирования.

Большая подборка книг, видео и статей для Java Middle

Java Middle – это соль земли от мира информационных технологий. В статье самые полезные материалы, которые помогут прокачать навыки.

Асинхронное программирование на Python с помощью asyncio

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

51 задание для оттачивания навыков системного администрирования

Разбираемся с тем, как стать системным администратором, и выполняя реальные задачи, получаем основные знания для работы и развития.

Математика vs Литература. Битва за программирование

Программирование – наука или искусство? Программист – ученый или писатель? Поразительно, как одной области удается сочетать несочетаемое!

Юрий Ветров ведёт дайджест продуктового дизайна в Телеграме — https://tttttt.me/pdigest. Там уйма свежайших статей о дизайне интерфейсов: методы и практики, анонсы инструментов дизайна, обзоры трендов, публикации о дизайн-системах и дизайн-менеджменте.

Вот несколько свежих выпусков:

Подпишитесь на дайджест продуктового дизайна в Телеграме — @pdigest — он выходит с 2009 года и это лучший способ быть в курсе профессиональных новостей. Версия для ВК — https://vk.com/pdigest.

Юрий @jvetrau Ветров собирает свежие статьи, инструменты, паттерны, кейсы и тренды с 2009 года. 50 000 читателей на vc, Хабре и других каналах:

ВК — https://vk.com/pdigest
FB — https://www.facebook.com/groups/pdigest/…

Линейная регрессия на Python: объясняем на пальцах

Линейная регрессия применяется для анализа данных и в машинном обучении. Постройте свою модель на Python и получите первые результаты!

​​17-18 мая, в Санкт-Петербурге состоится конференция по тестированию Heisenbug 2020 Piter!

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

Доклады – исключительно практические, «бери и делай», без воды и рекламы:

— Автоматизация тестирования
— Инструменты и окружение для ручного и автоматизированного тестирования
— Тестирование распределенных систем
— Мутационное тестирование
— Тестирование мобильных приложений
— Тестирование безопасности
— Нагрузочное тестирование, performance-тестирование, бенчмаркинг;

Кто будет среди спикеров:

— Jim Holmes — владелец Guidepost Systems и Executive Consultant в Pillar Technology;
— Neal Ford — директор и программный архитектор в ThoughtWorks;
— Jessica Ingrassellino — руководитель проекта teachcode.org;
— Алексей Лавренюк — разработчик сервисов и инструментов для тестирования производительности и мобильной разработки. Развивает open source-проекты Яндекс.Танк, Pandora и Volta.

Все спикеры, подробности о докладах и регистрация – на сайте конференции.
https://heisenbug-piter.ru/

До 1 мая можно купить билеты со скидкой, а по промокоду Heis19SpbProglib — дополнительная скидка 1000 рублей на персональные билеты.

Думать как программист: как стать разработчиком или компьютерным музыкантом?

Программист — модная современная профессия. Работать за компьютером, создавая целые виртуальные вселенные — увлекательно и очень интересно. Вы так не думаете? Тогда вам стоит прочитать книгу «Программист» серии «Детская Академия». В ней подробно и так захватывающе рассказывается о том, чем занимаются программисты, разработчики и компьютерные дизайнеры, что вы вынуждены будете пересмотреть своё мнение. Эта книга обязательно понравится вашему ребёнку, если он интересуется кодами, языками программирования и созданием видеоигр. А даже если нет, кто знает, возможно, прочитав именно эти страницы, он выберет себе будущую профессию.

Программисты бывают разные

Программисты пишут команды для компьютера. Им нужно ясно и точно выражать свои мысли. Именно они создают компьютерные программы и следят за их работой.

Компьютерные художники создают изображения для компьютерных программ. Именно их усилиями персонажи программ оживают, компьютерные игры обретают движение. Ещё они рисуют иконки и кнопки.

Компьютерные музыканты пишут музыку с помощью программ. Они сочиняют музыку для компьютерных игр, изобретают музыкальные программы, создают при помощи компьютера музыку для фильмов или записывают альбомы.

Разработчики веб-сайтов пишут коды для сайтов при помощи языков HTML и CSS. Это престижная профессия, администраторы сайтов без них как без рук.

Основы программирования

Что такое программирование?

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

Попробуй думать как программист

Чтобы написать инструкции на компьютерном языке, программисту нужно быть точным и аккуратным. А ещё ему нужно работать над каждым заданием по очереди, как компьютеру. Сейчас попробуй выполнить второе (очень непростое!) тренировочное задание: запрограммировать робот. Сможешь мыслить как программист?

Испытание «Программирование робота»

два листа бумаги.

Решите, кто из вас будет роботом, а кто программистом. Возьмите по листу бумаги и сядьте спинами друг к другу. Ни один из вас не должен видеть, что делает другой. Программист рисует на своём листе картинку. Условимся, что весь рисунок состоит только из прямых линий и кругов. Можно нарисовать человечка, машину, дом или что-нибудь другое. Программист не говорит роботу, что он нарисовал. Он даёт команды по следующим правилам: рисовать прямые линии или круги, говорить, насколько длинными или короткими должны быть линии, какой величины (допустим, такой же, как прямая, или вдвое больше/меньше прямой) должен быть круг, а также — где их рисовать на бумаге. Робот должен точно следовать командам.

Когда закончите, сравните картинки. Насколько они похожи? А теперь поменяйтесь ролями и нарисуйте другую картинку. Если картинка робота уж очень непохожа на заданную, придумайте новые команды, чтобы роботу было проще выполнить задание программиста. Чем яснее (и точнее!) будут команды, тем скорее робот повторит заданный рисунок.

Думать как программист — руководство для начинающих

Почему это так важно?

Решение проблем-это мета-навык.

У всех нас есть проблемы. Маленькие и большие. То, как мы их решаем, может многое о нас сказать.

Когда я начал программировать, у меня не было никакой системы, и все проблемы решались следующим образом:

  • Я пробовал какое-то решение.
  • Если это не срабатывало, пробовал другое.
  • Если и оно не работало, повторял пункт 2, пока не повезет.

Иногда реально везло. Но это худший способ решения проблем и огромная трата времени!

Многие работодатели готовы взять на работу менее опытного специалиста, но с мышлением, ориентированным на решение проблем.

Способность разбивать большие и сложные проблемы на мелкие и легкие столь же важна (если даже не больше), как базовые технические навыки, необходимые для работы.

Итак, что же делать, когда вы столкнулись с проблемой?

Большинство проблем кажутся нам трудными только потому, что мы их не понимаем. Важно точно знать, что от нас требуется.

Как узнать, понимаете вы проблему или нет? Если вы можете объяснить её простым языком, то всё хорошо.

Бывало у вас такое, что вы зависли на какой-то проблеме, но как только начинали обсуждать ее с другими, мгновенно находили решение? Программистам знакомо это чувство.

Поэтому следует делать заметки, рисовать диаграммы или рассказывать кому-то о проблеме.

«Если вы не можете объяснить что-то простым языком, вы этого не понимаете». — Ричард Фейнман

2. Составьте план

Не бросайтесь с головой в решение проблем без плана. Не надейтесь на авось, потому что вы потеряете время и ничего не добьетесь.

Ничто не поможет, если у вас нет алгоритма действий.

В программировании это означает, что вы не начинаете писать программу моментально. Дайте вашему мозгу время на анализ проблемы и обработку информации.

Этот вопрос поможет вам построить хороший план действий:

«Я нахожусь в точке А. Какие шаги мне нужно предпринять, чтобы оказаться в точке Б?»

У программистов есть отличный способ для решения подобной задачи — псевдокод!

3. Разбейте на составляющие

Не ешьте слона целиком!

Разбейте проблему на части. Эти подзадачи гораздо проще решить. Затем решайте каждую подзадачу поочередно. Начните с самой простой.

После того, как вы решите каждую подзадачу, соедините всё в единую картину.

Поздравляю! Большая, страшная проблема решена!

Этот метод является краеугольным камнем решения проблем. Запомните это (повторите этот шаг, если нужно).

“Если бы я мог научить каждого начинающего программиста только одному навыку решения проблем, это бы сильно упростило жизнь”.

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

Если вы застряли на решении, уменьшите проблему до чего-то более простого. Вместо третьего по величине числа,найдите самое большое? Все еще слишком трудно? Как насчет того, чтобы найти наибольшее из трех чисел? Или большее из двух?

Упростите задачу до такой степени, когда вы точно знаете, как её решить. Идите от простого к сложному.”V. Anton Spraul

Сейчас вы, наверное, сидите и думаете: “Ну,да. Это круто и все такое, но что, если я застрял и не могу решить даже подзадачу??”

Во-первых, сделайте глубокий вдох.

Не волнуйтесь. Это случается со всеми!

Знаете, что отличает крутого программиста от остальных? Его не раздражают ошибки, наоборот, они его интересуют. Опыт приходит вместе с ошибками.

Вот три вещи, которые нужно попробовать, когда сталкиваетесь с трудностями:

Отладка: шаг за шагом пройдите через свое решение, пытаясь найти, где вы ошиблись. Программисты называют это отладкой (на самом деле, это все, что делает отладчик).

Свежий взгляд: посмотрите на проблему с другой точки зрения. Может, она решается на поверхностном уровне, а вы сами всё усложняйте. Или же начните заново. Я серьезно. Вы будете ошеломлены тем, насколько это эффективно.

Погуглите: Да, возможно, это пункт надо было сделать первым, но это было бы слишком просто. Независимо от того, какая у вас проблема, кто-то уже сталкивался с ней до вас. Найдите решение. И даже если вы уже решили проблему, перепроверьте себя.

Мой вам совет, не ищите готовое решение. Ищите пути решения. Потому что, если вы не приложите хоть немного усилий, вы ничего не узнаете. Если вы ничего не узнаете, вы потратили свое время впустую.

Не ожидайте, что через неделю вы станете мыслить, как программист.

Практика. Практика. Практика. Пройдет много времени, прежде чем вы узнаете, что “эта проблема может быть легко решена с помощью ”.

Шахматы, головоломки, видеоигры, математические задачи, монополия и множество других игр и увлечений развивают мышление. Например, Питер Тиль играет в шахматы, а Илон Маск играет в видеоигры. Но это не значит, что теперь вы можете сутками напролёт играть в видеоигры.

Подводя итог, мыслить, как программист — это составлять в голове алгоритм решения проблемы. Осознавать проблему, разбивать её на составляющие, решать подзадачи и потом собрать всё воедино.

Теперь вы знаете, что мышление, ориентированное на решение проблем, можно и нужно развивать.

Я желаю вам почаще сталкиваться с проблемами.

Вы правильно это прочитали. По крайней мере, теперь вы знаете, как их решать! Преодолевая трудности, вы становитесь опытнее и мудрее.

Можно ли научиться мыслить, как программист?

Все, кто интересуется программированием, наверняка знают эту цитату Стива Джобса: «Каждый человек на планете должен учиться программированию на компьютере, потому что оно учит думать». До и после него многие задавались вопросом, что значит «думать, как программист», и как этому научиться. Ответы на эти вопросы предложил Ричард Райс в колонке на FreeCodeCamp.

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

  1. пробуют один способ;
  2. если он не срабатывает, пробуют другой способ;
  3. если он не срабатывает, повторяют пункт 2, пока им не повезёт.

И иногда им везёт. Но это худший метод решения задач, какой только можно придумать, и к тому же он отнимает слишком много времени. Гораздо практичнее:

  1. выработать алгоритм,
  2. отработать его.

По результатам исследования навыков разработчиков, которое провёл сервис HackerRank в 2020 году, почти все работодатели ставят на первое место способность сотрудников решать задачи. Эта способность для них оказалась даже важнее, чем владение языками, а также навыки тестирования и системного проектирования. Вычислительное мышление — или способность разбивать комплексные проблемы на более доступные — ценится не меньше базовых технических умений.

На данную тему можно почитать много полезных книг, например, «The 4-Hour Chef» Тима Феррисса и «Думай как программист. Креативный подход к созданию кода» Антона Спрола. Советы, которые предлагают эти авторы, во многом схожи. Несмотря на то, что все люди разные и делают всё по-разному, если следовать некоторым проверенным советам, можно научить гораздо большему гораздо быстрее.

«Самая большая ошибка, которую, по моим наблюдениям, допускают начинающие программисты, это фокусировка на изучении синтаксиса, а не на умении решать задачи», — утверждает Антон Спрол.

Вот какой алгоритм предлагает он для успешного решения проблем.

1. Понимание

Нужно чётко понимать суть задачи. Зачастую «сложные» задачи лишь кажутся таковыми потому, что человек неправильно их понимает. Выяснить это достаточно просто: понятную задачу легко сформулировать другому простым языком. Многим программистам знакомо чувство, когда, «застряв» на проблеме, они пытаются её объяснить, и сразу начинают замечать пробелы в логике, которых до этого не осознавали. Поэтому задачу нужно записать, нарисовать схему или попробовать рассказать о ней другому человеку (или «мысленному помощнику»).

«Если вы не можете объяснить что-либо простыми словами, вы это не понимаете». Ричард Фейнман.

2. План

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

3. Анализ

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

«Единственный навык решения задач, которому я бы научил начинающих программистов — это упрощать.

Например, вы недавно начали программировать и вам надо написать программу, которая из десяти введённых чисел вычисляет третье по величине. Если вы новичок, это задание может показаться сложным, хотя и требует минимального знания синтаксиса.

Если вам это не по силам, упростите задание. Пусть программа определит не третье по величине, а просто самое большое из чисел. Если это тоже сложно, пусть она найдёт самое крупное только из трёх или из двух чисел.

Упрощайте задачу до того момента, пока не будете знать, как её решить, и запишите решение. Далее постепенно усложняйте задачу, внося соответствующие изменения в решение, пока не дойдёте до исходной».

Если решить подзадачу по-прежнему не получается, нужно сделать глубокий вдох и не нервничать: такое случается со всеми. Лучшие программисты и «решатели» отличаются лишь тем, что ошибки у них вызывают не раздражение, а любопытство. В случае неудачи могут пригодиться три вещи:

1) отладка: нужно пошагово пройти по решению в поиске ошибок.

«Дебаггинг — это искусство отличать, что вы на самом деле сказали сделать программе, от того, что вы думали, что сказали ей сделать». Эндрю Сингер.

2) переоценка: нужно сделать шаг назад и посмотреть на проблему под другим углом. Возможно, какими-то деталями можно будет пренебречь в пользу более общего подхода.

«Иногда мы настолько увлекаемся деталями задачи, что упускаем из виду обобщённые принципы, которые помогли бы решить её на более общем уровне. Классический пример — сложение длинного ряда целых чисел: 1 + 2 + 3 + … + n. Гаусс сообразил, что подсчитать эту сумму можно просто по формуле n(n+1)/2, и это позволило избавиться от множества знаков сложения». Джордан Болл.

Ещё один потрясающе эффективный метод переоценки — начать всё заново. Нужно просто удалить всё написанное и посмотреть на задачу новым взглядом.

3) помощь друга: например, Google. Какой бы ни была задача, скорее всего кто-то другой уже решал что-то подобное. Искать альтернативные способы имеет смысл, даже если человек уже решил задачу самостоятельно: всегда полезно учиться на чужом опыте. Но нужно искать решение не комплексной задачи, а отдельных подзадач, потому что если не приложить хотя бы минимум усилий, невозможно чему-либо научиться. А если ничему не научиться — это просто пустая трата времени.

Практика

Бессмысленно ждать выдающихся результатов уже через неделю. Чтобы действительно овладеть этим навыком, нужно перерешать массу задач. Только со временем и постоянной практикой придёт понимание того, как легко находить подход к той или иной проблеме. Есть масса возможностей на любой вкус, чтобы тренироваться — например, шахматы, математические задачи, написание кода, судоку, го, «Монополия», видеоигры.

Успешные люди постоянно тренируются на таких небольших головоломках: Илон Маск, Рид Хоффман, Марк Цукерберг и многие другие предприниматели утверждают, что свои успешные компании им удалось построить именно благодаря видеоиграм. Это не означает, что достаточно просто стать геймером. Суть игр — тоже решение проблем, и чтобы отточить навык, нужно каждый день тренироваться решать задачи, находя в них одну основу.

«Когда вам кажется, что вы успешно справились с одним препятствием, возникает новое. Но именно это и делает жизнь интересной. […] Жизнь — постоянный процесс преодоления этих преград. Каждый раз вы чему-то учитесь. Каждый раз вы становитесь сильнее, мудрее и перспективнее. Каждый раз вы обходите ещё одного соперника, пока не станете лучшим: лучшей версией себя». Райан Холидей.

Добавить комментарий