上周六参加了公司组织了java培训。因为公司很多组件是用java写的,所以打算好好学习一下java,这样看组件相关代码的时候,就会减轻不少障碍。虽然之前已经学过一段时间的java了,但是都自己在网上找的资料。所以我期望能从专业讲师那里了解到一些不一样的东西,结果却令我很失望。讲师太啰嗦了,而且讲的东西也基本上是我已经了解的基本的java语法。后面还有两次课,还是打算去听一下,希望不要像这次这样失望。
算上java,目前我接触过的变成语言有8种了,分别是c,c++,c#,erlang,javascript,html,lua和java。所以今天我想来聊聊,我是如何学习了这么多种编程语言的。
大学最先学习的是c语言。那时候c语言是计算机系的必修课,每周有两节课,我一节不落地上完的。c是我的程序入门语言,学习c语言主要是在大二和大三的时候。那时候几乎每天都去机房上机练习,还在网上逛各种c语言学习论坛,比如唯c论坛。那时候使用的编译器是turbo C,很老土吧。然后c语言学完后,我自己还用c语言写了个扫雷的游戏。
大三快毕业的时候,学校安排了c++的学习。但其实我在学校开课之前,已经自己买了书在学习了。c与c++的区别就是c++是面向对象编程语言。从c++的学习当中,第一次了解了类,对象,继承,多态等这些概念。c++也是目前为止,我用的是最久的一门编程语言。毕业后做游戏客户端和桌面软件的时候,都是用的c++。现在也在用c++,不过比以前用得少些了。
c#是在做游戏的时候接触的。那时候我们的游戏服务器程序是用c#写的,所以就学习了c#。C#与Java非常相似,它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程。另外, c#里面没有指针。c#学得不深,用的时间不长,大概用了一年多。
2013年打算要转到平台后,学习了erlang语言。那时候因为白天有工作要做,所以我都是早上6点起来学习的,学到8点,然后去上班。我个人觉得erlang比c和c++要容易使用。是目前为止,我最喜欢用的一种语言。很多开源组件,比如rabbitmq,ejabberd等,都是erlang写的。现在我负责的系统的后台也是erlang写的。
转到平台组后,因为新系统设计成b/s架构,所以要做前端,于是我又学习了javascript和html。javascript和html我是在w3cschool这个网站上学习的,它是个非常不错的前端学习网站,每个知识点都讲得很详细,而且还有很有例子。这两种语言我用的时间也不长,招了新人之后,前端主要就交给新人来做了。
我们的新系统在存储方面使用了redis这个缓存系统。刚开始的时候,没什么问题,后来随着数据量的增加,测试报bug说,数据查询速度太慢。因为展示一个页面经常要查询很多个表,每查询一个表就要进行一次网络通信,这就是查询速度慢的主要原因。
于是我又学习了lua这个脚本语言。因为redis服务器默认是支持lua脚本的,redis服务器能解析lua脚本,然后根据脚本里面的逻辑进行查询。所以我的解决办法就是把耗时的查询都都放到lua脚本里面,每次查询的时候只要把lua脚本传到redis服务器,然后redis服务器按照lua脚本里面的逻辑查询完毕后,再把最终的结果返回。也就是说每次查询,只需要进行一次网络通信,从而大大加快了查询速度。
去年的时候,新系统告一段落。所以领导就又分给了我另外一个项目,就是公司目前使用的部署工具。因为部署工具是用java写的,为了看懂里面的代码,所以我就自己找资料学习了java语言。但是到目前为止,我还没有用java写过任何东西。因为这个项目没有什么新功能,只是有些Bug需要修改,所以后来这个项目就给一个新人去维护了。
虽然学习了那么多语言,但目前用得比较多的还是c和erlang。用什么语言是根据目前手头上的工作来决定的。目前我手头上的主要工作是新系统的后台维护和老终端兼容模块的开发。新系统的后台是erlang写的,老终端兼容模块是用c写的。其他的一些语言,因为相关的工作比较少,所以用得就比较少了。
学习学习,学是学习知识,而习是习练技能。也就是说学完之后还要反复练习,才能将知识转化为实际工作中的技能。不管是语言还是技术,我认为需要的时候再学习比较好,因为如果学了不用,过一段时间就忘记了。以后要用的时候还得重新学习。浪费时间。有需要的时候,再学习,学了立刻就会用,在用的时候,会加深和强化刚刚学习的知识。所谓学以致用,用学相长就是这个道理。