个人篇:从小工到能手

个人篇:从小工到能手

工作的日子里,每天都会八点多到公司,边点东西边看看Google Analytics,看看昨天博客有多少访问量,吃完了就写写代码刷刷Github。到了九点多,人差不多来齐了——我们不打卡,就开始了上午的工作。中午的时候会趁着午休的小间隙翻译点书,或者写点代码,写会文章。晚上吃完饭,走到家里休息会儿就八点了。看看书,写写代码,一天就过去了。

生活似乎变成了流水帐,不会发生什么特别大的变化,没有特别大的故事。日复一日的单调而又不无聊,周末也是码码字、写写代码、看看书,玩局《文明》、看部电影或者陪女朋友出去吃好吃的就过去了。

上即是下,输出即是输入

在你写过了很多的代码之后,你也许也发现了一些神奇的事情——即使你写了再多代码,你的能力并没有多少提升。人们通常称之称为瓶颈。这不禁让人想起经济危机的时候,有的国家发起了战争,有的国家开始变革,有的则无为而治,每况愈下。有时候我们发现不了我们有更好的选择。

编程同写作,写代码只是在码字

看到一篇文章《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 电话面试的时候,有一项就会问Github 账号(ps:我的github账号是 gmszone。如果工作之后编程,不应该是为了工作而编程,应该为了兴趣而编程,或者其他。如果没有时间,是不是因为加班了,对于刚开始养家糊口来说加班是没有办法的,但是如果不是的话,又没时间,是不是……

持续写作

对于一个技能人员来说,写作可能不是一件有意思的事,但是也不是一件很难的事,没有必要将大量的文字用文本表示。写给其他技术人员看的,有时候更多的是代码、思路、图。写作对于学习的意思怕是有一大把,写作是最好的输入,也是最好的输出。你需要为你的这篇文章

  • 去参考更多的资料
  • 更深入的学习
  • 更多的时间付出

然而这些都是有价值的,你也许可以从中得到

  • 一份工作
  • 一些志同道合的朋友
  • 一个博客
  • 一种习惯
  • 还有人生
  • 或许还能写书。

对于我来说,更多的是对于读者SEO的兴趣,SEO是一门艺术。

持续学习可以降低危机感

记得在大学期间(ps:现在大四实习)阅读了大量的书籍(>400),而之所以会阅读那么多的书籍很大一部分原因来自于危机感。或许对于所谓的重点院校的学生来说,不会有太多的危机感,不幸的是周围的同学也没有危机感。对于一个连二流学校出来的学生来说——学习才是最大的善,记得这句话是犹太人说的。所谓的学习不是指课堂上的学习,中国的课堂上的学习大家都懂的。因为什么也没有,什么也不会,所以就有了危机感,在某种意义上来说有点破釜沉舟的感觉。

当我把图书馆想看的计算机书差不多了解了一遍之后,开始到网上继续汲取知识。所明白的是,好的学校的老师会比一般学校的老师好很多。但是在技术方面来说,正常情况下有能力的都不会想去当老师的(ps:这里没有鄙视老师的意思,至少对于我们学校来说是如此),当然不包括某些有理想的。

对于危机感来说真正会暴发的年代是大四,在工作中或许就是试用期,还有一些工作的其他方面。持续学习可以降低危机感,从心理学上来说,忙碌可以降低焦虑

文章导航