Написание моего подхода к решению проблем на бумаге? [закрыто]


54

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

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

Я просматривал форумы, и кто-то писал, что если вам нужно писать свои программы на бумаге, то вы не должны быть программистом. Я действительно волнуюсь, потому что мне намного лучше, когда я могу увидеть, что делает программа, и отследить мой путь до того, как набрать настоящий код. Я делаю что-то неправильно?

Изменить: Извините за неясность, но когда я сказал писать на бумаге, я имел в виду мой подход к решению проблем (например, написание примеров, создание таблиц со значениями и т. Д.), А не мой реальный код. Я просто использую бумагу, чтобы высказать свои идеи.


28
Я не вижу ничего плохого в том, чтобы сначала обдумать проблему на бумаге.
Жюльен Геро


34
Этот человек не прав. Большинство из них используют стенографию, как блоки UML или псевдокода, но какой бы метод вы ни использовали, он должен работать так, как работает ваш разум, и, очевидно, вам нужен документ =) Я думаю, Фейнман не должен быть физиком, потому что он пишет уравнения на доске, верно?
Патрик Хьюз

10
Скорее всего, для вас будет задача научиться работать на бумаге, пока вы в лаборатории. Инженеры и ученые обычно используют для этого бумажные тетради (и как бумажный след), и я всегда удивлялся, почему так много ИТ-специалистов презирают такой подход. Я инженер, чья карьера написана на коде и я все время использую бумажные тетради.
Móż

4
@ ott-- Я и мои коллеги все используем ручки с ноутбуками. Для меня, по крайней мере, это хороший трюк, который я усвоил в колледже - неспособность стереть помогает мне обдумать это больше, так что мне не приходится разбрасывать его по дополнительным страницам. Кроме того, соблазн сохранить все это на одной странице и возможность стереть делает слишком легким случайное удаление того, что вы хотели. Неправильные подходы также могут быть только вычеркнуты, но не стерты, поэтому у вас есть напоминание о том, что вы пытались, а что не работает. Бумага дешевая, не усложняй себе.
Изката

Ответы:


70

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

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

Например, если я удаляю элемент из середины связанного списка, я могу начать с чего-то вроде:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

Затем я мог бы заменить // find the elementфункцию с большим количеством псевдокодов и продолжать работу, пока не получу полное решение. Не думайте, что код должен быть написан линейно.


Хороший совет, Карл.
andy256

2
Я объединяю вышеописанный метод с решением проблем с резиновой уткой (хотя мой плюш SuSE), чтобы выполнить большую часть моей сложной работы. У меня также есть роскошь доски, на которой можно написать много вещей.
Деку

+1. Написание вопросов, а затем ответы - это то, как я часто решаю вопросы. Это заставляет меня искать подводные камни и ошибки в моих планах.
Энди Хант

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

1
Эта техника на самом деле имеет название: процесс программирования псевдокода
roufamatic

15

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

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

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


1
Я могу ручаться за то, что обдумал и спроектировал решение, занимая в конечном итоге меньше времени. Слишком часто в университете я видел, как люди (включая меня) запускались в течение 2 часов, пока не обнаружили, что их решение было нарушено. Потратив время на разработку и проработку проблемы, вы сможете найти простое решение. У нас есть доски, тетради и «консультанты», где я работаю именно по этой причине.
Джейми Тейлор

6

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

  • Алгоритмы / процесс / управление потоком
  • Структуры данных
  • Отношения
  • Компоненты (как мне решить эту проблему)

Обычно это сочетание набросков, псевдокода и английского.

Я обнаружил, что благодаря этому легче визуализировать, когда я начинаю кодировать. Я также укажу на недостатки, прежде чем я начну в коде, потому что я могу видеть все перед собой (вместо непрерывной прокрутки и переключения окна). Мало того, что после того, как это написано, я могу позволить вещам сформироваться в моей голове, пока я работаю над другими задачами. Я также могу работать нелинейно, записывая идею на бумаге, когда она попадает в меня, и затем возвращаясь к ней, когда я достигаю точки, где она мне нужна.

Передача чего-либо на бумагу - огромная помощь для сохранения памяти. Слоган для ноутбуков марки Field Notes :

Я не записываю это, чтобы вспомнить позже, я записываю это, чтобы вспомнить это сейчас.

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

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


5

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

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

Я бы посоветовал вам попробовать набрать свои алгоритмы, даже если это просто в текстовом редакторе, таком как Word. Чем больше вы это делаете, тем удобнее вам не полагаться на бумагу и ручку. А если вам не хватает навыков печатания, и это на самом деле является источником вашего разочарования, пройдите курс печати! Это будет лучшее, что вы можете сделать для своей будущей карьеры.


3

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

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

(Лично я выхожу из компьютера и хожу по кругу, пытаясь найти решение в своем уме)


2

Вы будете интервью интервью! Они заставляют вас писать код на бумаге или на доске. Я полная противоположность. Пытаться писать фигурные скобки или вырезать и вставлять ручкой ТАК утомительно!

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


0

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


0

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

Как другие предложили сделать то, что работает для вас. Я помню, что первая Java-программа, которую я написал, была в основном на бумаге, а затем я потратил два часа на ее написание и пятнадцать минут на слезы, когда увидел более 200 ошибок компилятора. Их было больше, но компилятор показывал только первые 200! Однако я хочу сказать, что, написав код на бумаге, я смог продумать основной алгоритм и функциональные возможности программы. Компилятор указал причины, по которым моя программа не запускалась. 90% проблем были вне пределов исключений с массивами.

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

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

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


1
как это отвечает на заданный вопрос?
комнат

ФП спрашивает, можно ли использовать ручку и бумагу, поскольку он прочитал: «кто-то написал, что если вам нужно записывать свои программы на бумаге, вы не должны быть программистом». Он также заявляет, что он в колледже, так что все еще учится. Я хотел показать, что в том, что он делает, нет ничего плохого, и я научился программировать, используя бумагу и ручку.
Даниэль Холлинрейк,

-1

Мой код гораздо лучше организован, когда я пишу заметки и подходы в блокноте, проверяю книги, проверяю Интернет и думаю об этом. Я также гораздо больше визуальный человек, поэтому очень полезно рисовать картинки со структурами данных. Я не записываю каждую строку, но пишу то, что считаю «важными» фрагментами или ключевыми функциями. Для больших проектов я запускаю Visio. Я не уверен, почему кто-то будет выступать за то, чтобы прыгать прямо на клавиатуру, если он не намного эффективнее или ему платят по часам.


-1

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


-2

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

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

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

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

Пожалуйста, постарайтесь уделять больше времени системной практике. Это даст 100% уверенность и результат.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.