大家好,我是程序员吴师兄,一个坚持在 CSDN 日更原创的程序员。
前几天我的一篇文章为什么有人劝别选计算机专业? 上了 CSDN 热榜第一的文章,在此感谢大家的喜爱和 CSDN 的支持,没有看过的同学可以点击蓝色链接前往阅读。
发完这篇文章后,有不少的同学私信我,问的最多的一个问题就是:非专业学生如何系统的学习计算机编程?
这个问题我在知乎找到一个描述,所以根据这个描述来回答。
去年刚毕业,专业是新闻传媒,实习是在一家杂志社做小助理。。。其实小时候就一直对编程非常热爱,一直以来自己有买各种推荐书籍来学,但总觉得自己是架空了在学,也许看懂一些简单程序的代码,也许可以自己写一些小东西(计算器之类的),其实根本不懂这一切是为什么,慢慢就发现,计算机科学的博大精深不是这样的海市蜃楼能够涵盖的,现在也毕业了,如果有机会很想从新来一遍,真正系统的学习这门科学,学习编程,但当前的各种现实情况不允许,所以我想哪怕花个3年5年的,自己自学,感问各位前辈有什么好方法,什么推荐,真正学进去,学出来。
宠粉的吴师兄立马熬夜肝了一篇文章出来,老规则,有帮助记得点赞收藏转发评论哟:)
首先对问题做一下拆解,才能更加全面的分析,问题当中有三个关键词: “非专业”、“系统”、“编程”。
第一,非专业。程序员中除了来自于计算机专业的科班学生,有相当一部分的人是通过培训或者自学的方式入行的,所以非专业也是能学习好计算机编程。
第二,系统。题主想系统的学习计算机编程,估计意思是想系统的学习计算机专业的课程,比如数据结构和算法、操作系统、编译原理、计算机网络,这些内容科班的学生学习了四年,看描述,题主打算花费三五年去学习,所以理论上来说时间是足够的。
第三,编程。编程的概念实际上很广,打开电脑的文本编程器,敲个 Hello World 就已经属于编程了,能独立制作 App 也属于编程,通过题主的描述,没有发现题主有想通过编程去跨行另找工作的打算,姑且推测题主只想学习编程玩玩吧。
分析了这三个关键词之后,结合上题主的描述,我把问题修改了一下,这样才能更准确的回答。
非专业学生如何系统的学习计算机编程,可以独立制作自己的产品。
结合我本人的学习经历,谈谈我的看法。
废话不多说,直接上干货!
学编程可以自学吗?
**答案是看到的,**对于所有编程学习者,尤其是想自学编程的同学,在学习的初期最好能想明白下面几个问题:
先给出结论,完全可以,但自学编程的弯路多得数不完,坑多得踩不完,这必定是一条充满挫折的道路。
有哪些坑呢?
正如我们学习英语需要一个交流环境,编程的学习同样需要,特别是自学编程,以下几个网站尤其重要。
以上三个网站,可以帮助你解决自学过程中 90% 的难题。
学习编程不需要什么基础,不需要你的数学、英语有多好,也不需要你精通计算机网络、编译原理等。
这个结论是有现实依据的,很多培训班根本就不会培训这些内容,照样量产出一些基础虽然不牢固但却可以工作的程序员。(这里并不是为了说明培训班这种方式是正确的方式)
甚至我希望自学编程的初学者能一开始蔑视编程。
在战略上藐视编程的目的是为了在心理层面上克服恐惧,有这个心态可以学起来事半功倍。
我亲身经历过这样的改变。
作为一个转行程序员,在转行学习编程的那段日子,没有人告诉我说要去学数据结构,也没有人告诉我说要去刷 LeetCode,都是靠自己一个人摸索,绝大部分的时间都花在具体项目上,误认为自己和那些已经工作的程序员的区别在于有没有做过项目。
这就是科班出身和非科班出身的学生最大的区别,科班出身的学生知道去学什么,知道大学期间安排的每一门课程是干什么的,知道要先去做哪些小项目来循序渐进的编码练习,知道知识点在工作中能起到什么样的具体作用,非科班出身的程序员感觉计算机相关的知识点简直是一团乱麻。
这种情况导致我去找工作参加面试的时候,很多基础面都通过不了,最后侥幸进入一家要求不太高的创业公司,薪资不高,为了进大厂必须完善算法和计算机的知识。
因为未知,所以恐惧,恐惧导致盲目的崇拜,我认为那些科班出身的程序员太牛逼了,居然可以掌握那么多繁杂的计算机知识;那些写源码分析的程序员都是大神;那些写算法题解的程序员都是高手。
恐惧把小的问题放大,比如学到单调栈、双向链表、记忆化的内容,一看到题目要用到这些概念便觉得代码很难写,索性那些内容就不看,所以学了大半年还在原地踏步,还在原来的公司拿着微薄的工资做着 CURD。
几个月后,创业公司不行了,受迫于重新找工作的压力,只好咬着牙再去啃,再去刷题。
而当我开始写题解、做动画的时候,我就发现算法题也就那样,缺的只是时间去不断的重复练习。
单调栈无非就是在栈的概念基础上增加了排序,记忆化也就是增加一个数组用于存储,动态规划在面试和实际工作中用到的只需要掌握百分之五就行。
抱着编程技术也就那样的心态,学习了爬虫以及 Vue。
“自大”的认为爬虫能有多难,基本步骤无非以下几步:
下载安装 Pycharm,安装 Scrapy,根据步骤输入 URL 和数据格式,在完全不懂分布式、ip代理、js加密、模拟登陆、MongoDB的前提下,顺利拿到了自己想要的数据。
无论是分布式还是ip代理,爬虫的每个知识点深挖下去都大有文章,我所学习到的爬虫知识只是冰山一角,但这并不妨碍我们可以从战略上去蔑视编程,编程的很多内容没有那么高不可攀,缺的只是时间去学习,时间恰恰是我们可以去支配的。
关于计算机基础的内容,我整理了 4 本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~
可以通过下面这张图做个小测试,看看自己更适合哪种编程语言。
图片来源: Should You Learn Python, C, or Ruby to Be a Top Coder? (Infographic)-MediumWhich Programming Language Should I Learn First? 翻译:麻瓜编程
下面的图对比了最流行的9种编程语言,来帮初学者选择最适合自己的。
目前国内的大环境下 Java 的就业岗位相对是最多的,如果你没有特别的偏向于其它的编程语言,那么自学编程的第一门语言选择 Java 是一个不错的选择,关于如何学习 Java,可以点击下方链接阅读。
题主想系统的学习计算机编程,在时间充足的情况下,最好的学习方式就是跟着科班的课程内容走。
很多计算机专业一开始都是先教 Java、Python、C 等等高级语言,然后在大二才开设数据结构和计算机组成原理等课程,因为在用这些高级语言做出 Demo、小项目的过程中,肯定会遇到各种问题,而这些问题的答案就藏在那些专业课里面。
一方面做出小东西能有成就感更加容易坚持下去学习,另外一方面带着问题去找答案效率更高映像更深刻。
否则一开始让你去学编译原理,估计一年过去了都不知道编程有啥乐趣。
科班的内容就是以下这些,计算机组成原理、操作系统、计算机网络、数据结构与算法,编译原理。
怎么学习,请阅读这篇文章:
觉得不错的话,记得点个赞哟,祝无论是自学编程还是计算机科班的学生,都能打好计算机基础,成为一名优秀的程序员。
也可以关注下我程序员吴师兄,一个致力于把每道算法题都用动画的形式讲清楚的七年老程序员,持续分享计算机相关内容的干货,希望能帮助每一个人在编程这条路上走的更舒坦。
关于计算机基础的内容,我整理了 4 本手册,全网累积下载100w次,几乎程序员人手一套,包含数据结构与算法、操作系统、计算机组成原理、计算机网络等硬核基础知识,图文+实战案例,平时开发+搞定面试,帮你快速建立对计算机科学的大局观,夯实计算机基本功,瞬间起飞~
作者:大家好,我是程序员吴师兄,在 GitHub 上开源了一个项目 LeetCodeAnimation,目前有 60k star,通过动画的形式讲解算法,已经帮助成千上万的程序员入门算法了,欢迎关注公众号「五分钟学算法」,和我们一起学习算法。
点击了解程序员吴师兄
转载说明:未获得授权,禁止转载
文章浏览阅读5.4k次。Linux服务器出现大量的CLOSE_WAITLinux服务器tcp socket常见的几种状态:ESTABLISHED、TIME_WAIT、CLOSE_WAIT。TCP协议中描述,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。提供网络服务时,需要特别关注两种状态:CLOSE_WAI_linux tomcat close_wait 详情
文章浏览阅读763次。设计特性添加接口,将通信和协议检查进一步封装。添加类似c语言的数据类型。添加用户自定义类型,如枚举类型、结构体类型。添加类型转换。添加包(package)从而使得多个设计之间可以共享公共类型和方法。添加方便的赋值操作符和运算操作符,例如++、十=、===。添加priority和uniquecase语句。添加always_comb、always_latch和always_ff等过程语句块。过程语句块SV添加了新的面向硬件的过程语句块,从而使得该语句块可以更清楚地表达设计者的意图。alw_system verilog常用的特性
文章浏览阅读2.8w次,点赞7次,收藏20次。今天在使用命令ssh -T [email protected]测试公钥是否添加成功时,提示:[email protected]: Permission denied (publickey)解决方法方法一:使用默认名字 重新生成密钥对,不指定名字,使用默认名字方法二:使用ssh-agent代理管理git私钥 如果使用的是自己定义的名字 添加本地私钥:ssh-add ~/.ssh/自己定义的名字..._日出东方vs唯我不败博客
文章浏览阅读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
文章浏览阅读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
文章浏览阅读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积分点
文章浏览阅读2.2k次。程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定静态绑定: 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定动态绑定: 后期_java静态绑定概念
文章浏览阅读571次,点赞5次,收藏4次。就最近和各位大佬认识下来,以前觉得学习go语言,可能资料比较少,可是后来才发现,原来资料并不少,甚至可以说通过大家的努力,go社区已经非常包容且完善了接下来会推荐一些资料,以及大佬社区微软go语言中文网Gopher China golang中国LearnKu自建博客:boyacch码农桃花源七月天面向信仰编程less is betterPure White煎鱼mzh鸟窝峰云就她了luozhiyun`s BlogVincent Blanchon地鼠导航go夜读g_七米 golang
文章浏览阅读1.7w次。时间:2016-08-30作者:admin 阅读:次-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。下面的参数-f 是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。# tar -cf..._tar怎么解压zip文件
文章浏览阅读184次。今天小编给大家带来一个优秀妹子的后台面试经验总结,希望对正在面试或者以后需要面试的人提供一些参考和帮助。具体如下:本人妹子,985 硕士,211 本科,专业都是软件工程,一直投的是 Java 后台开发,只投过一次网易的测试,技术不是大牛,但是比较努力。实验室没有项目,so 项目经验是 0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。最开始先看的 java 基础,看的马某某的视频,后面就看框架视频,后来也看过某某学院的视频,都是在网上找的免费的。..._双非女后端大厂面经
文章浏览阅读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
文章浏览阅读3.6k次,点赞6次,收藏6次。本篇摘自胖哥最新的基于Spring Security 5.6.x的《Spring Security干货》教程。旧版的教程将在2022年1月1日下线,请需要的同学尽快通过本公众号回复“202..._configurer.addobjectpostprocessor