什么是编程?或许每个人都有不同的看法。有人认为编程是一份工作,有人认为编程是一种爱好,甚至有人认为编程是一种人生追求。其实编程就是写程序。首先,从“编辑”一词来分析,它可以是写作的意思,也可以是按照一定的原则、规则或次序组织或安排的意思。但是,这离不开思考。“程”这个词既可以表示工程,也可以表示行进的距离。但是,它离不开执行。简单来说,编程就是不停地思考,不停地执行。编程和做其他事情一样,没有执行捷径,只是思维方式不同。成功案例说起编程界的“天才”,我们首先想到的就是LinusTorvalds。linusTorvalds的成名作就是家喻户晓的linux内核,许多著名的操作系统都是在它的基础上诞生的,例如:Slackware、Debian、RedHat、Fedora、Ubuntu、LinuxMint等。从被人们所熟知早期,到中期家喻户晓,乃至后期占据大部分内核,Linux离不开LinusTorvalds的宏伟目标。接下来,我们来了解一下LinusTorvalds的成长之路:20世纪80年代,Unix开始向商业化方向发展,大多数学生因为负担不起昂贵的许可费用而不得不停止相关研究。1987年,荷兰一位大学教授编写了一个类Unix应用系统,并命名为Minix,供教学使用。LinusTorvalds最初接触Minix是为了学术研究。接触一段时间后,他发现Minix的一些设计理念与自己的理解有些出入,但又不能轻易修改发布系统源代码(由于Minix许可证等问题)。1991年,LinusTorvalds使用Intel80386微处理器为当时崭新的计算机开发了全新的操作系统,并将其命名为Linux。一开始,Linus只是在自己编写的内核中植入了gcc编译器和Shell。由于Linux完全遵守GPL协议的标的,一经发布到网上便引起了强烈的反响,很快就吸引了众多的开发者和黑客对其代码进行修改和维护。Linux内核自发布以来经历了四个主要版本和许多次要版本更新。Linux发行版也从Slackware发布到Debian、RedHat、Fedora、Ubuntu、LinuxMint等。在上面的故事中,我们可以分析一个关键词,那就是“成长”。LinusTorvalds最初被迫编写自己的内核只是为了学术研究。内核发布后,他发现很多人都面临同样的问题,这也让他有了新的想法——和大家一起改进内核。如此一来,linux内核在早期只能编译执行简单的程序,然后一步步逐步走向形式化,这一切都离不开思想的“成长”。其实,不仅伟人的思想可以称为思想,我们每个人的思想也可以称为思想。思想表达了我们未实现的想法以及我们未来的目标。有想法是好事,它寄托着我们对成功的向往。接下来,我们给自己定一个小目标。每一份成绩都意味着我们在前进,在成长,在向成功靠近。然后我们通过几个小目标来完成我们的远大理想。为自己定制一个小目标为自己定制一个小目标非常简单。可以是学几个单词,也可以是学一门语言的基本类型,甚至可以是看懂一篇文章。目标越详细越好,也越容易实现。它可以激发我们的求知欲。因为目标太大,我们很容易退缩,甚至放弃。而且目标太小,太容易实现,你无法从中获得“成就感”。定制目标应根据您的实际情况决定。自定义目标的原则可以分为以下三个步骤:预算可以在一周或一个月内完成;目标被分成多个部分执行。这部分计划甚至重新定位。目标的每一部分都足够详细,至少定制过程中的每一步都能在我的脑海中走一遍。在生活中,我不断地给自己设定新的目标,在执行的过程中也遇到了很多弯路。还好我及时改正,没有造成太大影响。正式入职已经快五年了,这几年跨越了好几个领域。虽然算不上什么光荣事迹,但也可以给大家做个参考。白,我没用过VS2008编译器,基本调试都不会。第一个月迫于工作压力,我硬着头皮向同事求助。在他们的帮助下,我在第一个月学会了如何调试和发布程序,学会了分析结构和结构中的码义。进公司两个多月来,我已经习惯了厚着脸皮和他们一起玩。那段时间,我进步很大,甚至写出了令他们头疼的代码。入职三个月后,我具备了独立编写新项目的能力。接下来的一个月,我用QT写了一个工作一年才能写出来的项目,得到了领导的赏识。后来,我被要求做C++项目负责人,管理四个成员的代码。入行一年多,通过阅读大量的文章和参考书,有了长足的进步,通过《STL双向循环链表(List)的内部关系》一文,正式开始了我的职业生涯作为一个业余作家。我已经工作两年多了。那段时间接触过不同领域的代码,比如DSP、DMA,甚至FPGA的代码。我也会提到他们。那年我也学了windriver,用来写和理解windows下的驱动。后来开始使用linux系统,接触了linux驱动,一个月后写了一个字符驱动。入行三年多,编写过多种不同硬件的Linux驱动,实现了Windows、VXworks、Ubuntu驱动的互通,以及下位机的编写。后来带领团队独立定制Android系统,从最初在模拟器中执行的4.4.4版本,到后来的6.0.1版本成功移植到我们的硬件板上。这期间实现了很多功能,比如IOS风格定制、小程序排列在屏幕中间、去除各种无用部分、单屏双显、陀螺仪坐标定位、开机动画修改、框架修改等。工作四年多,定制linux内核,添加硬件适配,使用设备树控制基于芯片的相关硬件等。还在GitHub上发表了一些原创,比如徽章设备支持中文等。私下,我一直保持着写博客的习惯。每篇文章都记录了我的成长经历。这些经历包括我悲伤的过去和我对编程的热情。从现在看以前的经历,很轻松,很随意,但是我付出了很多努力才实现的。这段经历也让我很头疼。最近写的书已经写了一大半了,还在为自己的未来做打算。任何大目标都始于小目标,甚至是一件小事。只有经历过,才能明白其中的艰辛和“成就感”。提高“绝对力量”绝对力量不是任何负面因素,它代表了我们编程的基础。编程基础非常重要,我们的每一行代码在日常编码中都是由它们组成的。一开始,我并没有太注重基础知识,因为那时候按idea编程几乎是异想天开的想法。但是一次次的敲打之后,才发现只有深厚的基础知识才能写出高质量的代码。现在我更喜欢根据基础知识来编程,因为这样的代码更可靠,也更容易理解。后来为了学好基础,我查阅了大量书籍,每一本都分析得很仔细,遇到困难就用铅笔或钢笔记录在本子上。后面基础知识稳定之后,随便参考什么书,什么代码,都非常容易,跨平台跨语言快速上手。运用基础知识可以让我轻松分析STL中的每一个完整代码,比如Vector、map、List等,也可以让我分析甚至编写每一个设计结构,比如二叉树、红黑树,甚至自己写一个多容器框架。2018年我把自己设计的内存池、红黑树、List结合起来做了一个智能框架。设计它的目的是为了突破多线程中读写的限制。比如我把数据缓存在自己设计的内存池中,通过红黑树来平衡数据,通过List来存储或者删除数据,这样就可以在不加锁的情况下同时读写数据。但最终还是失败了。当时能力还不够,只能在不加锁的情况下同时读写少量数据。当数据量很大时,会出现数据错误。当然,以后有时间我可能会重新设计这个结构。基础知识对于我们的代码来说是非常重要的,我们不能为了快速提升自己的能力而忽视基础知识。毕竟少走弯路才是最快的路。分析写程序的每一次“执行”的本质在于每一次失败,每一次失败都会发现很多不足之处,可能是设计思路错误,可能是内存管理不当,可能是算法使用不当。在编写过程中,意外的代码执行结果很常见,不能因为结果错误就否定代码。遇到这种情况,首先要做的是冷静下来,然后仔细分析容易出错的代码范围。当然,如果你能debug,尽量调试代码。错误的发生可能是条件优先级的问题,也可能是数据未对齐、数据溢出或数据访问越位。我们很难用肉眼观察这些情况的成因。只有通过不断调试,反复分析数据结果,才能判断出问题所在。调试分析也是最省时的方式。我在设计新结构的时候,也遇到过肉眼无法察觉的错误,比如之前写了一个完全随机的加密算法。我分析了每个函数、每个循环结构甚至每个语句,但没有检测到任何错误。后来在调试的时候想起来,四字节的数据被移位到一个四字节的单元。如果前三个数字中有一个负数,则会得到一个错误值。根据这种情况,对每一个位移都加上“&”操作,以保证数据的准确性。冷静面对每一次失败,总结失败的原因,是我们成长中不可或缺的因素。你已经进入了上面的“天才”领域,如果你能做到以上每一项,或者你能很好的处理好,那么恭喜你,你已经成功进入了“天才”领域。所谓“天才”,就是通过实践的积累,不断突破自我,最终脱颖而出。在生活中,如果你是一个细心的人,你可能会发现,那些看似愚蠢的人,经过一段时间的努力,也会取得惊人的进步。其实这些人并不傻,他们只是更相信自己,更愿意通过自己的实践来证明事情的对错。因为自己努力得到的结果,比别人说的更准确。几年前,我的想法和常人一样,认为高手应该比别人聪明,比别人强。但是经过这几年的努力,我发现高手不愿意和别人比,他们更愿意和自己比,突破自己才是正确的方向和目标。文渊网络仅供学习使用,如有侵权请联系删除。关注微信公众号:Python圈,领取Python基础、爬虫、框架、数据分析、机器学习等资料。
