软件开发搞了许多年,以前当一个系统的需求提出时,尤其是比较有趣的系统。我会内心非常期待地去实现它,看到它。而现在的感觉是,当一个系统的需求提出时,尤其是我有真正兴趣的系统,不用去实现我就已经可以看到它,我会去推敲系统中的细节,但不急于去实现。  我在围棋上则仍旧停留在早期阶段,由于经验有限,我很难进行长时间思考,急于知道自己的这一招棋会引起对手的什么反应。而对有经验的棋手来说,一切都在计算中,一招棋走出,很可能后面的十几步棋都已无悬念。  说前面的这些话,绝对没有自夸的意思,只是为了提供一下写此文者的思维现状,帮助读者判断后面的文字是否会有值得一看之处。因为我在听取他人建议的时候,我也很想知道对方的思维状态,以确定这个人是否真的在他所提建议的领域里有所领悟。  首先是算法能力,不了解算法,在实现上总是捉襟见肘。大学的课本《数据结构》就是不错的教材。我是推荐真有兴趣的朋友去学习一下“有限状态自动机”,有了这个基础,所有的算法都可以幻化出来。  其次是充分理解面向对象的思想,《设计模式》是一本很好的教材。面向对象不但可以说是软件工程领域的一项技术革命,其思想对于许多自然科学、社会科学领域都有启发作用。  然后是技术问题的搜索能力,高手和新手的差别不在于知道得多,而在于找得快。绝大部分技术问题都已经有前人的成熟或者不甚成熟的解决方案,找到之后稍加修改就好了。而解决技术问题中的一大类重点问题就是寻找现有的功能控件并运用,整个现代编程的重点就是已有控件的集成。对于一个一般的软件工程项目来说,除非是核心部分的功能,否则根本不可能让你有时间和成本去开发一个完整的功能控件,只能利用现有的资源。  最后是成本问题,这里我特别强调的是学习方面的成本。其实第三个问题也可以理解为开发方面的成本问题:如果你掌握了我最上面所说的前两点能力,你将可以亲自解决几乎所有问题,但是出于成本的考虑你必须依靠现有资源来组合,而不是去重建。  毋庸置疑,你了解得越多当然越有优势,但是人的精力有限,而计算机行业变化又是飞速的,新事物层出不穷,想全面了解谈何容易。尤其对于新人,你很难知道哪种技术是真正有生命力的,如果你学习了太多没有前途,自己很难用到的技术,不但不会给你带来实际的优势,反而浪费了时间。我们称这样的技术为“屠龙之术”。  我无法在一篇文章里告诉你哪种平台,哪种技术值得学习。而且每个人的情况不同,我的见解也不一定对你有用,这只能留给你自己去判断。我想说的是,学什么、不学什么;先学什么、后学什么;用多少时间学习,用多少时间工作;掌握好其中的平衡是一种艺术。心里必须有一个成本概念。

解决方案 »

  1.   

    知识是需要积累,向分享知识的高手们致谢
      

  2.   

    呵呵,这分又不能换成现实中的"大餐"呀,
    来给你也+1吧
      

  3.   

    学习的方法很重要,借鉴先人的经验,使用现成成熟的技术
      

  4.   

    关于语言,必须专精于一门,最好别这山看着那山高。
    请记住,如果你能把文学搞懂,即使你只会中文,你也可以借助一个普通的英语翻译写出高水平的英语文章。
    但是,如果你没有弄懂文学,即使你会8门语言,你也写不成一篇像样的文章。计算机软件里的文学,就是软件开发的方法。