[计划]工作十三年半的技术总结
似乎这一两年只记录了心情和计划,并没有谈太多的技术,我打算逐步回归做一些技术记录。
技术记录令人讨厌的就是两点:
1:技术文章,方向越是专精,越是受众少,写起来挺难引起共鸣的;而自己又没有达到绝顶高手的地步,更是写的没有太多营养。想学的人有太多信息可以获得;不想学的人你写些什么都没有用。所以会很孤单。
2:另外,写完之后,技术文章通常需要自己回头去看的概率比较低,因为能写的出来,其实多半是已经被自己良好消化的。如果仅用来记录一些坑,倒是之后用得到,但难成体系,专门写个日志又太麻烦,毕竟现在日志发布流程很不自动化,短期内也没办法自动化,天天换工作环境……
但毕竟要养成做技术记录的习惯,这对自己部分技术细节理解还是有意义的,所以还是写给自己看吧。
突然做出这种决定,还没有好的方向,所以这一次还是先做之前的技术方向整理。
【分数机制】
0分,不知道或者仅仅听过这几个相关词。
1分,专门学过一小段时间或者看过书,但很快放弃了,知道这个东西是干嘛的,有一些不太准确的优劣判断。能对着文档或例子写几行代码的demo跑起来看一下。
2分,语法或者接口能记得一点,能看懂中小型库,会简单通过搜索引擎抄抄改改大约1000行以内的小功能库或者demo。
3分,大部分语法或API了解,在商业代码中使用过一点点相关的技术,但技术依然稚嫩,没人指导下,使用该技术做不出来什么有大意义的东西。
4分,绝大部分语法或API了解,部分语法或API比较熟,偶尔还能炫几个技术要点,对基本的机制运作原理是了解的,技术的优劣比,替代关系,DEBUG技巧都有一些。非特别棘手问题,基本自己可以用该技术做一些有意义的东西。
5分,绝大部分语法或API了解,大部分语法或API比较熟,有自己的想法,能在商业开发中正常使用该技术进行开发,有自己沉淀的改进库或者文档分析,绝大部分问题完全可以自己搞定,对部分底层有初步的了解。
6分,大部分语法或API比较熟,有自己的想法,在相关技术领域有较多的分析意见,有5年以上的全职该技术的开发经验,有大量的相关资料,文档,库的沉淀,在开发中可以信手拈来使用,对底层实现已经非常熟悉,遇到一些疑难杂症已经能自己思考找到线索解决。
7分,在这个技术领域的普通技术开发你已经是专家,没有什么常规问题是你无法解决的,网上的该技术相关解决方案已经几乎没有在你理解之外了,你开始解决一些网上没有答案的疑难杂症,并已经开始贡献一些有轻度有实际意义的支持库加强包之类的东西回馈社区了。
8分,你在这个领域已经被大众认为是专家,你的建议对公司举足轻重,对相关技术社群开始有意义,已经有一些相当知名的库,博客或ID了。
9分,这是开创者,先驱者,革命者,神的领域。
2006.01 - 2016.09
十年半都是纯做游戏,虽然客户端服务器都做,端游页游手游都做,但因半路出家,底子不好,所以花费了很多精力在很多基本常识上。例如SQL,网络基础知识,基本算法和数据结构等。
最终技术栈只有如下:
- 语言部分:
C/C++熟悉。(6分)但仅限C++98,连C++模板用的都不熟,更不用谈C++11,14,17,20;标准C的话能写简单的东西,在项目中其实没什么锻炼。开发大部分还是在windows上,有一点点linux下使用gdb简单调试能力,没有linux下真正开发能力。
Lua了解。(4分)会点语法,知道一点元表这些东西,也知道Lua和C之间的调用注册机制,但自己写不出来Lua和C的调用封装库。能注册一点方法,写点逻辑,也没太多理解。
Win batch, SQL, js/HTML/CSS,Shader, object pascal, java (2-3分)偶尔会弄一些小工具小脚本小支持啦,大约在那种能读能小改的地步,语法关键词都记不大全,做个事都靠搜索引擎的,没人帮助的情况下基本没有项目意义。
- 业务部分
游戏引擎开发:(5分)初期我就是用游戏引擎入门开始学习的,而非游戏项目,所以对于引擎之间的整合关系,层级关系,模块分割有一定了解,大致就是现在让设计个引擎的话,能够对结构有一定的想法。虽然用的引擎不少,自学的引擎更多,但都限于纸上谈兵,没有成熟的专业引擎开发经验。
游戏客户端框架:(6分)因为数次参与从0开发的项目,也对引擎比较熟悉,也很有OO概念,所以客户端框架还是有一套想法的,也没有那么纸上谈兵。但逻辑线程和渲染线程的分离依然是心头大疾,现在依然搞不定。
游戏服务器框架:(4分)我没在项目中用过服务器引擎,主要是因为游戏业务需求的不同对服务器的设计影响很大的原因吧。但接触了不少游戏服务器,对这块也有一定的理解,有不少实战经验,但和客户端相对的,我缺乏从0搭建服务器组的经验,所以信心稍弱一些。
游戏逻辑开发:(5分)例如游戏中战斗系统,Buffer系统,活动系统这些啦。其实前期我还是做了不少的,后来做的越来越少,因为这块业务变化太快,也感觉技术含量没那么高。我做过的模块挺多挺咋,也有过一些很不错的框架,也能做出良好的设计,在后期重构和细节调优的部分也有不少想法,但依然没有达到精妙设计的地步。
软件工具开发:(3分)包括自动化工具,以及美术策划编辑工具。虽然我很喜欢干这活,也做了一些,但一直没有大型编辑器开发经验,都是小型的辅助工具。其实也挺好,我并不打算私下搞个太高大上的编辑器出来。
- 专业部分
TCP/IP网络,UDP网络:(3分) SQL数据方面:(3分) 物理方面:(2分) 渲染方面:(4分) AI方面:(3分)
- 相关库或技术细节
太多,不想细节描述。比较核心的应该是windows机制,ogre,cocos为主力吧。
2016.09 - 2018.01
从两年半前,我任职windows开发工程师,在网站开发部,主要做一些windows工具和一些技术调研等,期间任务很杂,主要学习内容有:
- 语言部分:
C#:(4分)期间沉迷于体素游戏开发,于是对mono和体素游戏做了一些研究。同时,基于公司项目做了一些C#浏览器相关工作和winform工具的工作,倒是没用asp.net部分。
Go:(3分)做了几个DNS相关工具和网页后台相关软件,因为都是小工具关系,总觉得在性能调优部分并没有认真去考虑。倒是在这时候了解了一些分布式服务架构思想。
JS:(2分)做了一点JS小游戏和微信小游戏这些,对JS熟悉度有一点轻度的提升。
- 业务部分
完全规避,毫无长进。
- 专业部分
网站网页相关基础知识: (3分)类似简单的HTTP/S机制,浏览器请求DNS解析响应DOM树解析这些流程,一些基本的PHP,JS,JAVA开发基础概念以及相关机制,多少还是有入门的。可以顶个一年经验的网页开发程序员吧。
人工智能:(2分)自学了一些人工智能深度学习相关的东西,也做了一些习题,但基础薄弱被迫去补,也没有项目经验。
区块链技术:(2分)学了一些区块链的东西,还做了个一个solity的区块链小游戏,也自行发币玩过,但没爱,确定挂机放弃。
黑客和黑帽:(1分)中间按照公司需求写了一些软件安全和网站安全方面的东西,算是入门了一些,了解了部分知识。
其他基本没有什么进步。
2018.01 - 2019.03
这一年多主要在大数据部门工作,任职大数据工程师,从事spark ETL工作和一些api接口提供。
- 语言部分:
python: (2分)做了一点爬虫和Flask后端工作,也做了一点ETL数据清洗工作,但还是非常不熟,DEBUG基本靠LOG,出了问题就卡掉的节奏。
scala:(2分)硬着头皮做了几个ETL,也基本明确了一个商业spark ETL任务的开发流程,但对这个语言的思维方式和spark接口的思维方式还是很多不习惯的。
Go: (4分)期间公司的大数据API服务器都是我从0做起来的,另外写了个go分布式服务器,虽然没有经过商业认证,但毕竟算是中型项目,我准备全力向这里投资。
JS:(3分)做了一些大数据前端可视化,了解了一些JS网页开发常用库,对JS的熟悉度有一定提升。
- 业务部分
稍微被动接触了一些简单的业务需求设计和算法,但没有深入了解
- 专业部分
数据库技术:(4分)诡异的数据库,ES, HBase, Mysql,还有相关的存储容器 hive, kdfs, redis, 消息处理kafka, MQ等,对SQL语法确实熟悉了很多,包括ES,hbase一些查询语法以及表设计原则之类的。
服务器开发:(5分)因为之前对服务器已有比较多的了解,这次加强了对http服务器架构,分布式架构,微服务架构,数据库部分技术,并增强了Linux使用,k8s, docker等devops工具使用,所以从开发面到部署整个层面上是有一定提升的。
2019.03 - 现在
最近被调到了系统组,任职高级系统架构师,从事工作内容不明,就现在看起来更多是技术突破和技术指导的内容。
JS语言部分(3分)虽然用cocos creator做了一个完整项目,但是使用ES6的技术并不多,调试技巧也没有多先进,进步不大。cocos也没有增加太多了解,所以也就不提了。
不过接下来的工作是一些SEO相关工作,我会更多向黑帽方向去学习,大致计划是第一步:
先做一些爬虫,伪原创等工具,搭建蜘蛛池。
再做一些快排工具。
然后做一些漏洞扫描工具,拿webShell。
计划采用的技术主要会是golang , python + tersorflow/pyTorch.
所以当前情况是:
语言部分:C/C++(6) Go,C#,lua(4), JS,SQL(3), scala, python,java,shell(2) 业务部分:游戏客户端架构(6) 游戏引擎开发,游戏服务器架构,游戏逻辑(5) 网页前端开发,软件工具开发,API服务器开发(3) 专业部分:数据库,图形渲染(4) 网络,基本AI(3) 物理,区块链,人工智能(2) 黑帽黑客(1)
另外,之后的语言重心会是 Golang(服务器向),TypeScript(前端向),Python(胶水工具,大数据,人工智能向),C#(客户端工具向+MONO游戏向)。
之后会尽量多一点技术相关的文章和记录。