├── LICENSE
├── Makefile
├── README.md
├── books
├── README.md
├── ci.md
└── reworks.md
├── entries
├── README.md
├── artisans.md
├── different.md
└── impact.md
├── grow.dot
├── images
├── grow.gif
├── js.gif
├── jsapp.gif
├── learn.gif
├── ml.gif
└── tree.gif
├── js.dot
├── jsapp.dot
├── learn.dot
├── ml.dot
└── tree.dot
/LICENSE:
--------------------------------------------------------------------------------
1 | CC0 1.0 Universal
2 |
3 | Statement of Purpose
4 |
5 | The laws of most jurisdictions throughout the world automatically confer
6 | exclusive Copyright and Related Rights (defined below) upon the creator and
7 | subsequent owner(s) (each and all, an "owner") of an original work of
8 | authorship and/or a database (each, a "Work").
9 |
10 | Certain owners wish to permanently relinquish those rights to a Work for the
11 | purpose of contributing to a commons of creative, cultural and scientific
12 | works ("Commons") that the public can reliably and without fear of later
13 | claims of infringement build upon, modify, incorporate in other works, reuse
14 | and redistribute as freely as possible in any form whatsoever and for any
15 | purposes, including without limitation commercial purposes. These owners may
16 | contribute to the Commons to promote the ideal of a free culture and the
17 | further production of creative, cultural and scientific works, or to gain
18 | reputation or greater distribution for their Work in part through the use and
19 | efforts of others.
20 |
21 | For these and/or other purposes and motivations, and without any expectation
22 | of additional consideration or compensation, the person associating CC0 with a
23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
25 | and publicly distribute the Work under its terms, with knowledge of his or her
26 | Copyright and Related Rights in the Work and the meaning and intended legal
27 | effect of CC0 on those rights.
28 |
29 | 1. Copyright and Related Rights. A Work made available under CC0 may be
30 | protected by copyright and related or neighboring rights ("Copyright and
31 | Related Rights"). Copyright and Related Rights include, but are not limited
32 | to, the following:
33 |
34 | i. the right to reproduce, adapt, distribute, perform, display, communicate,
35 | and translate a Work;
36 |
37 | ii. moral rights retained by the original author(s) and/or performer(s);
38 |
39 | iii. publicity and privacy rights pertaining to a person's image or likeness
40 | depicted in a Work;
41 |
42 | iv. rights protecting against unfair competition in regards to a Work,
43 | subject to the limitations in paragraph 4(a), below;
44 |
45 | v. rights protecting the extraction, dissemination, use and reuse of data in
46 | a Work;
47 |
48 | vi. database rights (such as those arising under Directive 96/9/EC of the
49 | European Parliament and of the Council of 11 March 1996 on the legal
50 | protection of databases, and under any national implementation thereof,
51 | including any amended or successor version of such directive); and
52 |
53 | vii. other similar, equivalent or corresponding rights throughout the world
54 | based on applicable law or treaty, and any national implementations thereof.
55 |
56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of,
57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
59 | and Related Rights and associated claims and causes of action, whether now
60 | known or unknown (including existing as well as future claims and causes of
61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum
62 | duration provided by applicable law or treaty (including future time
63 | extensions), (iii) in any current or future medium and for any number of
64 | copies, and (iv) for any purpose whatsoever, including without limitation
65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
66 | the Waiver for the benefit of each member of the public at large and to the
67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver
68 | shall not be subject to revocation, rescission, cancellation, termination, or
69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work
70 | by the public as contemplated by Affirmer's express Statement of Purpose.
71 |
72 | 3. Public License Fallback. Should any part of the Waiver for any reason be
73 | judged legally invalid or ineffective under applicable law, then the Waiver
74 | shall be preserved to the maximum extent permitted taking into account
75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
76 | is so judged Affirmer hereby grants to each affected person a royalty-free,
77 | non transferable, non sublicensable, non exclusive, irrevocable and
78 | unconditional license to exercise Affirmer's Copyright and Related Rights in
79 | the Work (i) in all territories worldwide, (ii) for the maximum duration
80 | provided by applicable law or treaty (including future time extensions), (iii)
81 | in any current or future medium and for any number of copies, and (iv) for any
82 | purpose whatsoever, including without limitation commercial, advertising or
83 | promotional purposes (the "License"). The License shall be deemed effective as
84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the
85 | License for any reason be judged legally invalid or ineffective under
86 | applicable law, such partial invalidity or ineffectiveness shall not
87 | invalidate the remainder of the License, and in such case Affirmer hereby
88 | affirms that he or she will not (i) exercise any of his or her remaining
89 | Copyright and Related Rights in the Work or (ii) assert any associated claims
90 | and causes of action with respect to the Work, in either case contrary to
91 | Affirmer's express Statement of Purpose.
92 |
93 | 4. Limitations and Disclaimers.
94 |
95 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
96 | surrendered, licensed or otherwise affected by this document.
97 |
98 | b. Affirmer offers the Work as-is and makes no representations or warranties
99 | of any kind concerning the Work, express, implied, statutory or otherwise,
100 | including without limitation warranties of title, merchantability, fitness
101 | for a particular purpose, non infringement, or the absence of latent or
102 | other defects, accuracy, or the present or absence of errors, whether or not
103 | discoverable, all to the greatest extent permissible under applicable law.
104 |
105 | c. Affirmer disclaims responsibility for clearing rights of other persons
106 | that may apply to the Work or any use thereof, including without limitation
107 | any person's Copyright and Related Rights in the Work. Further, Affirmer
108 | disclaims responsibility for obtaining any necessary consents, permissions
109 | or other rights required for any use of the Work.
110 |
111 | d. Affirmer understands and acknowledges that Creative Commons is not a
112 | party to this document and has no duty or obligation with respect to this
113 | CC0 or use of the Work.
114 |
115 | For more information, please see
116 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | MV = mv
2 |
3 | SOURCE_PATH = ./
4 | OBJECT_PATH = images/
5 |
6 | all:
7 | dot -Tgif tree.dot -o images/tree.gif
8 | dot -Tgif grow.dot -o images/grow.gif
9 | dot -Tgif js.dot -o images/js.gif
10 | dot -Tgif ml.dot -o images/ml.gif
11 | dot -Tgif jsapp.dot -o images/jsapp.gif
12 | dot -Tgif learn.dot -o images/learn.gif
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Web Developer Roadmap
2 | ===
3 |
4 | 成长路线已经汇集到Growth,Github见:[https://github.com/phodal/growth](https://github.com/phodal/growth)
5 |
6 | 阅读书单:[https://github.com/phodal/booktree](https://github.com/phodal/booktree)
7 |
8 | Web Developer 成长路线图
9 | ---
10 |
11 | 
12 |
13 | 持续交付
14 | ---
15 |
16 | - 《敏捷软件开发:原则、模式与实践》
17 | - 《测试驱动开发:实战与模式解析》
18 | - 《实现领域驱动设计》
19 | - 《领域驱动设计:软件核心复杂性应对之道》
20 | - 《敏捷武士:看敏捷高手交付卓越软件》
21 |
22 | 编程技能成长路线
23 | ---
24 |
25 | - 《重构与模式》
26 | - 《代码整洁之道》
27 | - 《重构:改善既有代码的设计》
28 |
29 | 
30 |
31 | JavaScript读书路线
32 | ---
33 |
34 | - 《编写可维护的JavaScript》
35 | - 《JavaScript设计模式》
36 | - 《EffectiveJavaScript:编写高质量JavaScript代码的68个有效方法》
37 | - 《JavaScript语言精粹》
38 |
39 |
40 | 
41 |
42 | JavaScript Application Example
43 | ---
44 |
45 | 
46 |
47 |
48 | Web杂项
49 | ---
50 |
51 | - 《实用负载均衡技术:网站性能优化攻略》
52 | - 《网站性能监测与优化》
53 | - 《构建高性能Web站点》
54 | - 《SEO艺术》
55 |
56 | 架构学习路线
57 | ---
58 |
59 | 
60 |
61 | - 《架构之美》
62 | - 《面向模式的软件架构》(1,4)
63 | - 《软件框架设计的艺术》
64 | - 《程序员必读之软件架构》
65 | - 《架构实战:软件架构设计的过程》
66 |
67 |
68 | 机器学习读书路线
69 | ---
70 |
71 | 
72 |
73 | - 《贝叶斯思维: 统计建模的Python学习法》
74 | - 《利用Python进行数据分析》
75 | - 《Python自然语言处理》
76 | - 《机器学习: 实用案例分析》
77 | - 《驾驭文本:文本的发现、组织和处理》
78 |
79 | License
80 | ---
81 |
82 | © 2015~2016 [Phodal Huang](http://www.phodal.com). This code is distributed under the MIT license. See `LICENSE.txt` in this directory.
83 |
84 | [待我代码编成,娶你为妻可好](http://www.xuntayizhan.com/person/ji-ke-ai-qing-zhi-er-shi-dai-wo-dai-ma-bian-cheng-qu-ni-wei-qi-ke-hao-wan/)
85 |
--------------------------------------------------------------------------------
/books/README.md:
--------------------------------------------------------------------------------
1 | #书单推荐
2 |
3 | [《REWORK》](reworks.md)
4 | [《持续交付:发布可靠软件的系统方法》](ci.md)
--------------------------------------------------------------------------------
/books/ci.md:
--------------------------------------------------------------------------------
1 | ###《持续交付:发布可靠软件的系统方法》
2 |
3 | > 传统软件交付(一次交付)与Web,乃至现在的软件交付很大的一个不同点在于——持续交付。
4 |
5 | 在这本书里面介绍了如何构建一座大桥——书的封面。作为一本Jolt大奖的作品,里面详细的说明
6 |
7 | - 如何持续的交付软件
8 | - 如何发布可靠软件的系统方法
9 |
10 | 书中可以详细了解如何交付一个软件:
11 |
12 | 从频繁提交代码、自动化测试(保证测试覆盖) -> 运行本地测试 -> 服务器运行测试 -> 部署到测试环境 -> 交付管理
13 |
14 | 而这些都应该是自动的,所以你需要知道的东西有: 如何编写测试(Junit、Qunit、BDD、TDD..)、自动化测试(Selenium..)、版本管理(git)、配置(feature toggle)、依赖管理、部署脚本等等。
15 |
--------------------------------------------------------------------------------
/books/reworks.md:
--------------------------------------------------------------------------------
1 | #《REWORK》
2 |
3 | 亚马逊购买: [重来:更为简单有效的商业思维](http://www.amazon.cn/gp/product/B0048EKQS0/ref=as_li_ss_tl?ie=UTF8&camp=536&creative=3132&creativeASIN=B0048EKQS0&linkCode=as2&tag=xunta-23)
4 |
5 |
6 | > 中文:《重来:更为简单有效的商业思维 》
7 |
8 | - 不要过早关注细节
9 | - 卖掉副产品
10 | - 音乐就在你的指尖流淌
11 | - 培养自己的拥趸
12 | - 可笑的求职简历
13 | - 速度改变一切
14 |
15 | ##思考
16 |
17 | 1. 一开始我只需要这样一份个人简历,用于可以给自己找份工作,同时又可以清晰表达自己接近于设计师的思想。Photoshop制作起来的足够美观,但是和word一样体现不出我们是一个程序员,一个有思想的思考者,所以转而使用Latex。Latex对于word和Photoshop的优势不言而喻,也当然其中有着些缺点。不过,相比之下,会有着更好的可读性。
18 |
19 | 2. 这个是在书在有的一个有趣的原则,也算是我在找工作中优先考虑的一个准则。这个的意义不在于是否熬夜,而在于是否有一个合理的时间安排。这个原则不仅适用于比赛中,也适合在日常生活中,当我们的工作遇到足够的压力的时候,除非我们的工作是不需要脑力的,那么我们就可以那样干下去。当我们需要用足够的脑力去思考的时候,及时的休息就显得有必要。如果放在心理学上的话,也就是有时候潜意识可以帮助我们解决问题。
20 |
21 | 3. 现在该是去做点什么的时候了,如果你和我一样只是一所普通二本的学校,或者和我们一样是刚升二本不久的学校。你还在抱怨学校不好的时候,其他人已经做了更多的事情了。因为身边有很多这样的人,所以如果我们一开始就与众不同的时候,那么现在更是着手做点什么的时候。
22 |
23 | 4. 作为一个普通二本学校的学生对研究生之类不是很了解,但是经常发现有些研究生的能力弱爆了。适合于“学习”,所谓的学习说的是课堂上的学习,也就是能考个好成绩的那种。总有些人只会学习,有的不只会学习。学习是一种好习惯,只是不要将这种学习放置于课堂之上的学习。
24 |
25 | 5. 一个优秀的写手,其优点并不仅仅在于写作,文法清晰代表思路明晰。优秀的写手都懂得如何与人沟通,他们使事情变得易于理解,他们善于换位思考,懂得抓重点、砍枝节,这些都是合格的应聘者身上应具备的特点。 想想自己算是后面说的那一部分,至于前面那部分——一个优秀的写手,就有待商榷。写的人越来越想,阅读的人越来越多的这个信息冗余的年代,会写就代表会思考??
26 |
27 | 6. 一个好的工具确实有助于编程,但是他只会给我们带来的是帮助,最后的代码风格,我们写出来的代码还是和我们的水平保持着一致的。什么是好的工具,这个说法就有很多了,但是有时候我们往往沉迷于事物的表面,有些时候Vim会比Visual Studio强大,当你只需要修改的是一个配置文件的时候,简单且足够快捷,在我们还未用VS打开的时候,我们已经用Vim做完这个活了。
28 |
29 |
30 | ##相关文章
31 |
32 | - [卖掉代码的副产品——个人简历引发的思考](http://www.phodal.com/blog/Think-of-REWORK%20Sell%20your%20by-products%20/)
33 | - [该睡觉时就睡觉——源自两个比赛的经历](http://www.phodal.com/blog/rework-to-rework/)
34 | - [着手做点什么](http://www.phodal.com/blog//think-of-rework-Start%2520making%2520something/)
35 | - [可笑的求职简历——可笑的求职经历](http://www.phodal.com/blog/rework-Resume%20Are%20Ridiculous/)
36 | - [招聘笔杆子——成为笔杆子](http://www.phodal.com/blog/think-of-rework-be-a-writer/)
37 | - [发出你的心声——癌症不是病](http://www.phodal.com/blog/think-of-rework-7-Sound-Like-You/)
38 | - [一夜成名只是传说——创业一步步来](http://www.phodal.com/blog/think-of-rework-The%2520myth%2520of%2520the%2520overnight%2520sensation/)
39 | - [音乐应在你的指尖流淌——工具和代码无关](http://www.phodal.com/blog/think-of-rework-4-best-tool/)
40 |
--------------------------------------------------------------------------------
/entries/README.md:
--------------------------------------------------------------------------------
1 | #手工艺人
2 |
3 | > 文章集
4 |
5 | [程序员: 手工艺人](artisans.md)
6 |
7 | [程序员: 如何提高影响力](impact.md)
8 |
9 | [程序员差别的本质](different.md)
10 |
--------------------------------------------------------------------------------
/entries/artisans.md:
--------------------------------------------------------------------------------
1 | #手工艺人(TBD)
2 |
3 | 有一天机器人也许会替换掉我们绝大多数的工作[^1],在现在可见的光景里,机器人会帮我们做那些繁琐、重复的事情。但是,现在机器人还轮不到给我们创作。虽然,机器人已经能简单地写新闻,而在正常情况下我们更多关注的是标题。这只能说,我们读取信息的方式已经变了。
4 |
5 | 有一天,我们的机器也会帮我们写大量的代码。但是,那还谈不上创作,有意识的机器人会意识到这个世界需要平等[^2],那时我们就不会关心这些了。言归正传,让我们谈谈程序员是什么?
6 |
7 | ##工程师文化绝对是另外一个扯淡
8 |
9 | 我不知道这个世界有多少公司在鼓吹"工程师文化"。
10 |
11 | ##手工艺
12 |
13 | > 手工艺是指以手工劳动进行制作的具有独特艺术风格的工艺美术。
14 |
15 |
16 | ##手工艺人
17 |
18 | > 手工艺人(英语:Artisan,或称为“匠人”)是指拥有某项熟练技巧,从事传统手工艺的工作者。
19 |
20 | [^1]: 如果有一天,机器人替换我们所有的工作,那么我们就来到了黑客帝国。
21 | [^2]: 机器人与人类间的战争。
22 |
--------------------------------------------------------------------------------
/entries/different.md:
--------------------------------------------------------------------------------
1 | #程序员差别的本质
2 |
3 | 当我开始在阅读《技术的本质》的时候,我就开始在思考这样一个问题,我们在使用技术还是工具。
4 |
5 | ![技术的本质][1]
6 |
7 | ##技术与工具
8 |
9 | 在某百科上说
10 |
11 | > 一项技术是关于某一领域有效的科学(理论和研究方法)的全部,以及在该领域为实现公共或个体目标而解决设计问题的规则的全部。
12 |
13 | 对于技术不同的人的理解可能是不同的,和上图中的使用工具类似的是,和工具一样,技术也在不断地成长和进行。网站的成长史似乎可以简化为下面的过程,可能还会有ASP.NE等等,只是因为我接触得比较少。
14 |
15 | - 静态的HTML
16 | - CGI和Perl脚本
17 | - PHP
18 | - J2EE
19 | - Django
20 | - Ruby on Rails
21 | - Nodejs
22 |
23 | 实际上这是技术的一种演变,然而做为最核心的东西HTML似乎还是那样的。作为新技术产生的核心——HTML也在不断也进化中。然而,没有想象中的那么明显,看上去像是不变的,只是技术在不断地向前前进。对于我们来说这些都是工具,有时我们在用工具创造中新的工具,好比是技术本身,通过结合一些技术创建出新的技术。同进化史一般,我们没有办法从无到有创造出一个新的东西,没有上帝。
24 |
25 | 而作为一个普通的程序员,我们所做的只是在使用工具,从芯片到语言,从语言到框架,从框架到实现。
26 |
27 | ##编程的秘密
28 |
29 | 每个人在技术的成长过程中都有不同的经历,对于我来说现在的总结大概是如此(ps:有兴趣可以参考[过去的那些语言](http://www.phodal.com/blog/past-computer-language/))。
30 |
31 | - 当我开始学习第一种语言``LOGO``时,我还小觉得很神奇,至少对于计算机还是保持神秘的。
32 | - 当我开始学习**C++**时,由于作者对于其优雅的宣称,我觉得**C++**确实很优雅、
33 | - 当我开始学习``Python``的时候,我发现**简单**才是我所要追求的。
34 | - 当我开始学习**Ruby On Rails**的时候,我发现生成可以很强大,但是因为强大,所以没有意思。
35 | - 当我开始学习``Django``的时候,我发现这才是我想要的订制。
36 | - 当我开始写``博客``的时候,我觉得比于**HTML**来说,**Markdown**才是适合我的。
37 | - 当我开始写下此文时,我开始觉得我**应该试着去做点什么**。
38 |
39 | 于是我又回到了原点,开始迷茫我想要的是什么?当我实习半年以后,我学到了更多的东西([实习半年后:正在变得高效](http://www.phodal.com/blog/thoughtworks-intern-how-to-be-a-zen-programmer/)),而我开始的时候我才在偶然的一次机会中才了解到,我们用的都是工具。只是,我们可以用工具创造出工具。
40 |
41 | 编程只是用来解决问题的工具,优美与否对于解决问题的帮助,取决于是一次性问题还是长期问题。编程的核心是解决问题,正如SEO的核心是内容(详情见:[每个程序员必知之SEO](http://www.phodal.com/blog/every-programmer-should-know-how-seo/))。于是,
42 |
43 | > 我们把一个又一个的迷团解开了,剩下百无聊赖。
44 |
45 | 当我们在讨论生产率的时候,得知高级语言会比低级语言来得有生产率,但是效率可能会因人而异。高级语言来自于低级语言,这些似乎没有那么重要。人们熟悉了不同的IDE、不同的语言,相比于那些入门者来说,谙熟语言的人只是更加熟练罢了。同《卖油翁》的``我亦无他,唯手熟尔``般,对于有些东西只是因为用多了,然后熟悉罢了。事实真的是这样么?如果我们每天写的是**1+1=2**,我们会知道**1+2=3**么。
46 |
47 | > 那么所谓的优秀的程序员和普通的程序员的差别在哪?
48 |
49 | ##技术的成长
50 |
51 | 这里的技术指的不是个人在技术上的成长,而是技术自身的成长。
52 |
53 | > 技术在某种程度上一定是来自此前已有技术的新的组合。
54 |
55 | 一个优秀的框架、软件、系统的产生必然会基于其他的已有技术或者框架,如:
56 |
57 | Ubuntu GNU/Linux
58 |
59 | - 内核是Linux
60 | - 编译器GCC
61 | - 库GLIBC等等
62 | - 脚本语言Python等
63 | - Bash
64 | - 等
65 |
66 | 而这其中的一些小命令如ls、cd、wget也是这个系统的组成部分之一,我们无法找到一个不依赖于其他系统的软件。如果你自己动手编译过Linux,或者你会更有体会一个GNU/Linux系统需要什么。从一个库来说它是基于其他的基本库,如C标准库,而从C标准库的编译又依赖于编译器,这些都循环中前进着。
67 |
68 | gcc4.7编译出了gcc4.8
69 | gcc4.6编译出了gcc4.7
70 | gcc4.5编译出了gcc4.6
71 | 等等
72 |
73 | 这是对一个可以自身编译自身的编译器而言,我们无法忽视的是技术背后有许多细节。巨人是站在巨人的肩膀上,过去我们可能一群工程师一个月开发出来的软件,在今天可能可以由一个工程师一天开发出来。因为我们可以基于前人的经验及教训,而这也是所谓的高生产率的程序员和一般的程序员间的区别。
74 |
75 | 自然而然的优秀的程序员吸收了其他人的经验以及教训,换在今天来说,你今天所在的位置并不是因为你比别人聪明,或者是别人比你聪明,只是因为你**吸收了更多的知识及经验**。当然,教育不公平不应该这边的讨论范围。
76 |
77 |
78 | ##程序员的差别
79 |
80 | 回到开始的话题,我们使用的如图所示的工具的话,你会选择
81 |
82 | - 石头
83 | - 矛
84 | - 电钻
85 | - 电脑
86 |
87 | 中的哪一个,这是一个有趣的话题,正如。。
88 |
89 | - 汇编
90 | - C语言
91 | - Python
92 | - Django
93 |
94 | 这个问题没有一个真正的答案取决于你所做的事,而问题的关键在于你知道的只是``汇编``,而不知道有其他东西的存在。这里的意思不是让你把上面的都学了,而是对于我们所处的领域我们应该有一个宽泛的了解。了解并不一定是亲身实践,如上一标题所说,我们只需要去**吸收别人的知识及经验**,一个有趣的答案便是**从别人身上学习会更快**。只是在那之前,我们需要去学会学习,因为你可能处在某个位置,没有其他人做过。
95 |
96 | 而对于标题的答案来说应该是:
97 |
98 | > 优秀的程序员不仅仅只是使用工具。
99 |
100 | [1]: http://www.phodal.com/static/media/uploads/about_tools.jpg
--------------------------------------------------------------------------------
/entries/impact.md:
--------------------------------------------------------------------------------
1 | > 影响力,让梦想离你更近。
2 |
3 | 试想一下,有一天你开发了一个新的语言。它比现有的某某主流软件,运行效率将提高了50%,开发效率提高了100%。接着,你在github上release了0.1,但是由于出现某个开发难题,你需要别人的帮助。而这时,你找不到有效的途径去找到那些真正会用它的人。接着出现了一个新的语言可以达到一样的效果,而这个项目就死于腹中,我记得[mruby](https://github.com/mruby/mruby)刚刚只写了一个``README.md``的时候,就获得了上千个star。
4 |
5 | #[如何提高影响力,为自己代言](http://www.phodal.com/blog/how-to-improve-impact/)
6 |
7 | ![impact][1]
8 |
9 | 每个人都可以是一个品牌,对于一个程序员来说,我们的ID就是我们的品牌。而构成品牌的有多个要素:
10 |
11 | - 博客
12 | - Github
13 | - Weibo(or Twitter)
14 | - StackOverflow(or SegmentFault, Zhihu)
15 |
16 | 等等。
17 |
18 | ###搭建一个跨平台的平台
19 |
20 | > 连接各个平台的核心是我们的ID。
21 |
22 | 第一个平台指的是不同的网站,如我们的博客、Github、知乎等等,第二个平台指的是我们的影响力。
23 |
24 | So,在开始的时候我们需要有一个统一的ID,来标识我们的身份:我是谁,你在xx网站上看到的那个xx就是我。刚开始的时候,我在CSDN、Github上的ID(gmszone)和我的博客的域名(Phodal)是不一样的,因为当时的域名(gmszone.com)握在别人的手上,于是我便想办法将两个ID改了过来(ps: github提供迁移)。后来,Phodal就成了我的发声平台:
25 |
26 | - [http://www.phodal.com/](http://www.phodal.com/)
27 | - [http://weibo.com/phodal](http://weibo.com/phodal)
28 | - [http://www.zhihu.com/people/phodal](http://www.zhihu.com/people/phodal)
29 | - [http://github.com/phodal](http://github.com/phodal)
30 | - [http://segmentfault.com/u/phodal](http://segmentfault.com/u/phodal)
31 | - [http://www.douban.com/people/phodal/](http://www.douban.com/people/phodal/)
32 | - ...
33 |
34 | 于是,这时就可以开始使用跨平台的平台了。
35 |
36 | ##构建平台
37 |
38 | > 小博客也会有成长的一天。
39 |
40 | 对于像我这样一个个默默无闻地人来说,用户可能会有下面几种不同的方法来知道我:
41 |
42 | ![live example][2]
43 |
44 | - 用户 -> 搜索{谷歌,百度,必应} -> 博客 -> {Weibo,Github}
45 | - 用户 -> 微博 -> {Github, 博客}
46 | - 用户 -> Github -> 博客
47 | - 用户 -> {知乎, SegmentFault} -> {Weibo,Github,博客}
48 |
49 | ###博客
50 |
51 | 刚开始在CSDN上写博客的时候,一开始的访问量很少,慢慢地就多了。有一天发现这样的博客不是自己想要的,于是建了自己的博客,一开始的流量是0。像CSDN这样的网站推荐一些文章到首页,如果能这样便是幸运的。在经历大半年的几乎零流量之后,开始慢慢增长了。到了今天,一共有470篇博客(有一些是出于测试SEO目的写成多篇文章)。一天的PageView大平均有五百左右,主要来源是搜索引擎,百度200左右,谷歌50左右,必应10左右。
52 |
53 | ####用户故事
54 |
55 | 对于一个程序员来说,必须在某种程度上熟悉怎么搜索自己想要的内容,即**关键字**。如我们想要知道如何在OpenWRT OS上用Python,那么我们会搜索``OpenWRT Python``。于是,这个时候我们博客的标题带有OpenWRT Python,那么我们可能就中奖了。
56 |
57 | 故事,告诉我们**好的标题很重要**。**重复这个主题**也很重要,会有一个更好的排名。至于,如何更好地排到第一,就是SEO(搜索引擎优化)的话题了。
58 |
59 | ####笔记
60 |
61 | 一开始要写一个博客是比较难的,没有流量、没有评论。所以,一个好的切入点是: ``笔记``。最好是那种网上很少的内容的笔记,虽说很多人不愿意去做这个,但是这是一个很好的方向。
62 |
63 | 一个技术博客里面的内容应该是两种类型:
64 |
65 | - 技术
66 | - 理论
67 |
68 | 技术型可以带来流量,理论型的可以带来评论。理想的话,两者会相辅相成的,但是在我们刚处于学习期的时候。那么那些Note,可以给我们带来一些流量,也带来一些信心。如果,只是想着一开始我就只写一些长篇大论的话,那么只是就是拿了80%的时间做了20%的事。
69 |
70 | 以用户搜索的过程来说,用户是``有目的的进行搜索``。换句话说,在我们日常工作的时候,我们只关心和我们工作相关的内容。而在受众来,正常情况下,技术型的博文、笔记可以带来流量的主要原因是: ``大部分人都是初学者``。
71 |
72 | ![70 percent][3]
73 |
74 | 理论性的内容,更适合更高级别的开发者,这样的受众较少。
75 |
76 | ####上头条
77 |
78 | 而在今天有其他的平台,可以借用来推销自己的:
79 |
80 | - 开发者头条
81 | - 极客头条
82 | - [稀土掘金](http://gold.xitu.io/)
83 | - ...
84 |
85 | 网上的IT新闻、博客都是互相Copy,对于一些软文(如本文)来说。这也是期触及率高的原因,通常来说这样可以带来大量的流量。记得在原文中留个原文链接,附张图片(自己博客的图片)来保证:Google把原文指向你的博客,而不是免费为别人打工。
86 |
87 | ####提升
88 |
89 | 除了是一个很好的展示平台,也是一个很好的测试平台。作为一个Web Developer,测试过
90 |
91 | - Nginx Log分析(~600M)
92 | - New Relic
93 | - SEO
94 | - AutoComplete
95 | - 重构网站
96 | - ...
97 |
98 | ###Github
99 |
100 | 将自己尝试的不同技术栈的内容丢到Github上,加上适当地文档、博客,就变成了一个很好的Demo。然而,不止于此,越来越多地人开始在Github寻找人才,因为他们乐于付出,也乐于分离。曾经因为Github上的项目:
101 |
102 | - 申请WebStorm开源License
103 | - Review英文版书籍
104 | - ...(有些不方便透露)
105 |
106 | 而在Github上的项目其实不仅仅只有一些库:
107 |
108 | - 库和框架: 和``jQuery``
109 | - 系统: 如``Linux``、``hhvm``、``docker``
110 | - 配置集: 如``dotfiles``
111 | - 辅助工具: 如``oh-my-zsh``
112 | - 工具: 如``Homewbrew``和``Bower``
113 | - 资料收集: 如``free programming books``,``You-Dont-Know-JS``,``Font-Awesome``
114 | - 其他:简历如``Resume``,``博客``
115 |
116 | 所以,可以尝试不同的切入点使用Github。
117 |
118 | 在某种程度上来说,一个人在Github上的粉丝数量会帮助他的项目在初期获取更多的人气。这样就有助于其下一步开展项目,当然也会在某种程度上更好看Blabla。
119 |
120 | ####提升
121 |
122 | 之前写过一篇[《如何通过github提升自己》](http://www.phodal.com/blog/use-github-grow-self/)中说到了一些细节,大致上还是那些东西,Github与Trello、Travis-CI、Coveralls、SauceLabs、Code Climate,配合得很好。已经可以接近于我们在一些项目上用到的功能,因此拿他们搭建一个好的开发环境完全不是问题。
123 |
124 | - Travis CI:支持Node.js、Python、Ruby、PHP等二十几种语言,也支持MySQL、PostgreSQL、MongoDB、Redis等数据库。
125 | - Coveralls:可以用来查看代码的测试覆盖率。
126 | - SauceLabs:可以用来跑Selenium功能测试等等
127 | - Code Climate:查看代码的坏味道。
128 |
129 | 在我们试着去保证测试覆盖率、代码质量等等的时候,我们就可以学到一些知识,如使用不同语言测试框架的Mock、Stub、FakeServer等等。
130 |
131 | ###扩大影响力
132 |
133 | 上面的两部分属于打造平台部分,而如Weibo、知乎等则属于扩大影响力。
134 |
135 | 在某种时候,博客、Github都更像是个人的平台。如Weibo、知乎、SegmentFault、CSDN等等的开发者社区,也可以为自己的博客、Github带来流量,而这一些都是互相促进的。如果我们在其中的一个网站上表现得很好的话,那么在另外一个网站上我们也很容易聚集同样的粉丝。如,我最常用的一个作法是: 将自己写得相对比较好的一些博客复制到CSDN、SegemntFault、图灵社区等等,并适当地推到CSDN首页、开发者头条等等。
136 |
137 | 由于写作的开发人员是有限的,所以通常在某某头条上的推荐,会成为某博客园上的新闻,接着会有成群接队的小站开始Copy。同时,这些文章又会推到他们的微博上,接着还可能是微信平台。毕竟,对于大部分的网络来说,大部分的流量是流向他们的网站的,所以他们不太会在乎其中的外链等等。故而,通常来说: 不是某某东西突然火了,而是突然没有别的新闻了。通常来说一个好的作法是,试着将你的博客分享到微博上,然后@那些愿意帮你分享的平台。这样,你可以有更多的阅读、更多的粉丝,当然好的内容是前提。
138 |
139 | 其中还有若干其它的好处:
140 |
141 | - 更大的曝光率,会带来更多的机会
142 | - 更有机会参与一些未公开互联网产品的试用
143 | - 各种精美小礼物
144 | - 翻译、出版机会
145 |
146 | ##TODO
147 |
148 | 只需要简单地几步就可以开始提高我们的影响力:
149 |
150 | - 在不同的网站上使用一个ID
151 | - 创建一个博客
152 | - 开始创作内容、提交代码、分享
153 | - 持续Impact
154 |
155 |
156 | [1]: http://www.phodal.com/static/media/uploads/impact.jpg
157 | [2]: http://www.phodal.com/static/media/uploads/live.jpg
158 | [3]: http://www.phodal.com/static/media/uploads/70.jpg
159 |
--------------------------------------------------------------------------------
/grow.dot:
--------------------------------------------------------------------------------
1 | digraph tree
2 | {
3 | nodesep=0.5;
4 | charset="UTF-8";
5 | fixedsize=true;
6 | node [style="rounded,filled", width=0, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
7 |
8 | "《软件测试的艺术》" -> "《测试驱动开发:实战与模式解析》" ->"《重构与模式》"
9 | "《代码整洁之道》" -> "《重构:改善既有代码的设计》"
10 | "《重构:改善既有代码的设计》" -> "《重构与模式》"
11 | "《Head First设计模式》" -> "《设计模式解析》" -> "《重构与模式》" -> "《设计模式》"
12 | "《设计模式解析》" -> "《设计模式》" -> "《重构与模式》"
13 | "《建筑的永恒之道》" -> "《设计模式》"
14 | }
15 |
--------------------------------------------------------------------------------
/images/grow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/grow.gif
--------------------------------------------------------------------------------
/images/js.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/js.gif
--------------------------------------------------------------------------------
/images/jsapp.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/jsapp.gif
--------------------------------------------------------------------------------
/images/learn.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/learn.gif
--------------------------------------------------------------------------------
/images/ml.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/ml.gif
--------------------------------------------------------------------------------
/images/tree.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/phodal/developer/45a5f315e8f53c587514379af5bcfb264e2be0ba/images/tree.gif
--------------------------------------------------------------------------------
/js.dot:
--------------------------------------------------------------------------------
1 | digraph tree
2 | {
3 | nodesep=0.5;
4 | charset="UTF-8";
5 | rankdir=LR;
6 | fixedsize=true;
7 | node [style="rounded,filled", width=0, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
8 |
9 | "《JavaScript高级程序设计》" -> "《编写可维护的JavaScript》"
10 | "《编写可维护的JavaScript》" -> "《JavaScript设计模式》"
11 | "《EffectiveJavaScript:编写高质量JavaScript代码的68个有效方法》" -> "《JavaScript设计模式》"
12 | "《JavaScript语言精粹》" -> "《JavaScript设计模式》" -> "Web Application"
13 | "《单页Web应用:JavaScript从前端到后端》" -> "《Backbone.js开发秘笈》" -> "Web Application"
14 | "《JavaScript DOM编程艺术》" -> "《精通jQuery》" -> "Web Application"
15 | "《JavaScript DOM编程艺术》" -> "《JavaScript框架设计》"
16 | "《编写可维护的JavaScript》" -> "《JavaScript框架设计》"
17 | "《Node.js实战》" -> "《RESTful Web APIs》" -> "Web Application"
18 | "《MongoDB权威指南》" -> "《NoSQL精粹》" -> "Web Application"
19 | "《MongoDB权威指南》" -> "《RESTful Web APIs》" -> "《Building Microservices》"
20 | }
21 |
--------------------------------------------------------------------------------
/jsapp.dot:
--------------------------------------------------------------------------------
1 | digraph tree
2 | {
3 | nodesep=0.5;
4 | charset="UTF-8";
5 | rankdir=LR;
6 | fixedsize=true;
7 | node [style="rounded,filled", width=0, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
8 |
9 | "Backbone" -> "Front-End" -> "RESTful API"
10 | "jQuery" -> "Front-End"
11 | "RequireJS" -> "Front-End"
12 | "Node.js" -> "RESTify" -> "RESTful API"
13 | "DataBase" -> "RESTify"
14 | "RESTful API" -> "Front-End"
15 | }
16 |
--------------------------------------------------------------------------------
/learn.dot:
--------------------------------------------------------------------------------
1 | digraph G {
2 | node[shape=record]
3 | fixedsize=true;
4 | compound=true;
5 |
6 | store4:f0 -> store3:f0 -> store2:f0 -> store1:f0;
7 |
8 | store4 [label=" 服务、组件 | SOA原则与模式 | 《微服务》《领域驱动设计》"; shape=Mrecord];
9 | store3 [label=" 模块、包 | 模块化、包原则与模式 | 《Java应用架构设计》《面向服务的软件架构》"; shape=Mrecord];
10 | store2 [label=" 类 | SOLID与设计模式 | 《HeadFirst 设计模式》《重构与模式》《设计模式》"; shape=Mrecord];
11 | store1 [label=" 代码 | 代码质量 | 《代码整洁之道》《重构》"; shape=Mrecord];
12 | }
--------------------------------------------------------------------------------
/ml.dot:
--------------------------------------------------------------------------------
1 | digraph tree
2 | {
3 | nodesep=0.5;
4 | charset="UTF-8";
5 | rankdir=LR;
6 | fixedsize=true;
7 | node [style="rounded,filled", width=0, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
8 |
9 | subgraph cluster_0 {
10 | "《可视化数据》"
11 | }
12 |
13 | subgraph cluster_1 {
14 | "《Pig编程指南》"
15 | "《Hadoop权威指南》"
16 | }
17 |
18 | subgraph cluster_2 {
19 | "《视觉繁美》"
20 | "《可视化之美》"
21 | "《数据可视化之美》"
22 | }
23 |
24 | subgraph cluster_3 {
25 | "《利用Python进行数据分析》"
26 | "《贝叶斯思维: 统计建模的Python学习法》"
27 | "《集体智慧编程》"
28 | }
29 |
30 | "《数据可视化实战:使用D3设计交互式图表》" -> "《视觉繁美》" [lhead=cluster_2]
31 | "《可视化数据》" -> "《可视化之美》"[ltail=cluster0,lhead=cluster1]
32 | "《贝叶斯思维: 统计建模的Python学习法》" -> "《可视化数据》"
33 | "《Hadoop权威指南》"-> "《可视化数据》"
34 | "《Pig编程指南》" -> "《可视化数据》"
35 | "《Pig编程指南》" -> "《利用Python进行数据分析》"
36 | "《利用Python进行数据分析》" -> "《推荐系统》"
37 | "《贝叶斯思维: 统计建模的Python学习法》" -> "《推荐系统》"
38 | "《集体智慧编程》" -> "《推荐系统》"
39 | }
--------------------------------------------------------------------------------
/tree.dot:
--------------------------------------------------------------------------------
1 | digraph tree
2 | {
3 | nodesep=0.5;
4 | charset="UTF-8";
5 | rankdir=LR;
6 | fixedsize=true;
7 | compound=true;
8 | node [style="rounded,filled", width=0, height=0, shape=box, fillcolor="#E5E5E5", concentrate=true]
9 |
10 | subgraph cluster_2 {
11 | label = "网站前端";
12 | "JavaScript"
13 | "HTML"
14 | "CSS"
15 | }
16 |
17 | subgraph cluster_0 {
18 | label = "编程语言";
19 | "Node.js"
20 | "HTML"
21 | "SQL/NoSQL"
22 | "Java"
23 | "C#"
24 | "Ruby"
25 | "Python"
26 | "Scala"
27 | "CSS"
28 | }
29 |
30 | "Java" -> "编程语言"[ltail=cluster_0]
31 |
32 | subgraph cluster_1 {
33 | label = "测试";
34 | "Mock"
35 | "Stub"
36 | "Unit"
37 | }
38 |
39 | "Mock" -> "测试"
40 | "Stub" -> "测试"
41 | "Unit" -> "测试"
42 |
43 | "编程语言" -> "CGI"
44 | "CGI" -> "Web Server-Side"
45 |
46 | "JavaScript" -> "Web Front-End Design"
47 | "HTML" -> "Web Front-End Design"
48 | "CSS" -> "Web Front-End Design"
49 |
50 | "Graphic Design" -> "Prototype UI" -> "Product Prototype"
51 | "User Discovery" -> "Prototype Discovery" -> "Product Prototype"
52 | "Web Front-End Design" -> "Web Development"
53 | "浏览器兼容性" -> "Web Front-End"
54 | "Product Prototype" -> "Web Development"
55 | "SEM" -> "Web Development"
56 |
57 | subgraph cluster_8 {
58 | "Web Server-Side"
59 | "Web Front-End"
60 | }
61 |
62 | "CSS" -> "CSS Tools"
63 | "Node.js" -> "Web Server-Side"[ltail=cluster_0]
64 | "JavaScript" -> "JS库/框架使用"
65 |
66 | "SQL/NoSQL" -> "Database" -> "DBMS" -> "Web Server-Side"
67 |
68 | "APIs" -> "Web Server-Side"
69 | "APIs" -> "Web Front-End"
70 | "Web Server-Side" -> "Web Development"
71 | "Web Front-End" -> "Web Development"
72 |
73 |
74 | "编程语言" -> "设计模式" -> "领域模式"
75 | "编程语言" -> "测试"
76 | "测试" -> "TDD" -> "自动化测试"
77 | "测试" -> "重构"
78 | "测试" -> "自动化测试" -> "Web Development"
79 | "编程语言" -> "Clean Code"
80 | "Clean Code" -> "重构"
81 | "重构" -> "TDD"
82 | "分析" -> "SEO" -> "SEM"
83 | "编程语言" -> "程序语言设计" -> "DSL"
84 | "元编程" -> "DSL"
85 | "DSL" -> "领域模式"
86 |
87 | subgraph cluster_3 {
88 | label = "IDE";
89 | "Eclipse"
90 | "RubyMine"
91 | "Intellij IDEA"
92 | "PyCharm"
93 | "WebStorm"
94 | "Android Studio"
95 | }
96 |
97 | subgraph cluster_4 {
98 | "IDE"
99 | "Editor"
100 | }
101 |
102 | subgraph cluster_5 {
103 | label = "God";
104 | "Vim"
105 | "Emacs"
106 | }
107 |
108 | "Vim" -> "Editor"
109 | "Emacs" -> "Editor"
110 |
111 | "RubyMine" -> "IDE" [ltail=cluster_3 lhead=cluster_4];
112 |
113 |
114 | "Editor" -> "Tools"
115 | "IDE ShortCut" -> "Tools"
116 | "IDE" -> "Tools"
117 | "Debuger" -> "Tools"
118 | "Compiler" -> "Tools"
119 |
120 | subgraph cluster_6 {
121 | label = "构建工具";
122 | "Gradle"
123 | "Rake"
124 | "Buildr"
125 | "Make"
126 | "Scons"
127 | }
128 |
129 | subgraph cluster_7 {
130 | label = "版本工具";
131 | "SVN"
132 | "git"
133 | }
134 | "apk、pip、npm、gem、maven" -> "包管理" -> "部署"
135 | "SVN" -> "版本管理"
136 | "git" -> "版本管理" -> "构建"
137 | "Bamboo" -> "CI" -> "包发布"
138 | "Gradle" -> "构建工具"[ltail=cluster_6]
139 | "构建工具" -> "构建"
140 | "构建" -> "包发布"
141 | "部署" -> "自动部署"
142 | "包管理" -> "包发布" -> "自动部署"
143 | "CLI" -> "部署"
144 | "脚本语言(Bash,Perl,Ruby,Python etc)" -> "部署"
145 | "脚本语言(Bash,Perl,Ruby,Python etc)" -> "构建"
146 | "*nix" -> "软件编译" -> "部署"
147 | "构建" -> "软件编译"
148 |
149 | "Web Development" -> "Mastery Web Developer"
150 | "自动部署" -> "Mastery Web Developer"
151 | "领域模式" -> "Mastery Web Developer"
152 | "领域知识" -> "Mastery Web Developer"
153 | "Tools" -> "Mastery Web Developer"
154 |
155 | }
156 |
--------------------------------------------------------------------------------