注意:每个层次的知识都是渐增的Q位于层?em>nQ也蕴涵了你需了解所有低于层?em>n? 知识?
计算机科?Computer Science | |||||
---|---|---|---|---|---|
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
数据l构 | 不知道数l和链表的差? | 能够解释和用数l, 链表Q字典等Qƈ且能够用于实际的~程d?/td> | 了解基本数据l构旉和空间的折中Q比如数lvs 链表Q能够解释如何实现哈希表和处理冲H,了解优先队列及其实现? | 高等的数据结构的知识Q比如B-?wi)、二堆、斐波那契堆、AVL ?wi)、红黑树(wi)、展树(wi)、蟩跃表以及前缀?wi)等?/td> | |
法 | 不能够找Z个数l各数的q_?qo人难以置信,但是我的在应聘? 中遇到过) | 基本的排序,搜烦和数据的遍历和检索算法?/td> | ?wi),图,单的贪婪法和分而治之算法,能够适度了解矩阵? 层的含义?/td> | 能够辨识和编写动态规划方案,良好的图法知识Q良好的数g的知识Q能够L别NP问题{? | Working with someone who has a good topcoder ranking would be an unbelievable piece of luck! |
~程体系 | 不知道何为编译器、链接器和解释器? | 对编? 器、链接器、解释器有基本的了解。知道什么是汇编代码以及在硬件层如何工作。有一些虚拟内存和分页知识? | 了解内核模式vs用户模式, 多线E,同步原语以及它们如何实现Q能够阅L~代码。了解网l如何工作,了解|络协议和socketU别~程? | 了解整个E序堆栈? g(CPU+内存+中断+微码)、二q制代码、汇~、静态和动态链接、编码、解释、JITQjust-in-timeQ编译、内存碎片回收、堆、栈、存 储器~址… | |
软g工程 Software Engineering | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
源码版本控制 | 通过日期备䆾文g? | VSS和初U的 CVS/SVN用户 | 熟练C用CVS和SVNҎ(gu)。知道如何分支和归ƈQ用程序库补丁安装Ҏ(gu)等 | 有分布式VCS pȝ的知识。尝试过Bzr/Mercurial/Darcs/Git | |
自动化编?/td> | 只知道在IDE下编? | 知道如何~译在命令行 下编译系l? | 能够安装一个脚本构建基本的pȝ | 能够安装一个脚本来构徏pȝq且归档Q安装程序,生成发布记录和给? 码控制中的代码分配标{?/td> | |
自动化测?/td> | 认ؓ所有的试都是试员的工作? | 能够~写 自动化的单元试Q能够ؓ正在~写的代码提好的试用例? | 按照TDD QTest Driven DevelopmentQ方式编写代码?/td> | 了解q且能够有效自动化安装,载入/性能和UI试 | |
E序设计 Programming | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
问题分解 | 只有直线式的代码Q通过复制_脓(chung)来复? | 能够? 问题分散到多个函C | 能够惛_可复用的函数/对象来解军_题的问题 | 使用适宜的数据结构和法Q写出通用?面向 对象的代码来装问题的易改变的层面?/td> | |
pȝ分解 | N想不出比单一的文?cL好的层面 | 如果不在 同一q_或没采用相同的技术,能够把问题空间和设计Ҏ(gu)分解? | 能够设计跨技?q_的系l? | 能够在多个品线? 与外部体pM体化中虚拟化和设计复制的pȝ。同时也能够设计支持pȝ监视、报告、故障恢复等?/td> | |
交流 | 不能向同伴表达想?L。匮乏拼写和语法的能力? | ? 伴能了解你在说什么。有良好的拼写和语法能力? | 能够和同伴进行高效的交流 | 能够使用清晰的方式了解和交流x/设计 /L/l则Q能适应每种环境的交? | This is an often under rated but very critical criteria for judging a programmer. With the increase in outsourcing of programming tasks to places where English is not the native tongue this issue has become more prominent. I know of several projects that failed because the programmers could not understand what the intent of the communication was. |
同一文g中代码组l?/td> | 同一文g中组l没有依? | 按照逻辑 性或者易接近的方? | 代码分块和对于其他源文g来说是易于是?引用其他源文件时有良好的注释 | 文档头部有许可声 明,ȝQ良好的注释Q一致的I格~进。文档外观美观?/td> | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
跨文件代码组l?/td> | 没够惌l代码跨文gl织 | 相关文g按文? 夹分l? | 每个物理文g都有独立的目的,比如一个类的定义,一个特性的实现{? | 代码在物理层l织紧密Q在文g名上? 设计和外观相匚wQ可以通过文g分布方式z察设计理念?/td> | |
源码?wi)组l?/td> | 一切都攑֜一个文件夹? | 初步地将代码分散q? 对应逻辑的文件夹? | 没有循环依赖Q二q制文gQ库Q文,构徏Q第三方的代码都l织q合适的文g夹内? | 源码?wi)? 物理布局与逻辑层次、组l方式相匚w。可以通过目录名称和组l方式洞察设计理c? | The difference between this and the previous item is in the scale of organization, source tree organization relates to the entire set of artifacts that define the system. |
代码可读?/td> | 单音节的名称 Q在国内应该是那些类似用汉语拼音命名的习(fn)惯) | Ҏ(gu)件、变量、类、方法等Q有良好的命名? | 没有长函数、注释解释不常规的代码,bug修复,代码假设? | ? 码假N证用断aQ自然的代码,没有深层嵌套的条件和Ҏ(gu) | |
防M性编?/td> | 不知道这个概?/td> | 查代码中所有的参数Q对关键 的假设进行断a | 保查了q回值和使代码失败的异常? | 有自q库来帮助防M性编E、编写单元测试模拟故?/td> | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
错误处理 | 只给乐观的情形编? | 基本的代码错误处理,抛出 异常/生成错误 | 保错误/异常留在E序中有良好的状态,资源Q连接,内存都有被合适的清理? | 在编码之前察觉可? 出现的异常,在代码的所有层ơ中l持一致性的异常处理{略Q提出整个系l的错误处理准则?/td> | |
IDE | IDE大部分用来进行文本编? | 了解其周围的? 口,能够高效地通过菜单来用IDE | 了解最常操作的键盘快捷? | ~写自定义宏 | |
API | 需要频J地查阅文 | 把最频繁使用的API记在? 子里 | qK且深入的API知识? | Z使实际Q务中常用API使用更加便捷Q编写过API的上层库Q填补API之间 的缺口? | E.g. of API can be Java library, .net framework or the custom API for the application |
框架 | 没有使用q主q_外的M框架 | 听过但没用过q_? 行的可用框?/td> | 在专业的职位中用过一个以上的框架Q通晓各框架的特色?/td> | 某框架的作?/td> | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
需求分?/td> | 接受l定的需求和代码规格 | 能对规格的遗漏提? 疑问 | 了解全面情况Q提出需要被规格化的整体范围?/td> | 能够提出更好的可选方案,Ҏ(gu)l验的Q现给出需?/td> | |
脚本 | 不具备脚本工L(fng)知识 | 批处理文?shell脚本 | Perl/Python/Ruby/VBScript/Powershell | 写过q且发表q可重用的代?/td> | |
数据?/td> | 认ؓExcel是数据? | 知道基本的数据库? 念,规范化、ACIDQ原子性Atomicity、一致性Consistency、隔LIsolation、持久性DurabilityQ、事务化Q能 够写单的select语句 | 能够牢记在运行时必要查询中设计良好的规范化数据库模式Q? _N用戯图,存储q程Q触发器和用户定义类型。知道聚集与非聚集烦引之间的差异。精通用ORMQObject Relational Mapping对象关系映射Q工? | 能做基本的数据库理Q性能优化Q烦引优化,~写高的select查询Q能够用相关sql来替 换游标,理解数据内部的存储,了解如何镜像、复制数据库。知道两D|据提交如何工?/td> | |
l验 Experience | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
专业语言l验 | 命o式语a和面向对象语a | 命o式语a,面向对象语言和说明型语言(SQL),如果了解静态类型vs动态类型,q型vs强类型则有加? | 函数式语a,如果了解? ~求|局部套用函敎ͼ延箋则有加分 | q发语言(Erlang, Oz) 逻辑语言(Prolog) | |
专业q_l验 | 1 | 2-3 | 4-5 | 6+ | |
专业l验q龄 | 1 | 2-5 | 6-9 | 10+ | |
领域知识 | 没有该领域的知识 | 在该领域中曾l至ؓ一? 产品工作q?/td> | 在同一领域中ؓ多个产品工作q? | 领域专家。在该领域设计和实现数种产品/Ҏ(gu)。精通该领域使用的标准条? 和协?/td> | |
学识 Knowledge | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
工具知识 | 仅限于主要的IDE(VS.Net, Eclipse{? | ? 道一些流行和标准工具的备选方? | 对编辑器、调试器、IDE、开源的备选方案有很好的了解。比如某Z解大多数Scott Hanselman的威力工具列表中的工P使用qORM工具?/td> | 实际地编写过工具和脚本,如果q些被发布则有加?/td> | |
语言接触 | 命o式语a和面向对象语a | 命o式语a、面向对? 语言和说明型语言(SQL),如果了解静态类型vs动态类型、弱cdvs强类型则有加? | 函数式语a,如果了解延缓求倹{局部套用函 数、continuations Q源于scheme中的一U高U控制结构)则有加分 | q发语言(Erlang, Oz) 逻辑语言(Prolog) | |
代码库知?/td> | 从来没有查询q代码库 | 基本的代码层知识Q了 解如果构建系l? | 良好的代码库工作知识Q实现过几次bug修复或者完成了一些细的Ҏ(gu)? | 实现了代码库中多个大型特 性,能够L地将多数Ҏ(gu)的需求变更具体化Q从容地处理bug修复?/td> | |
下一代技术知?/td> | 从来没听说过卛_到来的技? | 听说q某? 域即到来的技? | 下蝲qalpha preview/CTP/beta版本Qƈ且读q一些文章和手册 | 试用q预? 版而且实际地构某物Q如果共享给其他人的话则有加?/td> | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
q_内部 | 对^台内部毫无所? | 有^台基本的内部工作? 知识 | 深度的^台内部知识,能够设想q_如何程序{换成可执行代码? | ~写q增强^台或者ؓ其^台内部提供信息的 工具。比如,反汇~工P反编译工P调试工具{?/td> | |
书籍 | 菜鸟pdQ?1天系列,24时pdQ蠢货系?.. | 《代 码大全》,《别让我思考? 《精通正则表辑ּ? | 《设计模式》,《h件》,《代码珠玑》,《算法设计手册》,《程序员修炼之道》, 《h月神话? | 《计机E序设计与解释》,《事务处?概念与技术》,《计机E序设计模型》,《计机E序设计艺术》,《数据库pȝ D?C.J Date版,《Thinking Forth?Q《Little Schemer》(没找到其中译本) | |
博客 | 听过但是从来抽不出空L? | 阅读一些科技/~程 /软g工程的博客,q且l常的收听一些播?/td> | l护一些博客的链接Q收集博d享的有用的文章和工具 | l护一个在~程? 面,分n有个解和思考的博客 |
E序员能力矩?/span> by XGuru is licensed under a Creative Commons |名-非商业性?相同方式׃n 2.5 中国大陆 License. 原文L(fng) q? ?/a>?br /> Thanks to bearice for debugging.
Thanks to John Haugeland for a reformatting of it that works much more nicely on the web.
QQ你是怎么区分一个内向的E序员和一个外向的E序员的Q?br /> AQ外向的E序员会看着你的鞋和你说话时?/p>
QQؓ什么程序员不能区分万圣节和圣诞节?
AQ这是因为Oct 31 == Dec 25Q(八进制的31==十进制的25Q?/p>
有一个物理学Ӟ工程师和一个程序员N着一辆汽车行驶在阿尔卑斯p上,在下q时候,忽然Q汽车的刹Rq了,汽R无法控制地向下冲去,眼看? 面就是一个?zhn)崖峭壁,但是很幸q的是在q个(zhn)崖的前面有一些小?wi)让他们的汽车停了下来,而没有掉下山厅R三个惊未定地从R里爬了出来?/p>
物理学家_“我觉得我们应该徏立一个模型来模拟在下车过E中刹R片在高温情况下失늚情Ş”?/p>
工程师说Q?#8220;我在车的后备厢来有个xQ要不我们把车拆开看看到底是什么原?#8221;?/p>
E序员说Q?#8220;Z么我们不再找相同的R再来一ơ以重现q个问题呢?”
如果C++是一把锤子的话,那么~程׃变成大手指头?/p>
如果你找了一百万只猴子来敲打一百万个键盘,那么会有一只猴子会敲出一DJavaE序Q而其余的只会敲出PerlE序?/p>
一阉|促的敲门声Q?#8220;谁啊Q?#8221;Q过?分钟Q门外传?#8220;Java”?/p>
如果说Java很不错是因ؓ它可以运行在所有的操作pȝ上,那么可以说肛交很不错,因ؓ其可以用于所有的性别上?/p>
一个程序员骑着一个很漂亮的自行RC公司Q另一个程序员看到了他Q问刎ͼ“你是从哪搞到的这么漂亮的车的Q?#8221;
骑R的那个程序员_“我刚从那边过来,有一个漂亮的姑娘骑着q个车过来,q停在我跟前Q把服全脱了,然后Ҏ(gu)_‘你想要什么都可以’”?/p>
另一个程序员马上说到Q?#8220;你绝对做了一个正的选择Q因为那姑娘的衣服你q不一定穿得了”?/p>
一个年ȝE序员和一个项目经理登上了一列在山里行驶的火车,他们发现列R上几乎都坐满了,只有两个在一L(fng)IZQ这个空位的寚w是一个老奶奶和一 个年L亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较暧昧地怺看对斏V这Ӟ火Rq入山洞QR厢里一片漆黑。此Ӟ只听见一个亲嘴的声音Q随 后就听到一个响亮的巴掌声。很快火车出了山z,他们四个人都不说话?/p>
那个老奶奶在喃喃道,“q个q轻伙怎么q么无礼Q不q我很高兴我的孙x了一个巴?#8221;?/p>
目l理在想Q?#8220;没想到这个程序员居然q么大胆Q敢M那姑娘,只可惜那姑娘打错了hQ居然给打了我?#8221;
漂亮的姑娘想Q?#8220;他亲了我真好Q希望我的祖母没有打g”?/p>
E序员坐在那里露ZW容Q?#8220;生活真好啊。这一辈子能有几次Z可以在亲一个美女的同时打项目经理一巴掌?#8221;
有一个驾驶热气球的h发现他迷路了。他降低了飞行的高度Qƈ认出了地面上的一个h。他l箋下降高度q对着那个人大叫,“打扰一下,你能告诉我我在哪吗?”
下面那个Q?#8220;是的。你在热气球里啊Q盘旋在30英尺的空?#8221;?/p>
热气球上的h_“你一定是在IT部门做技术工?#8221;?/p>
“没错”Q地面上的h说到Q?#8220;你是怎么知道的?”
“呵呵”Q热气球上的Q?#8220;你告诉我的每件事在技术上都是对的Q但寚w没有?#8221;?/p>
地面上的Q?#8220;你一定是理层的?#8221;?/p>
“没错”Q热气球上的Q?#8220;可是你是怎么知道的?”
“呵呵”Q地面上的那刎ͼ“你不知道你在哪里Q你也不知道你要dQ你d望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我错了”?/p>
有一个小伙子在一个办公大楼的门口抽着烟,一个妇奌\q他w边Qƈ对他_“你知道不知道q个东西会危害你的健P我是_你有没有注意到香烟盒上的那个警告QWarningQ?”
伙子说Q?#8220;没事儿,我是一个程序员”?/p>
那妇奌Q?#8220;q又怎样Q?#8221;
E序员说Q?#8220;我们从来不关心WarningQ只兛_Error”
我之前曾_阅读软g开?/span>有关的书c,是在你技能和事业上投资的好办法?/span> 但是哪些应该阅读呢?而且该按照什么顺序阅dQ?/span> 我已l编制了一份书单,我认为它能真正大q提高你的能力?/span> 我已l安排好它们的顺序,分ؓ3个阶D,我相信这U顺序是最有成效的。这份书?/span>主要是ؓ那些刚刚h的开发h员编写的Q当然专业的开发者也可参照,它对周围那些惌得提高的人来说都是相当有用的?/span>
首先Q你应该x的是提高书写q净Q毫不含p的Q可l护代码的能力?/span> 下列书籍应该大大有助于?zhn)Q?/span>
上述的读书顺序可能有些人感到惊Ӟ但我敢打赌,q是最有效的阅读顺序?/span>
当你学会了如何书写伟大的代码Q你应该开始以z的设计和架构ؓ重点?/span> qƈ不是_你应该只集中于设计和架构Q但你越了解它,你会变得好Q?/span>
q一阶段可能值得说明的是在这部分列出的一些图书中可能是有?争议'的?/span> 如果(zhn)已l阅MW一阶段的书c,那么你应该有能力用你自n的观点看待第二阶D늚q些书籍?/span> 你会了解刎ͼ你不应该仅仅仿照那些模式Q但了解它们的存在肯定是一件好事?/span>
最后,(zhn)需要了解如何在团队环境下工作ƈ理解团队的动力?/span> 下面的书c不是具体介l团队中的工作,但包含了众多的智慧和z察力,q一定会帮助(zhn)在专业的团队环境中工作Q?/span>
q本书可能也需要一点说明?/span> 我ƈ不是说你应该做极限编E?/span> 但你了解它肯定不会有宛_Q至你应该在你认ؓ有意义的时候去试采用q种做法?/span> 你ƈ不会真的需要去采用所有的做法Q虽然你q样做会获得额外的好处,或者至假装这样做Q,但它们中的一些,每个人都应该臛_了解一下?/span>
所以就是这样了...试用上q方式阅读这些书Q不要忘了以后感谢我
I’ve stated previously that reading software development books is a good way of investing in your skills and your career. But which ones should you read? And in what order should they be read? I’ve compiled a list of books that i think can truly increase your skills substantially. I’ve put them in the order in which i believe they will have the most effect, and grouped them in 3 ’stages’. I primarily have young developers who are just getting started as professional developers in mind with this list, but it should be just as useful to developers who’ve been around for a while and simply want to improve.
The first thing that you should focus on is improving your ability to write clean, unambiguous, maintainable code. The following books should greatly help you with that:
The order of this stage might surprise some people, but i’m willing to bet that this is the most efficient order to reading those books.
After you’ve learned how to write great code, you should really start focusing on clean design and architecture. That’s not to say that you should focus solely on design and architecture, but the more you know about it, the better off you will be:
This stage probably deserves a bit of clarification as some of the books listed in this part might be somewhat ‘controversial’. If you read and learned from the books in the first stage, then you should be capable of putting everything you read in the second stage in perspective. You will have learned that you shouldn’t just apply as many patterns as possible, but it’s certainly a good thing to know about their existence.
Finally, you need to learn about working in a team environment and understanding team dynamics. The following books aren’t about working in teams specifically, but contain a tremendous amount of wisdom and insight that will definitely help you when it comes to working in a professional team environment:
This one probably needs a bit of clarification as well. I’m not saying that you should do Extreme Programming. But it certainly won’t hurt you to learn about it, and at least try to apply the practices that you believe in when it makes sense to do so. You don’t really need to apply them all (though you will get bonus points from the cool kids if you do so, or at least pretend to), but there are a few of them that everyone really should do regardless of which agile variant you subscribe to.
So there you have it… try those books out in that order, and don’t forget to thank me later
Name: common/class2.class它代表这个class文g对应摘要法的摘要倹{这个条目在SF里面有一个对应的条目Q?br /> Name: common/class2.class
MD5-Digest: (base64 representation of MD5 digest)
SHA-Digest: (base64 representation of SHA digest