作为初学者,我过度关注代码的细节,从未去考虑过思路和逻辑,先做什么后做什么没有弄清楚。这是很多入门者都容易犯的错误。从那以后,我就非常注重思路,在写代码前要想好接下来要做什么,完成哪些,有哪些步骤,先做什么,再做什么,最后做什么。
去商店买东西的时候,你会被琳琅满目,各式各样的商品弄得眼花缭乱,可是,你为什么要去商店?你去商店干吗呢?是不是别人说哪个商品好啊,你就去买呢?当然是购买你最需要的商品了。世界上哪来什么编程语言之争?争什么呢?我送给那些整天为选择用什么编程语言而发愁的朋友一句话:“吃饭用筷子,刷牙用牙刷。你不要用牙刷来吃饭就行了。”
虽然我知道以实践为重的道理,但是一开始学习都是一边看书一边上机练习,把书中的例子实践一回。这种方法我当初也认为很管用,但慢慢地我发现,这种学习方法依然不是最有效,哪怕对书中的例子练习到可以把代码背下来了,然而一旦脱离书本独立写程序,仍然摸不着头脑。很关键的一点是,过于在乎代码细节了,完全忽略了思路的重要地位。后来我换了一种学习方法,核心仍旧是以实践为主,不过,不是照抄书上的例子,而是先把例子看完,拿出一张纸,用笔写下例子代码要实现什么功能,第一步做什么,第二步做什么,用到哪些知识,使用了哪些类哪些函数,为什么要用。然后把书合上,就根据纸上写的内容去编程。这种做法有些难度,而且容易出错,不过好处很多,一是挣脱了书本上的示例的束缚,自由发挥空间大,不容易形成定势思维;二是出错了无法通过编译,就会迫使我去主动寻找错误,不知不觉中,我不看书都学会了调试的方法。
看书我仅仅是作为一种参考,为什么呢?请原谅我把话说得比较难听,很多书其实都是抄袭或翻译帮助文档,比如很多.NET相关的书都抄MSDN上的文档,如果你不相信,你不妨比对一下。
大约在参加工作两年后,我才慢慢地找到对编程最真实的感觉。编程其实更应该注重思想,写代码只不过是一个逻辑翻译过程,把我的思想转换成计算机指令。故写程序和文学写作是一样的,有明确的主题(目标),清楚的脉络(设计文档和构思)才能做到笔下生花;写程序和习武是相通的,很多人总有一个疑惑,什么样才叫编程高手?什么程度才叫境界?那你不妨想想,什么样的武功才是上乘的武功?什么是武林高手?如果你看过武学电影就知道了,不要以为里面是骗人的,那是真实的,任何艺术作品都是取材于客观世界,影视作品也不例外,编程更是如此。
如果你让我用一句简单明了的话来概括什么是程序,我会说:“程序无非就两个东西,一个是看得见的(UI),另一个是看不见的(逻辑)。”
当你计划要做一个程序的时候,无论是小程序还是大项目,不妨先想一下:
- 我干吗要写这个程序?
- 这个程序完成了什么?
- 程序所完成的任务真的比人们手动操作更有效率吗?更准确可靠吗?
- 如果我成功完成这个程序,解决了哪些实际问题?
- 我在写这个程序的时候,可能遇到哪些困难?如果某个难点解决不了,能有可替代方案吗?
- 使用我编写的程序的人会快乐吗?
- 我做好这个程序之后会高兴吗?
编程的实战很重要,你平时都是如何进行实战提高自己能力的?
周家安:我是坚持每天都要写代码,不是很多,可能20到50行,也可能100到200行,都是一些很基本很简单的程序,但我会重复写,不断写,写完之后不保存,直接从硬盘上删除。我不会刻意去记代码,所以,每天我写完就删,我希望把这些代码像潜意识一样植入我的脑细胞中。但要做到这样很难,而且很多人都会虎头蛇尾,坚持几天就没有下文了。我刚开始的时候也是很不习惯,也有好几次想着要取消这个行为。后来我强迫自己坚持下去,谁叫我天生就是这么个倔性子.
学习编程的人分为三种类型:
- 狂热爱好者,把编程当作事业,当作一种境界。
- 纯粹为了应付工作需要,浅尝辄止,能满足日常工作即可,不再深入。
- 业余爱好者,或者仅仅是对写编程感到好奇,只是想泛泛了解一下罢了。
如果你想学编程,不妨看看上面三点,对号入座,知道你自己要追求什么。
在自学编程这些年里,我最大的感悟就是:你要真正地喜欢上编程。当一个人真正喜欢做一件事情后,就不会觉得无聊和枯燥了。很多人觉得学习编程很枯燥,甚至学了没几天就想放弃,我曾经做过总结,原因有以下几点:
1.懒:这是一个决定性因素,许多你本想去做而最终又没有做的事,多数原因就是你懒惰,什么事情就喜欢推到明天再说,明日复明日,明日何其多。
对编程本来就不感兴趣,只是出于某些原因如工作需要才去学习的,这样一来,你的动力就显然不足了,要把一件事做好首先你就必须喜欢上这件事,不然你的注意力无法集中,效果自然要差很多。
2.性格:性格的因素是不能忽略的,编程这活儿需要有耐心,而且要沉得住气的,可以静下心来干活。这就是许多编程高手性格都比较内向的原因。并不是说性格外向就好,内向就不好。性格内向的人,会愿意花时间在编程上,而性格较为外向的人,就未必做得到,刚没写几行代码,电话响了,老兄,今晚到哪儿喝酒?哥们,今晚去哪里吃宵夜?放下电话后,你的注意力已经分散了30%;接着一个类还没写完又电话响了,大哥,X月X日某某说搞生日Party,你有何高见?这么一来,你的注意力又分散了50%,仅剩下20%,你这个程序估计无法写下去了。
3.心态:我说过,现在的人最可怕的就是浮躁,不踏实。如果你真想把编程学好,就不要把它当成游戏,而要视为你的事业。
4.方法:有些朋友是真的热爱编程的,而且也下了大决心要学好的,但由于学习方法的错误,导致效率低下,久而久之,信心开始动摇。
5.心理素质:别以为写程序和心理素质无关,其实不然,在编程过程,会经常遇到错误,甚至有时候会让整个程序要重写。有时候我们总认为想法是对的,可是当代码执行时就老是报错,反正就达不到你预期的结果。或者说有时候写一段代码,接连调试了好久,居然还找不到错误。这些情况正是在考验你的心理素质,我见过很多人学编程,开始的时候,信心十足,过不了多久,就放弃了,经受不起打击。
如果真的觉得编程很无聊,很枯燥,那不妨试试下面的做法:
我会经常写一些小工具,要么自己用,要么给别人用,或者在网上以免费软件发布。而这些小程序,一般会解决一些生活中可能遇到的问题。如改变图片分辨率,为图片添加水印等。
也可以做一些有趣的玩意儿,比如,我曾经做过人品测试器。这样既可以实践,又能带来一些乐趣。
编写小工具的目的,一来你不会花费过高的时间成本,二来可以练习练习,多实践。不要认为写小程序“不务正业”,再复杂,再庞大的程序都是可以分解为许多小程序小功能,“一屋不扫何以扫天下”,你连小程序都写不了的话,你觉得你能写大程序的概率是多少?再者,编写小程序可以积累许多开发技巧,原本你不知道XXX方法可以这么用的,但通过编写小程序,你就掌握了它的用法了,以后你再次遇到相似情况,你就可以快速作出反应了。
任何语言的学习都离不开一个过程,那就是亲自写代码、调试程序,在调试过程中理解语法的意义和概念。