链接:https://www.zhihu.com/question/281223046/answer/422277531
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

前排的都让一下,三级狗要来这里装逼了。(如果嫌篇幅太长的,可以直接翻到最后看总结,那里言简意赅)


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

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

首先、什么算你所谓的编程能力?

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

那么、如何来锻炼这种能力?

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

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

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

这就引出下一个问题,选择什么样的程序作为上手项目

  1. 首先!是你做出来的程序,一定要好看!

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

  • 大一的时候用纯C语言做的五子棋,比较遗憾的是AI算法是整合网上别人的:

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

  • 这个年代比较近了,使用了C++ Qt,王者荣耀风格的连连看:

  • 最后这个更亮了,得意之作也是毕业设计,准备擦亮眼:

播放器主界面

桌面歌词

手机遥控,同wifi下就可以遥控,还能定时关机

音乐魔方,旁边是酷狗的音乐魔方。有对比,才显的我更有逼格。

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

除了这还支持全局热键、播放MV、系统托盘等等。

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

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

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

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

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

随着我编程能力的提升,这些问题我在解决的过程中就发现,我的代码简直是一塌糊涂!现在存在的问题几乎到了不重构无法解决的地步。所以这个程序的重构后来被正式提上议程,并且因为我的懒惰成功搁浅了长达一年之久,现在还凉着。。。

学校学的东西到底还有没有用?

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

答案是毋庸置疑的,学校学的东西必然有用!

先来看看大学都学了什么?高数、大物、英语、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. 尝试从实践出发然后再回归到理论,就像上面提到的学吉他的方式方法。
  3. 做出来东西一定要好看,会更有成就感,更容易感兴趣。
  4. 用产品的眼光去定位你的作品,会得到更加意想不到的成长和进步。
  5. 会用工具,能决定你跑的多块,但基础多么牢靠,才决定你能跑多远!
  6. 这个世界上有两种人才,一种是所有的事情都知道一些,另一种是知道一些事情的所有,而这两者兼具的人,就成了我们口中的业界精英、行业翘楚。
  7. 不要着急花更多的时间去赚钱,去花时间,让自己的时间更值钱。
  8. 自己从实践中总结的才能叫真理,看别人说的只能叫鸡汤。

再补充两点:

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

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


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

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

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

计算机专业学生如何提高编程能力?相关推荐

  1. 什么是编程能力 | 计算机专业学生如何提高编程能力 | 如何自学编程

    有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 前言 开局两张图,剩下全靠吹了. 上面这两张图便是写这篇文章的原由. 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平 ...

  2. 计算机专业学生该如何提高自己?

    作为机械专业自学转行,并拿过世界500强等一线大厂offer的我,给大家分享一下自己的一些看法,希望能给学弟学妹们答疑解惑. 要说「计算机专业学生如何提高自己」,我觉得应该是包括下面三大块: 计算机基 ...

  3. 经验 | 计算机专业科班出身如何提高自己编程能力?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散   计算机视觉联盟笔记   作者:王博Kings.Sophia 本文内容概述王博Kings好友一些编程学习经验 前言 ...

  4. 计算机专业大创要求,“大创项目”推动计算机专业学生创新实践能力的提高

    2016年第1期 总第172期 27 创新创业就业 计算机科学与技术专业是自1980年各高等院校成立计算机专业以来的老牌专业.目前,绝大多数高校都设置计算机或与其相近的专业,每年有大批计算机科学专业的 ...

  5. 计算机专业看能力还是学校,【计算机专业论文】学校计算机专业学生实践能力的培养(共3502字)...

    摘要:中等职业学校计算机专业学生要想在计算机领域找到一个理想的工作岗位,其不仅需要具备扎实的理论知识,同时还需要一定的实践能力.因此,中等职业学校计算机专业学生实践能力的培养是当前中等职业学校计算机专 ...

  6. 结合计算机专业谈创新,计算机专业学生创新能力培养论文

    计算机专业学生创新能力培养论文 创新能够对社会发展产生巨大推动,它是新技术.新知识.新原理的创造与发现.创新来源于积极的创新精神.扎实的基础知识.科学的思维方法以及良好的心理素质等[2].当前计算机专 ...

  7. 计算机专业创新创业点,计算机专业学生创新能力培养

    创新能够对社会发展产生巨大推动,它是新技术.新知识.新原理的创造与发现.创新来源于积极的创新精神.扎实的基础知识.科学的思维方法以及良好的心理素质等[2].当前计算机专业高等教育中的现状为知识结构单一 ...

  8. 王玫泰山医学院计算机,计算机专业PBL对提高团队协作能力的研究.pdf

    计算机专业PBL对提高团队协作能力的研究.pdf 2014 NO.O4 (上 可 i雨 而 技 术 经 济 与 管理 计算机专业PBL对提高团队协作能力的研究 王玫 李玉娟 马晓艳 (泰山医学院信息工 ...

  9. 计算机专业怎样提升竞争力,新形势下如何提高计算机专业学生就业竞争力.doc...

    新形势下如何提高计算机专业学生就业竞争力 新形势下如何提高计算机专业学生就业竞争力 摘 要:受经济社会和 IT市场发展的影响,高校学生的就业形势越来越严峻,提高学生的就业竞争力至关重要.本文分析造成就 ...

最新文章

  1. java 模仿支付成功_Java工程师薪资为何这么高?60W年薪如何轻松拿到手
  2. log4j在javaWeb项目中的使用
  3. centos6.5下安装docker
  4. 3ds Max制作一面飘扬的旗帜效果图
  5. swift获取通讯录
  6. 关于jquery跨域请求方法
  7. 5-32 说反话-加强版
  8. 对象委托(9)观察者模式
  9. DataSet 用法
  10. 校园邮箱免费激活idea教程
  11. 使用自己的激光雷达在cartographer导航框架下绘制地图,报错 lua_parameter_dictionary.cc:83] Check failed: status == 0解决方法。
  12. Unity拼图小游戏
  13. UIPATH 调用SAP BAPI
  14. typescript学习笔记1-tsconfig.json配置和变量类型声明
  15. 题解 【网络流24题】太空飞行计划
  16. 如果生活欺骗了你(普希金)
  17. 2012年苏州大学872真题整理
  18. 跨境电商-shopline
  19. 华为笔试:字符串加密(python版)
  20. AIQ - deeplearning.ai 全套吴恩达老师的深度学习课程笔记

热门文章

  1. 场景金融丨神州信息签约第三个国家级单品大数据试点项目 助力场景金融创新
  2. 装了 Visual Studio 2008 后飞速土豆不能运行的解决方法
  3. Spark中组件Mllib的学习1之Kmeans错误解决
  4. Keepalived 健康检查方式
  5. SAP 模块中文解释
  6. Python兼职有哪些?兼职月入5000+
  7. stunnel安装及设置
  8. 独立站,跨境电商新玩法
  9. TED地道用语学习 - <脆弱的力量> - 2
  10. ToYcon图标格式转换