如何做一个有质量的技术分享
分享信息并不难,大多数人都能做到,就算是不善言谈性格内向的技术人员,通过博客或社交媒体,或是不正式的交流,他们都能或多或少的做到。但是如果你想要做一个有质量有高度的分享,这个就难了,所谓的有质量和有高度,我心里面的定义有两点:1)分享内容的保鲜期是很长的,2)会被大范围的传递。我们团队内每周都在做技术分享,虽然分享的主题都很有价值,但是分享的质量参差不齐,所以,想写下这篇文章 。供大家参考。
首先,我们先扪心自问一下,我们自己觉得读到的好的技术文章是什么?我不知道大家的是什么,我个人认为的好的文章是下面这样的:
把复杂的问题讲解的很简单也很清楚。比如我高中时期读到这本1978年出版的《从一到无穷大》,用各种简单通俗通懂的话把各种复杂的科学知识讲的清清楚楚。还有看过的几本很好的书,有一本是《Windows程序设计》,从一个hello world的程序开始一步一步教你Windows下的原生态编程。
有各种各样的推导和方案的比较,让你知其然知其所以然。有了不同方案的比较,才可能让人有全面的认识。这个方面的经典作著是《Effective C++》。
原理、为什么、思路、方法论会让人一 ...
HTTP的前世今生
HTTP (Hypertext transfer protocol) 翻译成中文是超文本传输协议,是互联网上重要的一个协议,由欧洲核子研究委员会CERN的英国工程师 Tim Berners-Lee v发明的,同时,他也是WWW的发明人,最初的主要是用于传递通过HTML封装过的数据。在1991年发布了HTTP 0.9版,在1996年发布1.0版,1997年是1.1版,1.1版也是到今天为止传输最广泛的版本(初始RFC 2068 在1997年发布, 然后在1999年被 RFC 2616 取代,再在2014年被 RFC 7230 /7231/7232/7233/7234/7235取代),2015年发布了2.0版,其极大的优化了HTTP/1.1的性能和安全性,而2018年发布的3.0版,继续优化HTTP/2,激进地使用UDP取代TCP协议,目前,HTTP/3 在2019年9月26日 被 Chrome,Firefox,和Cloudflare支持,所以我想写下这篇文章,简单地说一下HTTP的前世今生,让大家学到一些知识,并希望可以在推动一下HTTP标准协议的发展。
目录
...
程序员练级攻略(2018) 与我的专栏
写极客时间8个月了,我的专栏现在有一定的积累了,今天想自己推荐一下。因为最新的系列《程序员练级攻略(2018)版》正在连载中,而且文章积累量到了我也有比较足的自信向大家推荐我的这个专栏了。推荐就从最新的这一系统的文章开始。
2011年,我在 CoolShell 上发表了 《程序员技术练级攻略》一文,得到了很多人的好评(转载的不算,在我的网站上都有近1000W的访问量了)。并且陆续收到了一些人的反馈,说跟着这篇文章找到了不错的工作。几年过去,也收到了好些邮件和私信,希望我把这篇文章更新一下,因为他们觉得有点落伍了。是的,老实说,抛开这几年技术的更新迭代不说,那篇文章写得也不算特别系统,同时标准也有点低,当时是给一个想要入门的朋友写的,所以,非常有必要从头更新一下《程序员练级攻略》这一主题。
目前,我在我极客时间的专栏上更新《程序员练级攻略(2018版)》。升级版的《程序员练级攻略》会比Coolshell上的内容更多,也更专业。这篇文章有【入门篇】、【修养篇】、【专业基础篇】、【软件设计篇】、【高手成长篇】五大篇章,它们会帮助你从零开始,一步步地,系统地,从陌生到熟悉,到理解掌握,从编码 ...
关于我”极客时间“的专栏
不少朋友都知道我在“极客时间”上开了一个收费专栏,这个专栏会开设大约一年的时间,一共会发布104篇文章。现在,我在上面以每周两篇文章的频率已发布了27篇文章了,也就是差不多两个半月的时间。新的一年开始了,写专栏这个事对我来说是第一次,在这个过程中有一些感想,所以,我想在这里说一下这些感受和一些相关的故事,算是一个记录,也算是对我专栏的正式介绍,还希望能得到、大家的喜欢和指点。(当然,CoolShell这边还是会持续更新的)
为什么要开设一个收费专栏
首先,说一下,为什么要开这个收费专栏。
老实说,我一开始根本就不想开收费专栏的,是的,完全不想!主要是有两个原因,一方面是我在创业中,我自然是没有太多的时间,另一方面是,我以前在《为什么我不在微信公众号上写文章》也说过,我觉得知识最好的方式是被检索、讨论、引用、整理、补充和更新。所以,收费这种模式,我感觉并不利于很好的传播。但是,我为什么还干了这么一件事?这事还得从2017年6月份开始说起。
这个月,一共有三家技术社区来找我,都是希望我能去他们那边开收费专栏,其中一家就是“极客邦科技”。对于这三家来说,从一开始我就是以婉拒的姿态回应的。而 ...
DHH 谈混合移动应用开发
David,Ruby on Rails 作者,37signals 合伙人
畅销书作家、演说家、赛车手、业余摄影师、顾家好男人
37signals 在2013年2月发布了 Basecamp 的 iPhone app,在此之前我们就使用原生开发(native)还是混合开发(hybrid)做了许多尝试。在2012年项目启动的时候,大多数人都倾向于原生开发。
Facebook 在2012年发布了他们新的 iOS app,为了获得更好的用户体验,他们放弃了原来的 HTML5 混合开发方式。考虑到2010~2011年的时候,HTML 在移动端的性能确实不尽如人意,这个决定在当时看来也在情理之中。2010年的时候我们觉得 iPhone 3G/3GS 够眩够快,但按照现在的标准来看它们就太慢了。因此在为移动应用开发做架构设计时,我们需要考虑新的移动设备的计算能力,而不是那些老的过时的设备。
目录
移动开发架构设计不需要过多考虑设备的性能
第一代产品:原生外壳(native shell)+嵌套WebView
第二代产品:原生外壳+原 ...
Google Inbox如何跨平台重用代码?
原文链接《How Google Inbox shares 70% of its code across Android, iOS, and the Web》
开发一个移动应用在当下并不是一件容易的事情。如果想要获得最多的用户,你的应用通常需要覆盖 iOS, Android, 和 Web 三大平台。这就意味着同一个应用需要开发三个版本,使用 Objective-C 或者 Swift 开发 iOS 版本,使用 Java 开发 Android 版本,使用 JavaScript/CSS/HTML5 开发 Web 版本。工作量增大的同时也意味着有更多的 bug 需要修复。
这个问题也是 Google 在开发 Google Inbox 时致力要解决的。在最近发布的这款应用中,Google 使用了一些工具实现了70%的代码跨平台复用。
Google Inbox 覆盖 iOS, Android, Web 三个平台,它们使用的是同一个后台代码逻辑,只是前端的用户体验和平台相关特性的实现有所不同。Google 自主开发了一套辅助工具将 Android 版本的 Java 代码逻辑编译为 Objectiv ...
PFIF网上寻人协议
本文的主要内容来自Wikipedia(http://en.wikipedia.org/wiki/People_Finder_Interchange_Format)
PFIF全称People Finder Interchange Format,是一个应用广泛的数据开源的标准协议,这个协议主要是设计用来在不同的政府、救援组织、或是其它的一些灾难中生存者和其亲人联系的网站间进行数据交换的一种协议。
这个协议基于XML,信息中包括人的身份标识,还有人目前的位置和状态等一些信息。PFIF可以通过Atom和RSS feed出去。PFIF可以允许不同的寻人站点进行数据交换和合并。每一条记录都有一个唯一的标识,这个标识说明了这是由哪个域名创建的。这样,当A站点获得B点的某个人的数据时,在A站点可以对这个人的增加的信息可以转到其它站点上再被增加相关的信息,因为有一个唯一的ID,所以信息可以在不同的站点上被附加。
从wikipedia上看,说起PFIF这个事,得回到2001年的911事件,那时人们一共使用了超过25个不同的在线论坛和网上寻人站来查找相关的亲人和朋友(注:寻人网站英文叫:Survivor ...
Bob大叔和Jim Coplien对TDD的论战
今年春节时,我写了一篇《TDD并不是看上去的那么美》,在这篇文章中我列举了一些关于使用TDD的一些难点和对TDD的质疑,后来出现了一些争论(可参见那篇文章的评论),以及Todd同学的《TDD到底美不美》,还有infoQ中文上的那个几乎没有营养离线讨论。今天,有网友给我推来一个英文版infoQ的视频——“Coplien and Martin Debate TDD, CDD and Professionalism”,这是2008年2月18日的视频,视频的主角两个人争论TDD好还是不好,一个是敏捷社区的教主级的人物——Robert Martin(大家称之为“Bob大叔”),另一个是C++,OO,多范式编程的大师Jim Coplien(大家都叫他Cope)。这两个人对TDD的见解有分歧。Coplien的很多观点和我之前的不谋而合,而他自己称他是坚决强烈地站在TDD的对立面上。下面是Jim的原话:
I have adopted a very strong position against what particularly the XP community is calling test ...
“另类” 设计模式
下面这篇文章来自这里:http://www.lsd.ic.unicamp.br/~oliva/fun/prog/resign-patterns,这篇文章有点意思了,山寨了我们著名的Design Pattern。这篇文章并不是很容易翻译,也许我翻译的不好,大家多指正。另外,这篇文章将失去原有的趣味在于其使用了经典设计模式的单词很相似的单词,一走眼你还以为是正二八经的设计模式。呵呵。所以,我在下文中,我会保留原有的英文单词,并把真正的23个经典设计模式的英文名放在旁边(灰色)。这篇文章和之前的如何写出无法维护的代码有异曲同工,个人感觉都是比较欢乐的。
辞职模式Resign PatternsDesign Patterns
不合式的非面向项目软件开发病症
Ailments of Unsuitable Project-Disoriented Software
Elements of Reusable Object-Oriented Software
作者:Michael Duell
目录
概要
1. Cremation ...
可视化的数据结构和算法
还记得之前发布过的那个关于可视化排序的文章吗?在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页,网址在这里,大家可以看看。我把这个页面的目录列在下面并翻译了一下,大家可以直接点击了。
不知道国内的教育有没有相关的教学课件,至少在我大学的时候是没有的。
目录
基础
索引
排序
堆数据结构
图 算法
动态编程
其它…
基础
Stack栈: 数组实现
Stack栈: 链表实现
Queues队列: 数组实现
Queues队列: 链表实现
Lists列表: 数组实现 ( java 版演示)
Lists列表: 链表实现 ( java 版演示)
索引
Binary Search Trees 二叉检索树
AVL Trees (平衡二叉检索树)
Red-Black Trees 红黑树 ( flash 版本演示)
Open Hash Tables 开放哈希表(Closed Addressing 链地址法)
Close ...
读书笔记:对线程模型的批评
——感谢Ian.Sian投递本文——
多线程模型是主流的并发编程模型。在过去几十年来,多线程模型一直是开发并发程序的有力工具。然而,它的历史并非总那么美好。1997年,NASA 的“火星探路者”号在执行任务的途中遭遇了严重的时序异常(参见 “What really happend on Mars“,注目 follow-up 中的现身说法),无法发回探测数据。如果不是 NASA 远程刷新了程序,它的结局就只能是报废在火星上。这一切都是由程序中潜藏的一个优先级反转 bug 造成的。更早的例子还有80年代的一系列 Therac-25 型医用粒子加速器事故。在这些加速器释放出的过量辐射照射之下,数位病人死亡。事后调查显示,至少有一次发生事故的原因,是加速器的控制软件中,存在一个只能由特定操作序列引发的竞争条件 bug。你也许认为这些只是陈年往事,但是直到现在,即便是世界500强公司们高价买来的信息系统,也同样避免不了这些问题。这导致许多程序员认为线程是个潘多拉魔盒,对它采取能躲就躲的态度。然而近来计算机的发展使得躲猫猫的空间越来越小:随便从市场上淘一个CPU,它里面也有不止一个核心。未来的程 ...
(麻省理工免费课程)计算机科学和编程导论
镜像说明:本文原图均不能正常访问,调整过程中,根据视频链接对应的封面图补充了本文的图片,不一定是原博文所采用的图片,文中的优酷链接均已失效,为保持内容一致就继续保留吧————2024年2月20日
以前本站推荐过麻省理工的C/C++的课程,今天在他们的网站看到上有一组关于计算机科学和编程导论的免费公开课(视频是Youtube的),我看了几个课程,我觉得讲得很系统啊,而且有一点一通百通的感觉。虽然是理论课,但是可以感到我国的教育还是有很大差距的。这个组课程推荐给大家(需要翻墙),视频都有字幕,计算机科学系毕业的同学应该会很容易听懂。强烈推荐。(网友Aslan指出已经有人搬运到优酷上了,链接在这里,遗憾的是没有字幕,另外,不知道为什么会说是Python学习)
1: Introduction and Goals; Data Types, Operators, and Variables
Youtube(英文字幕)
优酷(无字幕)
...
预发布环境,Tag发布机制和可重复的部署过程
下面文章由网友吕毅投递,源文是:http://blog.lvscar.info/?p=427
—————————————————————————————————————————————
周末聚会,无意间聊起建筑行业。自己是搞软件开发的,我们的行业从建筑设计/施工过程中借鉴了大量的概念,隐喻,名词。可以说软件就是现实中伴随整个人类历史发展的“建筑”在虚拟空间中的投影。有个两年前问过其他朋友的问题,这次友人又再次提起,“为什么建筑设计过程中没有普遍性的采用版本控制呢?” 瞎扯了一干各种原因后,我们几乎同时想到一个名字”Joel”,建筑设计行业或许缺乏像Joel Spolsky一样十数年如一日,把自己丰富的经验和深入的思考转化成一篇篇文章以向新人传授软件开发过程中那些容易被忽略的概念。高傲的黑客们会对CMMI之类的认证抱以鄙夷之情,但对Joel整理出的12条写出更好软件的”最佳实践”,大家甚至把此称为审视其他团队开发过程的“Joel TEST”以推崇
这12条测试如下:
1. 是否启用版本控制?
2. 是否可以一步构建?
3. 是否进行每日构建?
4. 是否有bug跟踪列表?
...
那些炒作过度的技术和概念
StackExchange.com上有一个贴子在评论着最近20年来被炒作过度的技术,对于出现的结果,大多数赞同,也有一些不赞同。下面我从前15名挑了10个(Java的WORE我去掉了,TDD我也去掉了,因为我觉得他们应该没有炒作过度,而且都不错),按原贴的顺序罗列如下:(后面的一些评论是我加的,欢迎大家讨论)
Top 10 过度炒作的技术和概念
Unified Modeling Language (UML) – UML是一个程序员交流想法的不错的工具,但是他离程序员真正需要的设计工具还差得很远,比如:设计是否符合需求、架构设计、数据流等等。只有为数不多的程序员使用这个工具交流想法,而没有用在具体工作中。
Sharepoint – 现在N多的公司都在用微软的这个东西做公司内部的Intranet。不过安装和维护起来,代价相当的大。但是其市场做的很成功,不对技术上来说对技术人员来说,相当的蹩脚。Sharepoint的设计没有认真地分析过业务流程,仅仅是一个文档存储地。看上去我们似乎可以做任何的事,但是如果你要用其来管理你的项目和track你的项目问题,你会发现其是无比的难用。
...
Google 需要性爱
看到一篇趣文Google Needs Sex,翻译过来。
Brad DeLong 给我们写了 两篇关于“Google遇到的麻烦”的文章(墙),这两篇文章基本上是说, 制造网络欺诈和网络垃圾信息的人会尽其一切努力来和搜索引擎进行博弈,这样一来,其会让搜索到的结果对我们越来越没有帮助(译注:百度的竞价排名成为了制造网络欺诈和网络垃圾信息甚至洗脑的温床)。于是,人们开始去使用其它一些影响地较少的搜索引擎,准确的说,是那些垃圾信息和欺诈信息的东西还不适应于这些搜索引擎。
这让我想到了Sex。
如果你查看一下进化论,你就会知道为什么有性繁殖是有进化性的,是有可持续性的,而进化也是需要巨大的成本的。
为什么自然界不用克隆来繁殖呢?我所理解的最有说服力的答案是—— 防御寄生生物。如果每一代的生物体都和上一代完全的一样,寄生生物就总有一天可以破解生物体的防御,就是为什么!如果我们的某个香蕉园里种植着“克隆香焦” ,那么一旦某种病菌传播开来,那么我们整个香蕉园里的全部香蕉将毁于一旦。所以,混杂基因的模式会让寄生生物或病毒更难破坏我们的防御。
因此,Google的 ...
几篇技术文章
The Art of Unix
http://www.faqs.org/docs/artu/
Perl for Impatient Developer
http://blob.perl.org/books/impatient-perl/iperl.pdf
Game Development with Javascript
http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2009/06/29/game-development-with-javascript-and-the-canvas-element.aspx
Introduction to x64 Assembly
http://software.intel.com/en-us/articles/introduction-to-x64-assembly/
Database Fundamental
https://www.ibm.com/developerworks/wikis/display/db2oncampus/FREE+ebook+-+Databa ...
两本电子书
Learn Python The Hard Way (pdf)
Learn Python The Hard Way
Programming Windows Phone 7 (Charles Petzold)
Programming Windows Phone 7 by Charles Petzold
一些非常不错的资料
目录
一、Intel 给开发人员推荐的资料列表(2010年下半年)
二、jQuery Fundamentals
三、How to Design Programs
四、Microsoft All-In-One Code Framework
一、Intel 给开发人员推荐的资料列表(2010年下半年)
Intel Recommended Books for Developers
其中包含了
硬件:硬件,电源,存储,无线
软件:多线程和多核技术,高性能计算,图形游戏,用户关注
嵌入式:设计,软件,操作系统,安全,优化。
IT部门:策略和决策,服务器和数据中心,客户端
--
二、jQuery Fundamentals
jQuery Fundamentals
这可能是我见过写得最好的jQuery教程了,大量的示例,只是没有时间和精力,不然一定全部翻译过来。
jQuery Fundamentals - Code Example
还有其它关于jQuery的文章,你 ...
代码优化概要
本文译自Dr. Dobb’s Blogger的Walter Bright写的《Overlooked Essentials For Optimizing Code
》
我编写程序至今有35年了,我做了很多关于程序执行速度方面优化的工(一个示例),我也看过其它人做的优化。我发现有两个最基本的优化技术总是被人所忽略。 注意,这两个技术并不是避免时机不成熟的优化。并不是把冒泡排序变成快速排序(算法优化)。也不是语言或是编译器的优化。也不是把 i*4写成i<<2 的优化。 这两个技术是:
使用 一个profiler。
查看程序执行时的汇编码。
使用这两个技术的人将会成功地写出运行快的代码,不会使用这两个技术的人则不行。下面让我为你细细道来。
使用一个 Profiler
我们知道,程序运行时的90%的时间是用在了10%的代码上。我发现这并不准确。一次又一次地,我发现,几乎所有的程序会在1%的代码上花了99%的运行时间。但是,是哪个1%?一个好的Profiler可以告诉你这个答案。就算我们需要使用100个小时在这1%的代码上进行优化,也比使用100个小时在其它99%的代码上优 ...
Waterfall 软件工程
《Royce, Winston (1970), “Managing the Development of Large Software Systems”, Proceedings of IEEE WESCON 26 (August): 1–9. 》,这篇文章向你说明了软件工程鼻祖“Waterfall”的工程模型,这是40年前的论文,其中的十张插图很有强大,抽出来,让我们来看看什么叫Waterfall软件工程。
首先,让我先看一下小的程序是怎么做的,呵呵,很简单,两步。
接下来,就是我们最经典的Waterfall软件工程模型了,用户需求,软件需求,需求分析,设计,编码,测试,运维。
为了保证每个步骤都能正确实施,于是,每个步骤之间需要有一定的交互,这是我们所希望的样子。
然后,不幸的是,我们总是在测试的时候发现了设计甚至需求的问题,因此,不得不让我们返工。
为了解决上面的“返工”问题,我们可以使用下面的几步来解决。
第一步,叫Preliminary Design,程序设计先行,确定在进入需求分析之前,我们的概要设计要完整。
第二步,我们叫Document ...