靠谱,这是我见过最好的编程指南了!赶快收藏吧,错过大学就白上了!-程序员宅基地

技术标签: 程序员  编程  学习编程  程序人生  编程指南  


从大一入学被调剂到计算机专业,到喜欢上这个专业,再到毕业拿到 10 多个 offer,最终进入理想的大厂工作。回想起这些年确确实实踩过的坑,小北不慎感慨。和我一样,他在刚学习编程的时候也想一口气吃个大胖子,但却不尽人意。

我让小北把这些年来学习编程的一些经验梳理了出来,顺带挑选了一些我认为很值得注意的方面,分享给大家。希望初学编程的你,能少走一些弯路。可能文章比较长,但我真心希望你能一字一句地认真读完,至少,我认为如果我刚学编程的那会能看到这篇文章,绝逼是有一些帮助的。

作为一名计算机专业的学生,很多人会认为编程是在课堂上学到的,其实不是这样的。科班比非科班的优势可能在于知道该去学什么,知道哪些作业和项目是必须完成的,除此之外,真的是全靠自学。

对于自学编程,我认为首先应该考虑的是如何去避免一些坑,这样可以节约大把的时间。下面我就以问题的形式来分享一些我认为重要的方面。

01、应该选择哪一门编程语言

“我应该学习什么编程语言”,可能是困扰编程新手最多的一个问题。很多人一直在纠结这个问题,于是陷入了一种怪圈,这门语言学一点,那门语言学一点,最终什么也没学会,时间也白白浪费了。

刚上大一的时候,我也很想知道应该选择什么编程语言。网上查了很多资料,但答案都略显片面,无非是“这门编程语言难”,“那门编程语言性能好”,“某某编程语言生态好”。

作为初学者,我认为,没有哪门子编程语言是容易的吧?至于性能好不好,生态好不好,更没有概念。

如果你没有明确的方向,那么很好选择。如果你学历高,想走算法、机器学习方向,Python 就是最好的选择。如果学历一般,想做个 Web 后端开发工程师,Java 就是最好的选择。如果学历还行,想做更底层的工作,C 和 C++ 就是最好的选择。

可能很多人和我一样,上大学之前没怎么接触过计算机行业,各种编程语言也就是知道个名字,根本不知道它们之间有什么差别。那索性不要纠结了,我替你做个选择吧。

如果你是在校大学生,首选的当然是学校给你安排的编程语言,毕竟有个可以学习交流的氛围。如果学校选择的不是 C 或者 C++,那么就在私底下自学,千万不要不学,会在以后的工作中吃大亏的。

C 和 C++ 都很难,看起来似乎不适合入门。但学习编程不是只学习某一门编程语言的事,而是要学习一个庞大的计算机知识体系。C 和 C++ 可以帮助你更容易地理解操作系统、编译原理、计算机网络、计算机组成原理,因为底层的东西基本上都是靠它们实现的。

如果你已经参加工作了,但刚开始学习编程,C 和 C++ 对你来说有些复杂和困难,因为学习它们需要大量的时间,你又无法像在校大学生那样投入大把的时间。我建议你选择一门「就业条件更宽泛」的编程语言,比如说 Java,难度适中,生态又极其丰富,也能快速做出一些小的应用,在最短时间内看到学习的效果。

当然了,学习任何一门编程语言都需要看看与计算机系统相关的书籍,这样才能更深层次地去编程。我强烈推荐你啃一啃这本书——《深入理解计算机系统》。

多啃几遍后,你就能把整个计算机系统给串联起来了,学习编程也就更有底气了。

02、需要学习哪些课程

我已经毕业快十年了,偶尔同学们聚会的时候,总能听见一些同学抱怨说,“大学那会,学校安排的高数、离散数学、线性代数、概率论等等,这些课程对工作压根就没有一点帮助,不学也罢。”

对于某些工作来说,这些课程可能没用,但做算法和机器学习的同学肯定知道,这些课程有用到不行。

之前看过这样一个视频。有个同学问一名老师,“老师,学习古文诗歌有什么用啊?”老师一开始觉得很懵逼,因为他之前没想过这个问题,学习古文和诗歌又不能挣钱,又不能当官。但思索了片刻后答道,在教育学的理念当中,有 3 个因素是很重要的。第一就是想象,它决定了你有没有创造性,比如说李白说“为楼高百尺,手可摘星辰”。第二就是直觉敏不敏感,我们看月亮它可能是个月亮,但宋朝有个混蛋说月亮像寡妇的脸,因为他心情不好。第三就是逻辑严不严谨,有些古文严谨到滴水不漏。

同样的道理,你觉得某些课程没用,可能是因为你没用到而已。大学面向的是“面”的教育,什么课程都讲一点,但又不讲那么深。当你工作或者读研的时候,更多的则是面向“点”的学习,用到的知识更专业,更深入。

如果学校安排了某些课程,你感兴趣的话,就使劲学,如果不感兴趣的话,可以放轻松点,做到不挂科就行了,然后把精力投入到你更感兴趣的方面。没必要很抗拒,这门课没用,打死我都不学,这种态度是不可取的。

大学的时候,学校不知道你以后是搞算法还是搞架构,还是搞服务器开发或者搞硬件,所以学校需要你多学习一些课程,尽量都有个了解。对于学生来说,一方面可以从中选择自己感兴趣的方向,一方面对未来的就业方向有所启发。

我给大家一些建议吧。

如果你是在校大学生,可以在学习一段时间理论知识后,做个小项目,将做项目遇到的问题记录下来,针对性地学习相关知识,然后再实践,让知识成网络发射状地变大。

如果你已经参加工作,那么就针对工作中遇到的疑难杂症系统性地学习,做个能够解决问题的人,这样你不仅能够成为公司不可或缺的那个人,还可以最有价值的知识学到手。

03、学习编程是否需要指定计划

其实不只是学习编程需要制定计划,其他任何学习和工作都需要制定计划。小北在上大学的时候就开始定期给自己制定计划,这个习惯一直保持到他工作以后,按照他自己的话叫做受益匪浅。

我自己在平常学习的时候,也喜欢先做计划,然后按照计划表去落实。比如我在学习 Java 基础的时候,会先画一个思维导图,然后按照里面的每个节点再深入地去学习。

下图是 2016 年 10 月 30 日的计划,那时候小北已经大四了,并且已经找到了工作、签了满意的 offer。当时已经没有什么课了,按理说可以放松放松了,不过小北还是制定了一些学习计划,并且选择在 11 月去百度实习。

从内容上看,主要是学习英语和计算机专业课,因为大一大二的时候小北确实不明白为什么要学习专业课,到了大三想清楚原因后,就一直在重新学习,因为计算机专业课真的很重要!学好了这些课,能让你在日后的学习工作中轻松不少。

除了大四制定的计划外,大二的时候小北也制定过较为详细的学习计划,见下图,我都有点自愧不如,说实话,太强了。他把需要学习的内容编了号,存入表格,做起来就有条不紊了。当然了,很难完全按照计划去执行,不过制定相应的计划能让你清楚地知道自己应该干什么。

04、编程是否需要做笔记和写博客

反正我一开始的时候,把写博客当成了做笔记的形式。虽然博客写出来是给大家看的,但一开始没什么浏览量,读者就只有自己,很无所谓的心态。不管你写不写博客,我都强烈建议你记笔记,并且记笔记是一个长期的过程。

就编程而言,我们需要善用搜索引擎,因为搜索引擎会给我们提供各式各样的答案。但答案毕竟是别人的,如果只是照搬的话,可能有用,但你记不住,知识就不属于你,之后你遇到同样的问题,还是要再搜索一遍,并且搜索引擎提供的答案不是一成不变的,可能过了一段时间后,你就找不到原来你想要的那个答案了。

但记笔记不一样,笔记是定制化的,按照你自己的风格定制的,你用自己最喜欢的方式,自己既能看得懂,也能记得住。之后再遇到相同的问题时,也可以快速地通过笔记找得到。

另外,我需要特别提醒你的一点就是,笔记是一种不可多得的财富。如果你以后想写博客了,这些笔记就是最宝贵的素材,可以直接拿来用的。

小北已经记录了四年多了,总共积累了 1G 多的内容,已经形成了他自己的知识体系,给大家展示其中的一部分看一看。

05、需要刷题吗

不管你是刷 LeetCode,还是 OJ(Online Judge),我认识是需要的,但不要“走火入魔”!小北在上大学的时候,身边就遇到了很多搞计算机竞赛的人,他们之间都相互称对方为“XX 神”,使用某个算法,将程序的运行时间从 1 秒降低到 0.999 秒之类的。

我认为刷题不应该是奔着这个目的去的,而是适应写代码的感觉。在这个过程中你会遇到编译错误,你会慢慢去记住一些语法、关键字,并理解一些概念,还可以自己去使用它,比如实现数据结构。慢慢的你就会变得有经验,知道一些错误产生的原因。

刷题到一定程度后就没必要一直刷下去了,可以到 GitHub 上找一些优质的开源项目来看,然后尝试去增加一些功能或者优化一些代码,这样的话,编程能力就能够大幅度的提升。

刷题除了可以锻炼编程能力,对找工作也是有很大帮助的,因为大厂都喜欢这么干。

一开始,刷 LeetCode 可能会很吃力,怎么办呢?我强烈推荐这份谷歌大佬的 Leetcode 刷题笔记,这位谷歌大佬当年在美国卡内基梅隆大学攻读硕士学位时,为了准备实习秋招,他从夏天开始整理 Leetcode 上的题目,几个月的时间,刷了几百道题目。

凭借着扎实的基础和长期的勤奋,他很快找到了如愿的工作。后来,他想啊,自己刷了那么多题,而且对很多题目的解法都有着自己的理解,为什么不把这些题目归纳总结一下,做成一个便于后来者阅读学习的电子书呢?

于是他就把这份 PDF 开源了出来。我仔细看了一下,每一道题的题解都写得非常清楚。

引用大佬的话来说,就是:

本书分为算法和数据结构两大部分,又细分了十五个章节,详细讲解了刷 LeetCode 时常用的技巧。我把题目精简到了 101 道,一是呼应了本书的标题,二是不想让读者阅读和练习时间过长。

从我的直观感受来说,这是一本用心的数据结构算法类书籍,全书总共 143 页篇幅,详细讲解算法的内容有十五个章节。每个章节都是一些重要的知识点,伴有基础讲解和例题介绍,当然,也有一些推荐的练习题。

光看书的目录就觉得非常的震撼,相信你和我一样,都有这种强烈的感受。整本书,我仔细看了一遍,并对书中的一些解题思路和代码进行了校验,确实良心了。第 7 章是讲动态规划的,这里摘取了一点内容,你可以看到谷歌大佬对于知识点的讲解是非常透彻且细致的。

从排版上也可以看得出,整本书制作得非常精美。如果你需要这份 Leetcode 刷题笔记的话,我贴一下地址。

链接:https://pan.baidu.com/s/1ojBerkBfgMFpYcj-JfDKlw 提取码:5ttz

还有一份 BAT 大佬的刷题笔记。不管你使用的编程语言是 Java、C++,还是 Go,都可以学习,适合刷题的同学反复学习。认真地揣摩其中的框架思维,你会发现,这是一本非常用心的刷题类书籍。笔记总共 1200 页,分编程技巧、线性表、字符串、栈队列、树、排序、查找、BFS、DFS、贪心、动态规划等。


每个章节都会先讲解框架思维,然后挑选非常典型的十几道 LeetCode 题进行实战讲解:


不仅排版十分精美,内容也异常充实,每一题都是细致的讲解,有时候还会配上图片,就怕你搞不懂,大大的良心啊!


如果你恰好要学习算法、数据结构,或者年后找工作,一定不要错过。贴一下下载地址:

链接:https://pan.baidu.com/s/12RT8pRk6OUNa1PuYkqZliw 提取码:8w3m

如果你想刷 OJ 的话,可以去北京大学、浙江大学、全美计算机奥林匹克竞赛的网站。里面有大量历年的竞赛题目,注册一个 ID,然后用自己熟悉的语言(一般有 Pascal/C/C++/Java)写好源代码提交即可,会实时返回信息告诉你是否正确。

北京大学:http://poj.org
浙江大学:https://zoj.pintia.cn/contests
全美计算机奥林匹克竞赛:http://www.usaco.org/index.php?page=contests

06、看书还是看视频

看视频入门,看书进阶

视频能用较短的时间告诉你你现在所学的技术可以干什么,可能需要先修哪些知识,可以帮助我们搭建一个入门知识体系。

我最近在 B 站上发现了两个不错的视频,推荐给大家看一下。能坚持看完,绝对受益匪浅。

清华大学的操作系统:https://www.bilibili.com/video/BV1js411b7vg
清华大学数据结构与算法:https://www.bilibili.com/video/BV1jt4y117KR

看书的重要性我就不再赘述了,不管到了什么时候,看书仍然是吸收知识最佳的途径。你渴望力量吗?机械工业引进的黑皮书系列,你值得收藏。这些板砖书无论是用来垫显示器还是桌子腿,都是非常好的选择。

《C 程序设计语言》、《算法导论》、《深入理解计算机系统》、《现代操作系统》、《计算机程序的构造和解释》、《编译原理》、《设计模式》、《计算机网络》、《数据库系统概论》等等,这些书啃下来确实比较吃力,可能不太适合初学者,但这些就是计算机方面的经典书籍。

我知道,你肯定也想要获取这些电子书,有!

CodeChina:https://codechina.csdn.net/mirrors/itwanger/JavaBooks

GitHub:https://github.com/itwanger/JavaBooks

码云:https://gitee.com/itwanger/JavaBooks

这一套下去,你就会拥有知识与力量!!! 等待着你的只会是重塑于新生!!!面试的时候更轻松了,写起代码更流利了,腰不酸了腿不痛了,颈椎也不难受了,高薪升职再也不是梦了!!!还等什么,心动不如行动,编程黑皮书,谁读谁知道,读了你不后悔,读了你不吃亏! 成为大拿的机会就在眼前,还等什么,行动起来!!!

最好的编程指南,二哥和你一起补上,冲!


二哥经过重重海选,终于入围了 CSDN 2020 年博客之星投票环节。本来不打算拉票了,但意外发现二哥已经悄悄排名前 30 了,不拉拉票对不起各位投票的小伙伴啊!


链接贴出来:

铁粉来投了,投票的榜单有记录,到时候二哥会一一联系,送上礼品

喊一句吧,按照票数最大,来给二哥投吧!!!!!!!!!!!!!!!

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

智能推荐

解决win10/win8/8.1 64位操作系统MT65xx preloader线刷驱动无法安装_mt65驱动-程序员宅基地

文章浏览阅读1.3w次。转载自 http://www.miui.com/thread-2003672-1-1.html 当手机在刷错包或者误修改删除系统文件后会出现无法开机或者是移动定制(联通合约机)版想刷标准版,这时就会用到线刷,首先就是安装线刷驱动。 在XP和win7上线刷是比较方便的,用那个驱动自动安装版,直接就可以安装好,完成线刷。不过现在也有好多机友换成了win8/8.1系统,再使用这个_mt65驱动

SonarQube简介及客户端集成_sonar的客户端区别-程序员宅基地

文章浏览阅读1k次。SonarQube是一个代码质量管理平台,可以扫描监测代码并给出质量评价及修改建议,通过插件机制支持25+中开发语言,可以很容易与gradle\maven\jenkins等工具进行集成,是非常流行的代码质量管控平台。通CheckStyle、findbugs等工具定位不同,SonarQube定位于平台,有完善的管理机制及强大的管理页面,并通过插件支持checkstyle及findbugs等既有的流..._sonar的客户端区别

元学习系列(六):神经图灵机详细分析_神经图灵机方法改进-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏27次。神经图灵机是LSTM、GRU的改进版本,本质上依然包含一个外部记忆结构、可对记忆进行读写操作,主要针对读写操作进行了改进,或者说提出了一种新的读写操作思路。神经图灵机之所以叫这个名字是因为它通过深度学习模型模拟了图灵机,但是我觉得如果先去介绍图灵机的概念,就会搞得很混乱,所以这里主要从神经图灵机改进了LSTM的哪些方面入手进行讲解,同时,由于模型的结构比较复杂,为了让思路更清晰,这次也会分开几..._神经图灵机方法改进

【机器学习】机器学习模型迭代方法(Python)-程序员宅基地

文章浏览阅读2.8k次。一、模型迭代方法机器学习模型在实际应用的场景,通常要根据新增的数据下进行模型的迭代,常见的模型迭代方法有以下几种:1、全量数据重新训练一个模型,直接合并历史训练数据与新增的数据,模型直接离线学习全量数据,学习得到一个全新的模型。优缺点:这也是实际最为常见的模型迭代方式,通常模型效果也是最好的,但这样模型迭代比较耗时,资源耗费比较多,实时性较差,特别是在大数据场景更为困难;2、模型融合的方法,将旧模..._模型迭代

base64图片打成Zip包上传,以及服务端解压的简单实现_base64可以装换zip吗-程序员宅基地

文章浏览阅读2.3k次。1、前言上传图片一般采用异步上传的方式,但是异步上传带来不好的地方,就如果图片有改变或者删除,图片服务器端就会造成浪费。所以有时候就会和参数同步提交。笔者喜欢base64图片一起上传,但是图片过多时就会出现数据丢失等异常。因为tomcat的post请求默认是2M的长度限制。2、解决办法有两种:① 修改tomcat的servel.xml的配置文件,设置 maxPostSize=..._base64可以装换zip吗

Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字-程序员宅基地

文章浏览阅读1k次,点赞17次,收藏22次。Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字

随便推点

ESXi 快速复制虚拟机脚本_exsi6.7快速克隆centos-程序员宅基地

文章浏览阅读1.3k次。拷贝虚拟机文件时间比较长,因为虚拟机 flat 文件很大,所以要等。脚本完成后,以复制虚拟机文件夹。将以下脚本内容写入文件。_exsi6.7快速克隆centos

好友推荐—基于关系的java和spark代码实现_本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。-程序员宅基地

文章浏览阅读2k次。本文主要实现基于二度好友的推荐。数学公式参考于:http://blog.csdn.net/qq_14950717/article/details/52197565测试数据为自己随手画的关系图把图片整理成文本信息如下:a b c d e f yb c a f gc a b dd c a e h q re f h d af e a b gg h f bh e g i di j m n ..._本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。

南京大学-高级程序设计复习总结_南京大学高级程序设计-程序员宅基地

文章浏览阅读367次。南京大学高级程序设计期末复习总结,c++面向对象编程_南京大学高级程序设计

4.朴素贝叶斯分类器实现-matlab_朴素贝叶斯 matlab训练和测试输出-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏12次。实现朴素贝叶斯分类器,并且根据李航《统计机器学习》第四章提供的数据训练与测试,结果与书中一致分别实现了朴素贝叶斯以及带有laplace平滑的朴素贝叶斯%书中例题实现朴素贝叶斯%特征1的取值集合A1=[1;2;3];%特征2的取值集合A2=[4;5;6];%S M LAValues={A1;A2};%Y的取值集合YValue=[-1;1];%数据集和T=[ 1,4,-1;..._朴素贝叶斯 matlab训练和测试输出

Markdown 文本换行_markdowntext 换行-程序员宅基地

文章浏览阅读1.6k次。Markdown 文本换行_markdowntext 换行

错误:0xC0000022 在运行 Microsoft Windows 非核心版本的计算机上,运行”slui.exe 0x2a 0xC0000022″以显示错误文本_错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行-程序员宅基地

文章浏览阅读6.7w次,点赞2次,收藏37次。win10 2016长期服务版激活错误解决方法:打开“注册表编辑器”;(Windows + R然后输入Regedit)修改SkipRearm的值为1:(在HKEY_LOCAL_MACHINE–》SOFTWARE–》Microsoft–》Windows NT–》CurrentVersion–》SoftwareProtectionPlatform里面,将SkipRearm的值修改为1)重..._错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行“slui.ex