找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ 职业成长 ] 一位39岁程序员的困惑:知道得越多编程越慢怎么办?

2014-03-31 20:35| 发布者: watchmen | 查看: 1118 | 收藏

摘要: 守望者:完美是好的敌人,虽然很多人说年过30写代码能力不济了,其实不然,是因为在“好、快、省只能 3 选 2”时,以前你懂得少所以牺牲了“好”,现在你懂得多了却牺牲了“快”。对于程序员来说,理想的情况应该是 ...

Zilk1988 年 14 岁时就开始编程,此后尝试过几种职业,最终还是在 1997 年决定成为职业程序员(又称码农),现在已经 39 岁,对此选择依然无怨无悔。

但是后来他发现一个问题,自己的经验越丰富,完成项目或任务的时间反而越长。因为他见过了太多可能会出问题的情况而对选择踌躇。比方说,假设他刚想到要写一段写入文件的代码时,电光火石之间他就已经开始担心起下面的一系列的问题:权限、锁定、并发、原子操作、迂回 / 框架,不同的文件系统、目录中的文件数、可预测的临时文件名、PRNG(伪随机数生成器)的随机性质量够不够、操作过程中断电怎么办、API 怎么写才好理解、文档应该怎么写等等。

简而言之,他的问题已经从“怎么做”变成了“怎么做最好 / 最安全”。

结果就是他他做出来的版本坚如磐石,但是也导致他完成项目的时间比菜鸟还要长。

Zilk 说,他自己精通算法、热爱数学,享受复杂项目,专注度也没有问题。也许经验是有问题(尽管已经 39 岁了),导致害怕犯错,使得项目费时。所以他在StackExchange上邀请同行帮助他解决这个问题。

下面就是精选出来的解决方案:

Telastyn:你完成项目并不慢。以前你认为自己的菜鸟项目做完了但实际上并没有完。你应该把质量卖给客户。“公司可以做得更快成本更低,但项目真的完成了吗?或者说你愿意花几年的时间找 bug 吗?”此外,你还应该知道并接受那句老话:“完美是好的敌人。”

sevenseacat:“好、快、省只能 3 选 2”。以前你懂得少所以牺牲了“好”,现在你懂得多了却牺牲了“快”。

mouviciel:似乎你的经验的确不足:)。教训:遵守需求即可,不要想其他。这样才不会实现不需要的功能。

Satish:应考虑敏捷方法论而不是瀑布流。先交付然后迭代交付。此举有助于降低风险和成本。

DXM:似乎你加入黑暗面:管理的时候到了。我不是要建议你放弃编程变身经理。但从你的描述来看你的经验仅限于技术层面。写文件这么简单的事情你居然能想到 10 个方面的问题,稚嫩一点的开发者绝对是想不出来的。这不是什么坏事,但是……黑暗面的一切都与现值有关。它要考虑的是如何用最小的投入实现最大的产出(成本效益分析)。商业上的一切事情都要归结到成本、成功几率、失败几率、潜在回报等问题。做好这方面的数学然后采取相应行动。哪怕你是开发者也无妨:忽略权限和命名冲突的情况下建个临时文件只需 5 分钟的时间。净收益:团队其他成员可以开始依赖此文件的代码编写工作。这是不是一个完美的解决方案?当然不是。99% 呢?95%?90%?这些可能性是存在的。还要问你一个问题:你对技术债务(注:快速解决但会增长后续维护成本的做法)感觉如何?有人认为不应该有技术债务。我不同意。跟商业一样,技术债务让你可以借到“金钱”和“时间”以便晚点交付某样东西。2 年做出一个完美解决方案,或者用 4 个月时间快刀斩乱麻作出客户可以使用并且购买的东西,哪一个更好?判断当然要因情况而定,但是大多数情况下如果你要让客户等两年的话,客户可能早就跟竞争对手签约了。关键是像管理商业债务一样管理好你的技术债务。借的钱不够的话就拿不到最佳的投资回报。但是负债太高的话利息会把你压垮。我的建议是用番茄工作法。专注于小的时间间隔(番茄),然后为未来的工作 / 研究分配这些时间段,并且在执行的过程中不断根据事情的优先级进行调整。

Saul:编程的一个关键是管理并控制好复杂性,这是我的最高优先级之一。忽略了复杂性管理,要么缺陷频发,要么软件的 ETA(预计到达时间)急剧增加。软件复杂性有很多不同的管理层次和办法,好的做法可以是这样的:“任何软件项目的最高优先都是客户满意度,这是客户期望的函数。”换言之,软件复杂性取决于你控制客户期望的水平如何。

如果你接受这个观点,那么下面两点也很显然:

客户期望必须明示
客户期望永远都可以改变且通过协商完成。
你举了一个很好的例子,“直接写”还是“无数的其他考虑”。考虑一下,如果有人详尽写下了此二者的需求,双方的功能描述还是一样的吗?

同样是造飞机,F16 能飞,航模也能飞,但那能一样吗?

会员评论  

已有0参与评论

推荐阅读

[守望者 算法视频]01_数据存储(链表与数组)
[守望者 算法视频]01_数据存储(链表与
本章重点介绍数据的在计算机的存储方式 :连续存储(数组)与链式存储,同时
[守望者   java初中级视频]22_javaNIO,AIO编程
[守望者 java初中级视频]22_javaNIO,
内容简介:本课程介绍阻塞,非阻塞,同步和异步的基本概念,介绍javaNIO,AIO
[守望者   java初中级视频]00_java初中级课程学习导航
[守望者 java初中级视频]00_java初中
内容简介:全面贾少这套视频课程学习需要具备的理论基础,以及适合的学习人群
【守望者 linux项目】linux下的FTP服务器与客户端,作者 灯下野狐 ...
【守望者 linux项目】linux下的FTP服务
本项目是一个完整的FTP服务器及FTP客户端设计示例,对于需要学习网络编程项目
【守望者 游戏项目】基于cocos2d-x的跑酷游戏项目教程
【守望者 游戏项目】基于cocos2d-x的跑
Cocos2d-x跑酷游戏项目教程Cocos2d-x跑酷游戏项目教程cocos2d-x特性cocos2
【守望者 linux项目】mini WEB服务器设计
【守望者 linux项目】mini WEB服务器设
以下是曾经Watchmen一个朋友学习网络编程时设计的一个简单的MiniWEB服务器。
【守望者 观点】智能路由和Wi-Fi探针是一对好基友
【守望者 观点】智能路由和Wi-Fi探针是
智能路由与Wifi探针可以收集用户行为,同时可以收集用户MAC地址,还可以跟踪
[守望者 linux视频]01_开发工具与开发平台
[守望者 linux视频]01_开发工具与开发
本课主要介绍gcc,gdb等系列开发工具,开始编写程序之旅。要求理解Linux开发平
[守望者 算法视频]08_数据查找_hash算法
[守望者 算法视频]08_数据查找_hash算
守望者:普通逐个查找O(n),组织方式可以无序的数组或者普通链表。已经排序的
【解读】什么样性格的人会被夸性格好
【解读】什么样性格的人会被夸性格好
守望者:性格决定命令。好的性格意识着给别人面子,能接受别人装逼,而且以上
[守望者 linux视频]02 进程内存管理与valgrind的使用
[守望者 linux视频]02 进程内存管理与v
本课主要介绍Linux可执行文件与进程内存结构, Linux进程结构及内存申请与释放
[守望者 C和指针]11_高级指针_C_面向对象
[守望者 C和指针]11_高级指针_C_面向对
(1) 彻底解决指针、取地址后的类型问题。(2) 回调函数示例。
【观点】闲聊阿里“996",全集团ALL IN无线策略及加班之意义 ...
【观点】闲聊阿里“996",全集团ALL IN
守望者:几乎的所有的员工都不喜欢8小时之外的工作,而几乎所有的老板都期望
【守望者 观点】你是哪种人?一个能看穿你的人性和欲望的测试 ...
【守望者 观点】你是哪种人?一个能看
守望者:这个心理测验来自西方,是与人潜意识有关。我10多年前认识个朋友,从
【守望者 Linux项目】二阶段提交应用项目(Two-phase commit protocol )2PC 高并发 . ...
【守望者 Linux项目】二阶段提交应用项
背景:以下是watchmen曾经编写的一个二阶段提交银行系统的项目。这个项目源于

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved