」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 全端開發:作為 JavaScript 開發人員學習 Python

全端開發:作為 JavaScript 開發人員學習 Python

發佈於2024-09-02
瀏覽:491

Fullstack Development: Learning Python as JavaScript Developers

旅程开始

我作为前端开发人员已经工作了 8 年多,在过去的 2 年里,我决定重新思考我的职业生涯以及如何成长。我发现前端技术变化频繁:不同的框架、概念以及React类组件和钩子之间的差距。我意识到这一切只是用来表达业务需求和个人愿景的抽象。从那时起,我决定改变自己的职业道路,稍微成为一名全栈开发人员。

众所周知,现在前端开发都是JavaScript,这也是我决定学习Node.js及其主要框架的原因。所有前端开发人员都会以某种方式遇到 Node.js,作为一名高级前端开发人员,您应该能够使用 Express 或其他库在 Node.js 中编写基本端点。经过两年在 Node.js 方面的积极开发,当我的工作在前端和后端之间达到 50/50 时,我发现大多数项目并不局限于一种语言。

Node.js 并不是万能的理想工具,尤其是当您在一家较大的公司工作时。不同的语言提供不同的解决方案或者更适合解决特定的业务案例。这就是为什么我开始研究我可以学习什么作为我的第二后端语言以及我将来如何利用它。

我想分享我的经验,以及为什么我在尝试学习 Rust(主要不是用于 Web 开发)、Swift(主要是移动优先解决方案)和 Golang 之后决定坚持使用 Python。在这里,您将了解为什么我相信 Python 是前端开发人员学习以及如何开始使用它的绝佳机会。

为什么选择Python?

如今,人工智能是每个人都在谈论的话题。在采访中提及它作为你的经历的一部分总是会给你加分。几乎所有公司都在尝试将人工智能融入到他们的产品中,而Python与人工智能和机器学习齐头并进。通过学习 Python,您不仅有机会使用 Django、Flask 和 FastAPI 等框架编写 Web 应用程序,还可以开始使用机器学习和 AI 服务。
一方面,如果你想成为一名更好的程序员,学习 Rust、Go 或 Elixir 等更复杂的语言是个好主意。然而,从职业角度来看,使用你不太熟悉的完全不同的语言成为后端开发人员并不是一件容易的事。

Python 是一种动态类型编程语言。作为一名在类似环境中度过了职业生涯的大部分时间的 JavaScript 开发人员,这不应该让您感到害怕,因为您已经知道代码中会出现哪些类型的问题。
使用Python,您不仅可以开始编写Web应用程序,还可以利用您在AI相关领域的技能,这使Python作为第二语言具有显着的优势。

学习曲线

学习曲线很简单。在Python中,你肯定需要学习一些基本概念。如果您有 JavaScript 经验,那应该不是什么大问题。

这是Python中的代码示例:

import random

def guess_the_number():
    number_to_guess = random.randint(1, 100)
    attempts = 0
    guessed = False

    print("Welcome to the Number Guessing Game!")
    print("I'm thinking of a number between 1 and 100. Can you guess what it is?")

    while not guessed:
        user_guess = int(input("Enter your guess: "))
        attempts  = 1

        if user_guess  number_to_guess:
            print("Too high! Try again.")
        else:
            print(f"Congratulations! You guessed the number {number_to_guess} in {attempts} attempts.")
            guessed = True

guess_the_number()

我认为你不会在这里发现任何太复杂的东西。即使你之前没有学过Python,你也可以在不阅读文档的情况下理解几乎所有的行。

您会注意到的最大区别是 Python 使用缩进来定义代码块而不是花括号。这可能看起来很奇怪,我仍然觉得它有点不寻常,但过了一段时间,你就会习惯它,并且阅读代码变得更容易。

除此之外,Python 中的许多概念与 JavaScript 中的相似。您可以使用 print 来代替 console.log,对于字符串插值,您可以在字符串的开头添加 f 并使用与 JavaScript 中几乎相同的语法。

这是上面代码的 JavaScript 版本:

function guessTheNumber() {
    const numberToGuess = Math.floor(Math.random() * 100)   1;
    let attempts = 0;
    let guessed = false;

    console.log("Welcome to the Number Guessing Game!");
    console.log("I'm thinking of a number between 1 and 100. Can you guess what it is?");

    while (!guessed) {
        const userGuess = parseInt(prompt("Enter your guess: "), 10);
        attempts  ;

        if (userGuess  numberToGuess) {
            console.log("Too high! Try again.");
        } else {
            console.log(`Congratulations! You guessed the number ${numberToGuess} in ${attempts} attempts.`);
            guessed = true;
        }
    }
}

guessTheNumber();

克服障碍:关键概念

你可以在Python中学习很多不同的概念。作为一名 JavaScript 开发人员,我展示了最令人困惑的部分。

基于缩进的语法

作为 JavaScript 开发人员,您可能熟悉如何使用带有 if/else 和其他运算符的代码块。在大多数情况下,您只需添加 {} 即可。 Python 基于缩进的系统可能很棘手。

让我们看看JavaScript代码:

if (role === "admin") {
    const posts = getDraftPosts()

    if (posts.length === 0) {
        throw NotFound()
    }   

    return posts
}

Python 模拟:

if role == "admin":
    posts = get_draft_posts()

    if posts.length == 0:
        raise NotFound()

    return posts

正如您所见,从第一个角度来看,Python 中的块的可读性可能具有挑战性。这就是为什么对我来说避免深层嵌套的块很重要,因为它很难阅读并且很容易错过正确的缩进。请记住,Python 可能会因为缺少缩进而将您的代码附加到错误的代码块。

类型系统

Python 是一种动态类型语言,但我很惊讶地发现 Python 内置了 Types 注释。

def add(x: int, y: int) -> int:
    return x   y

您不需要安装额外的功能,只需安装 Python *3.5 及以上版本中需要的功能即可。*

甚至更复杂的类型也可以描述为等于 Typescript:

# enums
from enum import Enum # import enum for built in lib

class Season(Enum): # extend class to mark it as enum
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 4

print(Season.SPRING.name) # SPRING
print(Season.SPRING.value) # 1

# or generics
def first(container: List[T]) -> T:
    return container[0]

list_two: List[int] = [1, 2, 3]
print(first(list_two)) # 1

要使用这些类型,您不需要安装某些东西或转译此代码。这是我在 JavaScript(至少是 Node.js)中错过的东西。我知道 Node.js 在最近的版本中添加了一些基本类型(请参阅关于 Node.js 内置类型支持的 Medium 帖子),但如果你将它与 Python 进行比较,它现在看起来很差。

Python 的全局解释器锁 (GIL)

JavaScript 使用事件驱动、非阻塞模型,而 Python 的全局解释器锁 (GIL) 在多线程程序中可能是一个令人困惑的概念。
Python 全局解释器锁 (GIL) 是一种确保一次只有一个线程执行 Python 代码的机制。即使你的Python程序有多个线程,由于GIL的存在,一次只能有一个线程执行Python代码。
使用 JavaScript,您可以通过 Web Worker 实现多线程,但在 Python 中,您需要使用额外的库来完成此操作。

Pythonic 心态

JavaScript 的“多种方法来做到这一点”的哲学在 Python 中并不适用,因为 Python 更严格地遵循“应该有一种 - 并且最好只有一种 - 明显的方法来做到这一点”的概念。
在 JavaScript 世界中,每个公司都经常创建自己的代码风格指南,如果它遵循基本的 JavaScript 风格建议,那就很幸运了。实际上,使用分号等做法可能会有很大差异,以至于一个项目可能使用分号,而另一个项目则可能不使用。
在 Python 中,强烈建议遵循 PEP 8(Python 风格指南)中的 Pythonic 原则。本指南概述了如何编写 Python 代码的基本规则。
为了编写更好的代码,必须与社区互动并学习优先考虑清晰性和简单性的惯用 Python 实践。

管理依赖关系和虚拟环境

这部分也可能令人困惑。在 JavaScript 中,您通常可以添加包管理器并开始安装依赖项,不会出现任何问题。然而,Python的pip和虚拟环境可能是新概念。

在Python中,当使用额外的依赖项时,强烈建议使用单独的虚拟环境。在您的环境中使用 pip(Python 相当于 JavaScript 中的 npm)安装依赖项可能会破坏系统实用程序或操作系统本身,因为系统 Python 解释器(随操作系统预装的解释器)由操作系统使用,并且其他系统实用程序。

作为解决方案,您可以使用 venv 模块创建虚拟环境:

python -m venv myenv
myenv\Scripts\activate # for windows
source myenv/bin/activate # for Mac

进入虚拟环境后,您可以安装所有依赖项,不会对您的根环境造成任何问题或危险。

寻找支持和资源

我是如何学习Python的

学习一门新语言总是充满挑战。我开始在一个在线平台上学习Python基础知识,并在那里完成了一些小项目。这是我在学习过程中使用的计划:

  • Python 基础知识。
  • 高级 Python 概念(模块系统、类型、环境、异步代码)。
  • 学习 Django、Flask 和 FastAPI 等最流行框架的基础知识。
  • 使用 FastAPI 编写我的第一个 API 服务器。
  • 添加数据库并学习如何在 Python 中使用数据库。
  • 在免费托管服务上部署应用程序。

哪里可以找到帮助

学习时您可以在 Reddit 社区或 Discord 服务器中找到很多帮助。我主要是 Reddit 用户,建议查找 Python 子版块以及您决定用于第一个应用程序的框架。

记得使用官方文档。在我看来,它看起来势不可挡,大多数时候,如果我陷入一个概念,我会尝试查找相关文章。

请务必阅读 PEP 8 — Python 代码风格指南,您可以在其中找到有关如何编写 Python 代码的基本规则。

回顾与展望

当我回顾自己从 JavaScript 开发人员到拥抱 Python 的旅程时,我并不后悔。这种转变带来了令人兴奋的机会,特别是在人工智能和机器学习领域,我现在在我的项目中广泛利用这些机会,特别是在后端。

展望未来,Python 的可能性是巨大的。无论是 Web 开发、数据科学、自动化,还是深入研究人工智能和机器学习,Python 都提供了强大且多功能的基础来构建和探索新视野。

版本聲明 本文轉載於:https://dev.to/oversec/fullstack-development-learning-python-as-javascript-developers-l6l?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3