当前位置: 技术问答>linux和unix
【求助】向两年以上工作经验的前辈请教问题
来源: 互联网 发布时间:2016-12-03
本文导语: 本帖最后由 steptodream 于 2011-05-22 21:58:09 编辑 由于没有做过真正意义上的软件开发,所以想向csdner请教几个心中疑惑好久的问题。 1.linux下环境编程,真的有那么多说道么?就比如说:unix环境高级编程这本书里讲了很...
1.linux下环境编程,真的有那么多说道么?就比如说:unix环境高级编程这本书里讲了很多很多的知识。但是实际工作中真的都会用到么?--》据我所知,好像只有创建线程和信号量这两个用的比较普遍。
2.对于一个很大的工程,base代码大概要几百M 上G的样子吧。大家是如何阅读的呢?大概需要多长时间呢?这个我首先解释一下,有人可能会说,这个东西是不能量化的,因为它涉及到方方面面,这个我承认,在这里我只想知道一个参考值,平均值,我想这个肯定是有的。这个问题困扰了我很长时间。所以希望大家能在这个问题上多多帮助我,不胜感激!我所接触的主要有两种方法:1,跟变量,个人觉得这种方法对于快速解决问题有一点点作用,对于理解代码,属于事倍功半,欲速则不达的类型呵呵~2,就是一步步一个函数一个函数看。有个师兄曾经和我说他的四年经验总结起来,就是在一个工程中,知道哪些代码粗看,哪些代码需要细看。至于其他的一些linux下的东西,他也是几乎小白级别。
3.我的师兄和我说过,他的工作最大的工作量就是bug fix。至于每年的代码量可能只有几K行,一万行左右。因为都是在base 代码的基础上进行修改的。所以我的第三个问题是,是否大部分软件公司都是以改bug为主,工作中需要的主要技能是对大工程代码的理解速度和深度。也就是说快速看懂。
4.最后一个问题可能比较笼统,是最不收人待见的问题--(因为属于等吃现成的)但是在这里还是一并说了吧。自己还是懒惰的。想从事嵌入式linux的工作,那么我现在需要怎么做?希望能通过应用层和内核层两个方面得到解答。前提是通过在工作中提高以外的方式。找个开源的代码学习??还是有其他更好的办法?总觉得单纯看书效果不好,而且一本书那么厚,看完一本书要好长时间,何况一本书是要看几遍才能大概领会其中的内容的,前辈们你们说是这样的吧?
由于自己的语言组织能力有待提高。以上说的比较零散,希望没有影响大家的理解。
希望前辈们能指点迷津。不胜感激!
|
刚毕业时看了点ucos2,发现理解想来很难。
现在工作几年之后,很多当时不理解的东西渐渐理解了。不过之后再也没有看过ucos2了,不是做嵌入式系统。
目前主要做*nix的中间件。
很多基本的东西是相通的,比如操作系统,比如数据结构,比如数学。这些基本的东西要扎实。
看代码确实相当头大,在学习apache和nginx的源码,几十万行是有点让人无从下手。于是我买了书让我快速入门,如 apache全景分析。
当时刚到某公司,面对十万行的代码要快速理解,确实很吃力。
我是先分析各个进程主要工作,然后再分析每个进程是如何启动的,接着分析每个进程的main入口,然后分析其中的主要线程。。。 中间可能要分析很多的数据结构。。。
说得比较乱,因为我也是新手。。 呵呵。
现在工作几年之后,很多当时不理解的东西渐渐理解了。不过之后再也没有看过ucos2了,不是做嵌入式系统。
目前主要做*nix的中间件。
很多基本的东西是相通的,比如操作系统,比如数据结构,比如数学。这些基本的东西要扎实。
看代码确实相当头大,在学习apache和nginx的源码,几十万行是有点让人无从下手。于是我买了书让我快速入门,如 apache全景分析。
当时刚到某公司,面对十万行的代码要快速理解,确实很吃力。
我是先分析各个进程主要工作,然后再分析每个进程是如何启动的,接着分析每个进程的main入口,然后分析其中的主要线程。。。 中间可能要分析很多的数据结构。。。
说得比较乱,因为我也是新手。。 呵呵。
|
1.linux下环境编程,真的有那么多说道么?就比如说:unix环境高级编程这本书里讲了很多很多的知识。但是实际工作中真的都会用到么?--》据我所知,好像只有创建线程和信号量这两个用的比较普遍。
能够解决两个以上问题的书,就是好书了。如果一本书翻完,讲的东西你都懂,这样的书就白看了。看一本书,平时看的时候是翻看,一天内要看完,只需记住这本书的知识点,工作时遇到问题知道翻那本书,就行了。要不然计算机书那么多,就当小说看,一年也看不了几本的。据我所知,创建线程和信号量是工作中最没用的知识。写书的人讲这些知识,是炫耀自己懂得比别人多的。因为别人都不想了解这些知识。
2.对于一个很大的工程,base代码大概要几百M 上G的样子吧。大家是如何阅读的呢?大概需要多长时间呢?这个我首先解释一下,有人可能会说,这个东西是不能量化的,因为它涉及到方方面面,这个我承认,在这里我只想知道一个参考值,平均值,我想这个肯定是有的。这个问题困扰了我很长时间。所以希望大家能在这个问题上多多帮助我,不胜感激!我所接触的主要有两种方法:1,跟变量,个人觉得这种方法对于快速解决问题有一点点作用,对于理解代码,属于事倍功半,欲速则不达的类型呵呵~2,就是一步步一个函数一个函数看。有个师兄曾经和我说他的四年经验总结起来,就是在一个工程中,知道哪些代码粗看,哪些代码需要细看。至于其他的一些linux下的东西,他也是几乎小白级别。
除非脑子出问题了,否则不会有人去读几百M的源代码的,高校教育工作者闲得发慌,可以写一本源码分析之类的书,提高一下知名度。实际情况是,如果你是项目组成员,在一个几百M的项目里面工作,只需要搞懂你负责的模块就可以了,如果是项目经理,还要对项目的整体架构有些了解。微软一个office项目组一千多人,一个版本要搞一年多时间,你拿到这个项目的源代码,当小说看,一辈子也看不完的。
3.我的师兄和我说过,他的工作最大的工作量就是bug fix。至于每年的代码量可能只有几K行,一万行左右。因为都是在base 代码的基础上进行修改的。所以我的第三个问题是,是否大部分软件公司都是以改bug为主,工作中需要的主要技能是对大工程代码的理解速度和深度。也就是说快速看懂。
国内的公司不出意外都是这样,因为改bug的速度跟不上产生bug的速度,统计数据是,一年产生一万行/人的公司,(这种公司本来就很少)每改掉两个bug,就会增加3个bug.
4.最后一个问题可能比较笼统,是最不收人待见的问题--(因为属于等吃现成的)但是在这里还是一并说了吧。自己还是懒惰的。想从事嵌入式linux的工作,那么我现在需要怎么做?希望能通过应用层和内核层两个方面得到解答。前提是通过在工作中提高以外的方式。找个开源的代码学习??还是有其他更好的办法?总觉得单纯看书效果不好,而且一本书那么厚,看完一本书要好长时间,何况一本书是要看几遍才能大概领会其中的内容的,前辈们你们说是这样的吧?
不见得要在工作中才能提高,最好的方式是买一块开发板,自己写程序down下去run,我还没见过哪个专职的代码工人是靠纯看书学会敲代码的。从嵌入式层面来说,应用层和内核层的代码差不多,想学哪层就编哪层的代码down下去试。
能够解决两个以上问题的书,就是好书了。如果一本书翻完,讲的东西你都懂,这样的书就白看了。看一本书,平时看的时候是翻看,一天内要看完,只需记住这本书的知识点,工作时遇到问题知道翻那本书,就行了。要不然计算机书那么多,就当小说看,一年也看不了几本的。据我所知,创建线程和信号量是工作中最没用的知识。写书的人讲这些知识,是炫耀自己懂得比别人多的。因为别人都不想了解这些知识。
2.对于一个很大的工程,base代码大概要几百M 上G的样子吧。大家是如何阅读的呢?大概需要多长时间呢?这个我首先解释一下,有人可能会说,这个东西是不能量化的,因为它涉及到方方面面,这个我承认,在这里我只想知道一个参考值,平均值,我想这个肯定是有的。这个问题困扰了我很长时间。所以希望大家能在这个问题上多多帮助我,不胜感激!我所接触的主要有两种方法:1,跟变量,个人觉得这种方法对于快速解决问题有一点点作用,对于理解代码,属于事倍功半,欲速则不达的类型呵呵~2,就是一步步一个函数一个函数看。有个师兄曾经和我说他的四年经验总结起来,就是在一个工程中,知道哪些代码粗看,哪些代码需要细看。至于其他的一些linux下的东西,他也是几乎小白级别。
除非脑子出问题了,否则不会有人去读几百M的源代码的,高校教育工作者闲得发慌,可以写一本源码分析之类的书,提高一下知名度。实际情况是,如果你是项目组成员,在一个几百M的项目里面工作,只需要搞懂你负责的模块就可以了,如果是项目经理,还要对项目的整体架构有些了解。微软一个office项目组一千多人,一个版本要搞一年多时间,你拿到这个项目的源代码,当小说看,一辈子也看不完的。
3.我的师兄和我说过,他的工作最大的工作量就是bug fix。至于每年的代码量可能只有几K行,一万行左右。因为都是在base 代码的基础上进行修改的。所以我的第三个问题是,是否大部分软件公司都是以改bug为主,工作中需要的主要技能是对大工程代码的理解速度和深度。也就是说快速看懂。
国内的公司不出意外都是这样,因为改bug的速度跟不上产生bug的速度,统计数据是,一年产生一万行/人的公司,(这种公司本来就很少)每改掉两个bug,就会增加3个bug.
4.最后一个问题可能比较笼统,是最不收人待见的问题--(因为属于等吃现成的)但是在这里还是一并说了吧。自己还是懒惰的。想从事嵌入式linux的工作,那么我现在需要怎么做?希望能通过应用层和内核层两个方面得到解答。前提是通过在工作中提高以外的方式。找个开源的代码学习??还是有其他更好的办法?总觉得单纯看书效果不好,而且一本书那么厚,看完一本书要好长时间,何况一本书是要看几遍才能大概领会其中的内容的,前辈们你们说是这样的吧?
不见得要在工作中才能提高,最好的方式是买一块开发板,自己写程序down下去run,我还没见过哪个专职的代码工人是靠纯看书学会敲代码的。从嵌入式层面来说,应用层和内核层的代码差不多,想学哪层就编哪层的代码down下去试。
|
我linux一段时间了,其实文件系统用的也是非常多的,很多权限的问题,apue上都讲的不清楚呢,不过这样的东西比较少。外包可能接触不到核心的东西。如果你要学习的话,可以找下小的开源项目来学习下,这样就了解了一个工程的完整的开发。其实很多大工程也是在小核心上的一步一步的完善而已。通过一个小的项目,对你了解一个工程的形成还是非常有用的啦。
就是一步步一个函数一个函数看。有个师兄曾经和我说他的四年经验总结起来,就是在一个工程中,知道哪些代码粗看,哪些代码需要细看。
说的很对,哪不懂就gdb一下。有的地方看框架,有的地方就要研究细节。
光看书不行,找个开源的项目分析吧。不过你可能没有业余时间。
就是一步步一个函数一个函数看。有个师兄曾经和我说他的四年经验总结起来,就是在一个工程中,知道哪些代码粗看,哪些代码需要细看。
说的很对,哪不懂就gdb一下。有的地方看框架,有的地方就要研究细节。
光看书不行,找个开源的项目分析吧。不过你可能没有业余时间。
|
实x话x实x说,先x找x个x项x目x从x改x代x码x开x始x吧~!
成x长x的x第x一x步x永x远x是x模x仿。
除x非x你x机x会x非x常x非x常好,遇到一个刚刚开始的项目,从新x设x计x编x码。
但是,作为没工作经验的情况下,开发大量的基x础高x效多x复x用的代码,难度还是挺x高的。
成x长x的x第x一x步x永x远x是x模x仿。
除x非x你x机x会x非x常x非x常好,遇到一个刚刚开始的项目,从新x设x计x编x码。
但是,作为没工作经验的情况下,开发大量的基x础高x效多x复x用的代码,难度还是挺x高的。
|
如果想做开发的有几个阶段:
1.开发语言的熟悉,基本上在学校都是学的理论知识,比较空,只有多动手,才能把基本语法和用法熟练,再就是对基础的理解深度。
2.开发工具的熟悉,一般在学习的时候,基本上都是开发语言和开发工具同时进行的,开发工具的话,一般都是工程的配置,和工程相关的基本设置。
3.简单模块的编写,一般对于初级人员,刚才接触项目或者进入项目,最开始都是从小模块开始入手的,开始慢慢了解基本概念,和行业应用;基本上在这个阶段的朋友,一般都是些功能点,对整体框架不是很了解,随着以后工作的深入,会了解越来越多。
4.框架设计和系统设计,基本上这个阶段,对开发流程很熟悉,更多的是关注接口和功能,而不只是纠结具体实现细节上面;
后面的几个阶段就不说了,我现在还理解不了,大师级的;
基本上对刚毕业的朋友来说,开始都比较浮躁,不知道自己到底要干什么,自己的规划和目标要很明确,如果一直徘徊的话,两三年一下就过去了。对于在校学生,最主要的还是把理论学好,再自己有兴趣的可以多练练手,想想为什么要这样做,对自己理解很有帮助;
其实作为一个程序员得话,要了解的东西那是太多太多,随便找本相关书里面介绍的,最后还是自己都要会的,那都是一些基本东西,作为开发的工具。开发最总要的是思想,怎么发现问题,怎么分析问题,最后解决问题。在自己不但学习和提高后,会发现其实在开发思想和流程都大体差不多,只是行业应用不同。
而前面提到的不停的改bug,开发的时间其实不是很长,主要时间花在bug上面。基本上现在开发都是ctrl+c和ctrl+v,现成的东西太多,主要是比较成熟,比起自己写的更稳定,现在很多都不是自己写的,自己把别人的看懂,改成自己想要的。如果自己有时间,可以自己归纳自己的公共库,以后再用起来更加方便和快捷。
1.开发语言的熟悉,基本上在学校都是学的理论知识,比较空,只有多动手,才能把基本语法和用法熟练,再就是对基础的理解深度。
2.开发工具的熟悉,一般在学习的时候,基本上都是开发语言和开发工具同时进行的,开发工具的话,一般都是工程的配置,和工程相关的基本设置。
3.简单模块的编写,一般对于初级人员,刚才接触项目或者进入项目,最开始都是从小模块开始入手的,开始慢慢了解基本概念,和行业应用;基本上在这个阶段的朋友,一般都是些功能点,对整体框架不是很了解,随着以后工作的深入,会了解越来越多。
4.框架设计和系统设计,基本上这个阶段,对开发流程很熟悉,更多的是关注接口和功能,而不只是纠结具体实现细节上面;
后面的几个阶段就不说了,我现在还理解不了,大师级的;
基本上对刚毕业的朋友来说,开始都比较浮躁,不知道自己到底要干什么,自己的规划和目标要很明确,如果一直徘徊的话,两三年一下就过去了。对于在校学生,最主要的还是把理论学好,再自己有兴趣的可以多练练手,想想为什么要这样做,对自己理解很有帮助;
其实作为一个程序员得话,要了解的东西那是太多太多,随便找本相关书里面介绍的,最后还是自己都要会的,那都是一些基本东西,作为开发的工具。开发最总要的是思想,怎么发现问题,怎么分析问题,最后解决问题。在自己不但学习和提高后,会发现其实在开发思想和流程都大体差不多,只是行业应用不同。
而前面提到的不停的改bug,开发的时间其实不是很长,主要时间花在bug上面。基本上现在开发都是ctrl+c和ctrl+v,现成的东西太多,主要是比较成熟,比起自己写的更稳定,现在很多都不是自己写的,自己把别人的看懂,改成自己想要的。如果自己有时间,可以自己归纳自己的公共库,以后再用起来更加方便和快捷。
|
1.找几本好书看看。如果书都看不懂,你还希望看懂代码?
做什么东西都要理论基础的。把技术书当成小说看,几天看一本不是问题吧,看完掌握相关概念,理解某些关键地方就可以了。
2.找个感兴趣的开源的软件,尝试做一些改进,
3. 找个别人没做过的东西,自己觉得有用的东西,作成一个开源项目
我自己也混了好几年了,还在第一步徘徊,最近想看看算法方面的书。
做什么东西都要理论基础的。把技术书当成小说看,几天看一本不是问题吧,看完掌握相关概念,理解某些关键地方就可以了。
2.找个感兴趣的开源的软件,尝试做一些改进,
3. 找个别人没做过的东西,自己觉得有用的东西,作成一个开源项目
我自己也混了好几年了,还在第一步徘徊,最近想看看算法方面的书。
|
没有工作经验的时候,就是找感觉,如何在有限的资源环境下提升能力,
不是看很多书,写很多代码就能实现。我觉得要有一个质进步和飞跃,
很多时候就是把思考习惯和做事习惯养好。公司让你做的是一个点的事情,
你要自己抽时间想这个点所在的线是怎么样的,所在的面又是怎么样的。
看到段代码不光看它做了什么,能做什么,更要看到写出它的人的思绪,思考方式
是怎么样的,高明之处在那,不足又在那!看到一个系统不是光看它界面有多炫目,
要看到系统框架的核心所在,设计思想的精髓有哪些。
不是看很多书,写很多代码就能实现。我觉得要有一个质进步和飞跃,
很多时候就是把思考习惯和做事习惯养好。公司让你做的是一个点的事情,
你要自己抽时间想这个点所在的线是怎么样的,所在的面又是怎么样的。
看到段代码不光看它做了什么,能做什么,更要看到写出它的人的思绪,思考方式
是怎么样的,高明之处在那,不足又在那!看到一个系统不是光看它界面有多炫目,
要看到系统框架的核心所在,设计思想的精髓有哪些。
|
3.我的师兄和我说过,他的工作最大的工作量就是bug fix
其实写代码,很大部分是在调试
其实写代码,很大部分是在调试
|
中真的都会用到么?--》据我所知,好像只有创建线程和信号量这两个用的比较普遍。
2.对于一个很大的工程,base代码大概要几百M 上G的样子
2.对于一个很大的工程,base代码大概要几百M 上G的样子
|
基础很重要,同样的代码,不同的人阅读的效果是不一样的
很多大的工程的确只是fix bug,但有时候也会遇到增加某些模块的问题,
这个时候就体现基础,和代码阅读能力的时候,fix bug你能做,但很有可能,加模块你就做不了了,
要么加的很烂,要么不稳定,要么。。。。
所以,fix bug只是工作中的一个而已,重要的还是基础
很多大的工程的确只是fix bug,但有时候也会遇到增加某些模块的问题,
这个时候就体现基础,和代码阅读能力的时候,fix bug你能做,但很有可能,加模块你就做不了了,
要么加的很烂,要么不稳定,要么。。。。
所以,fix bug只是工作中的一个而已,重要的还是基础
|
1. 《Unix环境高级编程》是经典的好书,有口皆碑,W.Richard Stevens是Unix,网络编程, tcp/ip领域的大师。此书即可以细读,也可以做为工具书,依据个人情况而定。
2. 用source insight建个工程, 说细情况参考我的另一个贴子,我没有找到,也许是论坛有bug,丢了。
3. 工作上尽量避避去外包公司, 纯粹维护别人代码的工作, 这样提升自己很慢,最好是新的项目从零开始。送给楼主四个字:严谨,勤奋。
Linux开发可以参考我的另外一个贴子:http://topic.csdn.net/u/20091228/21/9d77de1e-7100-4033-bd67-2f15063ff24e.html.