Re: [请益] coding style差太多怎办?

楼主: fatalfeel2 (风在动)   2023-03-21 14:04:37
原Po 研究过 Allman Style , K&R style, GNU style
还有 ISO c99 c++2011 c++2014 c++2022
实际撰写过 Linux kernel, Zephyr, Android framework & App, Python3 for AI
Scala for Risc-V, IOS Object-C .m .mm, tracing gcc source, C#, Inline assembly
buildroot, bash, Makefile
拜读过大师 Weinberg 的程式心理学 The Psychology of Computer Programming
另有 系统开发思惟 An Introduction to General Systems Thinking
也撰写过完整的 Hungarian notation 语义学 分析 和 它的历史
//
这是有发过文的
int a=1,b=2,c=3;
if(a)
{
a=1;
if(b)
{
b=1;
if(c)
{
c=1;
}
}
}
////////////////
int a=1,b=2,c=3;
if(!a)
{
return;
}
a=1;
if(!b)
{
return;
}
b=1;
if(!c)
{
return;
}
c=1;
上下那一段的 coding style 好些?
不管选上或选下 你可以有一百种理由
但当我转换到 asm 时 你就知道原因
push %rbp
mov %rsp,%rbp
int a=1,b=2,c=3;
movl $0x1,-0xc(%rbp)
movl $0x2,-0x8(%rbp)
movl $0x3,-0x4(%rbp)
if(a)
cmpl $0x0,-0xc(%rbp)
je 0x555555555e7f <teseMe1()+64>
a=1;
movl $0x1,-0xc(%rbp)
if(b)
cmpl $0x0,-0x8(%rbp)
je 0x555555555e7f <teseMe1()+64>
b=1;
movl $0x1,-0x8(%rbp)
if(c)
cmpl $0x0,-0x4(%rbp)
je 0x555555555e7f <teseMe1()+64>
c=1;
movl $0x1,-0x4(%rbp)
//
push %rbp
mov %rsp,%rbp
int a=1,b=2,c=3;
movl $0x1,-0xc(%rbp)
movl $0x2,-0x8(%rbp)
movl $0x3,-0x4(%rbp)
if(!a)
cmpl $0x0,-0xc(%rbp)
je 0x555555555ec4 <teseMe2()+66>
a=1;
movl $0x1,-0xc(%rbp)
if(!b)
cmpl $0x0,-0x8(%rbp)
je 0x555555555ec7 <teseMe2()+69>
b=1;
movl $0x1,-0x8(%rbp)
if(!c)
cmpl $0x0,-0x4(%rbp)
je 0x555555555eca <teseMe2()+72>
c=1;
movl $0x1,-0x4(%rbp)
jmp 0x555555555ecb <teseMe2()+73>
return;
nop
jmp 0x555555555ecb <teseMe2()+73>
return;
nop
jmp 0x555555555ecb <teseMe2()+73>
return;
nop
现在你可以看得出来代码的数量....心里也有答案了
这是开放性的解答
/////////
想要制定coding style的人或主管 必先要学会自省的功夫
1. 自己有尝试过 别人写的style 一天或一周吗?
还是我只是将某个我习惯的style 强加在别人身上
2. 我有试过 新的coding style吗?
3. 我有试过 各种不同的语言吗?
99%的人 在制定coding style的人 没有这3点的自省~~~
他也没有考虑过 语义学 心理学 在coding style的影响
把时间耗在 定名字 定括号 导到工程师实际上花了三倍的时间
在view code 没有时间去 思惟 整个架构的安全性 速度 cpu & memory 负载量
要打磨的是画作 不是画框
看过python3的人都知 if else. 括号? 我根本不用考虑这东西!!!
制定的 coding style 能使c/c++ 转到 python 的人 在跨语上 更容易读懂吗?
一个好的 coding style 制定者 会自省
使用大脑使用最少的组合 或 拆解次数 做为制定方针
把更多的时间 放在对的地方~~~
如果说目前最常用的组译器
gcc g++ arm-linux-gcc aarcg64-linux-gcc gdb gdbserver
they are all released by GNU 或 经过修改过
https://ftp.gnu.org/gnu/gcc
那使用组译器最易懂的 style 会不会是最好的呢?
答案当然是 不会只有某一种style 是最好的
你可以 考上述原因 融合各种 style 创立最适合 自己团队的!!!
未来的主管们 请多想想 你是怎么制定 coding style的~~~~
※ 引述《prag222 (prag)》之铭言:
: 大家好
: 小弟上上份工作快离职前
: 听到新进的同事说
: 他都习惯把程式写成一个一个小的function
: 后来离职我花了一点时间学习设计模式
: 和了解SOLID原则
: 我越觉得这种作法很OK
: 我大概也知道这应该是重复说高手说过的话
: 所以后来找到工作
: 专案自己一个人开发
: 也没主管强制要求程式该怎么写
: 变照着 之前同事说的话去开发
: 让程式码 程式码也是有结构性架构性的
: 而不是一个function写几百行几千行
: mvc Model层也是切得很干净
: Model层写的就像api
: controller带参数给MODEL层捞资料出来
: 不过我最近的公司
: 完全不是这种做法
: 虽然是MVC不过还是下SQL查出资料
: 看到function写几百行我看了就昏(业务逻辑)
: 为了符合公司专案的coding style有点辛苦
: 基本上我速度也差不多折损一半也有了
: 不过尽可能把程式码写成一个一个小单元应该也没错吧
: 毕竟单元测试
: 跟我最近看重构的书也是建议这样
: 上份工作有改到open source的专案
: 好像也是这样
: 是很难看的懂 但扩充维护修改都很轻松
作者: bmiss (花草七下)   2023-03-21 14:33:00
就我认知除非为了性能,不然不会考虑转成组语的代码量
作者: leolarrel (真.粽子无双)   2023-03-21 14:46:00
客户:我发案子给你的,要你怎么写就怎么写
作者: labbat (labbat)   2023-03-21 15:09:00
style 是用来管别人的,自己不用遵守主管说的
作者: CaptainH (Cannon)   2023-03-21 15:21:00
你是不是闲得没事干天天想这个
作者: kiedveian (极地之星光)   2023-03-21 15:23:00
反串吗?上下两段只差return,意思是不要写return比较好?
作者: CaptainH (Cannon)   2023-03-21 15:23:00
formatter+linter下去 花脑力在无聊的枝枝节节做什么
作者: kiedveian (极地之星光)   2023-03-21 15:24:00
转成asm两边的缩排差异就比不出来了
作者: loadingN (sarsaparilla)   2023-03-21 16:05:00
clang format
楼主: fatalfeel2 (风在动)   2023-03-21 16:17:00
labbat大 完全命中!!!花脑力在无聊的枝枝节节 完全同意~~~这是我进了某间公司 才会研究的东西 因为上头有要求好的要求我们可以遵守但不好的要求 就应该改进事实上已经有人 因为程式语义学的问题 离职了
作者: TAKADO (朕没给的你不能抢)   2023-03-21 16:21:00
软件工程师coding最讨厌两件事,一是follow guideline,二是同事不follow guideline
作者: APTON (玮玮)   2023-03-21 16:33:00
这种事情不都是写好规范,剩下都丢给lint处理就好吗@@?
作者: s06yji3 (阿南)   2023-03-21 16:43:00
钻牛角尖了
作者: acgotaku (otaku)   2023-03-21 17:43:00
这些每个人理解不同,需要有一个架构师出来协调定义
作者: MoonCode (MoonCode)   2023-03-21 18:16:00
天啊
楼主: fatalfeel2 (风在动)   2023-03-21 19:02:00
Hungarian notation 某间公司还在用的语义命名https://reurl.cc/OV5503 在微软发明 被自己宣告放弃架构师 就是制定者本人 就是公司规定!!!好在我离开了~~~~~~~~~~~~~~~~增加了系统熵 增加了 语言的组合次数也禁用 inline Asm若大家遇到就看着办吧~~~~
作者: enthos (影斯作业系统)   2023-03-21 19:14:00
FORTH系asm:dq NUM,1,VARD,0xa,NUM,2,VARD,0xb,NUM,3,dq VARD,0xc,VARA,0xa,FETCH,DOIF,NUM,1,VARA,0xa,dq STORE,VARA,0xb,FETCH,DOIF,NUM 1,VARA,0xb,STORE
作者: superpandal   2023-03-21 20:43:00
原po写过bash makefile? 感觉是个oop狂人人 以bash非常动态的特性习惯来看oop是会觉得会觉得很囉唆1楼说的是 就是双标 何尝不是权势压力3楼 看错
作者: e12518166339 (耐纶)   2023-03-21 23:27:00
不管有什么想法,我都还是得先问过scripts/checkpatch.pl它老大说ok才算ok
作者: gary75952 (MaRs)   2023-03-22 01:19:00
该思考的是整体架构,你code 之间依赖越低,拆分得越清楚,整体code style会变成一种自然,架构设计的越好senior也不会写出什么烂code,因为有架构的限制不用钻牛角尖一些没啥效能差异的code style,很多理论大家都清楚,该思考的是当下专案怎做才是最大效益
楼主: fatalfeel2 (风在动)   2023-03-22 02:05:00
赞成G大~
作者: xxi511 (少北)   2023-03-22 07:58:00
你比较喜欢看着一层又一层的if ,可读性管他去死?
作者: TeaEEE (爱不趴 不爱趴)   2023-03-22 09:02:00
我只记得我为了别人一个if else不加{}的bug,追了一天
作者: wilson6405 (KickAsson)   2023-03-22 09:36:00
第一次看到程式心理学
作者: yamagishi (山岸刑务官)   2023-03-22 09:53:00
阅读性定期
作者: KanzakiHAria (神崎・H・アリア)   2023-03-22 12:24:00
TAKADO那句最讨厌两件事好好笑XDDDDDDD
作者: Lipraxde (Lipraxde)   2023-03-23 21:18:00
Asm 嘛...优化、PGO、UNLIKELY 下下去都好解决的,不该拿来当决定 coding style 的理由
作者: ku72 (ku72)   2023-03-24 11:43:00
在现在的硬件效能下 努力增加程式码的容易理解程度 比增加效能来的重要多了
作者: zero11995 (囧)   2023-03-24 14:38:00
15F XDD
作者: bjk (Up2u)   2023-03-24 16:56:00
15F XDD
作者: laxw (鸟好)   2023-03-29 15:22:00
follow公司rule就好, 都看的懂
作者: MonyemLi (life)   2023-04-06 07:18:00
有大厂定义,ide抓来汇入就好。如果这语言没有,看是否有必要为了效能牺牲可读性。早期java常见c的sytle,但为了什么?效能?怎么可能

Links booklink

Contact Us: admin [ a t ] ucptt.com