说Python简单,一般是在说Python用起来简单,用Python并不用变成程序员。

其中有一个很重要的原因是标准库和第三方库接口比较高级,设计自然。文档是写给陌生人看的,指向比较直接。这样想做什么事,找一个相关的流行包就可以开工了(经常标准库都会告诉你去哪找),遇到问题也没太大压力。能够让你专注自己应该做的工作,该科研科研,该分析分析,该攻城攻城。

而其他高级语言的库经常还是很底层的。文档像是写给同事看的,求的是体系完备,要逼迫用户先搞明白背景知识才能好好干活。一不小心你就变成程序员了。

---- 没有对比,就没有伤害 ----

想通过程序控制云上的一个服务(需要一键切换、关机退出等懒人功能),其中非常简单的一个任务-关闭服务:

# 平台API是这么说的:
curl -XPUT -H "username: " -H "Authorization: token " "https://api.tenxcloud.com/api/v2/clusters/{cluster-id}/services/batch-stop" -d '{"services": ["your-service-name"]}'

Python:

看一下标准库,告诉你:别看了,推荐更高级的包requests:

然后request包文档长成这样,问题就解决了:

# Python3 requests:跟curl区别不大
import requests
req = requests.put("https://api.tenxcloud.com/api/v2/clusters/{cluster-id}/services/batch-stop", headers={"username":"","Authorization": "token "}, data='{"services": [""]')
# 其实标准库也没多复杂,为什么要“妄自菲薄”呢
from urllib.request import urlopen, Request
req = urlopen(
Request("https://api.tenxcloud.com/api/v2/clusters/CID-ff8a9093353f/services/batch-stop",
data=b'{"services": ["socksoffice"]}',
headers={"username":"","Authorization": "token "},method="PUT")
)

然后你就完活可以走人了,对http还是什么也不知道。照猫画虎,Time - 5m HTTP +1XP

C#:

到了C#,文档约等于链接列表。最后你还得去看stackoverflow才能找找线索从哪开始看,然而并没有一次说明白的例子。

文档下钻到GetRequestStream,还在教你怎么设定stream长度,编码写Bytes。

写好代码,抛出一个无行号的System.dll错误。好吧,只好做断点调试,定位到还有cache的设定问题。回到stackoverflow找到解决方法,终于...

//C#:学会如何一步一步做好Header\Method\CachePolicy\RequestStream
using System.Net;
using System.IO;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("username: ");
request.Headers.Add("Authorization: token ");
request.Method = "PUT";
//Define a cache policy for this request only. 请学习cacherequest.CachePolicy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.BypassCache);
request.ContentType = "application/json;charset=utf-8";
// 请学习requeststream是怎么回事,write管什么,flush管什么using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(data);
streamWriter.Flush();
}

恭喜您,Time -50m, HTTP +10XP。喂,我根本没想点这个技能点好么,我只是想懒一下