关于编程练习
2018-07-27 本文已影响0人
AlgoPeek
今天聊一天编程练习,对于程序员来讲,可能天天都在写代码,但有些人的代码写的又快又好,有些人写的代码却无法阅读,还有一大堆问题。差距为什么如此之大呢?除了在日常实践中不断总结提高之外,还有一个大家很容易被忽略的问题——专业的训练。
摘录一段Uncle Bob的话与大家共勉:
专业人士都需要借助专门的训练提升自己的技能,无一例外。乐手练习音阶,球员练习绕桩,医生练习动手术和缝针,律师练习论辩,士兵练习执行任务。如果重视最终的成绩,专业人士就会选择练习。
那么问题来了,如何专业的练习呢?关于练习,Uncle Bob在《程序员的职业素养》一书里专门用了一个章节的时间进行介绍,今天在这儿还想给大家推荐一个编程练习的网站leetcode。网站对各个方向进行了分类如下:

大家可以针对各个感兴趣的方向可以做一些针对性的练习。由于长期做业务层面的开发,忽略了对一些基本功的练习,最近开始每天做一定量的算法练习,我认为有以下好处:
- 可以熟悉各种算法。关于算法,其实也是有章可循,网站中对各种算法,如递归(Recursion)、回溯(Backtracking)、深度优先(DFS)、广度优先(BFS)、动态规划(Dynamic Programming)、分治(Divide and Conquer)、二分查找(Binary Search)等;数据结构,如:数组(Array)、链表(LinkList)、堆(Heap)、栈(Stack)、队列(Queue)、哈希表(Hash)等;通过大量针对性的练习,可以掌握这些常见的经典算法和数据结构,熟练运用于日常实践中,写出效率更高更易维护的代码。
- 能够大大提高自己的程序设计能力。在日常工作中,在写业务代码时,可能并没有多少复杂的逻辑,对逻辑思维要求并不高。但在leetcode网站上,针对不同类型的练习都有难度区分度,有很多题还是有一些难度,而且每个题都有很多包含各种边界条件的case。在解题时能充分锻炼自己的逻辑思维能力,并且需要用精练的代码表述出来。
- 强化语言能力。leetcode网站提供了多种语言的编程练习,你可以选择自己喜欢的语言进行训练。在工作不同的项目甚至同一个项目我们可能会接触不同的语言,但对一种语言来说,久了不用就会生疏。采用不用的语言进行练习,还可以强化对语言的熟悉程度,一举两得。
- 更具市场竞争力。对企业招聘雇员来讲,编码能力可能是他们需要考核的最基本的一项,如果有扎实的算法功底和程序设计能力,相信会得到更多公司的亲睐。
最后,关于如何练习说一下自己的看法:
首先练习要有针对性。比如我自己在动态规划和数学相关算法方面比较弱,那就集中一段时间,针对性的进行大量训练;
其次,练习也要高效。对有些练习可能会比较难,自己暂时可能没什么思路,思路阻塞时,切记不要钻进死胡同,可以先做一些简单的练习放松一下头脑。如果长时间没有思路,可能是自己缺乏必要的背景知识,可以补充一些背景知识再尝试解决。
最后,练习要适量。日常练习任务不宜过重,每天3个左右的练习就可以了。认真对待每个练习,切忌为练习而练习,认真总结归纳,举一反三。
开启自己的练习之旅吧!我的练习已经托管到github上,方便以后查阅。