Python2 和 Python3
最近在面试, 遇到了几个同样的问题, 就是 “python2 和 python3 具体有哪些区别”? 遇到这个问题的时候, 我每次都懵逼, 因为确实除了语法糖以外的区别, 我一个都说不出来. 所以回来之后查了一下资料, 总结出几个主要的区别, 记录下来.
Post Agile: embracing asynchronous processes
就像我们这个行业里(软件开发)很多跟我年纪相仿的人一样, 我记得在internet和敏捷开发概念之前, 事情是怎么被完成. 那时候, 写代码意味着使用昂贵的工具, 要查很多很多的书. Google 和 StackOverflow 还未存在. 办公室里有网络也不是特别常见. 我用买commodore 64时附送的Basic手册来学习编程. 那时候, 并没有敏捷开发.
从那时候开始, 事情起了变化, 这些变化大部分是好的变化. 我对Kent Beck的书Extreme Programming 抱有非常大的热情. 在那个时候, 我正在攻读软件工程的博士学位. 在我2003年的博士论文当中, 我甚至引用了这本书的一些内容. 敏捷开发在开发这个事情上做了很多革命性的改变.
最近这些年, 每个人都在强调又或者在假装他们正在使用敏捷开发. 所以”敏捷开发”这个词变得有点无意义了. 所有银行, 卖保险的, 还有一些外包小作坊都在使用”敏捷开发”. [Captial A Agile of course because they are doing things “by the book”]. 只要有敏捷开发知识的任何人, 都会知道这个不是一个正确的行为. 我曾经在一些研讨会, 讲座上碰到过敏捷开发宣言的签署者讲出这个事情. 敏捷开发事实上是一套工具, 可以让你用和改变成合适你的样子. 照本宣科是开始, 而不是结束. 如果你不了解任何敏捷开发的事情, 你才应该照本宣科.
How many lines of code is Candy Japan?
这是每月交$29,寄一盒日本零食给你的电商。Python + App Engine,集成 PayPal 与 Recurly 收钱,还有一些自动化的代码用来优化打印送货地址、退货的流程等。总共 8000 多行 Python 代码。
他是 2011 年开始做的,本文写于 2016 年。如果是 2018 年从头开始做的话,可以不用写这么多代码,有很多现成的 API 几行代码就能搞定了。
DNS是 Domain Name Service 的缩写, 中文译作计算机域名系统. 它主要应用于域名的IP地址查询. 举个简单的例子来说, 如果你要访问google.com, 系列之前的文章提到过, 进行网络通信一定需要IP地址, 所以当敲下回车那一下, 首先就是需要通过DNS查找到google.com的IP地址, 然后才是建立TCP连接.
应用层是整个网络模型中最靠近用户, 常用的协议有 HTTP, FTP/SFTP, SMTP等等. 比如说浏览器, 市面上有很多很多浏览器, 常见的有 Chrome, Firefox, Safari, Edge等等, 服务器有 nginx, apache, tomcat 等等, 但是无论一个网站的后端使用什么样的服务器, 用户使用什么样的浏览器, 数据都能被正确解读, 这是为什么呢? 那是因为服务器和浏览器都采用了同一个协议, 叫 HTTP 协议. 
对于应用层来说, 它的数据也需要被封装到底层. 对于不同的协议, 数据包的格式/字段可能会不一样, 但是对于底层的协议来说, 并不care. 它们要做的就是把应用层的数据包封装到data payload里面, 然后传输到相应的网络节点.