Chinaunix

标题: Linux/UNIX系统编程,系统程序员成长的基石?(获奖名单已公布-2014-2-17) [打印本页]

作者: send_linux    时间: 2014-01-09 10:04
提示: 该帖被管理员或版主屏蔽
作者: hellioncu    时间: 2014-01-09 12:00
1、您在Linux/UNIX系统编程行业的经历及经验
我早先做Windows下的开发,后来逐渐转为以Linux/UNIX系统为主。虽然操作系统不同,但很多思想、技术还是一样的。架构是关键,实现很重要。

2、Linux/UNIX系统编程职业生涯的发展探讨
相对于Web、手机等,Linux/UNIX系统编程技术变化较少,不用不停的追逐新技术,可以做得比较深入,是可以做得长久的。当然“云”的流行,也会带来一些挑战。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
技术基础要扎实,忌好高骛远
作者: timespace    时间: 2014-01-09 15:31
还没参与过这类活动啊,今天抽空回复下

1. 您在Linux/UNIX系统编程行业的经历及经验
最开始在Sun Solaris下开发电信相关的业务,后来转入互联网行业,后台服务端开发是基于SUSE Linux,接着又在CentOS开发,而自己的电脑是Mac OS X(从10.6起就是根正苗红的认证UNIX了)。虽然这些系统都不尽相同,但作为系统编程必读参考书,20多年前的APUE和K&R C依然能发光发热十分坚挺,其实Linux/UNIX系统编程的基石就从来没有动摇过。

2.Linux/UNIX系统编程职业生涯的发展探讨
从职业生涯来看,系统编程处于进可攻退可守的最佳位置,是内核与应用的桥梁。
向上可以做各种应用软件,但又不至于只会用框架或第三方库,别人说epoll/kqueue网络接入能力很NB,你虽然没看过内核代码,但用过select/poll吧,从API用法来看,select/poll是无状态的所以开销大,再一想其实当大量连接都比较活跃时,它们的效率都半斤八两。
向下可以做内核开发,毕竟曾经很接近它了,你熟悉内核向用户提供服务的接口,从接口出发更容易理清逻辑,就像看其他程序代码先找main函数一样。
系统编程经历是职业发展的重要资本。

3.对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
很多技术万变不离其宗,尤其是Linux/UNIX系统编程,关键是先要搞好这个“宗”,对新手来说看书始终是提高的好办法,而太多推荐资料会吓死人,所以只要真正看懂APUE和K&R C(运行调试书中“过时”的代码也是学习的关键),你就不再是新手了。至于其它,不存在什么捷径,专注和重复就OK了。

作者: xike2002    时间: 2014-01-09 16:26
本帖最后由 xike2002 于 2014-01-09 17:47 编辑

好活动,必须支持茂哥!

1、您在Linux/UNIX系统编程行业的经历及经验
答:做linux下的开发好多年了,称得上是linux行业的一个老手了,但算不上个高手。
在这里和大家分享一下我的经历和经验,欢迎大家批评和讨论。
(1)编程思想很重要。不管你在windows下编程还是在linux下编程,其实编程思想是一致的,这就是软件设计的思想。
对于新手来说,他们很少会考虑到编程思想方面的事情,他们的目标就是实现功能,而对于实现功能之外的东西,包括
易用性、健壮性等东西基本上不会考虑的。因为我当年也是从这一步走过来,这只是在说一说当年的亲身体会。当然软件
设计的思想不是一天两天就能够形成的,但是你必须从一开始就培养自己的这种软件编程的设计思想。
(2)选择哪种编程语言其实不重要。很多程序员新手在选择编程语言的时候往往会陷入犹豫之中,不知道该选择C、还是
JAVA,或者是其它编程语言呢。其实选择任何一个都没关系的,只是方向不一样罢了。我一直是在使用C做开发,但是随着
工作的不断进行,慢慢的使用脚本语言的频率越来越高。其实脚本语言的强大是出乎我意料之外的,记得当年刚参加工作
时一位前辈告诉我,在linux下,能用程序实现的东西,几乎都可以用脚本语言来代替。
(3)好的师傅很重要。如果能够在子行业生涯初期遇到一个好的师傅,这简直是一件多么美好的事情啊,当然你也不能完全
把自己的成败完全寄托在一个好的师傅身上,因为自身的努力也是非常重要的。

2、Linux/UNIX系统编程职业生涯的发展探讨
答:职业生涯规划对于很多新手来说是意见很难的事情。因为很少有人能够在职业生涯初期就把自己的整个职业生涯规划好。
职业生涯规划其实是一个不断完善的过程。下面我来谈一谈我的亲身经历。
(1)团队氛围很重要。加入一个好的团队和加入一个差的团队的区别是相当大的。好的团队会帮助你迅速的成长,能把一个
新手变成一个高手。而一个差的团队能够毁了一个高手。
(2)转型也很重要。在合适的时间,你应该考虑岗位的转型。因为你可能当一辈子的程序员的,在技术达到一定的级别的
时候,你可以考虑做方案。


3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
答:前面已经说了很多了,该说的差不多已经都说了。
我想说的是努力学习的同时需要不断的思考。
努力不一定会成功,但是不努力一定不会成功。
最后引用一句前几天总结会上领导说的一句话:所有的伟大都是时间的函数。
作者: 2009532140    时间: 2014-01-09 16:28
就是感觉不方便...
作者: crazyhadoop    时间: 2014-01-09 16:30
本帖最后由 crazyhadoop 于 2014-01-21 00:00 编辑

1.  断断续续的也有4年的Linux系统开发了,从开始的玩具小程序,到今天每天数亿访问请求的应用开发,也算是成长了很多,这里面有血有泪啊,不过也是一行一行的代码敲过来,一个一个方案的做测试,除了业务的发展推动,另外一个非常重要的基石就是实实在在的看了那么几本书,基本快翻烂了,只有实践才能真的知道在各种服务压力之下,性能的瓶颈在哪里?改进的空间在哪里,改进的方向在哪里。学而不思则罔,思而不学则殆。如果只看书不在各种环境下实践,无法知道自己所学有多大的威力。如果没有书的指导,可能无法游刃有余的理清思路,探索方向。真是那几本宝典指导了我如何去做。

2.现在看起来做移动端的可能比较火热,但我想说的是,其实无论现在什么发展最火,服务端永远是充满挑战的地方,现在的服务挑战性相比较以前更大了,各种大数据,高并发,可以做的事情也更多了。这对个人的要求也越来越高,但是实际上用到的知识还是Linux系统开发的那些基础知识外加一些高效的数据结构。原来的进程可能只在一台机器上,现在分散到多个机器上而已。小处着手,做的工作更细致了。打好基础,就可以坐等万丈高楼平地起了

3.

这本书可以说是相当实用,极力推荐,我看过一部分英文章节的内容。感觉很赞。既可以当参考书又可以当教材。这本书比高级UNIX环境编程(apue)更适合学习*nix的系统编程。
首先这本书非常详尽,比apue更适合入门,作者的例子也多。更容易实际操作,用以练习,难度循序渐进,不像apue有点高大上。每个章节分的比较清楚。可以按序阅读,也可以按需阅读。语言简练,条理清晰,代码示例简单明了,新手可以轻松敲打代码,试验效果。这本书读敲下来功力应该是相当了得了。
作者: wuchow    时间: 2014-01-09 17:11
不懂,来看看
就当学习吧
作者: liu1061    时间: 2014-01-09 17:37
看过一些这本书的英文版本,记得它是amazon上五星级的图书,被liunx/unix工作者大力推荐的好书,也是一本非常好的书,和APUE是一对好伙伴。在linux工作多年,算不上什么高手,但是有一点,就是很多时候在liunx学到的东西可以一劳永逸,不像window上的技术,变化多,跟着学习都学不过来。总之一句话,liunx直得程序员去花时间学习,它就想vim一样会让你体验都无穷乐趣。
作者: tempname2    时间: 2014-01-09 23:45
1、您在Linux/UNIX系统编程行业的经历及经验
       大一暑假买了APUE,断断续续到大三下学期才看完。毕业后从事更底层的开发工作,还算是按步就班走过来的吧。

2、Linux/UNIX系统编程职业生涯的发展探讨
       系统编程还没有一个很好的定义吧。我的理解理解是,有最大的灵活度控制资源、只依赖于操作系统与基本库的抽象
       的编程。从市场职位情况上考虑,用大白话说,可能就是服务器后端开发。与之相对的是各种Java/Python/Ruby项
       目,特征是抽象层次高,基本跨平台。这也是系统编程给人靠近底层感觉的原由。

       如果坚持一路走下来,职业生涯与其它方向并无二致。如果仅将此作为过渡的话,后期职业生涯的选择倒挺多。系统编程
       正好卡在中间,可上可下。现在互联网如火如荼,越上层反倒越吃香。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?

      o 有全局观,认清层次。语言层(标准),库层,系统层(API),平台层(ABI)。
      o 学一门动态语言;不要瞧不起Java之流。
      o 掌握一点内核知识,但求流程,无需细节。
      o 不要错过开源宝库。
      o 保证自己的代码量。
作者: forgaoqiang    时间: 2014-01-10 02:50
本帖最后由 forgaoqiang 于 2014-01-24 13:24 编辑

非常佩服精通Linux/Unix系统编程,不但对操作系统要有了解也有很深的C/C++水平,当前也只略微看过《Linux程序设计 第四版》,大部分工作还停留在使用shell来完成的水平上,虽然经验不错,也分享下自己的拙见,顺便围观CU大牛。

1、您在Linux/UNIX系统编程行业的经历及经验

从大学开始,使用Linux系统有6年左右了,大多数时间都在使用而不是开发。最近也开始写一些简单的小程序,以满足定制的产品的需求。一开始使用shell进行简单的操作,后来遇到性能和保密的问题(有点猥琐,C语言编译后的确是比明文的Shell安全很多),开始使用C语言进行重构。
大多数操作都是文件系统中文件的读写,字符串的操作,然后进行Socket通讯,只会这一些也不敢说懂Linux编程。
大多数时间都在OpenWRT上做开发(可以理解成Redhat精简版本,是个路由操作系统),上面的C标准库虽然不完整,但是基本的函数还是能够正常使用的,配合专有的UCI(Unified Configuration Interface)可以快速高效的读写配置文件。
网络数据传输采用了JSON的编码方式,配合openwrt上的 jshn 工具(json编解码C程序),数据编码传输问题也解决了。
现在对Linux系统上基本的文件读写、字符串的操作比较了解,以后可能会考虑使用C++来做。


2、Linux/UNIX系统编程职业生涯的发展探讨

Linux/UNIX系统因为其开源的特性,很多需求完全可以通过修改源码或者自己进行编写,这一方面无疑非常的便利。而且对于国内的程序员或者开发公司来说,大量的开源项目也是吸引他们的重要原因,很多需求只要找到一个合适的开源项目,然后去研究一下,少量修改定制就能够成为自己的产品,因此个人认为Linux上的编程还是非常有前途的。
至于Linux/UNIX系统编程来说,主要面向系统本身的功能进行编程开发的话,可能需求没有那么强烈,这些工作完全可以等待Linux开源社区来完成,然后加以利用。
因为Linux系统编程本身并不需要完全理解Linux内核,也不需要完全弄明白系统是如何工作的,在其提供的大量的开放API上进行“二次开发”即可,难度也不是太大。、开源的路由操作系统都在快速发展。极路由等厂家也是采用了Openwrt这样的linux系统然后在其上进行开发。Linux/UNIX系统编程职业生涯的话要往某个方面进行精细发展,精通于特定领域而不是范范整个系统各方面的内容。



3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?

①找本好些的书吧,以前我看得是《Linux程序设计 第四版》,感觉还算是不错,各个方面都有涉及,前几章也对shell进行了概述性讲解,后面对系统各个模块进行了讲解,也涉及到mysql这样开源数据库的开发,现在来看这本新书《Linux/UNIX系统编程手册(上、下册) 》也是非常不错的选择。
②多看些Linux本身以及其实用工具的源码,这些都是精挑细选,几乎无法再优化的经典之作。比如当时我看grep的源码的时候就感到惊叹,本以为这么强大的工具肯定有庞大的代码量,后来发现里面很多精妙的设计,查看优秀的程序设计源码真的能快速提高自己的编程思想。
③多做些笔记吧,除了传统的学习笔记要按照功能/类型划分,也要整理自己的代码库,形成专属代码库,不是每一次每一个功能都需要从头写的,需要的话快速找到自己需要的函数封装,后期能够快速完成开发。
④能找个“高手”做指导最好了,我当时完全自己生硬的缓慢学习,很多时候一个简单的问题网上查找半天,甚至多日后才突然明白,这样学习起来太痛苦也太没效率,要是有个师傅带,一定要珍惜。


作者: shuihan0739    时间: 2014-01-10 09:15
tlpi 这书看了一个多月了,还只到1/3的样子.看得好慢啊,上班没事的时候看看
作者: send_linux    时间: 2014-01-10 09:20
shuihan0739 发表于 2014-01-10 09:15
tlpi 这书看了一个多月了,还只到1/3的样子.看得好慢啊,上班没事的时候看看


都已经开始看了,欢迎有新的体会发表出来和大家分享分享
作者: to407    时间: 2014-01-10 09:51
终于翻译好了, 这么久了...
作者: send_linux    时间: 2014-01-10 10:50
to407 发表于 2014-01-10 09:51
终于翻译好了, 这么久了...

哈,上次那个沙龙兄弟去了么?
作者: tojk    时间: 2014-01-10 11:24

1. 您在Linux/UNIX系统编程行业的经历及经验
一直从事系统管理,运维的工作,对于系统编程应用的并不多,但多年的工作经验使我知道,Linux/UNIX的系统编程非常重要,即便对于运维来说也是一样。现在正在学习这方面的内容。

2.Linux/UNIX系统编程职业生涯的发展探讨
Linux/UNIX系统编程是从事Linux/UNIX相关工作的基础,而不论是从事运维还是系统集成开发都是一样,这方面的基础扎实,今后的工作才能更顺畅。
Linux/UNIX系统编程是职业发展的重要砝码和资本。

3.对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
Linux/UNIX的编程学习虽然很累,但却很值得,一定要下大力气来攻克它,对今后的发展益处多多!

作者: qingduo04    时间: 2014-01-10 11:36
路过,支持,楼盖的很快啊!
作者: JackNorton    时间: 2014-01-10 11:55
1、您在Linux/UNIX系统编程行业的经历及经验
在Linux/Unix开发项目:
1.基础层面,首先要掌握一门编程语言,最好比较熟悉,语言是相通的,只是表现形式不一样而已, 这样就能举一反三。曾经用C开发过一个项目,在这个过程,对于Makefile文件的灵活运用,gdb灵活调试都至关重要。
2.高效执行层面,如果编写的程序能基本上能够运行了,那就要考虑效率问题,在linux/Unix 下开发,一般都用于服务器程序,在服务器上运行的程序面对巨大的访问量,能否能保证高效的运行,这是必须的,就要考虑程序优化,采用相关算法,多线程、缓存等等。
3.软件工程思想层面,编程意味着实现一个软件,软件就必须要有几个特性:稳定性、跨平台、易扩展、方便调试等等。这些概念在一开始编程就应该要有,比如高内聚、低偶合之类的,也就是软件好的建筑房子一样要成体系。

2、Linux/UNIX系统编程职业生涯的发展探讨
Linux/Unix由于免费,吸引一大批人去使用,又是开源软件,技术大牛都乐于研究,可以说未来的发展是光明的。
Linux/Unix所做的这一切都可谓是卧薪尝胆,希望有朝一日在PC上使用量超过Windows,作为职业生涯来说,人个觉得开发一些Linux/Unix 下的良好应用可能会是以后的趋势所在。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
谁都是从新手开始的,我也是新手。
首先,安装一个Linux/Unix系统,有一个感性的认识,了解里面的目录、文件管理、用户管理、权限使用等等,有基本的了解;
然后就是看一看《linux内核设计与实现》这本书,讲的是内存管理、进程与中断、用户管理等等的具体实现,讲的是原理,这样就能了知道运行原理。
一般到这个步骤就可以了。
如果是做嵌入式、驱动开发就必须要看一看更深入的书了,深入linux内核、linux内核编程之类的书,这些书我没有看过,如果要与底层打交道的话,那这些是必须的。
学习linux/Unix的好处就是你能充分分挥你的想象,针对一个问题你得有明确的解题思路,比如灵活使用bash或者正则表达式,这些就是很深入,很能发挥想象空间的东西,坚持下去吧,你会喜欢上它的。

最后,十分喜欢《Linux/UNIX系统编程手册》,因为从事的职业就是在linux/unix下编程,我想这本书会给我很多的启发 ,也真心想得到这本书,继续学习。。以上评论只是个人观点,如有雷同,纯属巧合,如有不同,望不吝赐教!
作者: to407    时间: 2014-01-10 12:37
回复 14# send_linux


    去了啊~~  
作者: 肥头大呆脑    时间: 2014-01-10 13:16
1、您在Linux/UNIX系统编程行业的经历及经验
    一开始在培训机构学的windows环境下C++编程,MFC以及linux shell脚本编程等。后来进入华为外包,就开始搞unix/linux环境下编程,写的代码主要功能就是读文件、做统计、生成报表等。一开始Makefile什么的都不会写,把自己写的代码文件加到编译脚本里面就OK了。后来开始慢慢的用到多进程、文件锁、信号、信号量、共享内存等linux的东西。当时做的东西需要支持多个平台,包括HP-UNIX、AIX、HP-Itanium、Linux等平台。现在就一直在做Linux环境下的服务器开发,无外乎网络通信、多线程等。
2、Linux/UNIX系统编程职业生涯的发展探讨
    越来越多的服务器使用linux操作系统,做Linux系统编程不会没饭吃吧。但要吃的还算体面、吃的好,还需要在其它方面多下功夫吧。
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
   我也只是入门。不过我看到不少的人,他们在做linux下的开发,写的代码却完全不知道用linux环境的一些特性。使用linux下的一个很简单的系统调用就搞定的事情,却费老大劲写了一大堆代码,性能又差。做linux程序员,APUE还是要认真看看吧。
作者: seufy88    时间: 2014-01-10 16:32
这本书不错。终于有中文版了
作者: justin12zhu    时间: 2014-01-11 00:52
1. 您在Linux/UNIX系统编程行业的经历及经验
大学的时候有门选修课,叫《网络编程》,老师指定的参考书是APUE和两卷UNP,可惜当时对unix的使用都并不熟悉,更别说是编程了,结果只能靠PPT撑过了考试。但是阴差阳错,在毕业后,我被公司安排去做unix后台程序开发,于是乎linux/unix成了我每天必须接触的东西。为了工作,重读APUE,UNP,从最简单的IO操作开始学习,到进程管理,到多线程,IPC到socket,再到服务器编程范式,APUE和UNP成了我入行的启明灯和枕边书。
当然,系统编程除了要学会API的使用外,还需要学会其他工具的使用,例如编辑器vim,工程管理的autotool,cmake等,编译器gcc,llvm,调试器gdb,检测内存泄漏的valgrind等等,还有一大堆其他跟踪和分析工具。
所以,要进入unix系统编程行业,一般好的参考书会令你事半功倍。可惜W.Richard Stevens英年早逝,很多新知识在APUE、UNP中都无法得到更新,而这本书正好填补了这个空白。

2.Linux/UNIX系统编程职业生涯的发展探讨
随着硬件的发展,脚本语言在性能上有了很大的突破,在服务器开发的地位也逐渐变得重要,这使得有些人开始叫嚣linux/unix系统编程不再重要,没前途了。但是在我看来,linux/unix系统编程不仅没有地位不保,反而变得更加重要,像mysql,像nginx,像libevent等,很多的取得很高评价的项目正是把linux/unix系统编程做到了极致。

3.对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
linux/unix系统编程是一个很有挑战性的事情,需要入门难,但却很值得学习。在学习过程中,你会体会到Unix系统中一切皆文件这个设计思想的魅力,会体会到什么叫做less is more和kiss,这是在做windows开发中无法体会到的。虽说入门难,但是并不是高不可攀的,只要能够下得了决心安装一个linux,哪怕是在虚拟机上,你就已经踏出了第一步,在学会简单的开发工具和环境的使用之后,剩下的就是看一本好的参考书,跟住书走,边看边做练习,掌握linux/unix系统编程不会太难。只要有兴趣,你还可以找出linux的源代码,深入了解其具体的实现,代码面前了无秘密,这才是linux/unix编程最大的魅力所在。
作者: beyondfly    时间: 2014-01-11 02:00
1、您在Linux/UNIX系统编程行业的经历及经验
    刚毕业做Linux方面的技术支持工作,当时公司的产品分为服务器端和终端,都是采用Linux操作系统,其中服务器主要为SUSE,客户端主要为uclinux。后面做Linux系统工程师工作,对Linux系统有了更多的认识,如包管理机制,Linux中最主要的包管理机制rpm是由于的制作,维护。rpm信息的意义等。Linux操作系统具体的启动过程。慢慢也在Linux下面做一些开发工作,使用的语言为gtk+python。

2、Linux/UNIX系统编程职业生涯的发展探讨

     学习Linux系统编程,对于操作系统会有更多的认识,可以更清楚的知道操作系统是怎么运行的,这些思想对于实际应用程序的开发会有很大的帮助作用。如果想从事嵌入式的开发,或是Linux内核的开发,都会有很大的帮助

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
      首先熟悉一个Linux发行版,不论是redhat或是ubuntu,熟悉vim的使用,makefile的编写等。其实,把APUE给吃透,接下来就可以进行Linux系统编程了。
  
作者: niao5929    时间: 2014-01-11 10:56
昨天<蝴蝶效应>这本书,发现里边在说到自组织系统的其中的第一个条件就是系统本身必须是开放的.而自组织系统其实就是有生命的.LINUX系统本身的开放性可以更好的来让每个人的需求和想法逐步的成为现实,同时linux因为自由和开源,所以可以自由进化。局部的进化如果取得突破,那么全局会向该局部靠拢,产生蝴蝶效应,局部进化的失败也不会对系统产生灾难性的后果.因为全局总是向更好的方向进化!!那种坏死的局部会逐步的从全局中剔除!!!LINUX可以是玩具,也可以是严肃的管理层人员认为的计算机系统.但不论从那一方面看,它的自由和开放导致的自适应性已经非常完美的让他成为我们这个世界上软件技术中最重要的一股力量.我们的智慧正在以算法的模式通过自由开源软件以人工智能的形式被更高的设备实现!!借用REDHAT张先民老先生的话:未来重未如此开放。
作者: susemm    时间: 2014-01-11 16:55
1、您在Linux/UNIX系统编程行业的经历及经验
最早做VxWorks开发,后来转做嵌入式Linux开发,可能由于posix的关系,感觉差别不是特别的大,再后来慢慢做了一些GTK程序的开发。
man是个很不错的工具,可以从里面找到大部分你想要的信息。

2、Linux/UNIX系统编程职业生涯的发展探讨
不管是往上层走还是往底层走,系统编程的经验都是一个很好的基础。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
注意积累;
学会记笔记,现在的很多笔记软件都挺不错的;
学会不断的总结,过一段时间后对前面的积累的东西做一个归纳总结。


作者: CUTianrui007    时间: 2014-01-11 17:24
1、您在Linux/UNIX系统编程行业的经历及经验
开始接触Linux系统编程是从嵌入式Linux入手的,那时移植Linux到ARM芯片上,并为其写驱动程序。后来,工作以后,自己动手修改Linux内核,纯粹是为了乐趣,从中学习OS的知识,另外,也突发奇想,在内核中实现一些Windows的东西,这个比较有意思。不管是否成功,最重要的是加深了对Linux和Windows的理解。同时,也接触到了一些Linux下的逆向工程问题。

对比Windows下编程,其实它们都是OS,都是一个标准,只是实现思路不同,所以我一向是Windows和Linux一起学习,正向逆向一起学习,前后贯通,综合对比,发现OS中最本质的东西。编程本身最重要的是其后面的思想,理解了它,什么Windows,Linux都是浮云。
举个例子,我们都知道fork函数,创建一个新的进程,这个函数的实现方式和Windows的创建进程CreateProcess其实现思路完全不一样,fork的基本思路是先复制再修改,而Windows下的CreateProcess则可以说是,从天而降,一个完全的新的进程,所以Windows要提供一个跨进程操作以实现对新建进程的设置,而Linux下则不允许这样做。当然,你如何从这一点而认为,Windows的安全性天生就不如Linux,也还可以吧。

我是从一个函数调用时连出入栈操作都不知道的人,发展到现在阅读Linux内核源码,就是按照上面的一路走过来的。(不要拍,我只是对OS有兴趣,我不是牛人)

2:Linux/UNIX系统编程职业生涯的发展探讨
不得不说,Linux系统编程难度大,广度和深度都是Windows所不及的。现在市场上Linux系统编程主要集中在嵌入式系统,内核移植及服务器维护方面。深入学习Linux系统编程是对操作系统的一个极好的理解方式。单从钱的方面来说,Linux下的编程绝对比Widnows下编程要profitable的多,毕竟难度和收入是成正比的。另外,系统编程的前提是对Linux系统必须深入理解,从这个角度来说,Linux的系统编程要比应用编程职业生涯顺利得多。
另外,就是不以Linux系统编程为业,学点这方面的知识也是很有必要的,它有助于你对运维,对OS的深入理解。
另外,现在Linux在桌面领域占有量也在上升,对系统编程来说,也是个好事。Android还是基于Linux的呢。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
A:一定要有兴趣,兴趣是最好的老师
B:一定要参加社区或论坛,经常与同行交流,否则,你会觉得很没有成就感。毕竟:独学而无友,则孤陋而寡闻。
C:一定找到好的参考书,现在Linux的书多如牛毛,但是一定要选择经典,比如毛德操的书,没几本,每一本都是极好的。另外,Linux内核四大金刚,那是必须的。看垃圾书,不是在浪费时间,是在浪费生命。
D:一定要动手写代码,比较有意思的形式是自己修改内核,在内核做实验。
E:一定不能忽略硬件,我一直有个体会:CPU是硬化的OS,OS是软化的CPU,一定要对CPU硬件本身进行深入研究,知道其寄存器设置的原理,知道硬件背后的OS机制,只能这样才能更加深入理解OS和CPU及其间联系。
举个例子:我们都知道,中断后,CPU会向堆栈中存储CS,SS,IP等寄存器,形成的一个Frame,参考Windows的实现机制,你就会发现,它刚好提供了一个结构体_KTRAP_Frame,结构体最后几位就是CPU自动存储的这几个寄存器。
kd> dt nt!_KTRAP_FRAME
   +0x000 DbgEbp           : Uint4B
   +0x004 DbgEip           : Uint4B
   +0x008 DbgArgMark       : Uint4B
   +0x00c DbgArgPointer    : Uint4B
   +0x010 TempSegCs        : Uint4B
   +0x014 TempEsp          : Uint4B
   +0x018 Dr0              : Uint4B
   +0x01c Dr1              : Uint4B
   +0x020 Dr2              : Uint4B
   +0x024 Dr3              : Uint4B
   +0x028 Dr6              : Uint4B
   +0x02c Dr7              : Uint4B
   +0x030 SegGs            : Uint4B
   +0x034 SegEs            : Uint4B
   +0x038 SegDs            : Uint4B
   +0x03c Edx              : Uint4B
   +0x040 Ecx              : Uint4B
   +0x044 Eax              : Uint4B
   +0x048 PreviousPreviousMode : Uint4B
   +0x04c ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD
   以下几个由push操作,通过代码填充
   +0x050 SegFs            : Uint4B
   +0x054 Edi              : Uint4B
   +0x058 Esi              : Uint4B
   +0x05c Ebx              : Uint4B
   +0x060 Ebp              : Uint4B
   以下几个都是由硬件自动填充的
   +0x064 ErrCode          : Uint4B
   +0x068 Eip              : Uint4B
   +0x06c SegCs            : Uint4B
   +0x070 EFlags           : Uint4B
   +0x074 HardwareEsp      : Uint4B
   +0x078 HardwareSegSs    : Uint4B
   +0x07c V86Es            : Uint4B
   +0x080 V86Ds            : Uint4B
   +0x084 V86Fs            : Uint4B
   +0x088 V86Gs            : Uint4B

作者: 奋斗的小牛    时间: 2014-01-11 20:01
书名是什么?回复 6# crazyhadoop


   
作者: fire_cpp    时间: 2014-01-11 21:13
没做过系统编程方面的事。但从前学过一本linux/unix系统编程的书,真的感觉受益很大,可以从更深层的角度来理解这个系统,对运维、应用软件开发、甚至是网站开发都有好处。建议每个系统管理人员、这个平台的开发人员都学一点。
作者: superwiles    时间: 2014-01-12 03:17
这书翻译这么久,总算出了,  豆瓣上都吵了很久了阿,  呵呵
翻译质量如何啊
作者: flike    时间: 2014-01-12 09:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: Nan_Xiao    时间: 2014-01-12 15:07
(1) 您在Linux/UNIX系统编程行业的经历及经验
我是2006年研究生一年级时开始接触Linux系统编程的,当时是因为我实习的公司用到Linux。后来自己在业余时间看了一些系统编程方面的书,还实现了一个简单的网络协议。通过研究生这两年的经历,算是对Linux/UNIX系统编程有了一个入门。2008年研究生毕业后,并没有从事Linux/UNIX系统编程的相关工作,而是做手机MMI程序的开发。2010年来到现在这家公司,才又重新开始Linux/UNIX系统编程的工作,目前我主要在Solaris/Linux系统上从事通信网关和服务器程序的开发。通过这些年的经历,我觉得从事Linux/UNIX系统编程最大的益处就是可以获得很多计算机底层系统的知识。举几个例子来说:通常我们都使用gcc编译器编译程序,我们需要了解一些常用编译选项的含义,因为有可能一个编译选项就会导致程序不按你的想法运行;程序不可能没有bug,也许我们需要gdb帮助我们详细了解程序的内存布局,去找到原因;有时程序在一个处理器上运行的好好的,而在另一个上面就不行,此时我们可能又要去了解处理器结构和汇编语言。总之,作为一个底层软件工程师,需要不断地学习计算机最底层最核心的技术,这是件很快乐的事情。

(2) Linux/UNIX系统编程职业生涯的发展探讨
最近几年,随着移动互联网的兴起,前端技术越来越受到大家的重视,而底层技术似乎现在的关注度并不高。我个人觉得Linux/UNIX系统编程知识是程序员的重要基础,无论你从事什么方面的开发,了解系统编程知识和原理,对你是有百益而无一害的,Linux/UNIX系统编程也永远不会被淘汰。所以,我们这些Linux/UNIX系统编程工程师需要做的就是不断学习,提高自己的技术能力。

(3)对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
我并不是一个资深的工程师,以下是我个人的一点经验和体会,希望给大家一点启示吧:
首先要调整好心态,现在是个浮躁的社会,所以要尽量着让自己静下心来,踏踏实实地去学习技术。
第二就是多实践,经典的技术书籍很多,可是光是阅读,效果并不好。要试着自己写一些代码,这样会加深印象。
第三就是多读好的开源代码。现在github上有很多的优秀代码值得我们学习。拿著名的NoSQL数据库Redis来说,看完Redis的main函数,我们就可以了解到如何创建一个deamon进程了,此外我们也会从中学到如何写个好的高并发服务器程序,如何访问文件系统等等。

以上是我的一孔之见,希望能给大家一点帮助吧。

作者: cjdao    时间: 2014-01-12 17:43
1、您在Linux/UNIX系统编程行业的经历及经验
   参加工作不觉已有4年,个人从事的工作勉强算嵌入式开发吧,处于刚入门的水平。刚好年底,总结一下。
懵懂无知之期:
   刚刚毕业的时候,仅仅用过在单片机上用C语言写一些极其简单的跑马灯程序。那时候以为所谓的计算机技术,大抵不外如是吧--用C语言控制控制硬件管脚。软件的唯一用处就是按照硬件设计的逻辑,做一些简单的拼凑。毕业后加入了现在的公司参加工作,那时候linux是什么都全然不知,更别提在其上进行软件开发。机缘巧合的是,公司的项目需要,不得不去接触linux。还记得将一个项目代码移植到另一个项目,面对着makefile满脸的茫然,于是只能硬着头皮照猫画虎的改,结果可想而知--杯具。
开始了解linux:
   在项目开发中屡屡遭遇挫折后,开始有了一种迫切去了解linux的需求。于是便从读书开始,第一本书是<鳥哥的 Linux 私房菜>,通过这本书,也算是对linux有了一非常感性的认识,然后通过<跟我一起写 Makefile>了解了软件编译系统的构造,接着就是啃APUE这个大部头,还有就是啃另一个个大部头<深入理解计算机系统>。通过上面几本书的洗礼,才算逐渐可以应付起平时项目开发中种种需求。
开始了解设计思想:
   虽然是可以应付平常的项目了,但另外的困惑却又随之而来,自己开发的程序,在项目需求有变更时,总是会处于牵一发而动全身的无奈境地。后来有幸参与了公司的一个公版代码的重构工作。于是开始发现,程序开发除了实现功能还有另外一些更重要的东西需要去关注。软件的可复用性,易维护性,模块性等等,而对于这些东西的考虑,可以称之为"软件设计的艺术"。<UNIX编程艺术>这本书,对于我来说,可以说另一次的技术启蒙。

2、Linux/UNIX系统编程职业生涯的发展探讨
    在网络上,经常看到关于linux与windows,或者java,C++, C等这些东西的争论,而论点基本就是谁更优越。个人觉得,这些都是无谓之争。我们需要记住的是,技术说到底其实就是工具,仅仅是一种达到目标的手动。不同的工具适用于不同的场景。因此我们要尽量避免的一个误区是将自己限定于某种技术,固步自封!因为这对于个人职业发展有百害而无一利。   
    其实不管是Linux/UNIX系统编程还是其他什么编程,对于职业发展的考虑都大抵可以从两个方面出发:兴趣与钱途。至于孰轻孰重则取决于个人的价值观。
    linux系统编程的职业发展,单单从技术的角度来考虑的话,可以从以下几个方面去考虑吧:
a)Linux的系统、网络、服务、集群、网站、网络应用方向。
b)嵌入式开发、UNIX/Linux应用系统开发,Linux内核驱动开发方向。
c)Linux下的数据库,如Mysql、oracle和windows下的SQL Server及DB2等。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
    本人自己也属于刚入门阶段,教诲肯定是不敢有的,只能说些个人感悟,予以共勉:
a)软件技术日新月异,因此这就要求我们不可心浮气躁,切记漫无目的的跟风;可以看看陈皓<程序员技术练级攻略>。
b)不要将自己限定于技术区域,多了解了解整个行业的发展,对于自己肯定是会有更多的好处的。
作者: apang1992    时间: 2014-01-12 18:59
讨论话题:
1、您在Linux/UNIX系统编程行业的经历及经验
  本人就是一个大四的学生,往嵌入式linux的方向努力。目前没有什么项目经验,但实验做了不少。应用层的书读过了《beginning  the linux programming edition 4》作为入门。本人也有《apue》,而且是先入手的,看了几页,发现一开始就跟你讲标准什么的,完全不知所云,瞬间急流勇退,买了本《beginning the linux programming edition 4》,当我读完这本书  再来看《apue》的时候,发现我当初避开apue是正确的。但是还没有足够的时间把这本书通读完。一直以来,想着linux黑客们能马上出一本专门针对linux系统编程的书籍,哈哈  终于等到了。。准备年后入手,听评论,貌似我之前的linux应用层的书籍可以暂时压箱了。

2、Linux/UNIX系统编程职业生涯的发展探讨
  本人大四,正准备入行,现在菜鸟还算不上,可能是我的目标定的太高了,一般嵌入式linux系统工程师都需要硕士学位以上,本科生一般入行做应用层编程。正如上面几位前辈说的,不要好高骛远,这句话是我听过的最多的劝诫之一。还是得把买的开发板摸透,认真读程序 然后码程序。听我的毕业设计的导师还有其他相关人士说:未来是google的天下,ios已死。虽然听着有点冲,但毫无疑问,在嵌入式行业,android是未来的发展方向,从linux转android想必是大势所趋。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
  我自己就是一个新手,大四放弃了保研。别人找工作的时候,我还在读书码程序,因为给自己定的门槛有点高,专业知识还没有完全成型(成熟)。最想对自己说,还有最后的半年时间,努力加油,hard work will pay off! 想对学弟学妹说:其他行业我不知道,但至少在电子计算机行业,学好理论知识对你以后的学习是大有裨益的,千万不要被报纸上的那些天才黑客迷惑,想要入行,还的脚踏实地。

作者: lbseraph    时间: 2014-01-12 20:13
1、您在Linux/UNIX系统编程行业的经历及经验
我一直不是做编程开发这一块的,不过以前上学的时候就想做编程,可惜刚毕业后并没机会进IT行业,等进入IT行业了之后一直也仅是做硬件技术的多。不过,自己在空余时间自学点Shell、Perl编程,不过还都是皮毛,主要是工作上面不相干,做起来也没啥动力。所以这一块的经验也没上面做开发的兄弟多,至少知道的是这活得靠动手多练,经验是靠失败慢慢积累出来的。前面的人也说得对,无论哪种编程语言都无所谓,其实不少东西都是不变的,得培养自己独有的设计思路;个人认为算法很重要,实现同样的功能,你用了100行代码,别人用了60行代码就ok了,执行效率是不一样的。
另外,4#说的我也有同感,进行后有一个带入门的师傅很重要,他能指点你该怎么走,提供些有效率的参考信息,这样能让你少走很多弯路。但实际生活上,很少能在对的时间里面碰到对的师傅;这一点在其他行业其他岗位上应该也是这样。

2、Linux/UNIX系统编程职业生涯的发展探讨
我在这方面接触不多,也说不了多少,不过也有碰过些以前是做编程的同事,也了解过一些背后的辛酸。以前一个女同事做编程的,说经常熬夜加班,有次通宵后第2天早上没回去休息之前老板竟然问她还能不能继续干活。现在公司开发部门去年有一哥们在家不知道怎么晕倒,送医院后发现是脑溢血(不能说肯定就是他工作原因直接导致,但起码应该能算个间接因素--用脑太多),后来公司还发动所有人捐了近20w给他做手术。看过资料,不少写代码的最晚到30多岁就得考虑转型了,毕竟拼体力的干不过刚毕业的年轻人,而且很多都是重复性的工作。
我做硬件那么久,发现到后面涉及的code层面的时候觉得如果有些软件编程的经验的话会更容易贯通,而公司里面level比较高的工程师也大多是软件背景出身的。所以有时候我会想是否毕业时应该做些编程方面的工作,之后再转硬件会比较好。当然,如果能知道职业发展的目标,自己定好学习线路也行,但没人或大部分人能一开始就知道自己以后就一定做什么,很多时候出现各种变数而进行修订。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
基础很重要!一开始不用学太多编程语言,先找个最基本的好好学好好练习,比如C;之后再学其他的比如C++、Java之类就快多了。培养好良好的书写习惯,这可以增加你代码的可读性和避免不必要的问题(比如少了个分号之类导致编译时出错),可以看看林锐的《高质量程序设计C/C++》。除了单纯编程知识外,最好也同时涉猎些其他的相关知识,比如数据结构、硬件技术(硬件离不开软件,软件同时也需要硬件的支持)。自己学会定好目标,按部就班一步一步实现,不要老想着一蹴而就,要知道罗马城也不是一天就能建成的。
作者: hummingunix    时间: 2014-01-12 23:03
其实自己挺喜欢linux的,在下面编程,外人一看都觉得你是高手,可惜公司偏要选window程序,搞得我现在linux好多东西都忘了。希望明年能专心做一个linux项目
作者: 流氓无产者    时间: 2014-01-13 09:33
最难的是搞懂底层真正的运行机制,而不是怎么调
否则很难提高性能
作者: sdau    时间: 2014-01-13 09:42
正在编辑....
作者: crazyhadoop    时间: 2014-01-13 10:30
回复 26# 奋斗的小牛


    Linux/UNIX系统编程手册
作者: to407    时间: 2014-01-13 12:19
1、您在Linux/UNIX系统编程行业的经历及经验
2、Linux/UNIX系统编程职业生涯的发展探讨
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?


这些问题之前,我们可以先讨论一下这是一本什么书。
10年的时候书出来,不久就读到了电子版本,基本上算是比较早的读者了。我的意见是,这本书更应该是一本参考用书,而不是一本教程。
为什么这么讲,这类书的好的教程,我更推荐《Linux Programming by Example》 http://book.douban.com/subject/1610230/ 有实例,再旧都是practice。
作者mtk本身就是manpage的维护者,这本书显然是受到了manpage的例证影响,很多章节的内容,基本是和man的结果一致的,换句话说,这本书不会有太新的内容,超越man。
另一方面,这本书同样受到apue的影响,可以找到和apue的相同的例子,也有不少和manpage相同的例子。相似地以api为线索来分章节。而且由于不可逆的原因,这本tlpi肯定是要比apue新很>多,而且是以linux为平台,谈了susV3/V4的内容。所以部头要比apue大很多。
在mtk的页面上有这本书的course material,当然我不是很推荐以这本书入门,太过碎片化,还是推荐上面那本书入手,早有中文版本。
但这本书是适合用来作参考书的,标准本身和linux都是变化中的平台,里面的东西也随时会过时,我比较建议入手的朋友们,在读到困惑的地方或者觉得有误之处,尽量同mtk直接邮件交流,>或提交errta。他不是很懂所有的细节,但他会对资料来源和具体数值做对校。
我之前给mtk写过一些邮件讨论这书的细节,基本上他的意见是每次print,或者电子版更新会尽量考虑errta的补入,和标准的变化。所以这书的内容是会变的,大家可以看电子版本更新,自己
攺进来。

还有,如果不是做linux开发的,而是其他类unix平台,如BSD/Solaris/AIX的话,还是看各自平台的api,看susV4,看apue,不要以这本书作参考。


然后谈谈主题。
我认为这个行业还是很有意思的,谁有兴趣入门,我都愿意交流。
从入门的角度看,我认为基本的知识就是c语言,操作系统,cpu寄存器这些基础知识。加上对linux/unix的兴趣。如果是大学本科的话,可以在二年级的时候读这本书,在这本书之前可以把csapp给读了。然后以上面的linuxprogrammingbyexample当成教材来练。
从发展的角度,目前来讲,虚拟化,嵌入式平台有很大的发展空间,就算是android编程,也可以对底层的linuxkernel有比较好的理解。而且在nosql/openstack的项目里,linux编程都很重要>的。这些api平时多练练sample,用的时候就熟悉了。 当然就算遇到类似crashdump,不熟悉的api,直接翻源代码,翻这本书来参考,也是来得及的。
我认为这个方向的编程,是没有太好的捷径的,也只有多练习,多看代码,新入门可以追一些较小的开源项目,然后可以看看linuxkernel的某个子模块来理解。
~      
作者: to407    时间: 2014-01-13 12:27
btw, 我是 不觉得这本书名应该包括UNIX这个词 , 就像它的英文名也只讲到linux.

\ 虽然说有提到susV3/V4, 但问题是 就算不同的平台都符合标准,但他们的implementation和practise behavior都有很大的不同, 和mtk聊的过程中,也发现他specific on linux,而且是常见的linux发行版本作为参考标准,即使是不同linux平台没有全实现的,也不尽收录。

像-Wall -std=c99 状态, 没有提关于C99的具体内容,只是说linux平台自身, 所以像printf的 %zd也没有谈及。

那就更不应该 include UNIX了。

imdo
作者: luobo5100    时间: 2014-01-13 15:58

在Linux系统下做开发时间比较短,半年时间的样子,目前又在研究Linux/unix网络编程,所以对此书还是比较想拥有的,希望可以赠我一套
作者: wait_rabbit    时间: 2014-01-13 17:11

其实我最推荐《UNIX Systems Programming: Communication, Concurrency and Threads》

中文名《unix系统编程》,翻译得也很不错。
作者: lkkkun    时间: 2014-01-14 09:10
1、您在Linux/UNIX系统编程行业的经历及经验。
   大学二年级开始接触LInux,后面也玩过freebsd,毕业之后一直从事Linux的开发,个人觉得linux编程最核心的还是系统编程,学习好系统编程,在日常编程中你会觉得有事倍功半的感觉。
2、Linux/UNIX系统编程职业生涯的发展探讨。
  现在貌似都是往云的方向发展,也行大数据的处理linux有更大的优势。
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
抛弃window吧,个人编程电脑直接linux ,不要虚拟机。
作者: 刺客阿地    时间: 2014-01-14 10:14
不懂编程,俺只是个打杂的系统运维人员。
目前在linux操作系统上,只写写shell脚本,编程涉及不到,到此围观大牛,学习编程和职业生涯经验!
同时,积极支持cu活动!
作者: redpig315    时间: 2014-01-14 15:10
1、您在Linux/UNIX系统编程行业的经历及经验
  首先从认识Linux系统开始吧,这主要是在大学的时候同学给了一份ubuntu的安装盘开始,这个东西很好,图形界面的,可是还是不会用,就是装装,显摆一下而已,真正用到还是工作后,因为接触了aix redhat,刚开始只会ls 等,后来买了一本《鸟哥linux的私房菜》认真的看过实践过,收获颇多,知道文件系统等,然后就是后来看别人在系统下写的交易系统,才算开始我的linux编程入门,用到的最多的就是sprintf ,等字符串操作的函数,然后就是别人封装好的东西,后来在网上找到《unix一站式编程》我觉得这本教程很不错,基本上把c的很多东西讲清楚了,后面还带了不少思考题 ,不错,建议大学生可以找去看看,帮助很大,在然后就是<unix高级系统环境编程>这本书基本上从通讯,设备,信号,文件操作等方面将,很全面,对个人能力提升的帮助很大。因为从事的是金融行业所以C的框架较少,但是高阳好像有个cs的 框架,学了学,没怎么弄懂,但是建议有机会的同学,有机会要研究下。
2、Linux/UNIX系统编程职业生涯的发展探讨
    我也迷茫其实,因为现在我在做运维,所以我觉得作为unix编程,不仅要精通C/C++ 还要掌握必要的脚本语言,如perl,shell,对存储,系统架构需要了解一些,总之往系统架构师,系统分析师方面转,其实最后我觉得大家都希望做管理吧,因为你总的给后起之秀,新人一条路吧。
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
不要浮躁,慢慢来,多学,多问,多练。多上chinaunix论坛看看,更上技术潮流
作者: ComeWithMeXX    时间: 2014-01-14 15:18
万变不离其宗,感觉
作者: sunny7476    时间: 2014-01-14 17:19
本帖最后由 sunny7476 于 2014-01-14 17:21 编辑

这本书是Handbook,是手册,是百科一样的书。Linux的APUE。
  我看的是英文版的,还没有读完。中文版的既没样张,也还没购买。从内容上来说,这本书感觉是一本关于Linux编程的百科全书式的参考手册,写的非常细,几乎所有的知识点都会讲到。阅读并不困难。因此,单从内容上来看,本书是一本非常优秀的参考巩固用书。

  阅读本书之前,如果是初学者,最好先读《现代操作系统》等类似的书、《Linux程序设计》,《CSAPP》。最好再看下Linux命令行与脚本编程的书,《私房菜》也不错。

  读完前三章后,后续的部分就可以当作参考书用了。在对系统编程有基本了解的情况下,本书后续章节不难掌握。如前面的一位朋友所说,这本书是针对Linux所写的。

  至于本书的翻译,先不谈内容。本书有两批译者。第一批译者翻译到34章后,感觉又累又没钱,就不翻译了。然后出版社重新找了第二批人翻译了后续的内容。

  其中,第一批译者给本书的评价是一星!满分五星,只给一星!他批评本书原作者的母语不是英语,本书英文书写的很烂。转下话题,如果国人说着不流利的英文,大部分情况下老外也能听的懂他在说什么。老外中文不精通,但是国人通常也能明白其中的意思。这就是区别。跑过去说英文没表达好,晦涩,大部分情况下只能证明英文没学好。而不知道如何将其翻译成合适的中文,那只能证明中文表达能力有欠缺。最明显的例子,就是许多豆瓣上的朋友在读译者喷原作者的那篇文章时,都没看懂译者想表达的意思。看了评价才看懂的(作者英文也没学精,从他贴出来的给译者的邮件可以略知一二)。另外,再举个例子。单从表达上来看,中国人写的书,只要不是太差,都能看得懂。中国人写的英文书,也是如此。但是中国人翻译的书,差劲的和优秀的却差别很大。拿自己的翻译能力去抨击英文的写作能力未免不太好吧。

  最让人震惊的是从豆瓣上得到的消息来看,其中一个译者说:“本书译文我们是没有精力按照原版的修订版和最新的勘误表进行调整了。本书译文也没有经过统稿(我们可以保证上卷是统过稿的),出版社也不会额外出钱请人来统稿。”也就是说,翻译本出版的时候,对应的是最老的英文版。后期的修订,勘误什么的都没有。原班译者译到34章,然后嫌钱少,而且每天还要耗费4个小时以上。然后就不干了。让出版社重新找人翻译。。。

  至于翻译内容嘛,还没看过,不好评价。

个人观点
作者: send_linux    时间: 2014-01-14 19:03
ComeWithMeXX 发表于 2014-01-14 15:18
万变不离其宗,感觉

好高深的说,实用啊
作者: banggou    时间: 2014-01-15 00:12
本帖最后由 banggou 于 2014-01-15 15:08 编辑
sunny7476 发表于 2014-01-14 17:19
这本书是Handbook,是手册,是百科一样的书。Linux的APUE。
  我看的是英文版的,还没有读完。中文版的既 ...



当时看过一段时间英文,不过还是纸板看着舒服点。 只希望不要又浪费了一本好书,
其实有时候 ,我个人觉得 翻译以及出版社都可能会影响翻译书籍的出版质量。有时间有能力看原版最好


1、您在Linux/UNIX系统编程行业的经历及经验
从读书开始关注linux,从分析研究内核最初始版本开始,到后来转到linux环境下的编写网络通信程序,到工作后,做智能电网数据采集,无线通信相关协议栈开发,基本开发环境也都是在linux下,无论shell脚本编程,还是gdb等调试工具也是每天必用,Makefile也有手工写过。回顾这几年的linux系统开发,也有一些感触:
1.好的编程习惯很重要,无关编程环境以及所采用的环境
就我个人而言,好的编程习惯就是写出的代码一定是简洁高效的,逻辑要清晰,结构要简单,同时易于扩展,做到流程的抽象以及对象的抽象,特别是linux下C这种非面向对象的语言更要如此,这一块,不是看些书就可以学到的,必须有一段编程实践的积累,同时也要有好的参考例子,比如linux源代码,或者其他一些开源库的源代码都是不错的编程参考。这一块非理论,一定是要在实践,做事中学些领悟。

2.好的书籍不可少,linux入门同样如此,需要循序渐进
就我个人的经历而言,一本好书,可以节省很多学习时间,如果是刚入门,还是入门许久的,还是应该多读点书(这里特指的linux开发相关,其他的增加知识的书籍同样也可以多读),保证知识储备及时更新。网络固然好,但是很多时候,网络上的知识都是零碎的不系统,而书籍这种系统化的知识整理的优势就体现出来了。但是现在书籍也是产业化,鱼龙混杂,拼凑的以及乱翻译的书籍也不少,这也需要筛选。
《鸟哥》  了解什么是linux,
《linux程序设计》,《Unix/Linux编程实践教程》
这里强烈推荐下《Unix/Linux编程实践教程》,主旨就是要在实践中学习,一步步告诉shell里面这些 cp copy 命令时怎么实现的,循序渐进,当看完这本,linux下的应用开发基本也就能掌握了,之后可以深入如《环境高级编程》(话说第三版怎么还没有引进?这版也强烈期待)做更细致学习,只有这样循序渐进方才是捷径,如果一上来就来本大部头,估计是谁也受不了。(捷径是捷径,但是还是需要投入一定的时间和努力)

3.即使做系统开发,对于linux内部的实现原理最好也还是需要了解,这样就需要积极研究下内核代码,这个工作其实《深度探索Linux操作系统》都开始做了尝试。。

4.做linux开发,脚本语言一定要掌握,即使一门也好,我们不需要再发明轮子,直接用即可,这也就是脚本语言的魅力,用寥寥几行脚本代码,可能就调用系统几万行源代码替你做事,何乐不为?

5.积极讨论,这也不必多说了吧,呵呵。


2、Linux/UNIX系统编程职业生涯的发展探讨   
上面也有说了,系统编程可以算是一个“攻守兼备”的中间层,一般可能属于平台,下面与fpga以及dsp soc等硬件,以及linux内核 打交道,上面提供系统封装接口供应用开发。就业来说其实面还是很广的,基本上每个做linux软件开发的公司都会需要,而且随着hadoop mapreduce等处理大数据的架构逐步发展成熟,对于中间层这块的技能要求会有很深的要求,这也是一个机遇和挑战。
   总之,就像上一点说的,不断做知识的储备(特别是底层linux内核这块工作原理,而不是只懂得调用系统接口),保持关注领域的知识更新换代,即可不变应万变。


3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
1.心态放好,学精通不可能一蹴而就。
2.养成好的编程习惯
3.积累沉淀
4.多读书
5.多交流(网络,公司同事,同学,开源项目)
6.多思考,多做笔记,多share
7.眼光放开,不要只关注一点
8.有条件,还是去大点的公司
作者: storypku    时间: 2014-01-15 10:50
哈哈,这书中文版终于出来了。读完了它的英文全本,并且成为了这本书勘误第二多的人。可是,自己是个新手,没有实际项目,找工作都是个麻烦事。哎哎。
作者: qshllxfx    时间: 2014-01-15 11:14
1、您在Linux/UNIX系统编程行业的经历及经验
在校期间主要是Windows,工作后逐渐接触到Linux/UNIX
从数据处理、算法设计、算法仿真,到软硬件综合实验仿真系统,到掌上设备,通信设备
从C到C++,从Bash到Perl和Shell,从C++到Java,从Windows到Linux
我毕业后花了好多时间来摸索,最终还是找到了自己感兴趣的技术领域。
我想,大部分人都不是天才,做技术不能完全靠天赋,要靠热情,要能沉下心。
我所谓的经验就是认真、努力,所谓笨鸟先飞。
现在虽然业余时间不多,但我还是看完了APUE,CSAPP,以及其他一些别的领域的书。现在正在看SICP。
只要意识到晚了,就还不算晚。

2、Linux/UNIX系统编程职业生涯的发展探讨
随着大数据、网络性能等的极速发展,相信Linux/UNIX系统编程将迎来他的蓬勃发展。
C语言过时了么?只要Linux/UNIX还在,C就不会过时。
UNIX过时了么?只要还有Hacker,UNIX就不会过时。
Java即便有再多的框架,也都是基于JVM的,
JVM即便能运行再多的高级语言,Java,Scala,Clojure,Groovy,
它本身也是用汇编和C/C++写的。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
我觉得我的职业生涯,包括学业生涯,最最遗憾的事情就是,在我有大量时间可以学习的时候,没有一个牛人给指点一条路。
学校里学的东西,现在基本都不用了。现在用的,都是后来自学的。
学生时代基本上没怎么开窍,后来知道自己积极主动到网上找牛人的建议的时候,已经有点晚了。
如果当时有个牛人指点一下,告诉我该看哪些方面的知识,该看哪本书,现在我的水平肯定是另一种状态。
毕竟学校里的时间是充裕的,毕竟刚毕业时的业余时间是充裕的。
现在有了孩子,很多很多想做的事情,想研究的东西,却只有晚上孩子睡后的一点点时间来学习。
我不是牛人,因此我给不出什么建议。
但是我看了很多大牛的建议,如果想在Linux/UNIX系统编程有所深入的话,就好好研究研究APUE和这本书吧。
最后,借用CSAPP里的一段话:
The great technical writer W. Richard Stevens developed a series of classic
texts on such topics as advanced Unix programming [APUE], the Internet protocols
[TCP/IP], and Unix network programming [UNP]. Serious students
of Unix systems programming will want to study all of them.

作者: qxhgd    时间: 2014-01-15 14:27
1、您在Linux/UNIX系统编程行业的经历及经验
     工作内容分布在用户态和内核态,读过apue,对其中的socket、进程间通讯、IO等比较关注。

2、Linux/UNIX系统编程职业生涯的发展探讨
       系统编程比较尴尬,底层不底层,上层不上层。但是学好了,就能上能下了。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
(1)内核态与用户态并重,多读源码(内核和开源库)。
(2)可以从用户态入门。
(3)多敲代码,自己改造。
作者: Godbach    时间: 2014-01-16 13:26
回复 1# send_linux

好活动。

书还是刚上市的。


   
作者: jerrymy    时间: 2014-01-16 14:36
好书,不过目前没有搞编程,只是之前看过系统编程的书,此两边书可列入读书计划。
作者: jimmy-_-lixw    时间: 2014-01-16 17:33
好话题,支持Linux系统编程。
作者: to407    时间: 2014-01-17 10:20
qxhgd 发表于 2014-01-15 14:27

系统编程比较尴尬,底层不底层,上层不上层。但是学好了,就能上能下了。


这个我觉得, 做这个还是得懂底层,不懂os和cpu, 基本上做不了。  当然再往上的 user scope app确实真没必要懂太多。
作者: seesea2517    时间: 2014-01-17 11:36
1、您在Linux/UNIX系统编程行业的经历及经验
  没啥经验,就鼓捣鼓捣单片机,折腾折腾app。
2、Linux/UNIX系统编程职业生涯的发展探讨
  下写驱动上写应用。
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?
  由浅入深,不受打击;一步一印,夯实基础;把握思想,万变归宗;兴趣引领,实践中学。
作者: 古丁高手    时间: 2014-01-21 15:16
不错的选择
作者: beyondfly    时间: 2014-01-22 13:41
在Linux下开发,一般是后台服务程序和驱动的开发,尤其是驱动程序的开发,需要对操作系统原理,计算机组成,Linux内核有一个比较深入的了解。相信大部分的Linux程序员都看过APUE,这是一种描述Linux下编程十分详细的一本书,但据说这本《Linux/UNIX系统编程手册(上、下册)》有超越APUE的可能,十分期待
作者: jackyyen    时间: 2014-01-23 09:32
学习下咯,没怎么做过系统编程,一直是作应用开发,最接近底层的开发,是作IPv6协议分析,但是没有编码,仅仅是作测试分析。 很羡慕懂得系统编程能力的工程师。
作者: crazyhadoop    时间: 2014-01-23 21:44
一书在手,天下我有,说的就是这本书吧。
作者: send_linux    时间: 2014-01-23 21:49
crazyhadoop 发表于 2014-01-23 21:44
一书在手,天下我有,说的就是这本书吧。


太霸气了,呵呵

作者: 古船木渡    时间: 2014-01-24 13:31
求这本书,斑竹
作者: OwnWaterloo    时间: 2014-01-24 14:09
来晚了。。。 很早就注意到这个活动。。。 但年关时各种忙。。。 一直在慢慢修改草稿。。。  今天貌似已经从C/C++版块的置顶里去掉了。。。   再不改完就没机会发的样子。。。
于是赶紧地。。。


这确实是一本不可多得的好书。
这本书给我的感觉与《Windows核心编程》的很类似:整体的、系统的认识就靠它了。
并且本书的焦点就是Linux,而不像其他一些书籍的讨论的是一个很宽泛的*nix。 对不知道APUE在说啥的同学(比如我自己)不妨先看看这本。

1、您在Linux/UNIX系统编程行业的经历及经验

接触电脑的契机首先是游戏。。。 然后才是编程。
不过十多年前网络上的各种资料比现在少得多,尤其是中文资料更少,自己英语水平也很差。。。 在没人领进门的情况学习Linux/UNIX下的编程很难诶。。。
实际情况是老师教什么就是什么,于是最开始的编程环境自然是Windows。。。 根本就没想过除了它之外还有没有其他选择。。。

本科的时候终于有人教了。但实际上没学到什么东西。

上得台面的原因可能是:确实有太多“周边的”新事物要学。
比如编辑器。现在都还有印象的事情是进了vi就不知道怎么退出。。。最终是在Windows上打开VS读取与编辑虚拟机里的文件然后在虚拟机里编译并运行。。。
再比如编译器。在这个课程很久之后才弄明白从编写C/C++的源代码到执行直接到底发生了什么。更久之后才知道调试的情况。
没有IDE只有一个“裸”gcc在那时候根本玩不转。。。 调试什么的只能printf。。。
还要顺带学make。。。 只好复制粘贴然后不明所以地改到貌似能正确工作为止。。。
上不得台面的原因可能是:课程老师吸引力不够。。。

而在同一时间Windows那边的课程已经开始玩GUI了。
虽然编程的方式从“进入main后一步两步三步四步望着天执行什么由程序员说了算”变到“进入main后准备好各种事情然后由用户来决定该先执行什么”会让人一开始难以适应。
但这是在学编程而不需要再去熟悉编程的“周边”环境。并且相比之前那种黑框白字的程序来说要“绚”得多了。
于是精力就耗在这边了。 总之就是没入门。。。

有点跑题了,不过我觉得教育资源的缺少 —— 入门门槛高又没老师(或师傅)带领,能留下的是少数,又会导致下一代人的师傅更少 —— 是推广难的一个很大原因。

之后为了避免依赖MSVC的特定行为所以在Windows下也会使用MinGW/MSYS,慢慢地对gcc,gnumake等工具比较熟悉了。
因为毕业论文需要实现一个可以分配可执行内存的库于是终于逮到机会进行Linux下的系统编程了。。。
看过APUE等书后可以编程,但依然感觉不得要领,The Art of Unix Programming更是飘渺虚无。。。

最后在论坛的这个帖子里经由雨过白鹭洲介绍知道了这本书。
因为没有太多机会进行Linux系统编程于是至今都没能仔细通读这本书。
但在使用许多*nix下工具时出于好奇或是想确认这些工具能像预期般工作时都会拿出来翻翻。
比如一些web服务器是否用了epoll,sendfile等系统调用,一些程序是否在完成必要工作后确实丢弃了root权限,setuid/setgid程序是如何工作的,以及capabilities等等。

2、Linux/UNIX系统编程职业生涯的发展探讨

因为自己主要是搞技术方面的,所以对业务方面只是闲聊时听听。
这里说几个自己听到的也比较有趣的: 定制广告机、基于雷达监控的停车场管理系统、无盘启动。
它们都需要对Linux有很深的了解于是我们就无能为力了。。。
其实广告机做过一段时间,感觉很吃力。。。 并且业务方面也停了于是就没继续做下去了。。。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?

嗯。。。 一句正确的废话:“尽信书不如无书”。而且也不仅仅针对书。所有的文章、言论 —— 无论出自何人何处 —— 都应该用作参考而不是代替自己思考。
对这个帖子也是这样。这只是我自己的一些经验,肯定无法适应于所有情况,甚至可能根本就是错的。
有了这样的免责声明后就可以胡乱瞎说一些与这本书有关的经验。

首先,不加思考地将书里所教授的技术直接应用到编程里是一个很不好的习惯。
特定于这本书的内容可以用Daemon有关的章节作例子。
实现守护进程时肯定需要这些技术。但要抵制住“因为自己了解了这些技术于是就要将它应用到自己所写的程序里”的诱惑。
自己写一些程序用于练手肯定没问题。但要将它应用到生产环境时可以考虑“该程序是否有必要自守护化”? 是否有方法可以将“守护化”作为一个可复用的功能?

其次,进程本身以及进程之间的继承关系本身就是一种很有效的复用手段。
继续以Daemon作为例子。
为每个程序实现守护化的功能肯定是难以编写与调试的。
将这些功能实现为一个程序库并在每个程序里复用这个库虽然可以减轻这两个问题,但是就我自己的经验来看这两种方式实现出的程序对用户来说区别不大,依然是自守护化,依然难以使用与管理。

考虑另一种方式。
将原本打算实现守护化功能的程序当作一个“普通程序”来实现:保持在前台、使用stdout,stderr、Ctrl-C退出等等。这样不但利于实现也利于调试。它们专心实现自己打算提供的独特的功能。
而守护化获得的好处、日志记录、崩溃重启、端口管理等等都可以作为另一个(或一组)独立的程序来实现。而它们专心实现这部分功能。
两者一结合就可以用统一的方式管理许多服务程序的各个方面:启动脚本(不需要sysvinit,upstart,systemd混杂)、重启策略、日志(目的地,rotate)、界面(CLI,GUI,Web)等等。

每个程序自己实现后一类功能不仅仅难以做到极致,而且还会引发其他问题。
upstart需要知道自守护化的程序到底fork了几次。
daemontoolssupervisord还需要一些hack来对付自守护化的程序。
这是何苦。。。

类似地,书中还提到了inetd。
提供网络服务并不一定需要使用socket有关的编程技术。可以编写只使用标准输入输出、环境变量、命令行参数的程序 —— 容易编写调试 —— 并配合其他程的序来提供网络服务。
inetd就是这样一种“其他程序”。Ubuntu仓库里提供的5个ident服务有4个都依赖inetd,只有1个是独立实现ident服务。
CGI服务器也是这样一种“其他程序”。

总之,除了“实打实硬碰硬”的编码方式之外可以考虑充实自己的“工具箱”,并针对具体问题选择合适的方式去实现,而不是学会了锤子就将所有问题当作钉子。
在程序里使用直接使用daemon,socket等等是一种直接的、硬的编程方式。
而daemontools,ident,CGI背后隐含的编程思想是另一种间接的、软的编程方式。它有助于产生更简单、容易编写与维护也更稳定可靠的程序。
抵制住“因为了解某种工具就想在程序里使用”的诱惑 —— 包括后一种软的思想也是一种诱惑 —— 并针对具体问题进行分析选择。
以CGI为例。如果目的是为了提供动态网页,当访问数量上升后就会吃不消。这种情况下是不能选它的。而如果只是想避免使用ssh,让一些管理用的脚本可以在浏览器里点击就可以执行,我觉得它就挺适合的。
作者: jimmy-_-lixw    时间: 2014-01-24 15:59
本帖最后由 jimmy-_-lixw 于 2014-02-25 13:44 编辑

            。
作者: jimmy-_-lixw    时间: 2014-01-24 16:00
本帖最后由 jimmy-_-lixw 于 2014-02-25 13:43 编辑

撤销。。。
作者: mcyeah    时间: 2014-01-24 20:11
1、您在Linux/UNIX系统编程行业的经历及经验
     大学时候上Linux操作系统课程的时候正式入门,但是毕竟课程有限,学到的东西只是一些皮毛而已,后来又开始学嵌入式,涉及到了Linux底层的驱动编程,可以说从上到下都了解了一遍,但是由于没有真正地干过用于实践的项目,而且毕竟没有那么刻苦的写代码,多实践,所以水平一般般。毕业后找到了现在的工作,干Linux服务器端开发的工作,不会的就问师傅,而且这个时候才知道了apue和unp着几本书的重要性,边用边学,现在也还是在不断求索中。
    阅历决定经验,没什么特别牛的阅历和经验,就简单讲讲自己的一些感受吧
      <1>要沉下心来去学习,学习的时候实践最重要
      <2>要多交流,不要闭门造车  有时候自己思维定势了,写出的代码不仅不优还不利于自己提高
      <3>不为自己的小聪明而沾沾自喜,永远不要觉得自己有多么了不起,做人要谦虚   每个人所走的路都是不一样的,所以每个人所懂得的也是不一样的。不然有时候发现一个看起来不起眼的新手居然会自己都不会的的东西时候会奔溃掉的。
2、Linux/UNIX系统编程职业生涯的发展探讨
    职业生涯这种东西其实不好讲,每个人所走过的路都是不一样的! 可能不经意间做出的一个小决定就会影响一生!  所以我觉得其实一辈子很短,要干就要干自己想干的事!有兴趣,再苦也是甜!自己要快乐这才不枉此生嘛,   所以我倒觉得,只要自己觉得高兴,干一辈子程序员就挺好啊,呵呵。不过程序员也是有级别的嘛,所以还需要努力,不断的自我提升,不能干了一辈子还是底层,当然要往更高层次发展的时候基础也不能落下!    对于Linux/UNIX系统编程,我觉得前途是一片光明的最重要的原因是这个系统体系是开放的、自由的!这本身就有无限的魅力,看看现在的服务器、嵌入式、中间件、桌面,哪个没有Linux的身影!开源的系统可以节省更多成本,而且你也为其加入自己喜欢的特性,贡献自己的力量,系统也就越好用,用的人也就会越来越多!
3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?    要做系统编程,首先要对操作系统原理有个了解!这一点很重要,别看各种windows、linux、unix、Solaris,其实万变不离其宗,它们所有的东西都在操作系统范畴,了解了操作系统是什么,他提供什么服务,以后编程就好办了!
   <1>多实践,多编码,多去面对问题
   <2>做的多了之后要思考! 隔一段时间就总结  最好能够记下来!
   <3>多看别人写的牛X的代码,学习其中的思想  不是说思想有多远路就有多远嘛!
   <4>乱七八糟的东西 没事儿都学学,啥时候说不定就用上了!   不用学到精通,只要了解即可,到了适合的时机能想到就可以。
   
        以上全是鄙人的一点儿愚见,希望多多批评指正!


作者: cherryDC    时间: 2014-01-24 22:06
1、您在Linux/UNIX系统编程行业的经历及经验。

现在还在上学,在跟导师作嵌入式方面的课题时用的是Linux。课题主要是智能交通、GPS定位等。

2、Linux/UNIX系统编程职业生涯的发展探讨。

主要想从事嵌入式开发方向,应该对嵌入式系统、硬件、内核、驱动精通,并具有有扎实的C 、Java、数据结构功底。

3、对于新入门的Linux/UNIX系统编程人员来说,您有什么话对他们说?

首先选择经典的Linux/UNIX书籍阅读学习,并进行实际操作。经常逛逛论坛,和网友交流经验的技术。另外,可以去企业实习,了解实际应用和构架。
作者: crazyhadoop    时间: 2014-01-25 17:37
回复 63# send_linux


    妥妥的,简单易懂多了
作者: amarant    时间: 2014-02-14 15:48
各位兄弟回帖好认真呀。佩服佩服!学习学习!
作者: send_linux    时间: 2014-02-14 18:14
amarant 发表于 2014-02-14 15:48
各位兄弟回帖好认真呀。佩服佩服!学习学习!


版主有兴趣的话,也可以发起话题讨论活动,社区可以提供一些奖品哦
作者: amarant    时间: 2014-02-14 18:49
回复 72# send_linux


    嗨 现在又忙的跟狗一样了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2