Python 开发及周边技术介绍

发展历程

创始人

Python 的创始人为吉多·范罗苏姆,1989年的圣诞节期间,他为了在打发时间,决心开发一个新的脚本解释编程。之所以选中Python作为编程的名字,是因为他是BBC电视剧——蒙提·派森的飞行马戏团的爱好者。Python 发行时间为 1991 年, 即 29 年前。

2005年12月,吉多·范罗苏姆加入Google。2018年辞去了 Python 的 BDFL(Benevolent Dictator for Life)。2019年10月30日,Guido van Rossum 在推特公布了自己从 Dropbox 公司离职的消息,并表示已经退休。2020年11月13日,64岁的 Python 语言的创建者吉多·范罗苏姆发推表示,退休生活太无聊,决定入职微软。

使用概况

google 搜索趋势

以下为 2004 年至今的 google 中国的 “python” 关键字搜索趋势。可以看出从 2014 年开始,一直处于增长的趋势。

百度搜索趋势

以下为 2011年至今的 百度的 “python” 关键字搜索趋势。可以看出从 2017 年开始,一直处于增长的趋势。

学习路径

官网文档

官网地址: https://www.python.org/ 、官网文档:https://docs.python.org/3/

推荐文档

文档名称 文档地址 推荐指数(10分)
廖雪峰博客 廖雪峰博客 8
菜鸟教程 菜鸟教程 7
github.com/TwoWater/Python github.com/TwoWater/Python 8
知乎: 编程零基础应当如何开始学习 Python 知乎: 编程零基础应当如何开始学习 Python 8

更多文档可参考 Python 博客网站资源

推荐书籍

书籍名称 书籍地址 适用程度
Python编程 Python编程 入门
Python基础教程(第2版) Python基础教程(第2版) 入门
Effective Python Effective Python 进阶
Python Cookbook(第3版) Python Cookbook(第3版) 进阶

更多书籍可参考豆瓣书单

使用领域

问题1:生活中你接触到过 “人工智能” 的产品吗?RPA 涉及上述领域中的哪一类?

问题2:网络爬虫是好是坏?有相关法律约束吗?

问题3:你眼中的 Web 开发是什么样子的?

问题4:你知道 DevOps 吗?能在 github 上搜索出相关的 DevOps 项目吗?

人工智能

感知能力

指的是人类透过感官所收到环境的刺激,察觉消息的能力,简单的说就是人类五官的看、听、说、读、写等能力,学习人类的感知能力是AI目前主要的焦点之一,包括:

  • “看”:电脑视觉(Computer Vision)、图像识别(Image Recognition)、人脸识别(Face Recognition)、对象侦测(Object Detection)。
  • “听”:语音识别(Sound Recognition)。
  • “读”:自然语言处理(Natural Language Processing,NLP)、语音转换文本(Speech-to-Text)。
  • “写”:机器翻译(Machine Translation)。
  • “说”:语音生成(Sound Generation)、文本转换语音(Text-to-Speech)。

认知能力(Cognition)

指的是人类透过学习、判断、分析等等心理活动来了解消息、获取知识的过程与能力,对人类认知的模仿与学习也是目前AI第二个焦点领域,主要包括:

  • 分析识别能力:例如医学图像分析、产品推荐、垃圾邮件识别、法律案件分析、犯罪侦测、信用风险分析、消费行为分析等。
  • 预测能力:例如AI运行的预防性维修(Predictive Maintenance)、智能天然灾害预测与防治。
  • 判断能力:例如AI下围棋、自动驾驶车、健保诈欺判断、癌症判断等。
  • 学习能力:例如机器学习、深度学习、增强式学习等等各种学习方法。

网络爬虫

网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引。网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引&action=edit&redlink=1)供用户搜索。爬虫访问网站的过程会消耗目标系统资源。不少网络系统并不默许爬虫工作。因此在访问大量页面时,爬虫需要考虑到规划、负载,还需要讲“礼貌”。 不愿意被爬虫访问、被爬虫主人知晓的公开站点可以使用 robots.txt 文件之类的方法避免访问。这个文件可以要求机器人只对网站的一部分进行索引,或完全不作处理。

Web 开发

Web 开发主要是基于浏览器的应用程序开发,这也是 Web 应用程序开发的基础,比如淘宝、京东、当当网等。Web 开发在近年来,随着本身技术的突破以及移动设备的普及,基于 Web 领域的开发,也出现了明确的岗位职责分工,一个 Web 互联网产品中,基本上会分为 Web UI 设计、Web 前端开发以及 Web后端开发。对于大型的互联网公司,还会分独立的 Web 架构开发组,专门负责 Web 框架的维护更新与迭代。

运维开发

DevOpsDevelopment和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

DevOps的引入能对产品交付、测试、功能开发和维护(包括曾经罕见但如今已屡见不鲜的 “热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”,例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。

Web 开发

C/S 架构和 B/S 架构

CS 即 Client/Server(客户机/服务器)结构,C/S 结构在技能上非常成熟,它的重要特征就是交互性强、拥有安全的存取形式、网络通信数量低、响应速度快、利于处置大量数据。可是这个结构的程序就是针对性开发,变更不够灵活,维护与管理的难度较大。常常只局限在小型局域网,不利于扩展。而且,因为这个结构的每台客户机全部须要安装相对应的客户端程序,分布功能弱并且兼容性差,不可以完成迅速部署安装与配置,因为这样缺少通用性,拥有比较大的局限性。请求拥有肯定专业水准的技能人员去结束。
BS 即 Browser/Server(浏览器/服务器)结构,就是只安装维护一个服务器(Server),而客户端选用浏览器(Browse)运行软件。B/S 结构应用程序相对于传统的C/S结构应用程序就是一个特别大的进步。 B/S 结构的重要特征就是分布性强、维护方便、开发简单并且共享性强、总体拥有费用低。但数据安全性问题、对服务器需要过高、数据传输速度慢、软件的个性化特征明显减少,这些缺点就是有目共睹的,难以完成传统形式下的特殊功能请求。比如通过浏览器实行大量的数据输入或实行报表的应答、专用性打印输出全部相对比较困难与不便。另外,完成复杂的应用构造有较大的困难。

前后端分离

架构分离的本质: 所谓架构设计,实际上是如何合理的对现实的人力架构进行系统映射,以便最大限度的提高整个公司(组织)的运行效率

任何系统架构设计,实际上是对组织结构在系统上进行映射,前后端分离,就是在对前端开发人员和后端开发人员的工作进行解耦,尽量减少他她们之间的交流成本,帮助他她们更能专注于自己擅长的工作。

REST/GraphQL

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

参考信息:解读GraphQL(一): WHAT & WHYGraphQL 官网

前端框架

前端技术日新月异,大致由 Angular、React、Vue 三分天下,Vue.js 是轻量级的开发框架,很适合开发小规模灵活的 Web 应用程序;而 Angular 尽管学习曲线较为陡峭,但却是构建完整复杂应用的好选择。

跨平台解决方案: 目前市场上已经出现了很多跨平台的应用,比如 uni-app,React Native 等。以此来实现一套代码多个平台可以运行。

参考地址:angular.io, 2018前端框架深度抉择, react 中文文档Vue 中文文档React Native, uni-app

Python Web 框架

FlaskFlask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎Flask使用BSD授权。2004年,一群来自世界各地的Python热衷者组成了Pocoo。Flask的作者是来自Pocoo的 Armin Ronacher。本来只是作者的一个愚人节玩笑,不过后来大受欢迎,进而成为一个正式的项目。

DjangoDjango是一个开放源代码Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型(Model),视图(View)和模板(Template)。它在开发初期用于管理劳伦斯出版集团旗下的一些以新闻为主的网站。

Docker/K8s/K3s

Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。

k3s 是史上最轻量级Kubernetes。k3s 是 rancher 开源的一个 Kubernetes 发行版,从名字上就可以看出 k3s 相对 k8s 做了很多裁剪和优化,二进制程序不足 50MB,占用资源更少,只需要 512MB 内存即可运行。

微服务

微服务是一种以业务功能为主的服务设计概念,每一个服务都具有自主运行的业务功能,对外开放不受语言限制的 API (最常用的是 HTTP),应用程序则是由一个或多个微服务组成。

微服务的另一个对比是单体式应用程序。单体式应用表示一个应用程序内包含了所有需要的业务功能,并且使用像主从式架构 (Client/Server) 或是多层次架构 (N-tier) 实现,虽然它也是能以分布式应用程序来实现,但是在单体式应用内,每一个业务功能是不可分割的。若要对单体式应用进行扩展则必须将整个应用程序都放到新的运算资源(如:虚拟机) 内,但事实上应用程序中最吃资源、需要运算资源的仅有某个业务部分(例如跑分析报表或是数学算法分析),但因为单体式应用无法分割该部分,因此无形中会有大量的资源浪费的现象。

常见 Web 安全

  1. 购物秒杀你遇到过什么情况?不能支付?没有抢到?
  2. 为什么 12306 的验证码这么复杂,能不能去掉?

  3. 微博出现热点新闻为什么会宕机?

  4. CORS、XSS

Python Flask Web 开发

Flask 的理念是为所有应用建立一个良好的基础,其余的一切都取决于你自己或者扩展。一个最小的 Flask 应用如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

参考:Flask 官方文档

参考资料来源

github: https://github.com/

angular.io:https://angular.io/

知乎:https://www.zhihu.com/

GraphQL 官网:https://graphql.cn/

维基百科:https://zh.wikipedia.org/

Vue 中文文档:https://cn.vuejs.org/

菜鸟教程:https://www.runoob.com/

uni-app:https://uniapp.dcloud.net.cn/

React Native:https://www.reactnative.cn/

react 中文文档:https://react.docschina.org/

Flask 官方文档:https://dormousehole.readthedocs.io/

解读GraphQL(一): WHAT & WHY:https://zhuanlan.zhihu.com/p/26522359

2018前端框架深度抉择:http://www.harleyzhuge.com/2018/11/09/2018%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E6%B7%B1%E5%BA%A6%E6%8A%89%E6%8B%A9/