- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * 有的工程师不在乎效率,也不管架构或者代码漂不漂亮,上面要求他做什么,他就想办法东凑西凑,从Google找程序剪贴,从MSDN抓范例来用,反正只要能随便测过一个case就能交差了。 他们常常只是因为火烧屁股了,就不管三七二十一先弄出可以动的程序再说,效率或架构等到下一阶段再来改就好…。问题是,下一阶段又有新的功能要做,这些人再度面临抉择时还是会决定先让程序「会动再说」。我看过很多各式各样的程序员,只要碰到这种人,同样的过程是履试不爽不断出现。 所以要成为一个优秀的程序设计师的关键是什么?关键不在于coding速度有多快、懂多少算法,或是背了多少patterns,最重要的是「热情」! 伟大的程序设计师都非常喜欢写程序,写程序的过程是一种绝妙的享受,他们执着的地方或许不同,可能是程序的效率,也可能是开发的效率,甚至是架构的弹性或是程序码的精简美观程度,但他们都非常想要并坚持自己应该写出「好程序」。热情能驱动他们把软体的某一个面向雕琢到极致,这需要超乎常人的毅力和坚持,以及绝不向压力妥协的精神。只要具备这种热情,不管你在乎的是什么,都可以成为一名伟大的程序设计大师。 写程序需要的思考能力第一是逻辑思考,主要其实就是用正确、清晰的逻辑表达想法而已,说来简单但要做好也是需要一定时间的训练。第二是抽象化思考,这是许多人忽略掉的一点,也是我觉得区隔一个平凡与伟大程序设计师的重要特质。 所有的程序都可以看成一个巨大的金字塔,顶端是这个程序的最终目标,一个模煳的概念;底部是细节的程序码。而中间是一个经由不断切割与抽象化所构成的高塔,每一个程序都是切割为许多的元件、模组,再切为更细的class和function,再来是最底下的变数与逻辑判断式。 很有趣的是,不同的人看这个塔就会有不同的样子。初学者看到的塔只有两层,他们和人沟通的方法是鉅细靡遗的描述程序码:「我在这里写个for,第一次把i设成0,在循环内每次检查这个阵列的第i个元素…」,在他们眼中只有程序的目标和程序码本身 有些经验后,会再多看到一层,利用function把一段程序码包装起来,赋予一个名字和独特的意义。学会这个后,就可以利用抽象化后的function名称来沟通,例如:「我在这个循环里每次都用isCaptial来检查这个字串是不是都是大写…」再接下去,可以再利用class,利用design patterns,利用更大的模组、子系统来沟通,认真说起来,这其实是一个无止境的切割。 在开发这个领域,抽象化是个无穷无尽的必要行为。因为世间万物实在太多太复杂,我们只好不断把东西归类,并赋予一个名称、一个意义,经由这样的过程我们才能用抽象的语言和符号来沟通,避免每次都要从最底层的琐碎细节开始说起。而平凡和伟大的程序设计师,我觉得他们之间的差别就在于能看到多少这个高塔中间的分层。厉害的高手都很善于切换自己思考的高度,一下能跟你讨论高阶的系统架构设计,一下又能深入到最底下的代码和debug。他们脑中除了有这高塔每一层的详尽平面图,甚至也非常了解不同楼层之间的交互关系。而平凡的程序设计师大多只能专注于自己所开发的范围,对于其上的架构或其下的细节都不一定能理清头绪,万一出现bug也会搞不清楚到底是哪一层出了错,而被完全无关的细节绊住手脚。 * * 软件工程师的素养与成长 1.向内看:软件工程师的定位与发展 3. 向前看:我们的未来 2. 向上看:优秀软件工程师的素养与成长 面临的挑战 新技术层出不穷 Ajax、SilverLight、Flex、JSF…. 新概念铺天盖地 SOA、云计算、Web 3.0、物联网、敏捷开发…. 新诱惑迎面而来 新的工作机会,高薪酬的诱惑…. 莫让浮云遮望眼 常见的困惑 你是否听说过: 程序员只能做到35岁 软件行业技术更新太快,学到的技术很快过时 在中国做技术没有前途,只有去做管理、销售… 难道他们说的都是真的吗? 如何实现可持续发展? 软件工程师的典型职业路线 工程师 今天进行了1次权限管理功能模块的Code Review, 修复了2处P3的bug,并根据需求变更流程修订了设计文档的2.3节…. 职业化 技术扎实 资深专家 技术精深 经过分析,我建议采取***算法来实现这个需求,因为它的算法复杂度是… 架构师 知识广博 业务导向 根据系统的性能需求,我们可以采取的技术方案有3种,我建议采取….,因为…. CTO 我们的产品战略是… 我们的技术战略是… 项目经理 沟通能力 领导能力 对于这个需求变更,我建议采用… 方法来实现需求而不增加项目风险 开发经理 设计分析能力 领导能力 迄今为止,开发团队完成了第一阶段的全部功能需求,比原有计划提前…工作日 C++好还是Java好? 编码爱好者 建立自己的职业发展目标 立长志,而不是常立志 对自己的职业发展
文档评论(0)