# 介绍

这些年在微博上回答和总结了不少关于程序员工作方面的问题，也获得了一些朋友的认可。随着总结内容的不断增多，有个疑惑在我心中逐渐增长：为什么这些事情之前没人告诉我？

后来我发现，虽然每个具体问题最终都能找到完整的、可参考的资料，但是这些问题并不能简单的归类为一个具体的类别，而是在程序员职业发展的过程中逐渐显现的，包含了各种类型的，难以被简单总结和归纳的一系列问题的合集。

在程序员成长过程中，每个阶段都会被赋予不同的角色，这些角色之间虽然有联系，也会有区别。例如，一个开发能力非常强的程序员，在他负责一个大型项目的时候，一部分精力实际上变为了管理者的角色；或者，当他去推广某个组件时，实际的角色是布道师。

大多数书籍或者文章都会专注在某个角色（比如“java开发者”）之上，而当角色发生转变，尤其是隐性转变的时候，就会发现过往的很多知识和技巧突然就不再适用了。程序员很容易发现不同编程语言和技术栈之间的区别，但是却往往容易忽视不同角色之间的技能鸿沟，很多时候，不同角色之间的区别会被淡化，最终会被归结于“人的能力”。但是假如能以新角色的视角审视问题，就会发现绝大部分的问题实际上都是简单到不能再简单的基础问题，之所以不断踩坑，只是因为自己没有察觉到角色已经发生改变了。

这促使我想做点什么，能够帮助自己和更多的程序员们避免在这些简单问题上持续的踩坑，因此就有了这本书。我希望能总结出程序员成长发展过程中面临的不同角色，以及作为这个角色，应该具备的基本知识和能力。

写下这篇介绍的时候，《成为程序员》这本书里还没有什么具体内容。按照我一贯的想法，我希望最终呈现的是一些有点意思，同时也能让人有点收获的东西，而不是完全的知识输出。这本书大概会以我自己的成长经历为基础，识别和总结出不同阶段的角色，再给出这个角色应该具备的基础能力和后续发展方向。

我希望它最终能够成为程序员职业发展的某种“索引”，本身不需要过多的篇幅，但是能够给人足够清晰的脉络。

本书的在线阅读地址为：<https://become-a-programmer.2baxb.me> ，由于个人的能力和视野有限，书中内容难免出现主观或客观错误，希望大家不吝指正。

同时由于精力有限，这本书目前采取不定期更新的方式编写，源码会在<https://github.com/qdaxb/become-a-programmer>同步，根据反馈来决定后续更新的频率，如果你觉着内容还不错，欢迎留下star。

让我们开始成为程序员吧。
