最近打算出一门与金融相关的编程课,邀请感兴趣的人来做试听,顺便提提建议


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}`)
})

code

本文永久更新地址(欢迎来读留言,写评论):

https://www.v2fy.com/p/2021-10-26-program-1635255662000