免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
61 [报告]
发表于 2014-01-23 21:44 |只看该作者
一书在手,天下我有,说的就是这本书吧。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
62 [报告]
发表于 2014-01-23 21:49 |只看该作者
crazyhadoop 发表于 2014-01-23 21:44
一书在手,天下我有,说的就是这本书吧。


太霸气了,呵呵

论坛徽章:
0
63 [报告]
发表于 2014-01-24 13:31 |只看该作者
求这本书,斑竹

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
64 [报告]
发表于 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,让一些管理用的脚本可以在浏览器里点击就可以执行,我觉得它就挺适合的。

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
65 [报告]
发表于 2014-01-24 15:59 |只看该作者
本帖最后由 jimmy-_-lixw 于 2014-02-25 13:44 编辑

            。

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
66 [报告]
发表于 2014-01-24 16:00 |只看该作者
本帖最后由 jimmy-_-lixw 于 2014-02-25 13:43 编辑

撤销。。。

论坛徽章:
1
狮子座
日期:2013-09-06 17:18:40
67 [报告]
发表于 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>乱七八糟的东西 没事儿都学学,啥时候说不定就用上了!   不用学到精通,只要了解即可,到了适合的时机能想到就可以。
   
        以上全是鄙人的一点儿愚见,希望多多批评指正!

论坛徽章:
0
68 [报告]
发表于 2014-01-24 22:06 |只看该作者
1、您在Linux/UNIX系统编程行业的经历及经验。

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

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

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

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

首先选择经典的Linux/UNIX书籍阅读学习,并进行实际操作。经常逛逛论坛,和网友交流经验的技术。另外,可以去企业实习,了解实际应用和构架。

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
69 [报告]
发表于 2014-01-25 17:37 |只看该作者
回复 63# send_linux


    妥妥的,简单易懂多了

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
70 [报告]
发表于 2014-02-14 15:48 |只看该作者
各位兄弟回帖好认真呀。佩服佩服!学习学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP