Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

程序员看法上的几个典型错误

Posted on 10/04/201110/01/2024 by 四火

1 今天我不谈抱负理想,也不谈具体的技术,我来谈几个看法上的典型错误。下面的这些问题都是我曾经遇到,或者是我的朋友们遇到过的问题,这些都是我个人的理解,希望对大家有帮助。

 

关于设计模式、设计原则

有人认为,熟悉了设计模式、设计原则,就学会了设计。其实,设计模式和设计原则,只是前人根据设计实践做的总结和提炼,设计,归根到底是要解决问题的,把具体问题的解决办法,经过一定的抽象,变成程序员的语言。

我见过一些人,他们知识渊博、见识广博,甚至理论可以给你阐述得冠冕堂皇,但是到了实际需要解决问题的时候,他们却拿不出巧妙的、优雅的办法,这是典型的象牙塔人。

另一方面,也有一些人看不起学习设计模式的人,他们觉得他们已经掌握了软件设计的奥义,这些对他们来说是毫无意义的词汇,对此大可以一笑置之。

有时候我们反而被设计模式或设计原则粗暴的掌握束缚了手脚,譬如我遇到这样一件事情,某位努力的程序员,设计的代码用遍了组合(例如把 User 对象放置到 Administrator 里面),我好奇地问,有一些类和对象之间的关系很明显符合继承的特征,为什么不愿意用它?他说,设计原则告诉我们,要多用组合,少用继承。我想,对这些优秀的模式、原则、方法论,如果不能透彻地掌握,不能根据实际场景合适地运用,是不是反而不如对其不了解来的好呢?

 

关于多种计算机语言的学习

有人觉得学习一种语言就可以了,学习那么多语言没有必要。事实上,多掌握一门合适的计算机语言不仅仅是多掌握一种谋生的工具,如果一种新的语言能够很大程度上改变你对编程、对设计的看法,那么兴许它就值得你去学习。

譬如 C 语言,可以培养严谨的思维;譬如动态语言,它可以帮助程序员更好地做面向对象的 coding;譬如函数式语言,它在工业生产、运算领域有着不可替代的作用。

当然话说回来,所谓术业有专攻,对于某一门计算机语言(包括该语言所需的运行时环境、其中的编译或解释的原理)深入的掌握,是很有必要的。

另外,我们时常看到诸多计算机语言孰优孰劣的争论,计算机语言归根到底是一种工具,工具是随着时代发展升级和变更的,单纯的优劣争论没有太大意义。

 

关于英语

中国人为什么要学英语,程序员为什么要学英语,当我把那些方法名、变量名全部取成拼音,一样可以,谁下的这个破规定?

遗憾的是,诸多学习材料、论文、技术资料(尤其是一些刚出不久的技术),都是英语的;另一方面,国际标准、程序员交流的通用方式,都是英文的,我想肯定很难想象,那些有名的 framework、lib 的源码,如果用拼音来写变量名会成什么样子。

所以,如果你的英语不好(至少读写不好),就不要给自己找太借口,英语是一个掌握其他工具的工具,除非你坚信,中文很快就会在计算机界变成世界第一通用的语言。

 

关于算法

算法有多重要,这一件事的争议一直都很大。

软件归根到底是用来解决问题的,提到算法就不能不提到数学(这也是为什么很多软件领域的大师都具备相当的数学背景),对于解决问题,这里可以简单归纳成两步:

(1)把实际的问题抽象成简化的数学模型

(2)用算法去解决这个数学问题

算法,在这里应该是一个广义的概念(这里的算法并不仅仅指大学里学习的狭义的具体算法),算法是解决上述数学问题的办法。如果工作中你并未意识到它的存在,那只是说明,你抽象出的数学模型比较简单,解决这个模型的办法也很简单,或者有现成的方式可以模仿,或者有现成的框架帮你完成了,以至于你不去关注它、在乎它。

如果你做的事情是充满创新意义的,是别人从没有做过的,这时候算法兴许就成了决定你成败的因素。

在当前中国的环境下,视野广阔和经历丰富的人很好找,但是企业要招到具备上述两点能力来解决问题的人,其实是非常困难的。

 

关于经验

唯经验论者的人有很多,他们认为,在软件企业的职位、薪水、甚至决策能力,都取决于经验,一个 5 年经验的工程师,肯定比 3 年经验的工程师能找到更好的饭碗:

“我是老员工,我工作 5 年了,凭什么工作 3 年的他薪水比我高那么多”

实际上,很多因素,包括领域积累(这是业务上的,例如互联网领域、传统软件领域,这和所谓的纯技术没有直接关系)、视野、承受压力的能力等等往往都在很大程度上取决于 “经验” 的积累,但是,这并不是绝对的。有句话叫做 “事业一半是干出来的,一半是总结出来的”,也确实有一些出色的程序员,他们善于总结、善于观察和积累,并且善于不断地思考,这样的程序员就是拥有更多优秀的经验。

另一方面,程序员是要来解决问题的,经验不能代替解决问题,有的人具备更优秀的解决问题的能力,他为什么就不能得到更优厚的薪水?

 

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. 程序员学英语
  2. C++程序员和 Java 程序员的差异
  3. 谈谈对程序员的培养
  4. 编程的未来
  5. 解雇专业的运维人员吧

1 thought on “程序员看法上的几个典型错误”

  1. Anonymous says:
    12/08/2014 at 2:31 PM

    我坚信!中文很快就会在计算机界变成世界第一通用的语言!!

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • Ticket: TRANSACTION 1.922915 BTC. Go to withdrawal >> https://yandex.com/poll/enter/BXidu5Ewa8hnAFoFznqSi9?hs=20bd550f65c6e03103876b28cabc4da6& on 倔强的程序员
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme