《这些年编程的一些反思》004 整数的使用

我认为,至少有两种知识,一种是学习历史的知识类的,比如你是研究明朝历史的,随着学习的深入,你可能会有一些疑问,但是那些疑问会随着你学习的深入找到相关的解释,这个过程不会特别痛苦。还有一种知识是绘画,你看到过蒙娜丽莎的微笑,看过拉斐尔画的那些美女,也许你也想画。但是,那些画就在你的电脑屏幕上,你拿着从淘宝上买来的画笔,就是不知道从哪里下笔,你很痛苦。这是第二种知识,一种痛苦的知识。在某些方面,编程是第二种知识,你了解再多的IT历史,了解再多的编程人物,都不会让你学会编程。

所以,你还是要在你的电脑上装上几个编译器,来试试。我也不知道蒙娜丽莎的微笑是怎么画出来的。我想,应该是一笔一笔画出来的吧。我希望能尝试一下,把自己的手弄脏,打开电脑上的几个编译器,试试到底怎么回事。

先来试试整数类型

在计算机中,不同的编程语言,和现实中的整数有一些不同。在现实中,我们对整数进行的四则运算分别是加减乘除,在计算机中分别用+ - * /这四个符号来表示,在现实中,9/10我们都知道是0.9,但是在计算机中,这可能会是0,也可能是负无穷大,也可能是最接近0.9的整数1。这会导致下面这两个在现实中是等式的两个算式完全不同,算式A: 2 ( 8 / 10), 算式B: (2 8) / 10。是的,乘除法的交换率在这里失效了。

我分别在Ruby, Python, Swift中的展示一下。

在Ruby中是这样的:

在Python中是这样的:

在苹果的swift语言中是这样的:

以上的3种语言在处理这种情况的时候,采用的方式是一样的。

在古老的Lisp语言Scheme中,是另外一个情况,他两次给出的结果都是一样的。

Scheme是我比较喜欢的编程语言之一,虽然很多时候,学习Scheme语言对找工作没有丝毫帮助,据我所知,没有什么公司会用这种编程语言,如果只是玩一玩,Scheme还是非常的有趣的。

留给兴趣的人

你要不要自己试试C语言和Java言,或者PHP语言中,整数类型会有什么不一样呢?学编程,总得自己动手试试吧。在PHP中,可以让一个整数类型直接加上一个字串类型,在Ruby等语言中则不能,这就是所谓的强类型语言(Strong typed language)和弱类型语言(Weak typed language)。如果是使用C/C++语言来编程,是要首先进行编译才能运行,但是像Python, Ruby这样的语言,则不用编译,这就是静态语言(static language)和动态语言(dynamic language)的区别。因此,我们学习的每种主流语言,都可以划分到强/弱类型和动/静语言的2维坐标里。

小建议

虽然我不认为盲目的追求代码优美有什么好处,尤其是在项目初期的时候就试图写完美的代码,但是,我认为,在任何时候,都不要在代码中出现一些非常神秘的数字。比如100,200,1024… 这是非常让人崩溃的事情。只要过了24小时,这些神秘的数字,你自己都搞不清楚代表的意义是什么,你知道1024是什么意思么?在任何时候,代码中只能出现两个数字,一个是0,一个是1,其它的,最好定义一个有意义的变量或者常量,这样对自己有好处。


扩展

我认为一个合格的程序员,至少要掌握这几个东西:

  1. (Linux下的)命令行
  2. 一个非图形化的文本编辑器(如果用ssh登录服务器,是没法用图形化的编辑器的,这里我就特指vi :)
  3. 版本管理系统(现在用的最多的可能是linus出的git,我在公司用Subversion,我自己用git)
  4. 能熟练用2-3种编程语言,能读懂5-6种编程语言。(在公司里打工的人,比如我,如果接手一个已经10年的项目,是c写的,那就用c,如果是Java写的,那就用Java,有些脚本是perl,你就得会读perl… 当然,有能力的大牛,能扭转局面的人不用拘泥于此,此条建议仅供打工仔参考。栋哥就像劳务市场的零工,根本不知道雇主让干啥活,可能是刷大白,可能是清理抽油烟,可能是按摸……反正,多会点技能,混口饭吃)

在以后的这个文章后面,我会着重介绍第4种主要技能。前3种在每篇文章的扩展里讲一点,每次讲一点。就这样。

刘延栋 wechat
欢迎扫一下关注我的公众号:软件那些事儿
欢迎收听我的电台,你的支持将鼓励我继续前进