ncbx002 / database

草榴社区 杏吧论坛,技术讨论区&杏吧聊天室 帖子汇编
https://github.com/ncbx002/database/issues
5 stars 2 forks source link

为什么创业公司不再需要后端工程师? #20

Open ncbx002 opened 4 years ago

ncbx002 commented 4 years ago

这是一个脑洞大开的年代,产生越来越多的认知盈余。思想的碰撞产生出种种奇思妙想,许多人想通过互联网,通过技术来改变生活。所以,我们看到越来越多有价值的新产品出现。无论是在纯软件类移动互联网产品领域、硬件类实体产品还是在新兴的服务行业。你也许也会有同样的想法:有个创意,想开发一个 App 来解决某个问题,想做一款好玩的游戏 App,或者是通过移动 App 来优化您的传统商业模式和体验。那么如今怎样来开发一个 App,可以即高效又最节省开发成本呢?技术团队如何组建,还需要后端工程师么?

关于开发方式,前两年最火爆的词语莫过于云计算。科技的迭代速度是指数级不断增长的,云计算正是这种指数级迭代的引爆点之一。软件开发的方向一定是会变得越来越简单,成本也会不断降低。

云服务 1.0

如果你做一个 App,请至少选择一款好用的云服务,尤其对于初创公司来说。这样的例子最有名就是 Instagram,在 2012 年 4 月 Instagram 被 Facebook 10 亿美金收购时,用户规模接近 5000 万,然而整个团队仅 13 人,而且其中的 5 名技术人员中,仅有两个半后端工程师。另外的半个偶尔要负责前端的部分开发工作,Instagram 的所有服务就是部署在 AWS 上面。Instagram 联合创始人 Mike Krieger 在「如何成为十亿美金公司」的演讲中,将使用 Amazon 的云服务归结为用户规模暴涨,但工程团队并未出现明显增长的重要原因。类似的公司还有 Dropbox。

在云服务 1.0 这个时期,开发虽然没有比之前变得简单容易太多,但是如果你想让别人使用你的服务,只需部署程序到对应的云主机或者 App Engine 上,节省大量运维成本。类似 AWS(亚马逊的云服务)、SAE(新浪的云服务)、微软 Azure 和阿里云,让本来需要花很多钱购买的服务器和运维成本都不再需要,取而代之的是选择一个好的云服务商。你的服务器端程序可以完全部署在云服务器上,使用初期由于访问量较小,用户不需要支付费用。按需付费,当使用量真正达到了收费额度,云服务商才会收一部分钱。当然,如果能够达到这个付费标准,理论上这个项目已经运转的不错了。

云服务 2.0

如今越来越多的 BaaS(Backend as a Service 后端即服务)已在硅谷兴起,被称为云服务 2.0 版本。不知道大家是否记得,过年期间有个应用特别火爆,App Store 的下载排行榜一直位居榜首,这个应用叫做「逗拍」,来看下逗拍的发展速度。逗拍 2014 年 12 月 22 日正式上线,上线仅 10 天,用户突破 10 万;上线 42 天,进入 App Store 总排行榜第一;上线 52 天 ,突破 1000 万用户;上线不到三个月,目前已经突破 1600 万下载。(数据来源于逗拍在拉勾网发布的招聘信息:http://www.lagou.com/gongsi/24510.html。)

目前国内也已经有很多使用 BaaS 服务成功的案例,许多科技公司都会遇到用户快速增长,这种情况下如果自建服务的技术成本是多大呢?打个比方,假如你打算做一款抢红包应用,或者你的电商网站举办双十一秒杀活动,技术团队自己维护就需要相当大的资源投入。但是现在很多科技团队可以在不投入一个后端工程师的情况下,使用 BaaS 服务轻松搞定这些。支付的成本远远低于自建团队的资源投入,而更关键的是,他们节省了太多时间成本,也是机会成本,将更多的时间花在产品和运营上。

目前越来越多的科技类创业公司都希望能够保持着小而美,都希望技术团队可以保持着精英化。为了让工程团队最大化的发挥作用,在 BaaS 服务帮助下甚至可以不安排工程师来负责的后端研发,服务器端业务也完全依靠 BaaS 服务来支撑。云服务 1.0 解决了绝大部分服务器运维问题,而 BaaS 则是要解决后端研发的成本问题。

无后端开发

我们设想一下,每次想要做一款 App 时,总是会有很多重复的模块要开发。比如数据存储、文件存储、账号体系、短信验证、统计需求和实时通信等模块,这些模块工程师们也力求做到通用,为了以后开发的时候更加容易复用。这些模块为什么一定要反反复复的写,不可以做成一个通用的服务么?用户想使用哪个模块就用哪个模块,不需要服务器运维,也不用再重复开发,只需要按需付费,这就是 BaaS 要实现的目标。

使用 BaaS 的服务之后,最有趣的一点就是不再需要专业的后端工程师。现在如果你要开发一个产品,一般情况下需要三个角色。一个产品设计师负责产品的需求、界面和交互设计,一个前端(包括 Web、iOS 和 Android)工程师来实现设计,一个后端工程师来搭建后端服务写出后端逻辑部署在云服务上。而使用 BaaS 的服务之后,只需要两个角色,设计师和前端工程师。

举个例子,比如你要是想实现一个游戏 App,你可能需要的服务端需求就是存储、用户账户体系和统计。BaaS 的服务提供商的网站中,会提供应用控制台。你可以直接点几下鼠标配置相关的存储表,服务端就自动生成 RESTful API,前端工程师直接请求就可以了。类似用户账户体系、统计功能等众多模块都是类似的思路。

这只是 BaaS 强大功能的一小部分,通过这一系列功能的使用,你会发现大大节省开发 App 的开发时间,并且显著提高开发效率,当然也省掉后期的运维成本。同样的只需按需付费,选择一家服务稳定价格合理的 BaaS 服务,还可以省掉一大笔研发资金。国外类似的服务很多,比如 2013 年 4 月 Facebook 刚刚收购的 Parse、2014 年 10 月份 Google 收购的 Firebase 等。而

国内类似的服务也在遍地开花,比如专注文件存储的七牛和专注解决移动开发服务的 LeanCloud 等。开发者只需将全部精力全部集中到如何做出精美的产品上,不用再操心后端究竟做了些什么。

人类科技的发展就是通过一个一个的创新,硅谷之所以走在创新的前列,一部分原因就是他们不断降低创新的成本,同时使团队变得更加高效。曾经一个互联网产品的问世可能需要很多成本,人力成本、推广成本、研发成本,当然还有大量的时间成本。但是现在因为 BaaS 等服务的出现,至少研发成本在不断降低,使创新的成本也不断降低,使更多的资源用在更重要的事情上。当然 BaaS 也不会是终点,越来越多的服务创新也会不断进行下去。

ncbx002 commented 4 years ago

在Web开发中,前端攻城狮和后端攻城狮是不同的物种,但两者又必须密切分工合作,才能使得项目顺利进行。分工的核心在于在哪里渲染页面。不同的渲染位置决定了不同分工模式。

一共有三种渲染的方式。

一.在服务器端渲染, 前端工程师们需要用模板定义展现形式,后端工程师们需要用模板输出数据。

二.在浏览器端渲染, 前端工程师能够从后端服务器获取数据,进而按照业务逻辑渲染页面。这时候后端工程师只需要开发业务 API 提供数据就可以了。

三.大前端模式, 借助神器Node.js,前端工程师终于把磨爪伸进服务器了。 这是后端工程师的职责是开发无状态的API。

ncbx002 commented 4 years ago

你能看到的是前端做的,机房里跑的是后端做的 吐槽下,大部分程序来说,你是前端还是制作美工,没有太大的差别 个人感觉统称前端还是有点自我想要快速长大的意味在,前端入门易,事情杂,深入难,这几年互联网发展爆炸的职业 前端要懂的要很杂,会交互,懂原理,能优化,改的了设计图,写的了页面代码,码的一手风骚的js,最好还有一门程序语言傍身,有深度,有广度,也很有噱头 事实是,国内真能称得上前端的呢? 大部分人还是挂着前端的titile做着制作的活---------------------------------------------------------------------------以上是11年的时候编辑的答案,到了14年,欣慰的前端已经细化了,而且薪资的增幅也很大有重构,有js,有前端架构师,还有node界线越来越模糊,而职别也越来越难界定了

ncbx002 commented 4 years ago

web前端分为网页设计师、网页美工、web前端开发工程师首先网页设计师是对网页的架构、色彩以及网站的整体页面代码负责网页美工只针对UI这块儿的东西,比如网站是否做的漂亮web前端开发工程师是负责交互设计的,需要和程序猿进行交互设计的配合。

web前端需要掌握的有脚本技术javascript DIV+CSS现下最流行的页面搭建技术,ajax和jquery以及简单的后端程序等。 后端的话可供开发的语言有 asp、php、jsp、.NET 这些后端开发语言的话搭建环境都不一样,具体如果你想学的话看是想从事前端部分还是后端程序部分。后端开发如果有一定的条件的话可以转为软件开发。不过要有一定的语言基础,类似java语言。C#等。关键是看你的兴趣爱好。

这个到后期不会区分这么细,做前端到后期也会懂一些后端的技术,反之,后端也是。在我们实际的开发过程中,我们当前这样定位前端、后端开发人员。

1)前端开发人员:精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发。

2)后端开发人员:会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等。

现在来看,我们对前后端的要求还是蛮低的,尤其是后端,新员工经过培训之后都是可以参与到后端开发的,没有太高的技术门槛,唯一需要做的就是先变成熟练工种,这个阶段没有涉及到设计模式、架构、效率等一些列问题。

还是先google一下,看看网上对Web前端开发、Web后端开发分别是什么?

Web前端: 顾名思义是来做Web的前端的。我们这里所说的前端泛指Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括Web页面的结构、Web的外观视觉表现以及Web层面的交互实现。

Web后端:后端更多的是与数据库进行交互以处理相应的业务逻辑。需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等。

我们再来看看大公司对前后端人员招聘的要求,通过这个角度看看前端、后端的技术要求:

Web前端:
1)精通HTML,能够书写语义合理,结构清晰,易维护的HTML结构。
2)精通CSS,能够还原视觉设计,并兼容业界承认的主流浏览器。
3)熟悉JavaScript,了解ECMAScript基础内容,掌握1~2种js框架,如JQuery
4)对常见的浏览器兼容问题有清晰的理解,并有可靠的解决方案。
5)对性能有一定的要求,了解yahoo的性能优化建议,并可以在项目中有效实施。
6)......

Web后端:
1)精通jsp,servlet,java bean,JMS,EJB,Jdbc,Flex开发,或者对相关的工具、类库以及框架非常熟悉,如Velocity,Spring,Hibernate,iBatis,OSGI等,对Web开发的模式有较深的理解
2)练使用oracle、sqlserver、mysql等常用的数据库系统,对数据库有较强的设计能力
3)熟悉maven项目配置管理工具,熟悉tomcat、jboss等应用服务器,同时对在高并发处理情况下的负载调优有相关经验者优先考虑
4)精通面向对象分析和设计技术,包括设计模式、UML建模等
5)熟悉网络编程,具有设计和开发对外API接口经验和能力,同时具备跨平台的API规范设计以及API高效调用设计能力
6)......

从几个公司的招聘要求可以看到,做Web开发,对前端和后端的要求是各自所不同的。而我们目前的实际情况,也和这个差不多,但是,我们无论在知识的掌握程度上,还是知识掌握的宽度上,都是不够的。

首先,我们在前端缺乏积累,没有沉淀,专业的前端技术的积累是从去年才开始的,同时,在前端也缺乏支撑与高手,所以,走起来比较困难。同时,前端人员培养的较少,一个原因是对前端了解太少,另外一个原因就是对前端与后端的工作比例估计不足。所幸,我们在这一年也在前端有了很快的进步,培养了几个优秀的开发人员,有意识的解决了前端的用户体验,这都是可喜的。今年,需要更进一步,专业化。

其次,我们在后端发展的不够宽,后端的知识体系已经比较完善,但是,很多应用点都没有涉及到。同时,对现有技术框架的理解都不够深入,太浮躁。我们目前的设计团队在解决互联网高并发、大数据量的存取上经验与能力都还不足,需要正视这些问题。后端技术的发展需要更加的精进,以解决实际存在的问题为主。

最后,我们在前端、后端都缺乏熟练工,这会影响到开发的速度,同时,也不利于后期技术的研究。