非专业学生如何系统的学习计算机编程?

Posted 程序员吴师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非专业学生如何系统的学习计算机编程?相关的知识,希望对你有一定的参考价值。

大家好,我是程序员吴师兄,一个坚持在 CSDN 日更原创的程序员

前几天我的一篇文章为什么有人劝别选计算机专业? 上了 CSDN 热榜第一的文章,在此感谢大家的喜爱和 CSDN 的支持,没有看过的同学可以点击蓝色链接前往阅读。

发完这篇文章后,有不少的同学私信我,问的最多的一个问题就是:非专业学生如何系统的学习计算机编程?

这个问题我在知乎找到一个描述,所以根据这个描述来回答。

去年刚毕业,专业是新闻传媒,实习是在一家杂志社做小助理。。。其实小时候就一直对编程非常热爱,一直以来自己有买各种推荐书籍来学,但总觉得自己是架空了在学,也许看懂一些简单程序的代码,也许可以自己写一些小东西(计算器之类的),其实根本不懂这一切是为什么,慢慢就发现,计算机科学的博大精深不是这样的海市蜃楼能够涵盖的,现在也毕业了,如果有机会很想从新来一遍,真正系统的学习这门科学,学习编程,但当前的各种现实情况不允许,所以我想哪怕花个3年5年的,自己自学,感问各位前辈有什么好方法,什么推荐,真正学进去,学出来。

宠粉的吴师兄立马熬夜肝了一篇文章出来,老规则,有帮助记得点赞收藏转发评论哟:)

首先对问题做一下拆解,才能更加全面的分析,问题当中有三个关键词: “非专业”、“系统”、“编程”。

第一,非专业。程序员中除了来自于计算机专业的科班学生,有相当一部分的人是通过培训或者自学的方式入行的,所以非专业也是能学习好计算机编程。

第二,系统。题主想系统的学习计算机编程,估计意思是想系统的学习计算机专业的课程,比如数据结构和算法、操作系统、编译原理、计算机网络,这些内容科班的学生学习了四年,看描述,题主打算花费三五年去学习,所以理论上来说时间是足够的。

第三,编程。编程的概念实际上很广,打开电脑的文本编程器,敲个 Hello World 就已经属于编程了,能独立制作 App 也属于编程,通过题主的描述,没有发现题主有想通过编程去跨行另找工作的打算,姑且推测题主只想学习编程玩玩吧。

分析了这三个关键词之后,结合上题主的描述,我把问题修改了一下,这样才能更准确的回答。

非专业学生如何系统的学习计算机编程,可以独立制作自己的产品。

结合我本人的学习经历,谈谈我的看法。

废话不多说,直接上干货!

一、自学编程

学编程可以自学吗?

**答案是看到的,**对于所有编程学习者,尤其是想自学编程的同学,在学习的初期最好能想明白下面几个问题:

  1. 编程可以自学吗?
  2. 学习编程需要什么基础?
  3. 我应该学习哪种编程语言?

1、编程可以自学吗?

先给出结论,完全可以,但自学编程的弯路多得数不完,坑多得踩不完,这必定是一条充满挫折的道路。

有哪些坑呢?

  1. 好几天都没有成功搭建一个可以正常使用的编程环境,比如 Python、Java
  2. 敲了半天的代码,一运行发现提示几十个错误
  3. 学了很久,感觉会的很多,但不知道自己的实际水平怎么样

正如我们学习英语需要一个交流环境,编程的学习同样需要,特别是自学编程,以下几个网站尤其重要。

  1. GitHub
  2. Stack Overflow
  3. 菜鸟教程

以上三个网站,可以帮助你解决自学过程中 90% 的难题。

2、学习编程需要什么基础

学习编程不需要什么基础,不需要你的数学、英语有多好,也不需要你精通计算机网络、编译原理等。

这个结论是有现实依据的,很多培训班根本就不会培训这些内容,照样量产出一些基础虽然不牢固但却可以工作的程序员。(这里并不是为了说明培训班这种方式是正确的方式)

甚至我希望自学编程的初学者能一开始蔑视编程。

在战略上藐视编程的目的是为了在心理层面上克服恐惧,有这个心态可以学起来事半功倍。

我亲身经历过这样的改变。

作为一个转行程序员,在转行学习编程的那段日子,没有人告诉我说要去学数据结构,也没有人告诉我说要去刷 LeetCode,都是靠自己一个人摸索,绝大部分的时间都花在具体项目上,误认为自己和那些已经工作的程序员的区别在于有没有做过项目。

这就是科班出身和非科班出身的学生最大的区别,科班出身的学生知道去学什么,知道大学期间安排的每一门课程是干什么的,知道要先去做哪些小项目来循序渐进的编码练习,知道知识点在工作中能起到什么样的具体作用,非科班出身的程序员感觉计算机相关的知识点简直是一团乱麻。

这种情况导致我去找工作参加面试的时候,很多基础面都通过不了,最后侥幸进入一家要求不太高的创业公司,薪资不高,为了进大厂必须完善算法和计算机的知识。

因为未知,所以恐惧,恐惧导致盲目的崇拜,我认为那些科班出身的程序员太牛逼了,居然可以掌握那么多繁杂的计算机知识;那些写源码分析的程序员都是大神;那些写算法题解的程序员都是高手。

恐惧把小的问题放大,比如学到单调栈、双向链表、记忆化的内容,一看到题目要用到这些概念便觉得代码很难写,索性那些内容就不看,所以学了大半年还在原地踏步,还在原来的公司拿着微薄的工资做着 CURD。

几个月后,创业公司不行了,受迫于重新找工作的压力,只好咬着牙再去啃,再去刷题。

而当我开始写题解、做动画的时候,我就发现算法题也就那样,缺的只是时间去不断的重复练习。

单调栈无非就是在栈的概念基础上增加了排序,记忆化也就是增加一个数组用于存储,动态规划在面试和实际工作中用到的只需要掌握百分之五就行。

抱着编程技术也就那样的心态,学习了爬虫以及 Vue。

img

img

“自大”的认为爬虫能有多难,基本步骤无非以下几步:

  • 1、找到需要爬取内容的网页URL
  • 2、打开该网页的检查页面
  • 3、在 html 代码中找到你要提取的数据
  • 4、写 Python 代码进行网页请求、解析
  • 5、存储数据

下载安装 Pycharm,安装 Scrapy,根据步骤输入 URL 和数据格式,在完全不懂分布式、ip代理、js加密、模拟登陆、MongoDB的前提下,顺利拿到了自己想要的数据。

无论是分布式还是ip代理,爬虫的每个知识点深挖下去都大有文章,我所学习到的爬虫知识只是冰山一角,但这并不妨碍我们可以从战略上去蔑视编程,编程的很多内容没有那么高不可攀,缺的只是时间去学习,时间恰恰是我们可以去支配的。

关于计算机基础的内容,我整理了 4 本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~

点击下载图解操作系统、网络、计算机组成 PDF

3、我应该学习哪种编程语言?

可以通过下面这张图做个小测试,看看自己更适合哪种编程语言。

图片来源: Should You Learn Python, C, or Ruby to Be a Top Coder? (Infographic)-MediumWhich Programming Language Should I Learn First? 翻译:麻瓜编程

img

下面的图对比了最流行的9种编程语言,来帮初学者选择最适合自己的。

img

img

img

img

img

img

img

img

img

目前国内的大环境下 Java 的就业岗位相对是最多的,如果你没有特别的偏向于其它的编程语言,那么自学编程的第一门语言选择 Java 是一个不错的选择,关于如何学习 Java,可以点击下方链接阅读。

最新整理的 Java 开发学习路线!

如果你是一个 Java 面试官,你会问哪些问题?

二、系统的学习计算机编程

img

题主想系统的学习计算机编程,在时间充足的情况下,最好的学习方式就是跟着科班的课程内容走。

img

很多计算机专业一开始都是先教 Java、Python、C 等等高级语言,然后在大二才开设数据结构和计算机组成原理等课程,因为在用这些高级语言做出 Demo、小项目的过程中,肯定会遇到各种问题,而这些问题的答案就藏在那些专业课里面。

一方面做出小东西能有成就感更加容易坚持下去学习,另外一方面带着问题去找答案效率更高映像更深刻。

否则一开始让你去学编译原理,估计一年过去了都不知道编程有啥乐趣。

科班的内容就是以下这些,计算机组成原理操作系统计算机网络、数据结构与算法,编译原理。

怎么学习,请阅读这篇文章:

我是一个几乎没有计算机知识的人,怎样入门计算机?


觉得不错的话,记得点个赞哟,祝无论是自学编程还是计算机科班的学生,都能打好计算机基础,成为一名优秀的程序员。

也可以关注下我程序员吴师兄,一个致力于把每道算法题都用动画的形式讲清楚的七年老程序员,持续分享计算机相关内容的干货,希望能帮助每一个人在编程这条路上走的更舒坦。

关于计算机基础的内容,我整理了 4 本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~

点击下载图解操作系统、网络、计算机组成 PDF

作者简介

作者:大家好,我是程序员吴师兄,在 GitHub 上开源了一个项目 LeetCodeAnimation,目前有 60k star,通过动画的形式讲解算法,已经帮助成千上万的程序员入门算法了,欢迎关注公众号「五分钟学算法」,和我们一起学习算法。
点击了解程序员吴师兄
转载说明:未获得授权,禁止转载

以上是关于非专业学生如何系统的学习计算机编程?的主要内容,如果未能解决你的问题,请参考以下文章

非专业学生如何系统的学习计算机编程?

非计算机专业的学生,从事编程工作的上升壁垒是什么?

非计算机专业的学生,从事编程工作的上升壁垒是什么?

非计算机专业的学生,从事编程工作的上升壁垒是什么?

非计算机专业的学生,从事编程工作的上升壁垒是什么?

编程路之始