浏览 1679 次
锁定老帖子 主题:你选的不是专业,而是阶级(转载)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2016-12-06
原文链接:http://atongyeye.iteye.com/blog/2342806 我四年前选的不是专业,而是阶级。 我想说,对的,你的收入不取决于你的能力,而取决于社会对你的需求,而现在就是互联网最好的年代。 并且我大胆的预测,编程能力也会和英语一样,以后是学生的基本技能。 现在一线互联网企业,在985高校招聘cs相关专业应届毕业生,一般白菜打包价都在16*16以上。想一想多少专业,混到顶尖前5%,工作十年也还达不到这个数。所以说,当初选了专业,几乎真就是选了阶级。 废话说完,就像网游打怪升级一样,我这个摸打滚爬了6年多的老鸟来分享下自认为正确的程序员练级路线。 先说目标 除去自主创业,不以进一线互联网公司为目标的程序员,都是胸无大志的表现! 福布斯前十基本除了房地产大佬,剩下的基本都是互联网大佬,没有一个传统it的大佬,本着一切向毛爷爷看齐的中心思想,去互联网吧。 总体来说,互联网企业的待遇比传统it企业强50%以上,而且互联网企业更geek范儿——错峰出行,弹性工作时间,不打卡,没有无休止的会议,同事关系相对单纯,技术革新快,能全身心钻研技术。 再说练级路程 写在前面的几句话—— 1,对于任何技术——官方文档,demo,和官方社区都是最好的教程。 2,github,google和stackoverflow是最好的老师。 3,好东西都是开源的,这是互联网的基因决定的。 (对此,我非常崇拜我的偶像,Linux和git的创始人——Linus Torvalds.)Software is like SEX; it’s better when it’s FREE. Linus Torvalds. 真以为那些没有开源的商业公司产品很牛逼才不开源么?实话告诉你,那是因为他们的产品的源代码太烂了,开源了就没人用了. 真正的练级攻略 第一,放弃win平台作为生产力工具,投奔Linux/MacOS,熟悉Linux下的常见命令。 第二,从脚本语言入门,建议python或者ruby。他们可以让你摆脱对编程的恐惧,一周内开发出用的上的小程序。 第三,学习Web基础(HTML5/CSS3/ES6/Angularjs/Vue.js/React.js) 第四,学习C语言与操作系统的调用(到此,计算机世界的大门才算真正向你打开了) 第五,学习Java。Java是最强大,使用人数最多的工程类语言。.net平台和它比,狗屎都不如。虽然Java是笨重的,而且当你的境界越高,你会越不喜欢它。但对于复杂的业务处理,它就是最成熟,解决方案最多的。学好java,成为资深java工程师,达到bxj平均收入没有一点难度。 第六,学习数据库。mysql、pgsql和mongodb(关系型数据库没有未来,未来是json的) 第七,学习学习主流框架、学习业务设计与架构、学习性能调优、学习可持续集成等,成为架构师。 另外,脱离业务不谈架构,资深架构师一定是某个领域的业务专家,资深业务咨询师。 至于为什么我建议 linux C Java 这条主线 因为他们都是已经流行了超过20年,经过了各种成熟项目和产品和项目检验的优秀技术,被大面积广泛使用,并且还将继续流行下去。我是一个有技术忧虑症的人,在跟紧新技术新潮流的同时,这条软件开发的主线一定不能放弃。 上一个我目前的技术栈吧,大概这水平就能算Java栈资深架构师了 Java Spring、SpringMVC、Restful Api、Webservice、JBPM、Activiti、ActiveMQ、RocketMQ、Netty、Dubbo、Jenkins、Jmeter、Solr、ElasticSearch、Hadoop、Spark Web jQuery、Bootstrap、Angularjs、Vue.js、React.js Other Linux、Maven、Tomcat、Nginx、Keepalived、Apach、Memcached、Redis、MongoDB、Mysql、Docker、C、Python、Golang 另外系统安全、https,ssl相关,我也钻研的还算比较深。 关于传统it与互联网,java语言,数据库方面的建议。 2 传统it正在被微信和支付宝蚕食。支付宝缴水电,微信查货物通关,办港澳通行证,办护照,查交通违章等。阿里叮叮做企业级oa等,而且按照这两个巨无霸的趋势,传统it以后的路会越来越窄。 4,5 Java最强大的在于生态,这个.net差的太远太远了。做大数据,别的有像solr和ES这样能拿来就开车的么?有像jenkins一样的能直接用的持续集成工具么?有jmeter这样基于分布式的压力测试工具么? 对于java语言,我还想多说一点,我早说了,纯语言我不喜欢他。 assert(simple > clever); 所以其实我更粉python和golang。 但是java在互联网这块的积累太深了(当然传统it也是最深的) 说完 web 说业务逻辑,业务逻辑可以设计的很美。比如你们这个创作社区,可以解耦和为博客系统,论坛系统,图片(文件)存储系统,评论系统,用户系统等。 各个系统之间使用 restful/webservice/私有协议 /异步队列来进行相互之间的通信。哪一个系统的模块如果成为瓶颈,那么就给这个模块增加相应的机器 /容器。用户多了后图片系统撑不住,负荷大大超出其他系统,那么可以给图片系统增加机器。在这方面, docker 是个很好的容器工具。 一个系统拆分成一个一个足够小足够好的模块后,各模块就变成的单独的服务, a 如果依赖 b ,那么 a 直接调用 b 的服务接口。一个系统里模块多的话,你调用我我调用你,调用关系就会变得很复杂,变成一个网。这时候就需要引入服务治理,需要一个注册中心给各个服务自己注册, java 方面阿里巴巴在这块专门有一个 dubbo 框架,基于 netty 的一个异步非阻塞的 nio 网络框架。 python 方面我还不了解。 再说业务缓存,业务缓存的设计是最能体现出一个程序员理解和提炼需求,掌控业务的能力,基于 aop 的拦截机制,哪些方法该走缓存,什么时候该刷新缓存,分布式缓存下如何做到数据的同步,这些都是细微之处见真功。 再说数据库层面,既然选了 mongodb ,读写分离,索引什么的就不说了,如何做到基于业务的请求,少查询库,返回部分 json 也是调优特别该注意的地方。数据量上来的话,可以考虑数据分片,这方面, hadoop 等都不错。 再说操作系统层面, linux 内核级的调优, http 连接数,最大打开文件数等等,可以优化的地方太多了。 这就是java栈最大的优势,成熟,坑少,组建团队快,招人成本低,而且画好框子,可以大把的用猪队友。 6 oracle最核心的是法务部门(非黑),我呆过的某家公司曾经是oracle的客户,看看他们运维组我真替他们心疼,几台小型机搭的集群基本每天晚上要挂一次,然后那边的oracle技术支持从上飞机到处理完回去下飞机,按小时收费,过几天又要飞过来处理。后来整体迁移mysql了,而且阿里的团队对mysql社区的贡献非常大,基于社区经验,之后那个项目就很平稳了。 我一直认为当初sun有眼光一点,肯定是他收购oracle而不是被oracle收购了。 再说基于json格式的nosql数据库。我12年开始接触mongodb,这方面应该算很资深了,踩过的坑也不少,那时,参加一个业内的技术分享会,我去做演讲,当初我说了一句话,我很反对ormapping,这种映射关系根本不适合业务的发展,想想增加一个字段,要从数据库表结构,持久类,视图层一层一层的改,你们不累么?基于json的nosql就没有这个问题。(当时绝大多数程序员对nosql的认识还停留在单表查询比关系型数据库快多了) 当时我问他们,你们会在设计数据库表结构的时候,多预留一些字段来应对以后的业务发展么?他们绝大多数都是说是这样做的。而基于没有表结构的json,这些,都不是事。 果不其然,没过多久,主流关系型数据库都开始支持json存储了。(所以说关系型数据库的范式理论,现在看来就是天大的一个笑话) 9 最好的ide不是vs,是jetbrains全家桶。(不开玩笑) 工作篇 先说找工作。 1,我一直认为第一份工作基本就可以决定你的上限。(去了一个不怎么样的公司,前2年你会和你的同学的差距拉的非常大。而且非常影响你之后的跳槽,好公司看学历也看工作背景啊) 2,和你谈钱的是好公司,和你画饼,谈理想,谈公司未来发展的不要去。(不要和钱过不去,拿到手的钱才是钱) 3,期权是狗屎。(互联网行业流动大,这只不过是公司画的一个大饼想要留住你,而且等你能行权,不知道猴年马月了) 4,一切待遇以白纸黑字的合同为准,hr、老总口头答应的都要求写进合同。 再说工作中的发展。 我一直认为程序员应该是三头六臂的。 自己理解和提炼需求,自己设计,自己编码,自己测试,自己运维。 很喜欢一句话 —— eat your own dog food! 优秀的程序员都是要吃自己的狗粮的。只有了解了测试的难度,程序员才明白怎么写出可测试的软件,怎么去做测试的自动化和测试系统;只有自己真正去运维自己的系统,程序员才知道怎么在程序里写日志,做监控,做统计。 而如果你一直是一个自己不能驾驭业务,提炼需求,并且高效的实现它的程序员,你可能只能一辈子只能按照产品经理的意见做一个底层的功能型程序员(站个桩:产品经理都该烧死!) 再说工作中的细节 1,把功能做的足够小,足够好。不要让一个代码块去干几件事。(Write programs that do one thing and do it well.) 2,让各个足够小的功能一起来工作。(Write programs to work together.) 3,多去设计接口,而不是去实现它(面向对象编程就是一个天大的忽悠,正确的应该是面向接口编程。) 4,多去考虑程序执行的效率,多用缓存。 5,坚持code review。 6,坚持英语为母语。拒绝百度,CSDN等垃圾文化。拥抱github,google和stackoverflow。 7,远离一切所谓的商业培训。(前面说过 官方文档,demo,和官方社区都是最好的教程) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |