NoSQL读书笔记2014第17本:《代码的前途》

要去西南出差了,却从友好的书架上和Kindle中找不出感兴趣的书来,临出发前去老SUN屋里寻摸一圈,选中了《代码的将来》这本书。选中它的缘故有几条:Ruby之父写的书,作者是日本人,日本人写的书一般相比实用、也想打听一下Ruby、翻目录时发现有Go、Dart、CoffeeScript、Lua几个新语言的对峙统一分析、老SUN说网上对此书评论不错。

飞机上看了联合,一口气读了前2章,90多页,对各类语言中的关键特性分析得分外成功,对语言的进化历史有了概括性的询问。出差后白天忙工作,上午把多余的部分高速读完了,后边三章的内容对自己来说吸重力就不够了,可能是技术性太强了,我们不会探究到这么深,只会去用别人写好的现成的框架。

率先章 编程的时刻和空中

一初始作者从编程的真面目出手,编程就是创办出一种人类和电脑都可以知情的言语(编程语言),并通过这样的言语将人类的意向传达给电脑,这样的所作所为就叫做编程。自然语言的歧义性太强,以后的用户界面肯定是完美的语音输入应该没有问题,但用语音把问题总体说出去,交给总结机去实现,现在看来如故非凡有难度,倘使今天贯彻了,那么程序员是不是要下岗了?依旧都转入到更底层的代码的编制中去?

编程是一项成立性的行事,可以坚守自己的意思来创造世界,正是编程的最大魅力所在。想起高中时录入的几行BASIC代码,可以一呵而就繁琐的估摸,就想着自己编辑一个小游戏会是何等意况呢?从而爱上了编程那项工作而一发不可收拾。

处理器语言的腾飞与穆尔(Moore)定律也有异常大的维系,但总括机的算法改变得并不大,特别是部分古老的底蕴算法仍在大方施用。摩尔(Moore)定律现在主导还有效,但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编程语言的世界

这里涉及了打孔纸带、巴贝奇的差分机、女程序员艾达、第一台总结机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年十一月),Go语言排行在20名之外(名次46),Dart名次22,CoffeeScript没看见,可能联合在JavaScript中了,Lua排行41。

Java稳居第2,JavaScript跃居第7,Ruby有点下降,处于第18名,而提升最快的R和斯威夫特(Swift)没有现身在笔者的书中。

NoSQL 1

3.1 语言的宏图

NoSQL 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和伊夫ntMachine,这些就不知底了。

4.3 HashFold

不感兴趣。

4.4 进程间通信

看Ruby 实现的网络服务器代码是一定的简短,将来有时机可以一试。

4.5 Rack 与Unicorn

不感兴趣。

 

第五章 支撑大数据的数据存储技术

这章早已超过了本人的知晓范围,列多少个术语吧,CAP、NoSQL、MongoDB、OD
Mapper、VoltDB、memcached、Redis。 

第六章 多核时代的编程

这章中关系了UNIX中的管道功效,真是卓殊的小家碧玉和强大,相比较之下,Windows中的管道却是通过临时文件模拟实现的,出色的污物。

任何有关非阻塞I/O、node.js 、伊芙(Eve)ntMachine的始末暂时在我的兴趣之外。

至于进程间通信,作者提到了ZeroMQ,是一种为分布式应用程序支付提供经过间通信效率的库。有机会能够一试。

 

NoSQL 3

NoSQL 4

NoSQL 5

NoSQL 6

NoSQL 7

NoSQL 8

网站地图xml地图