程序员的自我修养的一些思考

《程序员的自我修养》

在“某当”或是“某东”上搜索“程序员的自我修养”,映入眼帘的是两本具有相同名字,但是不同种类的书。颜色一黑一白,内容也大相径庭。

不同的人对相同事情的理解是不可能完全一样的,不同的程序员因为其背景和价值观的不同,对程序员的自我修养到底是什么的认识当然更是千差万别。那么我们抛开主观的观点,先来看看这两本书分别是说什么的吧。

书名作者主题描述
《程序员的自我修养—链接、装载与库》俞甲子、石凡、潘爱民程序运行背后的机制和由来,重点介绍链接、装载与库
《程序员的自我修养》陈逸鹤程序员如何理解自己的职业与发展、程序员如何看待自己的工作与生活

潘爱民老师编写和翻译的许多作品,大家都是耳熟能详的,如《COM原理与应用》、《C++Primer中文版》(第三版)等;而且潘爱民老师研究和创业的方向也都是操作系统方向;俞甲子、石凡不是很有名,但是从其经历和介绍来看,也都是对编译器、操作系统等计算机底层技术有相当造诣的;

从三位作者的背景来看,我们能判断这本书应该是一本技术书籍,而其介绍的内容也应该是和计算机底层强相关的。那这本书到底要讲什么呢?从序言中我们能窥得一斑。

“为什么程序是从main开始执行?”
“目标文件是什么?链接又是什么?”
“PE/ELF文件里面存的是什么?”

从这些只言片语中可以理解到,这本书的研究方向跟“程序到底是怎么运行的?”这样的问题有关系,在序言中作者们也提到,程序员写程序不仅要知其然,更要知其所以然,这样才能提高作为程序员的自我修养。

陈逸鹤在业内的名气并没有潘爱民老师大,这本书对他的描述如下:
“陈逸鹤,拥有将近15年的软件开发及IT管理经验,曾先后在易保网络、平安保险、平安银行、AIG公司担任架构师、技术经理等工作。业余时间,他是一名全栈工程师,做着自己喜欢的开源项目,也是本书配套主题网站技匠社(jijiangshe.com)的发起人与创建者。此外,作者以“技匠”为笔名创建的个人博客更是深受年轻程序员们的喜爱,累计订阅读者达数万人。他也是稀土掘金的联合编辑、51CTO专栏作者、慕课签约作者、百度知道日报特邀作者、以及LinkedIn的专栏作者。”

我特意到该作者的博客看了,摘到了他写这本书的起因:
“最近,无意中看到一本书,叫作《程序员的自我修养》,书名很吸引我,翻开看时,却发现里面的内容多是有关Windows底层技术的介绍,比如编译器、链接库的原理,运行库的实现等等。可能是自己不常做Windows编程的缘故,便觉得索然,不愿再往下读了。反而是这书名倒让我起了些意见,明明应该叫作“深入Windows开发核心”之类,却被冠以“程序员自我修养”的名字,确有些言过其实了吧。“
详见:https://www.jianshu.com/p/e7e247589295

从这句话来看,他肯定是没有仔细看过这本书,不知道他的技术如何,但是至少在我看来不是一个特别认真的人。因为我自己是一个Linux的程序员,10年前买的这本书,每次看俞甲子他们的书都有新的认识。我可以很负责任的告诉大家,这本书不是深入Windows开发核心”之类的书。
从他写的这本书的内容来看,看似说的是程序员应该如何生活和工作,但是实际上更是一个”人“如何工作和生活的描述,看起来很实在,却虚的很。
我不喜欢这个人!

在我看来,既然把书名写成“程序员”相关,那就多说说程序员自己的事情,而不是拿自己的管理经验和其他的人生经验来堆砌这本书。本本以下内容不会再提陈逸鹤的这本书。

底层 VS 上层

底层和上层这两个词本身就是相对的概念,那到底什么是底层技术,什么是上层技术?譬如我利用python的Django框架写了一个发票管理系统,在这个系统中,我们利用Django提供的一系列API和规则可以很简单的完成整个系统的编写,但是这些API和规则是如何实现的?Django的框架的实现机制是什么?这两个问题的解答我认为对于这个例子来说就是底层技术,而如何通过API和规则实现系统就是上层技术。

有些时候我们只需要知道怎么做,而不需要知道原理就可以做出我们想要的系统和软件,就跟我们骑自行车一样,我们只需要学会怎么骑,而不需要知道自行车的工作原理是什么。

但是,一个好的软件不仅仅只是实现其功能,还需要保证其性能、稳定性等;而且可以说一个软件中70%的代码都是为了处理一些异常实现的,而为了处理这些性能、稳定性的问题,作为一个软件开发人员,必须要对实现原理有一定的了解,否则并无法设计出功能、性能、稳定性均极佳的作品。

我眼中程序员的自我修养

  1. 扎实的基础知识。这些知识包括数据结构、算法、操作系统等。
  2. 强悍的学习能力和逻辑思维能力。

这两点分别对应底层和上层:
第一:如果没有扎实的基础知识,或是不知道软件的本质是什么,实现原理是什么,那么很难写出高质量的代码;就像上面说的,只知道怎么做,而不知道为什么这么做,对碰到的很多性能、稳定性问题将无从下手,也自然无法设计和开发出好的软件;
第二:如果没有强悍的学习能力和逻辑思维能力,那么将无法适应随时变化的工作,因为随时都有可能用新的接口,新的框架来实现不同的功能,实现不同的系统,作为程序员必须要能随用随学,边干边学;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值