发表时间:2022-03-25来源:网络
985 非科班,想自学编程成为一名程序员?
建议不要走学院风,尤其是什么:C语言,数据结构,离散数学……之类的,那是会把你逼疯的节奏。当然了,科班还是建议走学院风,时间充沛,可以使劲刚。
非科班必须要见效快,并且还要兼顾本专业的课程,不能挂科,所以学院风走不通。
重申一下我学习计算机的观点吧,我想这会对非科班的同学快速建立起自己的知识体系很有帮助!
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是自底向上的。但是学计算机,这样行不通。
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?
显然这样是行不通的!计算机的学习最好是自顶向下。
什么是顶?我想到的一门高级的编程语言就是——Java!
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习计算机组成原理、操作系统,然后你的一系列问题就会逐渐被解决。
当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。
学 Java 还有另外一个好处,就是就业前景比较乐观。
脉脉上有这样一段话——来自某文豪。

划重点:
有后选后,无后选前
无后无前,算法也甜
条件允许,无脑后端
前途无量,预定高管
这里的后,Java 后端敢称第二,没人敢称第一。
1)就业岗位多,薪资水平够给力,Java 后端开发的需求量每年都很大。截个图给你感受下。

不要误会,只有阿里有 Java 岗,腾讯和字节也有 Java 岗,真的!
2)Java 的生态虽然说不上完美,但毕竟已经发展了 20 多年,有大量成熟的框架可以用,稳定、可靠、易上手。
3)高版本的 Java 引入了很多时髦的新特性,比如说 Lambda、函数式编程、Stream 流等等这些,Java 在与时俱进,没有停下来脚步,Java 17 马上就要来了,应该还会有一些令人眼前一亮的新特性。
4)Java 的学习资料丰富,只有你想不到的,没有你找不到的,无论是 GitHub,还是网上的在线教程,体系非常完整。
我的一个非科班的小老乡,就是非科班的,半年就拿到了携程的实习 offer。

1)完全零基础。
建议先看看GitHub 上这份开源教程《Java 程序员进阶之路》,目前 Java 基础部分已经更新完毕。
《Java 程序员进阶之路》专栏主要针对零基础学 Java 编程的同学,从 Java 核心语法开始,循序渐进,再到 Java 集合框架、Java IO、Java 并发编程、Java 虚拟机,只讲重点。
2)喜欢看视频的同学。
推荐到 B 站上看看尚硅谷或者动力节点的视频课。
或者直接去 B 站上搜“Java”关键字,选择项有很多,挑选适合自己的教学风格的视频就可以了。

3)有一定基础的同学。
直接看这份GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。
截个图你感受下,真的是非常的给力了,其实科班的也建议看一看,检测一下自己功力到底有几何?如果能拿下 80%,那就说明你很牛逼了。
换句话说,如果你对自己的 Java 非常自信,建议花一周时间阅读一下这份教程,保证大有所获。

4)一定要 coding
记住,编程是听不会、看不会的,只能练会。
learn by doing,就是我的经验心得,它会让你急速地成长。让你的代码量从 100 行到 1000 行,再到 10000 行,再到 10 万行,你就不会再有那种“学的时候能学会,做的时候不会做”的感觉了。
当然了,在敲代码的过程中,你要学会思考,为什么人家要这样实现,为什么不能换一种方法?举个很简单的例子,人家用的 ArrayList,你能不能用 LinkedList?人家用的插入排序,你能不能用冒泡排序?
这里讲点怪不好意思讲的话,我上大学那会,确实没怎么学,整天就抱着笔记本电脑打游戏,极品飞车、忍者神龟、NBA 2006、三国群英传等等单机游戏,是我的最爱,因为不需要拼手速,我这个游戏黑洞还可以应付。
以至于参加工作那会,慌的一笔,一开始总怕因为能力不服被劝退了。
刚进公司实习那会,就经历了三次笔试摸底,第三次考完后,领导直接找我谈话了,说我题没作对几道,当时吓得我,晚上一个人躲在被窝里偷偷抹眼泪。
心想这次真完蛋了,万一被辞退,回到学校,简直丢人!
第二天,领导和领导的领导,当着我(战战兢兢)的面,拿着试卷,谈论我的去留问题。说实话,经过一夜的折磨,我已经不抱任何希望了。
看到最后一题,领导的领导说,“老潘(我领导),你看,小王这道题的答案在背面啊,你怎么没注意看?”
“哦,我看看,我以为他没答呢。”领导说。
“嗯,这道题答对了,你回座位上吧,可以留下。”大概 20 秒后,领导说了这句话,并看了我一眼,示意我离开。
卧槽,20 秒的时间,我感觉特别煎熬,仿佛命运的咽喉被摁住了一般。
就这样,我灰溜溜地回到了座位上,心里一万只草泥马在崩腾。那个画面至今印象深刻,终生难为。
后来,我就下了狠心,各种抄代码,先让自己成为一个能完成任务的人再说其他的。这事我之前也给大家提到过,真的是抄了大量的代码,短时间内成长特别快。
我这算是走的极端,就是完全抛开读书学习,当时互联网上的资源还比较匮乏,不像现在有 B 站、有慕课、网易云课堂等等,所以视频教程也没有。
动手练习的好处就是,攒了一大堆的小车轮,工作的时候,直接从自己的代码库里把轮子搬出来改改就可以了,基本上没有遇到过解决不了的问题。即便是有,钻到源码里一看,问题就找到了。
练习一定要循序渐进,一开始不要啃太难的项目。
就从 Hello World 开始,然后是条件分支,循环语句,然后是字符串操作啊,集合框架的使用(涉及到排序、查找等基础算法)啊;可以尝试做个科学计算器,会用到堆这个数据结构。
之后再练习网络编程啊、Socket 通信啊,做个但客户端和服务端的聊天室。
然后是 NIO、BIO、AIO,写个文件操作的工具类啊;把聊天室的内容存到文件里呀;
再找个 Netty 框架方面的项目练手下,如果你没有研究过 Netty,那就算不上是一名合格的 Java 工程师。会了 Netty,就可以实现自己的 HTTP 服务器、FTP 服务器、RPC 服务器等等;很爽的;
接着是并发编程,并发编程是 Java 中的难点,因为它涉及到操作系统、内存、CPU 等计算机专业比较核心的内容,比较考验一个程序员的内功。

练习并发编程最好的方式,就是聊天室升级到多对多的模式。
之后,就可以到 GitHub 上把 vhr、mall 这样的练手项目拉下来练习了,学会如何使用 Spring、SpringMVC、MyBatis、Spring Boot 等开发框架,这期间,会涉及到 Swagger、Logback、MongoDB、ElasticSearch、Websocket 等等,学会了这些,你已经是一个成熟的 CURD Boy 了!
坚持做大量的练习,可以用代码行数来评估,少说的话,一年也得写个 50000 行吧,有毅力的话可以挑战 6 万行、7 万行等。
我说的这个代码行数,千万不要以为是写一万行 Hello World 啊,这样理解的话,那可真的是没救了。
要写有效的代码,这是增强自己本领的,可不是拿来充绩效的。
实践出真知,练习出大牛。
无论什么时候,找到学习的目标,以及学习的套路都非常的重要。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。
三四年前,我特别喜欢收藏文章,觉得有些技术文写得真好,忍不住收藏了!等过了一段时间后,闲得无聊,就去翻收藏夹,想着学一波,谁知道竟然找不到——不是微信给我删了,而是收藏夹里躺的“尸体”实在是太多了,根本就找不到。
后来,我就总结了一个小窍门——每周收藏夹里最多躺五篇文章,如果想进来第六篇,之前的必须得清一篇。别小看这个小窍门,它真的有督促我去学习,去消化。
有句话说得好,学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。
Java 工程师应该掌握的知识点,可以分为 5 个梯度:
第一梯度:操作系统、计算机组成原理、计算机网络、数据结构与算法。这个我之前已经强调很多次了,也列了对应的学习资料。比如说《深入理解计算机系统》这本黑皮书是要必读的,不管什么时候读。
这第一梯度的知识还是挺庞大的,需要花很多时间去消化。科班的比较适合一上来就啃,啃不动的可以放到后面再去补,反正是不要绕过去。
第二梯度:Java 基础、JVM 内存模型和 GC 算法、JVM 性能调优、JDK 工具、设计模式。
Java 基础方面推荐《Java程序员进阶之路》,在 GitHub 上已经更新了 52 集,10 万+字了,值得一个 star。
除了《Java程序员进阶之》,我推荐过另外一个 :
也非常受欢迎。
Java 基础里面有一块内容,就是并发编程,需要花大力气。我之前也推荐过这方面的资料,几个阿里的朋友写的,叫《深入浅出 Java 多线程》。
至于 JVM,一本书搞定,就是周志明老师的那本《深入理解 Java 虚拟机》,不过这书和《深入理解计算机系统》差不多,都挺难吃透的,需要花时间去读,前后持续的时间会比较久。
然后是设计模式,这块需要通过大量的实战经验才能有所感悟,设计模式玩得炉火纯青,写出的代码就更优雅,阅读起来也会更加舒服,可维护性、可扩展性就更强。推荐好朋友小傅哥重写的 Java 设计模式,全网下载次数应该有 3 万多次了。
第三梯度:Spring 系列、MyBatis、Dubbo 等主流框架。
Spring 系列的话,我之前推荐过松哥的视频,在 B 站上有,大家可以去搜一下“江南一点雨”,质量我觉得还是挺不错的。听松哥说,今年还会录一些新的视频。
至于 Spring Boot 和 Spring Cloud,木得说,大家直接搜“纯洁的微笑”,看他的博客就行了。虽然微笑哥现在不怎么写这方面的教程了,但它之前写的就足够用来学习了。
MyBatis 其实很简单,学起来不复杂,就是怎么在 XML 文件里写 SQL 的事,不难,直接看官网就行。
Dubbo 是阿里巴巴公司开源的一个高性能服务框架,使得应用可通过 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。学习 Dubbo 的话,也推荐直接看官方文档。
第四梯度:MySQL、Redis、RabbitMQ/RocketMQ/Kafka、ZooKeeper 等数据库或者中间件。
MySQL 的话,推荐先看《SQL 必知必会》,再看《MySQL 必知必会》,然后是《高性能 MySQL》。
Redis 的话,推荐看老钱的《Redis 深度历险:核心原理与应用实践》,在业界的评价还是蛮高的。
Kafka 和 RabbitMQ 是两款比较主流的消息中间件,具备消息传递的基本功能,但在一些特殊的功能方面存在差异,RocketMQ 在阿里集团内部有大量的应用场景。这部分的学习可以直接看官方文档,然后通过实战项目提升自己对这些消息中间件的应用功底。
Zookeeper 是一个分布式的、开源的程序协调服务,可以到菜鸟教程上学习。
第五梯度:CAP 理论、BASE 理论、Paxos 和 Raft 算法。
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项——CAP 理论。
BASE 理论是对 CAP 理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
Paxos 算法是一种基于消息传递且具有高度容错特性的共识算法。
Raft 算法是一种用于替代 Paxos 的共识算法,安全性更高,并能提供一些额外的特性。
这些都是一些比较难以理解的知识点,需要通过大量的实战经验(海量数据的前提下)才能很好的掌握,属于中级、高级程序员应该掌握的内容。
你在学习编程的时候,一定要形成自己的知识体系,建议你通过思维导图来梳理知识点。比如说并发编程这块的知识点如下图所示。

最后,提几点建议吧。
试着去造个轮子。虽然我们常说,不要重复造轮子,为了开发效率,可以不造轮子,但必须得具备造轮子的能力。多做技术分享。可以是写博客这种面向大众的,也可以是团队的内部分享,新人培训等。重视英语。学好英语可能和掌握编程语言一样重要,如果英语足够好,可以直接阅读一手的英语资料,接收知识的时间可能就比其他人早了不少。及时温习。网上说,人在一天后的记忆量只有 30%,所以我们上学的阶段各种考试,月考,周考,其实就是用来加强记忆的,很多题都是做过的,换汤不换药。加油~ 我是 @沉默王二 ,希望以上的分享能对你成为一名程序员有一些帮助~
上一篇:非科班出身,如何成为程序员?
宜搜小说快读版官方版下载v3.16.7 最新安卓版
26.47MB |资讯阅读
艾可直播app下载v5.1.46 安卓版
141.29MB |影音播放
epermarket这样生活app下载v6.1.9 安卓官方版
28.14MB |生活服务
万位车联官方版下载v3.1.19 安卓版
64.12MB |系统工具
驾驶伴侣官方版下载v12.10 安卓版
360.63MB |系统工具
linecamera小熊相机安卓版免费下载v17.5.3 官方最新版本
152.91MB |拍摄美化
弹唱小吉他软件下载v2.1.3 安卓手机版
30.73MB |社交娱乐
车车助手行车记录仪(carassist)下载v3.4.9 安卓版
23.63MB |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14