学习 go-lang 的笔记,主要的学习站点:
python coroutine and asyncio
最近在复习并发编程相关知识,顺带着就学了下python的协程,觉得值得写一篇文章记录下。
协程是一个非常有意思的概念,其设定非常类似于线程,不过比线程的调度更轻量。线程的调度依赖于操作系统,可以并发(parallelism)执行;协程由应用层调度,并不会利用多CPU,其实质是在应用层维持运行队列,单进程并行(concurrency)运行。
那么协程为什么有用呢(至少在python中非常有用),有几点原因:
- 多I/O并发场景,可能并不需要太多CPU,但确会阻塞进程。
- 在python中如果I/O多的场景,可以用多线程来实现并发,但众所周知,python的GIL使得多线程等价于单进程,只是不会阻塞主进程而已。
- 而协程刚好满足了需求,即轻量,又不阻塞,又不存在创建线程的开销。
《淘宝产品十年事》与「优雅」的解决之道
《淘宝产品十年事》这本书描写了淘宝发展背后的故事,以及决策背后的深层次思考。淘宝做为一款改变中国人生活方式的产品,其所属范畴已经不单是一款产品,而更是一种生态。也就可想而知设计这样的生态产品将会遇到怎样的复杂和困难。也许正如作者所写的那样,做产品往大了说,都是在阐释人性和哲学。
读完本书,我最先想到的就是《简约至上》中提到的乔老爷子的话:
乍一看到某个问题,你会觉得简单,其实你并没有理解其复杂性。当你把问题搞清楚之后,又会发现真的很复杂,于是你就拿出一套复杂的方案来。实际上,你的工作只做了一半,大多数人也都会到此为止。但是,真正伟大的人还会继续向前,直至找到问题的关键和深层次原因,然后再拿出一个优雅的、堪称完美的有效方案。 —— 史蒂夫 ∙ 乔布斯
我自己在做程序设计时也会有类似的感受。一般而言,写代码解决一个领域问题或者设计一个软件框架,要在第三次实现时才可以做好。前两次写的代码总会存在一些「不那么优雅」的地方,可一旦你对问题有了更深入的理解,就会发现最好的解决方案原来如此「优雅」(个人理解:优雅不代表就是简单,但一定需要清晰,简洁,有效)。
本书提到的案例和对应的解决方案,亦会让我想到乔老爷子提到的「优雅」之概念。书中提到的问题,很多看似简单,其背后却对应着非常复杂的需求,有些甚至是人性的博弈,而最后的解决方案却又优雅有效。看完本书,重新复盘个中案例还是很有意思。所以我将个中我感兴趣的案例,按我个人理解的逻辑重新整理了一遍,分成下面几个部分:
- 调动积极性。
- 灰度测试与可用性测试。
- 规则可解释。
- 分层设计。
- 数据的价值。
- 集权与放权。
- 墨菲定律。
Coursera - Andrew Ng - Deep Learning - 1 - Neural Network and Deep Learning - 学习记录
之前学完了Coursera - Andrew Ng - Machine Learning课程,受益匪浅,对machine learning的很多概念和实际应用有了更深入的理解。不过这个课程时间已经比较久了,那时ml的应用情况和现在应该有了天壤之别,所以内容上有些滞后。不过入门学习的话,还是推荐看一遍该课程。至少与我个人而言,觉得教的非常好,学习内容放在博客中。
Andrew老师最近创办了deeplearning.ai,主页上目前的内容是关于deep learning的课程。课程内容还是放在了Coursera - Andrew Ng - Leep Learning,所以继续学习,记录,总结。
又及,网易云课堂上有免费的专业课,一样的课程,而且上面字幕是中英对照的,看起来比较舒服,但我看了一会发现没有课后问题,也没有编程作业,所以还是转到coursera上学习。因为按我之前学习的经验,课后习题和编程作业非常重要,练习和编程实现可以极大地提高对知识的理解程度。(coursera上课程,7天免费,后面每月付费49刀。)
又及,deep learning课程要求不可以公开作业代码,包括上传到github,所以不整理代码了。😆
深度学习第一门课程: Neural Network and Deep Learning的学习笔记。
相关笔记:
- Neural Network and Deep Learning
- Improving Deep Neural Networks
- Structuring Maching Learning Projects
- Convolutional Neural Networks
- Sequence Models
还有之前记录machine learning学习笔记