├── 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 | ![Awesome Web Developer](images/tree.gif) 12 | 13 | 持续交付 14 | --- 15 | 16 | - 《敏捷软件开发:原则、模式与实践》 17 | - 《测试驱动开发:实战与模式解析》 18 | - 《实现领域驱动设计》 19 | - 《领域驱动设计:软件核心复杂性应对之道》 20 | - 《敏捷武士:看敏捷高手交付卓越软件》 21 | 22 | 编程技能成长路线 23 | --- 24 | 25 | - 《重构与模式》 26 | - 《代码整洁之道》 27 | - 《重构:改善既有代码的设计》 28 | 29 | ![Grow](images/grow.gif) 30 | 31 | JavaScript读书路线 32 | --- 33 | 34 | - 《编写可维护的JavaScript》 35 | - 《JavaScript设计模式》 36 | - 《EffectiveJavaScript:编写高质量JavaScript代码的68个有效方法》 37 | - 《JavaScript语言精粹》 38 | 39 | 40 | ![JavaScript](images/js.gif) 41 | 42 | JavaScript Application Example 43 | --- 44 | 45 | ![JavaScript App](images/jsapp.gif) 46 | 47 | 48 | Web杂项 49 | --- 50 | 51 | - 《实用负载均衡技术:网站性能优化攻略》 52 | - 《网站性能监测与优化》 53 | - 《构建高性能Web站点》 54 | - 《SEO艺术》 55 | 56 | 架构学习路线 57 | --- 58 | 59 | ![Architecture Roadmap](images/learn.gif) 60 | 61 | - 《架构之美》 62 | - 《面向模式的软件架构》(1,4) 63 | - 《软件框架设计的艺术》 64 | - 《程序员必读之软件架构》 65 | - 《架构实战:软件架构设计的过程》 66 | 67 | 68 | 机器学习读书路线 69 | --- 70 | 71 | ![JavaScript](images/ml.gif) 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 | --------------------------------------------------------------------------------