文章原标题叫《方法论、方法论——程序员的阿喀琉斯之踵》,链接在 http://mindhacks.cn/2008/10/29/methodology-for-programmers/
中心思想:方法论不对,结论就很有可能不对
一.怎么去学习、认知普遍的方法论 错误方法: 认为一个事物对我没有直接用途的时候就不会去理会它 (其实是谬论,你根本不知道某样东西对自己会不会有用,正如你不知道认识某个人对你以后有没有用,你所认为的有用、没用其实都只是你自己的偏见,是你臆想出来的——这叫认知偏见)
正确方法: 调研+思考:wiki、quora、zhihu、问人、google、google scholar、v2ex、stack exchange、codewall、github等等等等 调研什么: 1、是什么,本质是什么hat) 2、解决了什么问题了什么需求么会出现hy)
1、要入行的:(What Why How) 调研,思考,然后去了解背后的技术细节(How)。对于软件来说,就是去学习基础的科目:如计算机体系结构、数据结构和算法、两个主要流派(命令式和声明式)的编程语言都使用了哪些主要的编程范式、对主流语言的优缺点和适用场合的了解等等。对于其他学科可能就是其他不同的东西了,反正是深挖向
2、不入行的:(What Why) 通过调研和思考,能够一定程度上保证当有价值的信息或机会摆在你面前的时候你不会把眼睛蒙上走开即可,并且多做做这类思考对于思维的广度也很有价值(这或许就是赤壁里面那句“什么都会点,生活才有乐趣”的真意啊!)
二.对于软件行业——程序员的方法论(这里开始扣题) 首先是一些事实:
- 软件行业是服务业,是为了给人提供服务的行业;什么叫提供服务,就是帮别人解决问题的一个过程,就像别人卖雪糕,是帮你解决了“身体凉快”这个问题(What)
- 那么作为解决问题的一个行业,自然可以分为两部分:(How)
- 发现问题
- CEO/CTO/….
- 给出解决方案
- PM
- Developers/Testers/Maintainers/…. (programmers)
- Sellers
- ….
- 发现问题
- 对于发现问题的部分,他们要做的
- 获取信息、定义问题是什么(如人性中对连结的渴望(微信)、人对性的渴望(陌陌)、对便宜货的喜爱(团购)、知识分子对奉献自己知识的愿望(知乎)、搜索服务(google)不胜枚举)、拆解问题( divide and conquer)
- 权衡最佳方案(技术构架《软件体系结构》、商业策略《从0到1》《商业模式新生代》、营销方案《市场营销亚洲版》)
- 本科教育中,需求一般由老师给,架构则基本不管,所以这方面基本是缺失的
- 对于给出解决方案的部分,他们要做的:
- 软件计划->需求分析与定义->软件设计->软件实现->软件测试->软件运行维护(which is typical)
- 《数据结构与算法》
- 《计算模型与算法技术》
- 《软件需求分析与建模》
- 《高级语言程序设计》
- 《Java语言程序设计》
- 《软件测试与维护》
- 等等
- 例子:
- 例如红帽里面,由开发部门除外的其他部门根据自己在工作中的需要提出需求,由一个专门的决策部门选择技术架构,剩下的给出解决方案的工作由内部开发部门完成(in-house programmer)
- 核心:因为没有发现问题的过程,从上往下解决问题的意识不强:
- 程序员认为CEO/CTO这样的角色是基本摆设
- 程序员做一个项目,首先想到的是用什么语言,什么框架,什么库,在这个方向上那就是什么看上去牛B用什么,恨不能都用 haskell、lisp 来写才爽(从下往上)
- 所以说,要有从上而下解决问题的意识:
- 不要只是追求爽,用最牛逼的技术,因为你是要解决问题,不是要爽,用最合适的技术;
- 不要死磕一种工具,因为你是要解决问题,不是成为工具专家,一切工具的出发点都是解决问题
- 业务才是最重要,只有业务才能满足需求,才能解决问题
- 但是!基础的技术还是要的,这是你入行的根本:
- 基础的科目:如计算机体系结构、数据结构和算法、两个主要流派(命令式和声明式)的编程语言都使用了哪些主要的编程范式、对主流语言的优缺点和适用场合的了解等等
- 反正就是要时刻默念:解决问题!
- 对实习的启发:
- 不是要你技术做的多么牛,而是去参与解决一个问题,pdc就是一个绝佳的平台
- pdc解决的问题是什么li>
- pdc怎么去解决这个问题
- pdc怎么做出来的li>
- 额外收获:
- 其实数学也是这么一个有给定问题然后解决问题的过程,所以,数学好的人不一定能够很好的发现问题
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!