编程新手如何提高编程能力?

作者:牛妹
链接:https://www.zhihu.com/question/27574436/answer/130250649 
来源:知乎
著作权归作者所有,转载请联系作者获得授权。


本人国内某重点大学渣渣专业大一在读,专业对编程要求较高。大一刚学编程(C/C++),感觉有点吃力,求指点。我们平时练习都是做的OJ(老师负责选一些题让我们做,也可以自己随便刷),一些题还好,可是有些题难度感觉很大,有时好不容易有了思路,转化成代码都要老半天,别人一个小时就搞定的事情,我可能要花三四个小时,而且我本人比较粗心,经常被一些小错误坑了很久。最后就算千辛万苦地做出来,感觉也不值得,毕竟时间消耗太大。还有些题一些思路也没有,但是其他人(也是新手)就能搞定,基本就是别人过10道我过7道的水平。这个时候就会发现智商上的差距真的无法弥补。所有这一切,都让我对自己的前途产生了怀疑,这样下去,我可能只是一个中等水平的苦逼程序员,无法进入顶尖行列。我知道会有人叫我说要努力,可是怎么做?刷题?想看个答案都找不到?问人?哪有那么多人闲着没事干,而且解答正确,使你能够理解?做产品实操?写个两百多行的代码就已经快乱得不行了,不行。看书?终究只是纸上谈兵,没有实际操作的感觉。求救各位大神指点迷津,看看本人是否要转专业?(补充说明,其实我对IT还是比较有兴趣的,特别是人工智能和图形学(游戏开发),也有过很多好的app点子但苦于能力低无法实现。数学自我感觉良好,主要是初高中搞过点数学竞赛,成绩也还可以,所以基础算是比较扎实,但是不想去数学系。)话说回来,我没什么理想和目标,可能还在寻找中吧。总之,请各位提出点建议,关于大学的任何方面都行,学习、生活、理想、交际(谈情说爱的就算了),指点迷津,先谢谢各位了。

题主是专业大一在读,刚刚踏入编程的大门,我就站在所有大学生的角度为迷茫中的大学生说一下吧,(根据题主提到的)分为学习篇,生活篇,理想篇,交际篇,如果有别的要补充的也可以留言,牛妹是根据最近众多offer收割机的实例,总结出的一些经验。

学习肯定是本题中最重要的,也会以最大的篇幅去说,同时说一下题主的一些困惑。

##学习篇(编程新手如何提高编程能力):

不知道题主是什么专业,既然对编程要求比较高,那么无论从专业课学习还是以后找工作的角度来说肯定都至关重要,现在正处于新手阶段,,后面还会有了解阶段,深入阶段,大牛阶段。。。(这个阶段是我自己命名的,所以没有什么官方的意义,就是每个人的理解角度可能不一样而已)下面会逐一说怎样提升。

1.新手阶段
刚进入新手阶段,如何提升?有几点至关重要:兴趣,习惯。

兴趣:兴趣是最好的老师,初入大学校园,一切都还比较懵懂,有可能之前接触过编程,那就很优秀了,大多数人可能只是知道编程,但是并不了解,也并没有入门,这半学期就主要来入门,看一下计算机的世界中,0,1的世界竟能构造出那么神奇的东西。大概了解一下各个语言,看看自己对哪个更感兴趣。

大概了了解了各个语言,那么选择一门语言开始深入学习吧,不管以后从事哪个方向的,至少要熟悉一门以上语言,优秀的两门以上,在后面的找工作中也会有优势。初学建议从c或者Java,python学起,比较好上手,尤其python,还能自己爬虫一些有趣的东西,比较有意思。


习惯:培养一个好的习惯非常重要,会非常有助于提升自己的编程能力,以下习惯适合新手阶段的习惯,当然,也可能适用于后面。

1.写博客:可以按几个维度去写,比如,#每天一写#,今天学习了哪些新的东西,或者做了什么程序,或者思考了哪些,改进了哪些,都可以记下来;#新知识#学习了新知识,可以在博客里写一下;#阶段总结#对每个阶段学习的知识进行总结,光学习不思考是不会有很大进步的。还有值得做的就是#常犯错集锦#,初期的时候很多地方都容易犯错,把错误的地方都记下来,记得下次不要再犯同样的小错误。(可以选择一个自己的博客,也可以在牛客网这种牛友众多的地方来记,各有各的好处,在牛客网上记的话会有好多人跟你一起讨论这些,写自己的博客不容易被更多人看到,或者也可以两个都写,这个都看自己的一个习惯了)

2.常思考:写博客一个是能够养成自己的一个好习惯,但是写了不看,也是白搭,看了不思考,也是没用,所以一段时间要再看一下自己的之前的东西,是不是有的就会有新的理解,看一下之前的代码,是否可以进行了优化;每学到了一份新知识,就尝试做一些小程序,并不断优化,这些都是方法所在。
其实不怕浪费时间,可能你想不出来,但是重要的不是那个结果,正是这个过程,你提高了。

3.多读书:这个阶段还是要读书的,虽然觉得没有实践,但是完全可以自己实践,其实之所以还有好多人会去报培训班之类的就是因为自己没有那个自制力,就像好多人看小说可能看不进去,但是拍成了电视剧,就会愿意去看,因为好多字在那里,就觉得看不下去。so,我们看书的时候自己配合好实践其实一样能够学好的,而且不能只读书,要思考,甚至自己能做一些延展就更好了。
书的选择上肯定是要基础一些的,不要上来弄一些底层的东西,而是要弄基础的
参考回答:有哪些你看了以后大呼过瘾的编程书? - 牛妹的回答
自学编程需要注意什么? - 牛妹的回答

ps:网上也有好多课程,也可以配合练习,资源特别多,从入门开始看起,当然,肯定也要配合自己的实践,不然任何人说了或者带你学习都没有多大用的。

4.多实践:这个跟思考可以挂上钩,学到知识点就去做个小项目,能解决现实生活中的问题更好,会带你进入这个世界,而且会兴趣大增。

5.多交流:现在网络给大家提供的平台这么多,完全可以有好多机会认识想认识的人或者志同道合的人,在交流中,可以发现一些自己想不到的东西,拓宽自己的视野,但是无论是朋友之间还是牛友之间还是牌友等等,人与人之间只有真诚才能真正联系起两个人,这个社会就是这样,人们往往都是愿意跟自己的前辈多交流以换来更多的有利于自己的东西,然而前辈肯定能够看出你的小心思,人们往往忽略和和同辈的人分享一些有价值的东西,所以只要真诚,你用有价值的东西就能换来别人有价值的东西的。

6.多检查:编程的时候要养成写一段就要看一下能不能跑的起来,哪里有问题及时发现,这个适用于所有时候,当你很厉害的时候,就可以一大段一大段的看了,开始一小段看是因为可能错误较多。

7.学好英语:如果想成为一个非常牛的编程人,那就避免不了要看文档,而那密密麻麻的英文也会让你头晕目眩,平时的英文和这些文档还不是特别搭边,有了基础之后就在看文档的时候多用点心吧,至少能看懂并越来越熟悉吧


这个时候时间还比较充足,学习一门语言的开始,可以配合书籍和课程,还有网上的资料。
这里需要注意的是:一定要注重实践,不能只看不练,必须进行上机操作,手打代码,这里需要注意的,不用在乎时间,要在乎质量,基础打好。

那么有个很关键的问题,也是题主和大家都关心的问题:

遇到不会的怎么办?!!!

第一步:思考
先通过自己思考,思考一段时间,根据具体遇到的问题来看要思考多久。

第二步:找资料
通过配合书和一些博客,帖子,源码来研究,重要是自己动手实践。
源码>书>视频>博客>帖子,这个不绝对,但是大体的一个准确率的排行还是很值得参考的。

第三步:与他人交流确认
如果找到了答案的前提下,与他人交流。这一步不光是思考提升的过程,也许更能在交流中发现意外收获呢

第四步:寻求他人帮助
如果还是不行,实在实在解决不了了,再去找他人帮忙, 既省去了总是遇到事情麻烦人的烦恼,又能够在思考中提升。

了解阶段
这个阶段中,方法和习惯显得格外重要。

如果你对初步的编程已经明白了许多,那么就深入的去研究一门到两门语言吧,并在最后确定自己要做的方向,比如游戏开发,数据挖掘等等。

这个阶段要多刷题:有的时候只看到了别人的成功,却看不到别人的努力,国内算法大牛左程云,他很成功,但是背后的努力又有谁知道呢,刷题刷多了会越来越有感觉的,新手不太适合刷题,因为有可能会因为题目难而失去了兴趣,学的差不多的就可以开始刷题了。

如果觉得自己学的还不错,可以多参加一些竞赛,ACM是比较推荐的,而且也是很被认可的。

深入阶段

深入学习:深入学习框架等知识,为做项目做准备

刷题:刷题还是要继续

做项目:做一些比较大规模的项目,可以去企业实习,或者自己来做,其实一个小项目一点一点做起来最后就变成了一个大项目,重要的是自己有想法,并有热情将其一步一步实现。


大牛阶段

多交流:到了大牛阶段,在继续提升自己的同时,更要多与人交流,这样才能更快的提升自己,为他人和社会创造价值。


首先,要尽早的定一个方向,并在这个方向成为专家,这才会是你的核心竞争力,走到哪里都不怕,这样你才更加心安。而成为专家谈何容易,起码意味着你要付出一万个小时的努力,才会让你在这个方向比别人专业很多,一万个小时什么概念?除以一天十个小时也要一千天,所以大学四年一定要好好把握。从来就没有什么黑马,一切都是厚积薄发的结果。你只有很努力,才能看起来毫不费力。


总的来说,其实每一个阶段都没有捷径,都是要靠动手实践来提升自己,只是可能有一些好的方法和好的习惯能够更好的促进你成为大牛而已,关键的还是要靠自己。

下面来解决一下题主的一些困惑:

Q:大一刚学编程(C/C++),感觉有点吃力,求指点。

A:这个见下文就好啦~


Q:我们平时练习都是做的OJ(老师负责选一些题让我们做,也可以自己随便刷),一些题还好,可是有些题难度感觉很大,有时好不容易有了思路,转化成代码都要老半天,别人一个小时就搞定的事情,我可能要花三四个小时,而且我本人比较粗心,经常被一些小错误坑了很久。最后就算千辛万苦地做出来,感觉也不值得,毕竟时间消耗太大。

A:前半部分,如果有这种心其实是好的,可以促进自己努力,不过刚开始学习的时候不要过于求成,任何事情都是这样的,像武侠小说中的练武一样,即使很快的非常厉害了也会容易走火入魔,每个人接收新知识,新领域的能力都不一样,每个人的优势也不一样,擅长的东西也不一样,有可能还没有完全入门或者上手,如果完全入门了,可能你比别人快很多,所以这点不用担心,谁也不是生下来就会什么(虽然也不一定,有的人确实是天才,但是毕竟不是大多数),也正是因为这个原因,总是出现很多黑马,一来是因为他们一直在努力,二来有可能刚开始接触比较陌生,后来入门了之后飞速成长,总之,因人而异,只要一直努力下去就好。
关于粗心,这点就也属于习惯的问题了,粗心了再往严重了说就是不认真或者不重视了,可以在做任何事情上培养自己不粗心的好习惯,我觉得可以往三个方面培养:1。严谨;2.认真;3.重视
这里严谨指的是思维严谨,一般粗心都是因为考虑不到,锻炼全方位思考的能力,可以通过做那种数学题目或者逻辑题目,或者也可以在做事情的时候有意识的多思考一些事情。
认真不用多说,做事认真,其实不管什么事情,只要做了,就认真的把它做到最好。
重视,有时候不够重视可能会导致粗心,举个夸张的例子,手里拿着一个亿的钞票,肯定会格外小心怕丢失~(夸张的说啦~~)

不过说到OJ,牛客网上有个在线OJ的免费视频课程:OJ(编程在线判题)入门介绍
练习的话推荐牛客网的在线OJ,牛客网可是中国最大的IT题库哦~~在线编程_C++Java前端经典笔试面试题库


Q:还有些题一些思路也没有,但是其他人(也是新手)就能搞定,基本就是别人过10道我过7道的水平。这个时候就会发现智商上的差距真的无法弥补。所有这一切,都让我对自己的前途产生了怀疑,

A:这个也跟那个其实是一样的,没关系的,我相信题主会越来越优秀的,找准了方向,找对了方法,努力就好(嗯,好像题主说不要说让他努力,要说具体怎么做,上面说了哦)

Q:这样下去,我可能只是一个中等水平的苦逼程序员,无法进入顶尖行列。我知道会有人叫我说要努力,可是怎么做?刷题?想看个答案都找不到?问人?哪有那么多人闲着没事干,而且解答正确,使你能够理解?做产品实操?写个两百多行的代码就已经快乱得不行了,不行。看书?终究只是纸上谈兵,没有实际操作的感觉。

A:关于这点只想说题主真的很优秀和上进,具体怎么做。
刷题?想看个答案都找不到?牛客网上题目都有答案哦,还能分配自己想练习的知识点,有解析,集中练习之前的错题,还可以专门收藏题目,做这些题目的好处一来对自己的专业技能有大大的提升,二来,在后面的笔试面试中遇到原题的概率大大的提升。偷偷的说一句哦,过段时间还可以练习自己学校考试的期末考试题,保研都妥妥的,彻底摆脱挂科。
问人?哪有那么多人闲着没事干?牛客网上牛友众多,大神云集,还有很多同类型的牛友,在这里,可以认识好多牛人或者一起学习的人,互相帮助中,共同成长。
产品实操?写个两百多行的代码就已经快乱得不行了,不行。这个我觉得也是慢慢来的,遇到困难是肯定的,不可能什么事情刚开始做的时候就特别顺手的~~
看书?终究只是纸上谈兵,没有实际操作的感觉。这个是可以边看书边练习的哦,拿一本剑指offer来举例,看的同时就可以来这里练习剑指Offer_编程题


Q:求救各位大神指点迷津,看看本人是否要转专业?(补充说明,其实我对IT还是比较有兴趣的,特别是人工智能和图形学(游戏开发),也有过很多好的app点子但苦于能力低无法实现。数学自我感觉良好,主要是初高中搞过点数学竞赛,成绩也还可以,所以基础算是比较扎实,但是不想去数学系。)

A:既然你说你对这些很感兴趣,那就没有必要转专业啦,初入领域,难免有困难,而且题主数学很好,其实真的很适合的,再次希望题主越来越优秀吧~



##生活篇
生活不止眼前的苟且,大学期间有可能是最后的学生时间(除非考研)生活肯定要多姿多彩,不能让大学荒废的度过,可以根据自己的兴趣爱好,学一项技能或者做一些自己喜欢的事情,平时的时候多学习,周末就多做一些自己喜欢的事情,能学一项技能更好啦~

身体也是***的本钱,健康很重要,所以要合理安排好自己的时间,进行锻炼身体。

太多就不说了,自己的生活还是要自己做主,至少最后回想大学生活不要感觉自己什么都没做就好~

##理想篇:
人各有志,也没有所谓对错和好坏,完全看自己的志向。还有最重要的是有了理想之后有没有为止努力。

其实大学能走的路不止一条,条条大路通罗马,但你一定要想清楚你要走的是哪条,如果这个没想清楚然后看着别人干这干那,你会很茫然。因为你会发现不知道从哪儿开始努力了,你和别人比学习的时候,别人开始玩社团了,你和别人玩社团的时候,别人开始秀健身了,你和别人秀健身的时候,别人开始秀恩爱了,所以弄清楚自己想要什么很重要。以下几点是我觉得普适性的:

1、如果想走保研的“学术精英路线”,成绩很重要,非常重要,而且尽量要拿到班级第一名,实际上凭借着大部分大学生玩游戏、玩社团、唱k打游戏的劲儿,你稍微一努力,可能不用高中那么努力,就能够拔得头筹。而且成绩不是一两次考试好就行,要始终保持领先,不像高中只看最后一次成绩,大学的每次成绩都会积累起来,如果你大一的成绩就非常好,就积累了先发优势,后面保持起来就很容易,如果你大一的时候成绩靠后,那你大二大三成绩不止要好,还要比别人好很多才有可能总名次靠前,因此对于想保研的同学来说,就可以放一放社团什么的,先把学习成绩提上去吧。

2、如果不想保研,那么成绩就没那么重要了,每科及格就好。实际上在一个五十人的班级里你考第十名和第四十名区别真的不大,都没法拿一等奖学金,都不能用来保研,因此如果你没自信成绩冲到最前面,就好好想想别的专长和兴趣,毕竟大学还有很多丰富的方面,千万别闷着头就知道学习,结果到时候一看考了个班里七八名,其实这样你时间也浪费了,到头来还然并卵,如果不用来保研,成绩在找工作的地方作用不大。

3、如果你不想在社团通过四年的时间来做到社团老大,从而可以保研或者留校当辅导员,那么社团同样没那么重要。我觉得社团的最大作用是可以认识一批不同学院、不同专业、甚至不同年级的朋友,这样你在大学的交际圈不至于那么窄,而且可能会有很多的团队活动,春游秋游啊,聚会聚餐啊,会让大学生活更加丰富多彩,但很大程度上仅此而已;社团还有一个作用就是通过社团活动、例会、组织活动等来初步接触社会运作方式,以后工作的时候会更加如鱼得水一些,也可以培养一些守时、靠谱、团队协作等宝贵品质。所以完全不需要加特别多社团,也不用让自己显得特别忙,那样其实最浪费时间,加两个社团足矣,再多了你就没有精力处理别的了,到大二的时候在喜欢的社团竞争中级干部,没那么喜欢的直接退掉。

##交际篇

交际上就是你多认识一些人脉,多结交一些朋友,不管怎样,直接通过人往往要比那些通过流程走容易的多。

怎样交到更多的朋友呢?

首先你最近的室友,你们同住一个屋檐下好几年,感情自是不必多说,如果都志同道合,那就更加完美。

你的同学,你们一起上课,学习了好久,虽然大学里同学的概念不是那么的清晰了,但是如果有志同道合的依然可以结交朋友。

你的社团:如果你有兴趣参加一些社团,也会认识到一些人,甚至都是志同道合。

你的实习/兼职:你出去实习或者兼职肯定也能遇到好多不同的人,不同的事,都是资源。

你的平台:如今网络很是发达,两个人认识的成本很小,在很多平台上都能找到各种人,不管是前辈,业界大牛还是其他的同龄人,甚至比自己小的,比如牛客网,脉脉等等。

记住,真诚就好。保持一颗宽容的心,爱笑的人运气都不会太差~
全部评论
牛妹,文笔可以!赞个!收藏
点赞 回复 分享
发布于 2016-10-13 17:38

相关推荐

10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
4 40 评论
分享
牛客网
牛客企业服务