56

GitHub - Philon/arts: 每周一道算法一本书

 5 years ago
source link: https://github.com/Philon/arts
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

积硅步,至千里 - 我的ARTS

什么是ARTS?

ARTS是由左耳朵耗子在其专栏左耳听风发起的计划,目的是为了有效降低专栏读者群成员数量?,(我没进过这个群,猜测里面大牛很多怕进去被虐)。先解释下ARTS计划:要求每周必须完成Algorithm一道算法的解析、Review一篇英文文章的阅读、Tip一个知识点的总结、Share一个价值观的分享。

为什么要做ARTS

2016年夏天,本人以1.8米+90公斤的身材成功步入了胖子的行列,想必和许多上班族一样每天要么开车要么公交,电脑前久坐,屁股离开板凳的时候不是去厕所就是去抽烟;想必和许多下班族一样,时不时会考虑个问题:老子特么的是不是改减减肥了;于是想必又和大部分人一样,我一开始制定了一个细致而宏伟的减肥计划,几点起床、几点锻炼、吃什么、喝什么、要瘦到多少斤...然后就没有然后了;最后想必还是和小部分人一样,我来到了健身房,一问价格:嚯~!4000+包年,你们这儿难道还管饭么!所以在金钱的厌恶下,我花了1/4的价格买了一辆永久牌自行车,18kg高碳钢车架流线型设计27级变速三刀式轱辘前后双碟刹,还赠送前置LED灯照亮回家路,for健康、for身材、forever——得不到的永远在骚动。好吧,其实随便了解下就知道这车很一般,不仅如此,为了减肥我甚至连减肥计划都取消了,换成了一句更一般的话:每天骑车上下班。于是就这么每天重复着完成这句话至今,体重76,身高应该没变,而且还意外获得一项技能,周末节假日胡吃海塞一顿duang的胖个两公斤,一到工作日没两天xiu的又瘦回去了,我觉得我的体重应该是进入了一个稳态,所以我这两年貌似就没有刻意节食过!

跨过而立之年,对于程序员这个职业以及行业,多少有点七年之痒,总觉得看不到未来,想换家公司却发现越来越没勇气,再这样下去,我离“老油条”的标签不远了。最近开始尝试跳槽看工作才突然惊醒,就我手上那点伎俩真的快被市场淘汰了。想学些什么又不知从何捡起,当我开始各种“藏书”、“藏视频教程”、“藏代码”的时候发觉这他妈和我的宏伟减肥计划有毛的区别啊,下载那么多资料老子又不会去看!存在硬盘里就是知识了?

拿减肥和职业发展事情来说就是因为我深切的明白这个道理:有付出就有回报,条条大路通罗马但别总想走捷径。这几年过得太安逸了,为了将来不被生活所迫,我需要持续地折磨自己。ARTS在我眼里算不上什么伟大的计划,也许它不够有趣、不够科学、不够有影响力,但那又怎么样呢,只要它被坚持执行,长期见效,这就足够了!既然现在迷茫了,那就带着脑子去做些看似重复无脑的事情,至于能作出什么成绩,就让时间来给我答案吧。

我的ARTS怎么做

耗叔指定的每周任务对我来说还是太模糊了,我要的是在心里默念一遍就能清晰地知道任务计划和目标,所以我对ARTS进行了改造,以便更适用于我:

  • Algorithm 在leetcode做一道算法题,通过提交
  • Review 翻译一篇英文文档(大部分是leetcode算法solution)
  • Tip 总结实现算法过程中学到的知识,写笔记
  • Share 读一本书或专题文章,写读后感

浓缩为一句话就是:每周啃一道算法一本书

本项目介绍

arts项目结构:

algorithm/
  autotest              # 自动测试脚本
  template/             # 算法实现工程模版
  001-two_sum/          # 算法题目
    c/                  # 对应实现语言
    cpp/
    python/
    ruby/
    csharp/
      solution.cs       # 算法实现
      test.cs           # 单元测试
    java/
    ...
  002-add_two_numbers/
  003-xxxx/
  ...
review/               # 英文阅读与翻译
share/                # 读后感分享
tip/                  # 算法和其他技术知识点总结

编程语言

基本上我打算使用leetcode官方提供的所有编程语言来实现算法,但我只会用C语言去真的“实现”,其他语言只是“移植一下”,说白了就是利用熟悉的工具实现陌生的业务,用熟悉的业务掌握陌生的工具。以下是个我目前对“工具”的掌握情况:

编程语言 掌握程度 C ⭐️️️️⭐️️️️⭐️️️️⭐️️️️⭐️️️️ C++ ⭐️️️️⭐️️️️⭐️️️️ C# ⭐️️️️⭐️️️️ GO

Java ⭐️️️️⭐️️️️⭐️️️️ JavaScript ⭐️️️️⭐️️️️⭐️️️️⭐️️️️ Kotlin

Python ⭐️️ Python3

Ruby

Scala

Swift

单元测试

每种语言实现的算法我都会写类似的测试用例,为了避免项目臃肿(毕竟算法才是主角),语言自带单元测试框架的就直接用,不带的就用断言来做,test.xx就负责这个。我日常开发平台是macOS,已经为每种语言搭建好了编译/运行环境,但懒得再去每个语言目录下敲build命令,所以才有了autotest脚本,使用非常简单:

$ ./autotest                # 测试最近修改的一个算法实现
$ ./autotest 001-two_sum    # 测试该算法题的所有语言实现
$ ./autotest 001-two_sum/c  # 测试该算法题的C语言实现

关于review

官方的直译这种事情我肯定不会做,一般来说我写文章都比较喜欢诙谐幽默一点,直译的话太枯燥了,我的原则是先把英文的文档通篇读完读懂后,在用自己的话套上原文框架来做总结式翻译。不过我的英语水平真的很烂,刚开始直接去翻译leetcode的解决方案也是无奈之举,因为这是在我有思路的前提下看英文文档(挑软柿子捏)。

关于tip目录

另外就是知识点,3年前我在leetcode做过2道题,然后就没有然后了,当时也是迷茫心血来潮做的,其实每完成一个算法多少都能总结些算法的核心思想,这就是知识点,而把算法实现“移植”到其他语言,对语言本身的技巧总结,也是知识点,所以我觉得这个目录的文档输出不是什么难事。

关于share目录

我觉得最难的就是这个目录的输出了,都不知道能否坚持下去,以我现在的阅读效率每周读完一本书还是相当困难的,更何况还要写读后感,但不管怎么说,先做吧。要说明一下每周share之所以不分享“价值观”这种东西是以为我自己都没有太高的修为,做的见的不多,真的不知道能分享什么,所以还不如写读后感,也算是一种分享嘛?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK