由于工作职位关系,在公司一直做一些技术储备工作。没有实际的开发任务,只是多看一些新东西,万一有需求可以出解决方案。
回顾2016,从前端开发到移动,从算法到机器学习,自然语言处理等,看过的东西很多很杂。
我一直有个疑问,什么才叫技术好?其实技术好,可能是个伪概念。
一门语言,一个方向,大部分人的水平都差不多,只是熟练度,知识广度的问题。
C#,有人可以用极其简单的Linq写出很复杂的功能,有人要使用大段大段的代码来实现相同的功能。
之间的差距就是,前者熟悉Linq,后者不熟悉(熟练度不够)或者根本不知道Linq(广度不够)。
很多情况下,后者如果不是很差劲,后者其实可以通过培训做到和前者相同的事情。
那么,如果技术可以通过培训就能获得提升,那么,老程序员的护城河在哪里?
一个毕业生,通过不断的学习一门语言,大量的练习,就能写出代码了,老程序员的价值在哪?
1.技术整合和全栈技能
可以很负责任的说,老程序员在某个领域的90%的知识,新人可以很快速的掌握。但是新人无法很快速的将所有知识整合起来,灵活使用。
例如,一个抓取网站数据的程序,其实这里牵涉到HTTP协议,HTML和DOM知识,异步和并发,数据存储等问题。
如果这个程序出了问题,老程序员可以快速判断错误的位置和解决方法,新人可能要耗费很多时间。(有些权限,异步的问题,新人可能根本没有概念)
所以,知识储备要有一定的广度。
2.某个领域的深度
这个在数据库领域特别重要。建数据库,建表,查询,这些都是只要肯百度就可以的。
但是,往往资深DBA,思考的是,索引的类型是否正确,索引的字段是否正确,SQL语句是否优化。集群,主从备份的参数是否妥当等等。
(在做MongoCola的时候,我几乎将所有的MongoDB的用户手册看了一遍。MongoDB要真正精通,其实很难的。)
如果你长期操作MySql,Oracle,能够将这些数据库的精髓都学到,变成专家,也是可喜可贺的事情。
(数据优化,参数设定,故障恢复,都是以时薪计算的)
3.观念的改变
新人和老司机,在很多观念上不同。
对于一个新人来说,总觉得程序能做到100%正确,能够看到画面,是很牛逼的事情。
开发一个手机APP,正确排序一堆数据,很不错啊。
其实,真正难的程序,往往是那些不可能做出最优解的问题。也就是所谓的PN问题。
没有最优解,说明这个问题往往是随着规模增大,算法的复制度高的硬件无法承受了。(今年的天池算法比赛的题目就是这样一道NP问题)
在机器学习和自然语言处理领域,更加如此,这些领域都只能求得正确可能性最高的答案。(滴滴出行的大数据比赛,我也参加了)
在加密解密上,包括Hash算法上,工业标准也并非100%要求正确,有些Hash算法,在时间空间上要求很高的前提下,允许百万分之一的错误率的。
例如,爬虫在考虑哪些网址爬过的算法上,往往把网址通过MD5等算法,转换为数字指纹,这个指纹,其实做不到100%正确的。
其实,真正难的程序,往往是那些没有任何界面的库,比如gensim(NLP),scipy(ML),MeCab(日语分词)这样的东西。
这些库没有办法在朋友面前演示,没有好看的界面,但是,这些库踏踏实实是很多项目的基石。(这里没有贬低很多GUI库的意思,Bootstrape这样的皮肤也很重要)
4.多个解决方案和随机应变
新手处理Excel,可能只会VBA。
老手处理Excel,可以用C#操作,可以用NPOI这样的库。可以调用VBA的宏。
很多时候,解决方案有很多,正确的解决方案,最优的解决方案,需要大量的经验。
我的护城河在哪?涉猎很多领域,深耕某个领域
在信息爆炸的时代,没有什么技术壁垒。Python,Nodejs,React,NLP,只要你想研究,资料满天飞。
如果有时间,各种技术最好都能看一下,知道这个技术的使用场景,优点,缺点。这样就可以了。
大部分技术,看一下用户手册,API函数一调就可以跑了。如果没有需求,没有必要去深入学习。
知识丰富之后,你可以快速的制定一个最优的解决方案,以及多个备选方案。
和别人交流的时候,不会被别人忽悠,不会无法理解对方的想法。
但是,如果你立志于在某个领域变成不可或缺的人。就必须从基础上认认真真学习。
例如,机器学习方向,
100%的人,都会调用Python的Package,
95%的人,知道回归,聚类背后的理论知识,
80%的人,知道拉格朗日和对偶算法。
50%的人知道怎么一步步推导公式。
但是再深入下去,如何调整参数,如何活用LDA模型,这样的大牛很少了。
要知道这些,阅读大量的论文,做大量的研究,跑大量的数据,必须这样做,没有捷径。
只有这样的人,才能获得 养兵千日用兵一时 的待遇。平时积累经验,需要的时候,为公司一锤定音。
当然,大牛,有些关键知识,请自行做好保密工作。有些东西说破就不灵了。世道艰险,自我保护不可少。
当然,以上这些有个前提:学习自己喜欢的东西,注意保养自己的身体。
年初在接触React Native这样的东西的时候,我觉得很前卫。等到我学习机器学习,自然语言处理后,我发现,这些才是最前卫的。
可惜园子里面的机器学习氛围不好,很多文章阅读数不过百。再过几年,将是机器学习的天下,大家应该开始转型了。
机器学习,入门难,学好难,但是真的学好了,高薪高待遇容易。