今天我不谈抱负理想,也不谈具体的技术,我来谈几个看法上的典型错误。下面的这些问题都是我曾经遇到,或者是我的朋友们遇到过的问题,这些都是我个人的理解,希望对大家有帮助。
关于设计模式、设计原则
有人认为,熟悉了设计模式、设计原则,就学会了设计。其实,设计模式和设计原则,只是前人根据设计实践做的总结和提炼,设计,归根到底是要解决问题的,把具体问题的解决办法,经过一定的抽象,变成程序员的语言。
我见过一些人,他们知识渊博、见识广博,甚至理论可以给你阐述得冠冕堂皇,但是到了实际需要解决问题的时候,他们却拿不出巧妙的、优雅的办法,这是典型的象牙塔人。
另一方面,也有一些人看不起学习设计模式的人,他们觉得他们已经掌握了软件设计的奥义,这些对他们来说是毫无意义的词汇,对此大可以一笑置之。
有时候我们反而被设计模式或设计原则粗暴的掌握束缚了手脚,譬如我遇到这样一件事情,某位努力的程序员,设计的代码用遍了组合(例如把User对象放置到Administrator里面),我好奇地问,有一些类和对象之间的关系很明显符合继承的特征,为什么不愿意用它?他说,设计原则告诉我们,要多用组合,少用继承。我想,对这些优秀的模式、原则、方法论,如果不能透彻地掌握,不能根据实际场景合适地运用,是不是反而不如对其不了解来的好呢?
关于多种计算机语言的学习
有人觉得学习一种语言就可以了,学习那么多语言没有必要。事实上,多掌握一门合适的计算机语言不仅仅是多掌握一种谋生的工具,如果一种新的语言能够很大程度上改变你对编程、对设计的看法,那么兴许它就值得你去学习。
譬如C语言,可以培养严谨的思维;譬如动态语言,它可以帮助程序员更好地做面向对象的coding;譬如函数式语言,它在工业生产、运算领域有着不可替代的作用。
当然话说回来,所谓术业有专攻,对于某一门计算机语言(包括该语言所需的运行时环境、其中的编译或解释的原理)深入的掌握,是很有必要的。
另外,我们时常看到诸多计算机语言孰优孰劣的争论,计算机语言归根到底是一种工具,工具是随着时代发展升级和变更的,单纯的优劣争论没有太大意义。
关于英语
中国人为什么要学英语,程序员为什么要学英语,当我把那些方法名、变量名全部取成拼音,一样可以,谁下的这个破规定?
遗憾的是,诸多学习材料、论文、技术资料(尤其是一些刚出不久的技术),都是英语的;另一方面,国际标准、程序员交流的通用方式,都是英文的,我想肯定很难想象,那些有名的framework、lib的源码,如果用拼音来写变量名会成什么样子。
所以,如果你的英语不好(至少读写不好),就不要给自己找太借口,英语是一个掌握其他工具的工具,除非你坚信,中文很快就会在计算机界变成世界第一通用的语言。
关于算法
算法有多重要,这一件事的争议一直都很大。
软件归根到底是用来解决问题的,提到算法就不能不提到数学(这也是为什么很多软件领域的大师都具备相当的数学背景),对于解决问题,这里可以简单归纳成两步:
(1)把实际的问题抽象成简化的数学模型
(2)用算法去解决这个数学问题
算法,在这里应该是一个广义的概念(这里的算法并不仅仅指大学里学习的狭义的具体算法),算法是解决上述数学问题的办法。如果工作中你并未意识到它的存在,那只是说明,你抽象出的数学模型比较简单,解决这个模型的办法也很简单,或者有现成的方式可以模仿,或者有现成的框架帮你完成了,以至于你不去关注它、在乎它。
如果你做的事情是充满创新意义的,是别人从没有做过的,这时候算法兴许就成了决定你成败的因素。
在当前中国的环境下,视野广阔和经历丰富的人很好找,但是企业要招到具备上述两点能力来解决问题的人,其实是非常困难的。
关于经验
唯经验论者的人有很多,他们认为,在软件企业的职位、薪水、甚至决策能力,都取决于经验,一个5年经验的工程师,肯定比3年经验的工程师能找到更好的饭碗:
“我是老员工,我工作5年了,凭什么工作3年的他薪水比我高那么多”
实际上,很多因素,包括领域积累(这是业务上的,例如互联网领域、传统软件领域,这和所谓的纯技术没有直接关系)、视野、承受压力的能力等等往往都在很大程度上取决于“经验”的积累,但是,这并不是绝对的。有句话叫做“事业一半是干出来的,一半是总结出来的”,也确实有一些出色的程序员,他们善于总结、善于观察和积累,并且善于不断地思考,这样的程序员就是拥有更多优秀的经验。
另一方面,程序员是要来解决问题的,经验不能代替解决问题,有的人具备更优秀的解决问题的能力,他为什么就不能得到更优厚的薪水?
文章系本人原创,转载请注明出处和作者
分享到:
相关推荐
C++程序员容易犯的十个C#错误 C++程序员在转换到C#时,经常会遇到一些错误。本文将讨论C++程序员最容易犯的十个错误,帮助C++程序员更好地理解C#语言和.NET Framework。 错误1:析构函数上的差异 C++程序员在使用...
总的来说,一个典型的C++程序员的成长过程涉及到从基础语言特性到高级设计原则和库的全面学习。这个过程中,程序员会不断探索、实践和反思,以提升代码质量,优化性能,并创建出可复用和可扩展的组件,从而能够编写...
600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员常用的单词和词汇600个程序员...
Python程序员的30个常见错误.doc
程序员必读的几本书.zip欢迎下载
然而,当程序员成功解决一个难题,或者完成一个功能模块,那种成就感就如同蜜糖,甜蜜无比。看到自己的代码运行顺畅,或者得到用户的好评,那是程序员最甜美的时刻。此外,通过编程实现创新想法,为社会带来便利,也...
本书名为《高效程序员的45个习惯 敏捷开发修炼之道》,由Venkat Subramaniam和Andy Hunt两位作者共同撰写。书中所提到的45个习惯,不仅涉及软件开发过程、编程和调试工作,还包括了开发者的个人态度、项目和团队管理...
总的来说,程序员专用的输入法如精灵输入法,是通过提供高效便捷的编码环境,帮助程序员提升工作效率,减少错误,从而更好地投入到软件开发工作中。这样的工具对于经常进行编程工作的人员来说是非常有价值的。
Java程序员需要了解的几个开源协议 Java程序员需要了解的几个开源协议
根据对职业的理解和技能水平,我们可以将程序员分为不同境界,这些境界不仅体现在技术能力上,还包括了项目管理、创新思维、沟通技巧以及个人品质等多个方面。 五流程序员,他们主要关注技术和工具的更新。这一层次...
程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词
程序员的职业生涯探究中提到的几个重要知识点可以分为以下几个方面:程序员的职业发展、学习与实践、技术深度与广度、个人品牌与市场价值。 首先,程序员的职业发展方面。在文档中提出程序员的生涯是否是一碗青春饭...
"程序员特色服饰"这个主题,正是这种文化的一种体现。这些服饰不仅仅是穿着,它们更是一种表达自我、彰显职业特点的方式。 首先,我们要理解的是,为什么会有程序员特色的服饰。这源于程序员的日常工作环境和工作...
表白程序可能包含以下几个核心组成部分: 1. **HTML结构**:HTML用于构建网页的基本骨架,表白程序的页面设计,如背景图片、文字布局等,都可以通过HTML来实现。 2. **CSS样式**:CSS负责网页的样式设计,如颜色、...
下面是程序员的一生中需要注意的几个方面: 1. 程序员意味着要编程序 作为一名程序员,你需要有编程序的能力和热情。编程序不仅仅是写代码,还需要有逻辑和严谨的思维方式。如果你仅仅想得到一份高薪水的工作,而...
在整个程序员项目交接文档中,程序员需要对每个模块的数据结构和关系进行详细的记录,并且需要对每个模块的执行流程进行详细的说明。此外,程序员还需要对每个模块的功能进行详细的记录,并且需要对每个模块的实现...
2010年下半年程序员上下午试题及答案 2010年下半年程序员上下午试题及答案 2010年下半年程序员上下午试题及答案 2010年下半年程序员上下午试题及答案2010年下半年程序员上下午试题及答案2010年下半年程序员上下午...
试题中的错误分类,例如段落标题编号错误、语句不通顺、错别字、格式问题等,都是软件开发中需要注意的细节,尤其是文档规范性,对于专业程序员来说非常重要。 【知识点二】:统计学基础 试题中的调查问题涉及到了...
[程序员小飞]别只做一个程序员_中国程序员的出路_程序员的副业
本书可能涵盖了以下几个重要的知识点: 1. **设计原则与模式**:书中可能会介绍如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)等面向对象设计的基本原则,以及工厂...