飞道的博客

【“天才”必经之路】只需一年时间,从编程小白成为同事们敬仰的编程大神

428人阅读  评论(0)

  编程是什么?也许每个人都有不同的见解。

  有人认为编程是一份工作,也有人认为编程是一种爱好,甚至有人认为编程是此生追求。其实,编程就是编写程序。
  首先,从“编”字分析,它既可以表示编写,也可以表示按一定的原则、规则或次序来组织或排列。但,都离不开思考。
  “程”字,它既可以表示工程,也可以表示行进的距离。但,都离不开执行。

  简单来说,编程就是不停的思考,不停的执行。

编程与做别的事情相同,没有执行捷径,只有思考的方式不同。


章节预览:

1. 成功案例
2. 为自己定制一个小目标
3. 提升“绝对力量”
4. 分析每一次“执行”
5. 你已进入“天才”领域


章节内容:


1. 成功案例

  说起编程界的“天才”,我们首先想到的就是Linus Torvalds。
  linus Torvalds的成名之作是我们熟知的linux内核,在它的基础上诞生出许多著名的操作系统,比如:Slackware、Debian、RedHat、Fedora、Ubuntu、LinuxMint等。

  linux从初期被人们了解,到中期被人们熟知,甚至到后期占据绝大部分内核江山,都离不开linus Torvalds的宏伟目标。接下来,我们一起了解linus Torvalds的成长之路:

  上世纪八十年代,Unix开始向商业化方向发展,大部分学生由于支付不起昂贵的授权费用,不得不停止相关的研究。1987年,荷兰有一位大学教授编写了一个类Unix的应用系统并命名为Minix,用于教学使用。Linus Torvalds起初接触Minix是为了学术研究,接触一段时间发现Minix一些设计观念与自己的理解存在一些差异,但是他不能轻易修改和发布该系统的源码(由于Minix的许可证等问题)。

  1991年,Linus Torvalds为当时新推出使用Intel 80386微处理器的计算机开发了一款全新的操作系统,并命名为Linux。

  期初,Linus只是在自编写的内核中植入gcc编译器和Shell。由于Linux完全遵循GPL协议主题,发布到互联网后得到强烈的反响,很快吸引了众多开发者、黑客对其代码进行修改和维护。

  Linux内核从发布到现在经历了4个大版本以及众多小版本更新,linux发行版也从Slackware最初发布到后来的Debian、RedHat、Fedora、Ubuntu、LinuxMint等等。

  上述故事中,我们可以分析出一个关键字,就是“成长”。Linus Torvalds刚开始只是为了学术研究,迫不得已编写自己的内核,内核发布后,发现许多人面临同样的问题,这也让他萌发了新的思想——与大家一起完善这个内核。就这样,linux内核从初期只能编译、执行简单程序,到后来一步一步走上正规化,这些都离不开思想“成长”。

  其实,并不是只有伟人的想法可以称为思想,我们每一个人的想法都可以称为思想。思想既表示我们未实现的想法,也可表达为我们未来的目标。

  有想法是件好事情,它寄托着我们对成功的向往。接下来,我们为自己定制一个小目标,每一次实现都代表着我们在前进、在成长,并离成功更近一步。 然后我们通过数个小目标,完成我们的远大理想。

2. 为自己定制一个小目标

  为自己定制一个小目标很简单,可以是学会几个单词,也可以是学会一门语言的基本类型,甚至可以是理解一篇文章。
  目标越细越好,也更容易实现,它更能激发我们求知的欲望。因为目标过大,容易使我们退缩,甚至放弃。而目标过小,太容易实现,无法从中得到“成就感”。


  定制目标应根据自己的实际情况做决定,定制目标的原则可以分成以下三步:

    1. 预算一周或一个月能够完成;
    2. 目标分成多部分执行,执行中如果发现某一部分走不通或太难实现,应修改这部分计划甚至重新定制目标。
    3. 目标每一部分足够细致,至少在定制过程中每一步在脑海中都能走通。

  生活中,我自己也不停的定制新的目标,执行过程中也遇到不少弯路,好在及时纠正,没有造成过多的影响。


  我从正式入职工作到现在也接近五年了,这几年也跨越了几个领域,虽算不上光辉事迹,但也作为大家的参考对象,分析一下:

  1. 刚入职时,我是一个编程小白,未使用过VS2008编译器,基本的调试都不会,迫于工作压力,第一个月硬着头皮向同事求助,在他们的帮助下,第一个月我学会了调试程序、发布程序,并且学会了分析结构和结构中的代码含义。
  2. 入职两个月,我习惯了厚脸皮,也习惯了与他们打闹嬉戏。那段时间里,我有了较大的进步,甚至能写出令他们头疼的代码。
  3. 入职三个月,我具有了独立编写新项目的能力,硬是在接下来的一个月里,使用QT写出了工作一年才能写出的项目,并且也得到了领导赏识,后来让我做了C++项目负责人,并管理四位成员的代码。
  4. 入职一年多,通过大量阅读文章和参考书籍,让我有很大的进步,并通过<STL之双向循环链表(List)的内部关系>这篇文章,正式开始业余作家之路。
  5. 入职两年多,那段时间里我接触了不同领域的代码,比如DSP、DMA,甚至FPGA代码我也会参考一下。那一年我也学习了windriver,用于Windows下的驱动编写和理解。后来开始使用Linux系统,接触Linux驱动,并在一个月后编写出了字符驱动。
  6. 入职三年多,先后编写了几个不同硬件的Linux驱动,并做到Windows、VXworks、Ubuntu的驱动思路互通,以及下位机的编写。后来,带领团队自主定制安卓系统,从最初的4.4.4版本在模拟器里执行,到后来的6.0.1版本成功移植到我们的硬件板卡中。这期间实现了许多功能,比如IOS风格定制,小程序排列在屏幕中间位置,去除各种无用部件,单屏双显,陀螺仪坐标定位,开机动画修改,framework框架修改等。
  7. 入职四年多,定制linux内核,增加硬件适配,使用设备树控制基于芯片的相关硬件等。也在GitHub发表了一些原创,比如胸章设备支持中文等。

  私下里,我一直保留着写博客的习惯,每一篇文章都记录着我的成长经历,这些经历包含着我心酸的往事、也包含着我对编程的激情。

 以前的经历从现在来看,都很轻松、随意,但也是我曾经做了好多努力才做到的,这段经历也是我曾经头疼的经历。

  最近这段时间,我自己编写的书籍也篇目过半了,我还在继续为我的以后定制着计划。

  任何大的目标都是从一个小目标,甚至是一件小事情做起,只有经历过了才明白其中的艰辛和“成就感”。

3. 提升“绝对力量”

  绝对力量不是任何负面因素,它代表我们的编程基础。


  编程基础非常重要,日常编码中,我们的每一行代码都由它们组成。刚开始,我并不看重基础知识,因为那时候靠想法编程,几乎是异想天开的想法。但经过一次又一次的打击才发现,基础知识深厚才能编写出优质代码,现在我更愿意按照基础知识编程,因为这样的代码更可靠,也更容易理解。

  后来,为了学习基础知识,我参考了大量书籍,每一本都非常认真的分析,每当遇到难点都用铅笔或水笔记录在笔记本内。

  再后来,基础知识稳定后,参考任何书籍或任何代码都非常轻松,跨平台、跨语言也可以很快上手。
  使用基础知识,可以让我轻松分析透STL中每一份完整代码,比如Vector,map,List等,也可以让我分析透甚至编写出每一个设计结构,比如二叉树、红黑树,甚至我自己编写一个多容器框架。

  2018年,我通过自己设计的内存池、红黑树、List,结合在一起做出了一个智能框架,设计它的目的是为了突破多线程中读写的限制。比如在我自己设计的内存池中缓存数据,通过红黑树平衡数据,并通过List储存或删除数据,达到数据同时读取和写入完全不用加锁。但最后还是失败了,那时候能力还是不足,只能在少量数据中做到同时读取和写入不用加锁,大量数据时,则会出现数据错误。当然,以后有时间也许我会重新设计这个结构。

  基础知识对于我们的代码来说非常重要,不能为了快速提升自己的能力而忽略基础知识,毕竟少走弯路才是最快的路径。

4. 分析每一次“执行”

  编写程序的精髓在于每一次失败,每一次失败都会发现很多不足之处,也许是设计思路不对,也许是内存管理不到位导致,也许是算法使用不当。
  编写过程中,代码执行结果在意料之外也是常事,不能因为结果不对就否认这份代码。遇到这种情况,首先要做的就是冷静下来,然后仔细分析容易出错误的代码范围。当然,能调试的情况下,尽量调试代码,错误的出现可能是一个条件的优先级问题,也可能是数据未对齐,或是数据溢出,也或是数据访问越位。这几种情况我们通过眼睛很难观察出原因,只有通过不断的调试,一次又一次的分析数据结果来判断问题所在,调试分析也是最省时间的一种方式。

  我在设计新结构时,也遇到过眼睛无法检查出的错误,比如之前写完全随机加密算法。我分析了每一个函数,每一个循环结构甚至是每一条语句,都没有检查出错误。后来调试中想起来,四个字节数据向一个四字节单位位移,如果前三个数中有负数,将会得到一个错误数值。根据这种情况,每次位移时都增加了“&”运算,确保数据的准确性。

  坦然面对每一次失败,并总结出失败的原因,是我们成长的路上不可缺少的因素。

5. 你已进入“天才”领域

  上述2、3、4中,每一条如果你都能做到,或者都能处理好,那么恭喜你,你成功进入“天才”领域。

  所谓的“天才”都是通过日积月累的练习,不断的突破自己,最终脱颖而出。

  生活中,如果你是一个仔细的人可能会发现,那些看起来笨笨的人经过一段时间的努力,都会有惊人的进步。其实,这部分人并不笨,他们只是更相信自己,更愿意通过自己的实践来证明事情的对错。因为自己努力得到的结果,比别人口头说出的结果更准确。
  几年前,我和普通人的想法一样,认为高手就应该比别人更聪明,比别人更强。但这几年努力后发现,高手不愿意与别人比较,他们更愿意与自己比较,突破自己才是正确的方向和目标。


转载:https://blog.csdn.net/a29562268/article/details/104704992
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场