成为一名优秀程序员的思维能力


10

最近15年以来,我一直在使用非CS学位进行编程。我进入编程的主要原因是我喜欢学习新事物并将其应用到我的工作中。而且我能够比其他人更快地找到并修复编程错误及其原因。但是我可能从来没有发现自己是专家或专家,这可能是由于我不是CS专业。当我看到优秀的程序员时,我发现他们在解决问题方面非常出色,当然比我好得多。

我在职业中期中发现的一项技能就是以相反的顺序抽象地思考需求和任务。通过这种方式,我可以看到我真正需要做的事情而没有细节,并且可以快速找到已经存在的解决方案的一部分。

所以我想知道是否有其他思考技能可以成为一名优秀的程序员。我遵循下面的问答,实际上阅读了那里推荐的一些书。但是我不能真正选择直接适用于我的编程工作的好的方法。

程序员应阅读哪些非编程书籍以帮助发展编程/思维能力?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Answers:


10

感谢您指出现有问题的指针。尽管这些答案与我所了解的完全不同。我会根据我的经验给您一些建议。我自己的专业是物理学,我是否在形式,正确性/验证,算法分析,动态编程,数据库系统以及在开始,数据结构和算法选择方面都存在差距?我很早就关闭了最明显的差距(例如,数据结构和算法),但我仍然阅读该领域的书籍,以加深我的理解,查看替代性的演讲并刷新我的记忆。(我大约40岁,所以书籍对我有用:)

这是一份阅读清单(除了他们想到的顺序外,没有其他特殊顺序)。

  1. 编程珍珠(乔恩·本特利)
  2. 更多编程珍珠(Jon Bentley)
  3. 计算机编程艺术(Donald Knuth)
  4. C ++中的算法(Robert Sedgewick)
  5. 算法设计手册(Steven Skiena)
  6. 编程实践(Kernighan和Pike)
  7. 编程要素(Stepanov)
  8. 如何解决(Polya)
  9. 计算机程序的结构和解释(Abelson和Sussman)

在90年代中期阅读《编写固体代码》时,我也从中学到很多东西。但这不在列表之内,因为它实际上与思考技能并没有太大关系(它更多地涉及设计API以最大程度地减少意外错误使用的机会-或至少这是我的主要收获)。

在我 十几岁的时候,我也从哥德尔,埃舍尔,巴赫(霍夫施塔特)中学到很多东西,但是在您已经指出的问题的答案中已经提到了这一点。这是一本书,是为了娱乐而阅读,而不是直接培养个人的计算机科学技能。

我与大量的才华横溢的程序员一起工作,几乎所有人都非常喜欢Programming Pearls。当然,我希望我采访的更多候选人读过该书的第4章。


4

第一; 对于任何给定的学科,总会有某种方式在某方面做得更好。不用担心那部分。

然后; CS学位很不错,而且它所提供的理论知识当然是有用的,但这绝不表示有人是一个优秀的程序员。一些最好的程序员是自学成才的,相信我,世界上到处都是CS毕业生,他们无法用湿纸袋编程。因此,也不必担心该部分。

关于成为一名优秀的程序员需要做什么:我认为有两点很重要。其中之一是您需要能够以严格的形式化方法解决问题,并能够在一定的抽象水平上进行思考。如果您了解指针和递归,那么您很可能在这方面很出色。另一个是奉献精神和毅力。就像其他任何技巧一样,编程需要花费数万小时的专注,专注的练习来掌握,而这并不是一夜之间发生的。一种或另一种方法至少需要十年才能达到精通。如果您充满激情,那么花时间,集中精力并找到新的挑战将变得容易;如果不是,我想还是有可能的,但是那将不是一个愉快的旅程。


2

每当您开始学习编程语言时都要记住它。首先学习一下概念,并立即进行测试,这意味着实际上要做一下,一旦您完成本练习,您就不会忘记这些概念及其用法。

接下来,众所周知的“实践使之完美”,它也适用于编程。您越玩代码,运行代码,阅读现有代码进行更正,您将不是gr8程序员,而是很好。


0

我认为有两本非编程书籍至关重要。

第一个是Raymond Smullyan创作的“ Lady or the Tiger”。这是一组很大的逻辑难题,其中包括偷偷摸摸的自动机理论之旅。漂亮的东西。

第二个是道格拉斯·霍夫施塔特(Douglas Hofstadter)撰写的“ Godel,Escher,Bach:永恒的金色辫子”,它使您思考递归和语言理论。

如果您想养成新手的好习惯,请阅读胡佛(Hoover)的“学徒模式”和卡特(Carter)的“新程序员生存手册”。这两本书都讨论了如何扩展技能以及如何扩展职业。他们采用不同的方法,但是它们可以很好地协作。


0

我对您如何评估其他程序员的技能很感兴趣。

我认为,特定的,可应用的知识所产生的结果比一般技能要多得多。如果您已经有很多情况,并且以前可能遇到过类似的问题,则可以很快找到问题的原因。如果您已经知道如何使用一组适用的工具,则可以非常快速地构建解决方案。如果您尚不具备该知识,但是您确实具有必要的技能,则将需要更多时间来获取所需的知识。如果真是这样,那么您需要更长的时间来覆盖更多的距离,这并不一定意味着您的速度变慢。

当然,如果您可以积累知识并学习使用可以在以后帮助您的工具,那么这将为您带来好处。我发现,对各种各样的主题进行一些学习会有所帮助,因为它们最终重叠的部分超出了我的预期,而且仅知道在哪里查找所需的信息就可以节省大量时间。但是也许就是我。


0

您喜欢学习新事物并可以快速修复错误。这意味着您有成为专家的两个关键要素:热情和能力。但是您认为您永远找不到自己的专家,也许您还需要两件事:专注和时间。例如,当Linus Torvalds在1991年首次发布Linux时,没有人认为他是专家。他仍然每天都在研究Linux,如今您可以从Linux内核Git存储库中看到他的合并日志。他的专注使他成为Linux领域最著名的专家。时间是一个抽象的概念,它意味着保持自己的最新状态,通过不断的实践获得经验,与他人分享您的知识并进行回顾。

我和你有同样的情况。我从事非CS学位(EE学位)的编程已有15年了,而我一直与自己领域的专家差距很大,这使我感到困惑。但是我梦想成为一名专家,并开始参加一个开源项目。思维能力来自实践和经验。有些书可能会有所帮助,但它们的意义主要是指导性的。属于自己的思维能力来自您自己的经验。让我们从现在开始!

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.