你们这些程序员,真得每天都在读代码吗?

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://csdnnews.blog.csdn.net/article/details/79407634

点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

640?wx_fmt=jpeg

近日,外媒上的一篇文章震惊了我,它赤裸裸地写道:你们这些程序员们,真得每天都在读代码吗?多数人阅读代码的数量远远不够。

文中提到,在Peter Seibel撰写的“Coders at Work”一书中描述了这样一个矛盾的现象:“几乎所有的程序员都建议他人通过多读代码获得乐趣,但自己却往往做不到。”甚至他还直接向麻省理工学院计算机科学系教授 Hal Abelson寻求答案:

“我想更深入了解一下。像很多人一样,您也常常建议程序员应该多读代码。然而,当我问到您是因为读了哪部分代码而受到启发或感到娱乐时,您同其他人一样,回答说‘是因为您阅读了学生的代码’,而这是您的工作,‘在谷歌review代码’,而这同样是您的工作。从头到尾,这都听起来不像是您在某个夜晚心情愉悦地读一段代码的样子。”

为了搞清楚这种现象产生的原因,Seibel几人展开一番讨论,并给出了精彩见解,不过,或是由于过于聚焦“读”这个词,使得他们的思考局限于某一个框架,考虑的问题跟着带跑偏了。

实际上,我们都读过代码,但基本是需要编辑的时候才会选择读代码,而只有当遇到复杂问题时,读代码这件事才变得异常重要。毕竟,有程序员就曾抱怨:“一坨几千行的代码,整个业务逻辑都放在里面,注释也不写全,谁能看懂?”

而为了养成这种读代码的好习惯,作者Kartik Agaram从另外一个角度给出了自己的见解——破解程序法读代码。

这种破解程序法比“被动地”、“线性”阅读能产生更好的理解,且基本满足以下三个特点:

  1. 主动探索当你想要破解一款程序时,你最终希望要对代码库进行修改,恰恰是这个欲望引导着你一步一步读着代码;

  2. 大幅修改同样,此时你会根据想要进行的修改对现有代码进行评估。决定用什么和删除什么迫使你对现有系统保持一副排斥的态度。而如果你以线性的思维读代码,你会发现:你基本无法批判性地检查代码;

  3. 合:为了改变你想要的程序,你可以将新代码与现有代码进行组合。

通过破解程序的方式学习代码,还可以调用某一个代码库的自然结构。一本好书就是通过一系列问题和答案来引导读者的,而代码库本质上是非线性的,像地图一样,你可以不停地向地图寻找答案,但你不能指望地图告诉你要问什么问题,因为从左到右、从上到下地线性读取地图是没有意义的。

此外,过度沉迷于干净代码和整洁界面的讨论,使得我们忽略了一件事:对不熟悉的代码愈加避而远之。对于程序员而言,整洁,意味着有据可循,但如果我们想要另辟蹊径时,反倒是累赘。

所以,或许只有当你再也听不到老大review代码的声声抱怨时,就说明已经你已经进步了~

640?wx_fmt=gif

快来投票

scrolling="no" frameborder="0" class="vote_iframe js_editor_vote_card" data-display-style="height: 504px;" data-display-src="/cgi-bin/readtemplate?t=vote/vote-new_tmpl&__biz=MjM5MjAwODM4MA==&supervoteid=450663733&token=134550035&lang=zh_CN" data-src="/mp/newappmsgvote?action=show&__biz=MjM5MjAwODM4MA==&supervoteid=450663733#wechat_redirect" data-supervoteid="450663733" allowfullscreen=""/>

参考链接:http://akkartik.name/post/comprehension 

招聘

新的一年已经到来,「CSDN」公众号的目标更加明确,有更多的想法需要落地,不过目前对于小姐姐来说是“现实跟不上灵魂的脚步”,因为缺人~~


所以,「CSDN」公众号要壮大队伍啦,现招聘业界与技术资深编辑记者、资深新媒体运营,有意者请将简历投至:tangxy@csdn.net,期待你的加入!


如果你暂时不能加入我们的队伍一起并肩战斗,也欢迎加入「CSDN」作者大家庭,与所有「CSDN」的朋友们分享你的精彩文章,投稿邮箱:yangli@csdn.net


除了以上两项,如果你热爱技术分享,想要获得更广的视角和更前沿的技术探索,你还可以加入「CSDN」的译者群,利用业余时间,在尊重版权的前提下,翻译对中国开发者极有价值的文章,有意者请将简历投至:guorui@csdn.net

————— 推荐阅读 —————

点击图片即可阅读

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=gif

展开阅读全文

其实选对了,情人节每天都过!

08-09

rn[align=center][b]情人节,想他们了吗?[/b][/align]rn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755121_602064.png][/img][/align]rn[align=center]家中的父母[/align]rn[align=center]不知何时,[/align]rn[align=center]父母头发又白了些,[/align]rn[align=center]腰又弯了些,[/align]rn[align=center]时间都去哪儿呢?[/align]rn-------------------------------------------------------------------------------------------------------------------------------------------rnrn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755144_812009.png][/img][/align]rn[align=center]留守的孩子[/align]rn[align=center]上次回家,[/align]rn[align=center]那个咿咿呀呀的鼻涕虫,[/align]rn[align=center]都变成害羞的小姑娘了,[/align]rn[align=center]我错过了多少?[/align]rn-------------------------------------------------------------------------------------------------------------------------------------------rnrn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755253_528132.png][/img][/align]rn[align=center]异地的恋人[/align]rn[align=center]想你的时候,[/align]rn[align=center]一切都是你![/align]rn[align=center]多想陪在你身边每一分钟,[/align]rn[align=center]无论大事小事![/align]rn-------------------------------------------------------------------------------------------------------------------------------------------rnrnrn[align=center][b]华为家真[/b][/align]rnrn[align=center]高清视频,[/align]rn[align=center]更逼真,更流畅,[/align]rn[align=center]同远方的TA,[/align]rn[align=center]一次面对面的亲切交流![/align]rnrn[b]逼真——高清高保真的极致体验[/b]rn720p/1080高清,4米以上景深,5米360度拾音,图像接近真人大小,立体感强,恍如面对面的近距离亲切交流。rnrn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755280_221271.png][/img][/align]rn rn[b]流畅——专有HME音视频引擎[/b]rn实时视频通话媒体流使用华为的专有HME音视频引擎,抗丢包,抖动,带宽自适应,配合电信级的QoS保障机制,打造最佳体验的客厅视频通话解决方案。rnrn[img=https://img-bbs.csdn.net/upload/201608/09/1470755324_39621.png][/img]rnrn[b]贴心——TV和固话或手机同振,来电不漏接[/b]rnTV和固话或手机设定同振业务,防止机顶盒关机漏接来电。rn rn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755345_523178.png][/img][/align]rnrn[b]简捷——层级扁平,一键交流[/b]rn打开电视,轻轻一按,就可以和亲人享受天涯咫尺的面对面高清视频体验,家中的老人和小孩也极易上手。rnrn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755366_540673.png][/img][/align]rnrn[b]实用——作每一个家庭的守护者[/b]rn基于机顶盒+电视机+摄像头,用户可通过手机端随时查看客厅实时视频画面,解决家庭安防、幼儿安全等问题。rnrn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755381_899429.png][/img][/align]rnrn[b]安全——完善的安全机制[/b]rn拥有运营商可信品牌及网络,以及媒体/信令加密等各种手段保障用户的隐私和通信安全。rnrn[b]华为家真,让情更“真”![/b][align=center][/align]rn[align=center][img=https://img-bbs.csdn.net/upload/201608/09/1470755533_51928.png][/img][/align]rnrn更多关于CaaS:[url=http://esdk.huawei.com/cn/ict/Products/CaaS][b][color=#FF0000]猛戳这里[/color][/b][/url] 论坛

熬到什么时候是尽头,每天都遇到问题?

07-26

rn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/5.gif][/img]rnrn消息报里有发送方,收送方的id.rnrn服务器----中转作用, 服务器收到客户端的消息包,根据收送放的id,查找收送放套接字,然后通过收送放套接字发送到目的。rnrn服务器:有一个监听套接字和 一系列与客户端通信的套接字。 中转的思路上面已经说了。rnrnrn遇到的问题: 客户端A和客户端B通信。 客户端B收不到客户端发送过来的消息。rnrn我贴服务器的部分代码:rnrnrn[code=C/C++]rnrn//处理客户端的数据rnunsigned int CMyServerDlg::ReceiveUserPacke(void*)rnrn while(1)rn rn if(WaitForSingleObject(pThis->hKillReceiveEvent,0)==WAIT_OBJECT_0)rn return 0;rn rn rn CMutexHelper mtHelp(&mu);rn if(pThis->m_pCurSock==NULL)rn rnrn continue;rn rn rnrn char rcvBuf[500];rn memset(rcvBuf,sizeof(rcvBuf),0);rn if(SOCKET_ERROR!=pThis->m_pCurSock->Receive(rcvBuf,sizeof(rcvBuf))) rn rn //解析rn CPacket* pPack=(CPacket*)rcvBuf;rn if(pPack->type==CPacket::HeartBeat) // 心跳包rn rn //省去没有问题rn rnrn else if(pPack->type==CPacket::Verification) //验证rn rn //省去没有问题rnrn rn else if(pPack->type==CPacket::Msg) //消息rn rn CMutexHelper mtHelp(&mu);rnrn std::map::iterator iter=pThis->on_line_userMap.find(std::string(pPack->receive_id)); //找找接收方的套接字rn if(iter!=pThis->on_line_userMap.end())rn rn //找到接收方套接字,转发出去,并且更新最后发言时间rn iter->second->psock->Send(pPack,sizeof(CPacket));rn iter->second->theLastTalkTime=time(NULL);rn rn else //可以告诉用户,发送失败,可以完善该功能rn rn rnrn rn rn rnrn return 0;rnrnrnrn[/code]rnrnrn是思路有问题,还是代码有问题啊?rn 论坛

如何去取每天都有的值~

07-21

CREATE TABLE [dbo].[testtable](rn [ID] [bigint] IDENTITY(1,1) NOT NULL,rn [违规人] [varchar](max) NULL,rn [违规时间] [datetime] NULL,rn CONSTRAINT [PK_testtable] PRIMARY KEY CLUSTERED rn(rn [ID] ASCrn)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]rn) ON [PRIMARY]rnGOrnSET ANSI_PADDING OFFrnGOrnSET IDENTITY_INSERT [dbo].[testtable] ONrnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (1, N'白晨', CAST(0x0000A09500000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (1, N'白晨', CAST(0x0000A09500000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (1, N'白晨', CAST(0x0000A09500000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (2, N'孙明', CAST(0x0000A09500000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (3, N'李岩', CAST(0x0000A09500000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (4, N'孙明', CAST(0x0000A09600000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (5, N'李岩', CAST(0x0000A09600000000 AS DateTime))rnINSERT [dbo].[testtable] ([ID], [违规人], [违规时间]) VALUES (8, N'孙明', CAST(0x0000A09700000000 AS DateTime))rnSET IDENTITY_INSERT [dbo].[testtable] OFFrnrnrn如题我如何 查询出 时间段内每天都有的违规人 论坛

没有更多推荐了,返回首页