正式工作到现在也将近5个月了,之前一直很忙,没怎么做过总结。最近稍微好了一些,趁着周末简单总结一下这几个月来的收获,以及不足,以及做一些简单的规划吧。
入职以来,其实很多事情都超出了自己的预料。首先职位上,之前一直做windows上面的java开发,做过一些web相关的J2EE开发,实习期间做的主要是J2SE,所以总的来说,其实自己比较熟悉的就是java,面试也是java相关的岗位。但是入职后被分配到了看着比较高大上的“云存储”部门,做linux下的服务端开发。因为操作系统以及开发环境都不熟悉,而且入职两周后,就让负责比较坑的hls项目,所以压力确实很大。现在想想,当时主要压力来自几个方面:一是对hls整体架构不熟悉,推流的rtmp协议一无所知,nginx的工作原理以及配置完全不熟悉,二是分布式的key-value数据库redis和http服务器gunicorn从来没听过,三是音视频的处理的一些工具,比如ffmpeg完全不知道怎么用,四是一些常用的分析工具,比如抓包工具也不知道怎么使用,再加上对python这门语言本身不熟悉,所以刚开始一两个月,经常面对问题,无从下手,当时觉得自己弱爆了,现在回过头来想想也可以理解,毕竟面对完全陌生的开发,在缺乏比较全面指导的情况下,还是比较难的,而我自身的基础又比较差,所以在开发,以及改进上面进展缓慢也是正常的。换句话说,如果让我在已经成熟架构上面做一些业务逻辑的开发的话,我想我应该很快上手,过程也会顺利很多。
说到总结,还是通过之前的工作,总结下自己的优缺点,以及亟待改进的地方吧。
首先,优点还是有的。
一个是感觉自己在学习新东西,新技能方面,比想象中的要快。比如说python也就看了两个星期,就可以写一些统计分析,邮件相关的程序;rabbitmq,redis,thrift协议这些大概也就各一周的时间就能够学会基本的使用,能够做一些基本的封装;go语言也是边学边写,能够在边学边写的过程中,用到一些相对来说比较复杂一些的特性,比如反射等等来改进代码。
第二点就是毅力方面还是不错的,比如说即使面对完全陌生,无处下手的东西,也不会觉得自己要放弃,或者一味求助他人,而是能够不断找资料,一点点的熟悉,虽然过程中会走不少弯路,但是我觉得还是比较值得肯定的,做技术确实需要不服输的精神。
下面主要说下自己的缺陷,通过工作可以发现,有一些缺陷很明显。
一是知识面太窄,这个真是硬伤。以前一直搞搞数据结构,看看算法,写写java的业务逻辑,就觉得自己不错了,但是发现很多东西其实完全不会,也没有系统学习过。比如网络层的协议,操作系统调度,线程、进程、协程方面的知识完全不了解,或者只是知道一些基本的概念,在写程序的时候很少考虑这些,比如cpu分配,线程切换等等。
二是linux实在是太不熟了,作为linux下的服务端开发程序员,这个影响太大了,直到现在也只是知道常用命令的使用,很多时候还要google,对于linux的一些信号量,什么fork,中断之类的完全不熟悉,这个也急需加强。
三是基础太差,主要表现在网络方面的知识上。大学就不说了,计算机相关课程基本没好好学,后来研究生后也主要看算法,数据结构方面的东西多些,这个在面试中用处不小,但工作中感觉基本用不上。而且因为网络在考研中占的比例小,基本没好好看过网络相关的知识,以至于刚开始的时候TCP/IP协议,http协议,socket,长连接,短连接等等知识完全不熟悉,现在也只是一知半解,这个还是需要花时间好好学习下,系统学习下的。
四是一些基本的观念没有,比如说查看源码,经常发现一个函数不好用,但是看api上面明明说可以这样用,但是怎么调试都不行。后来求助他人,我发现他们第一时间都会进入源码看下,为什么不行,然后很快就能找到原因。其实这个习惯主要还是因为之前做java做多了的缘故,java的api写的很详细,很全面,所以以前基本做什么都首先看看api就搞定了,但是python,go还有一些开源的工具软件,经常api就是一行,这样的话根本看不出来怎么用或者适用场合,还是得看下源码。这个确实费时间比较多,但是如果养成了这个习惯,进步也会不小。
目前发现的缺陷大概最主要的就这么多,最后说下接下来几个月或者一年的规划:
一是系统的学习下linux的一些东西,包括shell,不一定要很精通,但是基本的脚本要会写,这个某些时候可以大大提高工作效率。比如说我发现很多同事,都自己私下写了不少shell脚本,方便自己某些工作。我暂时不需要达到掌握的程度,但是一些基本的,比如说在程序写完之后,写个shell脚本作为入口,停止等,发一些信号到程序中,这些还是必要的。
二是python还是得好好学下,脚本语言确实很好用,而python用的又这么广泛,好好学下肯定没错。目前python已经上手,后面可以看下高级的特性,《深入python》,effective系列的书等等,这个应该工作用到的也比较多,而且对自己好处比较大。
三是把之前一些用到的开源工具搞熟,比如rabbitmq,redis,thrift协议这些,为什么好用,原理是什么,为什么能够应付大规模,并发情况等等,而不是限于简单的会用,这个应该多看一些资料或者网上别人的见解,就会加深不少认识。
四是系统的看下网络方面的知识,《TCP/IP协议》两卷,在有空的时候还是要看下的,socket编程,也是需要抽空看下,这个任务比较艰巨,可能需要很长时间。
另外,还有一些以后工作中需要注意的:
经常晨会时候听到说高可用,主从切换,集群配置,这些基本思想是什么,具体怎么弄,可以在有空的时候了解下。
go语言,以后还是应该会用到比较多的,其实这门语言还不错,学习成本不高,性能效率又比较好,而且是google搞的,应该还不错,可以在工作中边用边学,多做些总结。
java,这个过段时间可能会写一些android的sdk,java目前只能说是熟悉,网络编程,多线程等等高级的特性基本没用过,不过java基础还好,面向对象思想掌握的还是比较到位,学起来应该会较其他的轻松些。
多做总结,之前太忙了,以后工作上手了后,可以抽空写点总结,比如写点博客加深理解,比较好。
目前想到的就这么多,现在感觉自己还是比较菜,组里的高手还是不少,特别是某位只比我早毕业一年的童鞋,你能单独设计云录播的系统,能够写那么多并发,高可用相关的模块,真的比我强太多了。希望我一年后,能够达到你的水平,那样这一年就收获巨大了。
嗯,暂时这样,且行切记,且行且珍惜。