Оффтоп Digital Skynet
143

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

В закладки

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

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

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

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

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

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

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

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

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

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

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

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

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

1.Осознайте проблему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. На зависайте

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

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

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

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

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

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

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

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

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

Практика

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

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

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

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

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

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

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

Перевод статьи How to think like a programmer — lessons in problem solving от Digital Skynet :)

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

Написать
{ "author_name": "Digital Skynet", "author_type": "self", "tags": [], "comments": 1, "likes": -2, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 44061, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15388' + '59599') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 44061, "author_id": 187179, "diff_limit": 1000, "urls": {"diff":"\/comments\/44061\/get","add":"\/comments\/44061\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/44061"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

1 комментарий 1 комм.

Популярные

По порядку

0

А я давно избавился от иллюзий, будто каждого можно научить кодить. Такие иллюзии были ещё в 70ые годы, когда выдумали язык SQL. Но со временем стало понятно, что получается далеко не у всех.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления