【后端总结】PHP基础

在 2018/11/13 19:54:57 发布于 编程实践 分类 • 标签为 后端总结

大部分得语言内容都静静得躺在语言手册中,如果复述一遍,一方面未必又手册描述得清晰,另一方面也是有悖总结知名。而且基础类的文章这么写法,常常会陷入种种细节的窠臼。所以这篇文章写写珊珊总是落不成笔。

所谓经典就是不管看几遍总是能够有所收获。翻看SICP的时候,开篇对于编程语言元素的总结简明扼要又醍醐灌顶

The Elements of Programming

  1. primitive expressions, which represent the simplest entities the language is concerned with,
  2. means of combination, by which compound elements are built from simpler ones, and
  3. means of abstraction, by which compound elements can be named and …

阅读全文

后端总结序

在 2018/11/07 17:07:14 发布于 编程实践 分类 • 标签为 后端总结

2014年毕业,按照毕业算工作年限是四年,如果是2014年初的实习开始,就快五年了。五年来,从一无所知的小白到现在前端后端都能写,虽然自认业务能力充足,但很多时候还是带点心虚。

有的时候不得不承认,不是科班出生的,总归是要比别人慢一点。当别人已经开始学习大数据、AI、区块链的时候,我还在补数据结构、操作系统、编译原理,还补得磕磕绊绊。五年了,因为没有系统的检验,即使学了,还是不明白自己究竟有几斤几两。对事物的控制欲望让我想知道方方面面的细节,否则我就不放心。对于自身也是一样。虽然我知道面对寻常的后端开发工作,90%以上的工作都可以胜任,但只有在问题出现的时候才能判断这件事是否在这90%之中,让我非常的焦虑。这种焦虑,有点像以前做数学考卷的时候,知道某个题是用什么知识点来解的,但能不能解出来,还得算来看看——本质上是知识没有条理性。

最近一长段时间,大概有个一年半,尝试过用一些方法来梳理自己的知识体系。用过思维导图,感觉太过简单;用过wiki,但会陷入到细节中拔不出来。不管怎么做,总是不那么如意和顺畅。做准备工作的时候,明明觉得提纲里的东西都用得顺手,但是实际写来却艰苦卓绝。最近想明白了 …


阅读全文

Rust 模块系统初探

在 2018/11/07 16:16:57 发布于 编程实践 分类 • 标签为 Rust, 模块

学习一门编程语言,知道如何引用外部的文件或者说模块系统是比较重要的一点,PHP用autoload机制,C有经典的include。最近写 wslexe 的时候,因为原作者用的 rust,所以就简单学习了一下。但是 rust 的模块文档是从顶部设计开始写的,很多概念,有些复杂,这里写一个应用导向的学习笔记。

引入文件

首先,让我们初始化一个项目。

mkdir rustmod
cd rustmod
cargo init

我们得到了下面这样的基础项目结构

rustmod
├── Cargo.toml
└── src
    └── main.rs

main.rs里面只有一个简单的输出的‘hello world’的main函数。我们新增一个functions.rs文件,将生成字符串的过程做成一个函数,供main …


阅读全文

我为什么生活

在 2018/09/26 14:01:14 发布于 语文课 分类

罗素

三种单纯而极其强烈的激情支配着我的一生,那就是对于爱情的渴望,对于知识的寻求,以及对于人类苦难痛彻肺腑的怜悯。这些激情犹如狂风,把我伸展到绝望边缘的深深苦海上东抛西掷,使我的生活没有定向。

我追求爱情,首先因为它可以令我销魂,爱情令人销魂的魅力使我常常乐意为了几小时这样的快乐而牺牲生活中的其他一切。我追求爱情,又因为它减轻孤独感——那种一个颤抖的灵魂望着世界边缘之外冰冷而无生命的无底深渊时所感到的可怕的孤独。

我追求爱情,还因为爱的结合使我在一种神秘的缩影中提前看到了圣者和诗人曾经想象过的天堂,这就是我所追求的。尽管人的生活似乎还不配享有它,但它毕竟是我终于找到了的东西。

我以同样的热情追求知识。我想理解人类的心灵,我想了解星辰为何灿烂,我还试图弄懂毕达哥拉斯学说的力量,我在这方面略有成就,但不多。

爱情和知识只要存在总是向上通往天堂,但是怜悯受饥荒煎熬,无辜者被压迫者折磨,孤弱无助的老人在自己的儿子眼中变成可恶的累赘,以及世上触目皆是的孤独、贫困和痛苦——这些都是对人类生活的嘲弄。我渴望能减少罪恶,可我做不到,于是我也感到痛苦。

这就是我的一生,我觉得这一生是值得活的。如果真的可以再给我一次机会,我将欣然重活一次。

一位西方哲学家无意间在古罗马城的废墟里发现一尊“双面神”神像。这位哲学家虽然学贯古今,却对这尊神很陌生,于是问神像:“请问尊神,你为什么一个头,两副面孔呢?”

双面神回答:“因为这样才能一面察看过去 …


阅读全文

[0x00] 当我们在编程时我们在做什么

在 2018/08/13 15:51:00 发布于 自学指南 分类 • 标签为 写给女朋友看的编程入门指南

先让我们把计算机想象成一个人吧。一个人总要有个名字,就叫他小明吧。

小明可以帮我们做一些事情,比如说算一下 256 乘以 1024 等于多少。这种问题对我们自己来说,按照乘法规则算一下也能算,就是麻烦,可是对小明来说算起来可很简单,这是小明擅长的领域。不过这个小明并不能理解你所说的“256 乘以 1024 等于多少”这句话。因为小明是一个外国人,他只说自己的语言。就像你和一个图瓦卢的人说“告诉我 256 乘以 1024 等于多少”,我想他也会一脸莫名奇妙。小明也是这样,不能理解你的意思。我们只能用小明的语言来告诉他要做什么。

小明说的语言就是编程语言,比如说下面这样的。

    int result = 256 * 1024;
    printf("%d",result);

也许你一点都看不懂,没关系,刚学英语的时候我们也看不懂 “How are you? Fine, thanks, and …


阅读全文

死亡

在 2018/03/25 11:10:00 发布于 写作练习 分类

有一个画面在脑中如金属上的刻痕一般深刻:夏蝉鸣得人心烦躁,炙烤下的水泥地面腾起看不见的雾气扭曲了视线,瘦弱的男孩半黑不白,穿装背心短裤,从二楼的窗户探出大半个身子凝望着地面。如果从这里跳下去,是不是就死了?这可能是我第一次,对死亡这件事产生思考。

死了会怎么样,死了似乎也不会怎么样。死了就死了吧。也许是小孩子尚不懂得死亡的意义,但这个基调却在心里持续了很久。死了,也就死了吧。

第二次对死亡的印象是爷爷去世的时候。看着爷爷安静地躺着,除了因大量失血而苍白的嘴唇外,看起来不过就是睡着了。姑姑抵达时见到此景一声哭腔喊出,却被奶奶喝住了:现在还不能哭。姑姑收住了哭声,我没看清是否流泪。但守灵当夜,我确实清楚得看到,父亲站门口台阶之上,肩膀耸动,手抹着眼睛。这是我第一次看到父亲哭泣。

我跑进灵堂,看着安静的躺着的爷爷。守灵的亲戚奶奶对我说再看看吧,再看看吧,以后就再也看不到了。我回忆起每次疯玩一圈回来,都要把爷爷那个被茶渍染成深褐色的大号透明塑料茶杯里的茶水喝个精光,爷爷嘟囔着我每次都喝光不剩然后默默续上水。我终于大哭了起来。一直到现在,关于爷爷的最深的印象就是那个大茶杯,只是后来再也没有从那样的大杯子里喝过茶水了。

(于飞往昆明航班之上)


阅读全文

最好的 Linux 发行版

在 2017/12/10 11:24:00 发布于 Linux漫谈 分类 • 标签为 Linux, WSL, Winsows, Subsystem

标题是个玩笑话。

Linux 作为一个操作系统,在服务器领域尤其是 web 服务器来说,一直是一个很好的选择,相对于 Windows server 高额的授权费用,免费开源的 Linux 更受个人和有开发能力的公司的青睐。甚至在市场份额上,还略微高于 Windows Server。但在桌面端,似乎一直是 geek 的玩物,哪怕是 web 开发,有钱的直接上 MacOS,没钱的想方设法组黑苹果。除了驱动不完善之外(现在情况已经大大改善了),最主要的还是 Linux 的桌面端应用相比其他两个操作系统生态来说,还是太少太少。一些仅有的软件,对比之下质量也只是勉强可用的地步。

但是,作为一个web开发者,不熟悉 Linux 系统,可以说是一个重大的技能缺陷。因为不论你怎么躲,都躲不开 Linux 系统的使用。哪怕你用的的 .Net,难道你就不看看 .Net …


阅读全文

中数据分析

在 2017/06/19 17:03:00 发布于 编程实践 分类

same 在前段时间更新了数据的展示形式,数据流的方式意味着决策上将要更多地向个性化的方向发展。说到个性化,那就意味着大量的用户行为数据的收集和处理,意味着原先用 MySQL 还能支撑的统计分析将不再适用。因此,开始考虑需要一套大数据处理的工具。说到大数据,一般都会自然得想到 Hadoop 系的一系列工具,从计算引擎,到存储系统,再到查询工具。Hadoop 的这一整套东西,很好很强大,但也意味着架构的复杂。

作为一个之前没有接触过任何 Hadoop 系统地超新手,我们艰难得尝试了几天,最终还是选择了放弃。放弃的原因,除了复杂度之外,更是因为一种杀鸡用牛刀的感觉。即使是全量的记录 same 的访问日志,每天也不过数 GB,这样的数据量,要直接上动辄十数台机器(hdfs + Hadoop + 控制节点)的集群着实有些奢侈(费用和维护成本)。而且,公司里也基本没有对 Hadoop 体系熟悉的人,后续的知识传承也很成问题。放弃了 Hadoop,就要重新寻找这样一种简单又可扩展的替代品:架构简单 …


阅读全文

在 2017/02/20 04:26:00 发布于 生活思考 分类

从14年一月份进入百姓网开始全职实习算起,参加工作也三年又两个月了。去年后半年从百姓网离职,来到 same,希望能为我喜欢的产品出一点力。但是六个月过去,虽然 same 给了很高的自由度,也没有太大的作为。除了产品上的问题之外,可能还是作为技术人的能力并不如自己所想的那样,已经到了可以做出哪怕些微的创新的地步。所以最近的两三个月一直都在感到焦虑,重新感到了工作之初时那种觉得自己什么都不会的感觉。不过区别是,彼时觉得自己是萌新,学习能力有自信,那种认为自己什么都不会的感觉可是强大的学习动力。而此时则是短暂的膨胀期之后的幡然醒悟,是一种失落。

我很喜欢编程。准确的说,我喜欢所有和创造有关的事物,讨厌重复劳动。可惜本身手残,小时候也没有条件去接受艺术的熏陶。好在,有编程这个纯粹脑力的创造活动。怀着一腔热爱进入这个行业,但从一开始工作,就对自己的非科班出身的经历耿耿于怀,总觉得心里很慌。可真的去尝试学习的时候,则感觉那些东西在工作中真的很难用到,理解一些基本概念后就不怎么愿意花时间去做练习巩固,然后心里依然很慌。

直到去年接近年末的时候,才想明白,心慌的原因并不是不会,而是不知道自己究竟会什么,或者说没有什么东西来证明自己会什么。

对自己只有模糊的感觉:能力水平还可以,正确理解业务并实现以及处理常规的性能问题都没事问题;技术的深度不行,深入底层之后比较无力;广度还可以,半个全栈 …


阅读全文

一个博客的诞生

在 2017/02/04 04:26:00 发布于 产品创造 分类

题目有些标题党了,其实只是想聊一下自己的用的博客程序,因为有人留言说博客打开很快。老实说,这东西其实够不上“程序”,因为只是两三个脚本配合着一些现成的工具,做了一键部署罢了。

我对用 gh-pages 做博客一直有一点怨念,觉得 Hexo 之类的都太麻烦:先要安装执行环境,然后安装生成器,然后一大堆的配置文件,部署的时候还要反复的敲命令,clean、generate、deploy之类的。但是另一方面还是,还是很想用 gh-pages 做博客。除了免费速度也不错之外,最主要的还是 git 版本管理的特性,以及可以直接用自己喜欢的编辑器来编辑。各个生成器对 markdown 之类的标记语法也都支持得比较好,不用像在网页上写一样格式不断调。可能真的是到了阮一峰老师说的博客三阶段的最后一阶段了,想要的就是一个简单快捷的记录和发布文字的地方。

但是我一直都没有找到这样的 gh-pages 生成程序。其实最理想的情况是直接一个单页应用, 基于 github 提供的 API 来获取文章的内容,前端渲染。自己也尝试着 …


阅读全文

个人成长与工作

在 2017/01/02 01:39:00 发布于 生活思考 分类

其实12点不到就睡了,但是一直睡不着,又不想写代码,担心一写又到早上了。所以还是来写写鸡汤吧。

从实习算起,参加工作也又三年了,对于工作与个人成长的关系也算是有自己的一点理解。恰好之前与人讨论了一番,感觉值得梳理一下。

首先,我觉得工作是公事而个人的成长是私事,企业有义务帮助员工适应工作环境(对于实习生来说这包括必备的工作技能),但并不对员工的个人成长负有任何责任。所以,一般培训一项是作为福利存在的。至于人才培养计划之类的,那是企业在对人力资源的成本衡量后的结果。如果引进人才的成本比较低的话,我想没有企业会花这笔钱。明确这一点之后,才明白为什么渡过了最初期的适应阶段之后会觉得自己不再长进了,因为一旦你可以胜任工作之后没有人会再催着你学了;如果出现一项你无法胜任的工作,很多时候都是安排有能力的人去做。

从这里也可以看出,为什么说八点到十点的两个小时,才决定了一个人发展:因为工作时间,企业对你的要求就是重复你已有的技能,而你却想从中获取新的技能,那可不是缘木求鱼;只有工作后的自我学习,才是真正属于自己的,习得新的技能的时间。如果用这些时间获取了新的技能,而下次出现了需要该项技能的业务,那不就可以在其他人中脱颖而出了么。想象一下,一个流水线上的工人,如果在课后自学了机器的运行原理;在某次机器故障,所有人都无所适从的时候,试着解决了问题,你觉得老板会不会考虑安排他去跟着老师傅学习机修?

当然,这种机会是可遇而不可求的,所以称为机遇.而我们能做的是在做好准备的同时 …


阅读全文

开始一段新的旅程

在 2017/01/01 15:27:00 发布于 生活思考 分类

我是一个仪式感非常强的人,如果不做点什么来声明重要的节点,惴惴不安的情绪会始终无法散去。所以,我挺喜欢总结和展望这类文字的:写完年终总结才觉得过去的一年到此为止了;写完新年计划才认为新的一年正式开始了。

二零一六年过得不怎么顺利:感情起伏不定,最终还是面临结束;个人能力的提升趋于平缓乃至瓶颈;换了一份工作,涨薪的幅度刚抵过房租的涨幅。当然也会有一些进步:技能的平稳导致会有时间用现有的技能做一些产出;学会了双拼;正在为自己喜欢的产品贡献一份绵薄之力;注册了一家公司,虽然没有正式开张。总的来说,过去的一年自己有一些长进,但不大,只有心态在越来越趋于平和。去年的总结就这样吧,除了感情的起起伏伏,其他真是没有太多可以回忆和记述的东西,至于感情的事,不说也罢。

二零一七年希望能发布一个完整的产品,并且好好地运营,可以够上一万用户的门槛,因为不知是谁说过:如果没有运营过一个超过一万用户的产品,就不要去创业。可能也是一种仪式吧,就和铁血战士的成年礼一样,要拼杀一番。当然,这是业余时间的目标,重心还是 same,既然对她爱得深沉,那就发现她的不足并用自己的能力去填补。我相信 same 是独一无二的,她的设计不以人的生理需求出发,希望能够走得更远。

个人的能力和品质上,希望新的一年能每个月养成一两个好的小习惯 …


阅读全文

一些重构体会

在 2016/12/29 04:26:00 发布于 编程实践 分类

最近在重构多媒体服务,包括爬虫和搜索两部分。原先的代码是一个实习生 Q 同学写的,用的 python。如果抽出其中的一块代码来看, Q 同学应该是一个重实践的同学,代码质量还是很不错的,但是之前看的时候我还是很难理解他的编程思路。直到这次彻底的重构,才发现代码中的一些问题。 这里记录下来,也是对自己的提醒。

命名

这其实是一个老生常谈的问题,而且大部分人其实都有这个意识,Q 同学在对待大部分的命名上也都在尽量选择合适词汇。但是,对于工具函数却没有一视同仁。 比如

def _l(x):
    r = list(map(_ft, x))
    if len(r) == 1:
        r = r[0]
    return r

这是一个内部函数,用来提取出爬取的元素,并根据获取的元素数量返回不同的数据结构,在爬取数据的时候多次用到。即使不用太高级的英语,直接用 get_result_as_list_or_string已经可以极大地缓解在阅读过程中返回去看这里干了什么的情况。同样的 …


阅读全文

初始化一个 Python 开发环境的正确姿势

在 2016/12/10 17:41:00 发布于 编程实践 分类 • 标签为 python, virtualenv

在看这篇文章的时候,我需要两个假设,以避免做过多无关的解释。

  1. 假设读者对 Python 有最基本的了解,知道如何使用 pip。并且系统环境中已经安装有 Python 和 pip。
  2. 假设读者对 virtualenv 有最基本的了解,知道为什么要用 virtualenv。

如果假设不成立,可以跟随上面的链接和 Google 来了解。

0x1 更换 pypi 源为豆瓣的源

如果网络环境好的话这一步也可以不做

mkdir -p ~/.config/pip/
touch ~/.config/pip/pip.conf

在pip.conf 文件中添加以下内容

[global]
timeout = 60
index-url = https://pypi.doubanio.com/simple/

0x2 安装 virtualenv …


阅读全文

回归社交

在 2016/11/30 06:00:00 发布于 生活思考 分类

之前在知乎一个关于外国人吃的问题下面,一个答主描述国外的“约饭“不像国内一样,不是真的是以吃为重点,而是以吃为由头,一群人聚在一起聊天,食物只是调剂。 同样是约饭,在他们看来不过社交的一种形式。似乎社交就是聊天,或者说交流。可是交流本身并不能构成社交。

互联网时代的社交是怎样的呢?以 Facebook 和 Twitter 为代表的点赞,以微信为代表的 IM 还是各种速配应用?这些似乎是又不全是社交。 Facebook 偏表达,IM 偏工具,速配偏认识。原先没有互联网的社交是怎样的呢?对于熟人社交,我们起个由头,约个时间,组织活动,交流各自见闻,回忆回忆往昔, 男人们讨论时事, 女人们唠叨家庭。对于陌生人社交,我们参加一个公共活动(桌游、酒吧、音乐会等等),因为某个特质而欣赏某人,搭讪,聊天的时候展现自己,观察对方。 可能留下联系方式,期待后续的交流。

熟人社交,即使来到了线上 …


阅读全文