这里面的每一个都可以被认为是一种技能树:一组可以单独和并行开发的相关技能。但是在实践中,你通常会从使用第三个技能树开始,在变得更有经验的时候,才逐个添加其他技能。Randall Koutnik 把这些描述为一种职业头衔,一个职业发展走向:实施者、解决者和发现者。作为实施者,你是一名没有经验的程序员,你的任务由其他人定义:你只需实现小的、明确指定的代码块。假设一下,你在一家为养宠物的人搭建网站的公司工作。你在上班的时候会接收到一个任务:“在这里添加一个下拉菜单,列出所有的鬣蜥疾病,你可以从 IGUANA_DISEASE 表中获取这些疾病。选择一个菜单项应重定向到适当的页面。”你不知道用户为什么会需要列出鬣蜥疾病,也不必花费太多时间来弄清楚如何实现它,照吩咐去做就行了。当你变得更有经验时,你就成了一个解决者:你能够为不太明确的问题想出解决方案。当你遇到一个问题:“我们需要在网站上添加一个部分,让宠物主人知道自己的宠物是否生病了。”你先获悉自己拥有什么数据,可以使用哪些 API,然后与设计师一起设计 UI,创建一个实现计划,最后编写代码。最终你会成为一个发现者:你开始自己发现问题并找出其根本原因。你会去和你的经理谈鬣蜥:几乎没人拥有鬣蜥,为什么它们在页面上和猫狗有一样的空间?更不用说给鬣蜥编写特定的代码,这完全是在浪费时间,难道不是应该编写适用于所有动物的通用代码吗?经过一番讨论,你发现必须重做网站架构、业务逻辑和设计,这样就不必在每次添加新动物的时候都编写新代码。如果你提出正确的架构,使得添加一个新的动物只需要花一个小时,公司就可以以低成本服务于许多动物利基市场。你将与整个团队一起合作完成解决方案的设计和实施。