上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 24 下一页

2018年3月3日

【转】关系模型的实质

摘要: 每当我批评关系式数据库,就会有人说,SQL和关系式数据库的设计,其实偏离了E.F.Codd最初的关系式理论。关系式理论和关系式模型,本身还是很好的,只不过被人实现的时候搞砸了。如果你看透了本质,就会发现这只是一个托词。关系式数据库的问题是根源性的,这个问题其实源自关系式理论本身,而不只是具体的实现。 阅读全文

posted @ 2018-03-03 11:45 AlanTu 阅读(475) 评论(0) 推荐(0) 编辑

【转】对 Go 语言的综合评价

摘要: 以前写过一些对 Go 语言的负面评价。现在看来,虽然那些评价大部分属实,然而却由于言辞激烈,没有点明具体问题,难以让某些人信服。在经过几个月实际使用 Go 来构造网站之后,我觉得现在是时候对它作一些更加“客观”的评价了。 定位和优点 Go 比起 C 和 C++ 确实有它的优点,这是很显然的事情。它比 阅读全文

posted @ 2018-03-03 11:44 AlanTu 阅读(269) 评论(0) 推荐(0) 编辑

【转】黑客文化的精髓

摘要: 听说“黑客文化”这个词,就像在昨天。想起它,眼前就出现一些头发蓬乱,穿黑色道袍的人。最早的时候,他们努力地向人们澄清:“黑客”不是贬义词,不是指那些入侵电脑网络的罪犯。当人们明白过来之后,他们开始告诉人们如何成为一个黑客,并且把黑客与画家相提并论。当人们受到鼓舞,决心成为黑客之后,他们开始向这些人灌 阅读全文

posted @ 2018-03-03 11:43 AlanTu 阅读(407) 评论(0) 推荐(0) 编辑

【转】一个对 Dijkstra 的采访视频

摘要: 一个对 Dijkstra 的采访视频 (也可以访问 YouTube 或者从源地址下载 MPEG1,300M) 之前在微博上推荐了一个对 Dijkstra 的采访视频,看了两遍之后觉得实在很好,所以再正式推荐一下。大部分人可能都知道他对图论算法和操作系统的贡献,而其实 Dijkstra 在程序语言上的 阅读全文

posted @ 2018-03-03 11:39 AlanTu 阅读(282) 评论(0) 推荐(0) 编辑

【转】程序员的心理疾病

摘要: 由于程序员工作的性质,他们长期以来受到的所谓“黑客”式的“熏陶”,形成了一种行业性的心理疾病。患了这种病的人对于很多新入行的人,甚至一些外行人士造成了持续的伤害。慢慢的,这些不幸的受害者也形成了“条件反射”,进而成为了这个心理变态的系统的一部分,导致越来越多的人,越来越快的变成“怪胎”。这是一件可怕 阅读全文

posted @ 2018-03-03 11:33 AlanTu 阅读(399) 评论(0) 推荐(0) 编辑

【转】程序语言与它们的工具

摘要: 谈论了这么多程序语言的事情,说得好像语言的好坏就是选择它们的决定性因素。然而我一直没有提到的一个问题是,“程序语言”和“程序语言工具”的设计,其实完全是两码事。一个优秀的程序语言,有可能由于设计者的忽视或者时间短缺,没有提供良好的辅助工具。而一个不怎么好的程序语言,由于用的人多了,往往就会有人花大力 阅读全文

posted @ 2018-03-03 11:29 AlanTu 阅读(172) 评论(0) 推荐(0) 编辑

【转】我和权威的故事

摘要: 每个人小时候心里都是没有权威的,就像每个人小时候也都不相信广告一样。可是权威就像广告,它埋伏在你的潜意识里。听一遍不信,听两遍不信,……,直到一千遍的时候,它忽然开始起作用了,而且这作用越来越强。 消灭广告所造成的幻觉,最好的办法就是去尝试,去实地的考察它。有些虚幻的东西只要你第一次尝试就会像肥皂泡 阅读全文

posted @ 2018-03-03 09:50 AlanTu 阅读(262) 评论(0) 推荐(0) 编辑

【转】原因与证明

摘要: 我在 Cornell 的时候经常遇到这样的问题,那就是教授们一上课就在黑板上写长篇的“定理证明”,全体同学认认真真在下面抄笔记,就连只有十来个人的小课也是那样。有些写字速度慢的人就不得不带上小型录音机,把教授的课全都录下来,要不就是之后去借别人的笔记来抄。 有一次某知名教授照着讲义,背对着学生,在黑 阅读全文

posted @ 2018-03-03 09:47 AlanTu 阅读(185) 评论(0) 推荐(0) 编辑

【转】程序语言不是工具

摘要: 在谈论到程序语言的好坏的时候,总是有人说:“程序语言只是一种工具。只要你的算法好,不管用什么语言都能写出一样好的程序。”在本科第一堂编程课上,我的教授就这么对我们说。可是现在我却发现,这是一个根本错误的说法。 我不知道这种说法确切的来源,然而昨天在浏览网页的时候,偶然发现了 C++ 的设计者 Bja 阅读全文

posted @ 2018-03-03 09:45 AlanTu 阅读(195) 评论(0) 推荐(0) 编辑

【转】程序语言的常见设计错误(2) - 试图容纳世界

摘要: 之前的一篇文章里,我谈到了程序语言设计的一个常见错误倾向:片面追求短小,它导致了一系列的历史性的设计错误。今天我来谈一下另外一种错误的倾向,这种倾向也导致了很多错误,并且继续在导致错误的产生。 今天我要说的错误倾向叫做“试图容纳世界”。这个错误导致了 Python,Ruby 和 JavaScript 阅读全文

posted @ 2018-03-03 09:36 AlanTu 阅读(196) 评论(0) 推荐(0) 编辑

【转】关于语言的思考

摘要: 之前写了那么多 Haskell 的不好的地方,却没有提到它好的地方,其实我必须承认我从 Haskell 身上学到了非常重要的东西,那就是对于“类型”的思考。虽然 Haskell 的类型系统有过于强烈的约束性,从一种“哲学”的角度(不是数学的角度)来看非常“不自然”,但如果一个程序员从来没学过 Has 阅读全文

posted @ 2018-03-03 09:35 AlanTu 阅读(216) 评论(0) 推荐(0) 编辑

【转】一种新的操作系统设计

摘要: 我一直在试图利用程序语言的设计原理,设计一种超越“Unix 哲学”的操作系统。这里是我的设想: 这种系统里面的程序间通信不使用无结构的字符串,而是使用带有类型和结构的数据。在这样的系统里面,Unix 和其它类似操作系统(比如 Windows)里的所谓“应用程序”的概念基本上完全消失。系统由一个个很小 阅读全文

posted @ 2018-03-03 09:31 AlanTu 阅读(174) 评论(0) 推荐(0) 编辑

【转】谈“P=NP?”

摘要: “P=NP?” 通常被认为是计算机科学最重要的问题。有一个叫Clay Math的研究所,甚至悬赏 100 万美元给解决它的人。可是我今天要告诉你的是,这个问题其实是不存在的,它根本不需要解决。 我并不是第一个这样认为的人。在很早的时候就有个数学家毫不客气的指出,P=NP? 是个愚蠢的问题,并且为了嘲 阅读全文

posted @ 2018-03-03 09:16 AlanTu 阅读(7576) 评论(0) 推荐(0) 编辑

【转】谈程序的“通用性”

摘要: 在现实的软件工程中,我经常发现这样的一种现象。本来用很简单的代码就可以解决的问题,却因为设计者过分的关注了“通用性”,“可维护性”和“可扩展性”,被搞得绕了几道弯,让人琢磨不透。 这些人的思维方式是这样的:“将来这段代码可能会被用到更多的场合,所以我现在就考虑到扩展问题。”于是乎,他们在代码中加入了 阅读全文

posted @ 2018-03-03 09:01 AlanTu 阅读(1023) 评论(0) 推荐(0) 编辑

【转】测试驱动开发

摘要: 现在的很多公司,包括 Google 和我现在的公司 Coverity,都喜欢一种“测试驱动的开发”(test-driven development)。它的原理是,在写程序的时候同时写上自动化的“单元测试”(unit test)。在代码修改之后,这些测试可以批量的被运行,这样就可以避免不应该出现的错误 阅读全文

posted @ 2018-03-03 08:55 AlanTu 阅读(148) 评论(0) 推荐(0) 编辑

【转】什么是“脚本语言”

摘要: 很多人都会用一些“脚本语言”(scripting language),却很少有人真正的知道到底什么是脚本语言。很多人用 shell 写一些“脚本”来完成日常的任务,用 Perl 或者 sed 来处理一些文本文件,很多公司用“脚本”来跑它们的“build”(叫做 build script)。那么,到底 阅读全文

posted @ 2018-03-03 08:52 AlanTu 阅读(519) 评论(0) 推荐(0) 编辑

【转】“解决问题”与“消灭问题”

摘要: 一直以来,人们都重视“解决问题”的能力,却忽视了另一种重要的能力:“消灭问题”的能力。各种各样的竞赛,分数和排名,让很多人从小就片面的认为,能“解决问题”的人,就是最厉害的人。拿到一个问题就埋头求解,很少考虑这问题到底有什么意义。这种呆板的思维方式,不仅存在于低级的“应试”和“解题”过程,而且蔓延到 阅读全文

posted @ 2018-03-03 08:50 AlanTu 阅读(296) 评论(0) 推荐(0) 编辑

【转】程序语言的常见设计错误(1) - 片面追求短小

摘要: 我经常以自己写“非常短小”的代码为豪。有一些人听了之后很赞赏,然后说他也很喜欢写短小的代码,接着就开始说 C 语言其实有很多巧妙的设计,可以让代码变得非常短小。然后我才发现,这些人所谓的“短小”跟我所说的“短小”完全不是一回事。 我的程序的“短小”是建立在语义明确,概念清晰的基础上的。在此基础上,我 阅读全文

posted @ 2018-03-03 08:49 AlanTu 阅读(251) 评论(0) 推荐(0) 编辑

【转】解密“设计模式”

摘要: 有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验的问题,所以想在这里做一个总结。 总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是可以借鉴以前的经验,用来 阅读全文

posted @ 2018-03-03 08:47 AlanTu 阅读(176) 评论(0) 推荐(0) 编辑

【转】所谓软件工程

摘要: 很多编程的人包括我,头衔叫做“软件工程师”(software engineer),然而我却不喜欢这个名字。我喜欢把自己叫做“程序员”(programmer)或者“计算机科学家”(computer scientist)。这是为什么呢?这需要从“软件工程”(software engineering)在现 阅读全文

posted @ 2018-03-03 08:42 AlanTu 阅读(159) 评论(0) 推荐(0) 编辑

2018年3月2日

算法知识目录整理

摘要: 算法知识目录整理 1. 算法部分 二分搜索 Binary Search 分治 Divide Conquer 宽度优先搜索 Breadth First Search 深度优先搜索 Depth First Search 回溯法 Backtracking 双指针 Two Pointers 动态规划 Dyn 阅读全文

posted @ 2018-03-02 23:14 AlanTu 阅读(230) 评论(0) 推荐(0) 编辑

买书不读是一种什么病?

摘要: 买书不读是一种什么病? 在日语中有这么个词特别的单词:積ん読(Tsundoku),用来形容买很多书却把它们扔在角落积灰的行为,这个词的起源可以追溯到明治时代,翻译成中文大概就是“买书如山倒,读书如抽丝”。 对,说的就是你。 在开始阅读这篇文章之前,先告诉我,你书架上和 Kindle 中现在放着的书里 阅读全文

posted @ 2018-03-02 16:23 AlanTu 阅读(577) 评论(0) 推荐(0) 编辑

Linux 下socket通信终极指南(附TCP、UDP完整代码)

摘要: linux下用socket通信,有TCP、UDP两种协议,网上的很多教程把两个混在了一起,或者只讲其中一种。现在我把自己这两天研究的成果汇总下来,写了一个完整的,适合初学者参考,也方便自己以后查阅。 首先讲什么是socket,不喜欢理论的可以略过。 Berkeley套接字应用程序接口(API)包括了 阅读全文

posted @ 2018-03-02 16:13 AlanTu 阅读(3445) 评论(0) 推荐(0) 编辑

fcntl函数用法详解

摘要: 功能描述:根据文件描述词来操作文件的特性。 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int c 阅读全文

posted @ 2018-03-02 11:13 AlanTu 阅读(2573) 评论(0) 推荐(0) 编辑

2018年3月1日

计算机经典书籍【转】

摘要: 【动机】就计算机这个专业来说吧,因为我是非科班出身的学生,要重新开始补相应的知识,目前定下来要学习的基础理论知识有:离散数学,数据结构与算法, 组成原理,汇编,操作系统,网络等等,有的时候觉得这里每一个知识点要学的深入的话都是无底洞,不过我又是那种喜欢追根究底的人,比如学习a知识的时候要 用到b知识 阅读全文

posted @ 2018-03-01 00:41 AlanTu 阅读(1429) 评论(0) 推荐(0) 编辑

2018年2月28日

进程在Linux内核中的角色扮演

摘要: 在Linux内核中,内核将进程、线程和内核线程一视同仁,即内核使用唯一的数据结构task_struct来分别表示他们;内核使用相同的调度算法对这三者进行调度;并且内核也使用同一个函数do_fork()来分别创建这三种执行线程(thread of execution)。执行线程通常是指任何正在执行的代 阅读全文

posted @ 2018-02-28 12:15 AlanTu 阅读(275) 评论(0) 推荐(0) 编辑

存储映射I/O

摘要: 一个进程拥有独立并且连续虚拟地址空间,在32位体系结构中进程的地址空间是4G。不过,内核在管理进程的地址空间时是以内存区域为单位。内存区域是进程整个地址空间中一个独立的内存范围,它在内核中使用vm_area_struct数据结构来描述。每个内存区域都有自己访问权限以及操作函数,因此进程只能对有效范围 阅读全文

posted @ 2018-02-28 12:11 AlanTu 阅读(1174) 评论(0) 推荐(0) 编辑

伙伴算法的实现-分配页框

摘要: 内核中alloc_pages系列页框分配函数都是基于伙伴算法实现的,这些函数最终都会调用伙伴算法的入口函数buffered_rmqueue()。 Linux内核管理物理内存有三种方式,其一就是经典的伙伴算法。但是伙伴算法分配物理内存的基本单位是页框,因此内核又引入了slab机制,基于此机制实现的物理 阅读全文

posted @ 2018-02-28 12:08 AlanTu 阅读(1555) 评论(0) 推荐(0) 编辑

内部排序算法小结

摘要: 内部排序算法主要分为插入类排序、交换类排序和选择类排序,它们在性能上的差异主要体现在时间复杂度、空间复杂度和稳定性。各种排序算法都会进行元素间的比较和移动,时间复杂度主要由整个排序过程中的比较次数和移动次数决定。空间复杂度体现在除了待排序记录本身所占的空间,排序过程中占用了多少辅助空间。 1.插入类 阅读全文

posted @ 2018-02-28 12:05 AlanTu 阅读(412) 评论(0) 推荐(0) 编辑

typedef那回事儿

摘要: typedef是一种特殊的声明方式,不过它与普通声明(详见这里)的含义取大不相同。普通声明的主角是“变量”,它或是创建一个新变量或是对外文件变量使用前的声明;而typedef声明的主角则是“类型”,通过这个声明对一种数据类型引入新的名字。从引入新名字这个角度来说,typedef声明又和宏定义有些相似 阅读全文

posted @ 2018-02-28 12:01 AlanTu 阅读(425) 评论(0) 推荐(0) 编辑

声明那回事儿

摘要: C语言中的变量声明是让程序员比较苦恼的一件事,因为过多的优先级规则使得阅读声明并不能像自然方式那样从左至右的阅读。比如下面这个声明: int (*(*fun)())(); 对于这个声明,你能准确说出它的含义吗?这个声明涉及到本文的两大主题:什么是声明和声明的阅读规则。本文的最后将给出这个声明的准确含 阅读全文

posted @ 2018-02-28 11:53 AlanTu 阅读(146) 评论(0) 推荐(0) 编辑

C语言中的指针和数组

摘要: 下面的内容节选自由我所执笔的会议记录。对于本文的不足之处,各位可以提出自己的看法。 Q1:指针和数组到底是怎么一回事? A:指针和数组有本质的不同。指针就是一个内存地址,在32位系统下,一个指针永远占4个字节;数组是一块连续的内存空间,我们从一个已定义的数组中可以获得数组大小以及这块连续内存空间的起 阅读全文

posted @ 2018-02-28 11:47 AlanTu 阅读(284) 评论(0) 推荐(0) 编辑

C语言笔记本

摘要: 在此记录一些常见的C语言错误,可以当作学习C语言的笔记,需要的时候可以回过头看看。 1.关于“++” 关于自加自减运算符用于句话就可以总结:a++先使用后自加,++a先自加再引用。这样就可以轻松得出结果: 2.交换变量 第一种方法即中间变量法,下面说明第二种,不添加中间变量: 3.char* str 阅读全文

posted @ 2018-02-28 11:44 AlanTu 阅读(423) 评论(0) 推荐(0) 编辑

西邮Linux兴趣小组纳新笔试试题

摘要: 下面是西邮Linux小组今年纳新的笔试试题 1、 下面这个程序的输出结果是什么? int main() { int a = (1, 2); printf(“a = %d\n”, a); return 0; } 解答: a = 2 这里利用了逗号表达式。 2、下面这个程序的输出结果是什么? struc 阅读全文

posted @ 2018-02-28 11:40 AlanTu 阅读(363) 评论(0) 推荐(0) 编辑

2018年2月27日

[译]《数学:更好的解释》之培养数学直觉

摘要: Developing Your Intuition For Math Our initial exposure to an idea shapes our intuition. And our intuition impacts how much we enjoy a subject. What d 阅读全文

posted @ 2018-02-27 14:41 AlanTu 阅读(835) 评论(0) 推荐(0) 编辑

你是想读书,还是想读完书?

摘要: 以前,读书前会很想读一本书,但实际读书时,经常是“想读完书”,而不是“想读书”。这种想法经常会让我的生活变得很痛苦,当你做一件事想着快点做完时,你的心思其实已经不在这件事上了。 这个问题在我大学时困扰了我很久。我没有意识到这本身其实是一个价值观问题,以至于我常在一些时间管理的书中寻找答案。那些书都只 阅读全文

posted @ 2018-02-27 14:37 AlanTu 阅读(304) 评论(0) 推荐(0) 编辑

给计算机专业大学生整理的书单

摘要: 作者: [美] Charles Petzold出版社: 电子工业出版社副标题: 隐匿在计算机软硬件背后的语言原作名: Code: The Hidden Language of Computer Hardware and Software译者: 左飞 / 薛佟佟出版年: 2010页数: 392定价: 阅读全文

posted @ 2018-02-27 14:35 AlanTu 阅读(7992) 评论(0) 推荐(2) 编辑

理解矩阵(三)

摘要: 在第二部分结束的时候,我说: “矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述。而 作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够把线性空间中的一个坐标系(基)表换到另一个坐标系(基)去。而且,变换点 与变换坐标系,具有异曲同工的效果。线性代数里最有趣的奥妙,就 阅读全文

posted @ 2018-02-27 14:23 AlanTu 阅读(333) 评论(0) 推荐(0) 编辑

理解矩阵(二)

摘要: 上一篇里说“矩阵是运动的描述”,到现在为止,好像大家都还没什么意见。但是我相信早晚会有数学系出身的网友来拍板转。因为运动这个概念,在数学和物理里是跟微积分联系在一起的。我们学习微积分的时候,总会有人照本宣科地告诉你,初等数学是研究常量的数学,是研究静态的数学,高等数学是变量的数学,是研究运动的数学。 阅读全文

posted @ 2018-02-27 14:22 AlanTu 阅读(254) 评论(0) 推荐(0) 编辑

理解矩阵(一)

摘要: 前不久chensh出于不可告人的目的,要充当老师,教别人线性代数。于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次。很明显,chensh觉得,要让自己在讲线性代数的时候不被那位强势的学生认为是神经病,还是比较难的事情。 可怜的chensh,谁让你趟这个地雷阵?!色令智昏啊! 线性代数课程,无论 阅读全文

posted @ 2018-02-27 14:20 AlanTu 阅读(606) 评论(0) 推荐(1) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 24 下一页

导航