关于计算机专业的人如何学好编程

baihacker 2009-03-31 06:51:47

文章作者:vczh
点击此处进入作者blog
blog地址:http://cppblog.com/vczh





这篇文章是写给低年级的人的,已经工作的就不用来看我废话浪费时间了。



最近总是有人问如何确定自己方向的问题,说是看到有的人在搞手机,有的人在搞网页,有的人在搞游戏,还有其他的什么的,然后说自己只懂得这么一点东西不知道该怎么办之类的事情。我一直在一些做软件开发的群里面混,里面有很多学生,也有很多从业者。那些人对于人们在基础不够扎实的情况下就“做各种各样具体的项目”有两种说法,一种说是浮躁,另一种说是这样开阔眼界是好的。



大学就四年。学校通常安排前两年学数学英语,然后大一学语言大二学数据结构。到了大三有很多比较具体而且复杂的课程,然后就要找实习,大四其实就是在找工作,课也没有,卫生也不检查了,等于在租学校的宿舍住。



于是在这短短的三年里面想在计算机那么多领域里面找到自己喜欢的,然后钻研下去,最后还有所成就的话,还是比较难的。因此很多人经常会看到自己周围突然有两三个人就干了点什么很有成就感的事情了,一问,以前学过的。这种人我也接触了几个。我有一个同学说是高中的时候被称为代码狂人,给emule写了点代码,然后还自己做了个即时通讯工具卖了出去。到了大学就一直在重写这个东西,最后实习就到腾讯去了。前几天还遇到个人,说是小学就在折腾flash里面的action script了,后来投靠perl,说是一直到了大一才写了一个超过2000行的程序。我也没去求证,只是觉得比较不可思议。



于是我想,就照着那些传统的路子先搞定一门语言(《C++Primer》),然后学数据结构(《算法导论》),再去学点库(《STL源代码分析》《深入浅出MFC》),之后弄点设计模式(《设计模式》),最后写个某某管理系统(笑)什么的,也是无聊了点。竟然要学了那么多东西,才能弄出一个看得见摸得着的程序,也太考验人的意志力了吧。几乎是个人都是从拖控件开始的。那些一开始就摸着黑白屏幕狂搞算法的人,要么是NOI出身,要么是ACM出身,然后对着几道算法题乐此不疲。但是最后有所成就的,很少。我在学校认识了那么多个ACM出身的,最后也就一个去了google。感觉风险还是有点大啊。



但是反过来也是有问题的。要是一开始就从界面开始弄,人也是很容易浮躁的。很多人因此就陷入了对花花世界的追求了(根据对群里面的人的统计),譬如说特别关心怎么在ListView前面画棵树什么的。这种人里面,其中一些有追求的,最后都会沿着Windows SDK,再走到DDK,最后写驱动,一脚踏进泥坑,从此不能自拔,当然这些人也是少数。每当有少数人人对着剩下的多数人说跟“我今天实现了让Word不能打开某某文件”差不多的这些事情的时候,他们两眼大放光芒,然后就开始跪求源码,狂问用了什么API,最后当代码终于到手的时候,就放进之前精心准备好的一个文件夹里面,封存万世,从此再也不去看了。当然也有其他的版本,譬如说老是下载书,而且还是rar,然后从不解压一样。曾经有这么一个人就在群上炫耀说自己有多少多少G的电子书。我让他上截图,结果全是rar。根本就没看嘛,他自己也承认了。



于是怎么看两条路都是很有危险的,这就是为了什么到了大四的时候,能学成的人总是不多的缘故。 太容易陷进去了 。这是什么意思呢?人总是只对自己做得好的事情感兴趣。对自己还没做的事情感兴趣那种是好奇,需要严肃对待。当人终于做好了一件事情之后,就会一直不断的钻研下去,这当然是好事。但是,从此只见树木不见森林,以为全天下的编程就那一件事情,那当然是要吃亏的。



所以首先要开阔眼界,知道世界上原来还有这么多的东西可以做。 在差不多知道编程是什么东西的时候,需要这个玩一玩,那个玩一玩 。不然就会看到旁边的同学这个用java在手机上跑一个能告诉你1+1=2的东西,那个人用PHP+MYSQL弄了个留言版,看得唾液直流,心里发慌,说自己对着C++的黑白屏幕弄了这么久居然连那点小玩意都做不出来,自尊心很容易受到打击的。



于是在玩过了之后呢,要及时收手,就专门做一件事情好了 。因为这个时候自己已经大概知道自己看见的东西差不多就是那个样子,想做自己也做得出来,看着别人写那些花边的程序也就不会给自己施加太多压力了。专门做一件事情的意思就是,选定一个方向,然后找书,找人,看代码,写程序。 譬如说可以去弄图形做游戏,也可以去弄脚本引擎做做编译器,还可以跟着老师去搞什么数据挖掘啊嵌入式什么的 。对一个领域的深入研究最大的用处是可以让自己接触 复杂的问题 。



当然,当研究得深入了之后,程序就越写越大了,这个时候就会出现很多各种各样的问题了。譬如说效率太低啦,程序一出错就要全盘推倒重来啦(这个还是比较可悲的),代码太多很难组织函数啊类什么的啦,或者说名字给你用光啦等等。这个时候就需要各种各样的理论知识了,譬如说数据结构与算法,还有设计模式什么的。当然讲来讲去也就这几样,因为“这世界上没有银弹”,所以那些通用的东西必然不多,剩下的还是要靠在同各领域里面其他人的积累或者自己的研究才能最终解决的。



上面所说的可以做的各种各样的事情还是偏向于理论化一点,其实有一个学术上的领域还是不够的,因为最终一个程序在跟计算机打交道的时候靠的是输入输出,也就是俗称IO的东西了。这究竟是什么呢?也就是说,知道那个地方放着你要的数据,你要把它拿过来。你自己算出了什么,知道要往哪里放,你要会放。这里面包含的东西很多,譬如说典型的,键盘和屏幕上的输入输出,网络要用的Socket啦Web Service啦,那些看得见的窗口啦控件啦,读写硬盘啦,还有其他什么的。这种 在某一平台上的专用的API 都是至少要熟悉一种的。不然你光学会这个算法那个算法有什么用啊,譬如说你想对一个图片进行压缩,专门学了那个知识,但是一个bmp放在硬盘上你却读不进来,那岂不没意义了么。



于是说了这么多,无非就是刚开始的时候要去见识世面,然后挑一个来慢慢研究,最后研究着研究着程序搞大了,就自然会碰到很多高级的问题了。这个时候去解决了,其实本科需要你具备的水平其实也差不多达到了。



所以很多人都洗心革面,终于开始努力研究一个领域的问题了。领域总是复杂的,这个时候会遇到很多编程上的问题,譬如说算法太复杂表达不出来啦,文件读着读着就挂啦,一不小心越界了之后造成了很多奇怪的问题啦(C++)等等。这种关于调试的问题,一般只能够靠自己错得多错得离谱了,最后就成才了。当然前人也总结出了经验,写了本叫《 Why Programs Fail 》的书,想看的话可以自己去下载。其次, 具体的库总是有很多书和文档的,没事也要多看点 ,譬如说用Visual Studio的人都得把MSDN给装了。



话也差不多说完了,虽然我自己也觉得这篇文章比较虚,因为这也是“通用的东西”。具体自己该怎么办自己得好好想想。我就把这篇东西献给现在大一大二那些还在迷宫里转的弟弟妹妹了,要是有什么特殊的疑难杂症的话,就私底下联系我吧。



总之,无论什么时候,手头上都要留有一个可以研究的问题才好。
...全文
2438 147 打赏 收藏 转发到动态 举报
写回复
用AI写文章
147 条回复
切换为时间正序
请发表友善的回复…
发表回复
2220728 2010-12-17
  • 打赏
  • 举报
回复
learning
guobingrong 2010-07-10
  • 打赏
  • 举报
回复
支持楼主!!
jamseyang 2010-05-26
  • 打赏
  • 举报
回复
好,收藏!!
striveforit 2009-08-14
  • 打赏
  • 举报
回复
帮忙顶顶~~~~
dongtaishaole 2009-08-13
  • 打赏
  • 举报
回复
我已离开大二好多年,我依旧在迷茫.........................
haozi1213 2009-08-12
  • 打赏
  • 举报
回复
学习了,楼主,感谢你的帖子,更感谢你!
月竹影 2009-08-10
  • 打赏
  • 举报
回复
顶上去,确实啊,我做了好几年了,乱七八糟的都学了一点,都做了点,后来才发现其实自己真正能做得好的东西实在太少太少,很多时候都是在复制粘贴,修改,唉,开始死心学一样,无论是啥,想学好做好都很费时间,
kang315 2009-08-09
  • 打赏
  • 举报
回复
支持楼主
liuzhanping1989 2009-07-15
  • 打赏
  • 举报
回复
狂顶~~~哈哈~以后一定会常打扰 飞雪大哥的 !!
liuzhanping1989 2009-07-14
  • 打赏
  • 举报
回复
好 ,我顶
ggggjatihc 2009-07-10
  • 打赏
  • 举报
回复
天要下雨,我要学编程,学程序的人都要经历的一个过程吧。。。。

哈哈。。。

看谁先悟出来。
wells20072668 2009-07-10
  • 打赏
  • 举报
回复
先广后精~!
xiongzhijian 2009-07-06
  • 打赏
  • 举报
回复
up
ankle 2009-07-06
  • 打赏
  • 举报
回复
顶。图形界面比起DOS之类界面更吸引人
融拓 2009-04-28
  • 打赏
  • 举报
回复
迷茫ING 看到后虽然还有点晕 但是有点清醒了
啊kun 2009-04-25
  • 打赏
  • 举报
回复
up 学习
y187109 2009-04-25
  • 打赏
  • 举报
回复
顶!
y187109 2009-04-25
  • 打赏
  • 举报
回复
看了 虽然还是很迷茫 但是有点感觉了
qq527249973 2009-04-25
  • 打赏
  • 举报
回复
看的我有点自卑了..
meng_jian 2009-04-25
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 diannaomingong 的回复:]
写得很有趣

摸着黑白屏幕狂搞算法的人,要么是NOI出身,要么是ACM出身,然后对着几道算法题乐此不疲
两眼大放光芒,然后就开始跪求源码,狂问用了什么API,最后当代码终于到手的时候,就放进之前精心准备好的一个文件夹里面,封存万世,从此再也不去看了。
看得唾液直流,心里发慌,说自己对着C++的黑白屏幕弄了这么久居然连那点小玩意都做不出来
[/Quote]


呵呵,写得有点蒙胧。第一遍没有看懂。再看了一遍才懂的。
小弟现在大二,学过c/c++ ,java,xml,uml,数据库,操作系统,数据结构,搞过算法(参加过小的比赛),正在学c#,不知道是不是该收手了。不知道判断还是迷茫啊...
补充一下:小弟大二,还是专科,有点像北大青鸟那个模式的产物.做过图书管理系统(c++控制台),类QQ的通讯工具(java socket),音乐网站(jsp+ejb),这几个都是学校课程要求的,自己感觉是些玩具.课余还做过几个java桌面的小程序,给别人做过小网站.属于那种很听老师(所有专业课程都一个老师教)话的"好学生",在学校其它学生看来是有一点小牛的那种人,其实自己没底气,感觉什么都不懂,懂得也是一点皮毛。
以后想搞linux下的网络开发,可现在还没有什么了解。心里有点慌,离毕业不到一年了。不知道是不是可以收手了,还来得及不?迷茫。。。
加载更多回复(127)
编程工具简介:学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,通过对成百上千个实例练习,则很快会成为编程 高手。我们专业从事编程十几年,积累了丰富的编程经验,会陆续制作编程视频供大家学习,中级、高级编程我们会专门 制作中高级的系列编程课程,难度逐步加深,想学编程的可以关注我们的系列课程。可以就相关编程问题提问。 1、【编程工具分为 免费自由版、专业版、企业版。】首先通过免费自由版熟悉基本操作,通过我们提供的实例视频学习 编程,先快速入门。2、基本入门后,再学习我们提供的中级编程课程,通过对若干实例的编程练习,基本可以掌握编程思路。 3、想继续加深学习的,可以继续学习高级版编程课程,通过对连接数据库等的学习真正开发出实用的商业管理软件或 定制开发程序。 4、基本掌握了编程思路之后,再学习其他的编程语言或大学里的编程课程则会非常轻松,因为不论是哪个编程语言, 最重要的是学习编程思路,而编程思路基本上是相通的。 5、学习完PC电脑端编程后,还可以继续学习APP手机软件开发。APP手机软件开发需要有PC电脑上开发基础,操作基本类似。6、编程工具为 搭建之星,这个编程工具的特点:1、安装简单、迅速,纯中文界面,构件丰富,设计过程直观、自由;无需掌握电脑语言,所有编程构件化、命令化、可视化。2、交互式开发,只需要四种类型的“命令”,便可以建立各构件之间的联系;象搭积木一样简单,并可快速的搭建出具有专业水平的软件作品。3、微解释执行,命令解释量小,执行速度快。可以和编译后的可执行文件相媲美。4、提供打包工具,使您即刻将自制软件安装到其它机器上运行。5、自动对开发项目进行加密;使您的项目,在未经授权下,别人无法“浏览、修改”项目的构件关系与搭建方法。  

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧