C++ / Python 开发人员了解 Web 开发世界的指南

Guidance for C++ / Python developer to understand the web dev world

我已经编程好几年了。 到目前为止,我主要专注于编写 运行 在控制台内或使用 GUI 的“普通”应用程序,有时还编写与硬件组件(例如传感器/参与者/...)交互的应用程序。 在这段时间里,我了解了很多很棒的编程原则和工具,例如面向对象、模块化、单元测试、测试驱动开发、设计模式、代码分析、..

此外,我还拥有一些关于托管 wordpress 博客、运行在 nginx 网络服务器上创建静态网站以及编写一些小型 php 表单的初步经验。但我觉得所有这些网络开发主题仍然有太多的魔力。我想填补这一空白,更多地了解所有这些相关的脚本/编程语言和技术。 (因为我讨厌,当我不明白事情是如何运作的时候 :D :D ) 我从 udemy 的一些在线“Web 开发训练营”课程开始,以获得粗略的概述。这花了好几天时间,我认为 HTML、CSS 和 Javascript 的 DOM 操作/动画现在对我来说很清楚了。我还听说过很多关于 NodeJS 及其所有衍生语言和数据库的信息,例如 Mongo-DB。但是我还是觉得有很多不明白的地方。

为了更好地理解我想开发一些小型网络应用程序。没什么特别的,只是一些你必须登录的网站能够生成一些数据,然后这些数据会保存到数据库中,一旦你再次登录,你就可以再次看到这些数据。 我首先开始在 Javascript 中开发一些 类 来表示您登录时浏览器中的数据。但我很快意识到 Javascript 可以 运行浏览器非常有限,已经用于单元测试和模块化成单独的文件,这些文件相互包含我实际上需要做一些疯狂的变通或使用其他服务器端语言,如 nodejs / php / ...。 经过一段时间的编码后,我决定退后一步,尝试了解 Web 应用程序的基本设计模式,而不是 运行长时间进入错误的方向。

我的问题是:

另外我觉得我从其他编程语言中学到的一些东西在 javascript / nodejs 这样的语言中并不那么容易。我愿意花时间和精力学习所有这些东西,但我也想保持我从 C++/ Python。另一方面,我也想知道我脑海中的这些模式是否可能只是在现代网络开发中完全无用的边界? (例如打字、面向对象、模块化/拆分代码以提高可重用性)

您认为我走错了什么方向,或者我只是使用了错误的语言?

我希望冗长的文字不会让所有人失望/阻止所有人回答我:o 我真的很感谢你的帮助和指导,让我更好地理解一切,不要重复很多其他人已经做错的事情;)

BR,mezorian

首先,大多数问题都非常主观(至少答案是),因此您的问题可能会被关闭。所以我会 post 在完成之前回答我的问题,然后再展开。

首先制定成为 Web 开发人员的良好路线图。我喜欢它主要是因为它展示了网络开发世界的疯狂(不要震惊!):https://levelup.gitconnected.com/the-2020-web-developer-roadmap-76503ddfb327


正在尝试回答您的一些问题(答案是我的意见):

Is there some typical way to go / best practice while developing web-applications?

我很想说,世界上有多少 Web 开发人员,就有多少种 Web 开发方法,但这可能有点夸张。如果您需要一些指南,我会选择一个主要的 Web 框架并学习它们进行 Web 开发的方式。对于 Web 框架,我指的是从 JS 框架开始一直到静态站点生成器等的各种框架。它们都有自己的生态系统和自己的规则。

What are the typical key players? I know there is the difference between front-end, back-end and databases.

(个人意见)我在后端使用 Go。我喜欢它,因为它在疯狂的网络开发者选择世界中带回了一些简单性。因为你知道 C,Go 对你来说可能很容易。它有静态类型、结构等,但不需要手动管理你的内存。它也比 Web 开发中使用的大多数其他后端语言(Python、NodeJS、PHP、Ruby 等)快得多。

前端我用过原生JS,jQuery,React,Vue等。我还在等待能再次让事情变得简单的东西。 Flutter 似乎是一种很好的方法,但它并不是真正的 Web 前端框架(目前)。 (不要用 Flutter 做 public 网站!它们不可索引。)我们会看到它的发展方向。

数据库我不会在这里深入,因为这是另一个大话题。这么说吧,我更喜欢使用多个数据库来发挥它们的特定优势,而不是一个应该擅长任何事情的大数据库。

which code is usually written in back-end / server-side languages?

即使这在很大程度上取决于您的选择(框架和偏好)。有一件事肯定是在后端,那就是安全相关的东西。有经验的用户可以看到您放在前端代码中的任何内容。

除此之外,在某些生态系统中,您无需编写任何后端代码,而是与(云)服务对话,该服务基本上就像一个数据库,顶部有一个具有安全登录的 Web 端点。 (例如 https://firebase.google.com/.)这里将安全相关的内容融入到服务中。

如果两者都做,将业务逻辑保留在后端可能是个好主意。如果前端计算某些东西(为了快速响应),后端应该仔细检查(例如计算购物车中的总数)。但这太笼统了。总会有一些用例需要在前端实现一些业务逻辑。

Do I have to move all business logic into the back-end, also for security reasons or is this maybe also a bad idea because of performance reasons?

性能可能是个问题,但主要是因为往返服务器的往返时间。如果你对每一个微小的信息都这样做,UI 会变得迟钝。您可能想考虑做例如计算客户端。

像 React、Vue 这样的 JS-Frameworks 不从后端请求 html,而是数据并基于该数据客户端构建 html。如果我有一个非常数据驱动的网站/网络应用程序,我会使用它们,尤其是当它依赖于用户时。仅传输数据并根据用户设置和数据在浏览器中为每个站点构建 html,节省大量往返。

如果您担心服务器性能:为了使服务器达到极限,您需要大量使用您的网站才能成为一个问题(至少对于 Go)。如果你到达那里,你仍然可以使用水平缩放(你的服务器的多个实例)来解决这个问题。除非你在一家每天有数百万用户的大公司工作,否则我现在不担心扩展问题。

What programming languages are more or less dead and not to be used in the future?

警告:太过分了!

我会说 PHP 已经死了。与我交谈过的许多猎头都同意我的观点。公司正在拼命寻找 PHP 开发人员,因为许多开发人员正在从 PHP 转向“更酷”的东西。您肯定会找到 PHP 的工作,但可能对您的工作不太满意。对我来说,这也是一家公司真正有多现代的标志(如果 PHP 不是它的主要后端语言(不再))。

Python目前大热。主要是因为人工智能的发展。我不确定这种繁荣是否也出现在 Web 开发中,但我认为不会。我在 Go 之前(5 多年前)和 PHP(8 多年前)之前使用了 Python。我很少得到 Python 网络开发人员的工作机会(至少与 PHP 和 Go 相比)。

Go 是云的语言。它非常适合并发编程,这是 Web 开发中必不可少的部分(每个 http 调用都应同时处理)。它速度快,重量轻,不需要在服务器上安装任何东西 运行(编译成一个没有依赖关系的二进制文件)。

NodeJS:没用过。我不是 Javascript 的粉丝(但它曾经(现在仍然是)浏览器中的唯一选项),所以我从来不喜欢在后端也使用它的想法。

TypeScript:如果您喜欢更结构化的语言,可能是 JavaScript(此处考虑前端)的替代方案。


听起来您想构建一个基于用户的 Web 应用程序,其中的数据由每个用户管理。在那种情况下,我会(可能)这样做:

  • Go 中的后端
  • Go 提供静态文件(启动 html、css、js、图像等)
  • Go 服务器有一个 api 服务数据的端点(例如 REST 风格)
  • 前端的 Vue(或 React)
  • Vue 从 api 请求数据以构建用户特定的内容