全栈网络安全工程师是什么意思
最新回答
如何自学成为一名优秀的全栈工程师?
对于大多数IT行业的毕业生,刚步入工作岗位的职场新人们来说。纠结的问题都是如何选择职业方向,如何成为一名优秀的软件工程师,以及怎样快速提高自身的技能等。今天,我们php中文网来和大家谈谈要如何才能成为一名优秀的全栈工程师。
什么是全栈工程师
全栈工程师一词,最早出现于Facebook工程师Calos Bueno的一篇文章- Full Stack (需翻墙)。他把全栈工程师定义为对能影响有着深入理解的技术通才。自那以后全栈这个词便流行起来,我看到过的就有全栈工程师,全栈设计师,全栈运维,全栈市场营销人员等等。而在“拉钩”,“100Offer”等针对互联网人才的招聘网站上,全栈工程师更是一跃成为热门招聘职位,其薪资水平也比一般的工程师职位要高出一截。那么,什么是全栈工程师,我们又应该如何定义一名全栈工程师呢?
百度百科对全栈工程师的定义是这样的:“掌握多种技能,并能利用多种技能完成产品的人”。我觉得这个定义还不够全面,我认为全栈工程师应该同时是一位资深工程师、架构师以及具有敏捷技能的程序员。全栈工程师对于软件的认识往往已经进化了,他们把特定的技术抛到了身后,明白技术的更新始终比计算机理论要快的道理,因此,他们注重强化自身的核心技能,关注并乐于实践其他技术。全栈工程师往往是某一方面的专家,同时通晓并善于在正确的场合运用其他语言、工具和技术。
全栈工程师的价值
随着时间的推移,全栈工程师的作用和价值在越来越多的产品或项目中得到了印证。那么,我们来看看全栈工程师对于个人或公司意味着什么。
个人价值及自由度的极大提升-我曾看过一些介绍全栈工程师的文章,文中大多强调了全栈工程师对于公司与团队的价值。而我想说的是,没有一个优秀的全栈工程师是因为会对公司产生多大的利益,而努力学习各种技术的。我所认识的他们,都是那些有着一颗匠心,不断追求更高技能,并执着于做出更优秀产品的人。而当你成为一名真正的全栈工程师后,会感受到前所未有的个人价值与技术自由度的提升。试想当一个很好的创意出现时,你可以一个人或主导一个团队去实现并不断完善它,这是一件多么让人兴奋的事啊!
全局思维与技术前瞻-由于具备了各个环节与技术领域的知识,全栈工程师往往具有更好的大局观和技术前瞻,能够在项目初期就选择正确的技术,并很好地把控一个项目的整体方向。现代项目往往非常复杂,而全栈工程师往往能带来技术和质量上的保障,从而成为一个项目成功的关键人物。
降低沟通成本-我经常听到有设计师抱怨前端工程师无法百分之百地还原他们的设计,而前端工程师又在抱怨后端工程师从接口返回的数据更本无法直接使用,后端工程师也在抱怨产品经理所提的需求根本无法完成。随着团队人数的上升,由于各自技能栈的不同,沟通成本一定会随之上升。全栈工程师除了能够完成前后端的(甚至包括设计)外,如果能够在项目初期提前介入,便能很好地规避技术风险,过滤不合理的需求,从而显著降低因不同技术差异导致的沟通问题,显著降低项目风险。
初创公司-我们已经来到了一个万众创业,全民创新的时代。那些初创公司也如雨后春笋般不断涌现。初创公司往往都有了一个不错的创意,但经常会遇到“就缺一个程序员”的尴尬。我想说的是,他们其实并不是缺程序员,而是缺一位全栈工程师。初创公司往往资金有限,而一名优秀的全栈工程师能够帮助初创公司用最低的代价与最短的时间推出自己的产品。这是初创公司能够存活下来,拿到更多投资,甚至成为“独角兽”一员的最关键一步。
全栈工程师技能树
看到这里你一定会问,到底需要具备怎样的技能才能成为一名全栈工程呢?下面这张图来自Medium,作者将软件所涉及的各个方面分为层,又将每个层所包含的主要技术作为组件,制作了这张全栈技术图。
从上面这张图,我们不难发现,现在的技术体系是多么庞大,每一年又会有新的技术加入到这些层中,而已有的技术又在不断地更新。因此要掌握所有技术是根本不可能的,而成为全栈工程师也并不需要你真的掌握所有的技术,你应该将自己的精力聚焦于关键技能以及一些必须掌握的附加技能上。
关键技能(硬实力):
Git /GitHub-你必须掌握如何使用Git来和分享你的代码。把Git作为关键技能的第一条,是因为它不仅仅是一个代码工具,更是一种推荐的工作方式。它使你能在任何地方进行,高效地任何大小的项目,通过Git你还能与其他团队成员进行分布式协作,大大提升工作效率。通过GitHub,还能将你与世界所有的者联系在一起。
至少一门编程语言-你需要精通至少一门编程语言,JA、PHP、C#、Python、Ruby、Perl等,因为你的大多数核心业务处理都需要用这门语言来写。你既要掌握这门语言的语法,又需要非常熟悉如何基于这门语言进行项目的架构、设计、实现以及测试。如果你选择的是JA,那么你就需要掌握面向对象的设计和,设计模式的应用,基于J2EE各个组件的等等。
运用框架和第三方库-流行的语言,一般都伴有出的框架,比如JA的Spng、MyBatis、Hibernate,Python的Django,PHP的 thinkphp、yin,nodeJs的 express等等。这些框架往往都遵循软件领域的一些最佳实践,并由非常优秀的人员创建。熟练使用这些框架或第三方库能够避免重复发明子,使你的工作事半功倍。更重要的是这些优秀框架或第三方库的一般都得到持续的,是对你的产品或项目在质量与安全方便的最有效的保障。
前端技术-之所以将前端技术出来,作为一项关键技术,是因为它在今天的项目和产品的研发过程中正变得越来越重要。一个产品除了实现所需的功能之外,是否好用(用户体验)也正在成为评判一个产品是否成功的重要标准。而这都依赖于前端技术的实现,你至少需要掌握HTML5、CSS3、JavaScpt等基本前端技术,同时进一步学习JQuery、LESS、S、AngularJS或REACT等前端框架或第三方库。
数据库与缓存-任何产品或项目都需要一个数据库来存储数据。作为全栈工程师,你也需要至少掌握一到两个数据库,并知道怎样与数据库进行交互。目前流行的数据库主要有MySQL、MongoDB、Redis、Oracle、SQLServer等。MongoDB作为文档型数据库,在互联网产品中正被越来越多地使用,对于规模稍大一些的项目,我仍推荐使用MySQL或商用的Oracle作为后端数据库。而Redis这样的内存数据库则可以用于缓存,以提升的能。
基本设计能力-大部分关于全栈工程师的文章或讨论中,都不会将设计能力做为全栈工程师的关键技能,但我却认为这项技能非常重要。我曾被邀请评估一些软件工程师自己的产品,这些产品都有不错的创意,功能实现也很到位,但一看就不是一个好的产品,用户根本没有使用,原因是这些产品的设计太差了,而往往那些者完全没有意识到问题的存在,比如彩的不一致,排版的凌乱,不恰当的图标等等。我所建议的基本设计能力,并不要求你像专业设计师那样能够P出神图、制作奇妙的视觉效果等,但你需要掌握最基本的UI设计原则,如彩的搭配,基本的排版,并具备良好的审美能力,和一些基本UI设计能力,这样你做的产品就不会太差了。
在掌握了这些核心技能之后,你可以根据自己的兴趣与发展方向,学习其他方面的技术。比如,如果你对数据处理感兴趣,那么你可以学习大数据方面的技术。如果你对移动互联网更感兴趣,那么你可以学习Swift,ios应用。知识总是相通的,在有了良好的技术基后,学习其他知识将会变得非常容易。
附加技能(软实力):
沟通-除非你是在做个人项目,对于稍大一些的项目,你总是需要与同事、干系人或是客户进行沟通的。而成功的沟通往往是获得有效需求,与建立团队信心的第一步。在项目的进行过程中,你更需要通过有效的沟通去确定方案,消除误解,与项目成员协同前进。良好的沟通能力将使你在团队中更具影响力,收到更多尊重和关注。
问题解决能力-全栈工程师首先是一名工程师,他必须掌握工程化的方法来解决遇到的各种问题。我在职业生涯中的几乎所有亮点,都与解决问题相关,大到提供整个项目的架构方案,小到以最快的速度解决生产问题等。其实有很多提高问题解决能力的方法,但没有一种比实践更有效。我所见到的优秀工程师,往往能够凭借直觉以最短的时间给出正确的解决方案,但你可能没有看到的是,在这背后其实是经过大量实践累积而来的经验。
时间-作为全栈工程师,你可能会被安排同时在不同的项目中承担不同的角。你需要合理地分配时间,保证所有的工作能够按时交付。同样在你的业余时间,你还需要花时间阅读和学习,同时你还可能会有自己的Side Pject。因此,合理地进行时间分配,并对一些关键任务,进行计划是很重要的。你或许会感到一些压力,但这反而会激发你的创造力,并能让一切都有条不紊地进行。
好奇心-对任何工作都抱有好奇心,并愿意不断学习和改善是那些优秀工程师的共同特。软件领域汇集了世界上最聪明的人,各种类型的技术、产品、框架更是新月异,层出不穷。优秀的全栈工程师需要不断地学习来抓住这些变化,跟上计算机领域发展的脚步。时常有人会问我,做计算机这一行一直会有新的东西产生,要去不断地学习,是不是会很累。我要说的是,对于将持续学习作为一种生活习惯的人来说,学习新东西并不会成为一种负担,反而是一种乐趣。
力-优秀的全栈工程师往往会被赋予技术Leader甚至项目者的角。成为者并不是让你去支配其他人,或让其他人替你做事。者需要理解你的团队成员的长处与不足,并知道如何以服务的态度使团队获得最大化的产出。我见过一些非常优秀的工程师,当他们被安排去团队时,他们是排斥的,他们往往更愿意独自工作。但我想说,成为者,将会使你更加睿智、可和值得他人信赖,也会对你未来的职业生涯带来极大的益处。因此,当机会到来时,请将它视为,不要排斥它。
有经验的技术者在招聘时,往往会同时考察应聘者技术能力与上述附加技能,而对于初级程序员的招聘来说,那些附加技能往往更被优秀的技术公司所看重。技能是你的硬实力,而附加技能则可以看作是你的软实力,只有同时具备这两方面技能,才能成为一名优秀的全栈工程师。
优秀的全栈工程师需要走出去
优秀的全栈工程师不应局限于自己的工作,他更应该走出去,接触不同的技术,分享自己的经验和心得,认识更多的朋友。下面便是我的一些做法。
参加技术大会- InfoQ、CSDN、GITC、优设、TED等网站都会定期举办各类技术大会。在这些大会上,你不仅能够听到技术大咖们带来的各自领域最佳技术实践,而且能认识很多行业内的朋友。这对你开拓思路,扩大技术社交圈都很有帮助。因此,如果公司没有安排你去参加这些技术大会的话,那就自己买票参加,作为对自己的一种投资吧。
作公开演讲-全栈工程师并不需要是一个公开演讲者,但作为团队的核心成员,他一定需要在团队内部做技术、等方面的进行演讲。如果你是一个乐于分享的技术达人,那么也可以尝试录制个人课程(或音频),并在慕课、课堂、优酷或像荔枝、喜马拉雅等各种媒体分享自己的技能和知识,不要因为自己并不是专家就不愿尝试,相信我,你用心制作的内容,会获得大家的认可,并收获一大批粉丝的。
个人博客-每天进步一点点,一年以后你便会获得质的飞跃。优秀的全栈工程师懂得如何进行知识的积累,而技术博客就是一个很好的方式,将自己平时的实践、思考记录下来,配以tag标签方便后的回顾。最有意思的是,当你在不断记录和更新你的博客同时,世界各地的程序员也会通过你的博客认识你。
参加线下活动-与以前程序员总是宅在家里不同,现在的年轻程序员们更愿意分享和交流。很多网站也会组织不同技术主题的线下活动,在这些活动中你可以听到一些技术牛人的分享,还可以找到很多和你一样对技术富有的人。而我现在所做的开源项目中的很多团队成员,正是我在这些线下活动中结识的。
全栈工程师决不是一夜练成的,你需要打好技术基,强化核心技能,并持续学习。相信有一天你也能像我一样,感受到自由地运用技术,出优秀产品所带来的乐趣的
8/2定律在哪都适用,全栈工程师就是掌握20%常用技能的人,但这20%的技能会有80%的几率被用到,剩下那80%不常用的,让我们Google吧。
有人说,全栈工程师在已经很多年了,他们叫站长。这个说话有点谱但又不那么谱,我自己也做过站长,深知作为一名站长需要掌握很多种技术。不谱的是,很多站长其实并没有真正写过多少代码,而是熟练利用一些建站软件来建站。
全栈工程师的价值
有人说了,你再牛,你懂五种技术,你能干五个人的活吗?全栈工程师并不是说一个人能干几个人的活,而是要从多个方面来看这个问题。
全局思维
现代项目的,很少说只用到一两种技术的,特别是移动互联网大潮下。随便一个互联网项目中用到的技术,就会需要用到后端、前端、界面设 计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等,一些比较前卫的项目,可能会用到Single Page Application、Web Socket、HTML5/CSS3这些技术,还有像第三方像微信公众号微博应用等等。
Web前端也远远不是从前的切个图用个jQuery上个AJAX兼容各种浏览器那么简单了。现代的Web前端,你需要用到模块化、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到Njs来协助前端的。
所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局思维的人非常非常重要。
像如果是我经手的项目,我肯定会注意到网页优化,也会考虑到API来兼容各种客户端,更会考虑到三屏兼容的问题。不会说项目中完全使用AJAX而不顾SEO,也不会为了功能而忽略访问速度,我会很好的把握这个平衡,因为我知道它们的权重与实现成本。
沟通成本
项目越大,沟通成本越高,做过项目的人都知道,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。
而全栈工程师的成本几乎为零,因为各种技术都懂,胸有成竹,一不小心自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,你让一 个后端和一个前端去沟通,那完全是同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的, 彼此都能听得懂。
创业公司
对于创业公司来说,全端工程师的价值是非常大的,创业公司不可能像大公司一样,各方面的人才都有。所以我们需要一个多面手,各种活都能一肩挑,独挡 多面的万金油。对于创业公司,不可能说DBA前端后端客户端各种人才全都备齐了,很多工作请人又不饱和,不请人又没法做,外包又不放心质量,所以全端工程 师是省钱的一妙招。虽然说全端工程师工资会比一般的工程师会高很多,但综合下来,成本会低很多。
全栈工程师的困境
我讲技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到一定程序都会相互溶合,就好比佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来。
如果一个公司不太懂全栈工程师的价值,那么全栈工程师的地位将会很尴尬,说得不好听一点,全栈工程师就是什么都会,都么都不会。曾经有一次面试,对 方问我很基的问题,我答不上来,我能做出产品,也知道什么是怎么一回事,我也不会犯那些错误,但我就是答不上概念,要考倒我非常容易。所以在应聘面试的时候,有些时候会吃亏,你可能会不如哪些在某一方面钻得很深的人工资拿得高。
由于经常在各种技术穿梭,我会经常忘记代码的语法和一些API,所以我经常需要去查API甚至查语法,我觉得没有Google我几乎没法工作。这在某些人的眼里,是技术不够的表现。我记的只是一个Key,一个如何找寻答案的索引,而不是全部,人脑不是电脑,我不可能要求我能记下所有的东西。
有一次面试官问我一个问题,我说我不知道,但我猜大概是如此这般,对方问我,你为什么这么猜,我说凭直觉,对方笑了笑没说话。面试完后我一查,果然和我猜的差不多。没错,我就是凭直觉,但这种直觉和的直觉不一样,这种直觉是技术上的直觉,是你过去技术经验累积的一个反。
为什么我会成为全栈工程师
我相信很多全栈型工程师会和我一样,是因为要创业才成为全栈型工程师的。我有一颗创业和做产品的心,而且我又是一个不愿意麻烦别人的人,有些人擅长整合资源,空手套白狼,但我显然不是这种人,所以我只好自己做了。
在经历过两次孤独的创业之后,我发现我并不是一个适合创业的人,所以,我成为了一个全端工程师。我最初是做ASP,后来自己创业写客户端用 Delphi,写了三年的ASPNet,2022年的时候因为公司需要开始做iOS。Web前端是一直自己在做,项目中的的 Javascpt基本都是我自己在做。
我热爱写代码,热爱重复发明子,热爱新技术,我想这也是我成为一个全栈工程师的重要原因。
于我自己来说,我觉得全端工程师的乐趣要比一般工程师来得多,因为你知道一个产品的形态,你可以去设计一个产品,你是从全局的视野来做事情,你得到的成就感会更多一些。
知道哪里可能崩了和为什么会崩,没有什么是理所当然的。
适当的使用文件,云存储、网络资源,必须具备数据冗余和可用的概念。
知道应用的伸缩对硬件的需求。
什么是多线程和竞争条件?想想看,在机可能看不到这些,但是现实环境中它们就是会发生。
全栈coder还要能与运维并肩作战。提供有价值的错误和志。确保它们是可的,因为运维会在你之前看到这些东西。(原文为DevOps)
数据建模
如果数据模型有缺陷,业务逻辑和上层逻辑就要用奇怪的代码(很丑)来弥补数据模型的缺陷。
全栈者要能够建立合理的、标准的关系模型,包括外键、索引、视图、查找表等。
全栈者要熟悉非关系型数据存储(应该指的不止是NoSQL),并且知道它们相对关系型存储优势所在。
3,业务逻辑
应用提供的核心价值。
可的面向对象技能。
可能会用到的框架。
4,API层、Action 层、MVC
理解外部对数据模型和业务逻辑的作。
该层会有很多框架应用。
全栈者要具备编写清晰、一致和易用的接口。过高的复杂度让人厌恶。
5,UI
全栈coder:a)知道如何创建可读的页面布局;b)或者明白自己需要帮助设计师。A或B,关键是要能有好的视觉设计。
掌握HTML5和CSS。
JS正在逐步成为语言新锐,Javascpt的世界里已经完成了很多激动人心的工作(node, backbone, )。
用户体验
全栈coder要知道用户需要的就是It works!
一个好的不会废了用户的手腕和眼睛。一个全栈coder会发现和审视需要8次点击、3步作的流程,并最终把它一键搞定。
提供有价值的错误。如果崩溃了,就要向用户致歉。有时候程序员会写出让用户自我感觉很二的错误。
知道用户和业务到底要什么
现在我们模糊了架构的界限,但却可能远离了实际需求。
全栈coder要明确知道用户使用软件时的场景,而且要领会业务。
网络工程师
的一个方向。前者范围更广泛些的。你问的哪个网站好考,是什么意思?一般的你拿到网络工程师的认证。可以从事安全的工作,但是有了后者的证,不一定能胜任前者的工作。不知道这样说你明白不。个人感觉有点像
绕口令
。(*^_^*)
嘻嘻……
模糊来说就是网络工程师
到第二阶段
CP思科认证网络高级工程师
CCSP思科认证资深安全工程师
CCIP思科认证资深互联网工程师
CCDP思科认证资深设计工程师
CCVP思科认证资深语音工程师
到了CCIE都是对应上面CC什么什么P的
比如IE路由交换对应的NP
IE安全对应的SP
IE语音对应VP
等等
简单来说从事工作分两种
网络工程师 在网络集成公司做网络,分售前与售后,主要就是设计,搭建,维修等。
网络员 在各界有网络的公司i(比如银行,商场等),主要工作是与维修。