对于程序员职业生涯的一些讨论
Jeff Darcy 和 Adrian Ho是某IT公司的首席技术顾问,下面是他们对程序员职业生涯的一些讨论。
Jeff Darcy:
编程不仅仅是写代码,更是在解决问题。下面是一个程序员必须完成的基本任务。
1.定义问题(需求和限制)
2.定义解决方案(算法和数据结构)
3.用代码写出方案
4.验证并测试是否正确
很多人往往第3点做的很好,但忽略了其他,因为到目前为止第3点是最简单的。当然,一个优秀的程序员可能只要凭借他们的知识和经验,甚至都不需要写 新的代码就能解决问题。所以在一个团队中,一个经验丰富的程序员贡献是很大的,因为他们能帮助其他人解决非编码任务,哪怕任务再繁重、技巧再繁多,也不在 话下。
一旦我们熟练掌握了我们的谋生工具,就能更深层次地理解一些编程领域的专业问题。程序员要想冠以“伟大”这个形容词,就得做到在任何情况下都能运用手头的技术和方法达到目标,而不仅仅是会编程就可以的。
……
Adrian Ho :
Jeff Darcy已经涵盖了差不多2/3的内容,下面我从他没有涉及到的方面再详细地讲讲这些技巧。
不要回避客户。
我见过很多程序员很害怕与那些极品客户交流,有的甚至到了近乎病态的程度。作为个人,我非常同情他们……但是,我也会提醒他们:“客户也是人,也有 他们的担心、弱点和希望。他们也是唯一能告诉你编程终极问题的人:我究竟要解决什么问题?”这些都是数据。上面Jeff已经谈到过了,但是我觉得它值得我 们的重视。因为我们在处理用户数据时要用到的几乎所有算法,以及选择的数据结构反过来则会成为实现算法的最大约束。
这也是我想说的第一点,问题的详细信息要能缩小数据结构的筛选范围,这样就不必老是因为无法明确地思考问题而导致在数据结构选择上浪费时间,甚至是项目延时和超出预算。
付你工资是为了能有产出,而不是让你玩的。
世界上有两种类型的程序员:一种是能在合理的时间内(包括运行和交付时间),能写出可解决现实问题的代码的程序员,还有一种程序员则相反!在这里,我将前者称之为“脚踏实地的程序员”,后者是“幸运的寄生虫”。我想大多数人都不愿意自己是一只“幸运的寄生虫”吧。
现在,我们差不多每周都会涉及到新的编程语言、并行编程库、NoSQL数据库等。如果是“脚踏实地的程序员”,毫无疑问实用第一。即便是发现最新出 来的点子非常适合项目的某个部分,也会先预估好时间,不然会导致加班加点赶进度……再则捕获并修复里面的bug也需要时间,这些不可避免地都会影响程序的 完成进度。(可能会是原先估计时间的双倍,搞不好甚至双倍还远远不够。)
我就是这么做的,我相信很多人也会。什么,你已经写好了客户端 – 服务器的代码?那还不够!你还得继续反复检查,看看会发生什么?会不会崩溃?“脚踏实地的程序员”会让这一切都不会发生。
现在互联网的影响已经渗透到我们的方方面面。我记得有一篇文章中谈到这么一个观点“带宽是无限制的”,我非常赞同。但是很多人却并没有认识到这一 点,然后我率先冲锋陷阵,运用一些简单的算法却得出了一个令人尴尬的结论,那就是我们的预期使用量会超出网络的最大理论容量。没人愿意把这些告诉给管理 层,因为从数学上和物理上来讲这意味着他们都不可能完成自己的承诺。这个时候,我在心里会默默地口出脏言“你妹的,说话跟放屁一样。”
但是我唯一能说的却是……“shit!”
译文链接:http://原网站已经失效/article/talk-about-programmer-career.html
英文原文:4 Useful Things To Learn In 10 Minutes To Better Your Programming Career
翻译作者:码农网 – 小峰