cst05001 cst05001
关注数: 4 粉丝数: 128 发帖数: 14,342 关注贴吧数: 21
[原创][申精]How to install beryl in Debian(如何在debian下安装b How to install beryl in Debian 1. 更新显卡驱动 因为beryl是一个涉及到3D的程序,所以如果使用系统的通用驱动或者老版本驱动,可能会出现比较郁闷的事情,比如说,安装完beryl后,进入不了X,黑屏,花屏 and so on… 常用的两种显卡的驱动下载地址如下 NVIDIA: http://www.nvidia.com/object/unix.html 如果你安装的是amd64版本的OS,请点击Linux AMD64/EM64T下面的Archive进入下载页,再进入Linux Display Driver - x64 (AMD64/EM64T) 并选择最新版本驱动(目前是12/21/2006发布的) 如果你使用的是i386版本的linux,请选择相应的链接. ATI: http://ati.amd.com/support/driver.html 请在此页面选择相对应的显卡驱动. 显卡驱动的扩展名是.run 别下错了. 如果在linux中下不下来(点击后出现一堆文本命令),请使用右键,把目标另存为… 为编译驱动程序做准备: Debian默认安装只配置了很少的程序和库,所以必须下载安装驱动所需的库. 桌面→系统管理→新立得软件包管理器→刷新→搜索→输入”linux-header” 在筛选出来的软件包中,选择和你内核对应的包→应用. 除非你人品特别好,或者是打包成deb格式的驱动,否则你开启着X,是不能安装驱动的. 所以我们要进入纯文本界面,不让X启动 su gedit /etc/inittab 把id:2:initdefault: 改成id:1:initdefault: 保存退出 重启 这样就不会自动启动X,而是自动进入文本界面了. 用sh命令执行下载的驱动程序 比如你驱动程序路径如下: /home/alin/Desktop/NVIDIA-Linux-x86_64-1.0-9746-pkg2.run 那么就执行 Sh /home/alin/Desktop/NVIDIA-Linux-x86_64-1.0-9746-pkg2.run 这样显卡驱动就安装好了 vim /etc/inittab 把id:1:initdefault: 改成id:2:initdefault: 重启,切回X界面 如果显示NVIDIA这个图形,则说明驱动安装成功. 删除启动X时候的NVIDIA图 在中端中输入 su gedit /etc/X11/xorg.conf 在Device一节中找到 "nvidia" 所在行同一行后面添加Option "NoLogo" 保存退出
SeqList by array written by myself #include #define DefaultSize 10using namespace std;template class SeqList { T *data; //顺序表存储数组 int MaxSize; //最大允许长度 int last; //当前最后元素下标public: SeqList ( int MaxSize = DefaultSize ); ~SeqList ( ) { delete [ ] data; } int Length ( ) const { return last+1; } int Find ( T& x ) const; //查找 T Locate ( int i ) const; //定位 int Insert ( T & x, int i ); //插入 int Remove ( int i ); //删除 T Next ( int i ) ; //后继 T Prior ( int i ) ; //前驱 int IsEmpty ( ) { return last ==-1; } int IsFull ( ) { return last == MaxSize-1; } T Get ( int i ) { //提取 return i < 0 || i > last?NULL : data[i]; } };template SeqList :: SeqList ( int sz ) { //构造函数 if ( sz > 0 ) { MaxSize = sz; last = -1; data = new T[MaxSize]; if ( data == NULL ) { MaxSize = 0; last = -1; return; } } }template int SeqList :: Find ( T & x ) const { //搜索函数:在表中从前向后顺序查找 x int i = 0; while ( i <= last && data[i] != x ) i++; if ( i > last ) return -1; else return i;}template T SeqList :: Locate ( int i ) const { if ( i<0 || i > last ) return NULL; else return data[i];}template T SeqList :: Next ( int i ) { if ( i<0 || i > (last-1) ) return NULL; else return data[i+1];}template T SeqList :: Prior ( int i ) { if ( i<1 || i > last ) return NULL; else return data[i-1];}template int SeqList :: Insert ( T & x, int i ) { //在表中第 i 个位置插入新元素 x if ( i < 0 || i > last+1 || last == MaxSize-1 )return 0; //插入不成功 last++; for ( int j = last; j > i; j-- ) data[j] = data[j -1]; data[i] = x; return 1; //插入成功 }template int SeqList :: Remove ( int i ) { if ( i<0 || i > last ) return -1; for(int j=i;j<=last;j++)data[j]=data[j+1]; last--; return 0;}int main(){SeqList A(10),B(5);int i;float tf; cout<<"Please input the data of A:"< >tf;A.Insert(tf,i);}cout< >tf;B.Insert(tf,i);} cout< C;char tc;cout< >tc;C.Insert(tc,i);} for(i=0;i
SeqList by array written by myself, may be have some mistake. #include #define DefaultSize 10using namespace std;template class SeqList { T *data; //顺序表存储数组 int MaxSize; //最大允许长度 int last; //当前最后元素下标public: SeqList ( int MaxSize = DefaultSize ); ~SeqList ( ) { delete [ ] data; } int Length ( ) const { return last+1; } int Find ( T& x ) const; //查找 T Locate ( int i ) const; //定位 int Insert ( T & x, int i ); //插入 int Remove ( int i ); //删除 T Next ( int i ) ; //后继 T Prior ( int i ) ; //前驱 int IsEmpty ( ) { return last ==-1; } int IsFull ( ) { return last == MaxSize-1; } T Get ( int i ) { //提取 return i < 0 || i > last?NULL : data[i]; } };template SeqList :: SeqList ( int sz ) { //构造函数 if ( sz > 0 ) { MaxSize = sz; last = -1; data = new T[MaxSize]; if ( data == NULL ) { MaxSize = 0; last = -1; return; } } }template int SeqList :: Find ( T & x ) const { //搜索函数:在表中从前向后顺序查找 x int i = 0; while ( i <= last && data[i] != x ) i++; if ( i > last ) return -1; else return i;}template T SeqList :: Locate ( int i ) const { if ( i<0 || i > last ) return NULL; else return data[i];}template T SeqList :: Next ( int i ) { if ( i<0 || i > (last-1) ) return NULL; else return data[i+1];}template T SeqList :: Prior ( int i ) { if ( i<1 || i > last ) return NULL; else return data[i-1];}template int SeqList :: Insert ( T & x, int i ) { //在表中第 i 个位置插入新元素 x if ( i < 0 || i > last+1 || last == MaxSize-1 )return 0; //插入不成功 last++; for ( int j = last; j > i; j-- ) data[j] = data[j -1]; data[i] = x; return 1; //插入成功 }template int SeqList :: Remove ( int i ) { if ( i<0 || i > last ) return -1; for(int j=i;j<=last;j++)data[j]=data[j+1]; last--; return 0;}int main(){SeqList A(10),B(5);int i;float tf; cout<<"Please input the data of A:"< >tf;A.Insert(tf,i);}cout< >tf;B.Insert(tf,i);} cout< C;char tc;cout< >tc;C.Insert(tc,i);} for(i=0;i
a simple shell #include #include #include #include #include #include #include void change_dir(char path[255]);void get_path();void show_cmd_words();int get_pid();void logout();void self_cmd(int cmd_index, char **cmd);void change_echo(int flag);void change_echo(int flag){struct termios info;tcgetattr(0, &info);if (flag == 1 || flag == 0){if (flag == 1){info.c_lflag |= ECHO;info.c_lflag |= ICANON;info.c_cc[VMIN] = 0;}else if (flag == 0){info.c_lflag &= ~ECHO;info.c_lflag &= ~ICANON;info.c_cc[VMIN] = 1;}tcsetattr(0, TCSANOW, &info);}}void show_cmd_words(){int i = 0;char buf[255];getcwd(buf, 255);for ( i = strlen(buf) - 1; buf[i] != '/'; --i);printf("[AShell %s ]", &buf[i + 1]);}void change_dir(char path[255]){int i = 0;char buf[255];if (chdir(path) != 0){perror("The path can not found.\n");}}void get_path(){char buf[255];getcwd(buf, 255);printf("%s\n", buf);}int get_pid(){int pid = 0;pid = getpid();printf("Pid = %d\n", pid);return pid;}void logout(){change_echo(0);char flag = 0;printf("\033[32mAre you sure to shutdown the alin-shell ? (Y/N)\033[m");scanf("%c", &flag);switch(flag){case 'y':case 'Y':change_echo(1);printf("\n");exit(0);default:change_echo(1);printf("\n");return;}}void exec(char **command){execvp(command[0], command);}void self_cmd(int cmd_index, char **cmd){switch(cmd_index){case 0:logout();break;case 1:change_dir(cmd[1]);break;case 2:get_pid();break;case 3:get_path();break;}}int main(){/*********define command list**********/char *cmd_list[255];cmd_list[0] = "logout";cmd_list[1] = "cd";cmd_list[2] = "pid";cmd_list[3] = "pwd";cmd_list[4] = NULL;/*********define ends*****************/int pid = 0;int i = 0, j = 0, k = 0;char *buf[255];char temp_buf[255];printf("\033[32m**************************************************\n");printf("* Welcome to use alin-shell (AShell) ! *\n");printf("* *\n");printf("* You can use the inside command like: *\n");printf("* \"logout\" *\n");printf("* \"cd\" *\n");printf("* \"pid\" *\n");printf("* \"pwd\" *\n");printf("* or other outside-command like: *\n");printf("* \"vim\" *\n" );printf("* \"vsftpd\" *\n");printf("* and so on... *\n");printf("* *\n");printf("* alin-shell is a homework write by *\n");printf("* Fang Yunlin (alin) *\n");printf("* Xiamen Unversity Tan Kah Kee College *\n");printf("* Computer Science & Technology Department *\n");printf("* Mail: [email protected] *\n");printf("* *\n");printf("**************************************************\n\033[m");while(1){i = 0, j = 0, k = 0;show_cmd_words();fgets(temp_buf, 255, stdin);/*****separate the command*********/buf[j] = calloc(255, sizeof(char));while (temp_buf[i] != '\n' && temp_buf[i] != '\0') {if (temp_buf[i] != ' ') {buf[j][k] = temp_buf[i];++k;}else {buf[j + 1] = calloc(255, sizeof(char));k = 0;++j;}++i;}buf[j + 1] = 0;/***********separate end*************/for (i = 0; cmd_list[i] != NULL && strcmp(buf[0], cmd_list[i]); ++i);if (cmd_list[i] != NULL)self_cmd(i, buf);else{pid = fork();switch(pid ){case -1: perror("Fork error.\n");exit(0);case 0:exec(buf);default:wait(0);}}}return 0;}this shell is written by myselfI think is so simple and must be no beautifulHope can bring some advantage to U.if U found some mistake, please tell methank U
提问的智慧 [ZT] 原文请见:http://www.9238.net/stone/tiwendezhihui.htm 提问的智慧 D.H.Grand[nOBODY/Ginux] 2001   在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。   首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。 如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。   尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。   我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。   我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。   如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有 意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。   如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。   (欢迎对本指南提出改进意见。任何建议请E-mail至[email protected],然而 请注意,本文并非网络礼节的通用指南,我通常会拒绝无助于在技术论坛得到有用答案的建议。) (当然,如果你写中文,最好还是寄[email protected];-) = 提问之前 =   在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 1. 通读手册,试着自己找答案。 2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 3. 在网上搜索(个人推荐google~~~)。 4. 向你身边精于此道的朋友打听。   当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。   周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。   小心别问错了问题。如果你的问题基于错误的假设,普通黑客(J. Random Hacker)通常会用无意义的字面解释来答复你,心里想着“蠢问题...”,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。   决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思维激励作用的问题--一个对社区的经验有潜在贡献的问题,而不仅仅是被动的从他人处索要知识--去挣到这个答案。   另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。
提问的艺术 原文请见:http://www.9238.net/stone/tiwendezhihui.htm 提问的智慧 D.H.Grand[nOBODY/Ginux] 2001   在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。   首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。 如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。   尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。   我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。   我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。   如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有 意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。   如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。   (欢迎对本指南提出改进意见。任何建议请E-mail至[email protected],然而 请注意,本文并非网络礼节的通用指南,我通常会拒绝无助于在技术论坛得到有用答案的建议。) (当然,如果你写中文,最好还是寄[email protected];-) = 提问之前 =   在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 1. 通读手册,试着自己找答案。 2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 3. 在网上搜索(个人推荐google~~~)。 4. 向你身边精于此道的朋友打听。   当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。   周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。   小心别问错了问题。如果你的问题基于错误的假设,普通黑客(J. Random Hacker)通常会用无意义的字面解释来答复你,心里想着“蠢问题...”,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。   决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思维激励作用的问题--一个对社区的经验有潜在贡献的问题,而不仅仅是被动的从他人处索要知识--去挣到这个答案。   另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。
研究生心态不好要价高 求职遭软件公司冷遇   11月23日,重庆市双选会上抛出绣球的1.3万个就业岗位中,有2800个岗位明确要求研究生以上学历,高学历者受青睐仍是双选会的特点之一。但与此同时,在重庆市几所高校做招聘的某软件公司总经理陈先生却询问前来应聘的100余名大学生:“请问你们中间有研究生吗?我们公司现在不太想招研究生。”  台下一片哗然。学历高反而遭到“歧视”,成了就业门槛?“我不是歧视研究生。其实,本来学历高低都不应该是问题,但是在国内,在目前,有时候学历高反而成了一种桎梏,成了学子们成才的绊脚石。”陈有些无奈地说。   陈不想招研究生并非吃不着葡萄说葡萄酸。作为一家从事软件开发的高新科技企业,他的企业里不乏高学历者,而他本人也是博士。为什么他不想要高学历的员工?“主要出于两个考虑。其一,研究生的心态不是很好。我去成都一所高校招聘,看中两个研究生,他们学的是编程,本来我希望他们来做工程师,做研发,但他们都向我表示不想做太久研发,只想做管理。我并不是觉得他们没有可能做管理,只是任何公司做管理的人都是少数,大多数人都是做具体工作,而且管理也并非他们所理解的管人,而是为了其他人能更好地工作。但是抱有这种心态的研究生比较普遍。在我的公司,也有一些研究生在工作了一年半载以后,就向我提出不想再做编程,希望只做管理。尽管我认为他们是非常优秀的软件工程师,如果他们能专注于研发,肯定会有很好的前途,但遗憾的是他们不能静下心来。而我也并不认为他们就适合做管理,所以最终我只能遗憾地让他们离开了。”“另外,我不认为他们的能力与他们的要价成正比。有不少研究生首先想到的不是我能为企业做什么,而是企业能给我什么。所以他们要求的工资比本科生高很多。比如说我刚才提到的那两个研究生,一个比本科生要求的工资高了100%,另一个高了150%,但他们的实际动手能力并没有比本科生高出100%~150%,甚至并不比很多本科生强。”“扩招以后,培养研究生和本科生的方法都差不多,都是批量生产。研究生和本科生的差别并不大,只要学习能力强,本科生并不比研究生差,而本科生的心态要好得多。在我们公司成立以来的3年中,成长得最快的都是本科生。”   该公司测试经理游先生对陈的观点也表示赞同。他在向公司提出自己所要招聘的测试工程师的要求中同样注明:本科以下学历。“有句话说得很好:宝刀虽利,不动文士之心;骏马虽良,不中农夫之用。”游说,“现在有些单位不管什么工作,盲目追求高学历,是一种奇怪的现象。其实,任何工作,关键是要人尽其才。有的工作确实需要资历很高,但有些工作比如测试,并不需要很高的学历,只要态度认真,掌握基本技能,就可以做得很好。学历高了,心态往往也不一样,如果分配简单的工作,往往高学历的人干得还不如低学历的人。而对企业来说,付很多钱,却没有相对应的职位提供给他,也是一种损失。”
从计算机系学生(含游戏学院)到强大的游戏程序员必备书单 引:有一阵子没在csdn这边发帖子了,不知道还有人认识我没。在新浪那边开了blog,来这边发篇文章宣传一下,顺便散点分。请大家多支持,有什么说的不对的,随便批评,不要骂人。书单还没列完,稍后会继续。本人blog会陆续发原创的程序技术文章。对C++有兴趣的请收藏。终于可以登陆blog了,从昨天周六到今天白天,一直系统繁忙,不知道新浪怎么搞的.起个乍眼点的名字,给我新开的blog吸引点人气.之所以从计算机系学生入手,是因为不想列举一些跟编程关系不大,但做为程序员应该看的书.如操作系统,编译原理,数据库,基本数据结构.强大的游戏程序员这个词造有点夸张,实话实说,吸引眼球用的。 我在面试程序员的时候有一个问题无论对方经验、学历如何,都一定要问。就是让其列举几本自己喜欢的技术书籍,在我看来,如果连几本好书都没看过,水准也高不到哪儿去。通过其对列举书的描述和一些简单的交流,除了考察技术水平,也可以比较容易看出应聘者是否好学上进。 我本人是喜欢看书的,市面上的技术书籍,但凡认为稍有阅读价值的,都会收入柜中。这其中不乏稍加翻看后束之高阁的,也确实发现了一批好书。新进公司的程序员,特别是应届生,我都会给他们推荐下面这份书单。还有些书是要求人手一份的。来找工作的计算机应届生,在我看来最大的问题不是经验的不足,而是视野狭窄,除了课堂内容外所知寥寥。大部分人对C++的认识竟然还停留在C+class的程度.有课外阅读书籍的也以一些手把手系列为主. 这份书单跟论坛上常见的应该有所不同,涉及游戏开发的各方面。书的数量也比较多,但每一本都尽量做适当说明.书目内容之后随着我购书进程也会更新.书目里的大部分书我书柜里都有,手头没有或为电子版的尽量说说明.想买这些书的话可以去www.dearbook.com.cn和www.china-pub.com找.电子书的下载地址不要问我.书单里从入门到高阶的书籍都有,在校生,应届生,各等级程序员,应该都能找到适合自己的内容.PS:看书之余不要停止思考和动手写代码练习. 第一类 通用编程技术及C++书籍 新人在进入游戏行业之前通常会做些准备,又通常都以d3d,openGL,DDraw,Shader,J2me等实用性技能内容为主.其实一般游戏公司招应届生最注重的反而是基本的编程素养(不排除有垃圾公司指望应届生进来解决技术困难).基本编程素养并不是生下来就定型了的,这里面包括程序设计的思维能力,编码风格,和对所使用的语言的掌握程度等.这些东西通过阅读书籍和勤加练习都能得到很大程度的提高.而对于刚进入这个行业的程序员而言,提高自己的编程素养是你提高自己在项目中的地位,升职加薪的最重要一环. 重点推荐书籍:1 Effective C++ 中文第三版关于这本书已经有太多的褒奖之词,我不多说了.如果你想靠C++吃饭而没读过这本书的话,可以反省一下自己的闭塞了.想进入C++领域而不读此书,无疑要走无数弯路. 2 设计模式又是一本无需废话的书.想告别蛮荒时代,进入现代编程殿堂,先得学会程序们的黑话(这叫什么逻辑?!)这本书介绍了二十多个使用最广泛的设计模式,并统一了命名.这不是本讲C++的书,但这本书的重要性无庸质疑.和Effective C++一样,是想吃好这碗饭就要买来读的书. 3 C++ Primer 中文第四版这本书的优秀之处不仅在于面面具到,而且浅显易懂.推荐这本书是因为这是一本讲现代C++的入门书,而不像大部分入门书为了显得容易些,介绍过时的编程风格和绕开难懂内容.这本书的编排上把vector放在了数组前面,把string放在了char[]前面,把STL放在了class前面.传统的C++入门书把这些东西当成高级内容.其实这些在现代编程中正在逐渐变成基础. 4 C++编程规范这本书是我要求进来的程序员必买的书.来找工作的大部分应届生(其实很多有经验的应聘者也一样),对编程规范毫无概念.很多公司会让应聘者寄代码片段,一般就是为了考察编程风格,新人进到公司,往往第一件事就是要进行对编程规范的培训.这本书的100条稍显冗长,并非条条精彩.不过多数条目确实是实际项目中应该切实遵守并成效明显的.这本书价格很便宜,我认为在职程序员,应该人手一本. 5 重构又是一本java书,对于这本书最重要的不是它的内容,而是它所宣扬的重构对于程序设计的重要性.重构绝对不止改变已有代码,更重要的是每次精心的重构都会给你带来编程素养的飞升.当然,这本书的内容也非常棒.如果你所在的团队还拒绝重构,能改变就改变,不能改变尽快离开... 6 C++必知必会另一本我要求新来程序员人手购买的书.这是一本汇集了很多时髦的初中级编程技术的小册子.里面的大部分内容已经成为现代C++编程的基本技能需求.你可以看看书的目录,如果有三分之一以上内容你不知所云,请立刻购入吧.(实际上除了前几条外几乎所有内容应届生和一年左右经验的程序员都不知道).稍有遗憾是翻译质量不太满意,可以考虑购英文版. 7 Exceptional C++系列这个系列一共出了三本,Exceptional C++, More Exceptional C++, Exceptional C++ Style.这套书不太适合初学者阅读,但如果当对C++的基础内容如多态,模版,stl,异常,内存管理都有一定认识,并有十来万行编码经验后,阅读这个系列的书会让你感到愉悦.这是一个问答系列,里面的问答都很精彩.翻译得不错(翻译算不上精彩,只是不错).所讲内容实用性都非常强,讲解也比较易懂. 8 高质量C++编程指南重点推荐里第一本国产书(不知道什么时候会再有国产书加进来)。这本书除了对编码风格的一些讨论,也列举了C++使用中的一些常见问题。内容非常浅显易懂,不过这些问题确实经常困扰C++初学者。 推荐书籍:(介绍待添加) Think in C++ 卷一,卷二More Effective C++Effective STLSTL源码剖析深入探索C++面向对象模型C++程序设计新思维C++网络编程 利用模式和ACE消除复杂性Imperfect C++C++STLC++TemplateC++游戏编程Unix程序设计艺术代码大全第二版道法自然 第二类 项目管理,开发流程,杂谈 第三类 游戏编程技术 未完待续转载请写明出处 我的blog http://blog.sina.com.cn/u/1246772293
首页 6 7 8 9 10 11 下一页