首页 > 编程语言 >《程序员修炼之道-从小工到专家》阅读笔记

《程序员修炼之道-从小工到专家》阅读笔记

时间:2023-06-04 15:23:31浏览次数:35  
标签:代码生成 Shell 小工 程序员 编辑器 源码 修炼 文本 schema

第15节 Shell 游戏

1、对于操纵文本的文件的程序员,命令 Shell 就是工作台。我们可以利用 Shell 启动各种应用、搜索文件、查询系统状态,甚至还可以构建复杂的宏命令,完成各种常见活动。

2、对于习惯 GUI 的开发者来说一直使用 Shell 有些极端。GUI 的好处是所见即所得,但他的缺点却是,所见即全部所得。GUI 环境通常受限于它们的设计者想要提供的能力。

3、比如我们想要做一件事:在一个代码仓库里,查找上周没有修改过的,使用了 awt 库的 java 文件。

如果使用Shell,可以执行:

find . -name ‘*.java’ -mtime +7 -print | xargs grep 'java.awt'

如果使用 GUI,你可以设想一下,这个过程会很麻烦,也很容易出错。

4、Shell 可能比较晦涩,但是掌握之后它能很大程度提高你的效率。Shell 可以做各种组合搭配,然后构建一个命令序列,让常做的事情自动化。

第16节 强力编辑器

1、我们认为你最好是精通一种编辑器,并将其用于所有编辑任务:代码、文档、备忘录、系统管理等等。

进行编辑活动时,你不必停下来思考怎样完成文本操作,编辑器将成为你双手的延伸,键会在滑过文本和思想时歌唱起来。

这就是我们的目标。

2、好的编辑器应该具有这些特性:可配置、可扩展、可编程、语法突显、自动缩进、类IDE特性。

3、编辑器对生产效率是有影响的。试想当我们需要一个字符一个字符或者一行一行移动时,按一次键,就以词,行,块的单位移动,显然效率更高。

4、然后做什么。选一种强大的编辑器,好好学习它。不断学习,减少你敲击的次数。设法扩展它,让它能胜任更多任务。

推荐两款编辑器:vim、Emacs

第17节 源码控制

1、原谅我们犯错的按钮是 UNDO 键,通常他们还支持多级 UNDO 和 REDO。而源码控制系统就相当于一个巨大的 UNDO 键,一个项目级的时间机器。源码控制系统(SCCS)能够追踪你在源码和文档中做的每一项改动。

2、应该总是使用源码控制,即使团队只有你一人,即使项目很小。

3、可以尝试的源码控制系统有 CSV、RCS、ClearCase 等。(那时 Git 还没流行起来)

第18节:调试

1、调试心理学。调试的目的是解决问题,不要因为别人提出 bug 而发起进攻。

2、当你目睹 bug 发生或者看到 bug 报告时,第一反应不要是“那不可能”。很明显已经发生了,把时间用在思考它为什么产生上面。

3、使数据可视化。例如循环引用问题,如果可视化的话可以很轻易地进行排查。

4、跟踪代码。发生 crash 我们能够查看系统的调用堆栈,但这些数据不一定够。对于非 crash 类错误,因为没有抛出,我们甚至不知道发生了什么。所以添加所谓的跟踪日志很有必要,这类日志最好采用统一规范,便于后期我们可以自动解析他们。

5、橡皮鸭,也叫小黄鸭调试法。遇到无法定位的问题时,对着小黄鸭(屏幕)解释自己的实现逻辑,很可能在说的过程中你自己就发现了问题所在。

6、不要第一时间怀疑 OS,IDE,三方库的问题,他们出问题的概率比你代码出问题概率小得多。我们应该首先确认和排查自己的问题。

7、对 bug 原因进行复盘。修复了一个 bug,不要就让它结束了,想一下,为什么它会出现了,如何避免。定位过程如果耗时较长,也需要复盘下为何花费了那么长时间,以及后续如何优化。

第19节 文本操纵

1、学习一种文本操纵语言。文本操作语言对于编程的意义,就像是刳刨机对于木工活的意义。

2、文本操作的案例。

  • 我们的测试数据有好几万条,散落在不同文件,如果需要进行合并并转换为特定格式,手动处理是无法想象的。但如果使用 Perl 几个小时就可以完成。
  • 数据库 schema 维护。可以写一组 Perl 脚本读取数据库 schema 定义的纯文本文件,根据它生成,用于创建数据库的 SQL 语句。schema 的 XML 版本等
  • 生成 web 文档。可以编写 Perl 程序,分析数据库 schema,C 或 C++ 源文件,及其他资源,生成 HTML 文档。
文中很多案例使用 Perl,这些工作也可以使用 Python 代替或者 Shell 里的 awk,sed 代替。

第20节 代码生成器

1、作为程序员,有时会需要我们在不同地方重复相同信息。如果出现这种情况,你就可以考虑构建代码生成器了。代码生成器就是编写能编写代码的程序。

2、有两类代码生成器:被动代码生成器和主动代码生成器。

3、被动代码生成器是独立执行的。它可以用来生成模板,版权声明,每个新文件的标准注释等等。

4、主动代码生成器会在每次需要其结果时被使用。比如根据数据库 schema 创建代码。

5、代码生成器不一定要生成代码,它可以用来输出任何格式的内容,比如 HTML、XML、纯文本等。

比如 iOS 里的三方库 R.Swift 就是一个根据资源名自动生成对应结构体的主动代码生成器。

标签:代码生成,Shell,小工,程序员,编辑器,源码,修炼,文本,schema
From: https://www.cnblogs.com/fengjiale/p/17455714.html

相关文章

  • 阅读笔记之《程序员修炼之道-从小工到专家》五
    第21节按合约设计1、注重实效的程序员会不信任自己,所以他们针对自己的错误行为进行防卫性编码。2、按合约设计(DesignByContract,简写DBC)是BertrandMeyer为Eiffel语言发展的概念。它的核心是用文档记载模块的权利与责任,并进行校验。它的目的是对函数做一些前置检查和后置......
  • 【1对1咨询】前端和后端,哪个更简单?转行程序员的捷径
    大家好,这里是程序员晚枫,专注于转行程序员的1对1咨询,小红薯也叫这个名。想转行程序员的朋友,在选择方向的时候都会遇到一个问题:哪个技术方向适合我?前端和后端哪个更简单?今天咱们就来一起分析一下~1、一样难很多网上的消息或者培训机构的广告会告诉你:前端比后端简单。这种回复,更多......
  • #yyds干货盘点# LeetCode程序员面试金典:颠倒二进制位
    1.简述:颠倒给定的32位无符号整数的二进制位。提示:请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在Java中,编译器使用二进制补码......
  • 高级程序员和新手小白程序员区别你是那个等级看解决bug速度
    IT入门深似海,程序员行业,我觉得是最难做的。加不完的班,熬不完的夜。和产品经理,扯不清,理还乱的宿命关系一直都在新需求-做项目-解决问题-解决bug-新需求好像一直都是这么一个循环。(哈哈哈)我觉得一个好的程序员,判断根本取决于,遇到生产问题和bug,解决的问题的思路,和解决问题时......
  • 低代码平台或零代码平台靠谱吗?15 年的老程序员来给大家剖析一下
    提到低代码平台或者零代码平台靠谱吗?咱们首先得先认识一下低代码和零代码平台。一、什么是低代码开发平台呢?低代码的含义是少写代码并不是不写代码,面向的用户群体还是编程人员,传统的快速开发平台、在线开发平台、OA办公系统都可以称为低代码平台,那他是怎么帮助你少写代码的......
  • [GPT4]作为一个大龄程序员,如何提升自己未来的竞争力?
    作为一个大龄程序员,提升自己的竞争力至关重要。以下是一些建议,可以帮助你在职场上保持竞争力和不断壮大技能库:持续学习学习新技术:紧跟技术趋势,如人工智能、大数据、区块链等领域。获得相关证书:如AWS、Azure、GoogleCloud等云服务提供商的认证或者PMP等项目管理认证。观看......
  • 程序员怎么玩转Linux
    Linux下可以使用Python编写爬虫程序,常用的爬虫框架有Scrapy和BeautifulSoup。Scrapy是一个基于Python的开源网络爬虫框架,可以快速高效地从网站上获取数据。它提供了强大的数据提取和处理功能,支持异步网络请求和分布式爬取等特性。BeautifulSoup是一个Python库,可以从HTML或XML文......
  • #yyds干货盘点# LeetCode程序员面试金典:填充每个节点的下一个右侧节点指针 II
    题目:给定一个二叉树:structNode{ intval; Node*left; Node*right; Node*next;}填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NULL。初始状态下,所有 next指针都被设置为NULL。 示例1:输入:root=[1,2,3......
  • 转行程序员最快的方法,就是发挥自己的优势
    大家好,这里是程序员晚枫,全网同名,专注于0基础转行程序员的方向规划和学习辅导。后台咨询第二多的问题,就是:如何转行?后台咨询第一多的问题,就是:如何快速又轻松的转行?1、先说答案外行、0基础转行程序员,最快的方法有且仅有一个:发挥自己的优势。可能看到这里很多人要蒙圈了:我本来就......
  • 程序员如何提升解决横向问题的能力
    横向问题,简单来说就是软件系统内部与业务无关的技术债,比如性能、可扩展性、可用性、可测试性、可维护性和安全合规等问题。这些问题都属于非功能性需求,也就是说,产品经理一般不会把这些问题直接写在需求文档里。可是日积月累,这些技术债必然会成为整个团队的负担,影响软件的整体质量。......