专访朱雷:昔日的游戏少年,如今的Python工匠

Posted 图灵教育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了专访朱雷:昔日的游戏少年,如今的Python工匠相关的知识,希望对你有一定的参考价值。

print(i, name)
第二段代码相比第一段,就要更Pythonic一点。对于Python程序员来说,追求Pythonic不是「茴字的四种写法」那种浮于表面的形式需求。Pythonic的代码实质上与许多语言底层概念息息相关,比如你可能得掌握:自定义可迭代对象、使用上下文管理器、创建数据模型等知识点,才能在写代码时游刃有余。
作为回报,Pythonic通常会给程序员们带来这些好处:代码更短、速度更快、可读性更强。
说Python难于精通的第二点原因,在于将其应用到规模较大的工程上时。我常听到人们说:「Python只适合做小项目,不适合做大工程。」——虽然片面,但确实有一定道理。因为当你用Python开发大工程时,的确会遇到不少令人恼火的问题。
举个例子,开发小项目时,你可能极少关注Python的类型系统,现写现用。但参与大项目时,为了提升代码的可读性,为了引入静态检查提升程序的可靠性,你可能就得掌握类型注解、泛型、结构化子类等更复杂的类型系统概念,才能让工程质量更上一层楼。
此外,在开发大型项目时,如何用Python做好自动化测试、如何管理项目依赖(包管理工具一只手都数不过来)等,都需要不断学习,从错误中积累经验,着实算得上「难于精通」。



在被几个被称为「坑」的老项目折磨后,

朱雷意识到「代码也分好坏」。
关于代码,有一句话常被人们引用:「程序必须先是写给人读的,然后顺带着让机器执行。(Programs must be written for people to read, and only incidentally for machines to execute.)」,它精准地表达出了「让代码保持可读」的重要性。

评价代码好坏有很多维度,比如可读性、易修改性、编写成本、执行效率等。这里重点谈谈前两个。

好代码一定是比较好读的。也就是说,当读到一段好代码时,我们能比较容易地理解代码的意图,搞清楚它到底做了什么。而烂代码在可读性上则各有各的问题。有的抽象过度,做一件简单的事封装了四层,让人头晕眼花;有的缺乏抽象,相似的代码成片出现,也很难读。
如何写出可读性高的代码,不同编程语言各有各的门道,而有一些准则是通用的:
  • 一个函数内不要包含太多代码
  • 尽量使用精确和有意义的函数名与变量名
  • 在必要的地方编写注释,解释「为什么这么做」
  • ……
  • 评价代码的好坏,除了「可读性」之外,还有另一个着眼于未来的维度——易修改性。现实世界里的软件需求是不断变化着的,「易修改性」提出的问题是:「当需求变更时,你的代码改起来麻烦吗?」要知道,有些代码虽然读起来简单直白,但假如需求发生了一点细微的变化,所有代码都得推翻重写,这当然也是不可接受的。

    为了让代码易于修改,程序员们又会引入很多技术来让代码变得更「好」,比如使用恰当的设计模式、设计精准的抽象模型、编写完备的单元测试等等,这些办法都很有用。

    3
    优秀软件工程师应该具备的「软能力」




    谈及如何成为一名优秀的软件工程师,

    朱雷认为硬实力固然重要,

    但软能力同样不可或缺。
    首先,一名优秀的软件工程师,一定要有过硬的专业能力。拿后端开发举例,他不光能写出高质量的后端代码、高效地排查各类问题(debug能力),还能设计出良好的软件架构。除此之外,他也得对各类数据库、缓存系统以及高可用方案的优缺点有所积累,能提出自己的见解。这些东西,网上许多文章都讲透了,我就不再赘述。
    我这次主要想提两个与硬实力无关的「软能力」
    第一个「软能力」无关代码和软件,而是和「人」息息相关。具体来说,就是换位思考、高效沟通的能力。
    「换位思考」乍听上去是个生活能力,常用于吵架后的自我反省,与程序员的工作似乎没啥联系。但其实并非如此,我来给你举个例子。
    在开发一个功能时,除了编写代码完成需求外,你是否试过站在「使用方」的角度做一些思考呢?如果你试过,便会发现许多代码之外的问题一一浮现:「REST API调用起来怎么这么麻烦?它的参数设计真的合理吗?」「这条报错信息这么模糊,其他人看到知道如何处理吗?」把这些基于「换位思考」发现的细节做到位,对你的职业生涯百利而无一害。
    「高效沟通」的用处就更多了。在与同事讨论技术方案时,在沟通代码审查意见时,你是否能做到:既有效表达了自身观点,又不至于搞僵整个讨论氛围呢?良好的沟通技巧,会在无形之中让许多工作变得更简单,当然也会给你带来更好的人际关系。现代职场中,谁又不想要一份好的人际关系呢?
    第二个「软能力」是我最近时常想到的一点:「拥抱苦差事」的能力。
    程序员们是一个崇尚自动化、极度厌恶重复工作的群体。但在现实世界中,枯燥与重复有时是不可避免的。我去年在博客翻译过一篇文章《拥抱苦差事》,作者在里面就提到:曾连续花了三个星期,将2000多份缺陷报告归类并排好优先级,才把整个团队从bug的泥沼中拉出来,让开发回到正轨。
    在你的工作中,相信也少不了这类「苦差事」。它也许是几千份杂乱无章的缺陷报告,也许是上万行质量糟糕但运行着核心系统的遗留代码。面对这类「苦差事」,其他人或许唯恐避之不及。但你如果能调整心态,一步一个脚印,「愚公移山」似的埋头将问题搞定,最后不光能改善你的工作环境,打磨你的工作技能,也一定能帮你赢得许多来自其他人的尊敬和信任。
    4
    写书,回答「如何写出好的Python代码」这个问题




    2016年起,朱雷写了一系列技术文章,

    逐渐找到合适的表达,收获诸多好评,

    后来以这些文章为骨架写成《Python工匠》一书。
    写「Python工匠」的前几篇文章时,我的流程是这样的:挑一个大主题,写一些各自独立的知识点,按「最佳实践」「常见技巧」「常见陷阱」分好类,最后组织成一篇文章。但这样写了四五篇以后,就有点儿腻了,于是我就开始尝试其他形式,比如把一类知识点揉进一个完整的故事里
    在故事的选材方面,我会尽量挑选所谓「接地气」的那种。比如在写 SOLID 设计原则时,我突然想到有很多人喜欢用 Python 写爬虫(我自己也写过不少),于是就杜撰了一个爬虫小项目,把那些复杂的设计原则融了进去。事后发现,读者读起来还挺容易代入的,效果不错。

    我写书和写文章都是在业余时间,一般习惯在工作日的早晨(七点左右起床)写一个小时左右,到了周末,如果有精力、没什么别的事儿的话,也会连续写上几个钟。这样算下来,一篇文章大概会花 1~2 周左右。当然,我写东西也不是连轴转,有时写了一篇以后,会「摸鱼」好几个月再写下一篇。




    写书这件事能给很多方面带来提升。
    通过写一本书,把自己掌握的知识点重新组织一遍,提升肯定不小。但要是说具体哪里有提升,我还真说不上来。能想起来的是,我在写某些章节时,为了保证内容准确无误,特意去读了一本相关的技术书,补齐了几个知识盲点,感觉还挺好。
    后来跟帮忙审稿的技术大佬们沟通时,也从他们的审稿意见里学到了不少东西。
    除了技术能力外,在写作技巧层面上,写书这事儿对我的帮助也挺大。还记得几年前,我在公司内网发表第一篇「Python工匠」文章时,有一位同事留言道:「这篇文章是翻译过来的吗?」他说这话肯定没恶意,但我当时就意识到:我的文字「翻译腔」太重了——用词别扭,结构也不自然,总之就不像是一个中文母语的人写出来的东西。
    在刻意做了许多阅读和学习后,借助写书这个机会,我彻底调整了自己的写作风格,让自己的文字尽量贴近地道的中文表达。这事儿读者买不买账我不知道,但自己还挺开心的。



    想写出「好的Python代码」的人,

    来读《Python工匠》吧!
    如我在前言中所说:《Python工匠》并非一本为零编程经验的新手写的入门书。假如你是一位编程新手,那么我建议你最好先学一些 Python 的基础语法,写上几百行Python代码,找到一些感觉之后再来翻阅本书。
    假如那时,你满脑子想的都是:「为啥我的代码就是不如其他人的好?」那么恭喜你,《Python工匠》整本书几乎可以说是为你量身定做的。
    END



    采访&整理:刘文元
    插图:Konami、Bacancy Technology

    简介:本书基于广受好评的“Python工匠”系列开源文章。全书从工程实践角度出发,通过剖析核心知识、展示典型案例与总结实用技巧,帮助大家系统进阶Python,写好工程代码,做好实践项目。

    新工匠

    题引:两个菜刀品牌如今的发展状态对比:

    张小泉创建于1663年,当年用龙泉之钢铸造,六十六道工序,曾被列为贡品,1915年在巴拿马万国博览会上得过银奖,还是唯一被评为国家驰名商标的刀剪类商品,是名副其实的中国百年品牌;

    双立人创建于1731年,它所在的索林根小城地处德国西部,是欧洲不锈钢技术的发源地,也是1915年,双立人在旧金山世界博览会上独揽四项大奖,是如假包换的德国百年品牌;

    如今的张小泉亦步亦趋地走在先人开拓的路上,材料不变,工序不变,款式不变,视之为“百年传承的工匠精神”;而双立人则百般求变,不锈钢技术不断迭代,生产工艺全面创新,款式、门类更是层出不穷。

    在今天的商店里,张小泉菜刀的价格是双立人菜刀的二十分之一,至于销量和销售区域,则差距可能更大。

    我们要找的“新工匠”,应该是双立人,而不是张小泉。

    中国不乏匠人,但却缺乏新工匠

    全国老字号品牌超过1.2万个,摊开来,家家都有一个与传承和工匠精神有关的“神话”,可是有的苟延残喘,有的容光焕发,究之根源,正是有新旧之别。

    譬如张小泉和双立人,它们在百年前能各自崛起,都因为它们的工匠对当时的锻铸技术实现了突破,他们所生产的菜刀锋利轻快、造型时尚,他们的风格被固化为传统而得以流传。

    但是,时间会消磨一切的价值,随着时代的演进,技术被再次突破,审美被迭代,甚至使用的场景也发生了根本性的变化,如果后世的匠人抱守古人而不思进取,则传统成为枷锁,古人成为沉重的十字架。

    云南白药由云南伤骨名医曲焕章发明于1902年,被视为止血神药,其配方、工艺列入国家绝密。早年的白药,为粉末状的小瓶封装,一姓单传,百年不变。

    也是从十多年前开始,这家企业在王明辉的带领下大开大阖,先后从散剂开发出胶囊剂、酊剂、硬膏剂、气雾剂、创可贴等新品类,甚至还进入牙膏、洗发剂等快消品领域,成为老字号企业中第一家年销售额突破百亿的公司。

    真正的工匠精神不是回到传统,一味地向前辈致敬,而是从传统出发,让上帝先“死掉”再复活,在当代的审美和生活中重新寻找存在的理由。

    当今中国,一切商品都过剩,每个行业都是“红海”,可是同时,消费升级的大潮又为“创造之人”提供了无数的可能性,个性与创新成为市场竞争的最强软能力,“奇葩匠人”的时代已经到来。

    谁是“新工匠”

    新工匠的第一个特质是手艺人精神。他专注于产品本身,尊重制造的基本规律,对技术及细节的雕琢,是非常古典的,产品是他的人格投射,是专业精神的一次物质性呈现;

    新工匠的第二个特质是现代性。即与当代有关,与当代的一切新技术、新思维、新生活方式有关,百年前的厨房一定与当代的厨房不同,百年前的饮用趣味一定与当代的饮用趣味不同,甚至,百年前我们对伤痛的理解也一定与当代不同,与当代有关,才可能存在于当代;

    新工匠的第三个特质是颠覆能力。他必须与众不同,必须足够“奇葩”,能够在最普通的商品中重构审美,最极致的,他能够重新定义一个商品。

    美国社会学家理查德·桑内特出过一本名为《匠人》的专著,他对匠人的解读是“通过制造的物品去了解自身,体现时代的生活品质和审美特征”,在他看来,“制造就是思考”。

    一个人从事于某一行业而能够脱颖而出,其决定性的能力来自于他的思考力,即他对本专业的专注、对技术的敏感以及对当代审美趣味的掌握和扬弃。

    文章来源:吴晓波:什么是“新工匠”

    以上是关于专访朱雷:昔日的游戏少年,如今的Python工匠的主要内容,如果未能解决你的问题,请参考以下文章

    13 年 Python 编程经验,编写成书,是一种什么体验?

    软工读书笔记 week2

    新工匠

    软工作业: 硬币游戏—— 代码分析与改进

    软工作业2:硬币游戏——代码的分析与改进

    专访张路斌:从HTML5到Unity的游戏开发之路