什么是全栈工程师

在现在这一个时代来说,不会有人掌握所有的编程语言、技能,以后应该会有,但是掌握这些全部技术的不是人类了。所以,其实我们需要的是懂得多种技术的,并能借些独立完成产品的人。

当我们需要做一个移动CMS的时候,我们就会在不同的技术栈之前选择,或是RequireJS + Backbone + jQuery + Mustache,又或者是 ReactJS + Backbone,当然也有可能是AngularJS等等。我们所需要做的是,从中选出一个最好的方案,然后实施之。

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

全栈工程师VS专家

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

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

如果他们都是一本书,那么全栈工程师的书是一个索引。专家的书则更多的是内容本身。 所以,每个人都会去选择不同的存储方式、不同的数据库。

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

Key

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

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

如何成为全栈工程师

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

  • 创造

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

当我们心里有一个想法的时候,我就开始从一个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的时候,找到了书架上的几本书:

《架构之美》
《面向模式的软件架构》
《领域驱动设计》
《实现领域驱动设计》
《软件框架设计的艺术》
发现书中提及到的一些模式似乎已经很常见了,要理解起来已经变得很简单,看上去那些更像是一个又一个的项目的缩影。

更主要的点还有:

架构师并不是最好的程序员,但是知识面一定要广。
只有有着更多的知识才能决定好方案,如果我们只深入一部分知识,那么我们无法总做出正确地决定。所以,也必须也是一个好的成长方向。

成为专家

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

于是,我想说的是我们需要在某一部分成为专家。当我们在某一领域成为专家,要在另外一领域成为专家,也是很容易的一件事。

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

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

全栈工程师的思考 | 步步进阶经验之谈相关推荐

  1. 对于全栈工程师的思考

    对于全栈工程师的思考 在今年三月份的时候,我就总结了一下软件工程师应当具备的能力,也就是软件工程师的核心竞争力,现在重新总结,修改如下: 1.出色的技术能力 (1)扎实的编程基本功 (2)清晰明朗的编 ...

  2. 全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过

    技术更新日新月异,对于初入职场或者刚开始学习的同学来说,经常会困惑该往那个方向发展,这一点所有刚开始学习的人基本都有这个体会的. 刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺 ...

  3. 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!

    互联网技术,更新迭代迅速,用日新月异来说也不为过,所以,面对这这种大环境,对于码农尤其是那些对于初入职场的新手来说,该如何自我学习升级,往方向发展,这一点是大家都经常困惑的. 大部分人,刚开始学习的J ...

  4. web全栈工程师(前端进阶)学习线路图

    近两年关于"前端工程师坚守前端还是主攻全栈开发"的问题,成为很多编程爱好者热议的话题.全栈开发工程师的概念最早是由Facebook提出的.全栈的核心是指开发者能够承担包括前端.后端 ...

  5. 2019 Java 全栈工程师进阶路线图,一定要收藏

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的. 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面 ...

  6. 2019Java 全栈工程师 进阶路线图!一定要收藏!

    原文:https://zhuanlan.zhihu.com/p/73671471 互联网技术,更新迭代迅速,用日新月异来说也不为过,所以,面对这这种大环境,对于码农尤其是那些对于初入职场的新手来说,该 ...

  7. 云之梦php免费教学视频下载_云知梦php基础+php进阶+mysql+linux+laravel全栈工程师【百度网盘】...

    云知梦php基础+php进阶+mysql+linux+laravel全栈工程师视频百度网盘下载,全套云知梦PHP全栈工程师教程一共172集,每天两小时深入讲解,注意只是讲,课下自己要练习,总和86天课 ...

  8. 【微信小程序控制硬件⑦ 进阶篇】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为心里全栈工程师梦想浇水。

    文章目录 一.前言: 二.涉及的技术点: 三.框架的运行原理: 四.框架代码流程: 4.1 主线程: 4.2 获取设备列表显示设备,以及订阅在线的设备: 4.3 点击某设备如何实现携带此设备信息到控制 ...

  9. 想成为全栈工程师,要做到哪几点?

    导读:如何成为一名全栈工程师?需要具备哪些技术积累?成为全栈工程师有哪些好处?希望本文能为期望成为全栈工程师的同学提供一点帮助,和同学们一起分享交流. 作为开发者,我们不过度区分服务端 server ...

最新文章

  1. 一文看全北科智能车创新历程
  2. 一个通用的任务管理模型-golang
  3. 前端php解密,转发:RSA实现JS前端加密,PHP后端解密
  4. 在线post测试java接口测试_好用的在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具-ApiPost...
  5. 关于远程终端不能登录问题解决!
  6. Discretized Streams: An Efficient and Fault-Tolerant Model for Stream Processing on Large Clusters
  7. Spring5 jar包下载
  8. iOS https双向配置
  9. [css] 假如css的分号写在声明块之外,将会发生什么呢?解释下原因
  10. ObservableScrollView实现
  11. 将两个(或多个)Item建立关联 app_field.set_dependent_field和app_field.clear_dependent_fields...
  12. 关于iBase4J使用的一点心得体会
  13. laravel 图片流_基于laravel,一个下载远程图片到本地, 返回 MD5的方法
  14. 高德地图API(使用浏览器ip实现精确定位)
  15. TTL电平信号和RS232信号波形对比
  16. MATLAB 与 音频处理 相关内容摘记
  17. Unity材质快速复制
  18. KS检验、t检验、f检验、Grubbs检验、狄克逊(Dixon)检验、卡方检验小结
  19. 视频只有声音没有图像?(收藏)
  20. 变频器源码、图纸、伺服驱动器和变频器源码、图纸、生产方案

热门文章

  1. Python 中的*args和**kwargs
  2. 实例Python处理XML文件的方法
  3. 1.1.2 以Web Host方式寄宿Web API
  4. HDU 5214 Movie【贪心】
  5. 《Linux下sed命令的使用》
  6. 第二章 栈和队列(1)——顺序存储
  7. 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
  8. CodeSmith 破解和注册
  9. 分页与无限滚动在评论区的设计差异
  10. 从拼多多分享文案中,我们学会了什么?