全栈工程师的思考

在我把博客的标语修改了之后,固然只是一个某方面的测试。生活是一个有趣的循环,当咱们试着往围城外走的时候,咱们又被拉到围城里。git

什么是全栈工程师

在如今这一个时代来讲,不会有人掌握全部的编程语言、技能,之后应该会有,可是掌握这些所有技术的不是人类了。因此,其实咱们须要的是懂得多种技术的,并能借些独立完成产品的人。程序员

当咱们须要作一个移动CMS的时候,咱们就会在不一样的技术栈以前选择,或是RequireJS + Backbone + jQuery + Mustache,又或者是 ReactJS + Backbone,固然也有多是AngularJS等等。咱们所须要作的是,从中选出一个最好的方案,而后实施之。github

这也就意味着,咱们须要有更好的知识面,也会致使对于某些技术的不够深刻。二者就是一个很好的对立面,在这两之间很好地平衡可能就意味着平庸。有时也并不是如此,可是多数时间这这样的。要么成为专家,要么成为全栈,要么就平衡他们。sql

全栈工程师VS专家

人的大脑如同一间空空的阁楼,要有选择地把一些家具装进去。数据库

Bookself

柯南道尔说的话仍是颇有道理的。因为这个阁楼的大小是有限的,假定他是一个书架。那么全栈工程师的书架就会充满各类各样的技术栈从MySQL、SQLite、MongoDB、Redis等等各类各样的书籍;而专家的书籍则是MySQL优化、MySQL重构、MySQL权威指南、DBMS等等的专业书籍合集。django

若是他们都是一本书,那么全栈工程师的书是一个索引。专家的书则更多的是内容自己。编程

因此,每一个人都会去选择不一样的存储方式、不一样的数据库。服务器

NoSQL & MySQL

对于咱们大脑这个数据库来时,平时咱们存储的是Key-Value(ps: 咱们只有key,value是Google和书本),对于专家来讲,存储的是Documents。在一样的容量大小的状况下,咱们能够了解到更多的知识。以下图所示,左边的关系数据模型即为全栈工程师,右边则为专家。架构

Key

曾经迷惑了好久: 为何对于一些知识点,我须要去Google,而别人能够独立地完成的时候。我就意识到我更适合于互联网企业,听说在一些电信设备制造商里是没网的办公环境。然而在多数的时候,这并不是一种劣势。app

咱们会更快地方式来解决问题,由于咱们有一些这方面的经验。不足则是,有时候咱们没有办法深刻问题去分析。

如何成为全栈工程师

这是一个有趣的问题,在知乎也有这样的讨论。而我以为,最重要的是好奇与创造。

创造

记得在上大学以前已经有一个明确的目标,尽量地作到能作到的程序——想到的都应该能作到。因而,顺着这个目标构建了一个知识体系,又或者说是索引。

当咱们内心有一个想法的时候,我就开始从一个key中进行头脑风暴,如以前作的地图搜索。咱们要作的功能即是: 持久化GEO信息,在地图上显示坐标。

1.首先会在头脑中列出全部我用过的框架,选择后台框架:

Django(Python)、Flask(Python)、Ruby On Rails(Ruby)、Sinatra(Ruby)、NodeJS、Laravel(PHP)、Spring(Java)

排除事后就只剩下Django、Flask、NodeJS,接着由于Django内置Geo支持,果断选择了Django。

2.接着,对于持久化方案的选择:

因为Django内置ORM,因此这一步能够轻轻松松地过去。不过,我选的是SQLite3,本地调试方便,还能够将数据复制到服务器上。

3.而后,对于空间搜索的支持:

就这么有了两个搜索引擎和一个数据库: ElasticSearch、Solr以及MongoDB。由于Django对于MongoDB支持的缘由,想到使用搜索引擎会更容易搜索到结果。接着找到了Haystack,看到Solr须要手动更新索引就选择了ElastiSearch。

4.到了,移动开发:

要跨平台支持天然是Cordova,用Hybird仍是Ionic好用。

5.实战

这一步天然也不是问题,向来是以实战出真知的。

在不断创造地过程当中会学到更多的知识,有更多的方案能够选择。下一次,将会想着用不一样的技术栈再实现一遍。有了以前的体系,再横向深刻也是一个很好的突破点。如,咱们用Python构建一个原型,而后咱们用Java来实现。

好奇

与专家不一样的是,全栈工程师更容易被新的技术吸引。至于,是好是坏我想你们都懂的。

当ReactJS出来的时候,就会试着去玩。

当Ionic还在测试版的时候,就会作一个个Demo。

而有意思的是,同咱们在《技术的本质》中看到的同样,新的技术都是基于旧的技术产生的。没有一种技术能够无中生有。因此要学习一种新的技术必然不难,只是有时候会难以深刻。

全栈程序员进阶

在思考过一些日子后,我明白了更多的东西。也彷佛找到了两条更有意思的成长路线:

构架设计

在我打算试着写一个名为Echoes的CMS的时候,找到了书架上的几本书:

  • 《架构之美》
  • 《面向模式的软件架构》
  • 《领域驱动设计》
  • 《实现领域驱动设计》
  • 《软件框架设计的艺术》

发现书中说起到的一些模式彷佛已经很常见了,要理解起来已经变得很简单,看上去那些更像是一个又一个的项目的缩影。

更主要的点还有:

架构师并非最好的程序员,可是知识面必定要广。

只有有着更多的知识才能决定好方案,若是咱们只深刻一部分知识,那么咱们没法总作出正确地决定。因此,也必须也是一个好的成长方向。

成为专家

be professional

。。。

我一直不认同木桶理论的一点是,咱们会被最低的木板限制。可是有一天咱们会被最高的那一块限制到,毕竟咱们都会意识到咱们的短片,咱们会尽可能把全部的木板提到一样的高度,以保证水的容量。可是,若是最高的那块木板不是那么高呢? 那么,为何不在一开始的时候,让它尽量的高?

因而,我想说的是咱们须要在某一部分红为专家。当咱们在某一领域成为专家,要在另一领域成为专家,也是很容易的一件事。

当我向Senior程序员咨询一些成长意见的时候(ps: 毕业不到一年),那么就是往专家发展。对于一个Java Web程序员来讲,成长意见可能就是深刻Spring、探索Tomcat底层、深刻JVM。问题是,他们都写得复杂,可是咱们又不能放弃这样的成长机会。咱们还能作的事,从一个更简单的语言中学会这些原理,再回头去补充。

对应于Spring,会有Flask、Tornado;对应于Tomcat,咱们是否是能够深刻Gunicorn;对应于JVM是否是也会有Python VM,不过仍是JVM的书比较多。等咱们在一个更简单的层级上了解到这些,那么对于一个臃肿的语言来讲不会是难题。

总结

咱们总在成长,至于成长的方向是咱们能决定的~~。

其余

全栈程序员成长路线能够参照: Web Developer路线图

Follow my projects on GitHub

QQ交流群: 321689806

微博: @phodal

相关文章
相关标签/搜索