读书学习计划的重要性

列出读书或者学习计划对真正的执行非常重要。

下图中,前面的括号中是真实的完成时间,往后面一点的日期是当时做的计划

image

这个课程在看到40多节课的时候,明显自己的拖延症犯了,有时候想玩一会儿,有时候就自己说服自己看不看都一样。

后来我想着,列个时间表,一直放在滴答清单上面,也能随时提醒自己该做的事儿还没做完。

于是就写了个简单的 php 脚本,把计划列了出来:

<?php

$dict = [];
$date = 1;
foreach (range(46, 152) as $value) {
    $dict[] = $value;
    
    if (count($dict) == 5 || $value == 152) {
        $curDate = date('Y-m-d', strtotime('+' . $date . ' days'));
        $date++;
        echo $curDate . ' - linux-网络编程ep_' . implode('、', $dict) . PHP_EOL;
        $dict = [];
    }
}

在滴答清单的任务收集框中粘贴进去,就会创建很多任务,并且提醒日期会自动识别

image

做完这些之后,虽然最后延迟了一些时间全部完成,但是最终还是都看完了。没有像以前看书或者视频的时候,看着看着就丢失了进度,然后就做别的事情去了。

有了这次的经验,我又选定了另外一个目标:

在网上找了一本 HTTP RFC 的中文翻译,一天看 10 页,最终虽然也延迟了两天,但是还是看完了。当全部勾选了的时候,还是很有成就感的。在对抗拖延症的路上又走了一大步。

image

后来又用 go 语言实现了一个工具版本的

package main

import (
	"flag"
	"fmt"
	"os"
	"time"
)

var (
	planName, startDate        string
	start, end, step, dateStep int
)

func main() {
	parseFlag()
	checkArgs()
	genPlanText()
}

func genPlanText() {
	firstDateTime, _ := time.Parse("2006-01-02", startDate)
	i := start

	for {
		j := i + step

		if j > end {
			j = end
		} else {
			j -= 1
		}

		fmt.Println(fmt.Sprintf("%s | %s | %d-%d", firstDateTime.Format("2006-01-02"), planName, i, j))

		firstDateTime = firstDateTime.AddDate(0, 0, dateStep)

		i += step
		if i > end {
			break
		}
	}

}

func checkArgs() {
	if len(planName) <= 5 {
		fmt.Println("error, planName is empty")
		os.Exit(1)
	}

	if end <= 0 {
		fmt.Println("end is invalid")
		os.Exit(1)
	}

	if step <= 0 {
		step = 1
	}

	if start <= 0 {
		start = 1
	}

	if start >= end {
		fmt.Println("end should larger than start")
		os.Exit(1)
	}

	if len(startDate) < 0 {
		startDate = time.Now().Format("2006-01-02")
	}
}

func parseFlag() {

	// 命令行参数
	flag.StringVar(&planName, "p", "", "计划名称")
	flag.IntVar(&start, "s", 1, "开始点")
	flag.IntVar(&end, "e", 1, "结束点")
	flag.IntVar(&step, "t", 1, "步长")
	flag.IntVar(&dateStep, "dt", 1, "日期步长")
	flag.StringVar(&startDate, "f", time.Now().Format("2006-01-02"), "开始时间,格式 2006-01-02, 默认今天")

	flag.Parse()
}

使用方式:


 ./plan_gen -p 阅读正面管教 -s 71 -e 262 -t 20 -dt 0

Usage of ./plan_gen:
  -dt int
        日期步长 (default 1)
  -e int
        结束点 (default 1)
  -f string
        开始时间,格式 2006-01-02, 默认今天 (default "2022-06-21")
  -p string
        计划名称
  -s int
        开始点 (default 1)
  -t int
        步长 (default 1)

生成出来的计划如下:

2022-06-21 | 阅读正面管教 | 71-90
2022-06-22 | 阅读正面管教 | 91-110
2022-06-23 | 阅读正面管教 | 111-130
2022-06-24 | 阅读正面管教 | 131-150
2022-06-25 | 阅读正面管教 | 151-170
2022-06-26 | 阅读正面管教 | 171-190
2022-06-27 | 阅读正面管教 | 191-210
2022-06-28 | 阅读正面管教 | 211-230
2022-06-29 | 阅读正面管教 | 231-250
2022-06-30 | 阅读正面管教 | 251-262
posted @ 2022-06-19 14:53  吴丹阳-V  阅读(51)  评论(0编辑  收藏  举报