`

每个程序员都必读的12篇文章

 
阅读更多
作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到。


在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用。我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇“每个程序员都应该了解的”文章,准备分享给你们。


这是我的个人收藏。在这篇文章中,你会看到每个程序员都应该了解的一些经典文章,涵盖了内存,unicode,浮点数,网络,面向对象设计,时间,URL编码,字符串等话题。这个列表对初学者和新手来说非常重要,因为他们现在缺的正是实战的经验。而这些文章正好是实践相关的,他们可以从中学到很多东西。


在职业生涯的初级,早点了解一些基础的知识有助于今后避免犯错,这些坑已经被其他的程序员和软件开发人员在他们学习的过程中踩过了。你可能还搞不明白浮点数的一些细节,或者被内存的细节弄得晕头转向,不过将这份列表保留在手边还是很有必要的,在适当的时候可以时不时的参考下。祝你好运,希望你能喜欢这些文章。顺便提一句,如果有任何的程序员必读系列的文章没在这个列表中,别忘了分享一下。


程序员必知之内存篇


这是篇非常经典的文章,它将会带领你走入内存的各个方面,有老的,也有新的,有知道的,也有不知道的。尽管内存十分常见,无处不在,但并不是每个程序员都足够了解它。如果你正在编写高性能的应用程序的话,了解现代系统中的内存尤为重要。


硬件设计师们带来了更复杂的内存处理及加速的技术,比如说CPU缓存,但如果离开了程序员它们也无法发挥出最大的价值。我仍在阅读这篇文章,很难说清楚我到底从中学到了多少关于随机访问内存(RAM),CPU缓存,包括1级,2级缓存,不同类型的内存,直接内存访问,内存控制器设计及普通内存的知识。简而言之,它是各个层次的程序员都必读的文章。


每个计算机科学家都必知之浮点数运算


浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多Java程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。许多人在使用float/double进行货币计算的时候经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下。


随着你经验的增长,你肯定想去深入了解一些常见的东西的细节,浮点数运算就是其中之一。作为一名Java高级开发人员,你必须了解如何进行货币运算,何时使用float,double或者BigDecimal,如何对浮点数进行舍入运算等等。就算你知道了浮点数运算的一些基础知识,读下这篇文章,你肯定还会学到一些新的东西。


每个程序员必知之Unicode篇


字符编码是另一个许多程序员痛苦挣扎的领域,”每一个程序员都绝对绝对应该了解Unicode以及字符集(不许找任何借口!)“填补了这一空白。标注一下,是的,这就是这篇文章的标题。它是由stackoverflow.com的创始人之一,Joel Spolsky所写的。


Joel10年前就在他的博客上发表了这篇文章,不过对于现在而言仍然适用。这篇文章会告诉你什么是Unicode,什么是字符编码,字符是如何通过字节来表示的等等。这篇文章最赞的一点就是它的语言及行文,尽管你根本不知道什么是Unicode,你也能够很容易地看懂。一句话,这又是一篇程序员,码农,软件工程师必读的文章。


每个程序员必知之时间篇


除了字符编码外,时间和日期又是另一个程序员经常栽倒的领域,包括我自己在内。甚至是高级开发人员也会被格林尼治标准时间(GMT),世界标准时间(UTC),夏令时,闰秒这些东西搞的死去活来。坦白地说,在处理时区这个问题上,很难不踩一些坑,更别说再加上夏令时什么的。


如果你想要试错法的话则更糟糕,因为这么做永远也解决不了你的问题。这里有许多可能出错或者产生误解的地方。比方说,日期是否包括时区可能就会困扰到你,将UNIX时间转化成其它的时区可能会让你崩溃,你还是忘了时钟同步和延迟这些事吧。我希望读完这篇经典的文章后,你的许多关于时间的误解都能够消除,自己能够巩固一些关于日期的基础常识。


每个WEB开发人员必知之URL编码篇



这篇文章介绍了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开发人员必读的文章 。


每个程序员必知之WEB开发



这是programmers.stackexchange.com上的一篇非常有趣的文章,它讲的是程序员在将网站对外发布之前需要实现的技术细节。这包括接口设计及用户体验,安全性,WEB标准,性能,搜索引擎优化(SEO),以及一些重要的资源。


当今世界严重地依赖于互联网,很多程序员都有自己的网站,通常是一个博客。这篇文章中学到的东西可能对你的专业没有帮助,但它对你个人的事情肯定会有所帮助。你会了解到一些关键的技术,比如HTML,HTTP,XML,CSS,JavaScript,浏览器兼容性,减少网站加载时间的技巧,XML站点地图,W3C规范,以及许多其它的关键的细节。


每个程序员必知之SEO


这对WEB开发人员,程序员,博主而言又是一篇很重要的文章。由于很多程序员同时也是博主,你无法对SEO视而不见,学一个搜索引擎优化的基础知识还是非常重要的,这能帮助Google检索到你的内容并推荐给其它程序员。


在今天这个网络互联的时代,没有任何公司可以脱离WEB而存在,SEO变得尤为重要。如果你有一家初创企业在卖一些产品,那么SEO就是你要关注的事情。所有程序员,尤其是WEB开发人员,都可以从这篇文章中受益良多。


记住,SEO是一个很宽泛变化的题目,不同的搜索引擎,比如Google,Yahoo等,它们的SEO都各不相同。因此,要想掌握这项技能你得经常更新你的知识库。


C程序必知的未定义行为



C语言有一个未定义行为的概念。未定义行为是一个很宽泛的主题,它有许多细微的差别,这就是为什么我喜欢Java的一个原因,没有这么多的未定义行为,没有这么多的困惑,更稳定也更消停。


很多人看起来很自然的事情在C里其实是未定义的行为,这也是程序BUG的一个常见的来源。除此之外,C中的任何未定义行为都由具体实现来决定(编译器和运行时),它们生成的代码会格式化你硬盘,做一些意想不到的事情,甚至更糟。读下这篇文章,到未定义行为的海洋里遨游吧。


程序员必知之网络


这段话摘自这篇文章,”你是一个程序员。你有想过多玩家的游戏是如何实现的吗?从外面看起来它是:两个或多个玩家通过网络共享相同的经验,就像他们在同一个虚拟世界中一样。


不过作为程序员,我们知道底下的真相和你看到的东西是有所区别的。事实上这都只是一个错觉“。这是篇关于网络的非常有趣的文章,它是为游戏开发人员而写的,不过我认为每个程序开发人员都能从中受益。


Java程序员必知之String



这是我自己关于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篇了。。有几篇访问不了的,我也搬运到自己的博客上了。

来自: it.deepinmind.com

1、https://www.akkadia.org/drepper/cpumemory.pdf

2、http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

3、http://www.joelonsoftware.com/articles/Unicode.html

4、http://unix4lyfe.org/time/?v=1

6、http://programmers.stackexchange.com/questions/46716/what-technical-details-should-a-programmer-of-a-web-application-consider-before

7、http://katemats.com/what-every-programmer-should-know-about-seo/

8、http://en.deepinmind.com/blog/2014/05/15/what-every-c-programmer-should-know.html

9、http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/

10、http://en.deepinmind.com/blog/2014/05/15/java-string-tutorial-and-examples-beginners-programming.html

11、http://stackoverflow.com/questions/2794016/what-should-every-programmer-know-about-security

12、http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
分享到:
评论

相关推荐

    程序员精品文章

    文章:压缩包中的每一篇文章都是一个独立的知识点集合,可能涉及特定的技术主题,如前端框架React或Vue的使用、后端开发的RESTful API设计、数据库优化策略、云计算服务的运用,或者是关于测试自动化、性能监控、...

    程序员必读

    这意味着,在学习新技术或语言时,应当构建一个知识体系,从基础概念到高级应用逐步深入,确保每个知识点都能被牢固掌握,并能与其他知识相互关联,形成网络。 ### 3. 实践与理论相结合 理论学习固然重要,但没有...

    java程序员面试笔试宝典 + 115个Java面试题和答案+进入IT行业必读的324个java面试题

    Java内存分为堆、栈、方法区、本地方法栈和程序计数器,每个区域的作用是什么,何时触发垃圾回收,以及GC的算法(如分代收集、标记-清除、复制、标记-整理等)都是面试常考点。 多线程是Java的一大特色。Java提供了...

    一个JAV A程序员应具备的十项技能.rtf

    一个JAVA程序员应具备的十项技能.rtf 这篇文章,讲述了Java程序员必须具备的十项技能,详细...是一个Java程序员必须具备的,也是Java程序员必读的文章!!想成为Java程序员的你还在等什么呢?赶快下载下来看看吧、、、

    asp.net完全入门、深入、高级文档(程序员必读)

    ASP.NET 完全入门 ...3、理论与实践相结合的典范,大量的例子详细地阐明每一个技术重点; 4、详细的数据库访问、操作说明和例子; 5、详细的高级应用、Web Service等技术带领你由初级读者向高级应用者迈进;

    游戏程序员书单

    本篇文章将根据提供的“游戏程序员书单”内容,对其中涉及的关键知识点进行详细阐述,帮助读者构建起扎实的游戏开发基础。 #### 二、基础知识入门 ##### 1. 儿童游戏编程 - **《官方 Scratch Jr 书籍》(2015)**:...

    Java程序员经典书籍推荐

    虽然这本书经常被列为Java程序员必读书籍之一,但根据个人经验来看,它可能更适合那些已经具备一定并发编程基础的读者。本书由Brian Goetz撰写,主要侧重于理论性的介绍,对于并发编程的基础概念如多线程、同步、...

    算法的力量-程序员必读

    以数据结构为例,它是算法的基础,不同的数据结构适用于解决不同的问题,如链表、数组、树、图等,每一种都有其独特的优势和应用场景。通过深入理解数据结构,可以更高效地设计和实现算法,提高程序的性能。 算法在...

    操作系统高手必读之书

    一个程序在执行时会创建一个或多个进程,每个进程都有自己的地址空间、数据栈和其他操作系统资源。操作系统通过进程管理来确保多个进程能够高效地共享处理器时间和计算机资源。 - **进程状态**:包括就绪状态、运行...

    java新手必读:java学习之路

    这篇文章源自ChinaITLab网校课程,由资深导师刘晓涛总结的Java学习经验,旨在帮助新手避免走弯路,提供有效的学习路径。 1. 培养兴趣 在学习任何技能时,兴趣是最好的老师。对于编程,尤其是Java,兴趣能够让你...

    只刷题能做程序员吗-python-is-for-lovers:我的同事经常向我索要Python学习资源。这里有一些选择。许多技能水平,重点是初

    每个技能水平都有一些。 这不是所有的东西和厨房水槽,但也不是所有的“必读”。 你应该可以随意跳过。 关于方法的说明:我同意“艰难的方法”——边做边学——直接投入——实际上是简单的方法。 不管是否新,让我们...

    程序员考试刷题-awesome-devops-books:DevOps书籍列表

    因为本书的出版CD的发展,但CD本书是一本必读的每一个从业者的DevOps。 持续集成:提高软件质量和降低风险作者:Steve Matyas 和 . 一个时代的产物。 这本 CI 书籍为其他人扩展 CI/CD 实践铺平了道路。 Jenkins 2: ...

    think in c

    Richard Hale Shaw认为这本书对每个进行严肃C++开发工作的开发者来说是必读的。读者评论也是一片赞誉之声,Andrew Schulman、TUG Lines以及PJ Plauger都表达了对这本书的推崇。 总的来说,文档内容揭示了《Thinking...

    java.坦克大战图片2.9版源代码

    本篇文章将详细解读标题为"java.坦克大战图片2.9版源代码"的项目,这是一款基于Java语言开发的经典坦克大战游戏。通过分析其源代码,我们可以深入了解Java游戏开发的基础知识,以及如何利用Java实现图形界面和游戏...

    labuladong的算法小抄完整版.pdf

    从提供的部分内容来看,该文档大致分为以下几个章节,每个章节都对应一种算法或数据结构相关的主题: 第一部分,即开篇词和必读系列,强调了学习算法和刷题的重要性,并提供了解题的框架思维,其中包括动态规划、...

    如何学习Java技术

    从安装JDK并运行第一个程序开始,逐渐过渡到深入理解面向对象编程、核心API和企业级应用开发等方面,每一步都非常重要。通过结合理论学习和实践操作,你可以逐步成长为一名合格的Java程序员。此外,不断地查阅官方...

    Thinking in C++ (中文版)

    这种将理论与实践相结合的写作风格,使得《Thinking in C++》成为每个C++开发者必备的参考书之一。 ### 阅者反馈 《Thinking in C++》受到了广泛的好评,读者们一致认为它是不可或缺的学习资源。从专业期刊如...

    C++程序设计之四书五经

    本篇文章将聚焦于C++语言,深入探讨被称为“C++四书五经”的一系列经典著作。这些书籍不仅对初学者友好,也为高级程序员提供了宝贵的参考资料。通过本文,我们将详细了解这些书籍的特点、内容以及它们对C++学习的...

    计算机课程设计以及文档

    “程序员必读的编程书籍”这个文件名暗示了阅读和学习的重要性。优秀的编程书籍能帮助我们深入理解语言本质,提升编程思维,比如《算法导论》对于理解算法有极大的帮助,《你不知道的JavaScript》有助于提升...

    ActionScript 3.0 编程精髓原版

    《ActionScript 3.0 编程精髓原版》是每个想要深入掌握 AS3 的开发者必备的书籍之一。无论是初学者还是有经验的开发者,都能从中获得宝贵的指导和启发。此外,通过结合使用 O'Reilly 提供的相关资源和服务,可以...

Global site tag (gtag.js) - Google Analytics