《golang笔记》第一篇-初识

    上个世纪70年代,贝尔实验室的Ken Thompson和Dennis M.Ritchie合作发明了UNIX操作系统,同时Dennis M.Richie为了解决UNIX系统的移植性问题而发明了C语言,贝尔实验室的UNIX和C语言两大发明奠定了整个现代IT行业最重要的软件基础(目前的三大桌面操作系统中Linux和Mac OS X都是源于UNIX系统,两大移动平台的操作系统IOS和Android也都是源于UNIX系统。C系家族的编程语言占据统治地位达几十年之久)。在UNIX和C语言发明40年之后,目前已经在Google工作的Ken Thompson和Rob Pike(他们在贝尔实验室时就是同事)、还有Robert Griesemer(设计了V8引擎和HotSpot虚拟机)一起合作,为了解决在21世纪多核和网络化环境下越来越复杂的编程问题而发明了Go语言。

    所有的编程语言都反应了语言设计者对编程哲学的反思,通常包括之前的语言所暴露的一些不足地方的改进。Go项目是在Google公司维护超级复杂的几个软件系统遇到的一些问题的反思(但是这类问题绝不是Google公司所特有的)。

    正如Rob Pike所说,“软件的复杂性是乘法级相关的”,通过增加一个部分的复杂性来修复问题通常将慢慢的增加其他部分的复杂性。通过增加功能、选项和配置是修复问题的最快的途径,但是这很容易让人忘记简洁的内涵,从长远来看,简洁依然是好软件的关键因素。

    Go项目包括编程语言本身,附带了相关的工具和标准库,最后但并非代表不重要的是,关于简洁编程哲学的宣言。关于简洁之道,先来看一下Go当前的取舍。Go拥有自动垃圾回收、一个包系统、函数作为一等公民、词法作用域、系统调用接口、只读的UTF8字符串等。Go没有隐式的数值转换,没有构造函数和析构函数、没有运算符重载、没有默认参数、没有继承、没有泛型、没有异常、没有宏、没有函数修饰、更没有线程局部存储。相对于C++拥有的语言特性,Go简直少的可怜。

    作为一个计算机专业所谓科班出身的人,从用c敲下人生第一行代码,到如今也使用过许多不同设计哲学的编程语言,无论是c、c++、java、python、lua、js、perl、shell,都没有成为手中披荆斩棘的利器。参加工作以来,面对公司成熟的产品,分析其中复杂的逻辑,添加新的需求,修改产品漏洞,真的是伤透了脑筋。渐渐的对于编程之道只有一个核心标准--简单。一个成熟的产品,一个保持活力不断更迭的产品,需要前前后后的开发者不断精雕细琢。从前我以为编程语言是人和机器沟通的桥梁,现在我认为编程语言是不同开发者交流的桥梁。一个产品从无到有,从设计到实现,从复杂性来讲我认为有两种。第一是设计逻辑,第二是代码逻辑。如果大家使用同一种编程语言,遵循同一种编程范式,实现同一种模块组织结构,是不是能够使设计逻辑足够清晰、简单呢?如果一段设计逻辑大家使用同一种错误处理方式,模块之间使用同一种调用方式,并发编程也使用同一种手段是不是可以让代码逻辑易于理解呢?

    编程语言只是软件开发中最基础的部分,个人的能力才是最重要的,并不是说掌握了某种语言就可以为所欲为了。我认为软件开发的重要标准还是编写出直接、简洁的代码逻辑,拥抱Go语言,希望可以得偿所愿!

你可能感兴趣的:(golang,操作系统,c/c++)