读书学习计划的重要性
列出读书或者学习计划对真正的执行非常重要。
下图中,前面的括号中是真实的完成时间,往后面一点的日期是当时做的计划
这个课程在看到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 = [];
}
}
在滴答清单的任务收集框中粘贴进去,就会创建很多任务,并且提醒日期会自动识别
做完这些之后,虽然最后延迟了一些时间全部完成,但是最终还是都看完了。没有像以前看书或者视频的时候,看着看着就丢失了进度,然后就做别的事情去了。
有了这次的经验,我又选定了另外一个目标:
在网上找了一本 HTTP RFC 的中文翻译,一天看 10 页,最终虽然也延迟了两天,但是还是看完了。当全部勾选了的时候,还是很有成就感的。在对抗拖延症的路上又走了一大步。
后来又用 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