coding advise

作为初学者,我过度关注代码的细节,从未去考虑过思路和逻辑,先做什么后做什么没有弄清楚。这是很多入门者都容易犯的错误。从那以后,我就非常注重思路,在写代码前要想好接下来要做什么,完成哪些,有哪些步骤,先做什么,再做什么,最后做什么。
——————————————————————————————————————————————————————————————————————————————

我送给那些整天为选择用什么编程语言而发愁的朋友一句话:“吃饭用筷子,刷牙用牙刷。你不要用牙刷来吃饭就行了。”

——————————————————————————————————————————————————————————————————————————————————
但凡有一种新技术面世,在前期阶段都会出现泡沫的过度膨胀,这也是正常现象,毕竟自发性和盲目性是市场的基本属性,可以理解。一种新的技术出现,也不能说明它会替代现有的任何技术,而更有可能的情况是与现有的各种技术进行融合。
——————————————————————————————————————————————————————————————————————————————————————————
手机应用主要集中在娱乐方面,能否与商业化无缝融合还是个未知数,毕竟可发挥程度有限。在工业生产和商业应用领域,或许与特定设备结合得比较好的嵌入式开发更好,比如电子秤、无线激光扫描枪、医疗设备或其他智能设备等。
————————————————————————————————————————————————————————————————————————————————————————

很关键的一点是,过于在乎代码细节了,完全忽略了思路的重要地位。后来我换了一种学习方法,核心仍旧是以实践为主,不过,不是照抄书上的例子,而是先把例子看完,拿出一张纸,用笔写下例子代码要实现什么功能,第一步做什么,第二步做什么,用到哪些知识,使用了哪些类哪些函数,为什么要用。然后把书合上,就根据纸上写的内容去编程。这种做法有些难度,而且容易出错,不过好处很多,一是挣脱了书本上的示例的束缚,自由发挥空间大,不容易形成定势思维;二是出错了无法通过编译,就会迫使我去主动寻找错误,不知不觉中,我不看书都学会了调试的方法。
————————————————————————————————————————————————————————————————————————————————————

“尽信书者则不如无书”,不应该什么都相信书本上说的,上大学二年级的时候,记得有一位老师说过:“给你这本教材,如果你没把其中的知识学会,那你将非常失败;如果你把书中的知识全部学会,勉强给你合格;如果你看完这本书之后,把书中的内容推翻,那你才是一个了不起的人。”我对这句话印象深刻,或许是因为用这句话来形容我的学习理念很贴切。
——————————————————————————————————————————————————————————————————————————————————————————
很多书其实都是抄袭或翻译帮助文档,比如很多.NET相关的书都抄MSDN上的文档,如果你不相信,你不妨比对一下。

————————————————————————————————————————————————————————————————————————————————————————

学习编程的人分为三种类型:

狂热爱好者,把编程当作事业,当作一种境界。
纯粹为了应付工作需要,浅尝辄止,能满足日常工作即可,不再深入。
业余爱好者,或者仅仅是对写编程感到好奇,只是想泛泛了解一下罢了。

————————————————————————————————————————————————————————————————————————————————————

很多人觉得学习编程很枯燥,甚至学了没几天就想放弃,我曾经做过总结,原因有以下几点:

1.懒:这是一个决定性因素,许多你本想去做而最终又没有做的事,多数原因就是你懒惰,什么事情就喜欢推到明天再说,明日复明日,明日何其多。

对编程本来就不感兴趣,只是出于某些原因如工作需要才去学习的,这样一来,你的动力就显然不足了,要把一件事做好首先你就必须喜欢上这件事,不然你的注意力无法集中,效果自然要差很多。

2.性格:性格的因素是不能忽略的,编程这活儿需要有耐心,而且要沉得住气的,可以静下心来干活。这就是许多编程高手性格都比较内向的原因。并不是说性格外向就好,内向就不好。性格内向的人,会愿意花时间在编程上,而性格较为外向的人,就未必做得到,刚没写几行代码,电话响了,老兄,今晚到哪儿喝酒?哥们,今晚去哪里吃宵夜?放下电话后,你的注意力已经分散了30%;接着一个类还没写完又电话响了,大哥,X月X日某某说搞生日Party,你有何高见?这么一来,你的注意力又分散了50%,仅剩下20%,你这个程序估计无法写下去了。

3.心态:我说过,现在的人最可怕的就是浮躁,不踏实。如果你真想把编程学好,就不要把它当成游戏,而要视为你的事业。

4.方法:有些朋友是真的热爱编程的,而且也下了大决心要学好的,但由于学习方法的错误,导致效率低下,久而久之,信心开始动摇。

5.心理素质:别以为写程序和心理素质无关,其实不然,在编程过程,会经常遇到错误,甚至有时候会让整个程序要重写。有时候我们总认为想法是对的,可是当代码执行时就老是报错,反正就达不到你预期的结果。或者说有时候写一段代码,接连调试了好久,居然还找不到错误。这些情况正是在考验你的心理素质,我见过很多人学编程,开始的时候,信心十足,过不了多久,就放弃了,经受不起打击。
————————————————————————————————————————————————————————————————————————————————————————————————

如果真的觉得编程很无聊,很枯燥,那不妨试试下面的做法:

我会经常写一些小工具,要么自己用,要么给别人用,或者在网上以免费软件发布。而这些小程序,一般会解决一些生活中可能遇到的问题。如改变图片分辨率,为图片添加水印等。

也可以做一些有趣的玩意儿,比如,我曾经做过人品测试器。这样既可以实践,又能带来一些乐趣。

——————————————————————————————————————————————————————————————————————————————————————————————

现在主要用的是C#和C++。能够充分发挥.NET的优点,主要还是开发效率较高,开发工具用起来也比较舒适。在参加工作之前,我也是跟现在一些朋友一样,过分地纠结于平台和语言之间的对比,认为.NET只是拖控件而已,没什么好学的。但参加工作以后我才真正明白,纠结这些东西没有意义,思维会受到阻塞,我前面说过,写程序只不过是一个把我的思想翻译为执行逻辑的过程罢了。最根本最核心的东西还是思路,你有什么样的思路就会有什么样的程序出来。其实换一角度思考,拖控件没什么不好。缩短产品的开发周期,改善开发流程,最大程度提高生产率,难道不是现代生产管理的宗旨吗?

————————————————————————————————————————————————————————————————————————————————————

通常做项目的时候,我不会把时间花在写代码上,而是把更多的精力放在整体思路上,确定思路没有问题了,才会编写代码。就算别人已经为我设计好思路,我还是要去自己分析一下,哪些东西是多余的,不必要的,可以删掉,哪些地方可以换一种想法去做,哪些地方可以变得更简单。化繁为简,用最少的代码实现最多的功能。选用C#是因为我平常写的程序需要它。不过,我始终会坚持使用C++,因为使用C++能让我学到更多的东西,可以说我掌握的绝大部分编程知识都是在学习C++的过程中学到的。应该可以说,C++学会了,其他语言就没有难度了。

————————————————————————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————————————————————————
自学编程,一方面应该选择实例比较丰富的图书,这不仅仅降低理解成本,而且有助于激发学习兴趣;另一方面,应当选择内容比较全面的书,价钱较为便宜那些薄薄的书建议不要购买,比如那些带“XXX简明教程”字样的书,不推荐,那些书不仅不能帮助读者了解某项技术的精要,反而会使读者产生更多的疑惑。
建议购买那些全面且深入的图书,比较厚,价钱也相对较高。不要找借口说没钱去买,我从没见过几个穷到买不起书的人,当然也不一定说非得去买书不可,要学会热爱图书馆,多借一些书看看,有益无害。
我个人看得比较多的书是Wrox系列经典红皮书,这些书都是很著名的畅销书,具有很高的参考价值。同时,我也经常阅读帮助文档的,多角度摄取知识,融会贯通。
————————————————————————————————————————————————————————————————————————————————

编程其实更应该注重思想,写代码只不过是一个逻辑翻译过程,把我的思想转换成计算机指令。故写程序和文学写作是一样的,有明确的主题(目标),清楚的脉络(设计文档和构思)才能做到笔下生花;写程序和习武是相通的,很多人总有一个疑惑,什么样才叫编程高手?什么程度才叫境界?那你不妨想想,什么样的武功才是上乘的武功?什么是武林高手?如果你看过武学电影就知道了,不要以为里面是骗人的,那是真实的,任何艺术作品都是取材于客观世界,影视作品也不例外,编程更是如此。
————————————————————————————————————————————————————————————————————————————————
我会说:“程序无非就两个东西,一个是看得见的(UI),另一个是看不见的(逻辑)。”

————————————————————————————————————————————————————————————————————————————————————————
当你计划要做一个程序的时候,无论是小程序还是大项目,不妨先想一下:
我干吗要写这个程序?
这个程序完成了什么?
程序所完成的任务真的比人们手动操作更有效率吗?更准确可靠吗?
如果我成功完成这个程序,解决了哪些实际问题?
我在写这个程序的时候,可能遇到哪些困难?如果某个难点解决不了,能有可替代方案吗?
使用我编写的程序的人会快乐吗?
我做好这个程序之后会高兴吗?
——————————————————————————————————————————————————————————————————————————————————

不同编程语言之间可以相互渗透,有些时候,在C++里面不理解的东西,可能会在学习C#后反而变得理解了;在C#里面不懂的东西,但学习了Delphi和C++后反倒懂了。我就有过这样的经历,C++的函数指针,当初我是不太懂它是怎么用的,不过,就是在学习了.NET中的委托之后,我不知不觉地学会了在C++中使用函数指针,这就是知识迁移。

——————————————————————————————————————————————————————————————————————————————————————

2010年我接触了Python,这是一门解释性语言,语法简捷而清晰,而且不需要编译,只要安装一个Python的运行环境即可,相比C++来说,用来写一些小的工具还是很方便的。

从语言的执行效率来讲,C++比C#要高很多。但C#对于界面的开发有着很大的优势,这点对于C++来说是一个短板。

我觉得C++和C#的关系应该是互存互惠的一个关系,各司其职,C++适合开发一些对算法要求比较高的系统,而C#应该是朝着快速的方向来发展。
————————————————————————————————————————————————————————————————————————————————————————

对于C++学习,建议大家经常去看一些科技网站,关注一些C++的开源库,这样很多时候就避免了重复发明轮子的过程。而且很多的开源库都有很多商业软件在使用,在效率和可靠性上都是比较好的。所以多了解一些C++的开源库对自己的工作肯定有很大的帮助。 

——————————————————————————————————————————————————————————————————————————————
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值