点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
链接:https://www.zhihu.com/question/423764018
编辑:深度学习与计算机视觉
感觉国内的大学计算机专业本科教授的都是基础概念类的知识,实践课反而没几个学时,那么该如何提高自己的编程能力呢?有什么专业书籍或者网课培训可以推荐吗?
你有这方面的疑惑么?
作者:沈世钧
https://www.zhihu.com/question/423764018/answer/1514275200
要想坦诚的回答这个问题,首先我们必须面对以下事实:
1. 绝大多数计算机专业学生不会成为科研者,而是普通开发人员,就是所谓的“码农”。
2. 绝大数企业,没有耐心,也没有财力去从头培养一个“眼高手低”的毕业生。从一开始,他们需要的就是一个“开箱即用”的求职者。
3. 计算机毕业生,直接能进入大厂的是少数,绝大多数人都得从中小厂家干起。
所以,对绝大多数计算机毕业生来说,如果想逃离“毕业即失业”的命运,在大学的时候就一定要千方百计的提高自己的动手(编程)能力,眼高手低是个致命的缺陷。
同时,还要清醒的认识一个现实,我们现在很多大学的计算机课程设计就是偏理论、偏基础。在学校,按部就班的学习,无论你的纸面成绩如何,都不能直接证明你的动手能力。
大学的老师,因为职业定位的不同,科研能力可能很出色,但软件工程能力就不一定了。
因此,学生想要提高自己的编程能力,自学是最主要的途径。
编程本身并不难,难在内容太庞杂,无论是市面的课程,还是图书,其中都混杂了太多“无用”的东西。因此,自学编程的成败就在于在有限的时间里,学到真正有用的东西。而关于什么是有用的东西,长期沉浸在一线的开发人员是最有发言权的。
所以,对计算机专业的学生来说,在自学编程技巧之前,首先要有获得一个明确的学习纲要,从而把有限的时间用在最关键的事情上。
如果是学习Java,可以参考我的一些回答:
沈世钧:Java学习路线图https://zhuanlan.zhihu.com/p/84032726
如何快速打好Java基础?https://www.zhihu.com/question/50904128/answer/521519858
目前 Java 后端有哪些不是很有必要去学的?https://www.zhihu.com/question/305924723/answer/557800752
学习 Java ,知识点太多记不住怎么办?https://www.zhihu.com/question/270722275/answer/1488832343
如果是其他领域(例如前端),请努力去认识一个一线的开发人员,从而获得一个目标明确的学习纲要。
在缩小了学习范围之后,就涉及到如何学习的问题,下面是能想到的关键点:
1.基础知识学习
在学习基础语法的过程中,一开始有不明白、记不住的内容不要紧,这是必然的。要想真正理解一门语言,只能在实践中才可能,这个实践就包括框架的学习。
所以,对基础知识的学习,不要纠结,不要恋战,快速的过一遍,大概理解即可,然后快速的进入实际框架的学习中。只有在这个阶段,通过两者的磋磨,相互启发,从而才能真正掌握一门语言。
2.学习笔记 & Demo
在自学编程的过程中,一定要记学习笔记,一定要收集Demo。
这是因为自学是孤独的,没有实际工程的相伴,遗忘如影相随。学习笔记和Demo不仅是和遗忘作斗争的利器,同时也是一种自我对话,自我激励。
同时,程序员的工作,在很大程度上就是“复制粘贴”的过程,而一个整理有序的学习笔记和demo,就是一个“复制粘贴”的宝库。
最后,等你学成毕业要去面试的时候,学习笔记也是你的面试复习考库,而且还是量身定制的宝库。
3.实践
编程是一门实践的学科,参与一个完整的项目是必不可少的,但因为学生的原因,接触一个真正的项目机会极少。但是,没有关系,自己设定一个“虚拟”的项目,把产品经理、架构师、程序员集于一身,是一个非常“刺激”,也极具价值的体验。
“虚拟”项目有两种,一种是自己想出来的,例如“学生管理系统”、“图书管理系统”等各种管理系统。这种项目的特点是规整全面,范围可控,缺点是需求和设计都是自己想出来的,不那么实际。
另一种是参照市面上已有的应用,“照葫芦画瓢”模仿一个。这种项目的优点是非常接地气,缺点是一个真正的商业项目,往往非常复杂,因此非常考研学生的时间和心性。
但无论如何,以我的经验,上面的做法确实可以解决编程实践的问题。
其实,上面的三点,不仅是对一个学生有用,作为一名职业程序员,一个需要终身学习的职业,上面的三点一直陪伴我从学生时代直到今天。
最后,我想说的是,编程并不难,也存在明确的学习路径,坚持一定能成功,真所谓:心有所执,必有所成。
作者:IT人刘俊明
https://www.zhihu.com/question/423764018/answer/1518288891
作为一名计算机专业的科研教育工作者,我来回答一下这个问题。
首先,计算机相关专业的本科教育确实比较重视基础课程和理论知识,一方面本科教育要为行业领域培养应用型人才,另一方面还需要为培养高端人才(研究生)奠定基础,而基础课程和理论学习还是比较重要的,所以不少大学,尤其是重点大学在本科阶段都更重视理论基础。
当前随着产业领域对于应用型人才的要求,越来越重视动手实践能力,所以大量普通本科高校正在不断提升实践课程的授课比例,这也是一个大的发展趋势,所以未来普通大学的本科生会有更多的实践课程,计算机相关专业的同学,也会有更多的机会来提升编程能力。
对于计算机专业的本科生来说,如果想提升自己的编程能力,可以重点考虑以下几种方式:
第一:积极参加专业比赛。以赛促学是比较好的学习方式,计算机专业的本科生可以重点关注一些程序设计类比赛,包括其他需要编程的专业类比赛,包括大数据比赛、机器人比赛等等,通过参加这些比赛都会促进自身编程能力的提升。
第二:参加老师的课题组。参加老师的课题组也是一个提升编程能力的好方式,而且在课题组当中还有更多机会与研究生学长交流学习,从而提升自身的编程实践能力。当前不少大学的计算机专业都会设立很多专业的实验室,这些实验室往往也有很多大型互联网(科技)公司的支持,参加这些实验室也是不错的选择。
第三:制定自主学习计划。提升编程能力除了可以参加专业比赛和课题组之外,还可以通过自主学习来提升,比如可以借助于互联网参与到一些科研实践活动中,或者是参与到一些开源项目中。
作者:刘一非
https://www.zhihu.com/question/423764018/answer/1518198537
多年的技术管理工作,使我明白一个真理。
能反映计算机学生的,是你的价格,即单位给你的工资。
而给你的工资高低,取决于稀缺程度,即这个岗位是否能招到足够的人,以及公司对其的需求程度。
这两年什么最热,毫不犹豫地说就是人工智能,前一段时间基于人工智能的智能客户推送技术,已经上了国家进出口限制目录。
那你有什么理由不选择,不学习这个领域呢。
那好,我建议你从人工智能领域突破,你还可以选择三个热门方向:
1)基于图像识别的人工智能算法。
2)基于语音的人工智能算法。
3)基于智能推送的人工智能算法。
相对来说,前面两项较为难学,但是竞争对手少,基于智能推送的人工智能算法目前是大热门,很多公司用得上,但也意味着它们会很快饱和。
所以我还是建议你学习基于图像的深度学习。
本着这样一个目标,你的首选语言应该是phython,然后首选的模型应该是TensorFlow或其它。
如果你还找不到方向,建议你去阿里,或者全球最大的人工智能竞赛网站找几个课题,搜集一些样本。
然后你就可以开车了!
恭喜你,你正走在一个优秀的调包调参工程师的路上。
作者:数据控
https://www.zhihu.com/question/423764018/answer/1516636587
想要提高编程能力,最重要的当然是:敲代码!敲代码!!敲代码!!!重要的话说三遍!!!
“编程是门手艺活”。什么意思?得练。代码的世界很纯粹:你行就行,不行就不行。不像其他一些职业,说你行你就行不行也行,说不行就不行行也不行。要想爬的高,整日里就得琢磨怎么“混”,是没有什么效果的。这一行,就不怎么需要看简历,“行家一出手,就知有没有”,三言两语,就把你底子给摸清楚了。
开始学编程,选一个能够迅速给予你“正反馈”的语言,先把环境搭起来,“Hello World”打出来,这就是第一步。这极其简单的第一步,对于很多同学可能都觉得非常难,但是没有办法,你只有一步一个脚印地做出一个小网页小游戏,哪怕你还看不懂代码,都是一个字一个字照着书上敲的都可以,这样才能使实际操作中不知不觉地掌握编程能力。也许你还会在某一天突然发现自己的编程能力原来有了这么大的提升。
作者:青云若水
https://www.zhihu.com/question/423764018/answer/1509150977
你的这个编程能力其实应该理解为产品能力或者工程能力,严格来说你的专业叫计算机科学,培养目的是为了培养出计算机科学家,而不是培养出软件工程师或者说码农。
当然,计算机科学家只是千里挑一,老老实实当码农赚钱才是我们大部分人的目标。所很多时候怎么学习怎么提升还是看你自己怎么想的,如果是想做出东西的话,一开始的话我建议你多动脑,尝试下能不能对现实世界建个模,比如看到查字典的时候自然就会想到二分搜索,看到红绿灯就想到线程锁啊等等。
接下来读一些产品方面的书,要学会换位思考,尤其要能通过问题想清目标用户,能够把技术和商业结合。接下来就是研究一下现实世界里面哪里有缺陷,就可以自己做一个产品出来了,也许机会合适就可以走上人生巅峰。
不过这条路和去大厂当螺丝钉是有区别的,如果目标是去bat拿高薪的话最好还是做一个典型的学生,就是刷爆acm和算法,然后网上用spring抄一个电商app,不需要idea只需要实现即可。
作者:猫吃葡萄
https://www.zhihu.com/question/423764018/answer/1509410433
如果学校同时开设了计算机科学和软件工程两种专业,那一般前者侧重的会是计算机系统、操作系统这样的“枯燥”概念知识,后者更侧重实战开发。
想提升实战编程能力,如果你自学能力较强,可以找自己喜欢或与将来就业方向相关的主题,设计一个应用,然后不遗余力实现它;如果自学能力一般,可以找本书,书名例如《xxx软件实战》、《30天实现xxx》,基本上相当于跟着教程走,开发一个完整软件,也会有很大帮助。
建议专业课还是好好学,有些知识现在觉得没实战有趣,将来反而会在找工作时助力,比如算法数据结构,大公司笔试基本都要过这一关。
逢人便推《深入理解计算机系统》,名字有些误导,其实并不“深入”的难哈哈,英文是“Computer Systems: A Programmer's Perspective”,至今觉得它是我码农路上最珍视的书。
作者:不觉
https://www.zhihu.com/question/423764018/answer/1519048689
其实大多数写的还不错的,我是被一个直接拉框架的回答引进来的,恕我直言,这就是培训班学法,弟弟学法。
你首先要清楚一点,你提高水平为了什么?考研然后做科研?还是找工作?
我直接说找工作的吧,那你就需要知道,一个公司的hr为啥选你简历,你以后的小组长为什么选你。不是因为你会调个框架API,是个培训班三个月出来的都会,你大学四年,比其他人强在哪儿,强多少才是关键。
现在卷那么严重,说真的,框架api就是弟弟。
简单说,你学你要有一个方向,去做web,就js,node之类的,安卓就java,IOS就oc.swift,游戏就搞ue4,弄c++。
定好方向,先学好语法,其实这些东西,花一两个月,看视频或者看书,学学调api培养一下兴趣可以的。
之后呢?这个语言的语法,数据结构,编译过程,看下去,然后相应语言的汇编,去学,x86的,还是AT&T的,深下去,弄懂这个语言,这个编译器,这块内存,其实弄到这里计算机组成,操作系统,还有编译原理,你就可以融汇了。
再去刷算法,不管什么面向对象,面相协议,还是函数式,去用你学会的语言做好,知道套路,学会那些啥动态规划,啥二分法。
然后补上计网,一样,深下去,弄清楚他的过程和原理。
然后去锤面试官。
教科书只是计算机教育的入门,况且学校那48,68学时的课也只是带你入门。
选好方向,自己深下去,底层打好了,才有所谓的上层建筑,无论什么,都是如此。
作者:seeing seeing
https://www.zhihu.com/question/423764018/answer/1514371340
多动手。
1.基础概念还是要掌握的,该记的还得记,不然别人说出一个专业名词出来你一脸懵,别人会质疑你的专业性。
2.看基础教程的时候一般都会有示例代码,不能只限于看,看完后你把书合上,自己在ide里面看看能不能把它敲出来并且运行通过,平常多和人交流沟通。刚开始的时候可能会花一点时间,但时间久了你的编程熟练度会提升许多,再往后你可能就只敲核心的示例代码而不是全部代码了。
3.敲代码过程中难免会涉及到部分经典算法,这时候就要细品了,许多算法都是对经典算法的改造和完善。
4.待完成基础学习后,可以看看网上的开源代码,要看完整的工程代码,学习他们代码中的设计技巧等并且检测一下自己还有哪些方面有所欠缺。
5.自己动手做一个小项目,从0开始最能锻炼人,也很考验人。
现在网上资料有很多,爬坑的经验总结也不少,要在不断的动手实践中形成适用于自己的一套方法。
作者:老纪聊数码
https://www.zhihu.com/question/423764018/answer/1513235121
实际工作更像是近身战,建议轻理论、重实操。放下书本,多去上机。实操范围要广,切勿局限于所学科目(你跟甲方说,非常抱歉,这个项目涉及的技术不在我大学课程范围里?)。
你可以按照“支乎”的菜单和功能,自己做个网页版、app版。
要求考虑页面交互体验设计、数据库、并发、缓存、队列、集群与负载均衡、弹性伸缩、微服务、容错等问题,多给自己安排一些难题。遇到某个问题时,去图书馆查书或上网自行解决。
“研究并解决问题”是自学编程的捷径。实际工作中,客户负责提出模糊的需求、紧张的工期,剩下都要你的team按时、保质保量的解决问题、完成项目。
此外,华为开发者联盟、阿里云等网站,有很多课程,都挺实用的。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~