加载中 ...
首页 > 新闻资讯 > 经验心得 正文

关爱码农成长:关于写代码二三事

2019-03-25 09:39:37 来源:沈阳软件公司 作者:沈阳软件开发

queue

树(tree)、二元树(binary tree)、杂凑表(hash table

指标(pointer):这也许不算资料结构,许多高阶语言也

不让你用pointer,可是对影象体、指标要有观点,这是程序员与非程序员的区别之一

5,演算法

对以上资料结构的各项操作

排序(sort):至少搞懂34种基本的排序演算法,例如bubble sortquick sortmerge sort

征采(search):depth-first-searchbreadth-first-searchbinary search

其它:迭代(iteration)、递迴(recursive)、分治法(divide and conquer)、时间/空间複杂度的基本观点(big O)等

网络上资源许多,Google 一下、多写一些代码训练,弄懂以上基本观点,应该就够用了。

6,网络协议

TCP/IPHTTPDNS 等这些都是基本的网络协议。不需要到专家级别,但身为一个程序员,除非你的事情与网络完全无关(这种事情应该越来越少了),否则对这些网络协议的运作应该要有最少的相识。例如你能讲清晰,从你在浏览器输入一行网址到看到网页内容,在网络上发生了哪些事?以前我在Yahoo 面试前端工程师的时间,喜欢问一个问题:请诠释cookie 是怎么运作的?效果不少人答不出来。

固然现在的代码开发情况很利便了,种种library 一大堆,我们通常不需要自己实做这些底层的工具。但不懂这些工具运作的基本原理,会让你在debug 时被卡住,由于整个网络系统的运行,都是建设在这些基础架构之上。这些网络协议,再过许多年照旧会继续存在,花一点时间搞懂这些,我以为很值得。

7,除错能力

讲除错能力不太准确,由于除错不是单一能力,而是联合了履历、对代码的相识、对系统架构的相识、抽丝剥茧的能力、直觉,以及种种hands-on能力的综合,就像当侦探一样。

我在Yahoo 事情时代,最刺激的事莫过于排全球on-call了。所谓on-call,就是全球Yahoo 网站出包时,你要在最短时间内找出问题并修复,那真是超级debug。拜託,Yahoo 网站那么庞大、代码又那么多,出问题的代码又不是我写的,美国同事都下班了,鬼谁知道怎么解决?对不起,那是你家的事,排了on-call 你就得想措施解决。功效上的问题另有迹可循,最棘手的是像系统过载这类问题,爬log、写trial-and-error,总之想方想法揪出元凶。

程序员应该具备优秀的除错能力,不管代码谁写的。另外,修bug 也是一门学问,是接纳锯箭法、贴狗皮膏药,照旧找到病灶、解决问题背后的问题,就看程序员的功力了。

8,写出可读、易维护的代码

这个要求听起来很合理,不是吗?实在这是最难的。写代码这么多年,看过几多代码,我跟你说,这个天下上的烂代码占绝大多数,好代码只占一小小部门。我自己也不停在这条路上起劲着,到现在也不敢说自己写的代码多好。

为什么这件事这么难?我想了一下,或许有以下几个缘故原由:

可读性高的代码,通常是用很好的解法,解决了真正的问题

你需要彻底相识问题(problem domain

你需要思量过至少几种合理的解法(solution domain

你需要对程式语言、程式库、既有程式架构和可运用工具很娴熟

你要能以简驭繁,而这代表你掌握了更高的工具

——例如牛顿的F=ma、爱因斯坦的E=mc2,这是神人品级的功力(只是举例说明,写代码不需要到这样)

9. 你写代码必须很有纪律,例如:

不着急马上写代码,先想清晰问题、解法、架构

恰如其分的注释,少了不行、矫枉过正

专心想过的命名(业界有句名言

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。