这段代码测试看不懂代码,详解

  英文原文:
  最近遇到一个事情让我大为不解。一个程序员自豪的宣称他完全看不懂自己一周前写的任何代码。我真的想探明他的这种自豪感从何而来,但无解。他是在骄傲每天写如此多的代码吗?有人会愿意聘请这样的人去写程序吗?
  首先让我明确的阐明我对此事的观点:不能理解一周前或一年前自己写的代码,这对一个职业程序员来说是不可饶恕的。
  我就把话放这。现在,让我详细的说一下。我已经兢兢业业的编程编了 15 年。很早我就接受了一些编程习惯,至今没有改变。我能轻松的看懂我一年前写的代码,甚至 2 年前,12 年前。各种语言的代码,在各种业务领域里。算法,解析器,web 应用,嵌入式控制器,脚本,链接,所有你能想到的。即使有些很早的代码,理解起来有些困难,但我仍然能从中看出一些模式的影子。
  我能做到这些,主要的方法是认识到代码必须易读。自己易读,别人也易读。代码如果不可读,那就会跟不可用的代码一样糟,甚至更糟。如果一段时间后你看不懂你自己写的代码,别人就更不可能看懂了,没有这种可能。不会有任何一个软件产品会因为你而值得骄傲。
  我无法用更大的声音强调,让自己的代码易读、易理解是何等的重要。不仅仅是它能让你的软件产品更好,更容易被别人维护,同时,这些代码也将成为你自己的私人工具箱,你将会在今后的职业生涯里使用、反复的使用它们。拥有这样一个工具箱,你将变得超级的强大,这将是你区别于其他编程高手的重要特征之一。我己经记不清有多少次,当面对一些似曾相识的问题时,我通过回忆,在我的历史代码库里搜寻,轻松快速的就能找到或整编出问题的解决方案。很显然,你不能理解的代码是进入不了这样的工具箱里的。
  这样结束这篇文章似乎有点玩世不恭,我应该解释一下是如何练就这样的功力的。坦率地说,这很难用文字描述,但我尽力。
  我非常确信,我的这种方法也被作家们(以及任何从事创新性职业的人)使用。一旦你写完一段代码(越小越好),你需要停下来,看看它是否易读、易懂。读它,反复的读它数次。跳出你对这个问题熟知的环境,想象那些完全不知道上下文情况的人在读这段代码。这样的一个人能读懂吗?如果不能,是因为什么?从你的由等好书丰富而成的&代码可读性&百宝箱里找出所有可以的技巧,应用它们,直到你确信这段代码变得易读为止。
  一旦你满意了,再读一遍。几天后再读一遍。这让我想起了我写一些高深技术的文章时,每一个句子,我都要读上 20 遍,重写 5 次。我写代码也经常是如此。完美可以因天赋而成,也可通过无情的重复和实验实现。因为我不具有前者,我就一直坚持着后者。
  最后,重构,无畏的改进。如果你遇到一段可以更清晰的代码,那就让它更清晰。改进代码质量是我们这种职业中一种难以把握的附加任务,但当你遇到一个持续一、两年,涉及多人的大型项目后,你自然就会领悟其重要。谁能帮我解释一下这段代码什么意思,因为完全看不懂能不能说的详细一点_百度知道
谁能帮我解释一下这段代码什么意思,因为完全看不懂能不能说的详细一点
goods.detailServer(data).out!&quot.println(&
selectAllGoods();
if(data.).println(&入库失败;
Goods goods=(Goods) data!&
S商品编号不存在.print(&SELECT_BY_GOODSID&&#47.println(&商品入库&quot.setDataUse(&quot.0);
S调用服务器查询商品
data=selectGoodsById(data).setObj(goods);
selectAllGoods(););
}while(addNum&入库成功:&
data.setDataType(&quot.detailIntBySystemIn()!&quot.isDataResult()){
int addNum=-1.
).getObj().isDataResult()){
).setDataType(&
SIN_STORAGE&);
selectAllGoods();请输入要入库的数量;
data.setDataResult(false)&#47.setGoodsCount(addNum);入库 public void inStorage(){
Data data=new Data()
goods.detailServer(data).detialStringBySystemIn().setDataUser(currentUser).setDataResult(false);
Goods goods=new Goods();/);&#47.然后foreach遍历输出.setGoodsId(Id);
data=cl.setDataInfo(Id);
data.print(&
return data.setObj(goods);请输入商品ID,请问为什么set是查询呢;
String Id=tools:&调用服务器查询商品 public Data selectGoodsById(Data data){
提问者采纳
则查询并设置商品库存;入库成功&quot!&如果存在则提示让用户输入入库的数量,如果不存在则提示&quot,然后循环判断直到输入的数是大于0的数时首先创建一个Data设置它的两个属性;商品编号不存在,然后保存;然后执行selectAllGoods()这个方法;否则提示&入库失败&quot,然后去数据库查询是否存在,如果保存成功则提示&quot
谢谢,追问有字数限制,还在吗,还有几行上面,麻烦看看?
selectGoodsById(Data data)方法中的data=cl.detailServer(data);这句才是最终的查询,前面的几个set都是相当于在给需要查询的data中添加条件
提问者评价
十分感谢!开始我以为只有这一段代码别人应该看不懂的,谢谢你!
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁这段代码什么意思啊,看不懂怎么*到第二排后就连续输出了,解释一下。一定要详细点!谢谢_百度知道
这段代码什么意思啊,看不懂怎么*到第二排后就连续输出了,解释一下。一定要详细点!谢谢
com/zhidao/pic//zhidao/pic/item/342ac65c3aee9413b07ecb808824://d.hiphotos.hiphotos.hiphotos://d://d.hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink">&nbsp.<img class="ikqb_img" src="http.baidu.baidu.hiphotos://d
提问者采纳
&//&nbsp:&nbsp,j&&&5&1;&就执行下面花括号内的语句&&&1&&i;&&&&j++)&&//&的时候就执行下面的语句&&i&&nbsp&的值增加&&&&&打印&i&打印一个&&nbsp,4;&每次执行完让&&(j=1;&实际效果&1&&&nbsp,&*&j&&for&&=5;&定义两个整数变量&j&&&&&i&&),2;&&&j;j&&&&&i&&*;&&&的初始值为&j&&&*&&&;&&&&&&&&&\n&&&&&&&&&1&&&for&i;的值增加&小于等于&&&&分别为&&&&//&&&//&&&小于等于&&{&nbsp,i&&&&&&&&&i&&//&让&&&1&i++)/*&&&//&*/&&nbsp,然后换行;&&&nbsp,一共执行了五次;//&&&&当&printf(&&每次执行完&个&i&让&&}&&&&&初始值为&&int&printf(&=i;&&&&&&&);&(i=1;打印完这一行所有*之后换行&&&&&nbsp,3
那后面几排为什么打印了多个连续的*才换行啊
哦,嗯懂了
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请求帮我详细解释下面的vfp代码本人没有vfp基础,有段vfp程序看不懂,请求帮忙,要详细的解释哦~
public ss,t,a1,a2,b1,b2,s1,s2,s0,p1,p2,aaaa,bbbb,cccc,dddd,ffff,eeee,lzj
a1=thisform.text3.value/2
a2=thisform.text5.value/2
s1=val(thisform.text7.value)
b1=thisform.text4.value
b2=thisform.text6.value
s2=val(thisform.text8.value)
ss=thisform.text2.value
t=thisform.text1.value
use 规格化3
appe blank
repl 屈服强度 with ss
public一行 是在定义公共变量从aaaa = 1 一直到t=thisform.text1.value 是在为变量赋值 关闭所有数据库打开规格化3(数据库)追加一空行将指针指向底部板厚= T屈服强度 = SS如果A2
为您推荐:
其他类似问题
扫描下载二维码【求助】IDA反汇编的C格式代码看不懂 求讲解 - 看雪安全论坛
『软件调试逆向』 [综合性论坛]本版讨论的主题包括:调试逆向、系统底层、商业保护、虚拟机保护、.NET平台等安全相关的话题。
该主题: "【求助】IDA反汇编的C格式代码看不懂 求讲解" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
注册日期: May 2014
现金: 2 Kx
获感谢文章数:0获会员感谢数:0
, 16:33:40
已解答: 【求助】IDA反汇编的C格式代码看不懂 求讲解
signed&int&__fastcall&RequestBase::SendChatKTV(int&a1,&int&a2,&const&char&*a3)
&&int&v3;&//&r7@1
&&const&char&*v4;&//&r6@1
&&void&*v5;&//&r0@5
&&void&*v6;&//&r5@5
&&v3&=&a2;
&&v4&=&a3;
&&if&(&*(_BYTE&*)a1&)
&&&&if&(&byte_C3E2C&)
&&&&&&if&(&a3&)
&&&&&&&&v5&=&malloc(0x1004u);
&&&&&&&&v6&=&v5;
&&&&&&&&if&(&v5&)
&&&&&&&&&&*(_DWORD&*)v5&=&v3;
&&&&&&&&&&strcpy((char&*)v5&+&4,&v4);
&&&&&&&&&&if&(&!NetApp::PostMessage(&g_NetApp,&166,&v6,&0)&)
&&&&&&&&&&{
&&&&&&&&&&&&ThreadInformer::Inform(&unk_C40FC);
&&&&&&&&&&&&return&0;
&&&&&&&&&&}
&&&&&&&&&&free(v6);
&&&&_android_log_print(4,&&&JniNetUtil&&,&&NetUtil&is&not&initialize\n&);
&&return&-1;
signed&int&__fastcall&NetApp::PostMessage(int&a1,&int&a2,&int&a3,&int&a4)
&&int&v4;&//&r4@1
&&int&v5;&//&r7@1
&&int&v6;&//&r5@1
&&int&v7;&//&r6@1
&&int&v8;&//&r2@1
&&unsigned&int&v9;&//&r3@1
&&int&v10;&//&r1@5
&&signed&int&v11;&//&r4@5
&&int&v13;&//&[sp+0h]&[bp-38h]@5
&&int&v14;&//&[sp+Ch]&[bp-2Ch]@1
&&int&v15;&//&[sp+10h]&[bp-28h]@5
&&int&s;&//&[sp+14h]&[bp-24h]@5
&&int&v17;&//&[sp+18h]&[bp-20h]@5
&&int&v18;&//&[sp+1Ch]&[bp-1Ch]@5
&&v4&=&a1;
&&v5&=&a4;
&&v14&=&*(_DWORD&*)(a1&+&4);
&&v6&=&a2;
&&v7&=&a3;
&&(*(void&(**)(void))(*(_DWORD&*)v14&+&8))();
&&v8&=&*(_DWORD&*)(v4&+&1260);
&&while&(&v8&!=&v4&+&1260&)
&&&&v8&=&*(_DWORD&*)v8;
&&if&(&v9&&&0x3E8&)
&&&&v11&=&-1;
&&&&v10&=&v4&+&1260;
&&&&s&=&v6;
&&&&v17&=&v7;
&&&&v18&=&v5;
&&&&v15&=&v4&+&1260;
&&&&v11&=&0;
&&&&std::list&NetApp::_MSGINFO,std::allocator&NetApp::_MSGINFO&&::insert((int)&v13,&v10,&(int)&v15,&(int)&s);
&&CriticalSectionScoped::~CriticalSectionScoped(&v14);
&&return&v11;
最佳答案 - 作者:
signed int __fastcall RequestBase::SendChatKTV(bool can_send, int cnt_msg, const char *msg)//cnt_msg是msg的大小
if(can_send)
PRINT_ERROR;
注册日期: Sep 2014
现金: 11 Kx
致谢数: 30
获感谢文章数:0获会员感谢数:0
, 18:41:23
IDA反编译出来的代码保留大量中间变量与垃圾代码,物理代码,需要看清楚,伪代码在某种程度上有一定的参考意义,比如某些细节与流程,如果你懂编译的一些东西,你就能很顺利去看这份乱糟糟的代码,不过依然要结合汇编去看.看的过程中需要适当做些try.以验证自己的某些想法.
注册日期: Jan 2015
现金: 17 Kx
获感谢文章数:2获会员感谢数:10
, 20:37:28
这个已经很好懂了,兄弟
注册日期: Apr 2006
现金: 9 Kx
获感谢文章数:0获会员感谢数:0
, 20:42:06
动态调下。具体看参数的意思吧
注册日期: May 2014
现金: 2 Kx
获感谢文章数:0获会员感谢数:0
, 15:44:54
注册日期: Nov 2009
现金: 212 Kx
获感谢文章数:5获会员感谢数:8
, 19:02:12
signed&int&__fastcall&RequestBase::SendChatKTV(bool&can_send,&int&cnt_msg,&const&char&*msg)//cnt_msg是msg的大小
&&&&&&&if(can_send)
&&&&&&&&&&&if(!msg)
&&&&&&&&&&&&&SENDMSG;
&&&&&&&else
&&&&&&&&&PRINT_ERROR;
&&&&&&&&&&&&&
注册日期: May 2014
现金: 2 Kx
获感谢文章数:0获会员感谢数:0
, 10:07:30
该主题: "【求助】IDA反汇编的C格式代码看不懂 求讲解" 因在一定的时间里没有任何回复而自动关闭。如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
您不可以发表主题
您不可以回复帖子
您不可以上传附件
您不可以编辑自己的帖子
论坛论坛启用
用户控制面板
会员在线状态
『看雪众测/众包』
『Android 安全』
『Android 开发』
『iOS安全』
『求助问答』
『经典问答』
『资料导航』
『软件调试逆向』
『密码学』
『编程技术』
『C32Asm』
『MDebug』
『安全工具开发』
『加壳与脱壳』
『CrackMe&ReverseMe』
『资源下载』
『WEB安全』
『漏洞分析』
『外文翻译』
『招聘专区』
『职业生涯』
『15PB培训』
『麦洛克菲培训』
『茶余饭后』
『安全资讯』
『论坛活动』
6)PEDIY Crackme竞赛2009
7)看雪十周年专版
8)腾讯公司2010软件安全竞赛
9)2011 Exploit Me竞赛
『图书项目版』
《加密与解密(第三版)》
《C++反汇编与逆向分析技术揭秘》
《Android软件安全与逆向分析》
『论坛版务』
所有时间均为北京时间, 现在的时间是 .
&&& 看雪学院()
| 提供带宽资源
|&微信公众帐号:}

我要回帖

更多关于 测试看不懂代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信