在纸上写我的解决问题的方法?[关闭]


54

我是计算机科学专业的大一学生,我们刚刚开始用Python做一些实际的项目。我发现使用教授在课堂上建议的笔和纸的方法时,我的效率很高。但是当我无法写下问题并在纸上解决算法时,我真的很慢。在实验期间,我似乎总是不得不将作业带回我的宿舍。当我到达那里并把它写出来时,我解决了让我全班学习仅5分钟的问题。

也许是因为我感到压力重重,看到人们在我之前解决了实验室。也许这是笔和纸的方法。

我在论坛上浏览,有人写道,如果您必须在纸上编写程序,那么您不应该是程序员。我真的很担心,因为当我看到程序在做什么并且在键入实际代码之前跟踪程序运行的过程时,我会好得多。难道我做错了什么?

编辑:很抱歉,不清楚,但是当我说在纸上写时,我的意思是我的问题解决方法(例如,编写示例,使用值创建表等)不是我的实际代码。我只是用纸来表达我的想法。


28
首先考虑一下这个问题,我看不出任何问题。
Julien Guertault


34
那个人是错的。大多数人都使用UML或伪代码块之类的速记,但是无论您使用哪种方法都必须能够使您的思维正常工作,并且显然您需要使用纸张=)我猜费恩曼不应该是物理学家,因为他在黑板上写方程式,对吗?
Patrick Hughes

10
您面临的挑战很可能是在实际实验室中学习如何在纸上解决问题。工程师和科学家习惯于为此使用纸质笔记本(以及作为纸质记录),我一直想知道为什么这么多的IT人员不赞成这种方法。我是一位工程师,他的职业生涯用于编写代码并一直使用纸质笔记本。
2013年

4
@ ott--我和我的同事们都使用钢笔和笔记本。至少对我来说,这是我在大学期间学到的一个好技巧-无法擦除有助于迫使我多加思考,因此我不必最终将其分散在其他页面上。此外,将它们全部保留在一页上的诱惑以及擦除的能力使得意外擦除想要的内容变得太容易了。不正确的方法也只能消除,不能消除,因此您会坐在那里,提醒您尝试过的方法和无效的方法。纸很便宜,别让自己难受。
Izkata 2013年

Answers:


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 2013年

2
我将上述方法与“橡皮鸭”问题解决方法结合使用(尽管我的是SuSE毛绒玩具)来完成我的大部分复杂工作。我还有一块白板可以写很多东西。
Deco 2013年

+1。写问题然后回答是我经常解决问题的方式。它迫使我在计划中寻找陷阱和陷阱。
安迪·亨特

1
您会发现许多由软件开发驱动的业务到处都有可写的表面。他们通常充满了图表,伪代码,注释和作品。我非常喜欢把事情写下来。如果我要重构代码,那么我很喜欢可以实际打印出代码并对其进行注释的方法。我发现,与通读并做笔记相比,我的感觉要好得多。
Twirrim

1
该技术实际上有一个名称:伪代码编程过程
roufamatic

15

去吧!如果我们称呼您正在思考设计解决方案,那么您的流程将比仅仅分发代码快得多。

人们喜欢认为(嘈杂的人喜欢告诉我们)他们的工作方式更好。但是每个人的能力和技能组合都不同。因此,为您工作的方法是什么。随着练习的进行,您可能会转而去做更多的设计工作,并用纸解决更大的问题。

要注意的一件事是考试将采取什么形式。他们会写在纸上,还是会基于计算机?如果它们是基于纸张的,那么您的方式将为您带来优势。如果它们是基于计算机的,那也很好:在纸上进行任何设计,然后编写代码。最好的办法!


1
从长远来看,我可以保证思考和设计解决方案所需的时间更少。在大学里,我经常看到人们(包括我自己)投入2个小时的嘲弄,却发现他们的解决方案被打破了。花时间设计和解决问题将有助于找到一个简单的解决方案。出于这个原因,我们在这里工作有白板,笔记本和“咨询”。
杰米·泰勒

6

我没有在纸上写下实际的代码,但是对于那些琐碎的事情,我几乎总是从白板或笔记本开始。我通常会勾勒出:

  • 算法/过程/控制流程
  • 数据结构
  • 人际关系
  • 组件(如何分解此问题)

它通常是草图,伪代码和英语的组合。

我发现这样做可以使我在开始编码时更容易可视化。开始编写代码之前,我还将发现缺陷因为我可以看到我面前的所有内容(而不是不断滚动和跳跃)。不仅如此,一旦将其写完,我就可以在处理其他任务时让事情在我脑海中形成。我还可以以非线性方式工作,当一个想法打到我身上时将其提交给纸,当我到达需要的位置时再回到它。

在纸上做一些事情对于保留内存有巨大帮助。Field Notes品牌笔记本的口号是:

我不会写下来记住它,而是现在写下来记住它。

在采取更加集中的方式将事情记录在纸上之后,即使我稍后在手机上的ToDo应用中输入了一个条目,我仍然发现,将这种想法牢牢扎在脑海中比仅仅制作电子笔记要好得多。IOW,通过计划我在纸/白板上的编码,这些想法更好地留在了我的脑海。

当需要记录我所写的内容时,它也可以作为方便参考。


5

我认为首先在纸上起草代码(伪或其他方式)没有本质上的错误-确实与在白板上写代码没有什么不同,很多人在讨论如何解决问题时都会这样做。

在将非CS类论文的初稿写出来之前,您是否先在纸上写这些论文的初稿?实际上,我几年前还是大学生的时候就这样做了,但是大一以后,我强迫自己在屏幕上写所有草稿,因为这样可以使以后草稿的编写变得非常容易,并且同样的想法也适用编写代码。

我建议您尝试输入算法,即使它只是在像Word这样的文本编辑器中也是如此。您做得越多,就越不会依靠纸笔书写。而且,如果您的打字技能有所欠缺,而这实际上是您沮丧的根源,请参加打字课程!这将是您未来职业的最佳选择。


3

解决问题和编写实现解决方案的代码是两个不同的活动。

如果您不熟悉某种语言,那么您将在代码本身上花费大量时间-而在寻找一个好的解决方案上还不够。如果在这方面,纸,白板或天花板开始对您有帮助,则一定要这样做。

(就我个人而言,我发现自己下了计算机,走来走去,试图在脑海中建立解决方案)


2

您将获得面试王牌!它们使您在纸上或白板上编写代码。我完全相反。尝试用笔书写大括号或剪切和粘贴是如此繁琐!

我爸爸在编程COBOL时用了很多纸。我认为这只是您的思维方式。


0

我们曾经有一个两个学期的课程,名为“编程基础”。学期中的考试和期末考试都是在纸上进行的。如果您犯了任何编译错误,则会损失很多点。如果您犯了巨大的编译错误,那么您将失败。但是,我觉得它使我们能够查看代码并在相对较短的时间内找到错误的代码。


0

您所做的没有错,我也学会了使用纸和笔进行编程。

正如其他人建议的那样,对您有用的东西。我记得我写的第一个Java程序主要是在纸上,然后当我看到200多个编译器错误时,花了两个小时输入它,哭了十五分钟。还有更多,但是编译器只会显示前200个!不过,我要说的是,通过在纸上编写代码,我能够对程序需要执行的基本算法和功能进行思考。编译器指出了我的程序无法运行的原因。90%的问题超出了数组的范围。

随着您获得更多的经验和信心,您会发现减少使用笔和纸的时间。您已经知道如何使用基本概念,例如for循环等。您将在其他程序中有一些示例,可以重复使用。您将使用编译器和IDE在编写程序期间发现明显的错误。现在,尽管您没有那种经验。

通读您的问题,我想知道您的某些问题是否可能是由于关注所致。如果在安静的环境中使用笔和纸可以帮助您集中注意力,那就太好了。

您还在上大学,还在学习。最终,您要做的就是为您工作。如果您使用纸和笔来整理您的想法,并清晰,冷静地思考,那么您正在编程。


1
这如何回答所提问题?
t 2013年

OP询问使用笔和纸是否可以,因为他读到“有人写道,如果您必须将程序写在纸上,那么您不应该是程序员。” 他还说自己在上大学,现在还在学习。我的目的是表明他的所作所为没有错,我也学会了使用纸和笔进行编程。
Daniel Hollinrake 2013年

-1

当我在记事本上书写笔记和方法,检查书籍,检查网络并进行思考时,我的代码井井有条。我也是一个有视觉感的人,因此使用数据结构绘制图片非常有帮助。我不会写下每一行,但会写一些我认为“重要”的片段或关键功能。对于较大的项目,我启动了Visio。我不确定为什么有人会提倡直接跳到键盘上,除非他们效率更高或按小时付费。


-1

做对您有用的事情。我不会在纸上写代码。我确实在纸上编写伪代码并绘制流程图,但是编写完整的代码似乎是在浪费时间。


-2

在学习技术技能的第一天,我也面临着同样的问题。

但是这种类型的实践不能成功实现100%的成功,因为如果我们在纸上编写代码,那么就没有机会进行错误修复,有机会在进行纸上工作时解决错误和异常。

因此,文书工作不会提供任何导航来解决问题。由于系统实践,我们可以获得打字速度作为奖励。

我也在做书面工作,但是在实现我的功能之前,只是在此之后做一个粗略的估算,然后我将在系统上开始我的实现。

请尝试将更多时间花在系统实践上。这将给出100%的置信度和结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.