0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

最牛B的编码套路

m3eY_edn_china 来源:未知 作者:李倩 2018-03-09 14:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:

与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是真正意义上的锻炼——参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平。你必须定期留出时间,集中锻炼,这样才能把事情做得更好。

我认识很多杰出的程序员——这是在亚马逊工作最好的额外“福利”之一。如果仔细观察他们,你会发现他们时时都在锻炼。他们已经很优秀了,但他们仍然不忘锻炼。他们锻炼的方法林林总总,而我在这篇文章中只会介绍其中的几种。

据我了解,这些杰出程序员之所以如此成功,就是因为他们一直在锻炼。完美的身材要靠定期的锻炼才能获得,而且必须坚持锻炼才能保持,否则身材就会走形。对于编程和软件工程来说,道理是一样的。

这是一个重要的区别——我每天都开车去上班,但我的驾驶水平远远不如专业车手;类似的情况,天天编程可能并不足以使你成为一名专业的程序员。那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢?

答案就在《科学美国人》的一篇名为“The Expert Mind”(专家思维)的文章里:

爱立信提出,重要的并不是经验本身,而是“努力的学习”,也就是要不断地挑战自身能力之外的东西。一些狂热的爱好者花费了大量的时间去下棋、打高尔夫球或者玩乐器,但他们可能始终停留在业余水平上,而一个训练有素的学生却可以在相对较短的时间里超越他们,原因就在这里。值得注意的是,在提高水平方面,花费在下棋上的大量时间(即使参加各种比赛)似乎还是比不过专门的训练来得更为有效。训练的主要价值在于发现弱点,并有针对性地进行提高。

“努力的学习”意味着,要常常去处理那些刚好在你能力极限上的问题,也就是那些对你来说有很大可能失败的事情。如果不经历一些失败的话,你可能就不会成长。你必须不断地挑战自我,超越自己的极限。

那样的挑战有时会在工作中碰到,但也未必。将锻炼从职业工作中分离出来,这在编程领域常被人称为“编码套路”(Code Kata)。

Code Kata的概念是由David Thomas提出的,他是《程序员修炼之道:从小工到专家》的作者之一。这个概念主要指的是,针对某一种特定技术或技能进行重复性的练习,从而将其熟练掌握。——译者注

所谓套路,就是一系列的招式。这个概念借鉴于武术。

如果你想要看一些编码套路的例子(也就是努力学习和磨练编程技能的方法),SteveYegge的文章里倒是提出了一些不错的建议。

他把它们称作为“实践演练”:

1. 写一份自己的简历。把自己所有的相关技能都罗列出来,然后把那些在100年后还用得到的标出来。给每个技能打分,满分为10分。

2. 罗列出你所景仰的程序员。尽量包括那些与你一起工作的人,因为你会在工作中从他们身上获取一些技能。记录下他们身上的1 ~ 2个闪光点,也就是你希望自己有所提高的方面。

3. 查看维基百科上的“计算机科学”栏目,找到“计算机领域先驱者”这个分类,从这个列表中挑选一个人,阅读他的事迹,并且在阅读时打开任何你感兴趣的链接。

4. 花20分钟通读别人的代码。读出色的代码和读糟糕的代码都是有益的,两者都要读,轮流切换。如果你无法感觉出它们之间的区别,可以求助于一位你尊敬的程序员,让他给你展示一下什么是出色的代码、什么是糟糕的代码。把你读过的代码给别人也看看,问问他们的看法。

5. 罗列出你最喜欢的10个编程工具——那些你觉得你用得最多、非有不行的工具。随机挑选其中的一个工具,花一个小时去阅读它的文档。在这一个小时里,努力去学习这个工具的某个你不曾意识到的新功能,或者发现某种新的使用方法。

6. 想一想,除了编程之外你最擅长什么事情?再想一想,你是通过怎样的锻炼才变得如此熟练和专业的?这对于你的编程工作又有什么启发呢?(怎么把这些经验应用到编程方面?)

7. 拿出一叠简历,并和一组面试官在同一个房间里待上一个小时。确保每份简历都至少被3个面试官看过,并且要给出1 ~ 3分的评分。针对那些不同面试官评判大相径庭的简历展开讨论。

8. 参与一个电话面试。事后写下你的反馈,抛出你的观点,然后与主持电话面试的人聊一聊,看看你们是否达成了一致的结论。

9. 进行一次技术面试,并且被面试的人应该是某个你不太了解的领域里的专家。让他假定听众在该领域里一无所知,因此请他从最基础的讲起。努力去理解他所说的,必要时问一些问题。

10. 有机会参与别人的技术面试。期间,你只是认真地听、认真地学。在应聘者努力解决技术问题的同时,你也要在自己脑子里尝试解决这些问题。

11. 找到一个能和你交换实际问题的人,每隔一周,相互交流编程问题。花10 ~ 15分钟来尝试解决这些问题,再用10 ~ 15分钟进行讨论(无论能否解决)。

12. 当你听到任何你一时之间也无法解决的面试问题时,赶紧回到你的座位上,把这个问题用电子邮件发给自己,以留作日后的提醒。在那一周里找出点时间,用自己最喜欢的编程语言来解决它。

我之所以喜欢Steve开出的这个清单,是因为它看上去很全面。有些程序员一想到“锻炼”,总认为就是一些编码上的难题。但在我看来,编程更在于人,而不是代码。因此,通过解决世上所有的、并且晦涩的编程面试题目,在提高你的个人能力方面,这种方法是有局限的。

关于“努力的学习”,我也很喜欢Peter Norvig在“Teach Yourself Programming in TenYears”(花10年时间自学编程)一文中提出的诸多建议:

1. 与别的程序员交流。读别人的代码。这比任何书籍或培训课程都更重要。

2. 动手写程序!最好的学习方法就是边做边学。

3. 在本科或研究生的课程中学习编程课程。

4. 找一些项目来做,并且需要与其他程序员形成团队来合作。在项目的进行过程中,学会辨别最出色的程序员以及最糟糕的程序员。

5. 在项目中跟随别的程序员一起工作,了解如何维护那些不是你写的代码,并且学习如何写出利于他人维护的代码。

6. 学习多种不同的编程语言,特别是那些与你现在所熟悉的语言有着不同的世界观和编程模型的。

7. 了解硬件对软件的影响。知道你的电脑执行一条指令需要多少时间,从内存中取出一个字(在有缓存或没缓存的情况下)需要多少时间,在以太网(或者因特网)上传输数据需要多少时间,从磁盘中读取连续的数据或者在磁盘上跳转到另一个位置需要多少时间,等等。

你还可以从Dave Thomas的21种实用的编码套路中获取灵感(CodeKata.com),或者你更愿意加入一个你家当地的“编程武馆”(CodingDojo.org)。

对于“努力的学习”,我无法像Steve,Peter或者Dave那样提供一个长长的建议列表。我远不如他们有耐心。

实际上,在我看来,“编程套路”只需两个招式:

1. 写博客。我在2004年初创办了CodingHorror.com博客,作为我自己努力学习的一种形式。它在一开始很不起眼,到后来成为我职业生涯中做过的最重要的一件事。所以,你也应该写博客。最后“闻达于天下”的人,往往就是那些能够有效书写和沟通的人。他们的声音最响亮,是他们在制定游戏规则,并且引领世界的潮流。

2. 积极参与著名的开源项目。所有的高谈阔论听起来都很好,但是,你是一个大话王还是一名实干家呢?别光说不练,这个非常重要,因为人们会用你的行动来衡量你,而不是你的言论。努力在公众面前留下些实实在在有用的东西吧,到时候你就可以说,“我在那个项目中出过力。”

当你能编写精彩的代码、并且能用精彩的言辞向世人解释那些代码时,到那时候,我会觉得你已经掌握了最牛的编码套路!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    1018

    浏览量

    56685
  • 亚马逊
    +关注

    关注

    8

    文章

    2725

    浏览量

    85463

原文标题:最牛B的编码套路

文章出处:【微信号:edn-china,微信公众号:EDN电子技术设计】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于8位Booth编码的公式推导

    我们使用基于8位的Booth编码对乘法器进行修改 首先介绍一下基于4位的Booth编码公式推导: 对于P=A*B来说,将B以2进制码表示,可以转化为以下式子: 由于 将奇数位
    发表于 10-22 07:14

    绝对值编码器与增量式编码器相比有哪些优势?

    绝对值编码器与增量式编码器相比有哪些优势?核心功能:断电后位置信息不丢失,绝对值编码器:通过机械结构或电子存储(如电池备份),能实时输出当前位置的唯一绝对值编码(如二进制、格雷码)。无
    的头像 发表于 08-11 13:57 1250次阅读
    绝对值<b class='flag-5'>编码</b>器与增量式<b class='flag-5'>编码</b>器相比有哪些优势?

    引脚定义藏玄机:M12航空插头的编码选择之道​

    防误插设计:不同编码采用独特键位,A编码无法插入B编码插座,配合标配测试笔,校验效率提升60%。​ 定制化能力:支持防爆等特殊引脚定义,100+工程师48小时出方案,某石油设备厂商
    的头像 发表于 08-08 10:24 501次阅读
    引脚定义藏玄机:M12航空插头的<b class='flag-5'>编码</b>选择之道​

    绝对值编码器选型流程 5步锁定最优型号

    绝对值编码器选型流程 5步锁定最优型号!绝对值编码器明确匹配电气接口与协议 1、总线兼容性:西门子 PLC 优先选 PROFINET 接口(如倍加福 PN 编码器);日系设备常用 SSI 或
    的头像 发表于 06-03 14:30 750次阅读
    绝对值<b class='flag-5'>编码</b>器选型流程 5步锁定最优型号

    GPU显卡维修避坑指南:手把手教你识别行业套路

    你的显卡维修被“套路”过吗?“一块H100显卡维修报价5万?修完3个月又坏!”你是否也遇到过——高价采购的显卡突然故障,返厂维修耗时数月,第三方服务商张口就是“核心损坏,必须换新”?在算力需求激增
    的头像 发表于 04-02 20:31 3258次阅读
    GPU显卡维修避坑指南:手把手教你识别行业<b class='flag-5'>套路</b>!

    优先编码器:高效数据选择与编码的解决方案

    在现代数字电路设计中,数据的选择与编码是不可或缺的重要环节。面对众多输入信号,如何高效地选择并编码所需数据,成为设计师们面临的一大挑战。优先编码器,作为一种独特的数字电路组件,凭借其高效、灵活的特点
    的头像 发表于 03-25 08:33 876次阅读

    编码器与无轴承编码器,到底如何选择?

    在选择轴编码器与无轴承编码器时,需要根据具体的应用场景、性能需求、环境条件和成本预算等因素进行综合考虑。以下是对两者的详细对比,以帮助做出合适的选择: 一、工作原理与结构 1. 轴编码
    的头像 发表于 03-11 15:33 1004次阅读
    轴<b class='flag-5'>编码</b>器与无轴承<b class='flag-5'>编码</b>器,到底如何选择?

    伺服电机编码器怎么选型

    伺服电机编码器的选型是一个综合性的过程,需要考虑多个因素以确保所选编码器能够满足系统的性能要求。以下是一些关键的选型步骤和考虑因素: 一、明确应用需求 首先,需要明确伺服电机编码器的应用需求,包括
    的头像 发表于 03-11 12:01 1498次阅读
    伺服电机<b class='flag-5'>编码</b>器怎么选型

    DISCOAA编码器性质特点

    DISCOAA编码器的具体详细资料或参数 ‌。不过,我们可以根据编码器的通用知识和一些相关信息来概述编码器的一般特点和类型。 编码器通常用于将机械运动或位置转换为电信号,以便进行监测、
    的头像 发表于 02-20 13:50 638次阅读

    DISCOAA编码器类型功能

    DISCOAA编码器可能包括绝对编码器和增量编码器两种类型,其主要功能是将输入信号进行分析和处理,并将其转换为数字信号 ‌。 关于类型,虽然搜索结果中并未直接提及DISCOAA编码器的
    的头像 发表于 02-20 13:47 678次阅读

    托盘“智”运,SLAM导航 地式AGV机器人,“7*24小时”工作!

    AGV地小巧灵活,载重大,采用激光SLAM导航,可智能控制路线。支持定制化云平台监控,多级安全措施保障安全。适用于多行业仓储物流,提高搬运效率,降低人力投入。
    的头像 发表于 02-11 17:56 715次阅读
    托盘“智”运,SLAM导航  地<b class='flag-5'>牛</b>式AGV机器人,“7*24小时”工作!

    信道编码和信源编码的区别

    信道编码和信源编码是数字通信系统中两个至关重要的环节,它们各自承担着不同的功能和角色。
    的头像 发表于 01-29 16:29 2963次阅读

    伺服电机编码器故障及维修

    伺服电机编码器故障及维修,伺服电机编码器4大常见故障,编码器信号丢失或不稳定,编码器零点偏移,编码器过热,
    的头像 发表于 01-21 14:49 4080次阅读
    伺服电机<b class='flag-5'>编码</b>器故障及维修

    SMT元器件的编码与识别

    随着电子技术的快速发展,SMT因其高密度、高性能、低成本等优势在电子制造领域占据了主导地位。在SMT生产过程中,元器件的正确编码与识别对于保证生产效率和产品质量至关重要。 1. SMT元器件编码规则
    的头像 发表于 01-10 18:01 2765次阅读

    bcd编码的优缺点 bcd编码的常见错误

    BCD(Binary-Coded Decimal)编码是一种二进制编码方式,用于将十进制数(0-9)直接转换为二进制形式。这种编码方式在数字系统中非常常见,尤其是在需要处理数字数据的硬件和软件中
    的头像 发表于 12-20 17:17 2430次阅读