非专业学生如何系统的学习计算机编程?_不学计算机原理可以写程序吗-程序员宅基地

技术标签: Java  算法  计算机基础  

大家好,我是程序员吴师兄,一个坚持在 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,通过动画的形式讲解算法,已经帮助成千上万的程序员入门算法了,欢迎关注公众号「五分钟学算法」,和我们一起学习算法。
点击了解程序员吴师兄
转载说明:未获得授权,禁止转载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kexuanxiu1163/article/details/117954793

智能推荐

Linux服务器出现大量的CLOSE_WAIT的问题_linux tomcat close_wait 详情-程序员宅基地

文章浏览阅读5.4k次。Linux服务器出现大量的CLOSE_WAITLinux服务器tcp socket常见的几种状态:ESTABLISHED、TIME_WAIT、CLOSE_WAIT。TCP协议中描述,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。提供网络服务时,需要特别关注两种状态:CLOSE_WAI_linux tomcat close_wait 详情

SystemVerilog学习-03-设计特性与接口_system verilog常用的特性-程序员宅基地

文章浏览阅读763次。设计特性添加接口,将通信和协议检查进一步封装。添加类似c语言的数据类型。添加用户自定义类型,如枚举类型、结构体类型。添加类型转换。添加包(package)从而使得多个设计之间可以共享公共类型和方法。添加方便的赋值操作符和运算操作符,例如++、十=、===。添加priority和uniquecase语句。添加always_comb、always_latch和always_ff等过程语句块。过程语句块SV添加了新的面向硬件的过程语句块,从而使得该语句块可以更清楚地表达设计者的意图。alw_system verilog常用的特性

[email protected]: Permission denied (publickey)_日出东方vs唯我不败博客-程序员宅基地

文章浏览阅读2.8w次,点赞7次,收藏20次。今天在使用命令ssh -T [email protected]测试公钥是否添加成功时,提示:[email protected]: Permission denied (publickey)解决方法方法一:使用默认名字 重新生成密钥对,不指定名字,使用默认名字方法二:使用ssh-agent代理管理git私钥 如果使用的是自己定义的名字 添加本地私钥:ssh-add ~/.ssh/自己定义的名字..._日出东方vs唯我不败博客

No pending exception expected: java.lang.NoClassDefFoundError: Not a primitive type: ‘L‘-程序员宅基地

文章浏览阅读811次。转为Android X 后报错 ,在gradle中引用的是 implementation 'com.jakewharton:butterknife:10.0.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'在使用 10.0 的版本的时候 , 需要添加android { compileOptions { sourceCompatibility..._java.lang.noclassdeffounderror: not a primitive type: 'l

python os system 不需要返回值_python使用os.system()时没有返回正常的结果,返回了256ubuntu16.04系统下python版本2.7.11...-程序员宅基地

文章浏览阅读495次。{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":7,"count":7}]},"card":[{"des":"提供基于开源Elasticsearch及商业版X-Pack插件,致力于数据分析、数据搜索等场景服务。在开源Elasticsearch基础上提供企业级权限管控、安..._os.system()函数如何不返回0

legendre多项式与gauss-legendre积分_lgr积分点-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏9次。写作目的最近在学谱方法解偏微分方程,顺便学一下legendre多项式的一些推导,参考了北京大学蓝以中老师的《高等代数学习指南》,发博客以记之。Legendre多项式定义P0(x)=1Pk(x)=12kk!dk[(x2−1)k]dxk,k={1,2,⋯}(1){P_0}\left( x \right) = 1\newline{P_k}\left( x \right) = \frac{1}{{{2^k}k!}}\frac{{{d^k}\left[ {{{\left( {{x^2} - 1} \right)_lgr积分点

随便推点

java静态绑定&动态绑定详解_java静态绑定概念-程序员宅基地

文章浏览阅读2.2k次。程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定静态绑定: 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定动态绑定: 后期_java静态绑定概念

学习go语言国内最全资料链接_七米 golang-程序员宅基地

文章浏览阅读571次,点赞5次,收藏4次。就最近和各位大佬认识下来,以前觉得学习go语言,可能资料比较少,可是后来才发现,原来资料并不少,甚至可以说通过大家的努力,go社区已经非常包容且完善了接下来会推荐一些资料,以及大佬社区微软go语言中文网Gopher China golang中国LearnKu自建博客:boyacch码农桃花源七月天面向信仰编程less is betterPure White煎鱼mzh鸟窝峰云就她了luozhiyun`s BlogVincent Blanchon地鼠导航go夜读g_七米 golang

linux+tar怎样解压zip文件内容,linux tar压缩解压文件-程序员宅基地

文章浏览阅读1.7w次。时间:2016-08-30作者:admin 阅读:次-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。下面的参数-f 是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。# tar -cf..._tar怎么解压zip文件

一名双非程序媛面试蚂蚁、美团、携程等大厂拿 offer 分享面试过程_双非女后端大厂面经-程序员宅基地

文章浏览阅读184次。今天小编给大家带来一个优秀妹子的后台面试经验总结,希望对正在面试或者以后需要面试的人提供一些参考和帮助。具体如下:本人妹子,985 硕士,211 本科,专业都是软件工程,一直投的是 Java 后台开发,只投过一次网易的测试,技术不是大牛,但是比较努力。实验室没有项目,so 项目经验是 0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。最开始先看的 java 基础,看的马某某的视频,后面就看框架视频,后来也看过某某学院的视频,都是在网上找的免费的。..._双非女后端大厂面经

运行成功:char转换为wchar_t的代码_char 转换成 wchar_t-程序员宅基地

文章浏览阅读593次。  具体代码是:int charTowchar(char* pSrc, wchar_t* pDest){ if (pSrc == NULL || pDest == NULL) { return 0; } setlocale(LC_CTYPE, "zh_CN.utf8"); int w_size = mbstowcs(NULL, pSrc, 0) + 1; //w_size=0说明出错了。可能有非法字符,也可能是locale设置不对。_char 转换成 wchar_t

Spring Security最难的地方就是这个了-程序员宅基地

文章浏览阅读3.6k次,点赞6次,收藏6次。本篇摘自胖哥最新的基于Spring Security 5.6.x的《Spring Security干货》教程。旧版的教程将在2022年1月1日下线,请需要的同学尽快通过本公众号回复“202..._configurer.addobjectpostprocessor

推荐文章

热门文章

相关标签