| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
11年前发布

程序员谈学习:我为什么要学习Linux?

好长时间没好好写点东西了,前段时间由于项目的需要出差了一个多月,期间各种加班,每天晚上加班到十点,回到宾馆实现是没什么精力再写博客了。有 时间能静下来写点东西总是很好的一件事,如果写技术方面的博客,不仅能给读者提供一些解决问题的线索,也能加深自己对技术点的理解,如果写的是自己对项目 的感悟,也算是对自己所做的工作的总结。现在终于有时间写点东西了,感觉还是不错的。

  今天这篇博客不是写关于具体技术的,而是我对程序员怎样学习和提高自己能力的一些感悟。我是今年7月初毕业的,离开学校后就直接进入之前实习的 公司上班了。现在算来工作了也将近半年了,算上实习的时间,将近一年了。在这期间,参与了几个android项目的开发,也维护过别人写的项目,虽然都不 是很大的项目,但也学习了不少东西。在这其间,我亲身经历了一个设计拙劣的项目,是怎么样一步步趋于混乱而最终变的完全不可维护。从这件事情我了解到优秀 的程序员是多么可贵,而“不优秀”的程序员是怎样把项目一步步的搞砸搞烂,也了解到做出一款优秀的软件是多么的困难。什么样的程序员才算优秀的程序员,而 什么样的程序员是“不优秀”的?(我不愿意说别人坏话,只能委婉的说“不优秀”)作为一个工作不到半年的新人,谈论这个问题好像没什么权威性可言, 我也只是简单的谈论一下自己的看法,鉴于自己的阅历和经验不是很丰富,难免具有局限性,读这篇文章的读者可以指出我的错误。

  我认为,优秀程序员和不优秀程序员的区别首先是态度上的区别。优秀的程序员有自己的理想,他们想做出好的东西,而不是混混日子而已,他们思考很 多,不管是项目开始之前还是在项目进行中,项目完成之后也会进行总结。他们对待问题比较严谨,思考比较全面,在动手写代码之前肯定经过了一定的思考,对可 能引入的问题进行预估。而不优秀的程序员对待问题比较随意,也就是态度上不是那么认真,代码写的也比较随意,从不考虑以后的变化因素,今天吃饱不管明天肚 子饿,他们不会意识到他们的代码已经污染了整个项目。在发现问题时,优秀的程序员总是想办法弥补,他们会找出自己的代码写的不好的地方,谨慎的修改或大胆 的推翻重写,这样的话把问题消灭在萌芽阶段而不会让整个项目偏出正轨。而不优秀的程序员,很少能发现问题,即使能发现问题,也是迟迟不肯做出弥补,他们总 是侥幸的认为这些问题不会在后期暴露出来,所以问题越积越多,最后导致整个项目混乱不堪,错误百出,无法维护。

  除了态度上的不同,在能力上也有很大的差别。显而易见,优秀的程序员懂得比较多,他们乐于深入研究原理,对底层的知识有一定的了解或者了解的很 透彻,而不只是停留在调用一个API;而不优秀的程序员一般不喜欢思考,对原理的兴趣也不多,他们不愿意花一些时间把一些问题搞明白,而只是简单的调用一 下API,如果解决不了问题,随便在网上搜一段代码复制过来就万事大吉。所以遇到比较难缠的问题,优秀的程序员总是能从原理出发,一针见血的看出问题的真 正原因,进而解决问题,而不优秀的程序员总是停留在表面,在网上搜了很长时间也没有解决问题。我深切的认识到,如果只是停留在调用API而不深入原理,永 远也用不好API。

  除此之外,优秀的程序员的另一个特点是善于并乐于学习,他们对自己所从事的工作有浓厚的兴趣,有强烈的好奇心,他们总是想把问题弄明白,他们喜 欢清晰,而不是迷迷糊糊的感觉。对一个人的进步起决定性作用的因素是刻苦的学习,而不是所谓的“经验”。就像有人说的那样,在公司里工作不会使你成为大 牛,只有持续的学习才能让你有长足的进步。现在很多招聘职位要求有几年的工作经验,这是最容易让人误导的。工作时间长的就能力一定强吗?举个例子,有两个 清洁工,一个干了十年,每天还在默默的工作,而另一个只干了几天,经过自己的思考发明了一个新的工具或方法,让他的工作事半功倍。所以说,工作经验是很虚 的东西,他用时间来计量,一个人工作了5年,他可能在5年中每天都学习进步,也可能一个经验用了5年而没有什么实质性的提高。

  扯了这么多,好像和题目没什么关系。现在扯点和题目相关的。作为一个搞Android应用开发的,我为什么要学Linux呢?我工作中又不会写 Linux程序,再说Linux内核博大精深,代码海量,关系错综复杂,学习Linux内核肯定要耗费大量的时间和精力,那我为什么还要学呢?在说这个问 题之前,先谈谈我对学习的看法。

  在学习一个东西之前,出于保险起见,我们总是会询问别人的意见,而在这些意见中,总是会有人说学这个干什么,工作中又用不到。如果谁给了你这样 的建议,那么你一定要小心,因为基本上可以断定他是一个不爱学习的人。有很多东西,不是因为你“感觉”有用才学它,而是学了之后才能知道它有用。我的一位 朋友是做C#的,他在业余时间学了Perl,当时学的时候总是有人认为没有用,但是当他学会之后,可以使用Perl强大的文本处理能力,去整理格式混乱的 源码文件,可以写个程序自动的给领导发邮件。还有我大学的一位老师,年轻时因为英语比较好,被单位派去美国,获得了深造的机会,回来后做了我们学校的物理 系主任,很多人也认为英语没有用,呵呵。我进入公司实习的时候,看了设计模式,在我翻看《Head First设计模式》时,被一个有经验的同事看见了,他告诉我看设计模式没有用,因为我们的项目是不会用到设计模式的。我不知道这是什么逻辑。反正当我看 完设计模式之后,真的被这些设计巧妙而又极具实用性的模式所震撼,在以后的项目中,我大量使用了这些模式或者设计原则。所以如果一个工作了两三年或者更长 时间的程序员还没有学习过设计模式,我会深深的鄙视他,认为他不是一个真正的程序员。

  我上大学时学习了Java语言,当时还费了不少劲。基本的语法比较熟悉了之后,还是感觉到有些东西总是糊里糊涂,不够清晰,比如说不知道反射是 怎样工作的。所以找了《深入Java虚拟机》来看,当我看了两遍这本书之后,感觉到原来不清晰的地方都显得自然而然,知道了class文件结构是怎样的, 类是怎样被加载的,指令是怎么样被执行的,方法是怎样被动态绑定的。这些知识对我有很大的帮助,假如我不学习Java虚拟机,只是单纯的写Java程序, 即使写上10年,也不见的比我现在对Java的理解更透彻。

  说了这么多,只是想说学习是有用的,大大的有用。一个经验用5年并不等于有5年的工作经验,一个不学习的程序员是不会有什么发展机会的。所以, 对于一个Java程序员,还分不清对象和对象的引用,对于一个iOS程序员,还分不清ViewController到底是MVC中的视图还是控制器,那么 没错,你该学习了,该静下心来好好巩固一下基础了。

  最后,来到正题。我为什么学习Linux内核?首先,我对Linux有很深的兴趣和好奇心,我喜欢专研一下。从实用性出发,我可能一辈子都没有 机会编写Linux内核,也可能一辈子都不会从事Linux驱动开发相关的工作,但是我知道它对我是有用的。能进一步加深对操作系统中概念和实现的理解, 对底层的深入理解,能让我打下扎实的基础。一些新技术其实都是架构在基础的东西之上的。基础牢固,以后再学习什么新技术都会水到渠成。有人可能会反驳,说 学习底层的东西没用,优秀的程序员应该专注于设计,项目管理或架构等上层的知识,我的观点是,设计、项目管理或架构等上层的知识和底层的知识一点都不冲 突,不懂底层的人,基础不扎实,在上层也不会走的顺畅,设想一下,如果没有深厚的基础知识,你怎么能知道自己架构出来的东西能不能实现呢?

  写到这里文章就写完了,由于比较困,可能写的有些散乱,在最后总结一下这篇文章的主要观点。

  总结:

  1. 我们要做优秀的程序员,不要做“不优秀”的程序员;

  2. 学习是有用的,如果有人给你的建议是学XXX没用,那么你可要当心;

  3. 底层的知识和高层的知识不是不能相容的,真正优秀的程序员应该两者兼顾。

来自:http://blog.csdn.net/zhangjg_blog/article/details/17621339

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1388572991203.html
程序员