作者TitanSue (要算命的找我)
看板Soft_Job
标题Re: [讨论] 大家对新人程式的要求?
时间Mon Sep 22 21:21:11 2008
我讲一下关於coding style的部分,我认为这是一个好RD最基本的观念
也是team work最简单能做到的地方
举个例好了,当前後的code都这麽写
for(int i=0 ; i<10 ; i++)
{
a += 10;
}
如果今天面试的人这麽写
for(inr i=0 ; i<10 ; i++) a+=10;
我就会认定他是不懂得follow coding style的人
但如果是
for(int i =0 ; i<10 ; i++){
a+=10;
}
这样就还可以接受
有人说模组化切开就没这个问题,但是总会有人离职
一组程式会有好几个人碰过(我都说那是人尽可夫的程式...)
难道里面要有四五种风格吗?那要是被新人接到不就是要逼他走人...
新人刚进来一定会code review的,不管他工作了几年
有人说这样会受到约束,我倒是觉得如果约束一个人可以让整个team更smooth
我会很乐意做这样的事,别人不需要为你的习惯付出代价
也希望刚找工作的新鲜人能注意,个人的习惯最好能跟team的风格做个配合
※ 引述《TonyQ (沉默是金)》之铭言:
: ※ 引述《TitanSue (要算命的找我)》之铭言:
: : 推 su35:要我每天去猜他的程式什麽意思 这种公司我也不愿意去 把程式 09/22 00:11
: : → su35:整个都切割分开来 程式流程图明确 不管每个人写的风格如何 就 09/22 00:12
: : → su35:没差了 09/22 00:13
: : 推 andymai:那原po所谓的coding style长怎样?可以让小弟见识一下吗? 09/22 00:17
: : → andymai:感觉有点像把"思考模式"统一化~看到别人的code像自己写的 09/22 00:19
: 比方说 , 像有些人会去考虑相依性问题 ,
: dao , model , service切得很开 ,
: 也就是如果你在model call dao的东西 ,
: 很抱歉 ,compile是会过不去的 . XD
: 还有一些是命名法则跟资料夹怎麽开 ,不见得需要看到别人code像自己写的,
: 但是起码会有一点蛛丝马迹可寻 , 还有一些就是避免造成coding困扰的地方,
: 像类别的 getter/setter 要放在class的前中後的哪一区等等 .
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.187.73
1F:推 fishyki:如果面试官是爱第二种一行完成的呢= =? 09/22 21:41
2F:推 TonyQ:他有提到「前後code都这样写」... 09/22 21:55
3F:推 VinceChen:可是Sun的Java Convention不就是第三种写法吗? 09/22 22:01
4F:→ VinceChen:我在Eclipse的Code Style设定中看到的(Java Conventions 09/22 22:04
5F:→ VinceChen:[build-in]) 09/22 22:04
6F:→ VinceChen:code写的好不好看,多去看jdk的source或是apache project 09/22 22:06
7F:→ VinceChen:的src不就好了 09/22 22:06
8F:推 andymai:哇!严厉到连这个也要~不过...我个人也比较喜欢把左右大括 09/22 22:36
9F:→ andymai:号打出来~干嘛省这点时间却可能让人debug时判断错误... 09/22 22:37
10F:推 IceSword:囧,完了。我不太喜欢太正规的写法,我连写 For loop 09/22 22:43
11F:→ IceSword:都会 把 初始值 和 变动量 拆出来写 Orz... 09/22 22:44
12F:推 mingtai1:我们也很重style.. code几万行 review起来真的有差 09/22 23:08
13F:推 streitleak:不要说几万 几百行 光把{}被省略的地方 逻辑搞清楚 09/22 23:11
14F:→ streitleak:就要花很多时间了.... 09/22 23:11
15F:推 kerickuo:个人不喜欢 for( int i; 这种格式,会造成重复宣告的麻烦 09/22 23:13
16F:推 iincho:不是喜好问题, 重点是原来程式怎麽写就怎麽跟... 09/22 23:19
17F:推 kerickuo:在实际运算值变的地方宣告变数为什麽会是好的? @_@? 09/22 23:22
18F:推 iincho:因为符合最小scope的原则.... 09/22 23:30
19F:推 poqwer:个人非常厌恶省略大跨号,因为很多小bug就是这样来的~ 09/22 23:34
20F:推 ledia:给楼上, 用 python 吧 XD 09/22 23:35
21F:推 kerickuo:那也要用 c99 或 c++ 才会符合啊 XD 09/22 23:41
22F:推 mingtai1:i大说的没错..原来程式要接着maintain,code很脏就很难搞 09/22 23:42
23F:→ mingtai1:除非你愿意花时间去把该变数每个出现的地方都改名称.. 09/22 23:43
24F:→ mingtai1:ps刚讲的是变数命名style.. 我甚至不喜欢i,j,m这种出现 09/22 23:45
25F:推 firedragen:我用Eclipse当IDE,有快速键作code style排版 09/23 00:11
26F:→ firedragen:所以只要把要维护的code的style弄成预设就ok 09/23 00:11
27F:→ firedragen:但是变数命名就真的要看习惯跟经验了 09/23 00:12
28F:推 abcdefghi:code complete里建议不要偷懒用 i,j,m 这种无意义的变数 09/23 00:14
29F:→ abcdefghi:名称,即使只是一个loop里的临时变数,也不要偷懒. 09/23 00:15
30F:→ abcdefghi:要改正一些老家伙或自由派的同事,还是直接搬书出来比较 09/23 00:16
31F:→ abcdefghi:快,这年头很多人在比较程式的好坏,是在於"执行速度"和" 09/23 00:18
32F:→ abcdefghi:code size",可读性,扩充性根本没几个人在意. 09/23 00:19
33F:推 TKyo:哈哈, i j k m n p, 写很久的程式设计师都会这样用 09/23 00:32
34F:推 GALINE:如果是小loop的loop counter,这也没啥不好 XD 09/23 00:33
35F:→ TKyo:而这时观看的重点是 "命名", 而非在这些暂时变数上面 ... 09/23 00:33
36F:推 ledia:dummy 就是 dummy, 我反而不能接受硬要帮他们取名字.... 09/23 00:35
37F:→ TKyo:不过, 这种命名反而不会应用到低阶语言上面就是 09/23 00:35
38F:→ ledia:int i_this_is_a_dummy_index_variable; 09/23 00:35
39F:→ TKyo:因为低阶语言写作, 能不用到变数就不要用, 存取暂存器速度快 09/23 00:36
40F:→ TKyo:ledia.. int *p_this_is_a_temporary_pointer XD 09/23 00:37
41F:→ GALINE:int reportGenLoopCounterInner 双重回圈还送outer喔 09/23 00:38
42F:推 chph:回圈的计数变数用 i, j 怎麽会无意义? 难道要写 loopCounter? 09/23 00:42
43F:→ chph:这样才是多此一举吧 09/23 00:42
44F:→ TKyo:对了, 这种命名, 小写的 L 会跳过, 因为会混淆 :) 09/23 00:44
45F:推 abcdefghi:dummy是指无意义,只是为了语法才留着的变数,和i并不相同 09/23 00:56
46F:→ abcdefghi:仔细想一下,每个for配合i的回圈,其实当中的i都会有它的 09/23 00:58
47F:→ abcdefghi:意义存在,例如,把每个月的收入加总, for(i=1;i<=12;i++) 09/23 00:59
48F:→ abcdefghi:i其实就是month,那为何要写i,不写month? 刚开始我也觉得 09/23 01:00
49F:→ abcdefghi:CC要求i不要出现太极端,现在用久了,才觉得,真的过去的习 09/23 01:01
50F:→ abcdefghi:惯,才会觉得i的出现很合理. 09/23 01:01
51F:推 kerickuo:在这种情况下,本来就会命名为 month 吧? o_O 09/23 01:03
52F:→ andymai:之前被要求i要改成有意义的单字~像是XXXIndex等~自然名称 09/23 01:03
53F:→ kerickuo:用 i 的情况多是拿来当 dummy 的,若是每个 iteration 有 09/23 01:03
54F:→ kerickuo:意义,且不能省略的话,那本来就不该用 i 来命名变数。 09/23 01:04
55F:→ abcdefghi:对了,其实CC里也不建议把型别资讯放在prefix里,不过我自 09/23 01:04
56F:→ andymai:是又臭又长~如果这又是做为List之类的存取指标~拿出来的物 09/23 01:04
57F:→ abcdefghi:已是觉得,除非在embedded里,比较低阶的情况才会加type. 09/23 01:05
58F:→ andymai:件又想直接转型马上用~那行程式真是长到不行=.=啥?写成两 09/23 01:05
59F:推 Huangs:2和3都没有follow 1的style,为何3能接受,2就比较不能? 09/23 01:05
60F:→ andymai:行?这样是会比较好看没错~但心中总觉得指标不要取那麽长就 09/23 01:06
61F:→ Huangs:另外,iterator的意义又不一定总是像month一样简单明了 09/23 01:07
62F:→ andymai:好了~有时候程式已经很好看了~再多加什麽只是画蛇添足... 09/23 01:07
63F:→ Huangs:如果只是小小一段code如把stack里的东西扫一遍 09/23 01:07
64F:→ Huangs:用 i, j, k 这种约定成俗的 iterator 有何不好? 09/23 01:08
65F:→ Huangs:又,例如在实作演算法时,很多变数都很抽象, 09/23 01:09
66F:→ Huangs:如Warshall的三层loop,每一层的iterator如何取具体的名字? 09/23 01:10
67F:推 abcdefghi:好不好看,是很主观的,一个statement里,塞了一堆运算,跟 09/23 01:13
68F:→ abcdefghi:有人把for写成一行,不是很相似吗? 写程式应该是尽可能的 09/23 01:14
69F:→ abcdefghi:让其他人看得懂才对. 扫stack,是想找什麽东西呢? 那样东 09/23 01:17
70F:→ abcdefghi:西的名字就可以拿来取代 i, 至於一些演算法,可以直接拿 09/23 01:18
71F:→ abcdefghi:原始的paper或书籍来抄命名,如何把名字取得又清楚又不像 09/23 01:19
72F:→ abcdefghi:又不会太长,就考验写程式的人的coding经验和对该领域的 09/23 01:21
73F:→ abcdefghi:深度了,多练习,慢慢就会变好. 09/23 01:21
74F:推 Huangs:大多alorithm的原始pesudo就是充满 i, j, k 啊 :P 09/23 01:21
75F:推 ledia:噗 该死的 paper 和 itoA 上通通都是 i,j,k XD 09/23 01:22
76F:→ Huangs:很多课本(如 K&R) 或经典的 code 也都有用 i, j, k 09/23 01:22
77F:→ Huangs:另外像stack的例子 具体的变数名是 somthing=stack[i] 09/23 01:24
78F:推 abcdefghi:软工也是会进步的,十年前写coding style的书,和今年出版 09/23 01:25
79F:→ Huangs:而不是在 i 的地方用具体的变数名 09/23 01:25
80F:→ abcdefghi:的内容就会有不一样了 09/23 01:25
81F:→ Huangs:因为 i 就只是一个没有具体意义 iterator 09/23 01:25
82F:推 TKyo:想起我家有本 2x 年的 APPLE BASIC 书, 它也是充斥 i j k :D 09/23 01:26
83F:→ Huangs:那可不可以请a大教我如何简短又具体的命名Warshall三层loop 09/23 01:26
84F:推 ledia:可能是 iVertexFrom, iVertexImmd 和 iVertexTo 吧 (误) 09/23 01:28
85F:推 TKyo:nLoop, nLoop2....nLoopx XD 09/23 01:29
86F:推 Huangs:推前两楼 XD 09/23 01:34
87F:推 KASUGAOSAKA:java是第三种多...c&c++是第一种多 09/23 14:05
88F:推 mingtai1:我应该说 我领域比较偏软工,所以变数很少用ijk,因为要让 09/23 22:03
89F:→ mingtai1:之後维护的人比较好看code.至於演算法类用ijk倒是没意见 09/23 22:05