如何提高我的编码技能?[关闭]


76

在开始提问之前,这里有一些关于我的信息。

我是计算机科学专业的本科生,Java是我的主要编码语言。

我大学的基本问题是教学水平。没有人关心向学生教授编码知识,而不仅仅是理论知识。

结果是,我的大多数大学同学根本都不了解编程。

甚至我还无法脱离传统的编程环境,这在一定程度上限制了我的编码。

有哪些可能的方法可以发展和扩展我的编程/编码技能。

另外,您可以建议相同的来源吗?

编辑:资料来源提示编码技巧的发展。


13
仅供参考:根据我的经验,理论知识无疑会在稍后部分为您提供帮助
Gopi 2010年

6
您可以只阅读“自学X天如何游泳”书吗?
pramodc84

9
“刻意练习”。做一些比您目前的水平要困难的事情,解决它,从中学到,然后重复。

7
@ pramodc84但可以肯定读一本书涉及到游泳,然后跳河有一定的帮助不仅仅是直接跳河,并努力学习游泳
戈皮

5
就像大多数大学一样。学位并不是要成为一名优秀的编码员;这是关于了解其背后的理论以及如何应用的理论-您可以说,成为一名优秀的编码员是毕业生的一项练习。
configurator 2010年

Answers:


46

编程是经验很重要的领域之一。因此,要成为更好的编码器,您应该编写更多代码。但是,写作并不是您唯一要做的事情。您还应该阅读其他开发人员的代码,并从中学习什么是好的代码。有关此问题,请参阅SO问题

您可能还会发现专门用于编码的书籍很有用。例如“代码完成”。它们包含什么是好的代码的描述,再加上您的基础知识,可以使您成为一名优秀的程序员。


8
《 Code Complete》是一本不错的书,这是我大学毕业后作为程序员最希望读的书。
glenatron 2010年

2
现在那本书在我的must-read名单上。:) 谢谢!
ykombinator

2
@ykombinator:(push 'code-complete must-read)
Giorgio

98

我最喜欢的名言来自孔子:

我知道了 我知道了,我记得。我知道,我知道。

我所获得的所有知识都是来自应用一种和一种策略:

始终走最具挑战性的道路。

您想学习C#吗?找到一份C#开发人员的工作。

你想学意大利语吗?用英语/意大利语词典去那里,然后说意大利语

您想学习编码吗?码!


19
+1代表始终走最艰难的道路。最终,它们成为一条简单的道路!好答案。
瑞安·海斯

3
做好挑战的准备似乎无疑是一项艰巨的任务,但我发现它激发了成功的动力。好答案。我最了解的语言是我最先掌握的语言,没有任何线索,并且在每个项目中都会不断学习。
克里斯(Chris)2010年

2
我经历了最大的挑战,改变得最大。更加积极

2
好的编程不是观众的运动。
隐身于2010年

4
@Pierre,您想学习1)拉丁语和2)Perl。拉丁语中的Perl代码: csse.monash.edu.au/~damian/papers/HTML/Perligata.html

21

编码是很好的建议,但是如果没有人在那里给您反馈,您只会重蹈覆辙。找到一份工作,在一个开源项目上工作,找到一名导师,让他们看一下您的代码。


1
究竟!很好。可能到目前为止,我还没有导师。
ykombinator

4
编写一些代码,并在StackOverflow.com上发布特定问题,您将获得很多收益。
JeffO

2
这就是为什么我一直渴望对我们的项目进行代码审查,但是“没有时间这样做”的原因。
MetalMikester,2010年

1
@MetalMikester-但总是有时间做完。
JeffO

1
@JeffO这就是现在正在发生的事情。:(
MetalMikester 2012年

10

这是Dan North和QCon 的演讲,内容涉及如何从新手过渡到称为Sharpening the Tools的专家程序员。以下是演示文稿中的主要建议:

  1. 练习基础知识:kata,有趣的代码...
  2. 向其他人学习:阅读书籍,博客等,阅读代码,成对编程...
  3. 了解趋势:当前行业中正在发生的事情
  4. 分享知识:学习某些东西的最好方法是理解和教导它
  5. 维护您的工具箱:使用“永恒的”和新工具
  6. 学习方式:了解学习方式

8

尝试从头开始为一些简单的语言编写编译器。您将在整个过程中提高自己的技能(使用形式语言理论中的一些不错的理论技巧作为奖励)。我试图编写一个简单的Excel版本,这也是一个很好的练习。

就像其他人所说的那样,提高您的编码技能的唯一方法是实际做到。进行一些大型项目,使您的手变脏。但是,对于大型程序,掌握软件设计技术就显得尤为重要,否则程序的大小似乎难以管理。

内特·柯比(Nate Kirby)有一个不错的报价:

“糟糕的程序员会忽略细节。糟糕的设计师会迷失细节。”

因此,在这两个抽象级别之间切换是您应该掌握的技能。

同样,每小时可以写几行代码的速度也不是您的目标。我喜欢David Parnas的话

“我经常听到开发人员被描述为“知道如何快速构建大型系统的人。” 快速构建大型系统没有任何技巧;构建速度越快,它们得到的越大!”


5

我几乎以我所学的每种语言实现了下注池或百家乐游戏。

这类软件涵盖

  • 日期和时间,带计算
  • 货币类型和可以与货币进行相互转换的事物
  • 一组易于测试的离散规则
  • 状态,状态与负责状态转换的多个实体之间的转换
  • 具有相同模型的不同视图的多个用户
  • 多个结束条件

多玩家二十一点和扑克也可以。

一个警告是,在我的日常工作中,我从事金融系统工作,在编写多人机会游戏和交易系统时要考虑的事情之间存在巨大的重叠。


4
  • 选择好的开源项目并阅读代码。
  • 自己承担一个中等规模的项目并开始编码
    • 如果您对Web开发感兴趣,请尝试使用自己喜欢的技术从头开始构建现有网站;django中的twitter怎么样?
    • 如果您要进行桌面应用程序开发,请先使用记事本,然后即兴进行记事本以支持高级功能(首先是基于正则表达式的搜索)。

4

这样想吧。。。。。。。。。。。。。。。。。。。。。。。。他像其他运动员一样,通过学习,练习,寻找可以改善自己的球技并为此做些事情的方式来做到这一点。

编码是相同的。更好地做到这一点的最佳方法是研究他人的行为,了解为什么他们会那样做,然后自己做。


是的,泰格·伍兹(Tiger Woods)通过拥有很多爱好者而成为“最佳”高尔夫球手。:-)所以他并不是一个很好的例子。
DL 2010年


4

跳入水中,刚开始可能很冷,您会很想离开,但很快您的身体就会习惯了并再次变暖,当您在水中感到舒适后,便可以到处游泳困境。

几个月前,我刚读完大学,就读Java。和你一样,我对如何正确编码一无所知。大约一个月前,我想用PHP构建一个Web应用程序。我不知道自己在做什么,只是去做。刚开始时这让人感到恐惧和不知所措,但是随着您的练习,它变得自然。我什至多次编写应用程序,每次都简化了它。现在,我正在从头开始开发该应用程序,但是这次我要弄清如何面向对象并使用PEAR及其模块quickform,这是我必须克服的另一个障碍,但是仍然要坚定并激动。

那就练习吧 跳入水中!祝你好运:)


3

我建议学习您喜欢的语言的所有语法。了解如何使用虚函数,继承,lambda(如果存在)。等等。我所做的一件事是抓住一个大型的可怕库(我使用C ++的boost和STL做到了这一点),看看每行和每个关键字是否有意义。

或者,如果有一个语言语法参考资料涵盖了最新版本,则可以阅读该语言语法参考资料。作为一个示例,这里是C#参考(不是顶部的版本。我是通过查看一个更流行的,没有我想要的语法的较旧版本而犯错的)


3

普遍的共识是“编写更多代码”,我对此表示同意,但是我会建议您应该编写许多不同类型的代码。就语言而言,Java很好,但是您绝对应该在能力范围内上下编写代码。除了Java,我建议使用低级语言(C是一个不错的选择),脚本语言(我更喜欢perl,但python也是一个不错的选择),功能语言( Lisp是这里的一般建议,但是OCaml和Haskell也是不错的选择),并且至少对阅读汇编语言感到满意。

另外,在实现的程序类型中选择一些种类。看一下至少实现一个桌面GUI,一个富Web应用程序,一个网络客户端和服务器,一个驱动程序,一个数据处理实用程序,一个射线追踪器和一个物理模拟。

所有项目的范围都应相对较小,目的不是要有一个功能齐全的程序,而是要在您可能遇到的不同领域中获得广泛的经验,以学习每个领域所需的不同思维方式,并找出您的兴趣所在。

完成此操作后,您将对自己最感兴趣的编程类型有了个好主意,并且可以找到或启动一个开源项目,以获得在大型代码库上工作的经验,学期项目,并与其他开发人员合作。


2

您会得到一些类似的答案,而我的也将是相同的。编写代码。有两种好的方法可以做到这一点。

  1. 选择真正吸引您或您感兴趣的东西,然后继续实施它。如果您喜欢游戏,请编写游戏。如果您对Web感兴趣,可以将一个有趣的原始网站组合在一起。您可能甚至无法完成它,但是经验会教给您很多。
  2. 选择一个您感兴趣的开源项目并参与其中。从现有代码中学习并使用它来修复错误,构建单元测试和实现新功能。

这两种方式都可以为您提供所需的直接编程经验,以及在您学习和提出问题以从中获得更多收益时参与编程社区的工作。你会犯很多错误。这很好-如果您不再犯错误,那么您就已经停止学习,并且需要找到一些挑战自己的新方法。


2

我的建议

  • 找到一个宠物项目,并用与您所知道的语言不同的语言(lyke python / c#)编写它。这将教给您比您想象的更多的东西。查看其他类似的项目,并尝试与它们进行功能对等。为此,您可以放慢脚步,并有适度的目标,并通过新功能稳定地增加难度。当您去求职面试时,这也将成为您的亮点。
  • 在您的项目中查找相关技术的用途,例如Web服务,javascript,ajax,地理编码以及基本上在软件世界中取得进展的任何技术。
  • 与其他操作系统一起玩,例如Linux / freebsd。您对不同类型的系统的了解越多,您就会越了解它们的行为方式以及它们以这种方式做事的原因。
  • 完成部分代码后,请返回并尝试不断对其进行改进。查找效率低下的地方,在需要时添加更多评论,然后尝试完善它。
  • 在c2.com上挖掘。有很多好的编码实践。了解这些内容,并尝试将其应用到您自己的项目中。
  • 阅读诸如实用的程序员和完整的代码之类的书,它们将为您提供有关强化编程的知识。
  • 这听起来似乎无关紧要,但是如果您还没有像RC赛车,乐器演奏或学习外语这样的人,那么可以找到另一项技术爱好。您使用的大脑越多越好,并且由于编程可能会占用太多时间,因此需要不时放松。

2

同行评审确实有助于提高代码质量。如果您没有真正的导师,则可以在将代码减少到必要的最低限度后,将其发布在StackOverflow或RefactorMyCode或邮件列表中,然后人们会帮助您提高代码质量。


1

“实践!” 那是陈词滥调。

您应该复习数学课中学到的知识,并编写一些程序来解决这些问题。另外,实施电梯程序,自动售货机(用于计算硬币的零钱),以提高您的逻辑技能。考虑一下日常生活中的一切,并加以实施。


1

是的,实践对于培养编程技巧并保持技巧敏锐非常重要。但是,仅凭练习只会带您走远。您还必须向比您了解更多的人学习。有些技术是您从未听说过的,其益处并没有立即显现出来,还有一些您永远无法发明的窍门。

学习新技术,巧妙技巧和有用实践的方法很多。看书。与同事交谈。问问题。查看其他人的代码,然后让他们查看您的代码。阅读有关编程的博客和文章,包括该站点。简而言之,请勿在真空中工作。

哦,如果您不确定NP-complete是什么意思,或者如果big-O符号使您感到恐惧,那么您​​应该考虑一些计算理论和算法类。


1

我要说的是,您应该阅读一些设计模式,例如Builder,Factory,Composite,最后是Observer,Mediator和Flyweight。设计模式并不是编码解决方案的全部,但它们演示了如何实现面向对象编程的理论概念。


1

我只能建议对我有用的东西。我曾梦想学习编程语言并用它创建国际象棋引擎。我已经花时间在书籍,文章和小样本上。因此,我决定检查对开发人员来说具有更好文档的真实项目。我选择了一个项目并开始每天阅读该项目。不要以为过去的日子会浪费时间阅读。这比花时间阅读文章和书籍要好得多。您将高度遇到许多乍一看不清楚的事物,但是如果您耐心尝试研究,这种情况将一天天改变。不要期望一个星期能理解所有东西。当您不了解某些东西时,您必须保持低卑的自尊心。只需尝试发现这真棒的东西是如何工作和享受的。

选择一个您有兴趣的现有项目,开始阅读代码,对其进行调试,并尝试了解其日常工作方式。还可以自己使用该项目。然后开始添加一些所需的功能。甚至尝试编写相同或相似的应用程序。

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.