理解网站开发:不懂技术如何做决策?

file

通常来讲,程序员不仅仅需要拥有技术方面的知识储备,往往需要对公司的业务产品流程有很多的了解和思考,反向思考一下,那是不是你的 Boss、产品经理或者客户是不是也应该了解一下技术如何执行的呢,双方都了解彼此的一些概念,说不定更有助于双方的合作呢。

如果你是开发者,也可以基于这篇文章,给你们业务团队做一个 Presentation 。

为什么通过 Laravel 来讲这件事情,很简单,我是一名 Laravel 开发者,欢迎关注 Laravel China 社区

Why should I care ?

作为 Boss 或者客户,你可能觉得自己不应该关系技术方面的事情,这毕竟是你花了很多钱雇佣来的程序员应该关心的事情,但是:

Some technical knowledge is really powerful.

理解什么是 Laravel,有助于你更快速、高效、低风险的管理一个项目,因为你的决策会变的更加高效,基于知识和逻辑推理,而不是有人告诉你该怎么做之类的。也会让你更加明智的为项目选择开发人员,你也可以读一读我之前整理的一篇文章:理解程序员并不是一项简单的任务, 即使你当过程序员

当然不仅仅是 Laravel,我还会分享给你很多有趣的事情。

技术开发领域通常会有很多术语和复杂的概念,不过你并不用担心,但是我会尽量减少技术术语,避免陷入知识的诅咒陷阱,用客户的语言向你讲述一个关于技术的故事。毕竟这也是工程师必须具备的技能,用客户的语言讲述产品或者功能,以保证客户和开发团队都在相同的上下文环境。

前端、后端和全栈有什么区别?

每个网站项目都包含两个部分:

  • 不可见的「后端」:定义项目/业务如何运行的逻辑代码。
  • 可见的「前端」:定义你的产品看起来如何的代码。

这是基本的区别,让我们先不要搞得太复杂。先来简单了解一下基本的一些前后端用的编程语言和技术:

后端语言常见的有 PHP, Ruby, Python, Java, Node 等等,通常你需要为项目选择一门语言。

前端语言的术语稍微有点复杂:

  • HTML : 定义你的网站布局的标记语言(甚至算不上一门编程语言)。
  • CSS 是用来为网站定义颜色、字体、边距等等设计元素,主要用于为你的项目添加好看的主题或样式。
  • JavaScript 这是前端真正使用到的编程语言,通常你看到网站上有趣的动效就是使用它来制作,现在 JavaScript 不仅被用来做动效,也能用来处理更复杂的一些事物。

OK,这是一些基本的编程语言,他们通常都有自己不同的编程框架或者延伸的编程语言,稍后我们还会讨论,现在不用太深究,这些已经足够让你对前后端的区别有个基本了解。

需要提及的是,尽管前端和后端都是在写代码,但是它们需要不同的思维方式和技巧,后端更关注逻辑,前端更关注视觉上的东西,通常来讲需要两个不同的工程师来搞定不同的开发工作。

有另外一个选择是,全栈工程师,他们对前端和后端都有很熟练的经验,或者至少他们声称自己可以胜任。从经验上来看,这些工程师还是会偏重于某个方面,比如对后端开发十分擅长,对前端开发也可以轻松胜任,或者相反。使用全栈工程师有利有弊,需要根据项目具体的预算和对项目的质量要求做衡量。

什么是框架(Framework)?

你可能理解编程语言的概念,就是约束你如何去写代码的规则集,就像我们的母语语法一样。

在编程语言演化的过程当中,开发者看到一些重复的代码一次又一次的出现,这对开发人员是一种耻辱,所以他们尝试用很多种方式将重复的代码进行打包(Package),慢慢地,一些类、代码片段和常用的代码包被合并在一起,形成了一个框架(Framework)

简单来说,一个框架就是一些预先写好的代码集合,去避免重新创造轮子以及为每一个新项目写一次同样的代码。

比如,登录/登出是每一个网站都需要的基本功能,代码的文件夹组织结构,网址的解析和调用(程序员成为「路由」)等等,已经被完成过很多次,所以为什么我们不选择从一个框架为蓝图开发新的项目呢?

所以我们开始谈到 Laravel,现在你比较容易理解,Laravel 是一个基于 PHP 编程语言的框架。其他比较流行的 PHP 框架:Symfony, Zend Framework, CodeIgniter, Yii, Cake PHP, Phalcon。这些框架之间的差异还是蛮大的,而且它们也是市场上相互的竞争者,为框架流行程度和社区人数而战。我们很高兴的说 Laravel 是目前的领导者,最接近的竞争对手是 Symfony。

为什么选择 Laravel 而不是 WordPress?

这是两个巨大差异但是看起来很像的两个事物:编程框架内容管理系统(CMS),先来聊聊它们有什么差异:

CMS(Content Management System) 是一个系统用来管理系统,内容管理人员通常来并不是开发人员,他们比较关心图片、文字等内容的生成,CMS 的目的是为了提供给他们一个更好的内容产生工具。

编程框架需要开发者花时间在上面写代码,为业务定制功能。

换句话来讲,你可以部署一个 CMS 到你自己的服务器,即使你没有任何技术能力。内容管理系统通常会有可视化的安装、拖拽的 UI 接口,以及简单易懂的站点设置。但是如果使用框架,你就需要基于框架为需要实现的功能写代码。

  • 流行的一些 CMSs:WordPress, Drupal, Joomla, OctoberCMS
  • 流行的一些 Frameworks:Laravel, Symfony, Django

所以,问题来了,如果你想开始一个网站项目,什么时候需要选择 CMS,什么时候应该选择框架从头开发呢?这有点复杂,但比较简单的解释:如果你的项目核心是内容(比如博客、新闻门户、公司资讯等等),可以选择 CMS。如果你的项目设计到很多用户产生的数据(个人信息、消息通知、支付数据),选择框架开发或许是更好的选择。

为什么选择 Laravel,而不是其他框架?

我们来聊一聊框架之间的「圣战」,不开玩笑,开发人员确实会为他们各自使用的框架而战。

一般来说,实际上并没有任何差别。这取决于一个特定的开发者对于一个框架的熟悉程度。一个使用 Laravel 创建了 10 个项目的开发者开发速度和质量肯定比一个只使用了 Symfony 开发了 1~2 个项目经验的开发者好。

在框架世界里面有个简单的分类,「Full Framework 」(上面提到的这些)和「Micro frameworks」,比如 Laravel 的精简版本 Lumen、Slim、Silex、Flight。除了这些 micro-frameworks,任何与时俱进的现代框架都可以很好的帮你完成开发。

谈到与时俱进,这可能是这个问题需要重要考虑的因素。你可能计划开启一个项目并且计划在将来持续去更新维护它,你需要一个发展趋势良好和强大的社区支持的编程框架来支持他。目前 PHP 市场有两个强力的领导者 Laravel 和 Symfony,其他框架不流行的原因各有不同,CodeIgniter 已被它的创造者遗弃,有些框架过于复杂(Zend Framework),而有些社区力量过于弱小(Yii, Cake PHP)。

现在还有一个问题,如何在两个市场领导者之间做出选择:Laravel or Symfony?他们两者之间主要的区别在于严格的代码结构。Symfony 在代码如何编写方面要严格的多,因此在企业应用程序中更受欢迎,而 Laravel 把更多的「自由」给开发人员,因此在比较小型的 Web Apps 和创业公司更受欢迎,具有较低的开发市场入门门槛。

因此,从成本上考虑,Symfony 的开发者会比较昂贵,相对于 Laravel,在市场上找到一个专业的 Symfony 工程师比较困难。

但是无论是为项目选择哪个框架,在框架领域找到合适的开发者更为重要,而不是纠结于框架本身。

有哪些典型的基于 Laravel 的网站?

有哪些项目更适合使用 Laravel 开发,答案基于个人的经验、服务的客户以及招聘信息。

  • Two-sided user-based marketplaces

有很多相似的项目通常是一个用户群体向另外一个用户群体订购一些东西,可能是服务、或者产品、或者只是在线交流。比如国内的众包平台,对接专业人士(程序员、产品经理、设计师)和需求方。

  • 数据管理和后台管理类型的项目

如果你的公司需要管理一些数据,而现成的一些 CRM or ERP 系统并不能满足你的需求(或者对你来,使用它们太过于复杂)。可以使用 Laravel 构建自己的管理系统,比如进行贷款管理、活动管理、文件提交流程处理、或者订单流程管理等。

  • 技术整合和 API 类型的项目

现在的技术环境,有大量的第三方 API 可以使用,我们可以用它们来完成很多和外部交互的功能。比如我们可以使用微博的 API 自动发布微博,使用微信公众号的 API 进行公众号管理。我们也可以对外部的 API 进行打包、集成来创建自己的 API 服务,提供给自己的移动应用程序或其他网站使用。

还会有很多类型的项目在诞生,但是目前来看,市场上主要是这三个类型的项目。

未完成翻译部分

  • 代码托管、服务器和部署
    • Why should I care as a client?
    • What is shared hosting and what is a dedicated server? What is a version control system?
    • GitHub vs BitBucket? What is deployment and how does is work in Laravel?
    • Additional tools/services for Laravel deployment
    • The process of testing a project
    • Who is responsible for server maintenance and backups?
    • What is an API and what are integrations?
  • 项目管理
    • Why this chapter here?
    • How to prepare a project specification for developer(s)?
    • Recommended tools for successful projects
    • What is “Agile”, “MVP” and why understanding it is crucial How to manage remote freelancers
    • How to launch and finish a web project successfully?

参考书籍

优帆远扬 —— 创造不息,交付不止