最近打算出一门与金融相关的编程课,邀请感兴趣的人来做试听,顺便提提建议
title: 最近打算出一门与金融相关的编程课,邀请感兴趣的人来做试听,顺便提提建议
前几周,被某金融云平台的一个运营人员找到,问我想不想出一门编程课,有课时费,但要围绕他们的产品来讲。
我思考了一下,反正我日常也在金融公司写码,他们的产品在业内评价也不错,如果能出一门金融相关的课,通过实战,引导想学编程的人入坑,也不错!
如何设计这门课程?
-
这门课是开源的,源码会托管到Github, 程序注释会尽可能详尽,讲义用Markdown来写, 然后转为HTML, 对外展示为网页;
-
运营人员要求必须输出视频,视频主要展示一下程序运行的效果,以及运用到编程技术点。
-
课程定位为一门全栈课程, 用Node.js 作为主力语言,虽然Python也很好,但Node.js做全栈有天然的优势,只要搞定一套js语法,学习者就能快速掌握完整的全栈技术。
-
课程会围绕某金融云提供的API接口进行大量调用,充当课程数据源, zhaoolee会编码设计一些页面,帮学习者搞定前端的知识;后端的API接口调用,也会有详细的源码,如果你未来进入一家金融公司,进行接入开发,这些后端源码甚至可以直接拿来用;
-
我会将调用API请求的数据缓存到项目文件中,只要你在命令行输入
npm run dev
,那些缓存的数据即可成为一个数据服务,供你学习, 即使你没有购买金融云的服务,也能享用这套课程。 -
这套课程,能让外行人了解一些金融知识,也能学一学编程,效果好的话,我会长期更新,就像Chrome插件英雄榜一样。
如何让课程更通俗易懂?
职业程序员教小白编程,并不容易,程序员认为理所应当的知识,在小白看来,会异常晦涩难懂,而程序员做久了,也逐渐忘记了初学编程时的各种问题,向初学者传递知识变得困难,也就是所谓的知识的诅咒。应对知识诅咒的策略也很简单,把完成的讲义,让初学者们过一遍,针对初学者们提出的问题,进行注解,当初学者能看懂时,这篇讲义也便合格了。
我需要一批对编程感兴趣的小伙伴,我可以当你的老师,但你要为我的讲义提问题,我完善了讲义,你获得了知识;我大概需要10个左右的学生,如果你对我将要出的课程感兴趣,就到公众号0加1 菜单栏最右侧,通过二维码联系我吧,备注长期学编程,凑够10人我就建个群。这个课程有点儿门槛的,第一堂课的代码我写的差不多了,这是后台代码部分,感兴趣的小伙伴可以通过代码,先做一下心理建设。
const https = require('https');
const express = require('express');
const app = express()
app.use(express.static('html'))
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
const port = 3000;
const key = "5ac2e1ee-789e-********";
const secret = "a666cbf1-9137-********";
// 文档地址 https://www.hs.net/wiki/api/983_gildataastock_v1_commontable_tadingday.html
// 示例访问链接 http://localhost:3000/gildataastock/v1/commontable/tadingday?end_date=2021-03-01&start_date=2021-01-01&secu_market=77
app.get('/gildataastock/v1/commontable/tadingday', (req, res) => {
console.log('req==>>', req);
const secu_market = req.query.secu_market;
const start_date = req.query.start_date;
const end_date = req.query.end_date;
const Authorization = "Basic " + Buffer.from(key+":"+secret).toString('base64')
console.log("==Authorization==>>", Authorization);
const postData = "grant_type=client_credentials";
let token_req = https.request({
hostname: 'sandbox.hscloud.cn',
path: '/oauth2/oauth2/token',
method: "POST",
headers : {
'Authorization': Authorization,
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
},
}, (token_res)=>{
token_res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
const token_info = JSON.parse(chunk);
const access_token = token_info["access_token"];
const token_type = token_info["token_type"]
// 开始请求
const tadingday_post_data = `secu_market=${secu_market}&start_date=${start_date}&end_date=${end_date}`;
const tadingday_authorization = token_type +" " + access_token;
console.log('==tadingday_authorization==>>', tadingday_authorization);
const tadingday_req = https.request({
method: "POST",
hostname: 'sandbox.hscloud.cn',
path: '/gildataastock/v1/commontable/tadingday',
headers: {
"Authorization": tadingday_authorization,
'Content-Type' : 'application/x-www-form-urlencoded',
'Content-Length': tadingday_post_data.length
}
}, (tadingday_res)=>{
tadingday_res.on('data', (res_data) => {
console.log(`BODY: ${res_data}`);
res_data = JSON.parse(res_data);
console.log('=res_data==>>', res_data)
res.send(res_data)
})
tadingday_res.on('end', () => {
console.log('No more data in response.');
});
})
tadingday_req.write(tadingday_post_data);
tadingday_req.end();
});
token_req.on('end', () => {
console.log('No more data in response.');
});
})
token_req.write(postData);
token_req.end();
})
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})
发表回复