Wednesday, March 11, 2009

软件的配置(Deployment of Software)

有一个外资厂(非软件业)的软件采购程序如下,
  1. 如果公司现有的软件可以用,用现有的。
  2. 如果修改运作程序后,公司现有的软件可以用,修改运作程序,用现有的。
  3. 如果公司现有的软件可以用,但要供应商修改,让供应商可以修改。
  4. 如果市场上有现成的,买现成的。
  5. 叫供应商制作。
  6. 内部制作。

供应商的软件,至少有以下好处:
  1. 供应商是软件业者,软件科技掌握能力更强,
  2. 供应商提供的软件,以最佳做法(Best Practice)为基础,适用于很多客户,软件架构健康,方便未来改良,
  3. 供应商的软件,有很多客户使用,就是说,经历了很多实用测试,较少出错,
  4. 用供应商的软件,长远来说,较便宜划算,

Software Purchasing Procedure of a non-software industries MNC is as follow:
  1. If there is existing software in the company which is usable, use that software;
  2. If by changing the operating procedure, existing software is usable, change the operating procedure, and use the existing software;
  3. If with enhancement works done by vendor to the existing software is workable, ask the vendor to do the enhancement;
  4. If there is Commercial-Of-The-Shelf (COTS) Software available, buy that software,
  5. Ask vendor to develop;
  6. In house develop;

Software from software vendors at least has the following benefits:
  1. Software vendors deploy better and advance software technologies, and keep up to date with them,
  2. Software is designed best on Best practice, thus suitable to a lot of customers, the architecture is more robust and ease of future enhancements
  3. Software is use by many customers, ie: have gone through tremendous 'live testing' by customers, thus lesser bugs
  4. In long term, is cheaper.

Monday, November 3, 2008

生命周期(Life Cycle)

我之前遇到一个客户,他要一个可以让远程员工递交工作报告的系统,在和他详谈后,我介绍他用:《谷歌企业应用套件》,因为他其实只是要一个简单的、可以交换咨询的系统。我说,这个软件是免费的,你可以自己网上注册使用。他听了有点不可思议的。有生意上门,不做?理由其实有几个,当今天要说的是这个:生命周期(Life Cycle)。软件是有生命周期的,就好象汽车一样,软件开始使用后,至少有三个东西是需要定时维护的。
  1. 软件本身。
  2. 软件使用的资料。
  3. 软件运行的环境,包括硬件、作业系统、软件配件等。

软件不是做了,交货,收工。我说,我虽然是做软件的,但其实我不很同意随随便便就制造软件。为什么介绍他用谷歌的软件呢?因为,谷歌的服务里,包含里以上三件东西。如果他要新的软件,100%符合他的要求的,那么除了软件制作成本,他也要有心理准备,至少要承担以上三个维修费,这可是独立承担哦!
I met a client previously, he needs a system that he can monitor his subordinates progress who work in different locations. After discuss with him in detail, I recommended him with Google Apps, because he only need a simple, document/information exchange system. I said, the software/website is free, you can register online. He sounds unbelievable! I am rejecting business, am I? There are a few reasons, and what I would like to share today is: Life Cycle. Software has a life cycle, just like car, once started, you have at least, 3 items that need to be maintain from time to time.
  1. The software itself.
  2. The data.
  3. The software execution environment, such as hardware, operating system, external third party software components that the software is using, etc.

Software is not a 3 steps job: Create, Deploy, and Done. I said, althought I am producing software, but I don't recommend people to simply create new software. 
Why I recommend him Google Apps? Because, in Google's service, all 3 items are included. If the client wants a new software, a 100% fit to his requirement software, he will not only need to bear the cost of software development, he has to prepare to bear the above 3 maintenance fee, alone!

Friday, August 29, 2008

U型的SDLC(U-Shape of SDLC)

我们可以从另一个角度来看SDLC,U型的SDLC。

一边是用户,高商业知识,低软件知识,另一边是程序员,低商业知识,高软件知识,而在中间的,就是分析员、测试员等。同样的道理,越靠近用户,越需要高商业知识,越靠近程序员,越需要高软件知识。因此软件公司未必要有七种员工,从这个角度看,可以有两种(高商业知识或高软件知识),或是三种(高商业知识,中软件知识,高软件知识)而已。
Let us see the SDLC from different angle, U-shape SDLC.
At one end, is the system user, who knows lot of business rules, but almost nothing about computer technicals. The other end, is the programmers, who is the expert of computer technicals, but not the business rules, and those sit in the middles, are analysts, testers, etc. The more the staff near to the user, he need more knowledge of business rules, the more the staff near the programmers, he need to know more about technical knowledge. Thus, a software house not necessary to have 7 types of staff (as according to SDLC), seeing from U-Shape angle, a software house can have either 2 types (high business rules, high technical skills), or 3 types (high business rules, half-half, high technical skills).

Tuesday, August 5, 2008

系统开发生命周期(Software Development Life Cycle)

让我们看看最基本的,可以这么说,所有IT毕业生都懂的,系统开发生命周期(SDLC)。SDLC有七个阶段:
  1. 可行性研究(Project planning, feasibility study)
  2. 需求分析(Requirements gathering and Systems Analysis)
  3. 软件设计(Systems design)
  4. 软件编程(Build)
  5. 软件测试(Testing)
  6. 软件部署(Deployment)
  7. 软件维护(Maintenance)

之前所说的分析,编程和测试,原来只占SDLC的其中三项,还有四项呢?或许我们认为前三项就是我们所说分析员的工作,那么软件部署和软件维护,又该是谁的工作呢?
Let us look at the most fundamental idea about software development, Software Development Life Cycle, which most of IT graduates will know. SDLC has 7 phases:
  1. Project planning, feasibility study
  2. Requirements gathering and Systems Analysis
  3. Systems design
  4. Build
  5. Testing
  6. Deployment
  7. Maintenance

Compare to what we have talk previously (analysis, programming and testing), there are 4 more phases in SDLC. May be in our definition, analyst is the one who responsible for first 3 phases, then how about deployment and maintenance?

Wednesday, July 30, 2008

软件公司(Software House)

一间软件公司该有什么人?让我们先来看看维基的说法《Software house》。
A professional software house normally consists of at least three dedicated sub-teams :
  • business analysts who define the business needs of the market
  • software designers/programmers who creates the technical specification and next do a coding
  • software testers who are responsible for the whole process of quality management

一间软件公司基本上要有:
  • 分析员
  • 程序员
  • 测试员

所以,程序员只是一部分而已。在软件开发有经验的人都晓得,分析员和程序员尚且有时可以让同一个人兼任,或者分析员和测试员兼任,但是程序员和测试员往往就不能是同一个人了。程序员为最了解系统内部的人,对整个系统操作、流程都很清楚,做起测试员的工作时,就无法更天马行空,从各不同角度去对系统进行不一样的测试,以找出系统可能有的问题了。
所以,就算是小软件,最好,还是有起码两个人,一个写,一个试才能。
A software house basically requires:
  • Analyst
  • Programmer
  • Tester
, thus, programmer is just part of software development. For those experienced with software development will normally know that, is acceptable for analyst and programmer to be a same person, or to have analyst and tester to be a same person, but it must not to have programmer and tester to be same person. This is because programmer is the person who know the most about the internal design of the system, thus, when doing testing, the he/she will not be able to think out of the box, and test the system from different possible angles. To conclude, even a small software, is better to have at least 2 persons, one to analsis/code, one to analysis/test.

Sunday, July 27, 2008

程序员的迷思-人多就好?(Mystery of Programmers-Quantity is the key?)

一般上,需要软件时,往往都会说:“我找程序员做。”规模较大的公司,多有聘请一群的程序员,常常当软件无法制作出来,或常逾期交货时,老板们总会一句:“做不来,再请多些程序员,我给你多些预算(budget)。”这样就行了吗?
如果请多些程序员就可以把软件制造出来,我们应该可以看到,欧美软件大厂如微软、SAP等早已相续倒闭,或失去优势,主宰世界软件业的,应该是劳工较便宜的中国、印度、印尼等国,为什么没发生呢?
如果请多些程序员就可以把软件制造出来,只要中国拿出一百万个程序员,相等于0.077%人口而已,就可以完美复制视窗、甲骨文、等超级软件了,不是吗?
多请程序员的方式,往往是行不通的。而往往到最后,被怪罪的,就是“程序员不够好”,或是“项目管理不够好”,而事实往往也不是这样。
也许有人会说软件大厂早有在劳工较便宜的国家设生产线,这是无可否认,但核心的软件还是没有转移不是吗?
When people need software, normally he would said:"I will get a programmer to do it." Big companies normally will hire a group of programmers to maintain their in house software. Whenever the software is not able to deliver, or to deliver on time, the senior management would normally come out with :"Go hire more programmers, I give you budget." Is this the right way?
If with more programmers will do, what we will see in today's world? Microsoft, SAP might be already bankrupt or lose their advantages. The leaders of world software industries, would be those from cheaper-labour cost countries such as China, India, Indonesia, etc. But this doesn't happen.
If with more programmers will do, then China can simply hire 1 million programmers (equivalent to 0.077% of China population), and they can perfectly duplicate the world class software like Windows, Oracle, etc.
"Hire more programmers" is always not the right way, and most of the time, eventually, the reason given to the failures are, "The programmers are no good.", or "Project management is no good." Of course, this is also not correct.
Some may said many software giants already move some of their productions to cheaper-labor cost countries, but the core software, still not been transferred, isn't it?

Wednesday, July 23, 2008

好软件,三选二(Good Software, Select Two of the Three)

攻读电脑科学的朋友,必定会读到这一句话,只是会有多少人记得?
“好,快,便宜,选二。”=>快在这里,是软件开发时间短。
要又好又便宜的软件,慢工出细祸,就不会快交货!
要又快又便宜的软件,软件素质就不会好!
要又快又好的软件,当然要更多高素质的工作人员,更有效的管理,当然,就不便宜了!
当然,现实上并没有这么极端,所以开发软件往往就在这三个中找一个接受点,比如:90%好,70%快,40%便宜等等。又快又好又便宜,说实在,不存在吧?所谓又快又“好”又便宜的东西,有一天,可能你就知道,并不好,只是太迟了。
坏的软件,选零,或选一吧!
Computer science graduates normally will come across to this statement: "Good, Fast, Cheap, Select Two!" (Fast, is short software development time.)
A good and cheap software, the development will be slow!
A fast and cheap software, the quality will not be good!
A fast and good software, requires greater developers, and more effective management, thus of course, not cheap!
In real life, we will not choosing two, but in fact, finding a accepting point among the three, for example, 90% good, 70% fast, and 40% cheap, etc. Software that is fast, good, and cheap, we should said, not exist! Even someone claimed that it exist, one day you may know, he was just want to close the sales, the software isn't good, but it will be too late!
Bad Software, Select None, or Select One!