个人篇:从小工到能手
最后更新于:2022-04-01 14:09:28
# 个人篇:从小工到能手
工作的日子里,每天都会八点多到公司,边点东西边看看Google Analytics,看看昨天博客有多少访问量,吃完了就写写代码刷刷Github。到了九点多,人差不多来齐了——我们不打卡,就开始了上午的工作。中午的时候会趁着午休的小间隙翻译点书,或者写点代码,写会文章。晚上吃完饭,走到家里休息会儿就八点了。看看书,写写代码,一天就过去了。
生活似乎变成了流水帐,不会发生什么特别大的变化,没有特别大的故事。日复一日的单调而又不无聊,周末也是码码字、写写代码、看看书,玩局《文明》、看部电影或者陪女朋友出去吃好吃的就过去了。
> 上即是下,输出即是输入
在你写过了很多的代码之后,你也许也发现了一些神奇的事情——即使你写了再多代码,你的能力并没有多少提升。人们通常称之称为瓶颈。这不禁让人想起经济危机的时候,有的国家发起了战争,有的国家开始变革,有的则无为而治,每况愈下。有时候我们发现不了我们有更好的选择。
### 编程同写作,写代码只是在码字
看到一篇文章[《We Are Typists First, Programmers Second》](http://blog.codinghorror.com/we-are-typists-first-programmers-second/),日期是2008年,好早的一篇文章。当现在打算以一个新人的身份重新进入编程领域,或许是受《重来》的影响,或者只是在重新思考——我们究竟应该如何去编程。
### 写代码只相当于写字
> ?也许这是一篇软文
编程这件事情实际上一点儿也不难,当我们只是在使用一个工具创造一些东西的时候,比如我们拿着电烙铁、芯片、电线等去焊一个电路板的时候,我们学的是如何运用这些工具。虽然最后我们的电路板可以实现相同的功能,但是我们可以一眼看到差距所在。
换个贴切一点的比喻,比如烧菜做饭,对于一个优秀的厨师和一个像我这样的门外汉而言,就算给我们相同的食材、厨具,一段时间后也许一份是诱人的美食,一份只能喂猪了——即使我模仿着厨师的步骤一步步地来,也许看上去会差不多,但是一吃便吃出差距了。
我们还做不好饭,还焊不好电路,还写不好代码,很大程度上并不是因为我们比别人笨,而只是别人比我们做了更多。有时候一种机缘巧遇的学习或者bug的出现,对于不同的人的编程人生都会有不一样的影响(ps:说的好像是蝴蝶效应)。我们只是在使用工具,使用的好与坏,在某种程序上决定了我们写出来的质量。
写字便是如此,给我们同样的纸和笔(ps:减少无关因素),不同的人写出来的字的差距很大,写得好的相比于写得不好的 ,只是因为练习得更多。而编程难道不也是如此么,最后写代码这件事就和写字一样简单了。
刚开始写字的时候,我们需要去了解一个字的笔划顺序、字体结构,而这些因素相当于语法及其结构。熟悉了之后,写代码也和写字一样是简简单单的事。
#### 学习编程只是在学造句
~~~
?多么无聊的一个标题
~~~
`计算机语言同人类语言一样`,有时候我们也许会感慨一些计算机语言是多么地背离我们的世界,但是他们才是真正的计算机语言。
计算机语言是模仿人类的语言,从 if 到其他,而这些计算机语言又比人类语言简单。故而一开始学习语言的时候我们只是在学习造句,用一句话来概括一句代码的意思,或者可以称之为函数、方法(method)。
于是我们开始组词造句,以便最后能拼凑出一整篇文章。
#### 编程同写作
> ?编程同写作,这是一个怎样的玩笑?这是在讽刺那些写不好代码,又写不好文章的么
代码如诗,又或者代码如散文。总的来说,这是相对于英语而言,对于中文而言可不是如此。**如果用一种所谓的中文语言写出来的代码,不能像中文诗一样,那么它就算不上是一种真正的中文语言。**
那些所谓的写作逻辑对编程的影响
- 早期的代码是以行数算的,文章是以字数算的
- 代码是写给人看的,文章也是写给人看的
- 编程同写作一样,都由想法开始
- 代码同文章一样都可以堆砌出来(ps:如本文)
- 写出好的文章不容易,需要反复琢磨,写出好的代码不也是如此么
- 构造一个类,好比是构造一个人物的性格特点,多一点不行,少一点又不全
- 代码生成,和生成诗一样,没有情感,过于机械化
- 。。。
然而好的作家和一般的写作者,区别总是很大,对同一个问题的思考程度也是不同的。从一个作者到一个作家的过程,是一个不断写作不断积累的过程。而从一个普通的程序员到一个优秀的程序员也是如此,需要一个不断编程的过程。
当我们开始真正去编程的时候,我们还会纠结于“**僧推月下门**”还是“**僧敲月下门**”的时候,当我们越来越熟练就容易决定究竟用哪一个。而这样的“推敲”,无论在写作中还是在编程中都是相似的过程。
> 写作的过程真的就是一次探索之旅,而且它会贯穿人的一生。
编程只是在码字,难道不是么!
> 真正的想法都在脑子里,而不在纸上,或者IDE里。
### 写作
### 写作驱动学习
在软件开发领域有这样的几个名词
- TDD。测试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名
- BDD。行为驱动开发(Behavior-Driven Development)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。
- DDD。领域驱动设计(Domain-Driven Design)的一个核心的原则是使用一种基于模型的语言。
而最近我处在于一个尴尬的位置:`写作驱动学习`(`Write-Driven Learing`)。开始之前我找到了一个相似的概念,`数据驱动学习`(Data-driven Learning)。
当我来到了一家卓越的软件公司时,开始有了点所谓的`骗子综合症(imposter syndrome)`(即常常会发现所有一起共事的程序员都比自己聪明、比自己有天份、比自己有才能),幸运的是并没有持续太多的时间。只是已经有了所谓的`21天效应`(在行为心理学中,人们把一个人的新习惯或理念的形成并得以巩固至少需要21天的现象,称之为21天效应。这是说,一个人的动作、或想法,如果重复21天就会变成一个习惯性的动作或想法。),在刚开始的时候里不断地学习,以减少这种所谓的`综合症`。然而,在这时已经养成了写作的习惯。
在过去的六个月里:
| 时间 | 写作数量 |
|-----|-----|
| 2013.12 | 27 |
| 2014.01 | 24 |
| 2014.02 | 12 |
| 2014.03 | 29 |
| 2014.04 | 49 |
| 2014.05 | 25 |
在我在学习更多东西的时候,我玩了更多的东西。而在这时候因为网站流量的关系,我开始写作记录更多的东西。而在那之前的半年里,也就是2013.06~2013.11的文章数加起来才21.
于是在其他程序员开始写程序的时候我开始写作,我得好好想想今天要什么,正如那些测试人员要开始写测试那样。于是,就有了`写作驱动学习`(Write-Driven Learning)。
**写作驱动学习的优点**
- 对于我们所要学习的东西,我们可以掌握得更深入,因为我们需要去给别人解释。
- 除去收获所学习的东西,我们还可以有副产品——博客。
- 我们在以另外一种方式思问题。
- 我们在不断地对自己知识总结,对自己知识的一个强化。
- 当然了这是我们的笔记。
**写作驱动学习的缺点**
- 可能会花费更多的时间,在诸如写作这点事情上。
- 有时学习的结果是为了写作。
- 付出不一定有相应的回报。
做为一个独立博客的作者来说我开始在不断地坚持写作,而唯一的动力源是来自于因为有更多的访客。要坚持写博客可能不是一件容易的事,但是现在似乎做到了,转变成一种`写作驱动学习`。
**写博客的动力**
对于我来说写博客的动力应该是下面这些:
- 对于SEO的学习。
- 成为Full Stack的必经之路。
- 更好地去理解WEB经营。
- 提高自己的综合能力
- 分享知识与经验。
- 可以认识更多的人。
- 可以被发掘。
### 阅读
看过了很多的技术书籍,到了今天,似乎对技术书籍失去了盼头。过去,因为是在学校的关系,上课只好带着书过去,现在工作了看书的时间越来越少,但是看的书似乎没有比原来少。只是看书的内容变了,以前看的是技术书籍,现在懂的技术多了,看的类型变成了理论类型的。而我本身是更喜欢实践的类型,于是到了今天技术似乎没有想象中的重要。
### 业务与技术
在学校的时候,由于接的一些单子数量比较少,三天打鱼两天晒网,可以有更多的时间放在技术的学习上面。或者说,当时的学习是目的性不强的学习。受一些客户的影响,当时我们所要做的一些技术方面的东西,也是被驱动着去学的。
工作的时候,主要的东西也是受业务驱动。换句话说,不论在哪我们都是要以营利为目的去写代码。只有在Github上写代码可以自由自在,换句话来说,这也是写博客和写书的区别。
-
作为一本书的作者,我们需要将我们想讲述的东西变得简单一点。有时,我们不得不去重复一些内容,以便让我们的读者读懂我们的思想。这就是我们的主要业务——写作,最好的写作是可以按自己的想法而来,而不是读者想要什么我们给他们什么。然而,我们也需要去考虑读者的感受。毕竟,这时可以给我们带来收入。
-
作为一个博主,我总是自己想写些什么就写什么。我需要写点什么就写点什么,这就是我们的自主。我们可以不需要去重复一些内容。而且相对于写书来说,我们可以不断发布我们地新版本的博客。博客可以是我们的笔记,于是我们想要什么就给自己什么。我们不需要考虑太多读者的感觉。毕竟,这算是一种额外的收入。
于是,我们回到技术与业务上。这也是我们在Github上写代码和项目上写代码的区别。
-
工作上写的代码,绝大多数是以业务为驱动的。有时,我们甚至会抗拒某些功能的代码,至少从心里上不会认可这样的行为。然而,在业务上却是受欢迎——比如广告。我们写的代码多数时候是受约束的,这样也就意味着我们可以写出更好地代码。只是当我们有太多优先级比较高的功能时,我们写的代码就会越来越糟。我们没有时间去重构,没有时候去写出更好地代码。正如:`如果我有更多的时间, 我就能给你写更短的信了`。
-
[Github](#)上的代码。总是可以随心所欲地写,我想有这个框架,用这个数据库。我们可以在自己的项目上选择需要的功能,就像Linus一样,可以决定Linux内核需要怎样的功能。这时,我们没有业务驱动,我们可以写作更好地代码。我们总会试着去重构我们的代码,因为我们有足够的时间。
只是我们靠工作来赚钱,靠Github来保持热情。虽然,多数时候对工作上的代码很有热情,比如某些有挑战性功能。而我们靠Github来保持更高地热情,不是么?
### 说说技术书籍
多数时候我们看书是靠兴趣,少数时候我们是靠技术上的需要。于是,作为一个兴趣广泛的孩子,我有一堆书,多到我不想去统计到底有多少。
有一天,我发现我的书架上摆满了太多关于技术的书籍。
于是有时,我开始向一些非技术类的书籍靠拢。毕竟,**了解活着的意义,有时候比更好地活着来得有意义。**
### 如何写技术书籍
这是一个简单而又有趣的话题,如果我们写关于某方面技术的话,我们我想我们要写关于这方面的书籍唯一缺少的就是恒心。因为我们在这上面工作了一些时间,我们有足够的能力去写一本书。当你发现一本书上面的所有知识都是你会的时候,你也有能力写这样的一本书。但是你真的会去写么,如果每天你都想着把睡懒觉的习惯戒掉的话,这可能是一件很能的事情。这需要持之以恒地力量,所以在那之前需要好好地去评估一下这可能性。
听过不少关于技术方面的讲座等等,多数都讲得比较显浅,并不是演讲者的水平问题。而是如果演讲者讲得太深的话,那么多数的人就听不懂,也就不会有兴趣。听上去,你似乎是一个NB的人物,仅些而已。于是如果我们把一本技术书籍写得复杂的话,那么受众就少了,肯看的人就更少了。很难去了解到底有多少出版社真的愿意去出这样的书,于是多数的技术书籍的主要对象都是那些初学者或者中级。
于是开始慢慢去思考,我们是要写更多的代码,还是要看更多的书。只是有时可以少看一些技术,我们真的需要去了解一些不在用的技术吗?我们把一门语言学得再好,如果用不到的话,是不是只能用来聊天?
### 持续
如果说`持续交付则是一种对卓越的追求`,那么`持续学习应该就是追求软件卓越`。 如果说`持续集成是一种软件开发实践`,那么对于技术人员来说——`持续写作应该就是持续学习的实践`
生活总会遇到压力,来自工作上的也好,来自对于技术上的兴趣也罢,我们需要持续来断地学习。没有一直能立于不败的方法,在传说中的武林上也是如此。
对于持续学习来说,通常会有以下的
- 阅读
- 编程
- 写作
有意思的是持续学习有额外的好处便是
- 持续学习可以降低危机感
### 持续阅读
持续阅读对于想提升自己的人来说是必须的。
#### 如何成为武林高手
看过如此多的金庸、古龙小说我们都会发现有那么多的人都在追求武功上的卓越,有的走火入魔了,有的铤而走险杀人放火,暂且不讨论这些。我们简单的以大部分的主角为例,大部分的主角自小就练得一手好武艺,少部分除外,而他们通过会比前辈厉害,只是因为我们看了前人的说,现在也是如此。
**20年前要建一个淘宝怕是没有两三个月十几个是不行的,但是今天要建出原来淘宝的模样,也许一个人单枪匹马一两天就能搞定了,还能上线。**
有意思的是武林小说的武林秘籍少之又少,正常情况下能学到的或许就是教科书上的种种。而现在,如果我们要学习`UX`的话,我们很容易可以从亚马逊上拿到一个书单,又或者是某个博客里面列举出来的:《用户体验要素》、《交互设计沉思录》、《怦然心动——情感化交互设计指南》等等。
我们可以更加方便快捷地获取我们所需要的知识从书上、网上等等。
`阅读更多的书籍是持续学习的基础。`
总会听到有些人在工作之余看了更多的书,在某种情况下来说是有意义的。我们需要不断地去阅读。
### 持续编程
编程算是一个开发人员工作时一直在做的,而对于工作之后来说,到底还会有多少人继续编程就是一个有意思的问题。
对于一个有兴趣的程序员来说,工作和兴趣都是分开的,可以将工作视之为无味的东西,但是休息时间呢?可以用来创造自己觉得有意义的东西,可以用来认识更多志同道合的人,对于不满现状的人更是如此,或许为自己创造了更多的机会。
记得 [ThoughtWorks](http://www.thoughtworks.com) 电话面试的时候,有一项就会问[Github](http://www.github.com) 账号(ps:我的github账号是 [gmszone](https://github.com/gmszone)。如果工作之后编程,不应该是为了工作而编程,应该为了兴趣而编程,或者其他。如果没有时间,是不是因为加班了,对于刚开始养家糊口来说加班是没有办法的,但是如果不是的话,又没时间,是不是……
### 持续写作
对于一个技能人员来说,写作可能不是一件有意思的事,但是也不是一件很难的事,没有必要将大量的文字用文本表示。写给其他技术人员看的,有时候更多的是代码、思路、图。写作对于学习的意思怕是有一大把,写作是最好的输入,也是最好的输出。你需要为你的这篇文章
- 去参考更多的资料
- 更深入的学习
- 更多的时间付出
然而这些都是有价值的,你也许可以从中得到
- 一份工作
- 一些志同道合的朋友
- 一个博客
- 一种习惯
- 还有人生
- 或许还能写书。
对于我来说,更多的是对于`读者`和`SEO`的兴趣,SEO是一门艺术。
#### 持续学习可以降低危机感
记得在大学期间(ps:现在大四实习)阅读了大量的书籍(>400),而之所以会阅读那么多的书籍很大一部分原因来自于危机感。或许对于所谓的重点院校的学生来说,不会有太多的危机感,不幸的是周围的同学也没有危机感。对于一个连二流学校出来的学生来说——`学习才是最大的善`,记得这句话是犹太人说的。所谓的学习不是指课堂上的学习,中国的课堂上的学习大家都懂的。因为什么也没有,什么也不会,所以就有了危机感,在某种意义上来说有点破釜沉舟的感觉。
当我把图书馆想看的计算机书差不多了解了一遍之后,开始到网上继续汲取知识。所明白的是,好的学校的老师会比一般学校的老师好很多。但是在技术方面来说,正常情况下有能力的都不会想去当老师的(ps:这里没有鄙视老师的意思,至少对于我们学校来说是如此),当然不包括某些有理想的。
对于危机感来说真正会暴发的年代是大四,在工作中或许就是试用期,还有一些工作的其他方面。持续学习可以降低危机感,从心理学上来说,`忙碌可以降低焦虑`。