从一个初级程序员到高级程序员的经历

你好!我是谦先生,我是茫茫程序猿中的一猿,平凡又执着。

刚入行的时候说实话,啥都不懂,就懂点皮毛的java,各种被虐狗的感觉。又写js又写css又写后台。。。慢慢被虐出来了~开始掌握一些好多前端框架比如jqury、jquery ui、easyui、datagrid、zTree、extjs、boostrap、echart。。。各种各样的(XoX),后端也因为外包的项目各种各样,主流的框架如struts2、hibernate、mybatis、spring都要熟悉使用,但对于struts2与spring mvc,用得最多还是spring mvc

后来,工作久了有了许多代码的积累,发现一个问题,写过的代码复用起来总是需要改很多地方,我开始尝试尽可能的提高代码的通用型以及代码的扩展性。于是就开始搞设计模式,啃书啃开源框架的源码,万事学习模仿起嘛。之后就模仿着开源框架写了核心设计的代码,比如ioc容器、rpc框架、基于观察者的高可用中间件等代码。也仿写基于二进制的linux的权限管理并在项目中成功应用,优化了一般字符串存储的体量问题。

随着时间的飞逝,公司越来越多的业务跟我挂钩了。慢慢的我在项目组中编码的能力也得到了认可,从一个新人变成了一个核心的开发成员,开始接触到软件架构的事情了。开始有同事协助我的工作,开发任务的安排不由得我不写接口文档,以及做项目的架构中很重要的数据库设计,也开始画各种UML来理清项目代码的各种关系。在外包的工作当中,有开发的工作,也有研发的工作,中间件设计与开发是最恶心的,常常会处理许多并发编程的问题,各种并发容器,比如LinkBlockingQueue、DelayQueue等各种队列,还有容量评估、高水位、系统阈值、QPS、RT等一大堆新认知,顿时发现这个世界太大了,这水好深。除了中间件带给我的痛苦,同时还有另一个恶心的就是mysql存储过程的提示,写了几遍再也不想写了。还有700多行有些甚至上千行的的sql的扩展开发,改哪哪疼,多么希望别再往里加需求或改需求了。也因为性能的事情也开始学习orcale优化器策略、索引设计、物化视图的设计跟jvm的知识,那些新老生代、标志压缩、TLAB、串并行收集器让我记起了那个寒冷的冬天。

项目经理开始让我去了解学习hadoop,linux熟练程度决定了我的掌握速度,我开始把下班的生活搬进linux的世界,一个月多都在使用linux shell去干活,迫不得已才能用windows(只能查东西),为了强化linux,开始学习集群的架构知识,今天把一个tomcat集群搭起来,明儿几天计划并实施nginx、Apache的负载均衡,又实施了集群优化,比如读写分离、动静分离等技术。后来想到一个问题,就是当负载服务器宕掉就会出现集群瘫痪的问题,于是就接触到了高可用,也发现了keeplive跟zookeeper这两个好东西。之后做压力测试的时候发现,nginx的峰值是4W左右、Apache就低很多,就开始研究他们的负载均衡。于是了解到他们是出于第七层的负载均衡只能做到请求派发,有一项技术叫LVS——软件实现的第四层负载均衡,跟F5的原理一样以转换IP达到的负载均衡技术,不过它是软件实现。还有基于一致性hash的session缓存层,跟几个常用的nosql研究。

一个月后发现,我的linux已经突飞猛进了,然后我开始去做学习hadoop体系,从第一个版本到第二个版本,他的生态也研究了如hive、hbase、zookeeper、sqoop,还有storm跟spark。开始尝试去从朋友拿到的数据,根据朋友描述的产品线做集群设计与部署,看着自己部署的集群能模拟朋友公司的生产环境运作,我感到很兴奋。之后也为了获得更多的数据去学习python跟nutch,还有solr跟elasticsearch的使用。在自己的公司也有大数据部门,后来成功通过了考核转到了大数据事业部,进入了我的大数据职业生涯。开始我遇到了许多问题,mr、hive的数据倾斜、storm、spark的join问题,还有基于elasticsearch的hive索引优化,以及hbase的二级索引实施的分布式问题。这个过程因为经常写运维脚本也强化了我的python跟linux shell能力,还掌握了scala的多范式编程。

在大数据事业部的日子一天一天的过去,也慢慢适应了与web不一样的业务需求,刚开始的时候就部署下环境,改了许许多多配置文件,还有一些日常的清洗工作、指标统计工作以及一些临时的处于问题排查的业务需求外,一天工作中剩下的时间还是挺多的。听说最近的项目也有不少跟模型有关,开始了解大数据的数据挖掘领域。通过同事朋友的交流还有网上市面的一些资料书籍,慢慢开始熟悉机器学习的各种算法在spark、mahout、还有mapreduce中的应用。比如基于频繁集项、分类、聚类等算法的舆情分析系统,以及过程中词库的设计、同义词、错写词的处理等一些关键问题,其次就是标签系统跟用户画像系统的开发,还有公交路段实时监测预测系统的开发过程。在这个学习的过程当中,如当初一样,往事模仿起,写了好些业务流程的架构开发,也开始在生产中投入自己在数据挖掘中的自身价值,如今已经有很多的数据挖掘开发经验了。。(上海尚学堂大数据培训谦先生原作,请多关注后续更多大数据相关技术文章)

写到这里,从web到大数据所经历的许许多多以后,我又一次看到了一个新的方向,那就是人工智能,也开始投入到人工智能的研究路上。同时也慨叹,作为一个IT技术人,迫切需要一种学无止境的精神才能抵得住技术的快速更替。

谦先生的程序员日志之我的hadoop大数据生涯一的更多相关文章

  1. [转载]Java程序员使用的20几个大数据工具

    最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具. 这是一个系列,主题为: 语言web框架应用服务器SQL数据访问工具SQL数据库大数据构建工具云提供商今天我们就要说说大数据 ...

  2. Java程序员使用的20几个大数据工具

    最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具. 这是一个系列,主题为: 语言 web框架 应用服务器 SQL数据访问工具 SQL数据库 大数据 构建工具 云提供商 今天我 ...

  3. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  4. 程序猿的还有一出路:大数据project师

    非常多年前我非常郁闷地写了一篇博客<程序猿的出路在哪里?>,之所以郁闷.我记得是看了中国男足的比赛,不由自主对照自已苦逼的程序猿生涯,以前对中国软件的感情有如对中国男足,绝望到没有不论什么 ...

  5. 看似简单!解读C#程序员最易犯的7大错误

    编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中, ...

  6. 后端程序员之路 47、Hadoop hdfs

    Hadoop的核心是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如HBase.Hive等,这些都是基于HDFS和MapReduce发 ...

  7. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

  8. 以某课网日志分析为例 进入大数据 Spark SQL 的世界

    第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目中涉及的Hadoop. ...

  9. 【慕课网实战】一、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    课程整套CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 ...

随机推荐

  1. 201521123005 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  2. Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明

    1. 团队课程设计博客链接 课程设计团队博客 2. 个人负责模块或任务说明 (1)制作图形菜单引导界面 (2)定义各获取和输出类函数 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 i ...

  3. 201521123054 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 1.2在自己建立的数据库上执行常见SQL语句 ...

  4. Junit4学习(三)Junit运行流程

    一,验证Junit测试方法的流程 1,在test/com.duo.util右键,新建测试类 2,生成后的代码: package com.duo.util; import static org.juni ...

  5. 【化繁为简】非前端开发者的福音---CSS的预处理语言 Less&Sass

    写在前面:        众所周知CSS 是一门非程序式语言,没有变量.函数.SCOPE(作用域),在前期的界面样式设计时,需要书写大量看似没有逻辑的代码,不方便维护及扩展,也不利于重复调用,尤其对于 ...

  6. C#设计模式之二简单工厂模式(过渡模式)

    一.引言 之所以写这个系列,是了为了自己更好的理解设计模式,也为新手提供一些帮助,我都是用最简单的.最生活化的实例来说明.在上一篇文章中讲解了单例模式,今天就给大家讲一个比较简单的模式--简单工厂模式 ...

  7. delphi xe 3的EhLib 9.0 Build 9.0.033 Full Source安装

    1.打开项目文件 2.全选 3.编译和buil 4.添加路径

  8. request.getParameter()获取URL中文参数乱码的解决办法

    这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...

  9. python基础之字典、赋值补充

    字典常用操作: 存/取info_dic={'name':'egon','age':18,'sex':'male'} print(info_dic['name11111111']) print(info ...

  10. 鸟哥Linux学习笔记05

    1,          文件系统通常会将 权限与属性放置到inode中,至于实际数据则放置到data block块中.另外还有一个超级块(superblock)会记录整个文件系统的整体内容,包括ino ...