从一次考试说起。2010年10月份,综合部邀请我给新入职3个月的员工草拟考试试题,这些同事大部分在公司做的实习,算起来至少也有5、6个月的工作经验了吧。试题的内容,是针对日常需要面对的问题出的案例,比如,查找文件、修改下权限等,其中最后20分题,就是按要求在屏幕上输出一个由数字组成的菱形。说这些无非是想说明,考题比较简单。但考试的结果却是,有人得到80多分,有人得到20多分,相互间差距较大。根据考试结果,我与部分新人的直接领导聊了聊,基本如实地反应了各位同事的能力。其中,动手能力强、喜欢研究研究linux、平时也经常学习代码、做些小修改的人,成绩就很好。考试成绩出来后,综合部将考题发到了每个人的手,并说明了在2天后进行试题讲解。在讲解前这段时间,只有一位同事找过我,说他的试卷,有地方批阅的不对。他说的确实有道理,有一部分代码写出来了,我却一分没给,这样我知道了有一个人看过试题。但这个人找我的目的并不是想得到正确答案,我想,或许他是想在讲解时再学习吧,我这样告诉自己。在进行讲解时,我首先安排大家花30分钟,将试题中画菱形这道题再做一遍,目的是想看看,有谁会主动对试卷进行学习,结果我只能说很不理想。我想给这样的同事一点建议:从技术上讲,需要进一步提高对基本的C、UNIX知识的掌握,尽快将知识转化成工作能力;从态度上讲,要正确审视自己的能力,认真对待自己的工作,对于不懂不会的问题,要及时尽早解决。而解决的唯一办法,就是学习、探讨和研究。记得我刚参加工作,到公司时的导师对我说,“在公司的头两年,你就使劲学使劲学,保证有东西让你学”。好吧,我就学吧。那时的我,应该和现在这些同事所面临的问题比较相似,学什么、如何学、学到什么程度,怎样才能达到一名合格员工的标准?其实,在讨论学什么东西之前,还有一个更为重要的问题需要解决。那就是,为什么要学!!!我想,归根结底,就在于我们的职业选择。IT企业普遍有个特点,“把女人当男人用,把男人当**(此处略去2个字)用。”有句俗话说,“男怕入错行”,我想这句话其实也同样适用IT女生。我们可以做个小测试工,就是问自己一百遍“喜欢当程序员吗”,如果你的回答总是肯定的,那么好的,开始认真学吧;如果发现50多次后面,自己不再那么确定了,那么就为自己打打劲,在后续的学习中多加努力;如果没几次就懒得回答这个问题了,那么可能就真的应该好好想想,是否有必要在一个自己不喜欢并且无法投入的行业中浪费宝贵的几年时光呢。有人会说,不试一试又怎么知道喜不喜欢呢,这种看法,也有一定的道理,但我想说的是,认真思考,果断决定,为自己负责,为企业负责。关于C/C++语言的学习,我个人有以下几点感受:首先,做C/C++语言相关业务开发应该学什么?1、C语言这好像不用想,必须学的。2、C++语言配合对OO的学习,也是必须的。3、UNIX下的C编程学习了C和C++的语言后,因为我们的应用程序一般都是在UNIX环境下运行,所以,学习UNIX环境下的相关技术也是非常必要的。4、SHELL命令及编程要把程序在UNIX环境下运行起来,肯定需要和SHELL打交道。其实,不仅仅是编写SHELL脚本,在做UNIX环境下的日常维护系统时,需要的常用命令也要熟练掌握。5、ORACLE数据库方面业界的老大,我们的应用基本上都使用ORACLE数据库,又怎么不学呢。6、JAVA等页面开发技术至少知道它们能做什么吧。7、质量体系公司有管理方面的质量体系文档,包括过程管理类、项目管理类、工程管理类、支持类等4大类质量体系文档,从到公司开始,就应该学习它、掌握它、精通它。8、编辑工具、系统工具等各种工具包括sourceinsight、UE、PD、FTP、CRT、office、TOAD、PLSQL、Xmanager、CC等,统统都应该了解、掌握、会使用。9、沟通能力“茶壶煮饺子,有嘴倒不出”是技术人员的通病。如何了解用户的需求,如何掌握设计人员的想法,如何知道测试人员的意图等等,甚至包括日常工作、生活的方方面面,都需我们良好的沟通。10、本部门的业务,及其他部门的业务“技术是砖,业务是楼”,我们要利用手中的砖去盖什么样的楼呢?如果我们不知道业务想要实现什么,又怎能将业务需求做好,业务需求没做好,客户凭什么要付钱买单?了解其他部门的业务,就是为了做出更合理的设计。其次,上述10点,说多不多,说少不少,应该如何去学?1、C语言记得在大学期间学数据结构的时候,书上说,数据结构加算法就是程序。要实现一个算法可以有多种语言,但我们选择的是C。C语言是基础中的基础,打好坚实的基础,我们的技术根基才扎实。怎么做呢?我的建议是,找出谭浩强的《C语言程序设计》,将每个章节的练习题逐个在UNIX环境下做一遍,效果要达到编译成功、运行结果没有问题。这种基础性的练习一定要做,不要偷懒,别怕麻烦,更不要仅仅因为认为自己已经会了而不屑去做。俗语道“熟能生巧”,最起码你也可以练习指法,缩短完成代码的时间长度。说“细节决定成败”,你敲键盘的速度比别人快,也是细节,即所谓“磨刀不误砍柴工”。我个人认为,这本书作为基础性教材还是很不错的。程序员的工作,每天需要面对的是文本文件及文本文件的记录,所以,就要求我们熟悉对文件、字符串操作的相关函数。比如,清楚掌握open、close、read、write、fopen、fgets、fclose、fwrite、fprintf等函数;知道open和fopen的区别;对于strcpy、strstr、strcmp、strncmp、strcasecmp、strcat、memset、memcpy等字符串的操作熟练。指针在C语言中的重要性不言而喻,分配了空间,就不要忘记了释放;有malloc函数,就要关心free的地方;还有,free后一定要将指针设置成NULL。2、C++语言可能有的同事首先想到的是《C++ Primer》,我个人认为,这本书更适合达到一定程度的同事,否则的话还是建议从谭浩强的《c++面向对象程序设计》开始。同样,练习题要认真做。熟练后有精力的话再看《C++ Primer》,可以有选择性地看。当然,那么厚的一本书,学习它还是需要一定的时间和方法的,所以,也不必在新人培训期间急于求成,可以把它作为技术支持类的书籍,在日后工作中遇到实际问题时,有针对性地深入学习。《Effective C++》和《More Effective C++》应该作为必读书目,虽然不一定要完全照做,但书中的主旨思想还是要深入理解,即使当时无法一下子吃透,也要尽量记在头脑中。还有《Thinking in C++》也应该认真翻看,不知是否有人要抓狂了,但经典牛书又怎能不看?下面要介绍的是《C++标准程序库》,与vector、list、set、map、string,相关的iteror如何使用,写程序的时候insert()、find()、erase()、push_back()、push_front、make_pair()基本上都要用到。3、UNIX下的C编程记得当年我就是捧着《UNIX 平台下 C 语言编程》这本书,开始了我的第一个程序的编写。程序是一个主控进程,用到了对目录的操作、信号量、管道等。个人认为,那本书的各个部分都堪称经典,比如除上述内容外还有进程、共享内存、进程间通信、socket、多线程等,真正学好这些,想不成高手都难。现在的话,也可以看《UNIX环境高级编程》这本书。如果涉及到网络相关程序,那么《UNIX网络编程》就是首选了。4、SHELL命令及编程《LINUX与UNIX Shell编程指南》我一直用它。内容包括ls–ltr、find、grep、tar、gzip、ftp、top、cp、mv、chmod、chown、useradd、env、vi、more、cat、paste、diff、tail、head、history、split、df、wc等等。其中,vi命令要熟练使用;man命令是我们的帮助手册,无论是命令还是程序的系统函数都可以进行查询。5、OracleOracle的书太多了,我们平时使用的sql并不太深,就推荐《Oracle基础教程》。如果想往DBA发展,这个还是请公司DBA回答,我就不班门弄斧了。6、JAVA等页面开发技术在这个时代,你想不知道JAVA都难。推荐看一下基础的JAVA、JSP、SPRING、STRUCTS、Hibernate书籍。7、TD-OSSP在公司的过程财富库中,找到组织标准过程,就可以看到相关文档了。刚到公司的新员工,应该先学习相关的编码规范,学会看懂需求、设计文档。8、编辑工具、系统工具等各种工具SourceInsight,C/C++编辑工具,个人推荐使用,一般的语法错误都可以检查出来,而且速度快。而Eclipse CDT网上的口碑不好,就没去试用,感觉有点复杂有点慢。UE日常办公必选编辑工具。PowerDesigner是物理模型、数据模型的设计工具,查看数据库表结构,表和表之间的关系。PD支持导入导出建表脚本,支持按模板导出word格式,方便构建数据字典。ER-WIN也是很好的模型设计工具,它在描述实体关系时更清晰。FTP工具,将源码放到主机。我一般就用TotalCommander了,注意,使用ASC模式上传下载源码,否则,^M在unix环境下会给我们捣乱。SecureCRT终端仿真程序,PC机和主机的桥梁,登录到主机上完成相应的开发、维护工作。Office套件及open office相关Word的排版、Excle的函数、PowerPoint的动画、Visio的各种流程绘图,都有很大学问的。Toad、PL/SQL,访问ORACLE的工具,Toad是大而全的ORACLE工具,尤其在监控管理ORACLE数据库方面更突出。PL/SQL调试存储过程比较好。“萝卜白菜,各有所爱”。XManager包含图形化的远程登录窗口界面,远程安装ORACLE就需要它了。Clearcase是我们使用的配置管理工具,与ClearQuest做集成后,方便流程的管理。在CC中连接到一个项目,复用相应的开发流,在开发流上建立本地视图,对目录、文件这些元素进行操作,包括加入源控制、更新操作、检出、检入、撤销检出、合并、处理hijack文件、deliver操作、打基线、CQ中创建activite(CC中的defect)等,这些基本操作都需要清楚。还有就是查看文件版本树,查看个人检出的文件等。9、沟通能力有很多大师级的书,我就不轻言了。例如,余世维的《有效沟通》等等。个人的建议是,平时多注意别人好的沟通方式进行学习。对于不同的人,沟通方式也是不同的。学会站在对方的角度考虑问题、全面考虑问题,更利于达成一致意见。10、业务的学习多看相关的规范,根据规范理解我们的程序是如何实现的。提高业务能力的有效方式就是多做需求。在做开发过程中,经常与导师及需求分析人员进行沟通。了解需求,不要仅局限于当前要实现的需求,对源码中发现的功能、与需求相关的业务等都要进行学习。比如,做累账的需求,就可以对批价的业务进行了解,掌握哪些详单表汇总到了账单表。多做需求是我们提高能力的捷径,刚开始的时候不要怕犯错,不要怕被批评,“多年媳妇熬成婆”,大家都是这样过来的。多问问题,向导师问,老员工问,向每一个可以教你知识的人问。经历多,才能成长快。多做需求,就多学业务、多练习技术、多进行沟通,能力自然就提高了,有好的能力,就会被安排做更多的、更高级别的需求,从而进入一个良性循环。提示一下:其实,上述内容,只是简单地谈论了我们主要使用的技术、工具和能力,在公司的《职位差异能力词典》则对各能力项的要求进行了详细的说明,大家可以参照学习、提高。最后,讨论一下学到什么程度吧。这里想说的就是,如何合理地安排计划,逐步提高我们的能力。在学习的过程中,建议选择2到3门不同类型的书,交叉看,这样不会造成对某门课程产生极度厌倦情绪的不良后果。C和C++,可能我们在大学期间都学过,所以,这两门课串起来学习大概只需要2个月左右的时间。因而,在此期间,可以配合学习一下shell的相关知识。所以,登录主机,vi编辑;make、gcc编译程序;查看日志;gdb调试解决问题等。这一套下来,C/C++语言和主机命令就应该能够熟练掌握了。这部分的学习一定要扎实,以有效减少我们在以后的编程中出现bug的数量。bug数量少,最直接的效益就是可以节省我们自己的时间。其效果甚至不可估量。因为,随着发现bug的时间的推后,浪费的时间将呈几何级地增加。多一个bug,测试组就需要多一个人去测试,而后是,测试人员再和开发沟通,开发修改bug升级程序,接着是再测试。所以,软件工程里有介绍,返工的工作量,不计入开发的工作量。再试想,如果发现bug的时间一直推后到现场,是由用户测试反馈回来的,那情况又该如何?首先,影响用户满意度,其次,得重新开发、测试、发布。神啊,救救我吧,让我远离这些“臭虫”吧。两个月过去了,不知道那些工具你是否已经上手,只是,编辑、编译、ftp、CRT的都用过吧。时间也应该到9月中旬了,再花1个月时间了解一下oracle的基础吧,就是sql语句什么的,如果你能力足够,可以自己安装一个linux,再在上面安装oracle,即可谓牛人一个。实在不行,就找人帮忙安装一个windows版的oracle,就是在关机的时候别忘了先停oracle服务。一个月的时间很快,还有十一要过,不知道你的C语言在头脑中还留存多少。这时,你的领导已经安排你看写文档和代码了,那就好好研究一下吧。代码也许很多,先按有框架代码和业务代码分。在框架代码中包括对日志、共享内存、常用函数、规则解析、数据库连接、文件等相关函数。对于这些函数,需要自己写例子,达到熟练应用。框架中对共享内存和表数据的封装,是有一套模型支撑的,相关实体的作用,需要熟练掌握。达到可以部署相关代码,并正常运行的程度。三个月的时间,我想应该学习这些内容吧。半年的时间过去后,新的一年就要开始了。这时候,技术上的储备应该完成了百分之六七十。接下来,就是让技术为业务服务,进行为客户创造价值、实现自身价值的初始阶段。做需求时,不断学习业务,提高沟通能力,熟练应用技术,综合性提升和完善自身的全面能力。在理解用户需求时,最好直接与提出原始需求的人进行沟通,了解需求的来龙去脉,以便于掌握更多主动权,从而为用户提供更好的解决方案。做需求的过程中,更是需要与方方面面的人进行沟通,比如:与客户沟通需求;与自己的领导沟通设计实现方案;与小组内相关人员讨论代码实现,进行单元测试,发现bug,处理问题;与测试人员沟通程序功能,完成系统测试,等等。这个过程中,同时也对相关的系统工具进行了学习,TMS、CC、CQ、开发工具、测试工具等。如果你的学习踏实有效,大约半年到九个月的时间,应该就可以基本掌握上述能力。当然,由于各专业的业务复杂程度不同,时间长短会有相应的差异。时光荏苒,一年到一年半的时间过去后,个人的能力差异可能就会逐渐突显出来,能力强的,在某种程度上甚至可以带新员工了。而还有一部分人,则可能仍需要加强基础性学习。再给大家推荐一本书――《高效能人士的七个习惯》,或许可以从中借鉴。最后还想谈几句。大学期间,是个人家庭为你付学费,你学了什么,学了多少,可能更多在于自己的意愿。而参加工作后,是由公司为我们出学费,这时,你是否想到公司出资的目的,是否应该在工作上做出相应的回报?为公司的发展负责,同时也为个人的成长进步负责。希望每一位新员工能够尽快转化角色,早日真正走出象牙塔,融入公司、融入社会。最后,建议大家早睡早起,吃早餐,多运动,少玩电脑游戏,过健康向上的生活,开心愉快地渡过这两年的时光。
在公司的头两年 C/C++程序员成长之路
最新推荐文章于 2023-05-20 14:38:20 发布