`

你选的不是专业,而是阶级

阅读更多
 我四年前选的不是专业,而是阶级。
我想说,对的,你的收入不取决于你的能力,而取决于社会对你的需求,而现在就是互联网最好的年代。
并且我大胆的预测,编程能力也会和英语一样,以后是学生的基本技能。
 
现在一线互联网企业,在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,和官方社区都是最好的教程)
 

有兴趣的朋友可以加入我的互联网架构群:477819525

 

内有大量java初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。

 

 

 

 

 

 

 

 

 

 

 

 

 

10
2
分享到:
评论
8 楼 enpain 2016-12-06  
bxj平均收入。。

所以这是虎扑转来的?
7 楼 fengyunbo 2016-12-06  
暂一个,还不错!
6 楼 ItSight.Mr.F 2016-12-05  
挺赞的,我觉得很好
5 楼 akanairen 2016-12-05  
从外包做到传到IT的六年老菜鸟,看了这篇文,感觉自己好惭愧的 
4 楼 atongyeye 2016-12-05  
莫名的拉风 写道
大四的表示压力很大

没有捷径可以走的
3 楼 莫名的拉风 2016-12-05  
大四的表示压力很大
2 楼 atongyeye 2016-12-05  
qindongliang1922 写道
文章写的还不错,可以转载下么楼主

没写禁止转载,那就是可以随意转载
1 楼 qindongliang1922 2016-12-05  
文章写的还不错,可以转载下么楼主

相关推荐

    东财20秋《领导科学》在线作业三(随机)-0030答卷.docx

    这些素质不是天生就有的,而是可以通过后天的学习和锻炼得到提升。能力与效果之间存在着因果关系,领导者的能力直接影响到其领导效果。 领导学的发展历程中,《战争论》的出现标志着人类对领导活动的认识从经验上升...

    新青2017年事业编招聘考试真题及答案解析考试版.docx

    10. **择偶与阶级意识**:在择偶过程中,社会阶级成为考虑因素之一,劳动人民与地主形成对立,表明个体的选择受到社会阶层结构的影响,这里的“最终答案已经设定”意味着在阶级框架内的选择是有限的。 以上是对新青...

    消费升级下的C2M反向定制电商模式研究.pdf

    在这样的模式下,制造商不再仅仅依赖大规模标准化生产,而是能够为消费者提供更加个性化、差异化的商品,满足其对于高性价比和品质生活的追求。本研究聚焦于中国电商行业的现状,分析了消费升级如何驱动C2M反向定制...

    OFDM、OOK、PPM、QAM 的误码率模拟【绘制不同调制方案的误码率曲线】附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82.png

    8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82

    Android SO逆向-对象的拷贝构造函数.pdf

    Android逆向过程学习

    基于S7-200 PLC的糖果包装控制系统设计与实现

    内容概要:本文详细介绍了基于西门子S7-200 PLC的糖果包装控制系统的设计与实现。首先阐述了PLC在工业自动化领域的优势及其在糖果包装生产线中的重要性。接着深入探讨了系统的硬件连接方式,包括传感器、执行机构与PLC的具体接口配置。随后展示了关键的编程实现部分,如糖果计数、包装执行、送膜控制、称重判断以及热封温度控制等具体梯形图代码片段。此外,还分享了一些实用的经验技巧,如防止信号抖动、PID参数优化、故障诊断方法等。最后总结了该系统的优势,强调其对提高生产效率和产品质量的重要作用。 适合人群:从事工业自动化控制、PLC编程的技术人员,尤其是对小型PLC系统感兴趣的工程师。 使用场景及目标:适用于糖果制造企业,旨在提升包装生产线的自动化程度,确保高效稳定的生产过程,同时降低维护成本并提高产品一致性。 其他说明:文中不仅提供了详细的理论讲解和技术指导,还结合实际案例进行了经验分享,有助于读者更好地理解和掌握相关知识。

    PLC与WinCC实现三部十层电梯协同控制及优化技巧

    内容概要:本文详细介绍了参与西门子杯比赛中关于三部十层电梯系统的博图V15.1程序设计及其WinCC画面展示的内容。文中不仅展示了电梯系统的基本架构,如抢单逻辑、方向决策、状态机管理等核心算法(采用SCL语言编写),还分享了许多实际调试过程中遇到的问题及解决方案,例如未初始化变量导致的异常行为、状态机遗漏空闲状态、WinCC画面动态显示的挑战以及通信配置中的ASCII码解析错误等问题。此外,作者还特别提到一些创意性的设计,如电梯同时到达同一层时楼层显示器变为闪烁爱心的效果,以及节能模式下电梯自动停靠中间楼层的功能。 适合人群:对PLC编程、工业自动化控制、电梯调度算法感兴趣的工程技术人员,尤其是准备参加类似竞赛的学生和技术爱好者。 使用场景及目标:适用于希望深入了解PLC编程实践、掌握电梯群控系统的设计思路和技术要点的人士。通过学习本文可以更好地理解如何利用PLC进行复杂的机电一体化项目的开发,提高解决实际问题的能力。 其他说明:文章风格幽默诙谐,将严肃的技术话题融入轻松的生活化比喻之中,使得原本枯燥的专业知识变得生动有趣。同时,文中提供的经验教训对于从事相关领域的工作者来说非常宝贵,能够帮助他们少走弯路并激发更多创新思维。

    慧荣量产工具合集.zip

    慧荣量产工具合集.zip

    永磁同步电机FOC控制与SVPWM算法仿真模型解析

    内容概要:本文详细介绍了永磁同步电机(PMSM)的FOC(磁场定向控制)和SVPWM(空间矢量脉宽调制)算法的仿真模型。首先解释了FOC的基本原理及其核心的坐标变换(Clark变换和Park变换),并给出了相应的Python代码实现。接下来探讨了SVPWM算法的工作机制,包括扇区判断和占空比计算的方法。此外,文章还讨论了电机的PI双闭环控制结构,即速度环和电流环的设计与实现。文中不仅提供了详细的理论背景,还分享了一些实用的编程技巧和注意事项,帮助读者更好地理解和应用这些算法。 适合人群:电气工程专业学生、从事电机控制系统开发的技术人员以及对永磁同步电机控制感兴趣的科研人员。 使用场景及目标:① 学习和掌握永磁同步电机的FOC控制和SVPWM算法的具体实现;② 提供丰富的代码示例和实践经验,便于快速搭建和调试仿真模型;③ 探讨不同参数设置对电机性能的影响,提高系统的稳定性和效率。 其他说明:文章强调了在实际应用中需要注意的一些细节问题,如坐标变换中的系数选择、SVPWM算法中的扇区判断优化以及PI控制器的参数调整等。同时,鼓励读者通过动手实验来加深对各个模块的理解。

    spring-ai-qianfan-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    Android安全之旅系列博客导读.pdf

    Android逆向过程学习

    【图像处理】基于双目视觉的物体体积测量算法研究附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    3dmax插件按面积分离.ms

    3dmax插件

    spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip

    # 【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip,java,spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-vector-store-qdrant,1.0.0-M7,org.springframework.ai.vectorstore.qdr

    【ARIMA-WOA-LSTM】差分自回归移动平均方法-鲸鱼优化算法-LSTM预测研究附python代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    永磁同步电机控制系统中平方根容积卡尔曼滤波(SRCKF)的应用及优化

    内容概要:本文详细介绍了平方根容积卡尔曼滤波(SRCKF)在永磁同步电机(PMSM)控制系统中的应用及其相对于传统CKF的优势。文章首先指出传统CKF在处理协方差矩阵时存在的数值不稳定性和非正定问题,导致系统性能下降。接着,作者通过引入SRCKF,利用Cholesky分解和QR分解来确保协方差矩阵的正定性,从而提高状态估计的精度和稳定性。文中展示了具体的电机模型和状态方程,并提供了详细的代码实现,包括状态预测、容积点生成以及观测更新等关键步骤。此外,文章还分享了实际调试过程中遇到的问题及解决方案,如选择合适的矩阵分解库和处理电机参数敏感性。最终,通过实验数据对比,证明了SRCKF在突加负载情况下的优越表现。 适合人群:从事永磁同步电机控制研究的技术人员、研究生及以上学历的研究者。 使用场景及目标:适用于需要高精度状态估计的永磁同步电机控制系统的设计与优化,特别是在处理非线性问题和提高数值稳定性方面。 其他说明:文章引用了相关领域的权威文献,如Arasaratnam的TAC论文和Zhong的《PMSM无传感器控制综述》,并强调了实际工程实践中代码调试的重要性。

    tokenizers-0.31.1.jar中文文档.zip

    # 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu

    3.png

    3

    pchook源码纯源码不是dll

    pchook源码纯源码不是dll

Global site tag (gtag.js) - Google Analytics