You choose not a major, but a class

 What I chose four years ago was not a major, but a class.
I want to say, yes, your income is not determined by your ability, but by the needs of society, and now is the best era of the Internet.
And I boldly predict that programming ability will be the same as English, and it will be a basic skill for students in the future.
 
Now the first-line Internet companies are recruiting fresh graduates of CS-related majors in 985 colleges and universities. Generally, the package price of cabbage is above 16*16. Think about how many majors it is, and if you are in the top 5%, you will not be able to reach this number even after ten years of work. Therefore, when I chose a major, I almost really chose a class.
 
After talking nonsense, just like the upgrade of online games to fight monsters, I, a veteran who has been rolling and climbing for more than 6 years, will share the programmer leveling route that I think is correct.
 
Goal first
Except for self-employment, programmers who do not aim to enter the first-line Internet companies are all performances without ambition!
Except for the real estate bigwigs in Forbes' top ten, the rest are basically Internet bigwigs. There is no traditional IT bigwig. Based on the central idea of ​​aligning everything with Grandpa Mao, let's go to the Internet.
Generally speaking, the treatment of Internet companies is more than 50% better than that of traditional IT companies, and Internet companies are more geek-off-peak travel, flexible working hours, no punch-in, no endless meetings, relatively simple relationship with colleagues, technological innovation Quick, can fully study the technology.
 
Let's talk about the training route
A few words written in front of-
1. For any technology - official documentation, demos, and official communities are the best tutorials.
2. github, google and stackoverflow are the best teachers.
3. Good things are open source, which is determined by the genes of the Internet.
(For this, I adore my idol, the founder of Linux and git - Linus Torvalds.) Software is like SEX; it's better when it's FREE. Linus Torvalds.
Do you really think that the products of commercial companies that do not have open source are so awesome that they are not open source? To tell you the truth, that's because the source code of their product is so bad that no one uses it if it's open sourced.
 
The real leveling guide
First, give up the win platform as a productivity tool, go to Linux/MacOS, and be familiar with common commands under Linux.
Second, to get started with scripting languages, python or ruby ​​is recommended. They can free you from the fear of programming and develop useful small programs within a week.
Third, learn web basics (HTML5/CSS3/ES6/Angularjs/Vue.js/React.js)
Fourth, learn C language and operating system calls (at this point, the door to the computer world is truly opened to you)
Fifth, learn Java. Java is the most powerful and most used engineering language. The .net platform is worse than shit. Java is clunky though, and the higher you get, the less you like it. But for complex business processing, it is the most mature and has the most solutions. Learn java well, become a senior java engineer, and achieve the average income of bxj without any difficulty.
Sixth, learn the database. mysql, pgsql and mongodb (relational databases have no future, the future is json)
Seventh, learn to learn mainstream frameworks, learn business design and architecture, learn performance tuning, learn sustainable integration, etc., and become architects.
 
In addition, apart from business architecture, senior architects must be business experts and senior business consultants in a certain field.
 
As for why I suggest linux C Java this mainline
Because they are all excellent technologies that have been popular for more than 20 years, have been tested by various mature projects and products and projects, are widely used in a large area, and will continue to be popular. I am a person with technical anxiety. While keeping up with new technologies and new trends, this main line of software development must not be abandoned.
 
The last one is my current technology stack, probably this level can be regarded as a senior architect of the Java stack
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初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。

 

 

 

 

 

 

 

 

 

 

 

 

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326932679&siteId=291194637