手工艺人(英语:Artisan,或称为“匠人”)是指拥有某项熟练技巧,从事传统手工艺的工作者。古时的手工艺是以师徒制度传承,学徒跟随匠师担任助手,在日常工作中学习手工的技术和知识;现时的教育制度普及,学生普遍可以通过学校学习日新月异的技艺。维基百科
程序员(Programmer,Computer Programmer或Coder),它可以指在程序设计某个专业领域中的专业人士,或是从事软件撰写,程序开发、维护的专业人员。维基百科
与独一无二和创造性相反的两个词,大概是重复的和乏味的。独一无二的经常是具有创造性的,重复的经常是乏味的。
重复的工作并不意味着低级。很多所谓的大的互联网公司的所谓高级程序员,数十年做着重复的编程工作,但依然能拿着极高的工资,有着幸福的生活。但这种幸福,和拿到工钱的流水线工人体验到的幸福别无二致。流水线工人的工作就是重复的劳动,无可非议,但程序员要做的工作应该是独一无二有创造性的,因为计算机要发展,人类数字文明要进步。
若要养家糊口,重复劳动即可,但若要做程序员,即使你水平尚未达到,也不可停止对创造性工作的追求。
创造性工作并不难以企及,不需要你开发一个全新的操作系统或者发明一种新的压缩算法。在你开发工作中一点点新颖的改进都可称之为创造性。比如你和团队在开发性能要求很高的软件,你的团队同事都在遵循着前辈流传下来的O(N)时间复杂度的算法,你只做了一点点小的改进,通过增加一倍的内存,就让算法大部分时间运行在O(1)上。即使你的这个改进几年前已经在全世界很流行,但对于你和你的团队,都是创造性的工作。这个例子是我经历过至少一次的真实案例。
如果你的任务是写一段代码计算1 + 2
的值,你的结果必须输出3
才是正确,其它值显然都是错误。从这个角度讲,程序设计的确是科学。无论你怎么改进,结果都只能是3
.
但程序设计不仅仅是理性的科学,它还包含有些感性的艺术成分,这些艺术成分没有对错和好坏之分,但这是这点让你作为工匠有了无限追求完美的空间。举个例子,最基本的代码风格,就没有对错好坏之分,但有些人写的代码就是那么优美(只看格式),有的人的代码就杂乱无章一团糟。至于代码结构设计,架构设计,更是如此。
一幅绘画大师的作品在某些人眼里价值十亿,在另外一些人眼里就是废纸,这些对于绘画大师并不重要,因为绘画大师追求的是完美的作品。你的程序经常会被别的程序员挑刺,但这也不重要,重要的是你要像绘画大师一样追求代码的完美,因为程序设计也是艺术。
如果你已经赞同我的观点,认为程序设计是艺术,那么你也会赞同我们对完美应该有着永无止境的追求。你也许不知道什么是完美,因为这个世界上根本没有完美的东西,但是作为艺术家,你回过头来看三到六个月前写的代码,如果你能发现可以改进的空间,那么你距离完美就更近一步了。
当然了现实不总是能允许你追求完美,比如你在公司做的项目,有明确的交付日期和质量标准,那么你的工作只能是按时按质量交付项目而不是追求完美了。
在当今网络时代,写程序似乎变成非常容易的事情。只要把问题敲进搜索引擎,从搜索结果中选取相应的开源代码库或者相应的论坛问题,拷贝粘贴一些代码,就完成了功能。但这样的话你只是代码的搬运工和装配工,除了增加地球上代码的行数以及挣点让你养家糊口的工资外,对于计算机技术的进步毫无贡献。
这个和工厂里流水线上的装配工类似,他们无疑产生了莫大的价值,但恐怕不会掀起新的工业革命。
如果你同意程序员应该做创造性工作,程序设计应该是艺术,那么类似于一个技艺精湛的手工匠人,程序应该是手工雕琢出来的。
如果你只是把编程当成工作,那么做一名程序员已经足够了。但如果你是真心热爱编程,那么就开始做一名编程工匠吧。