最牛B的编码套路

2023-10-26

最近,我大量阅读了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. 积极参与著名的开源项目。所有的高谈阔论听起来都很好,但是,你是一个大话王还是一名实干家呢?别光说不练,这个非常重要,因为人们会用你的行动来衡量你,而不是你的言论。努力在公众面前留下些实实在在有用的东西吧,到时候你就可以说,“我在那个项目中出过力。”
当你能编写精彩的代码、并且能用精彩的言辞向世人解释那些代码时,到那时候,我会觉得你已经掌握了最牛的编码套路!

http://mp.weixin.qq.com/s?__biz=MjM5ODE0MTM1MA==&mid=208904423&idx=1&sn=611d95e59704aa223d4ba348a784b3e0&scene=5#rd


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最牛B的编码套路 的相关文章

  • 关于QQ的相关代码收集整理

    下面个我个人整理的一些实用的QQ聊天代码 包括手机端和电脑端的 希望不用每次都重新去找 跳转到手机QQ并开始聊天 安卓代码 String url mqqwpa im chat chat type wpa uin 458237282 star
  • sed 过滤字符文本 (一行行的)

    前面写过用sed对整个文件过滤的 代码很简单 现在这个是能够取出其中的一行行来过滤的 为了获取更多的相关信息 注意列表中的空格先变为 然后再变回来 不然会出错 bin sh i grep chenbing my c temp sed s g
  • vsCode 配置 html 文件警告

    vsCode 配置 html 文件警告 问题描述 IDE vsCode 会默认根据自己的规则来检测 html 文件书写格式 但是在实际项目中模板的格式可能会有与规则有些不同 比如 第一行必须为声明 属性不能为空等 本人有点偏强迫症 要找办法
  • 女程序员珍妮的故事

    我不想说出她的名字 这里就叫她珍妮吧 珍妮有5个最好的朋友 其中2个是 Google 的工程师 一个是 Eventbrite 的工程师 一个是架构师 另外一个是她的老爸 一个很可爱的人 是珍妮家乡的州足球队的主席 珍妮毕业时拿的是企业管理专
  • Sonar代码质量管理

    一 简介 1 1 什么是Sonar Sonar是一个用于代码质量管理的开源平台 用于管理代码的质量 是一个Web系统 展现了静态代码扫描的结果 通过插件形式可以支持二十几种语言的代码质量检测 通过多个维度的检查了快速定位代码中潜在的或者明显
  • csdn 代码样式 代码高亮 代码风格

    刚玩csdn 结果发现博客帮助里没有教这个 就写了一下 希望可以帮到一些和我一样的新手 在文章的富文本内 选择源代码后 在源代码中编辑即可 修改下文中的class可以进行多种样式风格的支持 如html c javascript java c
  • Sublime Text 3 常用快捷键

    Ctrl Shift P 打开命令面板 Ctrl P 搜索项目中的文件 Ctrl G 跳转到第几行 Ctrl W 关闭当前打开文件 Ctrl Shift W 关闭所有打开文件 Ctrl Shift V 粘贴并格式化 Ctrl D 选择单词
  • win10 提供管理员权限才能删除文件夹

    计算机管理员帐户 也就是我们熟知的 Administrator 拥有可执行影响其他用户操作的权限 由于win10专业版刚发布 很多用户不知道怎么取得管理员权限 接下来小编就跟大家分享启用管理员权限的方法 1 打开win10专业版的开始菜单中
  • 异步复位信号的 recovery和removal

    简而言之 DFF的复位置位信号不要在clk的跳变沿附近变化 而是要远离clk沿 一般逻辑对此时序不用关心 比如很多模块的操作流程是复位完了 才开启模块时钟 再启动模块工作 这种流程可以保证不会出现recovery和removal的问题 因为
  • PostgreSQL(数据库)资料和分布式系统(Distributed System)资料与Go语言资料整理

    PostgreSQL Documentation 介绍 PostgreSQL官方文档主页 PG技术沙龙ppt 介绍 2013年4月PG技术沙龙PPT PG9 3中文翻译文档 介绍 PG9 3中文翻译文档 谢谢 skykiker提供 Post
  • 猜你喜欢-----推荐系统原理介绍

    写在正文之前 最近在做推荐系统 在项目组内做了一个分享 今天有些时间 就将逻辑梳理一遍 将ppt内容用文字沉淀下来 便于接下来对推荐系统的进一步研究 推荐系统确实是极度复杂 要走的路还很长 A First Glance 为什么需要推荐系统
  • windows下游戏服务器端框架Firefly安装说明及demo运行

    本来公司一个网游服务器端选定了pomelo框架 后来出了个Firefly 为做一个对比 决定研究一下Firefly 看了一下Firefly 感觉头大 python的 本人python小白 只好慢慢折腾 一天下来总算装上了Firefly框架
  • Visual Studio中使用GitHub

    Visual Studio中直接使用Github能够非常方便的同步 拉取git中的项目 还可以多人同时进行版本控制 小组合作的利器 也不需要拷贝代码了 具体使用方法 第一步 在Visual Studio中安装GitHub Extension
  • IT技能图谱

    成长的因素有很多 你知道知识图谱的作用吗 本文GET了当下最热门 最火爆的技术知识点 让你一库在手 技术全有 众所周知 我们的每个知识库都是邀请专家精心绘制图谱 并依据每个图谱的知识结构 筛选该技术分支知识点下的优质资源 经特邀编辑一一审核
  • C++中.cpp和.hpp的区别

    时间 2020 06 02 标签 c cpp hpp 区别 栏目 C C 繁體版 原文 https my oschina net u 4398200 blog 3336507 原文地址 https blog csdn net qzx9059
  • oracle账号共享

    各位小伙伴 在oracle官网下载JDK需要oracle账号 本人提供账号共享 方便大家下载 希望大家不要改密码 方便更多的人 账号 908344069 qq com 密码 Java2019 jdk 8u271 linux x64 tar
  • 经验之谈

    谈编程 的确而是一个复杂的问题 我只是一个菜鸟 甚至连菜鸟都算不上 只是喜欢代码而已 看看不同的人写不同的代码吸收他人的智慧之光也是一种享受 网络中精英辈出 什么jsp asp php java c c 真的太多了 需要学的东西确实太多了
  • 一个将军的人生总结

    这十句话 是我几十年间学习 积累 感悟出来的 我认为 做到了 就有益健康 第一句话 结交 两个朋友 一个是运动场 一个是图书馆 到运动场锻炼身体 强健体魄 到图书馆博览群书 不断地 充电 蓄电 放电 第二句话 培养 两种功夫 一个是本分 一
  • BDTC2014中国大数据技术大会

    2014中国大数据技术大会32位核心专家演讲PDF下载汇总 重磅资料 下载地址 http download csdn net detail zhongwen7710 8295907 2014中国大数据技术大会32位核心专家演讲PDF目录题目
  • bash脚本,自动输入sudo的密码

    解决方法 echo 管道 开始使用 echo admin sudo service tomcat7 stop 始终提示输入密码 后来查看了下sudo命令的使用 man sudo 发现有如下的解释 S The S stdin option c

随机推荐

  • centos 64 位系统安装postgresql odbc 方法

    1 64位系统下 postgresql 的psqlodbc驱动下载地址 http www postgresql org ftp odbc versions src 2 64位系统下 安装psqlodbc需要的安装包 unixODBC 2 3
  • 机器学习实验(一)—Linear Regression

    前几天做了几个机器学习的简单实验 机器学习实验二 Logistic Regression 实验一是关于简单的线性回归的实验 下面是我的实验报告的截图 直接把word的内容撸过来 格式就全乱了 没有找到解决办法 直接上图吧 也是一种办法 后面
  • 关于差速移动机器人的运动学模型推导

    预备 在机器人的运动中 经常会涉及到航向推演 下面这篇博客写的挺好的 https blog csdn net heyijia0327 article details 44983551 在学习机器人运动模型推导的时候 有看到 网上别人的推导过
  • Rabbitmq的五种模式和案例

    消息生产者p将消息放入队列 消费者监听队列 如果队列中有消息 就消费掉 消息被拿走后 自动从队列删除 隐患 消息可能没有被消费者正确处理 已经消失了 无法恢复 应用场景 聊天室 案例 1 gt 首先准备依赖
  • linux查找nigux得路径,Dzongkha localization in Linux operating

    This message was created automatically by mail delivery software A message that you sent could not be delivered to one o
  • 网关(gateway)简介与作用

    网关的英文名称 gateway 又叫做网间连接器 协议转换器 网关是在采用不同体系结构或协议的网络之间进行互通时 用于提供协议转换 路由选择 数据交换等网络兼容功能的设施 网关在传输层上以实现网络互连 是最复杂的网络互连设备 仅用于两个高层
  • Lerp 实现匀速运动

    Lerp函数在Mathf Vector3 等类中都有 用法都类似 作用都是按照百分比取得从一个值过度到另外一个值的中间值 下面说的内容针对各中类的Lerp函数都是通用的 Lerp的常见 误用 是 Update Transform posit
  • 快速排序与快速选择

    快速排序算法就是将一列无序的数字排成有序 通过使用分治法 快速排序能够在O nlog n 的时间内完成 相比堆排序等其他也是O nlog n 复杂度的排序算法 快速排序的基数更小 因此效率也就越高 快速选择是在快速排序的基础上 在一列无序数
  • C语言中getchar()的用法详谈

    大多数人只看getchar 名字 以为其返回值是char 类型 但是getchar 的确不是char 类型 而是int 类型 其原型如下 int getchar void getchar有一个int型的返回值 当程序调用getchar时 程
  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子串是 b 所以其长度为 1 示例 3 输入 pwwkew 输出 3 解
  • 单元测试基础知识,面试用得上...

    1 什么是单元测试 在计算机编程中 单元测试又称为模块测试 是针对程序模块来进行正确性检验的测试工作 程序单元是应用的最小可测试部件 在过程化编程中 一个单元就是单个程序 函数 过程等 对于面向对象编程 最小单元就是方法 包括基类 抽象类
  • rocksdb 编译安装 日志

    Compilation RocksDB s library should be able to compile without any dependency installed although we recommend installin
  • 【面试专题】Spring篇②

    个人主页 个人主页 系列专栏 Java面试专题 目录 1 spring bean的循环依赖 2 springMVC执行流程 3 Springboot自动配置原理 4 Spring框架常见的注解 Spring SpringMVC Spring
  • channel的超时问题

    问题 并发编程的通信中 超时问题不可忽视 它指的是向channel写数据时发现channel已满 或者从channel尝试获取数据发现channel为空 如果不正确处理这些情况 很可能会导致整个goroutine锁死 i lt ch 不出问
  • Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案

    原文地址 http blog csdn net dream it life article details 5488121 最近因为需要 要用C C Objective C三种C语言3C混编的开发程序 在当然方法也和大家说一下吧 就是在Xc
  • 【PaddleDetection】基于PaddleDetection的齿轮瑕疵检测:从模型训练到部署中的那些坑

    目录 0 题目简介 1 Baseline项目的本地化 1 1 飞桨环境配置 飞桨安装注意事项 1 2 PaddleDetection安装 PaddleDetection注意事项 1 3 数据集下载与配置 PaddleX安装注意事项 1 4
  • windows下编译caffe

    windows在编译caffe有两种途径 第一直接从github上clone windows分支的源码 根据提供的cmakeLIsts开始编译 这种方法自由选择编译器 依赖的库文件版本等 可能自由度更大 但是也有比较多的问题 https g
  • 介绍Flex UI 测试工具:FlexMonkey

    相信许多人都知道Flex的单元测试工具 FlexUnit或者ASUnit 但是对于UI测试工具可能很少有人了解 那么目前有什么FlexUI测试工具呢 答案是FlexMonkey FlexMonkey是一个Flex应用的测试框架 他可以提供对
  • 交叉编译mbedtls

    交叉编译mbedtls 使用INTEL工具链编译 编译流程 编译成功文件默认的存放位置 使用mipsel 24kec linux uclibc工具链编译 编译流程 编译成功文件默认的存放位置 使用INTEL工具链编译 编译流程 make C
  • 最牛B的编码套路

    最近 我大量阅读了Steve Yegge的文章 其中有一篇叫 Practicing Programming 练习编程 写成于2005年 读后令我惊讶不已 与你所相信的恰恰相反 单纯地每天埋头于工作并不能算是真正意义上的锻炼 参加会议并不能锻