每一个程序员都必须阅读的10篇文章

原文:10 Atricle Every Programmer Must Read by Javin
Paul

作为一名Java程序员和软件开发者,我已经从那些名为《关于XXX,每个程序员都应了解的》的文章中学了很多东西,这些文章倾向于提供许多关于某一个特定主题的实用的、有深度、难以发掘的信息。在我的学习过程中,我读到了不少非常有用的文章,我会收藏这些文章以便日后参考和再次阅读。我个人认为所有程序员可以从这些文章中获益,这也是促使我发帖,并与你们分享这些《关于XXX,每个程序员都应了解的》文章的原因。

这些文章都来自我的收藏夹。在这篇文章中,你可以读到那些非常经典的《关于XXX,每个程序员都应了解的》系列文章,主题包括内存、Unicode、浮点运算、网络、面向对象设计、时间、URL编码、字符串等等。这份文章清单对于缺乏实践经验的新手来说十分重要。正因为这些帖子就是从实践经验为出发点写的,所以初级和中级程序员可以从中学到很多东西。在职业生涯的初期就学习这些知识也可以避免其他程序员和软件开发者在他们的成长过程中所犯的错误。只通读一次很难掌握所有的知识要点。其中许多关于浮点数或内存的细节问题,你可能会感到不能理解或者困惑,但重要的是你的身边需要这样一份清单,当遇到文章中所描述的情形时,可以多次查询参考。

那么祝你们好运,好好享受阅读这些好文章的过程吧。对了,顺便说下,如果哪些《关于XXX,每个程序员都应了解的》文章不在这份清单中,不要忘了把它们拿出来分享给大家。

《关于内存,每一个程成员都应了解的》

这是经典文章中的一篇,介绍了内存的许多方面,一些比较老的东西、一些比较新的、一些已知的、一些未知的。尽管这些很常见,但不是每一个程序员都有足够的内存知识。如果你想要编写高性能的应用程序,那么当代系统中内存的知识就更为重要。硬件设计者设计了复杂的内存和加速技术——比如CPU的高速缓存——但只有在程序员的帮助下才能得到优化。直到现在我仍在阅读这篇文章,我从中学到了很多关于RAM、CPU高速缓存的知识,比如L1和L2高速缓存、不同类型的内存、直接存储器访问、存储控制器设计和通用内存。简而言之,这对任何水平的程序员来说都是一篇必读的文章。

《关于浮点运算,每一个计算机科学家都应了解的》

浮点运算是一个非常微妙的话题,一般很难精通浮点运算。甚至许多Java程序员都不知道当用==进行float/double类型对比时什么会出错。我们中的许多人经常在用float和double类型进行货币计算时犯错误。这篇文章是此系列中另一篇精品,也是所有软件开发者和程序员都必须要读的文章。当你的经验慢慢的丰富起来的时候,你就期望着能学到一些常见事物的细小方面的知识,浮点运算就是其中一种。作为高级Java开发者,你必须知道怎样用float、double或BigDecimal类实现货币计算,如何四舍五入浮点数等。即使你已经知道了浮点运算的基础知识,你仍可以从中学到些新东西。

《关于Unicode,每一个开发者都应了解的》

字符编码则是另一个令许多程序员纠结的领域,《关于Unicode和字符集,每一个软件开发者至少绝对必须要知道的(不要找任何理由,绝对是必须要知道的!)》就是要填补这一领域的空白。需要注意的是,对了,那就是文章的标题。Joel Spolsky写的这篇文章,他是statckoverflow.com的创始人之一。Joel大约十年前在他的博客里写了这篇文章,但直到今日,这篇文章仍然适用。这篇文章将教会你什么是Unicode、什么是字符编码、字符是怎样通过字节来实现显示的等等。这篇文章最棒部分是语言表达和流程图,即使对于Unicode你什么都不懂,也能很简单学会Unicode。简而言之,又是一篇所有程序员、编码员和软件工程师必须要读的文章。

《关于时间,每一个程序员都应了解的》

除了字符编码,时间和日期又是另一个令许多程序员纠结的领域,也包括我。甚至一些高级开发者都会对GMT时间、UTC时间、夏时令和闰秒感到迷惑。说实在的,仅仅是处理时区时能保证不犯错就很不容易了,更何况还要加上夏时令等其他一些影响。如果你使用试错法,问题会变得更严重,因为这么做永远解决不了你的问题。许多事情会让你犯错,还有同等数量的错误概念。比如说,日期是否包含时区,这问题将如地狱般折磨你;将UNIX时间转换成其他时区时间,这件事绝对会让你崩溃。忘了时钟同步和延时吧。我希望你能通过阅读这篇经典的文章来纠正许多关于时间的错误概念,并建立起关于时间的基础概念。

《关于URL编码,每一个网页开发者必须知道的》

这篇文章描述了关于统一资源定位符(URL)编码的一些错误概念,在提出常见问题和解决方案前,还尝试着阐明HTTP编码。这篇文章不是针对于某种编程语言的,文章举了一些Java的例子,并通过解释如何修复多个层次的Java和Web应用的URL编码问题来结束文章。你将学到URL语法的基础、HTTP等其他协议的通用URL语句。这篇文章也探寻了一些常见的URL缺陷,比如字符编码、URL不同部分的保留字符和URL编码/解码问题。如果你是一名Java程序员,那么你也可以学到如何正确处理Java应用程序中的URL、如何架构URL和使用Apache通用HTTP客户端库。文章的最后也提出了最佳范例或URL处理方式,例如,你应该在架构时就编码URL,保证你的URL重写过滤器正确的处理URL等等。简而言之,是一篇网站开发者和程序员必读的文章。

《关于网页开发,每一个程序员应了解什么?》

这是程序员堆栈交换中的一个很有趣的文章,在网站发布前,每一个程序员在实施网站应用的技术细节时应当考虑的问题。这包含了从接口设计、用户体验、安全、网页标准、性能、搜索引擎优化(SEO)、相关技术到几个相关的重要的资源。如今的世界极大程度的依赖于互联网,程序员拥有自己的网站、博客是很常见的。从这篇文章中学到的东西不会在你的专业工作上或私人工作上给予任何帮助。但你将学到所有关键技术,例如HTTP、HTML、XML、CSS、Javascript、浏览器兼容性、减少网站加载时间的小技巧、XML网站地图、W3C规格和其他一些关键细节。

《关于SEO,每一个程序员应了解的》

这是另一篇对于网页开发者、程序员和博客作者来说都非常重要的文章。SEO这个话题太大了,以致于我们无法忽略它,因为许多程序员同时也是博客作者,学习些SEO的基础知识来帮助谷歌找到他们的文章并呈现给其他程序员是非常重要的。在当今这个互联世界里没有哪个公司能脱离互谅网而继续生存,所以SEO就变得更为重要。如果你创建了自己的公司,销售任何产品,那么SEO绝对是你需要关注的东西。所有程序员,特别是网页开发者,会受益匪浅。记住,搜索引擎优化是一个巨大的且动态的主题,而且不同的搜索引擎之间也有差异,比如谷歌、雅虎等。所以为了精通SEO,你需要不断的学习新知识。

《关于未定义行为,每一个C语言程序员应了解的》

C语言有“未定义行为”的概念。未定义行为是一个非常宽泛的题目,它包含了许多微妙之处,这也是我喜欢Java的原因,更少的未定义行为、更少的困惑,更强的未定型和更多的祥和平静。在C语言里许多看似合理的事物实际上都有未定义行为,这在程序里是一个常见的bug来源。除此之外,C语言的任何未定义行为许可其实施(编译器和运行时间)产生可以格式化硬盘的代码,做一些不期望发生的事情,或者更糟。仔细阅读这篇精彩的文章,在“未定义行为”的知识的海洋里遨游吧。

《关于网络,每一个程序员需要知道的》

文章中说到:“你是个程序员。你有没有想过多人在线游戏是怎样运行的?外行人看来这简直是奇迹:两个或更多的玩家通过网络共享同一体验,就像他们真的同时存在于这个虚拟世界一样。但是作为程序员,我们知道其底层运行的真相和我们所看到的是非常不一样的。这一切都是幻觉。”这一篇非常有趣的关于网络的文章,虽然文章是写给游戏程序员的,但是我认为每个程序员和开发者都能从中受益。

《关于字符串,每一个Java开发者应该知道的》

这是一篇我写的关于java.lang.string的文章,我个人认为每一个Java程序员应当知道这些。字符串在Java日常编程工作中是非常重要的,这也是每个Java开发者都应该学习这些知识的原因。这篇文章涉及了字符串的许多重要领域,包括字符串池、字符串文字、对比==和equals()、将字节转换成字符创、为什么字符串是不可变的、正确连接字符串的方式等等。高级程序员可能已经知道这些了,那么也可以利用这篇文章好好的复习一下。

《关于安全,每一个程序员应该了解的是什么?》

这个问题是StackOverFlow上的一个计算机编程学生提出的。我们学习了很多通用编程概念,如操作系统、算法、数据结构、计算机系统结构等等,安全问题也是非常重要的。虽然安全是个非常宽泛的话题,它包含了加密/解密、SSL、网页安全、代码混淆、身份验证、授权等等,一系列程序员至少必须知道的知识。我在刚刚开始工作时不了解太多关于安全的知识,但当我开始编写基于Servlet/JSP的Java网页程序的时候,我开始接触网页安全和一些安全风险,如SQL注入攻击、拒绝服务攻击、XML注入攻击、跨站脚本等。作为Java开发者,现在我遵循fortify、PMP和其他静态代码分析提供商提供的安全Java代码实例。这篇文章是此主题和链接的很好的汇总,无论你是否在做编码工作,你绝对都能从中受益。

《每一个程序员都应知道的延迟数字》

这是篇文章是额外附送的,但是每个程序员必须要读一读。为了编写出任意语言(Java或C++)的高性能应用,你应该知道些延迟数字的基础知识,比如从内存、L1高速缓存、L2高速缓存、SSD和硬盘中读取一个变量将花费多长时间。锁住/解锁mutex、从一个城市发送一个数据包到另一个城市或一个数据中心的数据往返所需要多长时间。这些延迟数字独立于编程语言和核心知识,一个开发者必须编写出高频低延迟的应用。这个链接提供了这些延迟数字这些年演化的对比分析。你可以看到2006年这些延迟数字是什么状态,现在是什么状态。

这些就是《每个程序员必须阅读的文章》系列里的所有文章。通过阅读这些文章标题——“每个程序员或开发者应当了解的”,可以获得某个特定话题的一些比较深层次的知识。实话实说,对于程序员来说有太多的东西需要学习,而学习一门编程语言,比如Java,知识冰山一角,但我们不都是有学习激情的人吗。编程是个很有挑战性的工作,唯一可以在你的职业生涯里一直帮助你的就是基础知识,例如内存、Unicode、浮点数、时间、安全,这对于程序员来说,是非常重要的。只有部分内容是针对某个编程语言的,比如我的关于Java字符串的帖子和《关于未定义行为,每个C语言程序员应了解的》,但是这些对于新人和开发者来说,还是值得学习的。

本文经原作者许可翻译,未经许可禁止转载

时间: 2024-10-09 18:01:44

每一个程序员都必须阅读的10篇文章的相关文章

转:哪本书是对程序员最有影响、每个程序员都该阅读的书?

哪本书是对程序员最有影响.每个程序员都该阅读的书? 国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书<Code Complete>被顶了1306次.如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知

程序员都该阅读的书

国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响.每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书<Code Complete>被顶了1306次.如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知识,我们毕业后能帮助我们在公司中胜任工作的老师就是这

为什么C/C++程序员都要阅读Redis源码之:Redis学习事件驱动设计

为什么我说C/C++程序员都要阅读Redis源码 主要原因就是『简洁』.如果你用源码编译过Redis,你会发现十分轻快,一步到位.其他语言的开发者可能不会了解这种痛,作为C/C++程序员,如果你源码编译安装过Nginx/Grpc/Thrift/Boost等开源产品,你会发现有很多依赖,而依赖本身又有依赖,十分痛苦.通常半天一天就耗进去了.由衷地羡慕 npm/maven/pip/composer/...这些包管理器.而Redis则给人惊喜,一行make了此残生. 除了安装过程简洁,代码也十分简洁.

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话,你最同意哪一句? 1. 技术只是解决问题的选择,而不是解决问题的根本 我们可以因为掌握了最新的 JavaScript 框架 ahem.Angular 的 IoC 容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具. 我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔.否则,我们将进入这样的思维怪圈:把掌握的那项技术比做是锤子,在思考问题时,会自然的把所有的

每个程序员都该知道的10大编程格言

每个程序员都该知道的10大编程格言 编程格言1:无风不起浪 (There is no smoke without fire) 编程格言2:预防为主,治疗为辅(An ounce of prevention is worth a pound of cure:) 编程格言3:不要把鸡蛋都放在一个篮子(Don't put all your eggs in one basket) 编程格言4:种瓜得瓜,种豆得豆(As you sow,so shoul you reap) 编程格言5:欲速则不达(Great

每一个程序员都是自学成才

有很多成为程序员的方法.如果你正行进在一条非常规的道路上,那么你可能会想知道你该追上那些有学位的人.你该怎么和那些在课堂上花了很多时间学习计算机和编程的人竞争? 我的经验来看,竞争的要点不在于学历:关键在于你会如何利用你所掌握的技能.条条大路通罗马.事实上,从学校里是学不到如何做一个web开发人员或Android开发人员的. 每个使用计算机技术的程序员大多靠自学成才,在工作中和自己的空闲时间提高技能.我在完成我的学业的同时,去上了很多与计算机相关的课程,但其中很少是专门讲web开发的.也许你会上

每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头的方案可能并不适合创业公司,那么如何保证高并发问题不成为创业路上的拦路虎,是每一个全栈工程师.资深系统工程师.有理想的程序员必备的技能,希望本文助您寻找属于自己的"成金之路",发亮发光. 目录: 场景及解决方法解读 认识负载 数据跟踪 脑图.caoz大神公众号分享 参考资料 秉承知其然及其

一个程序员的奋斗史 阅读笔记

感悟如下: 1.程序员这个职业在业务方面很少有似是而非的内容,是就是,不是就不是.模棱两可是要不得的,打肿脸充胖子更是大忌,不要动不动就写精通 2.优秀的程序员需要不停学习新技术,多看书,多找资料,并在实践在使用自己学到的技术,不吝惜知识的分享 3.环境很重要:大公司学习,只是有深度,小公司学习知识面广,能解决很多基本问题.但公司若想超越对手,则会选择专研度深的程序员.程序员的知识掌握能力应该是金字塔形的 4.英文的重要性,新技术新知识都是先有英文书籍资料(FUCK) 5.应届生提高技术水平是第

每个程序员都该知道的10大编码原则

回顾我的职业生涯,我曾自己单枪匹马地干过,也和一些特别有才能的人一起共事过,曾解决过一些非常严重的技术难题,也见识过一些鼎鼎大名的技术公司.近期我和我的团队偶然聊起我的这些经历,谈论的成果是我们在编码时应该知道一些原则.这不是规矩,也不是指导方针.它们只是我在编写和运行代码时总结出来的一些需要注意的原则. 1.偏执 这一点与我而言几乎是天生的.我几乎是靠自学才成为了程序员. 我从不相信电脑,也不相信我刚刚修复的bug真的已经修复好了,总之我不相信任何东西.我甚至连自己都不相信.除非多次检验之后,