养成自我检查的习惯

如何正确看待秋招要学习的东西?
对于一个开发人员来讲,最重要的能力是使用某种编程语言解决特定的问题。比如使用C语言写一个简单的文件系统。
但是,仅仅靠学完了语言的语法就能写出一个文件系统吗?答案当然是否定的。

仅仅学习语法是不够的,如果上边的例子没有代入感,一时难以理解,可以想想自己在刷算法题的时候,自己能够驾轻就熟地利用自己掌握的语言的语法,AC掉每一个题目吗?显然是不能。

掌握了语法不代表能干活,这句话并不是在贬低编程语言语法,相反,造成这种原因,恰恰彰显了编程语言语法的强大之处。因为它的设计需要应对多种场景的需求,所以不得不把所要提供的功能一般化。其实理论上讲,汇编语言才是能够干掉一切的语言,但前提是得有很牛皮的汇编语言工程师来做这个事情。高级语言提供了很多新的特性,但这并不是说,低级语言不能提供这些特性,只是这些特性需要低级语言工程师自己去手动实现,比如,使用C实现C++的面向对象机制,完全没有问题,但是对C++程序员来讲直接拿来可用的东西,在C程序员面前成为了负担。Linus大神相比C++更喜欢C,我觉得对于Linus大神这种神级别的人物,他自己完全可以用C实现他想要的特性,而不是非得借助C++这样一个语言。然而大神是大神,对于我这种小菜,还是老老实实学习C++吧,因为让我自己用C去实现C++面相对象特性,那还不得bug百出么。

正是基于“学完编程语言的语法并不代表就能写出有用的软件”这样一个事实,才有了数据结构,算法,这样的内容。还有一些特定领域的问题加相应数据结构和算法的课程,如操作系统、数据库。

我以前总是觉得写某种语言的代码很无聊,没有技术含量。就选择了与之相应的对立面去学习。但是学着学着,就觉得,写这种语言的代码同样无聊,没意思。因此就考研了,两年之后,基于种种原因,没有选择继续攻读博士。因此又开始面临找工作的问题,还是得重新拾起代码。

我之前被某老师的一句话影响较深,就是各种程序员觉得自己多厉害,无非不就是各种调API吗?有什么值得称道的呢?
现在看来,我觉得他说的不对。当然必须承认,有些人的工作就是无脑地调API,确实没有什么值得骄傲的。但是还有很多很多人,他们选择合适API进行使用,构建起一个个软件的大厦。前者是会被公司内部逐步筛掉的,而后者,则是留下来的金子。

其实编程的本质,就是定义数据结构和以及在其上的一组算法。在这基础上,会有一层设计层面的考虑,再往上的内容,我就不知道了。正常情况就是我们都希望写的基本模块的运行效率能够很高,因为只有真正的运行起来,才能考虑下一步优化整体设计。
我目前只能感觉到算法和数据结构是影响软件运行的重要因素,此外,正确的拆解业务逻辑,进行合适的类设计,也是影响软件运行的重要因素。我在实习的时候一个最重要的感受就是这,因为自己拆解不了业务逻辑,很难将业务问题顺利转化成编码问题,进而用代码解决。
不要质疑为什么基本模块也需要设计,因为不管多么基本的代码都需要良好的设计,哪怕只有一个cpp文件,也得弄清楚每个变量应该放在静态区、堆区还是栈区。同样的一个问题,水平高的人写出来的代码异常简洁,水平一般的人写出来的代码臃肿繁杂。

一般来说,编码就是用各种已有的库完成软件的设计。现在的我也想象不到,那些写leveldb和caffe的人是如何解决问题的。所以接下来谈的都是我能想象得到的情况。
由于人是不可能不犯错的,所以,自己不能期待自己刚编译成功的新鲜出炉的软件是bug free的, 所以要做好自己代码的测试工作.我在实习期间,同宿舍的学长跟我说,他写代码,每个函数都要测试一遍。而我在实习的时候则是想着终于写完了,我自由了,完全没有这样静下心来仔细测试自己的code。对自己的代码没有一点责任心。可见我跟这位学长之间的差距。

自己总是有一种赶紧写完代码赶紧自由的心态。可能是因为自己在写算法题的时候,总是写完之后就等着提交,看自己写得对不对所养成的毛病。对自己的代码没信心的话,去碰运气靠OJ的反馈看自己程序正确与否是不行的。这样对了很兴奋,终于干掉一个题目,错了之后,如果OJ不给出错的测试点的详细信息,那剩下的只有抓狂了。

自检是很重要的一个习惯。从小被要求,做完题目要验算,考试时写完卷子要检查,然后到了大学到了研究生,这些东西全忘了。

做完一件事,写完一篇文章,写好一份代码,一定要养成自我检查的习惯。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值