`
jianpx
  • 浏览: 171168 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[转] 做一个懒惰的程序员

    博客分类:
  • life
阅读更多

本文纯转载自: http://blog.imalbert.com/archives/35.html

非常感谢作者的那些观点, 我个人非常受益, 所以转到这里, 一方面提醒自己要做个比作者更加懒惰的程序猿, 哈哈,

一方面可以给其他需要的人看到~

 

本文写给所有可爱的程序员,(我)你们都是一群可爱的,用双手建造世界的思想家。

从今天起,我要做一个懒惰的程序员。

第一 拒绝鼠标

从今天,我将拒绝鼠标。

鼠标,是鼠标手的根源,无数的程序员都被鼠标手所困扰,这似乎已经成为了程序人员的专利。我们养成了一个一个的“恶习”,比如,滥用鼠标右键刷新,看文档的时候,喜欢用鼠标来标记正在阅读的段落等等。这些非常规的使用使我们的手得了严重的疾病,我不知道,这样继续下去,当我们牙齿掉光的时候,是否还有能力抚摸妻子动人的面庞。

所以,我要从以下几个方面拒绝鼠标的诱惑:(虽然某些时候它真的很方便)

1. 我要开始使用Emacs或是Vim

Emacs和Vim就是程序员的倚天剑和屠龙刀!花一点时间学习来学习它,即便我以后不做程序员了,也将会终生受益。因为它同时也是普通人的编辑利器

作者本人曾经就是Emacs使用者,后来转入了Vim。直言不讳的说,玩Emacs或Vim本就是一个享受的过程,因为你总能无意间挖掘出它的一个又一个有趣用法。

如果你还执迷于Notepad++这些编辑器,看看这个Wiki:《Comparison of text editors》,你还有什么理由不选择它呢?

2. 我要使用键盘来浏览网页

学会了Emacs或是Vim,我开始想把这种高效的用法用在浏览网页上,毕竟这也会占据我的大部分时间。

如果是Vim的话,可以选择:Vimperator(firefox)或是Vimium(Chrome)

如果是Emacs的话,可以选择:Firemacs(firefox)或是Edit with Emacs(chrome)

3. 我要使用键盘来操作系统

我要使用更多方便的工具来帮助我管理系统:

我要使用AutoHotKey,使重复工作一键完成。

我要使用Totoal Commander,使系统文件管理变成一件轻松而有效率的事情。

我要学习更多的快捷键,包括Win+R的常用命令Outlook的快捷键,让这些以前只能缓慢移动鼠标的操作变成快捷的键盘操作。

第二 少用键盘,甚至少看屏幕

鼠标用的少了,键盘却用得多了,这还不够。

1 我将使用更多的时间来阅读纸质的书籍,而非PDF

阅读纸质书籍基于两点:

第一,我们可能有Twitter,有新浪微博,有QQ,电脑面前阅读有可能会使我们精力分散。

其二,阅读纸质的书籍会更加集中精力,触觉和视觉的结合会让我们记忆更加深刻

2 我将用更多时间进行交流和思考

我将腾出更多的时间用于思考,而不是腻在电脑面前。我将花更多的时间思考人生,思考设计,甚至思考我正在思考的东西。

第三 少写代码

1 构建自己的代码库

所有我写过的代码,我都要保存起来,反复思考,修改,尽量让其变成通用的代码。

遇到所有我没有写过的代码,我都要抓出其最独立的代码段,算法段,反复思考,修改,让其变成通用的代码。

我要把所有我思考过的代码都保存起来,放到我的代码库里边。遇到一个问题,先看看我的代码库里有没有?有的话就拿出来,直接用,或是修改一下再用,没有的话才自己重新写过,当然,这些新实现的代码将再次进入我的代码库。如此一个良性循环,从此,很多相似的问题再也难不倒我,因为我熟悉我的代码就像熟悉自己的身体一样。

因为我承认:

1 我的记忆是有限的,它不能永远记得所有细节。

2 再造轮子是一件可怕的事情,除非我能造得比人家更好。

2 让代码自己生成

最简单的代码生成是非逻辑生成,比如李先静曾经举过这样一个例子:

前几天遇到一个问题,要定义一组宏,它的格式是这样的:

KEYMAP(GDK_Op_Left, GDK_F12, DIKS_F12)

KEYMAP(GDK_Op_Right, GDK_F13, DIKS_F13)、

大约有30多行,第一列的Op_Left之类是自定义的按键,是我们讨论的结果,放在一个表格中,手工把这份表格转换成以上的宏,不难也要不了多少时间,但这样单调的事很容易出错,特别对于我这样粗心大意的人来说。于是决定用awk来做:

awk ‘BEGIN{i = 4} {print “KEYMAP(GDK_” $1 “, GDK_F” i “, DIKS_F” i “)”; i++}’ keys.txt

这就是代码产生器!就一行代码。简单吧,它却产生了30多行代码。其实我经常在用这样的代码产生器,给我节省了不少时间,减少了出错的可能。所以能用脚本就用脚本,脚本实现困难时才考虑用C/C++等编译语言。

复杂的代码生成便是逻辑生成,有这样一篇文章可以参考:《浅谈代码生成

第四 不调试程序

我要抱着严谨的态度写程序,我要如同追求艺术极致一般追求编码的极致。虽然我们知道,这世界上有太多的程序员,他们远远比我们厉害。但这并不妨碍我们超越他们的脚步。

我要像熟悉自己的身体一样熟悉我的代码,熟悉我思维中的每一个误区,每一个漏洞。我要写出优雅,优美的代码,而非依赖调试工具来找出问题。

我要善用我的眼睛,让它接受每一段代码,我要善用我的大脑,让它模拟出每一段代码的问题。我的思维会为我调试一条语句,不管其是空指针还是内存泄露。我的眼睛会为我找出每一个语法错误,不管是我粗心还是大意。(参见李先静的博客:《程序员成长计划》,像机器一样思考, 1, 2, 3

写完一段代码我不会心急地运行,看它的效果,我会花上10分钟检查我的代码,直到我确定,或者是“自以为”是bug 0.

从今天起,做一个懒惰的程序员,虽然我知道这条路很难走,但这并不妨碍我的热情。因为我知道,总有一天,我会变得比那些现在我只能仰望的人更加懒惰!

分享到:
评论

相关推荐

    程序员入坑指南1

    首先,作者讲述了成为一个合格的程序员需要一个转换的过程,从一行代码都没写过,到成为一个合格的程序员,再到顶级程序员,这是一个蜕变的过程。编程和写文章像极了,都是需要大量的练习、大量的背景知识、积累大量...

    程序员开发高频词汇.pdf

    程序员开发高频词汇 本资源摘要信息涵盖了程序员开发高频词汇,...这只是程序员开发高频词汇的一部分,涵盖了抽象、访问级别、激活、活动的、实际参数、适配器、添加、地址空间、ActiveX数据对象、高级的等多个方面。

    Perl程序员应该知道的事

    - **CPAN (Comprehensive Perl Archive Network)**:一个庞大的Perl模块仓库,几乎涵盖了所有可能的应用场景。通过CPAN,Perl开发者可以轻松地安装和更新各种模块。 - **CPANminus**:一种轻量级的Perl模块管理工具...

    Bitter.Core:bitter.core是一个高性能且易于使用的netcore netframework orm框架。 我想你会喜欢的。 为发展和效率而设计。 效率,高性能和高稳定性始终是程序员追求的目标。 bittercore就是为此而生的。 您想变得懒惰,甚至懒惰! 简单,更简单! 可控,更可控! 请苦用

    一个简单易用的高性能NETCORE / netframework数据库持久性框架(ORM) 1:支持MSSQL,MySQL 2:支持模型查询和SQL查询 3:支持一次事务提交 4:支持buldcopy的批量事务提交 5:支持查询数据模型转换 6:支持异常...

    Excel导出SQL SlobII懒汉2 [改进了下现在支持office 2007]

    标题中的“Excel导出SQL SlobII懒汉2”指的是一个名为SlobII的工具,它是为懒惰的程序员设计的,主要用于将Excel电子表格中的数据便捷地转换为SQL INSERT语句,以便于将这些数据导入数据库。这个版本是经过改进的,...

    Haskell Notes For Professionals

    ",实现一个计算阶乘的函数以及使用懒惰求值来计算斐波那契数列。除此之外,还可能涵盖了如何声明值以及如何生成质数序列等基础内容。 在学习Haskell的过程中,处理不同类型字面量是一个需要掌握的要点,第二章可能...

    C++ Common Knowledge : Essential Intermediate Programming

    数据抽象是C++中一个至关重要的概念,它涉及到如何设计和实现抽象数据类型。在问题域中,我们识别出的对象如员工(Employee)、合同(Contract)和工资单(Payroll Record),应该能够直接转化为程序中的数据类型。这种...

    slouch:从 CouchDB 到 MongoDB 的惰性、仅拉式、连续复制服务器

    因为我是一个懒惰的程序员。 因为我希望能够使用基于角色的 ACL 编写地理空间感知 API 服务器,但我不想自己编写这些功能中的任何一个。 CouchDB 有足够的 ACL 实现,但它不支持地理空间查询。 MongoDB 支持地理...

    python_2.5.4_Final

    总之,Python 2.5.4作为一个重要的里程碑,不仅集成了许多实用的新特性,而且为Python 3.x系列的过渡做了铺垫。虽然现在Python的最新版本已经发展到3.x系列,但理解2.5.4版本的历史背景和特性对于学习Python语言和...

    Groovy入门教程

    作为下一代的Java语言,Groovy在语法上与Java类似,但摒弃了Java的一些繁琐特性,使得程序员能用更少的代码实现相同的功能,因此被称为“懒惰程序员”的福音。 开发Groovy项目时,首先需要安装Java Development Kit...

    More_Effective

    例如,在处理流式数据时,可以实现一个懒惰加载的数据结构。 #### 六、技巧(TECHNIQUES,又称IDIOMS或PATTERN) ##### 7.1 将构造函数和非成员函数虚拟化 **知识点概述**:虽然构造函数不能被声明为虚函数,但可以...

    More Effective C++

    4. **理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异** (ITEMM12) - 异常处理、参数传递和虚函数调用都是C++中重要的机制,它们在功能和实现上都有所不同。 - **异常处理**主要用于错误处理...

    More Effective C++ 中文版

    这些范式提供了多种不同的解决问题的方法,使得C++成为一个功能强大且灵活的语言,但同时也要求程序员具备更深层次的理解和运用能力。 书中还指出了学习C++的难点和挑战,包括语言的广博语法、深层次思维和面向对象...

    more effective c++

    指针是一种变量,它存储的是另一个变量的地址,而引用则是在编译时绑定到某个对象的别名。因此,指针可以通过赋值指向不同的对象,而引用一旦初始化后就不能更改其绑定的对象。正确区分和使用指针与引用对于编写高效...

    More Effective C++ 完全中文版

    类型转换函数(如operator int)可以方便地实现从一个类型到另一个类型的转换,但如果定义不当,可能会导致意外的结果。例如,如果一个类同时定义了多个类型转换函数,那么在某些上下文中,编译器可能无法确定应该...

    Functional Programming in C++

    - 用户可以定义自己的高阶函数,例如一个`map`函数,该函数接受一个函数和一个列表,然后将该函数应用于列表中的每个元素。 - ```cpp template, typename T> auto map(Func f, const std::vector<T>& list) { ...

Global site tag (gtag.js) - Google Analytics