学习编程的最大浪费时间是什么?

时间:2008-12-29 02:23:34

标签: time-management

我过去曾经有过几次错误的开始教我自己如何编程。我已经完成了几本书(主要是C和Python),最后只是学习语法而不觉得我可以坐下来为自己编写一个程序。当我尝试在Codeplex或Sourceforge上查看项目的源代码树时,我似乎永远不知道从哪里开始阅读代码 - 依赖关系似乎向各个方向发展。

我觉得好像我没有按照“在街上”的方式学习编程,所以我想我会采用不同的方法来询问新手应该如何学习如何编码。如果你不得不重新学习编程,你不会做什么?你花了多少时间做什么,你现在知道你浪费了几周或几个月?

22 个答案:

答案 0 :(得分:49)

我看到浪费数周或数月的初学者在键盘上打字。计算机非常敏感,并且会在编辑 - 编译 - 运行周期中高兴地咀嚼数小时的时间。如果你正在学习,如果

,你将节省很多时间
  • 在接近计算机之前在纸上规划您的设计。无论您选择何种设计方法,或者您从未听说过设计方法,都无关紧要。只需写下一个计划,同时你的大脑完全投入并且不会被电脑分心

  • 当代码无法编译或无法产生正确答案时,如果您无法在五分钟内修复,离开计​​算机。去想想发生了什么。 打印出您的代码并随意涂鸦,直到您认为它是正确的。

这些只是帮助实现简单但难以实现的旧建议的设备,在编码之前思考

当我在学习的时候,我解决了从计算中心步行15分钟到我家的无数问题。可悲的是,对于现代PC,我们没有得到15分钟:-)如果你能学会接受它,你将成为一个更好的程序员,更快。

答案 1 :(得分:23)

我当然不会从查看“真正的”软件项目开始。就像你说的,知道从哪里开始太难了。这主要是因为大型项目更多的是关于他们的大型设计,而不是关于单个算法或程序流程;首先,你可能正在寻找一个具有多线程等功能的复杂GUI应用程序。没有任何地方可以“开始”查看代码。

学习编程的最佳方法是找到你想要(需要)解决的问题,然后再去解决它。但最重要的是,WRITE CODE。阅读编程书籍时,请执行所有练习。确保你做对了。编写代码是无可替代的。无法替代拧紧然后固定它。

答案 2 :(得分:19)

Stack Over F ..等等不,嘿。

对我而言,最大的吸收时间通常与“找到最佳答案”有关。我经常发现我会遇到一个问题,我知道如何解决,但觉得有一个更好的解决方案并继续寻找它。只有几个小时/几天后,我才意识到我有7个Firefox实例,每个实例包含至少5个显示在46英寸显示器空间的标签,我意识到我已经陷入了黑洞那就是追求无穷无尽的知识。

我对你和我自己的建议是对 refractoring 的概念感到满意。基本上这意味着什么(如果你不熟悉这个术语)是你想出一个问题的解决方案,并采用它,即使有可能更好的方法。一旦你完成了问题,甚至程序,你就可以重新审视你的方法,研究它,并找出你可以在哪里进行改进以改进它。

这个概念一直很难让我遵循。在大学里,我更喜欢写一篇论文,打印并将其打开。编写代码可以被认为与撰写论文非常相似。简单地将笔放在垫子上并推出你的想法可能会有效 - 但当你用一双新鲜的眼睛回头看时,你会毫无疑问地看到你希望你做的不同的事情。

答案 3 :(得分:13)

我刚刚注意到你谈到了阅读其他人项目的源树。 阅读其他人的代码是个好主意,但您必须更有选择性地阅读。许多开源代码很难阅读,而不是你应该模仿的东西。所以避免阅读任何您不尊重的程序员推荐的代码

提示:Jon Bentley,Brian Kernighan,Rob Pike和P. J. Plauger,他们都是我尊重的程序员,发布很多值得阅读的代码。在书中。

答案 4 :(得分:8)

学习如何编程的唯一方法是编写更多代码。阅读书籍很棒,但写作/修复代码是最好的学习方式。如果不这样做,你就无法学到任何东西。

答案 5 :(得分:3)

您可能还想查看this book, How to Design Programs,了解有关设计的更多信息,而不是语法细节。

答案 6 :(得分:3)

我唯一浪费数周或数月的事情就是担心我的设计是否是实施特定解决方案的最佳方式。我现在知道,这被称为“过早优化”,我们都在某种程度上受到了影响。学习编程的正确方法是解决问题,测量解决方案以确保其性能足够好,然后继续讨论下一个问题。一段时间后,你会遇到一堆问题,但更重要的是,你会知道一种编程语言。

答案 7 :(得分:3)

我认为这个问题对于不同的人会有截然不同的答案。

对于我自己来说,我曾经尝试过C ++(我大约十岁并且已经编程了一段时间),并且有一个点击并拖动的UI构建器。我认为这是一个错误,我应该直接使用C和指针等。因为我就是那种人。

在你的情况下,听起来你想被别人引导到正确的道路上,并且对自己跳进去做某事感到有点胆怯。 (你已经阅读了几本书,现在你要问要做什么。)

我会告诉你我是如何学习的:做了很多有趣的,相对较短的项目,难度稳步增长。我从QBasic开始(我认为它仍然是一个很好的学习工具),我在那里开发了我的大部分编程技巧。从那时起,它们当然得到了扩展和改进,但那时候我已经具备了良好的设计能力。

您可以承担的各种项目取决于您的兴趣;如果你在数学上倾斜,你可能想尝试素数生成器或将3D点投射到屏幕上;如果你对游戏设计感兴趣那么你可以尝试克隆pong(简单)或扫雷(更难);或者如果你更像一个黑客,你可能想要制作一个简单的聊天程序或文件加密软件。

自己完成这些项目的工作,不要担心你是否以“正确”的方式做事。只要你开始工作,你就学到了很多东西。在你完成一个项目后的某个时候,你可能想重新审视它并尝试做得更好,或者只是看看其他人是如何做到这一点的。

鉴于你似乎想要被带领的方式,也许你会发现自己是一个导师。

答案 8 :(得分:3)

我能理解你所处的情况。阅读​​书籍,甚至很多书都不会让你成为程序员。你需要做的是START PROGRAMMING。

实际上编程很像游泳,在我看来,即使你只知道一点语法甚至更少的编码技术,无论如何都要开始编码。制作一个小应用程序,家庭库存,费用目录,日程表,CD编目员,你想要的任何东西。

这个想法是要深入研究它的细节。一旦你开始编程,你将遇到现实世界的问题,你的问题解决技能将随着你的战斗而发展。这就是你每天成为更好的程序员的方式。

所以深入了解它,然后游过去......这就是你要做到的。

祝你好运

答案 9 :(得分:2)

假设你有很好的数学技能,试试http://projecteuler.net/它提出了一系列问题来解决日益增长的难题,这些问题应该通过编写短程序来解决。这应该为您提供解决特定问题的经验,而不会迷失在开源项目的细节中。

答案 10 :(得分:2)

这里有很好的建议,在其他帖子中。以下是我的想法:

1)学习打字,原因在Steve Yegge的this文章中解释。它会比你想象的更有帮助。

2)阅读代码通常被认为是一项艰巨的任务。因此,最好是获得一个开源项目,编译它,然后开始更改它并以此方式学习,而不是阅读并尝试理解。

答案 11 :(得分:2)

不学习如何使用指针以及如何手动管理内存。你提到 C ,我花了很多时间来修复混合* x和& x引起的错误。这是邪恶的......

找到一些问题来解决,编写或绘制解决问题的算法草图,然后尝试编写它。使用 Python (对初学者来说更友好)或仅使用静态分配内存的 C 。并使用书籍/教程。他们提供多种解决方案,因此您可以将它们与它们进行比较,并查看其他方法。

一旦你觉得你可以写一些简单的东西,请参阅面向对象设计的一些书/教程。它不是世界上最好的,但它可能会变得直观。如果没有,请检查函数式编程(如LISP,Scheme或Haskell语言)或逻辑编程(如Prolog)。也许这些会更适合你。

另外 - 找一些伙伴。您可以与人谈论编码,代码维护和设计。这样的人比一本书更值钱。

致所有C粉丝: C语言很棒,真的。它允许在Python或Ruby等高级语言中进行内存使用优化。编译后的代码也非常快,是RTOS或现代3D游戏引擎的唯一选择。但这对初学者来说不是一个好的切入点,这就是我所相信的。

噢,祝你好运!并且不要羞于问!如果你不问,答案就更难找到。

答案 12 :(得分:1)

也许从一个小的现有项目开始,并在其中找到一些处理其工作的核心部分的东西 - 然后使用调试器,逐步执行它并按照它要求它执行的操作来执行它的操作对你而言。

这可以通过多种方式为您提供帮助。当您尝试完成其请求时,您开始更好地掌握代码所涉及的所有各种事物。此外,您学习了宝贵的调试技术,这似乎是太多开发人员所缺乏的 - 虽然您可以经常最终发现重复的printf()(或等效)调用有什么问题,如果您可以调试,您可以解决一个数量级的问题更快。

我发现,从概念上讲,理解抽象中的编程的一个很好的心理模型是数据流的模式。当用户操作数据时,如何通过消化和存储程序更改数据?如何转换为以对他们有意义的形式重新呈现给用户?从根本上讲,代码是关于数据的转换,所有代码都可以分解为各种大小的结构,其目的是以某种方式改变数据,形成程序员期望从数据中不匹配的错误,高级别编码器正在使用的库处理数据,以及数据实际到达的方式。以下带有调试器的代码可以帮助您通过观察发生的变化来充分理解这种转换。

答案 13 :(得分:1)

作为一名仅作为程序员工作了6个月的人,我可能不是帮助你开始工作的最佳人选,但是因为不久之前我几乎什么都不知道,所以它很新鲜我的想法。

当我开始当前的工作时,编程不会成为我工作描述的一部分,但是当有机会进行一些编程时,我无法将其传递出去。

我花了大约1个月的时间在About.com's Delphi section上做教程。就像人们对于about.com一样, Zarko Gajic的教程很容易理解,也很容易理解。一旦我掌握了语言和IDE的基本知识,我就直接跳进了一个导出名为“Adept”程序的会计数据的项目。我花了一段时间,但我到了那里......

对我来说最大的帮助就是承担个人项目。我在Java中开发了一个名为Soldat的蹩脚2D游戏的IRC机器人。我通过规划和编写自己的项目来学到很多东西。

现在我对Delphi Pascal,SQL,C#和Java非常熟悉。我认为,一旦你掌握了一种OOP语言,你就可以学习另一种语言的语法,并且它更容易流行起来。

答案 14 :(得分:1)

我认为你应该不再认为你到目前为止浪费了时间 - 相反,我认为你的教育是不完整的,你已经迈出了一步,你还没准备好。听起来你读过的书很有用,你正在学习语言的复杂性。听起来你并不习惯于使用那些将代码打包在一起以便运行的工具。   一些书籍涵盖了对语言语法,设计模式,算法和数据结构等主题的关注,绝不会提及实际应用该信息所需的工具。这些书很棒,但如果你感动了它,我认为它可以解释你的情况。

您使用的是哪种开发环境?如果您正在为Windows开发,那么您应该精通在Visual Studio中创建项目,添加代码,运行和调试。您可以从Microsoft免费下载Visual Studio Express。

我建议您查找教程,这些教程实际上会引导您完成所使用的开发环境的UI。使用下拉菜单查找实际屏幕截图。看一下教程会引导您完成的内容,如果您不知道该怎么做,请考虑购买该书。最好是它有代码,你可以复制'n'加入,而不是你自己编写的代码。

我个人不喜欢这些书,因为我可以根据我做其他事情的方式来预测如何在VS中做新事物。但是,如果你从工具使用的角度来看训练是不完整的,那么这可能会使你朝着正确的方向前进。

为Python或C开发找到这些类型的教程书可能更难。尽管如此,它们对于.Net开发来说过于丰富。

答案 15 :(得分:1)

在基本语言语法之后,您需要学习设计。这很难。 This book可能有帮助。

答案 16 :(得分:0)

你应该阅读Mike clark的文章:How I Learned Ruby。从本质上讲,他使用Ruby的测试框架来运用不同的语言元素。

我使用这种技术来学习python,它非常非常有用。我不仅学习了这门语言,而且在练习结束时我非常精通Python的测试框架。一旦掌握了基础知识,就可以开始阅读代码,然后再开始构建更大的项目。

答案 17 :(得分:0)

标准答案是做点什么;选择一种简单的语言来做到这一点很好,但不是必需的。更多的是在你自己的头脑中解决问题,修复它因为它不起作用,这真的教你。对我来说,这总是发生在我尝试我永远不会完成但总是从中学习的永恒梦想项目(游戏)时。

答案 18 :(得分:0)

处理您已经知道如何部分解决的项目/问题

答案 19 :(得分:0)

找到生活中的问题或你做的事情,你觉得可以更有效率,并为它写一个小解决方案。它可能只是一个单一的脚本,但当您开始看到有用的工作结果时,您将对自己的能力更有信心。当您对使用该解决方案感兴趣时,您也会更有动力完成它。从简单和小开始,然后逐步升级到更大的项目。

当你在一个小项目上工作时,专注于用质量来构建一切。我认为这对于一些程序员来说是丢失的,他们认为如果它包含大量功能但是通常这些功能没有完成或可用,那么他们的软件会更令人印象深刻。如果您专注于为真正的问题构建高质量的解决方案,那么您将成为一名出色的程序员。

祝你好运!

答案 20 :(得分:0)

我要避免的另一件事是孤立地开发代码,也就是说,当我继续进行时,没有人看到它。从导师那里获得反馈将有助于您在正确的选择和正确使用语言习语方面保持正确的轨道。

答案 21 :(得分:0)

我认为我要避免的是在孤立的片段中学习一种语言,这些片段并不真正地挂在一起,而只是教授特定语言的各个方面。正如其他人所说,真正重要的是学习设计。我认为最好的方法是通过一个教程,引导您创建一个实际的应用程序,一路上教授设计。通过这种方式,您可以了解为何做出某些决策,并学习如何实现设计选择所需的工作。

例如,我发现Agile Web Development with Rails是学习Ruby on Rails的一种非常简单的方法,远比简单地阅读Ruby手册或者甚至在分散的Web教程中学习更好。