`
fangang
  • 浏览: 876827 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
311c4c32-b171-3767-b974-d26acf661fb2
谈谈用例模型的那些事儿
浏览量:38637
767c50c5-189c-3525-a93f-5884d146ee78
一次迭代式开发的研究
浏览量:68804
03a3e133-6080-3bc8-a960-9d915ed9eabc
我们应当怎样做需求分析
浏览量:409925
753f3c56-c831-3add-ba41-b3b70d6d913f
重构,是这样干的
浏览量:91486
社区版块
存档分类
最新评论

程序员的进化路线图

阅读更多
我身边的一些朋友常常问我,干了这么多年程序员真的有些累了、倦了、没意思了。虽然干了一个又一个的软件项目,但其实没有什么差别,就是写程序。当程序员的出路何在?每次我总是抑制不住自己的情绪想说,其实不是做程序员没意思,而是你还始终站在一个层次上。人是一种奇怪的动物,总是不进则退,程序员也是一样。它分为了许多的层次,刚毕业是一个层次,干了几年是一个层次,经历多年磨砺又是一个层次,经过几多磨难化茧成蝶将是另一个层次。这就像游戏,当你到了一定级别就应当升级转职了,而如果你始终拒绝升级转职,剩下的时间就是在索然无味地重复了;但当你完成升级转职,你就将进入另一个令人兴奋的世界。做程序员也是这样。OK,我们来看看程序员进化转职的路线图吧。

当你毕业刚进入软件行业时,当然毫无疑问是去编程了。每次项目启动以后,经理们就会给你一大堆需求,上面定好了你的程序应当实现什么功能。剩下的时间就是照着编写程序啦。但是,当你编程数年后,经历数个软件项目以后,你有没有想过,这些需求是怎么定出来的?那么变态,那么奇怪。有时候,我们为了客户一个变态的需求绞尽脑汁,最后客户还不买账。这些需求合理吗,客户真正的是要什么样的功能。当你开始思考这些问题,开始提出一大堆问题来质疑需求时,你的思维就开始从程序员进化为需求分析员。当项目经理发现你有需求分析员的潜质,OK,你的职业生涯开始升级了。你开始转职为需求分析员。

有人说,需求分析员就是需要那些不懂技术的人来做,我是绝对反对这样的看法的。需求分析员的作用不是那个记录员,记录客户的需求。需求分析员要记录客户的原始需求,然后分析整理,进行技术可行性分析,最后拿出客户满意而又技术可行的产品需求规格。不懂技术,就不能提前发现技术风险,为软件开发扫清障碍。所有有那么多人说需求分析员就是酱油,不懂技术的记录员当然就是酱油啦。但是,当你经过一番精彩的需求分析,却看到项目经理就这样直接交给那些稚嫩的初级程序员时,相信你的心都凉了。

从需求到实现,中间的距离也许有数百英里远,特别是那些大型管理系统。数百项业务功能,大大小小的模块,而流程与数据又错综交织。如果就这些直接扔给程序员们,就如同没有经过城市规划的房地产开发:小区是修好了,一会儿自来水管刨一遍路面,一会儿宽带刨一遍路面,好端端的路面变得丑陋不堪。现在城市建设都有专门的规划部门了,但软件开发依然延续着这种序乱。模块与模块之间没有接口调用,它们不是相互协作而是各自为政;共有的功能本应提取出来,但因为没有统一的规划,你写一遍,他又写一遍;没有技术架构和设计规范,程序员们按照各自喜好编写程序。终于有一天,你实在看不下去了。凭借多年的经验与资历,你开始着手规划系统,制订编程规范,并要求所有人遵守。这时候,你开始向系统架构师挺进了。

其实有许多人都十分疑惑,系统架构师是怎样一个角色。简单的说,他就是一个中间人,一个十分重要的中间人,联系业务需求与技术实现的中间人。需求分析员是那些精通业务需求的人,但是由于长期脱离技术,他们对技术的认识在退化,而做需求不能脱离技术。系统架构师可以与需求分析员一道分析需求,哪些是可行的,哪些是不可行的,怎么能够提出更可行的方案,满足用户的需求。同时,尽早确定技术架构,验证技术架构,攻克技术难题,对规避项目风险至关重要。毕竟,搞不定早点儿提出来嘛。

一旦需求定下来,开始开发了,系统架构师的工作并没有结束,因为程序员总趋向于各自为战,他们之间需要一个协调人。这个协调人要事先将他们各自的功能划分清楚。然后是相互之间的接口调用,这是一种协作的体现,系统内聚的体现。最后,系统除了横向的功能划分,还应当定义纵向的层次划分。应当划分哪些层,采用什么技术,每一层按照怎样的规范编写。总之,系统架构师就是那个规划师、协调人。当然,系统架构师还是那个技术牛人,因此技术难点的解决方案也归他来处理啦。

去理解和把握业务需求是需求分析员的工作;统领全局,将需求转换成技术是系统架构师干的事儿。但不论谁,都是在被动地接受需求。客户需求来了,搞一搞;客户需求不来呢?正所谓态度决定一切,试想,比尔盖茨开发windows,是因为一位客户跑来找到他:hi,比尔,我提个需求,你给我弄个windows吧;乔布斯设计ipod,是因为另一个客户跟他说:hei,我在地铁上太无聊了,你给整个ipod吧。这是否让人感觉滑稽可笑呢?软件发展的动力来源于技术的创新。每当新技术出现的时候,我们应当有这样的意识,怎样把它们转变成用户的需求。这就是主动发掘用户需求的意识。当你拥有这样的意识,并最终将胜势转变成胜利时,你又升级了,你将成为市场总监甚至是BOSS。当老板的并不一定是各方面能力都很强的人,而是那些具有开拓精神,从无人走过的荒草中开拓出道路的人。

在游戏中,我们完成一个并不算困难的任务就可以升级转职,但在现实中却并不是这样。每升一次级需要我们付出的是太多的辛苦与努力。怎样才能在适时的时候成功转职呢?管理学中的一句话道破了天机:在成为一名管理者之前,先做一位无名的管理者。什么是无名的管理者呢?没有管理者之职,却做管理者之事,这同样适用于其它职业。试想,当你还没有成为需求分析员时,努力去用需求分析员的思维,去完成需求分析的工作。当你一次次出色地完成需求分析的工作时,公司自然就会提升你为需求分析员。同样,当你开始运用系统架构师的思维去完成系统架构设计时,系统架构师还离你远吗?

总之,只有那些不安于现状、勤于思考、乐于学习,并且有一颗坚强的心的人,才能走到胜利的彼岸。


。。
分享到:
评论
6 楼 sorriest-siben 2013-08-13  
说的很实在。。。。
5 楼 fangang 2012-05-26  
Iwqenter 写道
另外,下周一开始进场做需求,楼主有没有相关的需求规格说明书的案例参考一下

抱歉,这期间涉及到太多的商业机密,所以不同方便
4 楼 lwqenter 2012-05-25  
fangang 写道
如果从设计开始做应该够了,如果从需求开始做就实在太紧了。

一般,假如这是一个例行维护,或者已有项目升级,或者需求已经很清晰了(一些素质比较高的客户,需求拿到你手里的时候就已经很清晰了),半个月的需求分析加编写文档,可以拿下来。如果是一个全新的项目,从头开始做,怎么也得一个多月才能拿得下来。

如果需求已经清楚了,一个半月的工期,让我来安排计划,那么是一个月的设计开发,一个月的测试。什么什么,没有算错吧?当然没有算错。在我的项目计划里从来没有全部开发完了才开始测试。如果是两个迭代期,1、2周开发人员开始第一个迭代的设计开发,测试人员设计测试用例并搭建测试环境;3、4周开发人员开始第二个迭代的设计开发,测试人员测试第一个迭代的开发成果;5、6周,测试人员测试第二个迭代的开发成果,并最终完成集成测试,开发人员配合测试人员测试,并着手完成安装程序及脚本的制作。

开始工作前,项目经理应该安排好2个迭代期分别的工作任务,最好不要平均分配,而是先紧后松,工作尽量往前排,因为你也不知道会发生什么异常情况。分2个迭代期的目的,既是为了保证测试与开发能有一定的并行,又能保证每个迭代的测试有一定的范围,能拿出一个确定的版本。

---
另外,下周一开始进场做需求,楼主有没有相关的需求规格说明书的案例参考一下
3 楼 lwqenter 2012-05-25  
fangang 写道
如果从设计开始做应该够了,如果从需求开始做就实在太紧了。

一般,假如这是一个例行维护,或者已有项目升级,或者需求已经很清晰了(一些素质比较高的客户,需求拿到你手里的时候就已经很清晰了),半个月的需求分析加编写文档,可以拿下来。如果是一个全新的项目,从头开始做,怎么也得一个多月才能拿得下来。

如果需求已经清楚了,一个半月的工期,让我来安排计划,那么是一个月的设计开发,一个月的测试。什么什么,没有算错吧?当然没有算错。在我的项目计划里从来没有全部开发完了才开始测试。如果是两个迭代期,1、2周开发人员开始第一个迭代的设计开发,测试人员设计测试用例并搭建测试环境;3、4周开发人员开始第二个迭代的设计开发,测试人员测试第一个迭代的开发成果;5、6周,测试人员测试第二个迭代的开发成果,并最终完成集成测试,开发人员配合测试人员测试,并着手完成安装程序及脚本的制作。

开始工作前,项目经理应该安排好2个迭代期分别的工作任务,最好不要平均分配,而是先紧后松,工作尽量往前排,因为你也不知道会发生什么异常情况。分2个迭代期的目的,既是为了保证测试与开发能有一定的并行,又能保证每个迭代的测试有一定的范围,能拿出一个确定的版本。

-----
感谢楼主提供的项目计划思路,公司有一个产品,我们的项目是想基于这个产品进行开发,这个产品并不完善,只覆盖了标书要求的需求的30%左右,客户给的需求资料是一年前的,下周一进场,标书要求一期要在六月底上线,领导打算跟客户谈,增加一个月,下星期第一次去见客户
2 楼 fangang 2012-05-23  
如果从设计开始做应该够了,如果从需求开始做就实在太紧了。

一般,假如这是一个例行维护,或者已有项目升级,或者需求已经很清晰了(一些素质比较高的客户,需求拿到你手里的时候就已经很清晰了),半个月的需求分析加编写文档,可以拿下来。如果是一个全新的项目,从头开始做,怎么也得一个多月才能拿得下来。

如果需求已经清楚了,一个半月的工期,让我来安排计划,那么是一个月的设计开发,一个月的测试。什么什么,没有算错吧?当然没有算错。在我的项目计划里从来没有全部开发完了才开始测试。如果是两个迭代期,1、2周开发人员开始第一个迭代的设计开发,测试人员设计测试用例并搭建测试环境;3、4周开发人员开始第二个迭代的设计开发,测试人员测试第一个迭代的开发成果;5、6周,测试人员测试第二个迭代的开发成果,并最终完成集成测试,开发人员配合测试人员测试,并着手完成安装程序及脚本的制作。

开始工作前,项目经理应该安排好2个迭代期分别的工作任务,最好不要平均分配,而是先紧后松,工作尽量往前排,因为你也不知道会发生什么异常情况。分2个迭代期的目的,既是为了保证测试与开发能有一定的并行,又能保证每个迭代的测试有一定的范围,能拿出一个确定的版本。
1 楼 lwqenter 2012-05-22  
楼主,假如你现在接手一个项目,工期是一个半月,需求,设计,开发,测试各个阶段的时间安排是怎样,人员安排呢,每个阶段要准备哪些工作,哪些工作是最重要的?

相关推荐

    程序员编程艺术系列之经典算法研究 电子书【高清中文带书签】

    A*搜索算法是一种在图中寻找最短路径的算法,它结合了最佳优先搜索和Dijkstra算法的优点,通过评估函数来估算从当前节点到目标节点的代价,从而决定下一个访问的节点。A*算法广泛应用于路径查找和图遍历问题,尤其是...

    2007 BerkeleyViewFutureOfParallel

    文中还提到了行业提出的多核设计路线图,这一路线图旨在通过二进制兼容性和缓存一致性保持过去的编程范式。然而,伯克利的研究者们认为,这种进化式的硬件和软件并行方法可能对于2或8处理器的系统有效,但当面临16或...

    matlab-基于GA遗传优化算法的TSP路线优化仿真带GUI操作界面-源码

    本文将详细介绍如何使用MATLAB中的GA遗传优化算法进行TSP路线优化,并通过GUI操作界面实现用户友好的交互。 遗传算法是模拟生物进化过程的一种全局搜索方法,由John Holland在20世纪60年代提出。它通过模拟自然选择...

    OpenGL Programming Guide 8th Edition - 2013

    《OpenGL编程指南》第八版为读者提供了一个清晰、逻辑、并具有洞察力的路线图,对于任何级别的开发者来说,它都是一个难得的资料。不仅仅对初学者,即使是对有经验的开发者,这本书也能够提供帮助,无论你的编程技能...

    制造业数字化转型之路.pptx

    数字化转型的路线图通常包括以下几个阶段: 1. **现状分析**:评估现有制造流程,识别痛点和改进空间。 2. **目标设定**:明确数字化转型的目标,如提高生产效率、降低运营成本、提升产品质量等。 3. **方案设计**:...

    深度探索C++对象模型(简)

    他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于...

    深度探索c++对象模型

    他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。 本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于...

    深度探索C++对象模型(侯捷译)

    他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。 本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于...

    深度探索 c++ 对象模型(pdf版)

    他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。 本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于...

    深度探索C.对象模型

    他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。本书涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。  本书重点:探索“对象导向程序所支持的C++对象模型”下的程序行为。对于...

    bare2d - 2d game engine-开源

    通常,这种文件会包含项目的目标、开发路线图、功能列表以及可能的时间表。通过阅读这个文件,开发者可以获得关于Bare2d未来发展方向和当前开发状态的更多信息,从而更好地适应和利用这个引擎。 总的来说,Bare2d ...

    Made2Shred's Powder Toy Mod-开源

    4. **roadmap**:可能是项目的路线图,列出了未来开发计划和目标,让社区了解模组的发展方向。 5. **script.sh**:一个Shell脚本,可能用于执行特定的任务,如安装依赖、运行游戏或测试代码。 6. **src**:源代码...

    Graphicstra-开源

    Graphicstra项目将这个算法实现并封装,提供了友好的用户界面和可扩展的接口,使得非专业程序员也能方便地利用这一算法解决实际问题。 开源软件意味着Graphicstra的源代码对公众开放,开发者可以查看、修改并分发...

    RealWorld-开源

    这种开放的环境促进了创新,鼓励程序员和爱好者提出新的想法,解决现有问题,从而推动软件不断进化。此外,开源软件通常具有更好的兼容性和可扩展性,因为有众多开发者致力于确保其与其他软件和服务的无缝集成。 在...

    Passage:塔防-开源

    在《Passage:塔防》中,玩家可以期待多种多样的塔楼类型,每种塔楼都有其独特的攻击方式和升级路线。游戏可能包括基础塔楼如箭塔、炮塔,以及更高级的特殊塔楼,比如冰冻塔、能量塔等,以适应不同的战斗策略。 开源...

    NetWar-开源

    NetWar的源代码托管在诸如GitHub等开源平台上,使得全世界的程序员和游戏爱好者都能参与到项目的开发中来。这种协作方式不仅有利于游戏的持续进化,也体现了开源社区的精神——共享、协作和创新。通过贡献自己的代码...

    Python版人工智能算法合集含示例代码,含遗传算法、粒子群算法、模拟退火、蚁群算法、免疫优化算法、鱼群算法,旅行商问题

    **遗传算法(Genetic Algorithm, GA)**是一种基于生物进化原理的全局优化方法,通过模拟自然选择、遗传和突变等过程来寻找问题的最优解。在Python中,可以使用` DEAP (Distributed Evolutionary Algorithms in ...

Global site tag (gtag.js) - Google Analytics