做为一名Java程序员和软件开发人员,那些每一个程序员都应该知道的XXX的文章教会了我很多东西,它们提供了某个特定领域的一些实用的而且有深度的信息,这些东西一般很难找到。在我学习的过程当中我读到过许多很是有用的文章,我把它们添加到了书签里,方便之后阅读或者引用。我我的认为全部开发人员都能从这些文章中受益,所以我也写了篇“每一个程序员都应该了解的”文章,准备分享给大家。这是个人我的收藏。在这篇文章中,你会看到每一个程序员都应该了解的一些经典文章,涵盖了内存,unicode,浮点数,网络,面向对象设计,时间,URL编码,字符串等话题。这个列表对初学者和新手来讲很是重要,由于他们如今缺的正是实战的经验。而这些文章正好是实践相关的,他们能够从中学到不少东西。在职业生涯的初级,早点了解一些基础的知识有助于从此避免犯错,这些坑已经被其余的程序员和软件开发人员在他们学习的过程当中踩过了。你可能还搞不明白浮点数的一些细节,或者被内存的细节弄得晕头转向,不过将这份列表保留在手边仍是颇有必要的,在适当的时候能够时不时的参考下。祝你好运,但愿你能喜欢这些文章。顺便提一句,若是有任何的程序员必读系列的文章没在这个列表中,别忘了分享一下。html
这是篇很是经典的文章,它将会带领你走入内存的各个方面,有老的,也有新的,有知道的,也有不知道的。尽管内存十分常见,无处不在,但并非每一个程序员都足够了解它。若是你正在编写高性能的应用程序的话,了解现代系统中的内存尤其重要。硬件设计师们带来了更复杂的内存处理及加速的技术,好比说CPU缓存,但若是离开了程序员它们也没法发挥出最大的价值。我仍在阅读这篇文章,很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不一样类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简而言之,它是各个层次的程序员都必读的文章。java
浮点数运算是一个很是有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使用==操做符比较float/double类型的话到底出现什么问题。许多人在使用float/double进行货币计算的时候常常会犯错。这篇文章是这一系列中的精华,全部的软件开发人员都应该读一下。随着你经验的增加,你确定想去深刻了解一些常见的东西的细节,浮点数运算就是其中之一。做为一名Java高级开发人员,你必须了解如何进行货币运算,什么时候使用float,double或者BigDecimal,如何对浮点数进行舍入运算等等。就算你知道了浮点数运算的一些基础知识,读下这篇文章,你确定还会学到一些新的东西。程序员
字符编码是另外一个许多程序员痛苦挣扎的领域,”每个程序员都绝对绝对应该了解Unicode以及字符集(不准找任何借口!)“填补了这一空白。标注一下,是的,这就是这篇文章的标题。它是由stackoverflow.com的创始人之一,Joel Spolsky所写的。Joel10年前就在他的博客上发表了这篇文章,不过对于如今而言仍然适用。这篇文章会告诉你什么是Unicode,什么是字符编码,字符是如何经过字节来表示的等等。这篇文章最赞的一点就是它的语言及行文,尽管你根本不知道什么是Unicode,你也可以很容易地看懂。一句话,这又是一篇程序员,码农,软件工程师必读的文章。web
除了字符编码外,时间和日期又是另外一个程序员常常栽倒的领域,包括我本身在内。甚至是高级开发人员也会被格林尼治标准时间(GMT),世界标准时间(UTC),夏令时,闰秒这些东西搞的死去活来。坦白地说,在处理时区这个问题上,很难不踩一些坑,更别说再加上夏令时什么的。若是你想要试错法的话则更糟糕,由于这么作永远也解决不了你的问题。这里有许多可能出错或者产生误解的地方。比方说,日期是否包括时区可能就会困扰到你,将UNIX时间转化成其它的时区可能会让你崩溃,你仍是忘了时钟同步和延迟这些事吧。我但愿读完这篇经典的文章后,你的许多关于时间的误解都可以消除,本身可以巩固一些关于日期的基础常识。算法
这篇文章介绍了Uniform Resource Locator(URL)编码中的一些常见的误解,而后试图阐明什么是HTTP的URL编码,最后列举了一些常见的错误及解决方案。尽管这篇文章的内容并不特定于某种编程语言,但它是用Java来进行问题的描述,并修复URL编码中存在的问题。你会学习到URL的基础语法,HTTP及其它协议中通用的URL格式。这篇文章还介绍了URL中的一些常见错误,好比字符编码,URL不一样部分的保留字符,以及URL编解码问题。若是你是一名Java开发人员,你会学习到如何在Java中正确地处理URL,如何构造URL,以及如何使用Apache Common Http client库。最后它还提供了一些最佳实践的建议,好比你应该在构建URL的时候进行编码,确保你的重写URL的过滤器正确地处理了URL,等等。这是任何WEB开发人员必读的文章 。编程
这是programmers.stackexchange.com上的一篇很是有趣的文章,它讲的是程序员在将网站对外发布以前须要实现的技术细节。这包括接口设计及用户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及一些重要的资源。当今世界严重地依赖于互联网,不少程序员都有本身的网站,一般是一个博客。这篇文章中学到的东西可能对你的专业没有帮助,但它对你我的的事情确定会有所帮助。你会了解到一些关键的技术,好比HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减小网站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。数组
这对WEB开发人员,程序员,博主而言又是一篇很重要的文章。因为不少程序员同时也是博主,你没法对SEO视而不见,学一个搜索引擎优化的基础知识仍是很是重要的,这能帮助Google检索到你的内容并推荐给其它程序员。在今天这个网络互联的时代,没有任何公司能够脱离WEB而存在,SEO变得尤其重要。若是你有一家初创企业在卖一些产品,那么SEO就是你要关注的事情。全部程序员,尤为是WEB开发人员,均可以从这篇文章中受益良多。记住,SEO是一个很宽泛变化的题目,不一样的搜索引擎,好比Google,Yahoo等,它们的SEO都各不相同。所以,要想掌握这项技能你得常常更新你的知识库。浏览器
C语言有一个未定义行为的概念。未定义行为是一个很宽泛的主题,它有许多细微的差异,这就是为何我喜欢Java的一个缘由,没有这么多的未定义行为,没有这么多的困惑,更稳定也更消停。不少人看起来很天然的事情在C里实际上是未定义的行为,这也是程序BUG的一个常见的来源。除此以外,C中的任何未定义行为都由具体实现来决定(编译器和运行时),它们生成的代码会格式化你硬盘,作一些意想不到的事情,甚至更糟。读下这篇文章,到未定义行为的海洋里遨游吧。缓存
这段话摘自这篇文章,”你是一个程序员。你有想过多玩家的游戏是如何实现的吗?从外面看起来它是:两个或多个玩家经过网络共享相同的经验,就像他们在同一个虚拟世界中同样。不过做为程序员,咱们知道底下的真相和你看到的东西是有所区别的。事实上这都只是一个错觉“。这是篇关于网络的很是有趣的文章,它是为游戏开发人员而写的,不过我认为每一个程序开发人员都能从中受益。安全
这是我本身关于java.lang.String的一篇文章,我我的认为每一个Java开发人员都应该了解一下。String在平常的Java开发中很是重要,这就是为何每一个Java程序员都应该对它很是了解。这篇文章涉及到了String的许多重要的领域,包括String池,字符串常量,使用==和equals比较字符串,将字节数组转化成String,为何字符串是不可变的,如何正确拼接字符串,等等。高级程序员应该都知道这些东西了,不过回顾一下也是不错的。
有一个计算机系的学生在StackOverFlow上问了这个问题。就像咱们了解到的一些常见编程概念好比操做系统,算法,数据结构,计算机体系结构,以及其它东西同样,了解安全也一样重要。安全是一个很大的话题,包括加密解密,SSL,WEB安全,混淆,认证,受权,等等,它是每一个程序员都应该了解的基础知识。刚进这行的时候,我我的对安全这块还不是很了解,这时候我就开始基于Servlet/JSP写一些的Java WEB程序,后来我才了解到EWB安全性以及一些安全威胁好比SQL注入,拒绝服务,XML注入,跨站脚本,等等。做为一名Java开发人员,我如今遵循fortify, PMP,以及其它一些静态代码分析器提供的Java安全编码规范进行编码。这篇文章是关于安全这个主题的一个很好的合集,无论你如今还写不写代码,这些资源对你来讲都很是有用。
这篇文章是一份额外的福利,但也是每一个程序员都应该读的。无论用的是什么语言,Java仍是C++都好,要写出高性能的应用程序,你都得了解延迟时间的基础常识,好比从内存中读取一个变量须要多久,从一级缓存中读取又须要多久,二级缓存呢,SSD硬盘中随机读又须要多久,还有要是从磁盘中读呢?互斥锁的加锁解锁须要多长时间,从一个城市发送一个数据包到另外一个城市须要多长时间,在同一个数据中心又须要多久?这些延迟的数字是独立于任何编程语言的,开发人员必需要想写高频低延迟的应用程序,它们是核心知识库中的一部分。这篇文章还有一个好消息就是,它会告诉你这些年以来这些延迟时间的变化。你能够看到2006年的延迟时间是多少,而如今又是多少。
这就是全部程序员必读文章的列表。看到这些文章的标题,每一个程序员都应该知道的XXX,你能了解到关于某个主题的一些比较有深度的知识。坦白说程序员有太多东西要学了,像学习Java语言这种只是冰山的一角,但并非全部人都有热情去学习。写程序是一份颇有挑战的工做,在你的职业生涯中,能帮忙到你的就是这些基础知识,好比,内存,Unicode,浮点数,时间,安全,这些对任何程序员来讲都很是重要。有些文章是和语言相关的,好比我本身那篇关于String的文章,还有每一个C程序员都应该了解的未定义行为,不过对于许多初学者来讲学习一下也有好处。
译注:我以为还有一个必读的,就是数数,这里一共是12篇了。。有几篇访问不了的,我也搬运到本身的博客上了。
原创文章转载请注明出处:每一个程序员都必读的10篇文章