读书笔记2014第17随:《代码的前程》

若果错过西南出差了,却由自己之书架上及Kindle中检索不发感兴趣的书写来,临出发前失去老SUN屋里寻摸一缠,选中了《代码的前途》这本书。选中它的案由发生几乎修:Ruby之父写的写,作者是日本人,日本口形容的题一般比实用、也想了解一下Ruby、翻目录时发现发生Go、Dart、CoffeeScript、Lua几只新语言的对照分析、老SUN说网上对这开评论是。

机上看了合,一总人口暴读了前2章,90多页,对各种语言中的要害特性分析得相当好,对语言的前进历史产生了概括性的了解。出差后白天忙于工作,晚上把多余的有的高速读毕了,后面三回的内容针对我吧吸引力就是不够了,可能是技术性太强了,我们不见面研究及这么好,只见面去用别人写好之备的框架。

率先回 编程的时刻与空中

无异于开始作者从编程的实质入手,编程就是开创有同样种人类与处理器都能解的语言(编程语言),并通过如此的语言将人类的意图传达给电脑,这样的表现就称为编程。自然语言的歧义性太强,将来之用户界面肯定是圆的语音输入应该没问题,但据此语音把问题总体游说出,交给计算机去实现,现在总的来说还是相当有难度,假如明天兑现了,那么程序员是未是一旦下岗了?还是都转入到还底层的代码的编制中失去?

编程是同样件创造性的做事,能够依照好的意来创造世界,正是编程的不过特别魅力所在。想起高中时录入的几执BASIC代码,能够不辱使命繁琐的计算,就想着和谐修一个小游戏会是啊情形呢?从而容易上了编程这项工作而一发不可收拾。

微机语言的前行以及摩尔定律也产生死非常的关系,但计算机的算法改变得连无深,特别是一些古老的基础算法仍于大方应用。摩尔定律现在基本还行,但CPU主频的滋长一度基本到了巅峰,将来基本上按技术、内存容量增大、硬盘向SSD转变以见面变成主流。我们的次序与算法需要什么样适应这些变迁呢?

这时候想起当孩子有些之上,我启蒙性地被它圈了扣LOGO语言,让其宰制小海龟在屏幕及画来怪的图画,她的确发那个神奇,但对着手创造新的社会风气并随便极其好之趣,可能女孩子的本性并无喜这些事物吧,难怪女程序员如此之少。我吧无思量强行给子女灌输什么编程技术,毕竟软件开发仍是同一项大麻烦的工作,还是别叫男女整天当代码过日子吧。

笔者也大胆地指向前途拓展了展望,IT技术变化日新月益,5年就会发觉不行怪的转。价格下降、性能提高、容量增大、带富增加,而且这些项都是本指数关系升华之,这些成了IT技术预测的根底。在这些增长方面,存储容量的附加好像又快,而数传输速度增加并不曾那么尽快,这些发展之匪平衡也会左右咱的未来。

编程人员的思绪果然离不起编程,作者以顶点编程XP的思绪来预测一下前景。当把几乎桩指标都调动到巨,世界会是呀则?

微机价格低得和白菜一样,现在底智能家电都看有些倾向了。将来的社会风气自然一切了芯片,物联网看来正是得。地板是智能地板、手表是智能手表、灯是智能灯、杯子是智能杯子、智能箱子,这些还当起,将来底术语肯定不再利用“智能”这么无聊的词,默认就是拉动计算机芯片的装置,便地都是电脑了,看来程序员事情还多矣,任务更扑朔迷离了。

处理器性能大强会发生什么?将来本人的记录簿配置会是1024审核?多核CPU并行编程肯定使产生新的提高,如果哪起编程语言有这种特性,应该是索要重点关注的言语。可能作者将Go语言排在较靠前即是者缘故吧。

容量非常充分?我之笔记本电脑会安排1EB硬盘?不,硬盘已经没有了,内存和硬盘已经合2为1了,因为内存为已是白菜价了,配置1TB内存?其它东西还存在云端了,没必要管什么容量问题了,因为带来富不成问题,从网及宣读写10G数码也是几乎秒的事情?malloc()你便尽情地分配个八维数组吧,别错过管什么内存溢出之类的生,哈哈。现在因为SSD为根基之数据库系统及死数量解析技术都出了。

网带来富1Gbit/s?计算机刚刚出版时,那是一个中央集权的一时,一宝巨型电脑,周围只有生局部顶。当口可以生出一致尊电脑时,出现了C/S系统。当WWW浏览器在世界普及时,B/S方式的中央集权开始复辟。现在JavaScript在浏览器上风行,实际上又是C/S换个马甲复活了。如果B/S是趋势,那若安排那么强劲的村办电脑又发出啊用处为?不,每令微机本身也是网出口计算着之一个节点,你不能不提供计算资源,才会访问别人的服务?

老二节 编程语言的过去、现在同未来

2.1编程语言的世界

此提到了打孔纸带、巴贝奇的差分机、女程序员Ada、第一大计算机ENIAC,至于到底哪个是真的的首先那是历史学家的从业了。计算机语言主要介绍了FORTRAN、COBOL、LISP、SNOBOL语言,然后说到了即底主流语言。

100年晚底编程语言会是什么法?变化不大?使用编程语言来编程的斯作为都不存在了?发明了又强抽象度写法的编程语言?反正我是看不到了。

20年后的编程语言是呀体统?肯定会在差不多CPU协作与多机分布式处理点尤其强劲。当前的线程编程模型实在太让程序员痛苦了。

2.2 DSL(特定领域语言)

外部DSL是由于专用的言语引擎来落实之DSL,可以高度自由的定制,但学习成本比较高。
YAML、JSON、正则表达式都足以称之为外部DSL。XML非常通用,但叙冗长,不吻合阅读与程序编制,将来见面怎样改进?

内部DSL则寄宿在某某平等编程语言的根基及,这样就是不需要更学一山头新的语言,宿主语言的语法等都得以来使用,节约了汪洋底次序支付时间。

实际设计一堆API的过程,就是一模一样种植设计DSL的进程。

自也早就想把工区底图和剖面程序DSL化,核心程序员开发好组件库,其他程序员只待这么形容就尽了:

a = Basemap.New

a.AddImage(image, 0, 0, 1, 1)

a.AddSurvey(…)

survey.Hide

SeismicLine.Show zxcVolume inline 200

……

可惜在C#里实现中DSL还是一定辛苦,只能暂时用API了。

作者认为Lisp、Smalltalk和Ruby适合当内部DSL的语言,这恐怕同她的元语言编程特性有关吧。

DSL
设计的做因素:上下文、语句、单位、词汇、层次结构,这些概念我还小领会不了。

2.3 元编程

据此程序来编写程序就是状元编程Metaprogramming。这时又想到了数字油田遭到整天都说交之首先数据,存储这些元数据虽然要,但离以的初次数据一定收集不上来,必无生存的地。如果长数据和长编程都落实了,程序员获取数据的逻辑应该就是是比如说well1.GetWellLog(“AC”)这样?你既然不需写SQL,也非欲写ORM映射关系,也无待写实体类,写起是有益了,但类似学习起来难度又老了。

在Java和C#吃至关重要都是透过反射Reflection来获取和改动程序本身的信息,而Ruby的状元编程相当强,可以据此几尽代码生成100独艺术,而以Java和C#倍受即使只好通过编制专门的代码生成器了。

Lisp中的次是用S表达式来代表的,其程序及数码是一心一致的,
所以元编程已经深入融入到Lisp中了。

正编程很有力,但为非能够用得最为多,否则理解源代码就充分艰难。

2.4 内存管理

垃圾堆收集GC的老三种方法:标记清除、复制收集、引用计数。引用计数方式的法则及落实虽然简单,但缺点也殊多,因此近年来多不再行使。想想Qt中之内存管理吗是利用引用计数,让程序员去决定何时增1、减1真的是同一种植切肤之痛。

乍的杂质收集算法有:分代回收、增量回收、并行回收。

还有同员IBM的学者用物理学上的雅联理论(Grand Unified
Theory,简称GUT)
用来垃圾收集,统一为跟回收和援计数。

2.5 异常处理

本的高档语言都出很处理体制,让程序员可以再有益于地处理非常。传统的之所以异样返回值的措施,容易被本来正常的次为错误处理代码所盖没。

Java
的检查型异常强制让编译器检查好,有时的确无便于。异常之所以被号称大,本来就因其好麻烦事先预想到。明知如此,还免要是在代码中强制性事先对怪做好声明,以避免起编译错误,这实质上是最最痛苦了。

Ruby中的ensure、rescue和retry参考了Eiffel语言的保留字。

2.6 闭包

学Haskell语言时,我以前看闭包Closure就是乘高阶函数,可以拿函数当参数传递给函数。

C语言中函数指针的极致要命败笔是无力回天兑现对表面有变量的拜访。能够针对表变量进行走访(引用、更新),是闭包的咬合要起有。

其三章 编程语言的初潮流

以就同样章节中笔者主要介绍四栽编程语言Go、Dart、CoffeeScript和Lua。看到此间自己打开了TIOBE关于软件编程语言的排行榜(截止到2014年11月),Go语言排名在20称作外(排名46),Dart排名22,CoffeeScript没见,可能合并在JavaScript中了,Lua排名41。

Java稳居第2,JavaScript跃居第7,Ruby有点下降,处于第18叫作,而进步最为抢的R和Swift没有起于笔者的书被。

图片 1

3.1 语言的设计

图片 2

静态类型的语言编译期间就是能够发现更多之BUG,更爱看与晓。而动态类型语言的亮点在于其简洁性和灵活性。

鸭子类型Duck
Typing:如果如鸭子一样行走,像鸭子一样优秀,则它必将是千篇一律单单鸭子。

3.2 Go(排名46)

得叫现代版本的C语言。声称也New(新的)、Experimental(实验性的)、Concurrent(并发的)、Garbage-collected(带垃圾回收的)、Systems(系统级)的语言。作者最看好她,可能要是因它们内置支持并发编程,再不怕它系出名门吧。

3.3 Dart(排名22)

Dart想替JavaScript,但后者就持有了大气用户,看来Dart的前景并无光明。

3.4 CoffeeScript

JavaScript为投入了大气股本进行连发前行,其速已经越来越快。既然JavaScript地位越来越重要,能无克既无抛弃JavaScript,又克服其缺点也?CoffeeScript就是这种思路,它的编译器实现达标虽是JS写成的,CoffeeScript程序会全盘编译为JS代码去履行,其发展值得期待。 

3.5 Lua(排名41)

Lua重点以嵌入式领域,以轻量、高速和应快吗特点。

季节 云计算时之编程

从今这无异于回开,读起来兴趣不大了,简单了解几乎单概念吧。

4.1 可扩展性

于简单的第二细分效仿查找,讲到散列表和布隆过滤器,又说道到了遍布环境中之DHT(分布式散列表)、Roma(键值存储数据库)和MapReduce。

4.2 C10K 问题 

C10K是Client 10000
Problem的缩写,指“在又连接受服务器的客户端数量过10000单的环境遭受,即使硬件性能足够,依然无法正常提供劳动”。epoll、libev和EventMachine,这些就不知晓了。

4.3 HashFold

不感兴趣。

4.4 进程中通信

看Ruby 实现的网络服务器代码是相当之简短,以后有空子好一试。

4.5 Rack 与Unicorn

不感兴趣。

 

第五回 支撑十分数量的多少存储技术

立刻节早已不止了本人的掌握范围,列几只术语吧,CAP、NoSQL、MongoDB、OD
Mapper、VoltDB、memcached、Redis。 

第六章节 多对时代之编程

眼看节中涉嫌了UNIX中之管道功能,真是相当的好看和强大,相比之下,Windows中之管道也是经临时文件模拟实现之,相当之垃圾。

另外有关非阻塞I/O、node.js 、EventMachine的内容暂时在自己之志趣之外。

至于进程中通信,作者提到了ZeroMQ,是千篇一律栽啊分布式应用程序支付提供经过之中通信功能的仓库。有空子可一试。

 

图片 3

图片 4

图片 5

图片 6

图片 7

图片 8

发表评论

电子邮件地址不会被公开。 必填项已用*标注