软件随想(一)
一天一天,一年又一年,我们到底都做什么,为自己留下了什么,收获了什么,成长了多少,让你记忆深刻的事是什么,让你最兴奋的事是什么,让你最想扇自己的事情是什么,他们的原因是什么。你是否思考的时间比写代码的时间长,每次开发的时候你的功能分析到什么程度你就开始写代码,你修改和重写的次数多吗,是否曾经因为将功能分析得非常透彻而让你很快的把功能搞定。是否经常在没有搞清楚状况的时候就开始写代码,到现在为止你认真看了多少本很好的书籍。你的工作让你兴奋吗?兴奋吗?兴奋吗?
Follow me。C#搞了这么久(快3年了),怎么就是没有成为C#高手,3年了,怎么就没有相对的掌握一门语言,我都做了什么,每天都在干嘛,难道真的是个码农,整天忙碌的对着电脑我到底在干嘛,写重复的代码,按照别人的思路来完成功能,什么时候能对自己说,我要先认真的思考分析,至少要在搞清楚状况的情形下开始写代码,什么时候对别人说:FUCK,我想按照自己的思路来,我已经想了很久了,现在思路非常清晰,而且觉得还不错。
你是否总是在跟着别人的思路走,有意思吗,你有先思考过吗,什么时候能因为你早就知道怎么实现一个功能,且能很快的表达出来,而你的听众告诉你:请说慢点,你那个是什么意思,我还没有搞懂。总做一个执行者我受够了,我有我自己的头脑,我会思考。
多想一下,你会有更好的解决方案。很多时候我们都用了第一个想到的解决方案,他并不那么完美,虽然能满足基本的需求,他可能存在概率很小的BUG,他可能没有很好的扩展性。是的它让你完成了任务,但是你可能少了一次尝试新方案的机会,可能少了一次提高自己的机会,少了一次让自己兴奋和快感的机会,因为我们的大部分编码工作并不是那么的让人兴奋。当你一次次的不满足于第一解决方案时,你会发现:哦,原来,我不仅仅是一个码农,而是码农中码农。
学习当然就离不开书。书是人类进步的阶梯,有了梯子就可搭建第二层第三层。顺便推荐几本书:《代码大全2》(你能看懂,并且收获很多),《Effective C++》(有C/C++基础的C#程序员可以看看,这本书讲的都是写C++代码的准则,通过这本书你会明白++i的效率高于i++,字符串相加到底分配了几次内存,和C#有点不一样,多维数组是怎么实现的,还有内存管理和面向对象设计的一些理念),《CLR via C#》(C#程序员必看书籍,有家大公司公司用行动证明了这句话,除了算法题其他的都是这本书上的)。
属于自己的实战。很多东西我们是学来的,有时候真的不确定是否正确,但有一句话我认为一定是对的:尽信书,不如无书;纸上得来终觉浅,绝知此事要躬行。有些时候有必要自己去证实一下,比如有人说《软件随想录》这本书是陈太汉写的;有人说if else的效率比if高;有人说lambda的效率低,我就觉得lambda的效率比我自己写的代码效率高啊。那到底lambda的效率高不高呢,你用Reflector看一下源码不就知道了,写一些代码PK一下不就知道了。Reflector还真是个好东西,通过它你可以知道你一直在用的类和函数是怎么实现的,你可以知道微软的程序员是怎么写代码的,有了源码你还怕你学不会一个新特性吗,你还会怕有一段时间没有用了而忘记吗,你还怕别人问题你会不会用XXX吗,你还怕你不鄙视别人这样问你吗,你还怕你会进入这么问题的面试官所在的公司吗?你还真把我当码农啊,会不会用!(妈的,为什么高中作文的最后一段非要写这么烂的排比句才能拿高分,别问我为什么,实战证明的确如此)。
受够了实践,我要理论一下。为什么在我没有实践的情况下老师要教我那么多理论,他们在教我们空中花园是怎么回事,它是多么的美丽,会为我们带来什么好处便利。天啊,我不会飞,连梯子都不会搭,你总跟我说些云里雾里的东西,你到底有什么企图。现在我有自己蹩脚的梯子了,我想上一层,我要做第二层,第三层。。。谁来教我。我现在会用工具了,我有实践的经验了,我想把房子做得更好点,我更需要的是经过实战的理论。由于思考得比较少,总是在码代码,自己完全感觉不到,至少在一两个月内很难感觉到自己在进步,但是如果你有足够的实战,然后在看看一些经典的书籍,你就会有豁然开朗的感觉,在感觉书很好的同时,高兴的心情也让自己觉得自己进步了。
没有搞清楚状况按兵不动。你是否经常在没有搞清楚状况的时候就开始写代码,你是否经常在没有搞清楚状况的时候就发表言论,我会,但我很不喜欢这样的自己。我很欣赏林彪,要么不开口,一开口1,2,3,4,5,6,7,8;说得你目瞪口呆,服服帖帖,哦!原来是这样的啊。当你发现“哦,原来是这样的时候,你是修改你的代码还是重来一遍”。爱因斯坦有句名言是“思考,思考,再思考”。难道他真的是用一支笔搞出相对论的吗,NO,NO,NO,是思考。当然我们也不是用电脑搞出程序的,你懂的。
360度转弯,委婉待续……
以上仅代表陈太汉个人观点
作者:陈太汉
博客:http://www.cnblogs.com/hlxs/