研发十年-成长之路

序言:

还记得十年前,口袋里揣着1000块钱与同学一起坐着硬座绿皮火车,用了20多个小时从青岛来到上海,8个人合租着潮湿透风的房间,每天吃着街边苍蝇小馆中的蛋炒饭,拿着一个月不到2000块钱的实习工资,梦的起点总是辛酸并快乐着。

        十年后的今天,我又要离开这个充满挑战和机遇的城市,去另一个梦的起点。我用生命中最有活力的十年换来了车房妻孩,我不认为自己是成功的,因为以我现在的视野回首这十年如果再让我重新来过,我应该能走的更好。一个只懂Java开发的小伙子,缺少了指路人为我领航,虽然每份工作都做的很努力,同事和领导对我的评价都很高,但是到现在我仍然觉得自己不应该只是这个高度。

        选择比努力更重要!埋头干活只是为企业创造价值,但是自己的价值要靠自己额外的时间去补充和提高,选择的前提是要有足够的视野,要知道自己处在领域的哪个位置,最新的技术进展是怎么样的,给自己一个合理的职业规划,剩下的就是利用业余时间去努力吧。

        

 

产品鸟瞰:

从层次上分,我把它拆分为4层,这种分层结构大家都不会太陌生了。

1最底层为基础层;

2上面运行着HaddopDB、内存、MQ等划分为一层作为组件层(组件可能是运行在容器上的,也可能直接运行在虚拟机上的);

3核心产品这一层就代表着企业软件开发人员基于自己擅长的语言进行开发实现的产品了;

4产品做大做强后就会出现最上面一层,首先为了与其它企业或产品对接要做一些列的安全机制并暴露在公 中,基于现有的数据可以做人工智能方面的文章来提高产品的“逼格”,甚至推出Daas服务。

下面我会一层层的进行更详细的描述,不过顺序会变一下,我会站在软件开发人员的视角,以自己的职业发展曲线来逐层分析。

 

 

开发语言:

掌握一种语言是远远不够的。作为软件开发人员,语言就是生命。或者说语言的生命周期就是程序员的生命周期。我们很幸运,也很迷惑。

 

我们很庆幸,作为 IT 从业者赶上中国的这波互联 高潮,而且我们选择的 Java 语言经过了 10 个大版本依旧屹立不倒,这口饭让我们吃了很久。但是随着各种新语言的兴起,可以预料 Java 语言已经不再具备绝对优势,现在是多足鼎立、百花齐放。作为软件从业人员还是要多为自己准备些退路,多掌握一门语言,多一条腿走路,就会走的更稳。我推荐除 Java 外要掌握 Python C or C++ ),因为有了这三种独立风格的语言基础就可以涵盖 IT 界的所有热门技术的学习。

Java,无需多说,强类型语法的面向对象编程,在客户后端产品自研发领域独一份,从JDK1.4开始崭露头角,JDK5.0 Tiger奠定老大地位,到现在已经是JDK10,经历过这么多年这么多版本的迭代,可谓是后端开发的常青树。但从JDK8开始逐渐向脚本语言倾斜,渐渐抛弃了Java初期的一些原则,可见新技术对Java的冲击很大,Java为了生存不得不做一些妥协。

 

Python,目前版本还不是太稳定,3.X2.X之间的向下兼容做的可以说是惨不忍睹,但是它凭迷人的语法与丰富的扩展包现如今已经让人痴迷,伴随着AI领域近期的兴起,python被推向了一个前所未有的高度,可以说按这种步伐发展下去挤掉Java老大的地位也就是时间问题。当然了,python也存在致命的缺陷GIL,因为GIL的存在使python在处理CPU密集型运算时基本是个废物,这个处理不好在后端开发中很难与Java抗衡。

 

C/C++,这头远古神兽可以算是PythonJava的爷爷辈和太爷爷辈了,而且存活到现在因为其效率上的优势依然在软件开发行业占据不可替代的地位。它可以作为孙子们的虚拟机实现语言,它也有自己很多例如Redis之类的明星产品,其它嵌入式、Linux方向的应用几乎是垄断的,而且过去几年云计算、虚拟化、容器化的发展,又让这远古老怪的地位得到了飞升。

 

多学习一种语言,就相当于多了一门手艺,这门手艺不仅用来写程序,更重要的是用来读程序,有了语言基础才能看得懂新技术的源码,否则永远是个埋头苦干的码农,不知道利用自己的已经有技能去pick up新的能力。

 

如果你实在不想去学习其它语言,就抱死Java一棵大树,那么以下是你必须要掌握的:

Java+Spring Framework+DB+MQ+Redis+Docker,这套组合构成了核心产品。必须要学好Hadoop,按顺序必学的有MapReduceYARNHDFSSparkHadoop生态圈的其它模块根据需要和兴趣自己选学。Spark利用缓存解决了Hadoop性能慢的问题,在数据挖掘和机器学习领域有举足轻重的地位,所以一定要掌握Spark,核心思想是RDD+DAG

 

 

络安全:

络安全的出现是好事情,代表着你的产品已经做大做强,吸引到更大的流量,寻找到更多的合作企业和产品,你只有强到足够亮眼才会被bad guy盯上,要获取更多的数据必先解决安全问题。

Http协议是基础,因为只有弄明白Http协议才能明白这种设计有什么漏洞,也才能明白解决手段是什么原理。

先看几个没有安全机制时http的漏洞:

为了解决上述问题,最有利的武器就是Http+TLS

Https就是为了解决上面4张图片中的漏洞而生的。前提需要掌握对称加密和非对称加密,以及其各自的优缺点。还需要了解散列和加密方式。握手生成密钥的过程是重点。

我写过一篇更详细解释Https的请参考《https://blog.csdn.net/yejingtao703/article/details/78723276

 

解决好安全问题后,产品进一步做大,同一个企业会产生很多子产品,而这些子产品之间需要做统一的用户管理,这就需要引入SSO单点登录了。

 

企业继续做大,要与其它合作伙伴分享服务,就会出现OAuth2.0了。OAuth2.0是平台与平台之间暂时性的获取部分能力的解决方案。

 

无论是SSO还是OAuth2.0都大量使用Token这个概念,因为没有不透风的墙,再严密的安全设计也有被攻克的可能,Token代替账户本身的鉴权在 络中传输,就算Token被破解也是暂时性的,因为Token是有生命周期的,可以将危害降到最低。

 

 

人工智能:

产品并不是核心价值,数据才是核心价值,基于数据的分析才是核心竞争力!

语言:python/C++/matlab/R语言

好的基础层à好的核心产品à更多的数据à更精准更智能à更好的客户体验à更多的数据à良性循环

机器学习与神经 络就是理论派与经验派的对决。

机器学习是根据场景套算法,修改参数进行调优,可以在较少数据时获取很高的实用性;

神经 络是根据经验数据每个 元用最简单的算法来反向优化 络参数,数据越多越精确。

PS:数据越多对机器学习效果的提高也很明显,神经 络更依赖数据。

 

机器学习:

机器学习的步骤:

1收集数据

        砸钱、传感器采集、资料买卖等,搞到原始的数据资料。

2数据处理

        原始的数据不能直接使用,需要转化成数学模型,并对缺省值做基本处理

3训练算法

        根据场景选择合适的机器学习算法,并调整因子做优化,直到达到满意的精准度

4测试算法

        只针对监督学习才有该环节,利用数据集对训练算法的产出做准确率校验

5学习结果产出

        机器学习结果封装成可以直接投入实际应用的产出。

 

机器学习属于低级别的AI,拆分方式很多,我们这里还是按是否可测试验证来将其拆分为监督学习和非监督学习(按目的可以拆分为回归、聚合、概率等)

机器学习的算法都是来自线性代数、微积分、矩阵运算、概率论等高数内容,算法相对比较公开,谁拥有的数据集更多谁的的学习效果就更好。同时不能把机器学习理解为简单的算法问题,还涉及到数据收集、数据预处理、算法测试、学习结果产品级应用等范畴。

 

机器学习的常用算法需要参考具体的博文,有如下算法:

1 k-近邻算法,用于分类,寻找距离目标数据欧氏距离最近的k个样本中权重最大的那个结果为算法结果.

优点:容易理解,精度高,

缺点:空间和时间的复杂度高,计算量大.

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年3月23日
下一篇 2018年3月23日

相关推荐