首页 > 其他分享 >软件开发的葵花宝典

软件开发的葵花宝典

时间:2023-04-20 17:32:45浏览次数:41  
标签:很多 高手 低手 软件开发 代码 葵花宝典 东方不败


评:



中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败"。 但什么才是软件开发的葵花宝典?

让我们先从一些现象出发。我们的前提是,软件开发是一项智力密集型劳动。对于智力密集型劳动,我们观察到的现象是,个体的表现差异很大,团队的表现 差异很大,组织的表现差异很大,国家的表现差异很大。这不象体力占主要的劳动,象百米王跑百米的速度也仅比我快50%。但在棋类运动中,一个高手可以车轮 战数位低手,而且毫无例外地将他们一一击败!

这些智力运动员表现出的特点是,计算精确而且速度快。其行为很象东方不败。虽然关于葵花宝典的传说很多,但最准确的描述只有一个字"快"。东方不败已经快到了吓人的地步。就象卡斯帕罗夫已快到了深蓝的地步。

有一则关于物理学家玻尔的轶事,有一次玻尔在普林斯顿大学听两个年青教授演讲他们的工作成果。期间玻尔突然发言说,如果照你们的研究算下去,会得到一个很有意思的推论。结果两个年青教授回去计算了两天,果然得出了同样的结论。玻尔是如何做到这样快的?

在软件开发中,我们同样注意到这样一种高手,他们可以每天写出一千行左右的高品质代码。他们可以运用已有的一些软件包,迅速完成一个新的产品。他们可以在很短的时间内,学会一项新的程序语言或是新技术。他们表现出一种神奇的速度。

在武侠小说中,所有的高手都有一些凡人不能企及的表现。象张无忌学太极,用龙爪手击败龙爪手名家;乔峰用太祖长拳击败天下英雄;姑苏慕容以其人之道还治其人之身,令狐冲一剑剌瞎十几双眼睛等等。我认为,之所以他们能做到这样,关键是在于他们快。

快并不意味着不准或品质差。快与品质并不矛盾。

高手的快,其实包含着很高的品质在其中。如果你因为高手的快,就质疑其品质,那就相当于在问:东方不败出手那么快,会不会刺不准?东方不败并不满足于刺死对手,他会在对手身上刺朵花。他把杀人变成了艺术。准确来说,他真正的兴趣不在杀人,而在于艺术。

退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。

所以真正的软件高手,他并不满足于他的代码能有效地工作了,他认为编程是艺术,并醉心于其中。在低手能写出一个版本的时间里,他已经写出了第十版。 其品质当然不可同日而语。就象一个九段棋手,在给定的时间里,他能计算十种可能,并将每种可能计算到100手之后,从中选择一种最有利的下法。低手岂有苟 全的机会?

高手写软件总是不停地在重构(refactoring)。高手喜欢迭代式开发。高手说,增量就是打补丁,迭代就是推倒重来。对于软件这种东西,写一遍它可能OK(做到这一点也不容易),写十遍就是一个伟大的产品,再多写一遍它就更伟大些。

高手快的诀窍在于他很熟悉各种东西。高手看书很快,因为每一本新书里,值得他好好看的新技术只有一两章的内容。他能迅速看完,并准确领会这本书的中心思想和价值。而对于一个新手,每句话都是新的,他都需要去理解,每一段例子,他都需要去试。

很少看到一种100%全新的技术或理论。就象Java language specification里说的,Java没有使用任何新技术,用的都是业界久经考验的技术。对于高手来说,那些技术都是他所熟悉的。自然,很快他就从 一个C++高手变成了Java高手。如果一个编程新手学Java,学两年也不如一个高手学两个月的。高手学新东西快。

高手写代码速度快。统计结果说,人均每人月的有效代码速度大概是300至400行。但那是业界平均生产效率。对于高手来说,这个数字太低了。每天写 300至400行是完全有可能的。因为在写代码时,所有知识都已具备,已经没有任何需要他多花时间的事情了。他甚至很少需要Debug。

高手重用代码的能力很强,熟悉新的API的速度很快。这也是因为,他曾经使用过很多的API,重用过很多的代码。他知道哪些是可用的,哪些有缺陷。 他既过用Qt,也用过gtk+,也用过windows API & MFC,也用过AWT & SWING。新的API对他来说,也是老熟人。

高手喜欢用轻量级的工具,象vi,notepad,最多到UltraEdit这样复杂的。高手用这种工具写出很多的东西。这些工具就象东方不败的针。那根针已具有神奇的魔力,有时候它可以当激光枪来用。

对于一些重量级的工具,高手虽不常用,但一经使出也威力大于常人。如果让东方不败用剑,最厉害的剑术名家也会败得很难看。高手其实用过很多的重量级 工具,而且深知其优缺点。所以使出来,就会把威力发挥到最大,而把缺陷减少到最小。而低手则不然,总是把缺陷加以大大的发扬而浑不知其精髓何在。就象很多 人学用UML、RUP、XP、Design pattern那样。

高手所学博杂且融会贯通。高手做什么都快,当低手还在一愁莫展的时候,高手已经圆满解决问题,去干别的事去了。

在成为高手的路上,要有热情,要循序渐进,要持之以恒。

要逼自己,书要快快地看。要试图迅速理解其主旨。其实你快快看所接受的信息量,与慢慢看接受的差不多。能明白多少很大程度上取决于你的功底。以后用 到再回过头来看。一本对你来说新东西太多的书,不要指望看一次就全理解吸收。就象很多功力不够的人看design patterns那本书一样。慢慢看还不如找到多种信息来源,都快快看一遍。对于一个完全陌生的领域,只看一本书很远远不够的。

要逼自已,事要快快做。有一个朋友,几年前我介绍他去玩玩linux,他也表示想玩,但他现在还没碰过。他失去了很多机会。

平时要有意识提高自己写代码的速度,其实你一天写15行有效代码,与你写50行有效代码,其品质是差不多的。你应该把那些业界平均水平抛诸脑后,把 超越自己做为唯一目标。等到你写了很多各式各样的代码,你的水平就不一般了。一个老师曾向我介绍他的学英语的决窍,他说你去啃原版小说,啃到50本,就和 一般人有很大距离了。就是这个理。如果你写得太慢,怎么能写得多?水平怎么能提高?

要逼自己,学很多别人怕学的东西。低手总会说:这么多东西怎么学得过来啊。于是就少学或不学。这样就成不了高手了。高手有非常广的知识面,有很丰富的经验。知道很多低手不知道的事。玩过很多低手听都没听过的东西。

要逼自己,努力满足客户的各种需求。个人技能是在满足客户的各种需求的过程中提高的。比如你喜欢用Delphi,客户说一定要用VB,那你就答应他,然后把自己培养成为VB的高手。用户的需求看似变态,但对你是一个机会。

怎样才能做到看书快,写代码快,学新东西快,一个显而易见的途径就是将工作并行化。你在一台机器上make时,同时可以在看别的文档和聊天。对于计 算机是这样,对人也是这样。如果你只能串行地处理问题,你的速度将提高有限。你的大脑有很大潜力可挖,它应该是一个多任务分时系统。努力减少它idle的 时间。搞经济的Samuelson被人称为human brain main frame,可见他的大脑有多快。

让你的思维快起来,你就会区别于那些反应迟钝的人。如果你不能让人生的道路变长,就让它变宽。这世界变化快,需要你变得比它快才行。

这样加快并不会让你短命,相反,你有更多的时间来享受生活和锻炼身体。你的生活将更有品质,更丰富,更有意义。面对变化,你将立于不败之地。我们都是和自己赛跑的人,需要跑得比昨天的自己更快。

标签:很多,高手,低手,软件开发,代码,葵花宝典,东方不败
From: https://blog.51cto.com/u_16080829/6210037

相关文章

  • 软件开发中的面向对象设计原则和模式
    软件开发中的面向对象设计原则和模式是指在软件设计过程中,遵循一些通用的、经过验证的、有利于提高软件质量和可维护性的指导原则和实践方法。面向对象设计原则和模式的目的是实现高内聚、低耦合、可复用、可扩展、可测试的软件系统。面向对象设计原则是指在定义类、接口和继承......
  • C++恶意软件开发(四)通过查找进程名进行DLL注入
    通过进程名查找PID当我们编写注入器的时候,肯定是希望直接通过进程名进行注入,而不是像上一篇笔记一样通过手动输入PID进行查找。通过进程名查找PID的步骤如下:(1)创建系统中所有进程的快照(2)保存系统快照中遇到的第一个进程的信息(3)循环检索系统中进程的信息是否匹配需要查......
  • 软件开发趋势:探讨软件开发的未来发展方向和机遇
    软件开发趋势:探讨软件开发的未来发展方向和机遇软件开发是当今社会的重要驱动力,它不仅为各行各业提供了高效、智能、创新的解决方案,也为人类的生活、学习、娱乐、沟通等方面带来了便利和乐趣。随着科技的进步和市场的变化,软件开发也面临着新的挑战和机遇,需要不断地适应和创新。本......
  • [全程建模]倾听——软件开发中的重要手段
    在这个帖子里我写到了倾听的重要性,不过,那里只是作为讨论的一个部分,想想还是摘取出来也许有利于将来的总结。下面是帖子中小子所写的相关的一段内容:项目经理必须有自己的管理方法,对于一些事件必须能做到柔化处理,而对于另外一些事件甚至可能是铁血手段!但是不管如何做,必须有自己的目......
  • 前端自动化测试之葵花宝典
    作者:京东零售杜兴文首先聊一下概念,Web前端自动化测试是一种通过编写代码来自动化执行Web应用程序的测试任务的方法,它通常使用JavaScript和测试框架(如Selenium、Appium等)来实现。Web前端自动化测试的优点是可以提高测试效率、减少测试时间和测试成本,并且可以确保测......
  • 直播平台软件开发,Android代码模拟触摸、点击及滑动等事件
    直播平台软件开发,Android代码模拟触摸、点击及滑动等事件一、应用中模拟物理和屏幕点击事件 例如,模拟对某个view的点击事件 privatevoidsimulateClick(Viewview,floatx,floaty){  longdownTime=SystemClock.uptimeMillis();  finalMotionEventdownEve......
  • 概念:四种基于模型的嵌入式软件开发、测试与验证方法
    ​嵌入式软件(如航空电子和汽车系统)的设计、开发、测试和验证正变得越来越复杂。传统的文档驱动式环境中,一旦开发人员之间缺乏协调,软件程序生命周期的质量和成本就会受到严重影响,显然已经无法应对日益复杂的嵌入式软件生产。正确使用基于模型的设计(Model-BasedDesign,以下简称MBD......
  • 打破软件开发“不可能三角” 只需一个低代码方案
    世界在软件上运行,商业世界也不例外。面对变化,企业过去依赖的传统软件开发流程可能不再有效。从头开始构建软件解决方案需要花费数月甚至数年的时间来规划、设计、测试和部署。在软件行业,有一条业内公认的“潜规则”:长周期、大规模的软件想持续向好运营,需要解决三个根本的问题:成本......
  • 直播平台软件开发,简单易修改的弹框组件
    直播平台软件开发,简单易修改的弹框组件弹窗组件适用框架vue,uniapp使用再uniapp框架中可简单修改标签与尺寸单位后使用px与rpx <!--vue--><template><divv-show="ishide"@touchmove.stop.prevent><!--遮罩--><divclass="mask":style="maskStyle">......
  • 手机软件开发APP必须警惕什么事情?这些事情不能忽略
     在发现开发一个手机软件APP能够给自己带来良好地收益之后,不少人也打算开发一个自己的手机软件APP。不过要想开发成功,我们要警惕一些事情,那么手机软件开发APP必须警惕什么事情?今天名锐讯动为大家总结这些事情不能忽略。 1.明确定位。凡是成功的手机软件开发APP都有一个具体的......