知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

编程学习需要天分吗?

发表时间:2022-03-25来源:网络

编程学习不需要天赋。

但是确是存在有编程天赋的同学。

这是前两天在知乎上找到猪学长的高中刚刚毕业的准大一同学:

猪学长当时写到:

高中刚毕业,就只在知乎搜了几个程序员大v的优质入门路线,就靠自学就熟悉了c++基础语法,STL已经入门了。开始摆弄起pat了……
我隔着万里之外的手机屏幕都能感觉到这是一个学计算机的好苗子。有的时候兴趣与热爱才是一切的根本。
真的,可能确实有的人就是适合学程序吧。

回想曾经,猪学长曾经有机会担任过某高中的信息学奥林匹克竞赛的教练员,亲手带领40多个无任何编程基础的高中生入门编程,冲刺NOIP提高组。

这40多个孩子里,有当时他们高中文化课全校成绩排名第一的学霸;有一个从小家里条件就非常好,高中自己就有两台个人电脑会了好几门编程语言自称是“小黑客”的同学......;有初中部初三提前来了解NOIP的小女生.....

刚接手这40多个高中生,上面这三个同学是我印象最深刻,尤其那个校榜第一的同学和接触编程很久的小黑客同学,是猪学长最寄予厚望可以冲刺NOIP省一等奖的同学。

所有接触过编程的同学都知道,对于新手入门编程尤其刚刚接触c语言编程的时候,

猪学长觉得第一个难点就在“函数递归”的理解上。

第二个难点就是在c语言“指针”的理解上。

很多同学在递归之前都可以理解的很好,结果一接触“递归”,第一次接触“汉诺塔”问题,就彻底的理解不了了。

如果递归理解不了,那后面的什么DFS,树的遍历根本就都无从谈起。

如果指针学不明白,看链表自然就是一脸懵逼。

我原以为我非常看好的校榜第一的学霸同学和那个会很多编程语言的小黑客同学,会在编程的学习中展现出超过其他普通学生的理解力。

可事实的真相是,那个校榜第一的学生在遇到递归问题的理解上,并没有展现出猪学长所期待的过人的快速的理解力。

那个咋咋呼呼的“小黑客”同学的表现更是让我大跌眼镜,面对递归的题目一样束手无策,低头研究好久也没有给出完美的题解。

结果是在这个班级中,额外涌现出了其他几个文化课背景,数学成绩都比较普通的同学,他们在初次接触编程的时候,就展现出了过人的理解能力。

尤其那个当时只有15岁的初中女生,可能连高中数学都没有学过,但是在编程能力上展现出了远超出大于她2-3岁的高中学长学姐们的能力。

最后猪学长亲手带的这届NOIP的小同学们,40多人有3人拿到了当年的NOIP提高组复赛省级一等奖,十几个人拿到了NOIP省二。

拿到NOIP省一的三名同学,均是文化课背景比较普通的同学,他们却在后面编程、算法数据结构的学习训练中,展现出过人的编程能力——数据结构理解力超强、解题编程构思飞快、编码准确率高、排查定位bug迅速。

猪学长给予希望的那个校榜排名第一的同学,最后指针部分学完,就觉得自己不太适合编程,加上担心耽误高中课程就放弃了。

那个第一天跟我说自己会“好几门”编程语言的小黑客同学,在后面算法与数据结构的学习中也没展现出过人的能力。并且这个孩子非常的骄傲自大,马马虎虎,很多自己会的简单题目也经常爆零,难的题目也做不出来。最后他只拿到了省三等奖。

那个初三的女生真的超级适合编程,她以初中生的身份参加NOIP提高组的复赛,最后成绩在二等奖中排名靠前,差一点儿点儿就拿到了省一。

通过这段经历,也让我自己意识到了:

编程它是一种独立的能力。

真的有同学天生就具备比较过人的编程天分。

但是猪学长觉得从难度来说,编程甚至目前的计算机工程技术体系的难度,真的比我们大学中的其他基础课程比如大学高等数学,大学物理,电气专业学的电磁场什么的简单太多了。

有很多跨专业考研计算机,或者非科班自学计算机的同学后来都跟猪学长说,原来计算机的专业课操作系统,计算机网络这些原来这么简单,比他们的本专业的专业课程都简单。

计算机课程中,稍微有难度的也就是算法与数据结构了。

回到同学你的问题本身:

我是一个大一计算机系的学生,接触编程半年了,我现在对编程甚至连门也没入,我非常想学好,可是买来的 c primer plus看到链表时,再也看不下去了,买来的算法导论,看的头疼欲裂,硬着头皮读下去也毫无用处。

当猪学长看到你刚入门就买了《c primer plus》大厚书一顿看,然后又在很多知乎“计算机瞎指挥大V”的带领下买了《算法导论》,我就知道你离放弃计算机不远了。

你其实不是没有编程天赋,就是编程入门的方式错误了。

猪学长这里再次重申,所有刚入门编程同学看到这个问题的,一定要留意一下猪学长反复科普了很多遍的计算机零基础入门编程路线:

猪学长之前为所有计算机大一大二或者非科班想要转行的小白同学原创编程能力,算法与数据结构的学习路线:

温馨提示:这个路线是写给所有几乎零编程基础的同学打好扎实的编程功底的。如果你有一定基础的编程能力,或者大三、研二马上就要面试了,可以直接跳到剑指offer或者LeetCode部分。

(特此声明:此路线以及我之前的算法相关回答都是我个人原创,其他人如果未得到我个人授权禁止抄袭违规转载我的回答!!!)

重点强调:如果你只是一个普通的计算机专业的同学,并不是算法竞赛爱好者或者ACM选手,你只需要按照上面这个路线来做普通的算法题目就足够符合大厂技术岗位对算法编程能力的要求了。


a、小白入门算法编程先要正确的学习c/c++语言

关于c/c++语言这块简直有太多小白同学来问我了,有无数的大一的同学看了知乎上很多其他已经工作多年的前辈推荐学习c++需要看《c++ primer Plus》,然后刚接触编程就去买了一大厚本厚厚的《c++ primer Plus》,然后买回来根本看不懂。

上面这本书是我任意找的一本c语言教程书籍,小白同学们学习c语言只需要重点学习:

输入与输出

类型、运算符、表达式

控制与循环

函数

指针与数组

结构体

这几个章节就可以啦,其中额外说明一下指针如果觉得难的同学可以不用先搞太懂,算法竞赛刷题用到的指针也只是简单层面上的使用。

然后c++的学习,猪学长之前推荐过这本书:


上面这些书籍猪学长之前一直有整理,如今都免费分享给同学们:

点这里, 计算机优质书籍项目免费推荐分享!

大家不用一定要用一模一样的我推荐的书籍来学习,其实用于算法竞赛刷题,c++这块只需要学习补充很少的知识,额外很多c++的特性其实是用不到的。下面我也详细的告诉大家需要学哪里:

首先大家可以看到,c++书籍中很大一部分的基础知识其实就是c语言的知识,如果同学之前c语言都学习过了,接触上手c++其实是很快的。c++相对于c语言最主要的就是扩充了一系列的面向对象的机制,但是类这些面向对象的机制我们在算法竞赛中其实是用不到的。那c++我们重点需要学习哪些呢?

上面这些书籍猪学长之前一直有整理,如今都免费分享给同学们:

点这里, 计算机优质书籍项目免费推荐分享!

我们只需要重点了解标准容器中这些概念知识就足够啦!

其他尤其关于类的各种抽象、封装、继承等面向对象机制与其他的知识,暂时先简单阅读了解就行,如果不是能够很好的掌握也没关系。

关于算法相关的部分知识,也就是简单的阅读,大致的理解这些都是什么,如何使用就可以了。如果对其中很多概念还是不理解,可以翻翻书其他部分或者Google搜索一些博客补充一些知识。

尤其是同学们千万不要上来就死记硬背c语言c++编程书籍,看过了的语法忘了是很正常的,后面大家做算法题目练习编程的时候,忘记了某些语法是可以随时翻书的

猪学长之前本科打算法竞赛的时候,学习的时候,有收藏使用一个汇总了所有c/c++ STL等关键模板库以及常用语言知识点的电子版手册,可以说是真的非常的好用。

其中最关键的就是有c++ STL 标准模板库的详细整理总结!!!这个对正在刷算法题的同学们,帮助真的是非常的关键。这里直接现在免费分享给同学们!!!


如果你觉得新手看书实在不容易理解,那么猪学长推荐我们浙江大学翁恺教授的免费的c语言入门课程:


B、想要提高算法与编程能力真的不能只看书,一定要动手!动手!动手!

我看知乎上有太多太多的同学提问,啊啊啊编程语言看了记不住改肿么办?啊啊啊算法与数据结构课程好难,看了半天书也不知道讲的是什么?

真的同学们,真的学习计算机编程,只看书不写程序都是耍流氓!

猪学长当初入门编程,完全是从接触了大量的编程题目开始的,以完美的解决编程题目的为导向,然后反过来推动自己进一步看更多的书籍。

解决问题的过程中,不仅可以激发起自己的兴趣,还能一步一步来提高自己的编程算法能力。

我看到有的回答,上来就直接给推荐《算法导论》,LeetCode....

猪学长之所以推荐这个,是因为之前我之前一直活跃过非常多的oj平台,一直觉得PAT (Basic Level) Practice (中文)乙级的题目是最适合编程小白入门的题目合集了。

乙级的题目每个题都是一个有趣的小例子,然后只涉及数组,循环,判断,字符串等基础编程语言语法的知识,不会设计复杂的算法与数据结构。

同时同学们要记住刷题的目的是为了提高自己的编程能力,不是为了数量。

乙级的题目大概做30-50题目,对c/c++的基础语法掌握的非常扎实了。

你就会发现你初步的了解什么是编程,什么是算法。

你还会知道原来编程可以解决这么多的问题呀!

当然在做题目的过程中,如果语法忘记了就可以随时翻书。

有的题目为什么差一个点没有通过,都需要你去排查bug,

这个过程既是对语言语法的熟悉,也是对程序设计能力的高。

遇到不会的问题,可以去网上搜对应的题解参考,

pat题目的题解网上比如csdn之类的是全部都可以找到的。

尤其是当看到其他人写的优秀的题解代码的时候,

真的会由衷的觉得,怎么能写的这么简洁精美!

这个过程中,你的编码能力就在提高。


当然学长之前学习的时候也有找到pat题解的优质pdf文档,

这里直接免费分享给同学们。 提取码是:uat0


c、算法编程进阶,开始接触数据结构与更多算法

猪学长之前看到了一个问题,特别有意思:这个问题我还没来得及去回答。

这个同学的提问很明显暴露出了我国计算机教育的问题,就是按部就班的推进课程,其实学生能力根本没得到训练与提高。

算法与数据结构是猪学长本科时候觉得最有意思的课程,这门课程我们是大二才开,但是我大一的时候自己提前学了好几遍了。印象很深刻这门课我一学期没怎么去上课,最后期末拿了99分的成绩。哈哈,不给我100老师说是怕我骄傲。

那猪学长是怎么把数据结构学的这么好的呢?

还是前面的方法论,要以解决问题为导向,反过来看书!!!

而不是先去啃厚厚的困难的算法书籍,然后看的一头雾水。

当你已经能完全可以胜任pat Basic Level的题目后,

你就可以在学校课程之前,提前去学习了解数据结构的相关内容:

这里推荐: 《啊哈!算法》这本书来入门

这本书真的是用非常幽默易懂的语言,

以及各种有趣具体的例子,来帮助很多同学入门算法与数据结构!!!

这本书跟之前一样,先简单的翻阅,

初步的了解什么是线性结构,链表,栈?

什么是非线性结构,树,二叉树?

什么是图?哇,计算机程序中咋还有图?

通过这些,你就会发现你对算法与数据结构有了初步的了解!

这时候,你会发现你的编程有多了很多技能,这时候你就可以去挑战更高难度的题目了!

叮!Pat Advanced Level 解锁!

你就可以去做PAT advanced 甲级的题目了,

真的pat甲级题目所设计到的数据结构难易程度真的是非常棒的。

没4个题目为一组,

前两题是乙级题目,后两题是甲级数据结构的题目。

会涉及到主流的链表,栈,树,以及基本图论算法的知识,

最关键的是不会出现很多ACM困难级别的算法题目!

真的建议所有有时间的同学,好好的做一下PAT甲级的题目,这个质量真的是高。

题解同样去网上搜索,或者用猪学长整理的也行。

当然学长之前学习的时候也有找到pat题解的优质pdf文档,

点这里直接免费分享给同学们。 提取码是:uat0

当你Pat甲级做了50道左右,比较熟练了的时候。

叮!剑指offer习题集解锁!

这个还有配套书籍:

你看到了题目丝毫不会做,这时候你就去找大佬的题解,发现题解写的完全看不懂,

然后你就想起来了这个题用到了二叉树这种数据结构,

然后自己回头再去翻数据结构教材或者书籍,重新结合这个题目再去学习二叉树的基本知识,

比如二叉树的遍历等等。

等你复习好,这回回来再看大佬的题解,发现明白他的思路了,

然后你自己努力把题目完成通过!!!

当你剑指offer60多题目都弄懂,同时PAT甲级题目做了50题左右,

如果你还说自己不懂算法与数据结构,

你就来打猪学长!!!

这个时候你就已经具有扎实的算法与数据结构基础了,

如果你在大一的时候就看到了猪学长的回答,并且早早的开始行动,

大一一年的时间足够完成上面的所有内容学习,甚至努力的同学一学期就可以。

这时候你就具备了参加一些大学里的程序设计比赛的能力了!

里面详细的把LeetCode热门的高频面试题目按照知识点做了分类整理,同时给出了最优的题解!有需要的同学记得保存起来,日后一定会用到!

而且于此同时,你会发现你的编程能力有了很大的提升,

你遇到新的题目往往会在思路上可能有所困惑,但是一旦有了思路,

你编写程序去实现是非常得心应手的!正常的本科同学做到这一步,

就足够达到校招面试对算法编程能力的要求了!!


d、算法高端进阶,ACM赛场摘金夺银

既然是说编程算法,不得不提到计算机专业最出名,最有含金量的程序设计类竞赛ACM。

这个比赛我认为是国内计算机界含金量最高的比赛之一了。

现在我所在的部门,有四个实习生,3个是ACM区域赛银牌以及以上选手。

如果在大学里同学能有机会在ACM赛场上摘个金拿个银牌回来,

以后再互联网的大厂的面试中是稳稳的加分项。

但是ACM竞赛不是一个个人竞赛,是一个团队赛。

猪学长因为本科学校太弱,没有队伍打ACM比赛,所以一直是我一生的遗憾。

所以如果同学在学校里有机会参加ACM比赛的,一定要尝试一下。

这里我给出一些跟ACM竞赛相关的进阶算法提高书籍推荐:

《刘汝佳 - 算法竞赛入门经典》江湖人称紫书

《刘汝佳 - 算法竞赛训练指南》江湖人称蓝书


《巫神 - 挑战程序设计竞赛》


最后贴出一些猪学长之前了解玩儿的oj平台分享给大家:

力扣

Welcome To PKU JudgeOnline

Welcome to Hangzhou Dianzi University Online Judge

UVA

Online Judge - Home

http://codevs.cn

首页 - 洛谷 | 计算机科学教育新

http://www.lydsy.com/JudgeOnline/

首页 - Vijos

温馨提示:

1、为什么把这块放到最后一部分,是因为ACM算法竞赛所涉及的算法数据结构知识都是属于奥赛级别的,是远远超过互联网技术面试的难度的。举例子来说,如果互联网技术岗位面试是高考的话,学好上面前三点的内容就足够,而ACM等高难度的算法比赛类似于高中的数学奥赛。会涉及到大量的高难度的偏难怪题目。

2、同时参加ACM竞赛能取得非常不错的成绩是非常不容易的,需要结合自己校队的实力以及个人的实力。如果花了很多时间再ACM上最后没有取得银牌及以上成绩,其实是有些不值得的。所以这第四部分的内容学弟学妹们选择性的了解就行。




赠人玫瑰,手有余香

猪学长之前一直都有认真整理很多技术书籍互联网校招面试题目,现如今猪学长也已经毕业啦,都分享出来直接分享给有需要的同学们。

同学们如果觉得有帮助的话,不要白嫖猪学长,给猪学长点一个吧,

这样可以让更多的同学看到!


最后同学如果还有什么计算机相关互联网大厂求职技术方向等等问题,都可以在评论区给猪学长留言,或者关注我猪学长哈,猪学长不向同学们开通付费咨询!

同时对字节跳动感兴趣的同学,想要找猪学长内推的,也可以联系猪学长哈。

真心希望可以帮助到你。
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜