数学建模社区-数学中国

标题: 【转】计算机编程新人入行指导 [打印本页]

作者: sea_star666    时间: 2010-2-4 20:22
标题: 【转】计算机编程新人入行指导
本帖最后由 sea_star666 于 2010-2-4 20:27 编辑
: V7 q! s! ~* _5 [% Z0 H( p+ r/ Z& L7 p
从2003年加入现在的公司,已经有了快6个年头,自己也从一个计算机软件开发方面的新兵变成了老人。在公司里也做过几个不同的项目,有一些新的同事加入项目组,会有这样那样的疑惑和问题。在这里想简单说说,一个新人如何能快速的融入一个新的开发组,让其他同事能够接受自己。 & W: j8 w, C/ T! U1 j( h1 w  Y
首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读禁用词语文档”,这是在新闻组或者论坛里可能常见的回复,一些人娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单问题,这些问题实际上都在项目文档或者软件规范里就明白写着。 & e/ ^8 w! T" K: V4 W6 n, J0 \; J
一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有什么进展,领导看了还以为在磨洋工呢。 - _9 l( h% J- L/ ~/ f
**注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉**个大笔记本,里面写着项目开发的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。
* |. f, ^1 ]) d如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。 . y" E- h3 y/ H. W7 j
**注意事项二,接到一个项目第一个要问的就是这个项目结束期限(dead line)是什么,这样心里比较容易对进度有个估计,免得最后无法完成任$ ~/ j# q  Z  F
务。领导可能会反过来咨询老程序员对分到的项目难度估计。一般来说,估计一个大概的编码时间,然后把估计时间乘二,留出一定余量比较好。 7 o1 g' x. ^  @# \4 [$ r$ e& l
读文档不要作为一个整体任务完成,可以用一些零碎时间来读。实际上接手一个新任务,必须要做的就是理解需求。一个开发人员如何不理解他想做什么,基本上这个任务一定会失败。我们高考时候都会写一篇大作文,对题目的理解非常重要,偏题跑题就没法拿到高分,开发也是如此。对需求的理解需要反复的进行,定期和项目组领导或者客户进行沟通,以免自己做了无用功。但是沟通之前一定要注意,自己先掌握一定的背景知识,比如前面提到的规范文档,或者是读一读已经有的代码,跑一跑成型的产品,免得问的都是不必要的问题。 7 @4 `  g" D* R6 x( h
搜索一下可以找到一篇题为”提问的智慧“的文章,里面介绍如何在网上问问题。其实项目组内沟通也是如此,要注意问有意义的问题。打个比方说,有时候自己会有一种感觉,跑到别人面前,把问题说了一遍,还没等人回答,突然拍着脑袋说”啊我明白了“,也许是反应挺快,可是还是耽误了别人的功夫,像这样的问题,自己组织组织语言或者写出来,答案就很容易发现。另外也有的人,总是这是怎么回事那是怎么回事,其实到搜索引擎一搜或者是把动手做做就知道结果,但是非要张嘴问,这样的人说得难听点就是问题不经过大脑,其实一思考就能得到答案了。问问题之前也可以试着理清一下思路,看看前因后果,简化一下问题模型,也许经过这些方式,自己就能找到答案。有同组的同事问问题,很多时间我反问几句,把思路理清,他自己就知道答案是什么了。忘记在哪有看到一个轶事,在某个著名软件公司里,开发组的桌上会放着一只小熊,大家互相问问题之前,先对着小熊把问题说一遍,看能不能把问题描述的清晰,基本上说的比较有条理以后,答案也就随之而来了,大家可以试试这个办法。 3 Z, @# ^. j2 A# k, d! Y  d
**注意事项三,提问之前,自己先试图看看能不能找到答案,我建议的寻找顺序是文档、google,最后才是张嘴问,问之前最好已经积累了一些材料,比如关于这个问题自己做了什么研究,搜索了什么关键字等等,这样问的有诚意,回答才能有诚意。 % ~- U: ]7 K% O) S  D3 }0 P
另外,对于一个新人,需要多跟老同事沟通,了解项目的关键点是什么,比如开发一个通讯程序,用了什么协议,哪个网站比较有用,哪个文档需要精读,都是非常有意义的问题,这些问题可以少走一些弯路。早上到了公司,第一件事是接收业务邮件,然后记下一些需要回复或者要做的工作。邮件阅读以后,可以跟项目组长做个简单的沟通,了解一下哪个任务或者功能需要快一点完成,交流一下自己的想法,时间花费不多但是可以把一天的任务明确下来。   m- w, D% I" z* B* v# @
如果比较努力而且有一定的开发能力,两三个月以后应该开始接触到项目比较核心的东西了,这个时候需要做的工作就是读代码。一个项目最重要的东西就是代码,至于文档、注释、测试,其实都是保证代码质量以及代码可维护型的一种辅助手段,作为一个开发人员,不熟悉代码就是致命的错误。读代码我这里有一些简单的体会。 读代码要注意的第一条是从界面开始,深入到功能。打个比方说,一个桌面软件,其中有个格式转换功能,可以从菜单选择”格式转换“进行操作(注意,所谓格式转换就是一个例子,没有实际意义),那么就可以搜索菜单里的”格式转换“,找到相对应的界面函数,这就是一个相对独立的功能入口点了。然后从这个入口点顺藤摸瓜,就可以搞清楚格式转换这个功能需要的一系列界面函数以及逻辑实现函数。   S( P& B/ x" x* G- G
读代码的时候注意要随时做笔记,可以用word或者是powerpoint这样的软件做记录,搭配一个抓屏软件抓取界面变化、程序运行栈或者是一些关键数据就更好了。 + `0 x, f, z0 S# _0 K8 c' H6 g+ m# s
一个相对独立的功能基本上是由几个数据类或者数据结构,加上几个比较重要的逻辑函数实现的,抓住了这些关键就抓住了这个功能的核心。比如说一个通讯软件,重要的就是通讯数据格式和通讯协议实现。经过我的体验,这个小窍门还是很有用的。一般经常出现问题的也就是这些相对来说复杂一些的函数。
2 P* U" Y7 U* J/ L阅读代码的同时还要经常问自己一些问题,比如这个地方为何这样实现,有没有其他的方案,哪个方案更好一些等等。这些问题可以让自己更好的理解当时开发人员的一些想法思路,另外也是将来代码进行重构的一个铺垫。 9 }5 j+ K* A0 c" @
**注意事项四,作为一个开发人员,多思考是非常必要的一个特质。
8 P  |) l) R) |$ v8 Z0 y' ~& H( i! h8 e1 ~% P3 s3 w
一个新人,经过这些阶段,基本上可以成为项目组的中坚力量了,希望每个入行的新人都能成功晋级成为老手。4 s* `, Z2 A6 Q0 K$ G

3 l( L' b; Q) }5 m  q
8 `* b& v" p: K 提问的智慧.rar (21.93 KB, 下载次数: 17)
作者: olh2008    时间: 2010-2-4 20:46
谢谢LZ分享,顶一下!!
作者: rexyu1988    时间: 2010-2-4 21:11
收到,去签到了收到,去签到了收到,去签到了。
作者: BlueSkyWood2010    时间: 2010-2-5 13:33
谢谢你的分享~~~~~~~~~~真的,但是,我没有下载,我自己去搜索了《提问的智慧》。抱歉啊,因为最近美国赛将近,要积累体力!但是很感谢龙海的分享!学到了很多!
作者: manu34414    时间: 2010-2-18 17:06
回复 1# sea_star666
  n0 j* R% p6 z: }' c* n  H, f) a: T* F0 _; w1 N/ C! R1 w

% D  F5 _6 k: v) r8 y5 z1 k    个人觉得 还是C强大 不过对于MCM还是用更高级点的好 节省时间!
作者: ch71444    时间: 2010-2-18 20:54
`踩```````````踩``````````踩2 U! K8 N7 |# N$ n$ `3 p, {7 i
踩`````````````````````````踩
9 G5 |) ^4 m4 w( A  A2 ?0 a* Y, |踩````╱o順齊自繎o`````````踩
/ n! \6 ?7 P. T/ w  M5 s`踩```````````````````````踩
* D. S2 w' J) k: w) b- c! w& R```踩``````记得回踩`````踩
0 W9 M, o" Q  q9 t3 l``````踩`````````````踩$ X$ m9 ^* d' s4 W3 t
`````````踩```````踩
+ j; d3 o2 ]( f4 l`````````````(_ 陽, r) S. I! A2 j) t& N! Y5 `  x
·.☆˙*.4 T1 J/ u: U* H3 y6 B  |+ l2 _
☆˙ 、
6 I, y& W# |+ n☆.! x" n9 F. ?% \; w+ Q% C! J! L

3 t1 f5 m5 k% l3 `6 `# t$ A/ c  ★。4 P3 V- v& i; O5 [# b+ D4 u
   ‘★.3 T# l; [6 O- Y7 n$ V
      `★`˙·
作者: 陈了    时间: 2010-3-12 09:40
谢谢LZ的分享。收到了。会注意的
作者: kuang17    时间: 2010-4-11 00:58
还遥远啊·······························
作者: silecainengai    时间: 2010-4-13 12:39
感谢楼主的经验分享啊,宝贵。。。。。。。。。。。。
作者: 大漠判官    时间: 2010-4-13 22:22
谢谢楼主分享,收下了,向编程靠近
作者: shiyaotc    时间: 2010-5-15 13:28
谢谢~~~~说得很不错!!!!!!!~~~~~~~~~~~~~~~~
作者: alarmfire    时间: 2012-2-15 21:11
确实很重要,毕竟别人都有自己手头的事情要做
作者: GraBUAA    时间: 2012-4-2 15:56
谢谢,顶一下




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5