学了两周,写点体会。留着以后或许我当了老大,还能用得上。 一定要让所有组员有开发的激情。软件开发业与制造业等最大的不同,就是效率更多取决于人力因素。其它行业可能效率与生产设备等相关性更大。而做开发时不一样。可能一天能写出的代码,我可以用三天时间来写。一天可以搞得定的构架,我花他一周也不过分。所以,我个人觉得,做软件开发的都得加班,这个观点也太武断了。时间不在多,有效率就好。而有激情便是保证效率的第一必要条件。老大,人很好,技术也很强。我喜欢和他一起工作。他一个人现在身上有三个项目,非常忙。呵呵,我刚进去,问题可能多一点儿,有时候我都觉得自个儿有点烦。可他还是很耐心帮我回答问题,和我一起讨论。他说,他都不能专心调一会儿程序了。嘿嘿,辛苦了。
开发小组老大的作用非常重要。老大得做构架,做算法,指出方向。这些稍有差错,可能导致得惨的后果。轻则多花很多时间,多写很多代码,才能实现一样的功能。重则重新做构架,整个软件重写。我看了两周的文档。最终的解决方案和我刚开始的想法是一致的,系统设置得由驱动层来完成,由驱动层给出接口让UI来调用。可是因为开始时,小组老大跟我讨论时,他认系统设置该由contrl panel模块来完成,于是让我看那模块。用一句“你怎么那么多‘你觉得’”,把我顶得不敢再坚持自己的想法。真郁闷,谁叫我是新来的,没办法。我看了contrl panel,发现其实现方法为改注册表。于是,我接着接到看注册表文档的命令。好,看过注册表,发现改了注册表后,还是要给驱动发消息,让其读注册表值并更新系统设置。这时,老大意识到了,还是我的最初想法的方案最好。直接让驱动层给接口,至于注册表等都由驱动层去维护。于是,我得开始写接口标准,又得看接口文档。最后花了一天时间,把接口标准定下来了,并发给了BSP组。我两周的工作一天便可完成。多走了好长的路。不过也好,可以了解整个构架,可以提高英文阅读能力。但是负外部效应还是远大于正外部效应。还好,这只是轻微的代价。我是初学者,看这些文档也是迟早的事,时间不是很值钱,是吧。嘿嘿。要是把牛人的时间误了两周,那可就惨了。更惨的是构架要是错了。那可就麻烦了。花了多少人月的时间,重新再来重构。那损失可重了。老大说,真正的软件开发成功率有70%~80%,就已经很不错了。所以,21世纪什么最重要,人才。一定得请个大牛掌舵。
开发小组的文档,到底得规范到什么程度呢。这问题肯定是很难给出确切的答案的。现在有人提出一种精英开发方法。就是在一个开发团队里面,所有的文档都存在每个人的大脑里面。这样可以大大提高开发效率。但是,它有一个很明显的缺点:开发团队不能过大。一般最多只能在十几人左右。多了便会有问题。而现在稍微大点儿的软件至少都得好几十人,分好几组并发开发吧。所以,精英开发方法,还不是很实用。在学校里面,都很少写文档,代码规范也很乱。我写接口标准文档时,不懂规矩,没写作者和版本号,文件名也乱起。被老大说了几句。嘿嘿,不过我心服。面试那天觉得考变量命名约定有点变态,因为都不会做,到了宿舍还跟他们狂说考的是什么乱七八糟的题目。看了两周的代码后,我觉得实在是在学校里面读呆了,觉得两周前做出的判断有点儿弱智,土。这些规范是实际开发中最最基础的了。老大说,我开始写代码时,肯定也少不了被人说。我同意他的观点。嘿嘿,还有好多东本得学呢。
先写这么些吧。
3 评论:
你的学习方法和我前文所回复的的"抽象模型->猜想->验证猜想"的方法一样,在面对未知领域的时候喜欢先大胆猜想, 但是我们必须实事求是,不能把猜想当结果,而必须通过文档或自己写试验性代码来验证猜想,这才能当作技术预研的真正结果, 然后拿这个结果去建立技术解决方案.
如果只凭经验,然后得到猜想,在猜想的基础上建立解决方案,那么万一赌输了,那就全部玩完了, 随便就是报废掉两三周的工作量.
所以你在看文档和代码之前,跟我说应该在驱动层完成设置的具体操作,我知道你是在凭经验推测猜想, 让我拿这个来建立解决方案是不可能的; 你看了两周的文档和代码后再和我提这事,讲话时的语气和自信明显经不一样了,我知道你很确信这点,所以就可以定方案了. 这就是前后两次的区别咯.
其实在那一段时间之后我也就明白过来了。我们不可能以猜想来定方案。那样风险太大了。
在那儿工作不久,我便又学了一点。你有了想法,你得证明自己的想法可行,得有理论依据,或者技术支持,或者文档说明。因为这是做应用,而不是做实验。做应用得考虑风险。
在学校里面,有了自己的想法,可以自己先做实验来验证,直接用实验来判断想法的好坏。而不必考虑时间成本,不考虑风险。老师也不会反对这种做法,一定要你提供理论依据,证明可行性。反而站在鼓励创新的角度,老师还会支持这种做法。
所以工作了,还是让我体会到了很多自己得改变的东西。必竟做应用和做研究是两种很不一样的模式。
发表评论