免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

[Linux] Linux/UNIX系统编程,系统程序员成长的基石?(获奖名单已公布-2014-2-17) [复制链接]

论坛徽章:
0
21 [报告]
发表于 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编程最大的魅力所在。

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
22 [报告]
发表于 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系统编程了。
  

求职 : Linux运维
论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:15:0815-16赛季CBA联赛之山东
日期:2016-10-31 10:40:10综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00IT运维版块每日发帖之星
日期:2016-02-08 06:20:00数据库技术版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-10 06:20:00黄金圣斗士
日期:2015-11-24 10:45:10IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:012015年亚洲杯之巴勒斯坦
日期:2015-05-05 10:19:03
23 [报告]
发表于 2014-01-11 10:56 |只看该作者
昨天<蝴蝶效应>这本书,发现里边在说到自组织系统的其中的第一个条件就是系统本身必须是开放的.而自组织系统其实就是有生命的.LINUX系统本身的开放性可以更好的来让每个人的需求和想法逐步的成为现实,同时linux因为自由和开源,所以可以自由进化。局部的进化如果取得突破,那么全局会向该局部靠拢,产生蝴蝶效应,局部进化的失败也不会对系统产生灾难性的后果.因为全局总是向更好的方向进化!!那种坏死的局部会逐步的从全局中剔除!!!LINUX可以是玩具,也可以是严肃的管理层人员认为的计算机系统.但不论从那一方面看,它的自由和开放导致的自适应性已经非常完美的让他成为我们这个世界上软件技术中最重要的一股力量.我们的智慧正在以算法的模式通过自由开源软件以人工智能的形式被更高的设备实现!!借用REDHAT张先民老先生的话:未来重未如此开放。

论坛徽章:
0
24 [报告]
发表于 2014-01-11 16:55 |只看该作者
1、您在Linux/UNIX系统编程行业的经历及经验
最早做VxWorks开发,后来转做嵌入式Linux开发,可能由于posix的关系,感觉差别不是特别的大,再后来慢慢做了一些GTK程序的开发。
man是个很不错的工具,可以从里面找到大部分你想要的信息。

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

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

论坛徽章:
1
摩羯座
日期:2013-11-29 18:02:31
25 [报告]
发表于 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

论坛徽章:
0
26 [报告]
发表于 2014-01-11 20:01 |只看该作者
书名是什么?回复 6# crazyhadoop


   

论坛徽章:
4
CU大牛徽章
日期:2013-04-17 11:48:26CU大牛徽章
日期:2013-04-17 11:48:40CU大牛徽章
日期:2013-04-17 11:48:45摩羯座
日期:2013-12-06 18:10:04
27 [报告]
发表于 2014-01-11 21:13 |只看该作者
没做过系统编程方面的事。但从前学过一本linux/unix系统编程的书,真的感觉受益很大,可以从更深层的角度来理解这个系统,对运维、应用软件开发、甚至是网站开发都有好处。建议每个系统管理人员、这个平台的开发人员都学一点。

论坛徽章:
0
28 [报告]
发表于 2014-01-12 03:17 |只看该作者
这书翻译这么久,总算出了,  豆瓣上都吵了很久了阿,  呵呵
翻译质量如何啊

论坛徽章:
1
双子座
日期:2013-10-30 14:48:40
29 [报告]
发表于 2014-01-12 09:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
30 [报告]
发表于 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进程了,此外我们也会从中学到如何写个好的高并发服务器程序,如何访问文件系统等等。

以上是我的一孔之见,希望能给大家一点帮助吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP