带妹入坑,她该怎样提高自己的编程能力?

2020-11-03 10:46:34 浏览数 (1)

老读者都知道了,今年我成功带妹入坑。因为她自己不知道喜欢什么专业,也没有目标和方向,于是作为有经验的前辈,我就给她指了一条“明路”——计算机编程。

这不怪她,因为大多数普通的学生,在高考结束后都挺迷茫的,以前的目标就是攒住劲学习,很单纯;上了大学就不一样,得为以后的生存考量。于是,对于女生来说,教师、护士是她们的常规选项;对于男生来说,铁路、机械、建筑的就是我们的常规选项。

不要问我是怎么知道的。当年我父母就是这样逼我的,于是,我报的专业是机械工程,可惜这个专业没录上,被调剂到了计算机网络,误打误撞地学了 Java。

真的挺佩服那些一开始就目标明确的学生,这样就可以少走很多弯路。比如说,父母都是医生,孩子在很大概率上会报医学方面的专业,这没什么不好的,千万不要信电视上那一套,父母干啥,孩子偏偏不爱干啥。

你想啊,从小有家庭氛围的熏陶,孩子在父母的同专业方面是有很大天分的,这叫特长发挥,加上父母经营的人脉资源,孩子在毕业后找一份养家糊口的工作完全不是问题。

我这代人,在音乐上有幸遇到了周杰伦、王力宏、林俊杰、陶喆。被誉为“R&B 教父”的陶喆,他的母亲是京剧名伶,父亲是台湾著名歌手,那陶喆在音乐上面的成就,其实是和他的家庭密不可分的。

给读者朋友们唠这个,就是希望大家伙不要浪费家庭方面的优势资源。慎重啊,朋友们。

像我,父母都是农民,优势资源是不存在的,除非我的理想是种庄稼。可惜从小我就讨厌干农活,辛苦不说,温饱都是问题。像我这样出身的读者应该还有不少,那从上学到工作,就只能靠自己的努力,一步步摸爬滚打。

我妹就比我幸运多了,我就是她的优势资源,没毛病吧?让我妹学习编程,在我看来,就是最合理的选择。

因为写作的缘故,我认识很多做互联网方面的朋友,关系都处得不错,等我妹毕业了,内推个岗位是没有任何问题的。

就说上学,我之前不是写了篇文章,说送我妹上学的事。我有一个读者就问我,我妹学的啥专业,我还挺好奇为什么,交流完才得知,读者竟然是我妹学校的一名老师。

还有不少读者,和我妹同校,非要替我保护我妹,你说我能拒绝吗?

更重要的是,做为一名负责任的哥哥,我特意为我妹写了一个《教妹学 Java》专栏,你们也看到了,一直在更新着。我妹每篇都有在看,她给我说收获挺大的。

大家伙想啊,这对于一名编程小白来说,多么的重要!

那今天,我就来谈谈,成功带妹入坑后,她该怎样提高自己的编程能力。虽然说“师傅领进门,修行靠个人”,但我还是她哥哥,负的责任更多,应该多领领!

首先,必须对大家坦诚相见。

第一,对我妹学习编程这件事,没有很高的期许,我觉得给她宽松点的成长环境更好,毕业后顺顺利利地做一名“程序媛”挺好的。

第二,希望我妹毕业后能成为一名“开箱即用”的程序员,能上手做一些项目,而不是停留在大学时期的理论知识层面上。

第三,我妹毕业后进不进大厂无所谓。能进大厂的都是非常优秀的程序员,也是极少数的,还有很大一批普通的程序员,需要从中小厂干起。

不管怎么说,大学的课程都是偏理论知识的,这是我们国家教育的一大特色(没有贬义,绝对没有)。企业呢,虽然没有表现出你没有项目经验就不要你的态度,但还是希望你有一些,对吧?

之前的那篇《研三秋招》的文章里也提到了,读者迫切地想要项目经验,就顾此失彼,没有更多时间去钻理论知识、刷面试题,导致笔试落荒而逃。

那在我看来,确实需要一点平衡,就是 60% 的精力还是要放到理论知识的学习上,剩余的 40% 的精力就投入到实战经验上,两者不偏不倚,形成互补比较好。

编程本身难不难,成为顶尖的技术大牛确实很难,不掉点头发,不秃个顶,是“几乎”不可能的;但能在社会上立足,糊口饭吃,还是是不难的,相信我,我就是个不错的例子。

对于我妹来说,想要提高自己的编程能力,单靠学校的教学是不行的,还得靠自学。自学的精髓就在于利用有限的时间,学习到真正有用的东西。那么就需要对学习的知识进行筛选,在筛选知识这方面,我还是有点话语权的。

01、Java 学习路线

如果你恰好是学习 Java 的,那么先看看下面这 3 张图,一套很完整的 Java 学习路线(入门级别)。

按照这个路线图学下来,基本上企业级的开发技能都具备了。切记,入门阶段,不要盲目追求深度,非要钻个源码做到“知其然知其所以然”,那我可以负责任的告诉你,一个技术点很可能都够你研究半个月的。

先学会用,会用之后,再结合理论知识深入研究,会事半功倍。这也是我一直奉行的学习准则,还挺有效的。

02、快速打好 Java 基础

有了这套路线图,是不是瞬间就感觉明朗了起来,学习起来就不会犯迷糊了,知道下一步该做什么,下下一步做什么,就好像打游戏的时候有一张地图踩在脚下。

那接下来,就是把 Java 基础打好,这对以后的学习很有帮助。怎么打好呢?

学习之路是一项很逆人性的差事,并不是每个人都能够坚持下来,尤其是打基础的阶段,过于强求的话可能就会适得其反,没入门先放弃了。我身边这样的例子真的不少,所以你要告诉自己:

1)对 Java 感兴趣,对互联网的高薪感兴趣,对“程序员秃顶”的段子视若无睹,只有这样,你才能真正地坚持下去。

2)富有坚韧不拔的学习能力,别总遇到一点点困难,就自暴自弃。

3)设定一个目标就死磕,如果你经常拿不到最终结果,需要反思是不是从来没有成功做成过一件困难的事情,没成功过所以不知道“坚持”可以大大提高成功的概率。

4)拥有解决问题的勇气,学习的过程中注定会遇到许许多多的坑,要敢于跳进去,然后再爬出来,并且是在不寻求他人帮助的前提下。我见过太多的同学,遇到点屁大的问题就直接扔在群里等大牛解答,殊不知搜索引擎是第一步。

有人喜欢看书,有人喜欢看视频,有人喜欢都看。也没有必要做出非此即彼的选择。

喜欢看书的读者可以按照我下面给出的 GitHub 仓库去下载自己喜欢的电子书。里面的书单很全,你只需要对应一种技术选择一本你喜欢的就可以了,不要贪多。

https://github.com/itwanger/JavaBooks

喜欢看视频的读者,我推荐老九门的零基础学 Java,B 站和与tube 上都有。B 站的地址我贴一下。

https://www.bilibili.com/video/BV1fx411a7zo

主讲人徐嵩的授课风格非常风趣,听起来很过瘾,我最近没事的时候就看一集,回味一下当初学 Java 时没有视频资料的苦涩。

看视频和看书的体验完全不同,在我看来,通过视频学习的好处主要有两点:

  • 视频中讲的东西比较形象,有一种身临其境的感觉。
  • 视频有一种你看不到的魔力,可以提高你学习的自主性。

所以没必要排斥看视频这件事。学习的过程中,不要忘了动手去实践,这里推荐一个开源项目——vhr,或者叫微人事,我的好朋友江南一点雨是作者,所以我一直在大力推荐,是真的不错。

https://github.com/lenve/vhr

打基础的过程中,一定要多敲代码,在敲的过程中肯定会出错。不管你是看书,还是视频,你觉得作者说得好像挺简单的,以为看过一遍后自己也理解了。但往往不是这样的,程序在敲的过程中会发生许许多多意想不到的问题,有时候作者限于篇幅的原因,往往会选择性地跳过一些细枝末节,但这些对于编程的初学者来说,往往很难驾驭。只有经过自己的手敲出来,才能证明真的是会了,懂了。

不是有那句俗话嘛,“当局者迷旁观者清”,如果你站在读的角度,就会很容易自欺欺人;但如果自己亲自实操的话,就完全不一样了,不仅印象深刻,还为以后的复盘做好了备份。在敲的过程中,最好把自己认为经典的案例分门别类,放到 GitHub 上或者码云上,等到以后再用的时候,也好找——书到用处方恨少,代码也是。

出错了没关系,把错误解决掉的过程中你能听到自己成长的声音,就好像雨后春笋一样。没有出错的同学要么是天才,要么就是蠢材。

03、哪些后端知识不需要再学了

按照我上面说的方法,顶多半年时间,就可以打好坚实的 Java 基础了。如果你在学习的过程中遇到了问题,也欢迎随时和我交流。切记,要坚持,三天打鱼两天晒网只会打不到鱼还会弄破了网。

张无忌在学太极拳的时候,他爹的师父张三丰就提醒他一定要把之前所学习的武功全部忘掉,忘得越多才能学得越快。

同样的,自学 Java 的时候一定要先知道哪些知识不需要再学了,毕竟技术的更新迭代就好像火箭一样快,如果不懂得断舍离,那学起来就不免太痛苦了。

1)AWT 和 Swing

真不知道为什么,有些书籍还在介绍 AWT 和 Swing,已经 2020 了,谁还会用 AWT 和 Swing 去开发桌面应用呢?就我所知,C 程序员会用 MFC,C# 程序员会用 Winform 和 WPF。甚至还可以用一种更时髦的技术(比如 Electron)把 Web 网页裹一层华丽的外衣,变成可执行文件。

2)Applet

作为网页插件技术,Applet 压根就没流行起来,就连曾经的热门 Flash 也要淘汰了。

3)XML

XML 还没有被淘汰,应用的地方还有不少。但是作为一种数据传输格式,它正在被 JSON 替代。

4)JDBC

我个人不建议再学习偏底层的 JDBC 了,尤其是对于时间宝贵的自学程序员来说。与其花这点时间,不如把精力投入到 MyBatis 的学习上。

5)Struts

Struts 是早年一个优秀的 MVC 框架,单从技术的角度来看,还是蛮不错的。但是自从有了 SpringMVC 后,Struts 就被拍死在沙滩上了。

6)Hibernate

在我刚参加工作那会(2010 年的时候),持久层框架用的正是 Hibernate。但时过境迁,Hibernate 太重量级了,学习成本太高,取而代之的是轻量级的 MyBatis(支持定制化 SQL、存储过程以及高级映射)。

7)JSP

说起来惭愧,我现在维护的一个项目,视图层用的依然是 JSP。但如今流行的是前后端分离 微服务,JSP 就显得不合时宜了。

04、高效的学习方法

如果你不是后端程序员,学的是大前端,也需要一份前端学习路线的话,那么我推荐一个我的好朋友——小鹿,他那整理了一份目标很明确的学习路线图,我这里贴了一下下载地址:

链接: https://pan.baidu.com/s/1zgRcqablJurrjQScHle7Bg 密码: f44j

有了学习路线图之后,学习的范围就缩小了,事情就成功了一半,接下来就是学习方法的问题了,我这里分享一些我自己的心得体会。

第一,善用搜索引擎。平常需要找资料,需要解决问题,如果自己一时半会没有方法的话,就去搜。

Google 是第一选择,Bing 是第二选择,微信搜索是第三选择。PC 端的话,Google 和 Bing 就很靠谱,基本上要找的东西,都有好的结果。手机端的话,就用微信搜,答案也很靠谱。

第二,学会提问。如果搜索引擎找不到答案的话,不要直接把问题抛到群里,抛给同事、领导,或者大牛,要先对问题梳理一下。

我想问什么,问题发生的环境是什么,问题的描述是否足够清楚,态度是否端正。

不要唐突,不要冒昧,还要脸皮厚,很难,对吧?这就是提问的艺术啊。

第三,善于总结和归纳。很多同学给我反馈,“怎么总是感觉记不住啊,学完就忘啊,有什么好的办法吗?”

有啊,当然有。学完一个知识点,如果需要动手去实践,那就去敲代码,敲一遍,还是理解,再敲一遍。如果真的感觉自己理解,尝试写篇文章,把自己的学习心得分享出来,看看是否能够教会别人。

如果自己是半瓶水,倒出去只能是半瓶水;只有自己是一瓶水,倒出去才可能多余半瓶水,对吧?

归纳总结的好处就是把零散的知识变成体系,在脑海中构建一副蓝图,日积月累,你就会发现自己也从一条小溪变成了海洋。

顺带推荐一下费曼学习法,灵感源于诺贝尔物理奖获得者理查德·费曼,运用费曼技巧,只需要花 20 分钟就可以深入理解知识点。听起来是不是很神奇?

费曼学习法的四个步骤:

第一步,能把一个孩子教懂。这有点类似我们古代的一名诗人,白居易,他希望自己的诗连老太婆都能看得懂,那就是好诗。

具体怎么做呢?拿出一张白纸,写下要学习的主题,想一下,怎么把它教给一个孩子,你会讲哪些,然后记下来。

同学们可以把白纸换成 iPad 了,有道云笔记了,等等。

第二步,回顾。当我们尝试把知识点讲给小孩子的时候,可能会卡壳,那就需要把这些卡壳的点重新学习,这些点可能就是我们认知的边界——重新学习的地方。

第三步,简化语言。如果发现表述的文字比较复杂,不够清晰,那就尝试把这些内容读出来,直到通顺,直到自然,直到足够简练。

第四,传授。这点虽然是可选项,但真的非常重要。如果确保自己理解了,那就把它教给别人,看你能否把别人教懂,也就是我说的善于总结和归纳。

整个思维导图( 推荐的在线网址有百度脑图、ProcessOn)了,或者博客(建议使用 markdown 格式)了。

第四,多去实践。实践出真知,到底马谡行不行,给他一个街亭守一守,对吧,收不住就是纸上谈兵,没啥鸟用。

GitHub 或者码云上有很多优秀的开源项目,挑一些优质的,down 下来,去研究研究,在原有的代码基础上,尝试做一些优化,或者增加一些功能。

自己动手去做的过程中,你会发现,哇,真的有新大陆呀!

第五,熟练使用开发工具。Intellij IDEA、VSCode 都是非常流行的开发工具,能够帮助我们在学习和工作中变得更加高效,里面有没有快捷键,有没有什么骚操作,对吧?

在使用 Intellij IDEA 编写代码的过程中,一定要注重代码规范。提前就把 SonarLint、阿里巴巴开发规约这些插件安装上,写完代码就 check 一下,按照提示对一些不良的习惯做出修正。

第六,学好英语。这一点真的真的真的非常非常非常重要重要重要,即便是英语功底本身很差,一定不要自暴自弃,对吧?雷军敢一句“are you ok”走天下,你怕什么?

况且,Chrome 浏览器可以安装 Google 翻译插件,Intellij IDEA 可以安装 Translation 翻译插件,只要稍微有点英语的底子,完全不用怵的。

英语水平提高了,可以看官方的文档,可以在 Stack Overflow 上找答案,可以查看 JDK 源码,等等,编程水平就会与日俱增啊。

第七,注意休息。身体健康非常重要,千万不要沦为工作的机器,认为年轻的时候就应该拼命的加班,通过加班提升技术,多挣点钱。这种想法可以有,但要节制,懂吗?

0 人点赞