我爱编程

漫步程序路(2)[学习经验谈及我的C语系书籍]

2017-08-27  本文已影响222人  随风而行之青衫磊落险峰行

今天是2017年6月25日(8月26日注:6月25日开始写本文的),是值得纪念的一天。

是戒烟3周年纪念日!!!

2014年的今天,我(还有另外一位同事,水平非常高的一位同事,在他身上学到了什么是专注)在深圳招商银行数据中心负责CBS5(Cross Banking System)的开发工作(1.0后由其他公司开发维护)。每个月去深圳待20天,连续将近4个月!(腾讯大厦旁边)

有三个原因导致我在那天发誓戒烟:

在上述情况下,我就决定戒烟了!

其实戒烟也并不算很困难。我的法宝就是吃花生。一旦烟瘾犯起来,就吃花生米。坚持了一个周后,发现效果蛮好的。最重要的是咽喉炎没有了,而且吐出几口浓痰后,身心俱爽!至今已经整整三年没碰过一支香烟了。咽喉炎也没发作过!

所以,只要下定决心,那肯定是可以成功的!

毕竟是:
天下无难事,只怕有心人哪!!
只要功夫深,铁杵磨成针啊!!

哈哈哈哈!!!

追溯我的抽烟史,说长不长,说短也不短了。概括来说,就是:
起步晚、发展快,戒的爽


为什么我会学习编程呢?

三个原因:

我第一台笔记本电脑.jpg

所以: 电脑太贵,时间太闲,游戏太好玩,就是这三个原因

学习经验之谈:

关于学习的过程以后再说吧,反正就是无知者无畏,一开始上手就挑了约翰卡马克的quake系列游戏引擎(没经验,谁知道游戏引擎会这么多内容和知识)。今天还是看一下学习过程中买的c语系(类c语言的统称)相关的书籍吧

本篇主要是show一下相关的c语系书籍,后期会逐渐评论每本书哪些地方值得我们更加深入,细致的了解,以及延伸需要的资料,根据我以前的经验,就是:

【没人教的时候,源码和书籍就是唯一获取系统知识的渠道】

【选定源码后,不要朝思暮想,不要轻易换掉】

【如果我面试程序员,就给定一段源码,让面试者当场跟断点,就能看出他是否能解决问题】

【英语能力和搜索能力也是编程能力增长的关键点】

(我在2004年-2009年间【2009年后做游戏开发去了】,英文能力增加非常快,得益于整个工作环境,每天可以接触不同国家的人,土耳其人,伊朗人,美国人,日本人,德国人,印度人,巴基斯坦人.......)

我会拍一些视频,在视频中不单单演示代码,而且会讲述相关的英语术语,用于加强搜索的正确性

实际上我策划了【6部技术笔记】,目前在简书上每天撰写的是图形引擎以及c/c++方面的东西,实际并不是我【6部技术笔记】之内的东西,这是因为图形引擎与c/c++我最熟悉,因此不用过多调试就能直接出结果,当然文笔是败笔啊,但是技术为主,就将就一些吧!

关于六大系列笔记,具体我会另行视频演示。

【好记性不如烂笔头,需要定期总结前段时间的经验与得失】

后来有一年时间,我专门负责公司内部员工培训(三批次,每天远程avcom教学 ,出卷,每周考试,试卷讲解)以及对徐州化校计算机班进行远程培训(原本是想选人,不过感觉他们并不喜欢计算机,一个月后放弃),拍摄和撰写了很多内部资料和视频讲解(整个引擎源码分析,uml架构图,序列图,渲染器,面相对象,设计模式....),培训结果非常不错,由于公司业务性质原因,以c/c++为核心,然后根据业务需要调整各个员工到各个领域中去,有了c/c++,stl容器,gdi,数据结构等基础知识,其实转到客户端,前端等岗位是比较容易的

【树立偶像很重要!】

我的程序人生中,两大崇拜对象:

3D引擎之神:

John D. Carmack(约翰卡马克)

传记《Doom启示录》


Delphi、C#,Typescript之父:

Anders Hejlsberg(安德斯·海尔斯伯格)

传记《Borland传奇》


我的非计算机图形学/游戏引擎相关书籍:

  1. 谭浩强的《c语言教程》和 严蔚敏的《数据结构(C语言版)》

不用说,这两本书肯定人所共知。之所以选这两本书,是因为我去我哥们(工科)那里,开课的也是这两本书,所以就买了下来。这两本书上记录了很多内容,但是后来被我送给当时公司的文员了(我那时在公司没事【还未进入程序行业】,就给他们show我的flash动画,后来其中一个小姑娘原本也是工科毕业,也想学编程,我就慷慨的送给了她)

  1. 四本c/c++经典书
c++四本经典书.jpg
  1. 数据结构、多线程、COM:
数据结构_多线程_组件对象模型.jpg

数据结构这本书,我个人非常喜欢,使用c++描述,没有冗余代码,实现代码极其简单明了直接,非常棒的书

Jeffrey Richter的windows核心编程(Windows via C/C++),经典中的战斗机,内核对象,线程与同步描述的多么清晰,最喜欢IOCP原理描述这一章和DLL注入方面的东西(好多年前,我通过win核心编程描述的DLL注入方式,hook住dx9运行库,在pps的网页播放器上运行我的字幕及绘图,我有时间测试一下,现在是否还能注入到例如爱奇艺浏览器版视频播放器中),还有就是内存调试方面的内容,非常棒的一本书(难度很大,但是收获很多)

Jeffrey Richter还有部经典的.net著作: CLR via C#,虽然我没买,但是这本书绝对是经典。

C++并发编程,主要使用了C++ 11中的线程和并发方面内容,我将该书作为参考书使用,遇到问题,查阅使用。

线程从底层到高层(windows描述,其实除了win api和ppl之外,其他库都是跨平台的!):

ATL是简化微软COM(组件对象模型,二进制复用技术)开发而提供的一个轻量级的封装库,开发COM基本都喜欢用这个库,以前我们的引擎就是基于COM实现


  1. IOS/Android 和重构、设计模式:
    objc_ndk_重构.jpg

这几本书是用于IOS和android开发的,在2014年,我负责移动部门的开发事物,当时没接触过移动,就这几本书学的,其实移动开发比桌面简单(个人认为,不代表普遍性观点).

重构这本书,很经典,和四人帮的设计模式并列面向对象的经典教程,设计模式书没买,我是打印版。没事就应该翻阅一下,然后根据经验和书中进行对比总结。这两本书,随着你的经验增长,每次阅读都有不同的体会


  1. .net、js和python:
点net_node_js_python.jpg
.net本质论,如果你想深入了解统一类型系统,AOP(面向切面编程),从汇编级别了解.net类型安全的delegate合成....,那么本书就是经典!

深入浅出nodejs(阿里朴灵,nodejs布道者),学习nodejs的人员必备书籍吧。我这段时间,这本书读的最多,我主要结合libuv及nodejs源码来验证第二章模块机制和第三章异步io部分内容。这部分我认为是本书的最精华部分。其他章节主要是js方面的内容。

知道为什么nodejs都是回调吗?
很简单: 因为nodejs的核心引擎是libuv,所有js输入都转换成libuv c结构数据,然后经过libuv处理后,进行完成通知(windows中用IOCP,linux中用epoll),异步回调模式。

所以并不是v8 js引擎导致nodejs的回调编程模式,而是libuv的使用了完成回调通知的模式。

你不知道的js,涉及js的一些关键点。我在撰写闲聊js系列文章中,遇到js最多问题就是this指针指向的问题,具体原理都在本书中有详细解释。

python基础教程,满经典的一本书,目前js和python是最有前途的脚本语言。和c/c++的协作能力也是无与伦比的。其实python不算c语系,语法风格差距蛮大的。是一门很好用,很有特色的语言。我主要在树莓派中使用python。


  1. 编译原理方面书籍:
编译知识.jpg

我本人最有兴趣的两个领域:图形引擎和编译器

flex是词法分析器,bison是语法分析器
其实编译原理方面,关键是明白什么是:
BNF(Backus-Naur Form)【巴科斯范式】
说难很难,说容易也很容易的,就是递归的一层层的定义出语言的各个基本组成部分。像c,c++,c#,js,switf,java,sql....开源的语言都能在文档中查到BNF定义式。这个以后有机会我们可以深入的聊一下。

json2objc.png

上图为json2objc(2015年我开始开发的核心库)的方法签名,使用的原理就是BNF递归式定义各个语言要素(例如对象,类,属性,方法,赋值,枚举,事件,绘图命令等....),生成抽象语法树(AST),然后将json描述转换为objc代码(做跨平台UI系统)

js2cpp2.png js2cpp.png

上图为一个研究项目,将js的ast转换为c++/objc/java/c#,现在中断了,因为typescript更适合(带类型系统,不需要通过变量类型前缀来进行其他强类型语言的类型输出,例如 let nParm = 1,用类似微软匈牙利命名法来进行类型前缀标注)

其实我大部分工作是进行基础性工作。

关于LLVM,我只是觉得苹果objc编译速度超级快,cocos2d-x 3.x版本在vs2015基本要编译半小时,但是在objc中大概10分钟就能搞定(两年前的事情,不知道是否最精确,但是的确当时感觉objc编译速度超级快)

目前llvm已经在各个平台运行了,而且c/c++调试信息方面,lldb要优于gdb。我前段时间装Ubuntu就是为了在上面运行llvm系列库。

也写了蛮多字了,休息一下。下一篇就关注一下我的计算机图形学及引擎方面的书籍吧

漫步程序路(1)[学什么不重要,重要的是你静得下心来吗?]

上一篇下一篇

猜你喜欢

热点阅读