• banner1
  • banner2
  • banner3
当前位置:主页 > 企业招聘 >

计科专业大一学生一枚如何提高编程能力?

来源:http://www.ynjiurui.com 责任编辑:ag88.com 更新日期:2018-11-06 08:36

  先简单介绍一下我的情况:大概去年的这个时候从学校毕业,二本A软件工程,现在在北上广深之一的某卫星城从事互联网相关工作,月薪勉强养活自己。看上去一份很没说服力的简历,希望我下面的话,不会让你有这个感觉。

  对于如何提升自己的编程能力。其他的回答中很多人都说了,这没什么捷径,就是多练,问题是并没有人说怎么练?一天敲50遍Hello Word算多练嘛?当然,各路大佬自然是知道该怎么练的,只是懒得在逼乎上浪费时间。我属于比较爱扯淡的,就在这里长篇大论的扯一波儿,不喜勿喷。

  我们对一项技能的掌握程度往往很难量化,对于编程能力的考量可能比较抽象,我们来类比比较直观的其他技能。比如说什么叫会弹吉他?我们说一个人吉他玩的好,这个人会弹吉他,是指他会弹《小星星》?还是会弹岸部真明的《time travel》?(力荐,好听!)恐怕都不是,我们对于会弹吉他的认知,应当是随手给他一个不熟悉的谱子,你也能很快的用吉他精彩的演奏,我们才说这个人吉他玩的线。那编程也是,我们所希望的编程能力,指的是会写双向链表还是会写二叉树?恐怕都不是,我们所指的会编程,是指他在应对各种不同的业务需求时,都能很快的将业务逻辑转化成编程逻辑,并且编码实现的能力。

  前段时间在罗胖的《得到app》上听的一篇精品课,非常受启发。一位老师讲如何高效地学习一项技能,他用两年的时间就从零基础达到了专业级的弹指吉他大师的水平,他所使用的方法很值得借鉴。内容大概是这样:他一开始接触吉他,没有从基础开始练,而是直接挑战难度极高的世界名曲开始演奏。可想而知这难度是极大的,没有任何基础的他,很多和弦都压不住。尤其对与刚玩吉他的人,十指连心啊,压弦的那只手是钻心的疼。一开始一句完整的都弹不下来,更别提什么扫弹,闷音,切音的技巧。就这样一节一节地弹,经过不懈的努力,他把这首曲子拿了下来。巨大的成就感是自然的,但对于优秀的渴望使得这位大佬感到仍然不能满足。怎么办呢?请教名师!这时候老师告诉他:“一禅呐!所谓知之者不如好之者、好之者不如乐之者,你现在已经能够从弹奏吉他中获得喜悦,现在,请再回过头,从基础开始学起。”这下子他才开始从最基础的乐理开始,什么叫节奏、什么叫旋律、什么叫音阶、什么C调G调F调。原来之前练到手指快疼死的的指法叫F和弦?原来之前的曲子里变调是这个意思?

  和上去就啃吉他基础教学不一样,这波儿基础的学习让他任督二脉蹭的一下就通了,仿佛杨过一身雄厚的内劲得黄药师点化一番,实力大增。不但能将那首世界名曲演绎的更加纯熟,对于其他没有演奏过乐曲,只要稍加练习,就能够德芙般顺滑地弹奏下来。

  同样的方法,映射到编程上,就是我想说的学习方法。我很不建议一开始就从基础开始啃,有多少人从大一刚入学立志将来做一个IT大佬,抱着一本《C++ Primer》开始啃,最后啃不到200页就去LOL上分冲段位了。所以我的建议是,一开始只要会点儿基础语法,就定一个小目标去实现就好了,不必强求每一行代码都是亲自手写。遇到问题就查,百度也可以查书也可以,我一开始写个五子棋小游戏的时候,连数组的声明语法都是查书的。把你遇到的问题从业务逻辑定位成代码逻辑,然后知道从哪儿可以找到想要的答案,这个能力在未来的工作、编程和面试中非常重要。一两个完整的程序做下来之后,再回过头来从变量、语法、表达式、流程控制、函数....重新去学习这门编程语言,这时候你会不断地发现原来这个地方这么写的原因是这样?原来这个地方是这么实现的,那个地方我还可以这么写。一本枯燥的语法书籍你会很流畅地读下来,甚至还可能读出快感和兴趣,这样一顿操作之后,你可以算真正掌握了一门编程语言,有了自己的理解在里面,并且有对应的应用经验,未来的面试中也可以讲的头头是道。

  和语言没关系,不管是HTML+CSS还是Python还是C。我承认我是颜控,但这和个人癖好没什么关系。一个酷炫的UI设计将在很大程度上提升你的成就感以及你程序的品质。这里说的是品质,也就是逼格,用户体验好了,逼格上去了,自己的成就感油然而生,对于编程的兴趣也就上来了。下面上一波儿图来佐证一下我的观点:

  是纯C你没听错,有一个简单易用的函数库,叫做easyx可以了解一波。就按官网教程看几篇下来做成这样没有丝毫问题。当时课程设计,同学们看到这个程序佩服的和关老爷一样,老师也对我赞不绝口,毕竟在大家都用控制台画界面的时候,我具有划时代意义地用上了鼠标。只有我自己知道这其中只不过是些花拳绣腿。

  设置页面,很尴尬。这里都是假图,左侧五个按钮点击,右侧是五张图片来回换。-_-

  如果你张大嘴哇了出来,就说明这些图片确实震撼到你了,试想如果你也把经手的程序做成这个样子,谁还会说对编程没兴趣?兴趣有了,动力就有了,项目搞完回过头来系统地学习语法基础,不但不再枯燥,而且理解也会更加深刻。

  所以、做程序的时候想办法把程序做的漂亮一些,自己会P图就自己搞素材,自己不会就去网上下漂亮的UI素材整合到你的程序里,相信我、这些花拳绣腿不用花多大功夫就可以做到。

  2.刚才说的是开发上手程序的建议的第一点,要好看。还有非常值得推荐的一点:把你的程序当做产品来看待。

  当你把程序作为产品来看待的时候,你就会考虑到一个非常重要的因素:用户体验。假设你的产品要上线,是要给别人来用的一个程序。用户体验会倒逼你对你的程序作出一些调整和优化。有些调整优化力所能及,有些难度高到可能你实现不了,没关系,这对于你来说都将是成长很大的一步。在调整和优化的过程中,你的代码可能越改越乱,最后改不下去了,你会发现你的代码需要从底向上重新整理编写才能满足需求,恭喜你,这是编程能力提升的又一个重要阶段:Code refactoring 代码重构。无论重构的效果如何,一定会比上一个版本有所进步,这就是提升和成长。也将成为你编程经验中可贵的积累。

  就以我刚才的音乐播放器为例,作为毕业设计已经绰绰有余,但是如果以产品的眼光来定位,它还存在着很多的问题,我大致记录如下:

  随着我编程能力的提升,d88.com河北出台工业设计“331”行动方案 两年内形成一批工业设。这些问题我在解决的过程中就发现,我的代码简直是一塌糊涂!现在存在的问题几乎到了不重构无法解决的地步。所以这个程序的重构后来被正式提上议程,并且因为我的懒惰成功搁浅了长达一年之久,现在还凉着。。。

  编程能力的提升说完了,你可能会有这样的疑问了,学校学的东西还有用吗?好像按照我上面的办法自己学也能小有所成。

  先来看看大学都学了什么?高数、大物、英语、C语言、数据结构、算法、计算机网络、计算机组成原理等等。显然,都是些既枯燥又复杂的知识,后来做了开发的大家都知道,这些东西很难直接应用在生产实际中,相反,很多互联网公司招聘,要求的是熟练使用各种框架。前端要vue,React,java要ssh,python要Django,C++要Qt等等,大学里不教,企业招聘又要,怎么办?这不是多了雨后春笋般的培训机构么...甚至有人因此放出豪言壮语了:学校学的东西根本没卵用,不如早早学个流行的框架出去找工作。

  难道说大学讲的东西真没用?既然这些东西我们工作中可能用不到,为什么学校还要讲?而不讲我们用得到的呢?我先来举几个实例:

  1、你看到的大多数互联网公司招聘都要求熟悉这那的框架,但是越是大型互联网公司,比如BAT这种体量,学历要求是研究生到博士,数据结构和算法要求是精通,英语要求是6级。框架?不存在的,我招你进来很可能就是要参与开发我们自己的框架呢,你会用别人的框架用的再6也不是我想要的。

  2、如果你研究人工智能领域的一些技术,机器学习深度学习、神经网络什么的,一些似曾相识的名词开始映入眼帘:贝叶斯?逻辑回归?支持向量机?拉格朗日乘子法?数学让我寸步难行。。。

  3、如果你学习前百度首席科学家吴恩达的全套机器学习课程,通篇没有说过一个中国字儿的,英语让我寸步难行。。。

  4、答主之前接触过一款C++游戏引擎叫Cocos2d-x,设置一个小人跑酷,需要小人可以跑可以跳,自己会下落,可以碰撞检测。算坐标算的太麻烦,引入了一个叫Box2D的物理引擎。从此,小人的像前移动,变成了给小人设置一个像前的初速度。小人的自由掉落,变成了设置全局的重力加速度。小人的跳跃,变成了向上给一个初速度。碰撞检测变成了设置小人和物块为刚体,物理让我寸步难行。。。

  5、答主一个朋友 @探索之言,在游戏行业做引擎优化和图像处理的,有一天跟我打电话,问我记不记得求空间中两个几何体相交截面的公式?我回了个黑人问号脸,后来他又打电话说起最近在做GPU编程,我为了不失逼格仍然不懂装懂的聊,他听出我啥也不懂,之后就再没给我打过电话了。。。

  (这里的应用场景是很常见的,在很多3D游戏的物体的投影,不全是投在地上的,有些投影会投在其他物体上,那这个时候显示出来的投影的样子,就是刚刚他问我的横截面。CS游戏中的喷漆也是这个原理。)

  6、前段时间写一个贪吃蛇的小游戏,蛇的身体我封装成了一个类,每一个类放了另一个身体节点的指针,巧妙地实现了贪吃蛇的走步方式,我沾沾自喜地找同事炫耀我靠大脑创造出的高科技算法,被同事怼了回来:“这特么不是链表么?!”。

  从上面的实例你应该已经能看出来了,说大学知识没用的那些人,不是因为大学知识真的没用,而是因为以他的能耐和眼光,还看不到大学知识用在什么地方。编程达到一些深度,开始需要自己造一些轮子用的时候,数据结构和算法是不掌握不行的,一些高精尖领域的研究,比如图像识别大数据、人工智能等等,玩的全是数学。而我们所说的这框架那框架,全部是基于我们大学里学的知识基础封装出来的,当你对编程研究到一定深度的时候,大学里落下的基础,一样也跑不了。

  这就是为什么说大学的东西不见得用得到,而大学还一定要讲,因为这些都是最基础最核心的东西。坦白讲,框架、编程语言都是用来解决问题的工具,工具用的好坏只能决定你跑的多块,而基础有多么牢固,才能决定你跑的多远。

  这个世界上有两种人才,一种是所有的事情都知道一些,另一种是知道一些事情的所有,而这两者兼具的人,就成了我们口中的业界精英、行业翘楚。

  当然,成为翘楚光靠努力不够,还要一些运气和天赋,但这并不代表我们普通人不能向翘楚看齐,即使成不了精英,成为大佬还是有可能实现的。所以,对未来的规划,我的建议是从深度与广度两个维度来成长,定义好几个时间节点,在这些时间里就向这既定的目标来努力,如果中途感觉跑偏了,就回望初心,重新把自己划回正规。

  就以我为例,我的大学基本是凉凉了,编程能力不错,但是成绩真的是有些不忍直视。我对自己明确的规划也是在快毕业的时候才有,那时候刚22岁,目标是在25岁之前,打造自己的广度,争取各个领域都有所涉猎有所了解,在25岁到28岁,选择一个自己喜欢的领域深入研究,打造自己的深度,争取在30岁之前,成为一个深度与广度兼具的大佬。在这期间,薪资不是我考虑的主要因素,薪资只是你个人能力的附属品(这话俺妈讲的)考虑的第一因素是成长。扯得哲学点就是:不要着急花更多的时间去赚钱,去花时间,让自己的时间更值钱。当然,现在的我还差的很远。

  鸡汤写完了,以上只是我的个人观点以及经验之谈,希望能对你,对其他在校的在职的程序猿有或多或少的帮助。

  最后,还有很重要的一点,善于总结。定期回过头来看看,自己都学到了什么掌握了什么欠缺什么,也许你能从中淬炼出一些很有价值的东西,比如今天这篇鸡汤,总结如下:

  知之者不如好之者,好之者不如乐之者。尝试引导自己对编程产生兴趣,从中获取成就感。

  这个世界上有两种人才,一种是所有的事情都知道一些,另一种是知道一些事情的所有,而这两者兼具的人,就成了我们口中的业界精英、行业翘楚。

  1、知乎可以刷,但不能天天刷,知乎大多是像我这样的浓鸡汤故事会,偶尔看看可以,有多余时间看是多看看技术干货更好。

  2、拒绝私信聊人生聊理想聊职业规划,一天天忙着在知乎装逼,没时间编码了都o(╥﹏╥)o

  6.25:私信有要五子棋源码的,补一下五子棋源码连接(),这个就不要star也不要fork了,大一些的代码实在太挫了。看到过去自己的神操作能笑死:

  点击返回按钮,返回到游戏主界面,我直接......调用了main函数。。。反正功能实现了,我才不管那么多 ̄□ ̄||。

  上述的其他项目在我的github里都有,很遗憾代码搓的没有一个入眼。。。

  图文综合来自网络,有删减、如涉及版权问题,请联系我们以便处理。文章内容纯属作者个人观点,不代表本网观点。

Copyright © 2013 ag88.com,环亚国际,环亚娱乐ag国际厅,环亚国际ag886 All Rights Reserved 网站地图