在开始提问之前,这里有一些关于我的信息。
我是计算机科学专业的本科生,Java是我的主要编码语言。
我大学的基本问题是教学水平。没有人关心向学生教授编码知识,而不仅仅是理论知识。
结果是,我的大多数大学同学根本都不了解编程。
甚至我还无法脱离传统的编程环境,这在一定程度上限制了我的编码。
有哪些可能的方法可以发展和扩展我的编程/编码技能。
另外,您可以建议相同的来源吗?
编辑:资料来源提示编码技巧的发展。
在开始提问之前,这里有一些关于我的信息。
我是计算机科学专业的本科生,Java是我的主要编码语言。
我大学的基本问题是教学水平。没有人关心向学生教授编码知识,而不仅仅是理论知识。
结果是,我的大多数大学同学根本都不了解编程。
甚至我还无法脱离传统的编程环境,这在一定程度上限制了我的编码。
有哪些可能的方法可以发展和扩展我的编程/编码技能。
另外,您可以建议相同的来源吗?
编辑:资料来源提示编码技巧的发展。
Answers:
编程是经验很重要的领域之一。因此,要成为更好的编码器,您应该编写更多代码。但是,写作并不是您唯一要做的事情。您还应该阅读其他开发人员的代码,并从中学习什么是好的代码。有关此问题,请参阅SO问题。
您可能还会发现专门用于编码的书籍很有用。例如“代码完成”。它们包含什么是好的代码的描述,再加上您的基础知识,可以使您成为一名优秀的程序员。
must-read
名单上。:) 谢谢!
(push 'code-complete must-read)
我最喜欢的名言来自孔子:
我知道了 我知道了,我记得。我知道,我知道。
我所获得的所有知识都是来自应用一种和一种策略:
始终走最具挑战性的道路。
您想学习C#吗?找到一份C#开发人员的工作。
你想学意大利语吗?用英语/意大利语词典去那里,然后说意大利语
您想学习编码吗?码!
编码是很好的建议,但是如果没有人在那里给您反馈,您只会重蹈覆辙。找到一份工作,在一个开源项目上工作,找到一名导师,让他们看一下您的代码。
尝试从头开始为一些简单的语言编写编译器。您将在整个过程中提高自己的技能(使用形式语言理论中的一些不错的理论技巧作为奖励)。我试图编写一个简单的Excel版本,这也是一个很好的练习。
就像其他人所说的那样,提高您的编码技能的唯一方法是实际做到。进行一些大型项目,使您的手变脏。但是,对于大型程序,掌握软件设计技术就显得尤为重要,否则程序的大小似乎难以管理。
内特·柯比(Nate Kirby)有一个不错的报价:
“糟糕的程序员会忽略细节。糟糕的设计师会迷失细节。”
因此,在这两个抽象级别之间切换是您应该掌握的技能。
同样,每小时可以写几行代码的速度也不是您的目标。我喜欢David Parnas的话:
“我经常听到开发人员被描述为“知道如何快速构建大型系统的人。” 快速构建大型系统没有任何技巧;构建速度越快,它们得到的越大!”
像在其他任何人类活动中一样,最好的改进方法是练习知识,但是为此您需要一些练习。 《实用程序员》一书的作者之一戴夫·托马斯(Dave Thomas)介绍了Code Katas的概念,类似于武术中的kata概念。
您可以在这里看看:http : //codekata.pragprog.com/
我建议学习您喜欢的语言的所有语法。了解如何使用虚函数,继承,lambda(如果存在)。等等。我所做的一件事是抓住一个大型的可怕库(我使用C ++的boost和STL做到了这一点),看看每行和每个关键字是否有意义。
或者,如果有一个语言语法参考资料涵盖了最新版本,则可以阅读该语言语法参考资料。作为一个示例,这里是C#参考(不是顶部的版本。我是通过查看一个更流行的,没有我想要的语法的较旧版本而犯错的)
普遍的共识是“编写更多代码”,我对此表示同意,但是我会建议您应该编写许多不同类型的代码。就语言而言,Java很好,但是您绝对应该在能力范围内上下编写代码。除了Java,我建议使用低级语言(C是一个不错的选择),脚本语言(我更喜欢perl,但python也是一个不错的选择),功能语言( Lisp是这里的一般建议,但是OCaml和Haskell也是不错的选择),并且至少对阅读汇编语言感到满意。
另外,在实现的程序类型中选择一些种类。看一下至少实现一个桌面GUI,一个富Web应用程序,一个网络客户端和服务器,一个驱动程序,一个数据处理实用程序,一个射线追踪器和一个物理模拟。
所有项目的范围都应相对较小,目的不是要有一个功能齐全的程序,而是要在您可能遇到的不同领域中获得广泛的经验,以学习每个领域所需的不同思维方式,并找出您的兴趣所在。
完成此操作后,您将对自己最感兴趣的编程类型有了个好主意,并且可以找到或启动一个开源项目,以获得在大型代码库上工作的经验,学期项目,并与其他开发人员合作。
您会得到一些类似的答案,而我的也将是相同的。编写代码。有两种好的方法可以做到这一点。
这两种方式都可以为您提供所需的直接编程经验,以及在您学习和提出问题以从中获得更多收益时参与编程社区的工作。你会犯很多错误。这很好-如果您不再犯错误,那么您就已经停止学习,并且需要找到一些挑战自己的新方法。
我的建议
我只能建议对我有用的东西。我曾梦想学习编程语言并用它创建国际象棋引擎。我已经花时间在书籍,文章和小样本上。因此,我决定检查对开发人员来说具有更好文档的真实项目。我选择了一个项目并开始每天阅读该项目。不要以为过去的日子会浪费时间阅读。这比花时间阅读文章和书籍要好得多。您将高度遇到许多乍一看不清楚的事物,但是如果您耐心尝试研究,这种情况将一天天改变。不要期望一个星期能理解所有东西。当您不了解某些东西时,您必须保持低卑的自尊心。只需尝试发现这真棒的东西是如何工作和享受的。
选择一个您有兴趣的现有项目,开始阅读代码,对其进行调试,并尝试了解其日常工作方式。还可以自己使用该项目。然后开始添加一些所需的功能。甚至尝试编写相同或相似的应用程序。