编程的成长,和项目统筹组织能力

The most important skill in software development

Here’s an insightful paragraph from James Hague’s blog post Organization skills beat algorithmic wizardry:

When it comes to writing code, the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity. I’ve worked on large telecommunications systems, console games, blogging software, a bunch of personal tools, and very rarely is there some tricky data structure or algorithm that casts a looming shadow over everything else. But there’s always lots of state to keep track of, rearranging of values, handling special cases, and carefully working out how all the pieces of a system interact. To a great extent the act of coding is one of organization. Refactoring. Simplifying. Figuring out how to remove extraneous manipulations here and there.

Algorithmic wizardry is easier to teach and easier to blog about than organizational skill, so we teach and blog about it instead. A one-hour class, or a blog post, can showcase a clever algorithm. But how do you present a clever bit of organization? If you jump to the solution, it’s unimpressive. “Here’s something simple I came up with. It may not look like much, but trust me, it was really hard to realize this was all I needed to do.” Or worse, “Here’s a moderately complicated pile of code, but you should have seen how much more complicated it was before. At least now someone stands a shot of understanding it.” Ho hum. I guess you had to be there.

You can’t appreciate a feat of organization until you experience the disorganization. But it’s hard to have the patience to wrap your head around a disorganized mess that you don’t care about. Only if the disorganized mess is your responsibility, something that means more to you than a case study, can you wrap your head around it and appreciate improvements. This means that while you can learn algorithmic wizardry through homework assignments, you’re unlikely to learn organization skills unless you work on a large project you care about, most likely because you’re paid to care about it.

编程从微观到宏观来说,是从代码片段,从算法和技巧,到方法参数传递,到模块化构建和框架,到整个项目的协调,参与人员的交流,用户的反馈,周期性的过程。

初学的程序员往往陷入细节的烦恼中,提高大局观的方法之一就是接触更多更好的交互、集成思想,明白优秀设计当中举重若轻,四两拨千斤的部分,以及去理解项目中的依赖管理。

算法的特色在于它在短时间内能让人理解,而且它的难点大家都能看到。但工程的协调组织能力往往是隐藏在水面之下的。大型项目里整个运行生态是臃肿,混乱的,对于那些关键组件间的数据传输,必然有关键人物进行理解,化繁为简,在最后的简明结果中,其实蕴含了很多看不到的艰辛。所以协调组织能力看起来不起眼,但实际上却是十分关键而急切的。

回想起半个月来毕设的工作,和老师的初衷,很无奈其他成员的参与度不高,更理想的状态是大家在一种商业化拿到酬金的情况下相互帮助,现状如此也无可奈何。一个大型项目能让参与的成员体会到交流的困难和混乱,却是一种宝贵的经验,可惜并不如人愿。

初学的程序员往往陷入细节的烦恼中,提高大局观的方法之一就是接触更多更好的交互、集成思想,明白优秀设计当中举重若轻,四两拨千斤的部分,以及去理解项目中的依赖管理。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值