
多数没有编程背景的人都会从“编辑推荐”的视角来理解网站和应用。消费者和站点访客看到的都是公司想让他们看到的,包括按钮大小和颜色,以及横幅广告中滚动的图片,乃至着陆页上实际的内容和应用本身。这个视角并不是开发者视角,只是客户(他们想寻找可信、专业、功能完善的站点和应用)和经营者(他们想在客户的需求浮现之前就捕捉到)的视角,是一个非常局限的视角。
就像表演的很大部分都在后台一样,网站和应用的细节也是由后台决定的。对于普通技术用户而言,这些并不吸引人,甚至无法理解。这就是前端和后端编程的区别,即前端为网站或应用的每一位用户创造面对面的体验,而后端则隐藏在幕布之后,拉动扳手,确保用户体验完美无误。
对任何刚接触编程且希望参加在线编程课,以开始自己职业生涯的人来说,了解这些语言的基本情况是选择语言或者决定要专注于哪个编程领域的前提条件。本文尝试介绍一下前端和后端编程的区别,以及怎么积累自己的知识,决定自己应该学习哪门语言。
要理解前后端编程的区别,首先要理解站点渲染
站点渲染是个技术概念,理解这个概念才能更好地理解前端和后端。在最基本的层面上,站点渲染指的就是生成和渲染HTML输出的过程。(HTML是程序员用来编写网页的一种语言。)站点渲染过程可以在客户端完成,也可以在服务端完成,它们跟前端(客户端)和后端(服务端)是同义词。
服务端(后端)渲染
在互联网的早期,服务端(后端)Web开发是创建网站和Web应用的标准方式。消费者或网站访客在打开或操作页面时,都会向支撑网站的服务器发送请求。服务器收到请求后,就会创建响应,再把它发送回浏览器,形式可以是命令或信息。(即使在网站中切换一个新标签页也会有请求和响应。)
当网站在服务器端渲染时,创建HTML页面的所有流程都会在远程的某台服务器上发生。流程包括向数据库发送请求或查询,以及处理浏览器请求的逻辑。这个流程结束前,浏览器本身是空闲的,而一旦从服务器收到数据,浏览器就会立即解释它,并将结果展现在屏幕上。
客户端(前端)渲染
就这么过了好多年,每次打开网页都会看到可怕的沙漏或旋转的圆圈,那表示时间延迟。终于,客户端渲染浮出水面。此时,内容的渲染发生在用户的计算机中,使用的是首选(也就是通用)的Web语言JavaScript。
换个角度看,客户端渲染也意味着服务器只需要整合基本的Web应用。然后,浏览器将负责把应用渲染为HTML,即把信息交付给访客或用户。这也意味着与创建网页相关的逻辑(也就是处理内容怎么展示在用户屏幕上,或者说展示逻辑)是由客户端处理的。
随着Angular和React(它们都是JavaScript开发者的工具,可以提高编码效率,也提供更多功能)等JavaScript库的出现,客户端渲染变得更加流行起来。最近,又出现了一种叫做同构(isomorphic)渲染的新形式。
前端工程师都干什么
由于前端开发涉及图形、视觉展示,也涉及将数据库请求转换为屏幕展示,甚至涉及服务器,因此前端开发也分很多专业领域。
用户体验设计师(UX,User Experience):用户体验设计师专注于访客或用户如何与页面交互,以及如何请求数据。他们的工作是准确预测和度量用户行为(用户会点击哪个按钮,页面初次展现时他们要先看哪里,等等),以便优化前端体验,满足用户需求。UX设计师经常使用预测性分析技术,包括度量网站活跃度,甚至实际观察用户探索网站的过程,目的就是调整网站或协助较大的开发动作。可以把UX设计师想像为Web开发中的质量控制或保障团队。
用户界面设计师(UI,User Interface) :虽然名字听起来相似,用户界面设计师专注于网站或应用的外观,包括访客和用户实际看到的图形、界面。有时候UI设计师需要懂一点HTML和CSS ,但一般不会真的去参与写代码。
前端开发工程师 :前端开发工程师专注于静态网站构建,或者搭建不需要与后端数据库交互的站点。前端工程师常常帮一些公司构建网站,这些网站主要用于展示产品或服务信息,顶多包含一些简单的联系表单或少量动态功能。他们一般都精通HTML、CSS和JavaScript。那后端开发都干什么活呢?
后端开发对于两种站点渲染来说,通常被认为属于“更复杂”的那种。这很大程度上是因为大量信息都要动态生成,而Web应用又需要与数据库重度交互。除了简单的连接,后端还需要处理前端的数据请求,处理业务逻辑,访问其他资源,比如文件服务器或云服务。
后端开发者也会用到软件“栈”,也就是开发工具包,涉及操作系统、Web服务器、框架、语言、编程API等。这些技术栈中有些工具用于渲染服务端网站和Web应用,有的用于创建其他服务供应用访问。一些比较为人熟知的软件栈包括 .NET、MEAN、LAMP,当然远远不止这些。此外,每种技术栈都关联一种编程语言,包括C#、JavaScript、Java、Go、Python、 PHP等。
第三个选项:成为全栈开发者
要成为全栈开发者,必须精通Web开发的各个方面,因为全栈开发者既可以开发在客户端渲染的应用,也可以开发在服务端渲染的应用。全栈开发不仅可以构建动态网站或Web应用,也可以创建可以解决业务问题的更高级应用,包括访问数据库和文件服务器,与云服务集成。
虽然乍一看全栈开发是所有程序员的理想职业,但先不要着急下定论。很多成功又富有创意的程序员,都很开心只专注于某一端。全栈开发拥有更大的自由度和更多机会,但也要求学习更多东西和更多实践才能真正掌握两端。
怎么才能成为前端或后端程序员?
虽然前、后端编程的区别主要取决于要实现什么功能或交付什么需求,但无论选择哪个方向,起点都是一样的。下面是一些建议。
参加在线编程课 :比如Sololearn提供很多流行语言的教程和课程,包括客户端和服务端。对前端来说,可以先学习HTML和CSS;对后端而言,可以学习Python,因为它最近非常流行。
掌握基础后,动手写代码 :在线卖课的网站一般都提供代码试验场(code playgrounds),可以实时编写代码并查看结果,通过构建简单的程序来验证自己在课程中学到的知识。
找一份实习或在有了一定经验之后跟着资深程序员做项目 :编程课虽然可以教会你基础知识,但怎么开发应用满足客户要求,以及理解用户的需求则是另一回事。在学习完基础之后,可以找一个有导师的初级职位,参与一些低风险的项目,不断提升自己的技能,获得更多经验,从而为成为中级或高级开发者奠定基础。
加入语言社区 :所有主流编程语言都有着庞大的开发者群体,他们会在社区中分享经验,帮助他人解决问题。在选定一门语言后,可以用谷歌搜索一下,或者在Github和Stack Overflow上找一找,都能发现帮助自己进一步成长的充足资源。
如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。