0.1编程真经

编程真经

我是因项目需求而接触的go语言,而在此已经多少了解过的语言有:汇编、C、C++、Python、Lua、PHP、Java、C#、JS。之前有一位大师曾告诫我:工欲善其事,必先利其器!

学习技术,贵“恒”,重“精”,忌“浮”! 切不可“这山望着那山高”!先专心学精一门语言,然后对其它的语言便可融会贯通! 但是我还是走了弯路,接触了众多的编程语言而未先专精一门。这也跟我的职业有关,在15年之前,我的主要工作是渗透测试与漏洞挖掘。主要方向是Web安全。我的启蒙老师是邪恶八进制的char,曾教过我00截断的上传技巧,后来丢给我一本书《精通脚本黑客》,从此便踏上了Web安全的旅程。后来陆续接触了android安全、物联网安全、云安全。也就接触到了众多的编程语言。

接触了众多的编程语言之后,也就慢慢的理解了之前那位大师对我的告诫。语言只是你思想的表达,只是一些招式,所以无高低贵贱之分。最重要的是修炼内功,内功深厚后,草木竹石皆可为剑。

机器生汇编,汇编生B,B生C,C生万物!

虽然语言无高低贵贱之分,但是对于信息安全从业者,有两门语言必须要掌握。那就是汇编和C。这是你通往高手的必经之路。(如果量子计算机普及后,可能会有所变化,但是在电子计算机的世界绝对适用)

我们这里看下编程语言的进化:汇编——C——C++——Python——Lua——PHP——Java——JS——Go。

编程语言由最开始的机器语言到汇编语言,再由汇编语言到C/C++这种静态类型语言,再到Python/lua/php这种解释性动态语言,再到Java/C#这种基于JVM和.NET运行库的静态语言,再到Go这种带动态特性的静态语言。从流行程度上来说,可以从静态语言到动态语言,再由动态语言到静态语言。两种类型的语言相互结合,从趋势上来看,是返璞归真了。

从信息安全行业推而广之到整个IT行业,如果要想有所提升。那应该在以下四个层面加强修炼。

语言层面、算法层面、项目层面、专业层面。

语言层面:编程语言是一个工具,是用来表达你思想的工具,跟你说英文、中文、法文、德文一样。人们便于交流发明了文字和自然语言。而给跟计算机进行交流,就发明了计算机能懂的编程语言。所以,在编程语言层面,要先熟悉一门编程语言,同时也不要忘记学习不同范式的编程语言。如果非要在这里推荐几门编程语言的话,那就是必须学好一门静态语言+一门动态语言。通常要么是C/C++与Python双修。要么是Java与Python双修。要么是Go与Python双修。在学好一门静态语言+一门动态语言的基础上再去根据个人的时间去合理安排其他语言的学习。

算法层面:《离散数学》、《具体数学》、《数据结构与算法》、《算法导论》、《算法》、《算法竞赛入门经典》、《挑战程序设计竞赛》这些书都是修炼内功心法的法门,如果掌握了这些心法,对你今后其他武功与招式的学习将起到事半功倍的效果。

项目层面:用你熟悉的编程语言多做一些项目,积累一些行业经验,学习技术的同时也要了解业务。到这个层面,就是两个字:积累。

专业层面:根据自己的兴趣,学习一些专业知识。比如密码学、数据挖掘、机器学习、自然语言处理、漏洞挖掘、编译原理、嵌入式系统、分布式系统等,这个层面要根据你自己的兴趣来。如果要推荐一些的话,我只能给你提供这些关键词:物联网、大数据、人工智能、云计算。

20世纪70年代,贝尔实验室的Ken Thompson和Dennis M. Ritchie合作发明了UNIX操作系统,同时Dennis M. Ritchie为了解决UNIX系统的移植性问题而发明了C语言,UNIX和C语言奠定了整个现代IT行业的软件基础(目前三大桌面操作系统中的Linux和Mac OS X都是源于UNIX,两大移动平台的操作系统IOS和Android也都是源于UNIX。Python是C些的,Lua是C写的,PHP是C写的。C++是C的拓展,从编译器角度上看C和C++是同一个东西,Java是C++的简化版本,并且JVM是用C和C++写的。目前比较或的Node.JS底层同样是C++写的。Go语言的早期编译器也是C写的,后来从Go1.5开始,Go语言实现了自举。现在已经是C和C++的世界了。这也就是我说的C生万物的原因。)。在UNIX和C发明40年后,由原来贝尔实验室的Ken Thompson和Rob Pike以及V8引擎和HotSpot虚拟机作者Robert Griesemer一起合作,为了解决21世纪多核和网络化环境下日益复杂的编程问题而发明了Go语言。

Go语言起源

讲了一些道的东西,我们现在讲以下术。

编程语言的演化跟生物物种的演化类似,一个成功的编程语言的后代一般都会继承它们祖先的优点;当然有时多种语言杂合也可能会产生令人惊讶的特性;还有一些激进的新特性可能并没有先例。我们可以通过观察编程语言和软硬件环境是如何相互促进、相互影响的演化过程而学到很多。

下图展示了有哪些早期的编程语言对Go语言的设计产生了重要影响。


Go语言被誉为“21世纪的C语言”,定位为分布式系统编程语言。Go从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器码的运行效率以及和现有操作系统的无缝适配。

但是在Go语言的家族树中还有其它的祖先。其中一个有影响力的分支来自Niklaus Wirth所设计的Pascal语言。然后Modula-2语言激发了包的概念。然后Oberon语言摒弃了模块接口文件和模块实现文件之间的区别。第二代的Oberon-2语言直接影响了包的导入和声明的语法,还有Oberon语言的面向对象特性所提供的方法的声明语法等。

Go语言的另一支祖先,带来了Go语言区别其他语言的重要特性,灵感来自于贝尔实验室的Tony Hoare于1978年发表的鲜为外界所知的关于并发研究的基础文献顺序通信进程communicating sequential processes,缩写为CSP。在CSP中,程序是一组中间没有共享状态的平行运行的处理过程,它们之间使用管道进行通信和控制同步。不过Tony HoareCSP只是一个用于描述并发性基本概念的描述语言,并不是一个可以编写可执行程序的通用编程语言。

接下来,Rob Pike和其他人开始不断尝试将CSP引入实际的编程语言中。他们第一次尝试引入CSP特性的编程语言叫Squeak(老鼠间交流的语言),是一个提供鼠标和键盘事件处理的编程语言,它的管道是静态创建的。然后是改进版的Newsqueak语言,提供了类似C语言语句和表达式的语法和类似Pascal语言的推导语法。Newsqueak是一个带垃圾回收的纯函数式语言,它再次针对键盘、鼠标和窗口事件管理。但是在Newsqueak语言中管道是动态创建的,属于第一类值, 可以保存到变量中。

在Plan9操作系统中,这些优秀的想法被吸收到了一个叫Alef的编程语言中。Alef试图将Newsqueak语言改造为系统编程语言,但是因为缺少垃圾回收机制而导致并发编程很痛苦。Go语言从其中借鉴了很多特性。

Go语言的其他的一些特性零散地来自于其他一些编程语言:比如iota语法是从APL语言借鉴,词法作用域与嵌套函数来自于Scheme语言。在我学习Go语言的过程中,也隐约看到了JavaScript的身影。当然,我们也可以从Go中发现很多创新的设计。比如Go语言的切片为动态数组提供了有效的随机存取的性能,这可能会让人联想到链表的底层的共享机制。还有Go语言新发明的defer语句。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,316评论 2 35
  • 附录B 编程的本质 编程的本质 N 尼古拉斯·沃斯(Niklaus Wirth,1934年2月15日—),生於于瑞...
    光剑书架上的书阅读 2,773评论 1 11
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,792评论 1 61
  • “‘我们仨’其实是最平凡不过的。我们这个家,很朴素;我们三个人,很单纯。我们与世无求,与人无争,只求相聚在一起,相...
    Sherlock_Holmes阅读 236评论 0 0
  • 前言:从我怀孕成为“准妈妈”开始,宝宝爸爸就送给我一本当时流行的育儿书籍《好妈妈胜过好老师》。至今这若干年,我不断...
    魏然2015阅读 1,623评论 0 3