﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++ Coder-随笔分类-杂文收藏</title><link>http://www.cppblog.com/jackdongy/category/20115.html</link><description>HCP高性能计算架构，实现，编译器指令优化，算法优化，
  LLVM   CLANG   OpenCL   CUDA   OpenACC    C++AMP   OpenMP   MPI</description><language>zh-cn</language><lastBuildDate>Fri, 22 Feb 2013 01:38:28 GMT</lastBuildDate><pubDate>Fri, 22 Feb 2013 01:38:28 GMT</pubDate><ttl>60</ttl><item><title>AMD打造开放的异构计算标准？</title><link>http://www.cppblog.com/jackdongy/archive/2013/02/19/197925.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Tue, 19 Feb 2013 00:40:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2013/02/19/197925.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/197925.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2013/02/19/197925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/197925.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/197925.html</trackback:ping><description><![CDATA[<a href="http://www.csdn.net/article/2013-02-17/2814154-AMD_creat_HSA">http://www.csdn.net/article/2013-02-17/2814154-AMD_creat_HSA</a><br /><br />
<div class="summary" style="list-style-type: none; white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(51,51,51); padding-bottom: 5px; text-align: left; padding-top: 5px; font: 14px/24px Helvetica, Tahoma, Arial, sans-serif; padding-left: 10px; text-decoration: ; margin: 0px 0px 1.5em; orphans: 2; widows: 2; letter-spacing: normal; padding-right: 10px; background-color: rgb(247,247,247); text-indent: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">摘要：</strong>在PC产业日渐颓势和移动行业方兴未艾的大环境下，AMD作为PC CPU芯片行业的两个供应商之一，如何在上下夹击的态势下突出重围，大家一直拭目以待。经过近两年的调整，AMD并非没有出路，他们已经为自己规划了三个快速发展的机遇：双核、异构、低功耗。而开放和开源的思维贯穿始终。</div>
<div class="con news_content" style="list-style-type: none; white-space: normal; text-transform: none; word-spacing: 0px; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/24px Helvetica, Tahoma, Arial, sans-serif; padding-left: 0px; text-decoration: ; margin: 0px 0px 30px; orphans: 2; widows: 2; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">开放才是未来</strong></p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">早在2012年，AMD就高调宣布要设计基于64-bit ARM架构的处理器，而为了在2014年处理器问世前打造一条完整的软硬件生态链，AMD更是同ARM一起成立了HSA基金会（异构系统架构基金会）。HSA基金会倡导的是一种更简单、开放，同时还可以涵盖PC与移动设备（不光是跨 OS）的标准。目的在于通过基于GPU的并行运算来提升处理器的表现。比如图像处理器将不仅仅用于图像、游戏等方面，普通的任务和应用也可以用到它。</p>
<p style="list-style-type: none; padding-bottom: 0px; text-align: center; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px"><a style="cursor: pointer; color: rgb(0,102,204); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px; padding-right: 0px" href="http://cms.csdnimg.cn/article/201302/17/51207c65093b3.jpg" target="_blank"><img style="border-top: medium none; border-right: medium none; vertical-align: middle; border-bottom: medium none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px" border="0" src="http://cms.csdnimg.cn/article/201302/17/51207c65093b3_middle.jpg"  alt="" /></a><br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" /></p>
<p style="list-style-type: none; padding-bottom: 0px; text-align: center; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">图：HSA帮助从服务器端到移动端提升效率、降低功耗<br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" /></p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;虽然用OpenCL这个工业标准已经能达到这种效果，但这样的做法仍旧太复杂，而且主流的开发者也不容易接受。NVIDIA虽然大力推进自己的CUDA运算架构，不过CUDA和OpenCL是同一层面的技术，而基于私有架构的开发栈终将没落。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">AMD中国开发合作与解决方案中心总监楚含进坦言，目前AMD所有做的事情都是为将来某一段时间产品集中爆发做技术上系统储备。在HSA基金会中，其中的厂商从服务器到PC到手机厂商都会有，AMD将帮助各个伙伴更好的去驱动软件生态系统，促使软件里面的工具、软件里面的库、软件里面的开发环境让更多的人更容易的去使用。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;其次，我们将一直致力于降低功耗，这两年我们会把生态链去闭环运营。在中国来说，我们有一个开发团队会帮助国内的开发人员能够学会如何在GPU上进行编程；而在技术层面上，我们更希望能够向着平板电脑这个方向进行过度。 最终目的是在低功耗上推出AMD的一系列产品，x86和ARM双核并行战略。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">而从市场的直接反馈结果来看，AMD拥抱开放技术的策略也受到了开发者的一致欢迎。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">作为软件开发人员尤其是学生开发人群，是AMD首先取悦的人群，在前不久举行的异构编程大赛上，AMD收到了40多个作品，从开发者的关注点来看，他们也正向着云计算、多媒体、移动互联网应用这些深层次的产品优化的方向，同目前的行业热点是有很好的契合点的。并且在相当多的参赛作品中，无论是学生本人，还是在导师的带领下，这些行业还是都比较容易产生有创意或者是有深度有质量的软件实现的算法或者产品的核心技术，而这些注定是未来软件公司差异化的核心。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">从作品的类型来看，有数据搜索和数据的作品，也有算法优化方面的内容。而在多媒体、图形图像方面，比如损失图像的修复、二维图像的三维化、图像的拼接以及细化和分割，这些（技术）在很多领域无论是移动还是多媒体领域有着深远的意义。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">对于此次大赛的结果，楚含进表示，&#8220;大赛只是AMD对异构编程技术的一个普及推广形式。根据以往的大赛经验，在作品的推广中，学生是不利的。一般参赛的大部人是年轻人，年轻人有干劲，但是他们有时只见树木不见森林。如果把大赛中学生的每一件作品拿出来，稍加深化补充，都可以成为一个很好的分子。但是把分子作为一个产品还要花一段时间的。所以AMD一直在思考能不能把学生做的引擎收集起来，不论是计划上的还是部分实现上的，让他们能够沿着这个方向更好的研究下去，产生一些有影响力的，不论是论文还是实际案例，抑或在他们自己的产品中能够把它延伸到自己研究的领域。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;因此，从AMD帮助学生开发技术提高来看，会做三件事，第一是与CSDN一起来探讨利用学生的自身优势和他们本身已经完成的工作，继续能够指导他们做一些成果出来。我们不是只针对TOP10，甚至是TOP20。第二种是扶植学生能够真正的发布自己的作品，以及针对于当前工作真正有用的。我们给予他们业务层面的指导。还有一种想法是把他们的某一些业务成果提交给我们的客户，这样能把他们转化为真正的生产力。第三点是我们希望能够与CSDN形成一个比较切实的基于GPU的异构开发人群，然后把一些作品放在开源的社区来进行一些补充。这个项目本身不会成为一个独立运行的具有某种功能的产品模块，但是我们希望过开源社区的力量，把这些产品形成一种相对来说比较独立通用的一个库，并提供相应的访问接口。这样，越来越多的人就会去很容易的使用它，而且这样可以真正的培养开发人员尤其学生的软件产品意识。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">AMD结盟ARM, 横跨x86和ARM架构？</strong></p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">目前的芯片市场，实际上是有两大芯片阵营，ARM与x86两大阵营在博弈。在智能手机出现之前，是通用处理器的天下，这种通用处理器包括ARM、x86。实际上更多领域用的还是通用处理器，通用处理器时代，CPU的设计是个门槛，决定这个公司的成败。但随着智能手机和移动互联的大量实现，决定这个公司的未来是是否具有设计CPU以及设计多核CPU的能力。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;通用处理器的设计已经不再是门槛了，因为ARM已经把整个CPU体系帮你设计完成了。第二，Intel的x86处理器通用处理器也由于开始受到主机的云应用的影响。用户会问，问什么要用通用处理器来做这种非通用的应用？给我一个理由，这会是一个很大的问题。&#8221;从技术层面，这背后其实系统和产品设计日益差异化需求的问题。、</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">在未来的CPU发展趋势上也许我们可以看到几个趋势：一、像Facebook、Google已经把精力放在整个架构上，希望他们自己的服务器作为行业标准化，个性定制化？开发化，所谓的标准化就是说不需要限定在某种通用处理器，而是需要针对自己应用和系统架构构建专属系统。二、在移动领域，芯片设计的趋势是从通用处理器到SoC，而从SoC又逐渐是往专属领域有独特要求的处理器演变。这种情况下，生产通用处理器的公司会受到非常非常大的挑战，那么将来的局面会是，任何一个行业里面的任何一个公司所生产出来的芯片不会是万能的，应该是在本行业里有独特的特点，符合行业的趋势和需求。比如做手机的核心一定是通信功能，做游戏的核心一定是游戏的引擎，做服务器的核心一定是数据处理能力和带宽和在某个领域具有处理特定需求的能力。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;AMD对于GPU的发展技术上有很独创的见解，在游戏以及图形图像处理上非常的专注，所以这就是AMD能够走SoC和将来走可定制化专用服务器领域的一个信号&#8221;，楚含进表示。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">可以看到，目前x86上很多的开源项目是集成在服务器领域里面，而传统的ARM则是集中在手机领域。两者本质的区别是x86的开源是集中在通用处理器上，而ARM在完善了基于以linux内核为核心的一套开源系统之后，更多的会布置在专用的领域上，比如基于ARM的多媒体应用、基于ARM的编译器，以及很多开源项目。随着开源的项目越来越多，在这个领域就会形成一定的技术门槛，尤其是软件技术门槛，所以x86面临的问题就是开发者为什么要用通用处理器去做非通用的事情。在这种大的背景下，如果所有的开源都是为通用服务的话，为什么还要用通用的软件去搭建一个需要特定处理能力的平台？所以在目标不一致、指导思想不一致的情况下，研发人员在做开源项目的整个方向就不一样。举个例子，比如开源项目Ubuntu，它在PC上的用户体验与在手机上完全不一样，虽然都是同一套Linux，都是开源搭出来的。它桌面的Xwindow系统都已经不再用在手机上了。如果你把Xwindow强行放在手机上，你所产生的成本，以及所占用的资源都会是很大的。那么在未来，ARM服务器和手机更交融的情况来看，ARM和x86两种开源社区也会出现交融的情况，这种交融会带来更多独创的开源项目。比如在ARM上运行的底层软件，能不能实时的在x86上运行，x86上运行的软件能不能不改动任何代码就放到手机上运行，现在已经有一些好的开源项目在开始做了，比如LLVM项目。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">ARM和x86在服务器市场的争夺将愈演愈烈</strong></p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">另一个值得关注的领域在于服务器，标志性的事件是，以Facebook、百度为首的互联网企业已经在服务器端开始大量采用ARM架构作为存储服务器。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">对此，楚含进认为，如果把web接入、存储服务器等高并发但轻量级应用作为当前云计算重要的落地形式，则云计算反而是ARM服务器在服务器的主要切入点。而在大数据、科学计算等领域，ARM要走的路很长。毕竟通用处理器在高性能计算，尤其是密集型计算中还是占有得天独厚的优势，包括其软件。但这并不妨碍大家看到，在移动终端硬件竞争和服务器硬件竞争上面，实际上服务器还是属于蓝海。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;百度用ARM不完全是基于价格的考虑，而是基于未来百度把自己的软件按照专属领域的业务特点然后来配备相应的硬件而做的规划，这种规划会使自己从供应链、软件、硬件的生态系统当中变得标准化和开放，同时也会降低整个的成本。毕竟百度是以软件为生存的一个公司，而ARM的服务器也只是有限的部署在在百度的某些服务领域，占很小的一部分。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">那么未来服务器芯片领域的格局是什么呢？以前服务器领域传统的格局只会是HP、DELL、IBM这些公司，而ARM服务器的出现会使得芯片公司有机会在设计服务器，或者说是类服务器的技术门槛降低。因为原来只能在x86服务器上做的东西现在有可能用低成本的ARM服务器来替代。而对于芯片厂商来说，会使许多原来认为&#8220;在x86领域做服务器门槛很高&#8221;的企业进入这个领域。这也对以前老牌的服务器厂家提出了巨大的挑战，也就是说他如何去面对现在终端和云端这种相互的格局下能够定位自己的产品。第二，在移动端，有着很深厚背景的公司，比如某些移动芯片制造公司，他们进入服务器领域也是有可能的，因为他们本身对ARM的技术并不缺乏，而且对自己所做的业务也很熟悉，软件能力也很成熟，唯一缺乏的是制造服务器芯片的一颗芯。其实，很多公司已经制造出了具有服务器功能的ARM架构芯片，可是我们要看到，这并不代表他们能够制造出真正意义上的基于ARM服务器和打造完整的ARM服务器软件生态系统。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;很多ARM的服务器要考虑的不仅仅是功能上的，还有背板总线、内存技术、主板布置技术、电源布置技术等，这都是做服务器厂家和做移动端厂家不同的地方。现在ARM的服务器刚刚开始，原来的服务器一家独大的场面会逐渐变得市场细分，会使更多的芯片厂商进入服务器领域中来尝试走出自己的红海到另外一个蓝海领域中扩大自己的阵营，AMD是有限的具有制造服务器芯片和打造服务器生态链的基因的公司，这一点是其他厂家无可比拟的，对于AMD 的ARM服务器未来一定会引起产业的格局变化&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">从公司的长远技术趋势来看，AMD肯定不会放弃x86的；ARM短期内在科学计算等高性能领域可能不大有很好的作为，因为其指令集架构和应用生态系统不是完全为这方面服务的。那么AMD基于ARM的异构和x86的异构在未来会不会在高性能领域成为主导呢？</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">楚含进表示，未来基于APU的服务器，不管是ARM异构还是x86异构，一定会为高性能领域带来非常非常重大的影响，会在很多在非结构化数据处理方面能够产生非常深的影响。因为在现在大数据的前提下，一些非结构化数据的处理，有的时候不能完全靠CPU的处理能力，要靠GPU和CPU的协同处理能力才能更好的有效的完成。目前中国有很多客户对异构服务器都非常感兴趣。而其实APU服务器的出现，并不是简单的CPU和GPU的合成，而是整个系统框架的变化，是主板布局的变化，最重要的是业务模型，编程模型的变化，整个业务的部署也会随着在不同级别服务器的部署产生很大的变化。这些都会为业界带来很好的机会。至于下一代高性能计算的趋势，我认为不是简单的CPU的编程或是GPU的编程，而是要看业务，而且业务应该是与云计算绑定在一起的。开发人员与业务人员会去考虑是单纯的利用CPU还是异构服务器。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">而在高性能计算领域，GPU现在还是作为CPU的协作处理器存在，通过PCIE传输数据，对异构计算而言，这似乎是一个严重的瓶颈。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">楚含进认为，GPU现在有两个问题。第一，硬件瓶颈问题，就是GPU与CPU之间的通讯和数据搬迁造成成性能功耗的问题。第二，GPU作为一个协处理器或者将来作为一个可编程处理器，如何让用户更容易编程，这是GPU如何作为通用处理器的第二个瓶颈。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;AMD目前做了两件事情，公司的大策略是低功耗，包括嵌入式，所做的一切都是为了低功耗。APU实际上是把CPU和GPU结合起来做了一个架构叫做Heterogeneous System Architecture(HSA)，这是一个异构的架构。目前LG、三星、高通都已经和AMD在加入HSA基金会之力于异构系统结构的标准化，涵盖服务器终端到桌面的领域。这个架构最大的解决了两个问题，第一，把CPU与GPU进行更紧密的结合，不仅在实际上减少了数据在CPU和GPU之间传输时产生的功耗，更对很多程序来说是莫大的帮助；第二，我们在HSA上为GPU开发出一套非常容易让高层的编程语言人员能够使用的工具，这个工具不用太多的考虑GPU里专有的编程语言。我们立足于希望这些开发人员利用这种工具能够对自己的业务了解即可，而不用考虑GPU，而最终把GPU变成通用编程的模型。为了做到这一点，我们提供了HSA编译工具、可调式的工具、基于开源的中间件。&#8221;</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">&#8220;在未来，我们真正的基于HSA的APU产品出来之后，你会看到对GPU的编程模型会彻底的改变。因为在CPU和GPU的通讯架构上做了很彻底的改变，而使得CPU和GPU的数据的传输可以不通过内存拷贝，这也就达到了省电和低功耗的目的。AMD把这种技术作为长足的发展，这种技术会用在我们的服务器领域，也会用在未来的PC机领域，同时也会用到低功耗的产品领域。&#8221;同时不要忘了，当我们说异构，不单单是指GPU和CPU，AMD的APU的SoC内同时集成了如入视频编码，解码，音频处理，内容安全等专用的处理模块，同时提供特定的编程接口，这也是异构的表现。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">给开发人员的建议：如何避免同质化开发？</strong></p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">在中国，好的开发人员非常多，这一点从异构大赛可以看出，有些产品的创意，性能和应用领域都非常有商业和学术价值；好的产品规划师也很多。但是中国做出来的产品同质化非常严重，针对某一应用领域做出自己专属产品的框架前提的指导下，以前只要掌握编程可能就能开发出应用，但是现在就不一样了。楚含进认为，对目前的中国软件开发人员而言，目前的市场大环境对他们提出了几个方面的需求：</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">首先，架构人员应该有全局观，不但要对业务领域有所熟悉，而且更需要拓展与此专业领域相关的知识领域，要想办法利用现有的各种技术来时自己产品在性能，特性产生差异化和提高技术门槛，从硬件，软件，算法，性能综合考虑，而不是单纯吧摸个产品功能实现就可以。这样就能使你们的产品变得与众不同。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">第二，要有原创精神，培养自己内功，现在的技术，流派太多了，软件人员一辈子也学完，等你学会了这个，结果新的潮流来了，好像总是落伍。有一个例子，大家都去学hadoop, 我问了很多人去学Hadoop干什么，居然没有几个回答我，只是觉得这个东西很热，所以去看看，盲从的心理不会产生好的软件产品。所以我建议要对自己学习的东西有所判断，要关注新的技术产生，对新技术要敏感，用于尝试。现在的代码程序员太多，思想成员太少了。</p>
<p style="list-style-type: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; text-decoration: ; margin: 0px 0px 1.5em; padding-right: 0px">最后，对于软件人员，我特别希望无论你是应用层还是底层的开发人员， 都应该去了解计算机体系结构，了解CPU和GPU的方向。CPU和GPU一定是未来硬件的两大软件承载核心，所谓先知者先行。以前GPU很多停留在游戏行业，但是随着异构计算的到来，GPU和CPU融合产生应用的变化，很多有前瞻性的软件人员早已开始涉足此领域来占领先机。（文/谭茂 责编/包研）</p></div><img src ="http://www.cppblog.com/jackdongy/aggbug/197925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2013-02-19 08:40 <a href="http://www.cppblog.com/jackdongy/archive/2013/02/19/197925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入学习算法的一点拙见 </title><link>http://www.cppblog.com/jackdongy/archive/2013/01/08/197110.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Tue, 08 Jan 2013 06:56:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2013/01/08/197110.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/197110.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2013/01/08/197110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/197110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/197110.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/midgard/article/details/4084884">http://blog.csdn.net/midgard/article/details/4084884</a><br /><br />
<div>今天实在是头脑不听使唤了，没力气看书，写代码了。写点总结吧。</div>
<div>都说算法是内功，究竟练到什么程度才算修成了呢？</div>
<div>&nbsp;</div>
<div>为什么要学习，强化算法？</div>
<div>首先强调的是，下面的原因均是建立在算法熟练到一定程度后的效果。不熟的话，未见得能达到效果。这些原因很现实。但很多程序员却不知道或不以为然。</div>
<ol><li>
<div>比较世俗的方面，顶级软件公司笔试，面试会问到。别说你不想去谷歌，百度，微软，如果真的没想过，我希望你能想想自己是否具备进入的实力。如果还是没兴趣想，那就忘了这条，看看下面的原因吧。</div></li><li>
<div>如果算法熟练，能显著提高看代码的速度，越是工作久了，越会发现很多时候是在读别人写的代码，然后在其基础上追加功能，或修改bug。所以这是很现实的技能。</div></li><li>算法操练上手快，注意只是快，但不见得容易。因为练习省去了界面等操作，只利用编译器最基本的功能，非常适合初学者，编程环境不十分熟练的人来学习，别小看这一点，这能让你不论在家，在同学的电脑上，甚至在网吧，只要你想操练都是能迅速找到办法写程序实现的。 </li><li>
<div>难学，有区分度，正因为难，属于内功级别的学习，不是工具型的学习，所以她经久不衰，这项技能能让你不论什么时候都能作为一个亮点技能展示，并运用。比如眼下学python的人不少，但如果再出现更进步，高效的语言，而且这是完全有可能的，又需要重新学习，那什么才是被各种纷繁语言覆盖的，能让你拥有后在短时间能适应任何语言层面的转换工作，更为通用的技能呢？无疑，数据结构+算法是其中一个，而且是非常重要的一项技能。而更为重要的是，算法这种技能，最实实在在的在于他的优势持久性，周围的人如果没有经过大量算法编码训练，只是看过书写过简单算法的人是很难短期内超越你的。也就是说，这项技能越高越能保证你的能力、水平在社会上具有唯一性。即：稀缺人才。</div></li><li>
<div>很多简单的UI操作，短期培训班出来的照着做也能做出来很炫的效果，要佩服微软的封装工作，把UI设计大大简化了。</div></li><li>
<div>对编程语言的基本功能会得到大量强化，比如操作符重载，数组，指针的运用，类的构建，对字符串的操作，以及STL，泛型的理解、运用。这里我想你应该看到了学习算法的过程是如何与计算机应用建立起了联系，因为你肯定在写程序时无数次与这些内容打交道，当然，不深入学习算法，也同样可以获得这些知识，而且.NET,Java,已经封装了非常多的这类基础操作，使得字符串处理变得容易多了。这就要看你的风格，需求了。这里我只是介绍深入学习算法能带来的好处，至于不深入学习有没有坏处，我不做评价。注意"深入"二字的修饰作用，如果没学过基本的数据结构，甚至数组、链表都没搞懂区别的话，那做程序员一定是不行的。迟早会遇到瓶颈，而且很快。</div></li><li>
<div>提供了足够的可扩展空间。对计算机科学的深层研究必备武器，比如操作系统，搜索引擎，编译器等等。要分析linux源代码，会发现，操作系统在内存管理，进程，线程管理，文件管理，协议栈中，运用了大量算法实现，如果基本算法都不理解，甚至不知道，很难说分析源代码能有多深入。因为看不懂啊。这时会有种遇到瓶颈的感觉。类似玩劲乐团的人，玩到一定程度，眼睛能跟上，但手速跟不上了。</div></li><li>注意，算法虽然是内功，但不是全部，还有很多知识是非常重要的，值得学习的，跟算法关系不太大的。比如设计模式，面向对象思想。所以算法学习到什么程度，自己酌情处理。毕竟越深入，会发现数学知识可能遇到瓶颈，但我想大多数人，只要不是搞科学研究，是不必深入到写龙格-库塔，FFT等算法的地步的。</li><li>总之深入学习算法的目的，对于程序员来说，是为了提高编程效率，提高解决问题的效率，能达到需要算法时，自己实现或找来能用的算法，很容易的嵌入到自己的程序中即可。</li></ol>
<div>&nbsp;</div>
<div>说说自己的学习，和强化路线吧，考虑到自己年事已高(28)，相比之下算法，数据结构基础未见得比少数玩ACM的大一（18）学生强。</div>
<div>自信一点！如果真的多数大一学生比我强，那确实没法混了，转行的时候到了。呵呵。</div>
<div>当然不能妄自菲薄，要相信自己有这个学习能力，有这个潜质。相信自己的数学基础足够用，这点要感谢中国对中小学数学教育普及的深啊，</div>
<div>况且我也一直是数学方面的优等生。同时自己的编码，学习经验也将是事半功倍的最大帮助。</div>
<div>对内存的分析，编译器的使用，代码的细节，操作系统的运作原理等知识的理解都要好于大一学生。</div>
<div>虽然意识有点晚，但我看好这项技能，并希望拥有她，而且相信我可以通过努力实现目标。&nbsp;</div>
<div>&nbsp;</div>
<div>先定目标：</div>
<div>1 通过练习算法，提高分析问题，利用计算机解决问题的能力。</div>
<div>2 提高读代码，发现问题的能力。</div>
<div>3 提高对C++，C#等语言的运用能力，如STL的应用。C++各种语法细节的理解。</div>
<div>&nbsp;</div>
<div>方法：练习+看书+做题+实战。</div>
<div>1. 练习常用数据结构，算法的实现，如，链表，队列，二叉树，排序，图等。以及下面说的第一阶段内容。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;要求代码实现，用C，C++，C#均可，还要能用STL实现。总之，越熟越好。能盲打最高境界了。到这个程度，算法内功对我来说，应付各种工作都足够用了。</div>
<div>2. 不断重新看数据结构，算法的讲解，从中更深刻的理解每种算法的核心思想。</div>
<div>3. 练习常用算法，看书，很容易过度训练，然后恶心。一个容易激发热情的方式是做题，ACM，topcoder等平台，都有良好的积分评级政策。还有就是笔试题。这个只在处于找工作期间有很大动力。</div>
<div>&nbsp;&nbsp; 没看到ACM题库中又多了一个绿色的对号，自己的blog又多了些人来访问，等级提高都会有一种潜在的成就感，荣誉感萌发。这些虚拟的等级就是源动力。</div>
<div>4. 写总结，1，2，3如果都不能激发你的潜在兴趣了，实在编恶心了，那就把感受，辛酸苦辣，收获写出来与大伙分享吧。同时也是对自己的过去进行回忆，发现自己的进步之处。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;不断给自己找出新的理由去继续学习。最重要的，这也是一个知识储备，构建自己的knowledge base的过程。对你未来的工作绝对是最宝贵，熟悉的财富。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;比如，万一你将来够牛了，想出书了，这些一点一滴的积累过程将是再好不过的素材了。</div>
<div>&nbsp;</div>
<div>量化目标：</div>
<div>我一向认为能将质变效果量化了是一种很好的创新方式。因为他提供了一条完成的路。而且符合现代人，现代社会的价值观。</div>
<div>功成名就，无可厚非，这是一个大好的结果，如果办到，是千万老百姓都在寻找的答案。可惜每个成功人事的路都无法得到复制。</div>
<div>新东方老师曾问在做的学生，想GRE取得高分，拿奖学金么？ 当然想。</div>
<div>答案：熟背2万英语单词，得2万美刀，背的过程中去想1个单词就是1刀，全部完成后才能兑现。 </div>
<div>这个例子在我印象中很多年，一直是我认为将质变量化的最为典型，贴切的例子。</div>
<div>理想，梦想，高薪，富足生活，都可以看作一种质变，而努力奋斗的生活就是量化的过程。不同的是有人提前知道路在哪里，有人走着走着才知道。</div>
<div>有人虽然知道路，但怕黑怕孤独不愿走，有人坚持下去了，走到了最后；有人走着走着发现走错路了，有人走着走着庆幸的发现走对路了。</div>
<div>很难说，哪条路好走，哪条路是对的， 相比之下我更倾向于能看到结果的路，这可能就是老人说的，要有个奔头吧。</div>
<div>&nbsp;</div>
<div>1 TopCoder上250的题目（包括读题），曾有个人说20分钟能搞定去Google不成问题。我试过些，包括读题还是比较有难度，所以现实点吧：30分钟内搞定。</div>
<div>2 做完500 ACM题目。</div>
<div>3 如果能做到1，2相信算法能力已经有小小质变了。再加个基础要求吧，对于常用算法能40分钟内在纸上完成代码。</div>
<div>&nbsp;</div>
<div>另外转一个网上的评述：</div>
<blockquote style="margin-right: 0px" dir="ltr">
<div>
<div>
<p class="ContentTitle">一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的，&nbsp; </p>
<div>&nbsp;</div>
<div>主要时间是花在思考算法上，不是花在写程序与debug上。&nbsp;&nbsp;&nbsp;</div>
<div>下面给个计划你练练：&nbsp;&nbsp;&nbsp;</div>
<div>第一阶段：练经典常用算法，下面的每个算法给我打上十到二十遍，同时自己精简代码，因为太常用，所以要练到写时不用想，10-15分钟内打完，甚至关掉显示器都可以把程序打出来.&nbsp;&nbsp;&nbsp;</div>
<div>1.最短路(Floyd、Dijstra,BellmanFord)&nbsp;&nbsp;&nbsp;</div>
<div>2.最小生成树(先写个prim,kruscal要用并查集，不好写)&nbsp;&nbsp;&nbsp;</div>
<div>3.大数（高精度）加减乘除&nbsp;&nbsp;&nbsp;</div>
<div>4.二分查找. (代码可在五行以内)&nbsp;&nbsp;&nbsp;</div>
<div>5.叉乘、判线段相交、然后写个凸包.&nbsp;&nbsp;&nbsp;</div>
<div>6.BFS、DFS,同时熟练hash表(要熟，要灵活，代码要简)&nbsp;&nbsp;&nbsp;</div>
<div>7.数学上的有：辗转相除（两行内），线段交点、多角形面积公式.&nbsp;&nbsp;&nbsp;</div>
<div>8. 调用系统的qsort, 技巧很多，慢慢掌握。&nbsp;&nbsp;&nbsp;</div>
<div>9. 任意进制间的转换&nbsp;</div>
<div>&nbsp;</div>
<div>第二阶段：练习复杂一点，但也较常用的算法。&nbsp;&nbsp;&nbsp;</div>
<div>如：&nbsp;&nbsp;&nbsp;</div>
<div>1. 二分图匹配（匈牙利），最小路径覆盖&nbsp;&nbsp;&nbsp;</div>
<div>2. 网络流，最小费用流。&nbsp;&nbsp;&nbsp;</div>
<div>3. 线段树.&nbsp;&nbsp;&nbsp;</div>
<div>4. 并查集。&nbsp;&nbsp;&nbsp;</div>
<div>5. 熟悉动态规划的各个典型：LCS、最长递增子串、三角剖分、记忆化dp&nbsp;&nbsp;&nbsp;</div>
<div>6. 博弈类算法。博弈树，二进制法等。&nbsp;&nbsp;&nbsp;</div>
<div>7. 最大团，最大独立集。&nbsp;&nbsp;&nbsp;</div>
<div>8. 判断点在多边形内。&nbsp;&nbsp;&nbsp;</div>
<div>9. 差分约束系统.&nbsp;&nbsp;&nbsp;</div>
<div>10. 双向广度搜索、A*算法，最小耗散优先.&nbsp;</div></div></div></blockquote>
<div>时间：</div>
<div>人都是总结，展望容易，靠想靠说当然容易些，尤其是技术人员。真的去做，去完成却是最难的。所以上面说了一大堆，真正最后能实现多少，都是未知数。定些计划，往往能激发自己去完成，如果再把这个计划公开，那就更能加上点督促的力量。2-3年吧，是个比较合理的估计，那时工作也快满5年了。应该有一定积累了，也是质变的时候了。</div>
<div id="sharePanel" class="share_buttons"></div><img src ="http://www.cppblog.com/jackdongy/aggbug/197110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2013-01-08 14:56 <a href="http://www.cppblog.com/jackdongy/archive/2013/01/08/197110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么中国的程序员总被称为码农？</title><link>http://www.cppblog.com/jackdongy/archive/2012/10/21/193635.html</link><dc:creator>jackdong</dc:creator><author>jackdong</author><pubDate>Sun, 21 Oct 2012 14:42:00 GMT</pubDate><guid>http://www.cppblog.com/jackdongy/archive/2012/10/21/193635.html</guid><wfw:comment>http://www.cppblog.com/jackdongy/comments/193635.html</wfw:comment><comments>http://www.cppblog.com/jackdongy/archive/2012/10/21/193635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jackdongy/comments/commentRss/193635.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jackdongy/services/trackbacks/193635.html</trackback:ping><description><![CDATA[<a href="http://www.csdn.net/article/2012-10-19/2810967-Why-are-China's-programmers-always-calle">http://www.csdn.net/article/2012-10-19/2810967-Why-are-China's-programmers-always-calle</a><br /><br /><strong>摘要：</strong>之前，研发频道曾发过《东方程序员怎么看西方程序员》和《西方同行眼中的东方程序员》这两篇文章。来自世界各地的程序员们各抒己见。或许，从上面两篇文章中也多少能得出&#8220;为什么中国的程序员总被称为码农？&#8221;下面是来自知乎网上各位大牛的看法。让我们来一起看下！ 
<div class="con news_content">
<p>实际上IT行业在中国并不是特别差的行业，而程序员的工资也并不低，但为什么中国的程序员总被称作码农或者说是苦逼的程序员？中国的程序员生活和欧美的有什么不一样？</p>
<p>之前，<a href="http://sd.csdn.net/" target="_blank">研发频道</a>曾发过《<a href="http://www.csdn.net/article/2012-09-20/2810169" target="_blank">东方程序员怎么看西方程序员</a>》和《<a href="http://www.csdn.net/article/2011-03-01/292717" target="_blank">西方同行眼中的东方程序员</a>》这两篇文章。来自世界各地的程序员们各抒己见。或许，从上面两篇文章中也多少能得出&#8220;为什么中国的程序员总被称为码农？&#8221;下面是来自<a href="http://www.zhihu.com/question/20448124" target="_blank">知乎网</a>上各位大牛的看法。让我们来一起看下！</p>
<p style="text-align: center"><img style="cursor: pointer" border="0" alt="" src="http://articles.csdn.net/uploads/allimg/121019/156_121019134919_1.jpg" width="289" height="217" /></p>
<p><strong>一位叫吴涛的程序员的回答：</strong></p>
<p>编程活动和机械电子一样可以视为一种工艺（craftsmanship），从事此类工艺活动的人可以叫做工匠或者工程师。经历过工业革命的欧美国家，有深厚的工程根底，从机械到电子再到软件，都是国家产业的支柱，滋养着社会中坚力量的中产阶级。工程师的社会地位普遍比较高，他们有工艺的传承，有文化圈，有产业的历史。</p>
<p>而国内目前的软件工业和制造业非常相似，<strong>以来料加工式的低水平重复劳动为主</strong>。就好像农民仰赖着老天提供种子、土壤、阳光和水，中国程序员仰赖着洋人提供设备、技术和理念，从微处理器、操作系统、编程语言、编译器、IDE、编程框架到应用程序，除了做晶圆的沙子是本地产的，几乎没有什么属于自己，每天的工作内容主要就是把别人已有的东西按照自己的&#8212;&#8212;甚至不是自己的&#8212;&#8212;需求装配一下，没有什么创造性，也很少有业界的技术积累和传承出现，即便有也流传不开，毕竟程序员文化水平普遍不高&#8212;&#8212;「有知识，没文化」，就是说这样的状况。记得劣质盗版VCD满天飞的时代，有个程序员做出一款丑陋但是解码容错能力很好的播放器，贴合国情，一炮成名，结果好容易写本书，没有几个句子能写通顺的。这种技术书籍的拙劣状况一直保持到现在，而且拙劣的方式更加多样化了。没有技术传承，没有文化圈，不乏有人上大学之前对编程一窍不通，学计算机只是因为计算机「热门」而已。如同包办的婚姻，没有一丝爱情，最后以编程为业，只是因为也不会做别的什么了。</p>
<p>另一方面，国内程序员不论薪水如何，的确很苦。许多人长期被迫加班，最后甚至会成为一种自愿的习惯。可生产率和产品质量并未因此而提高，就像千百年来用惯锄头和镰刀的农夫，很少有人会想要去学习、改进自己使用的工具和习惯，甚至对于新兴的思潮和方法抱有非理性的抵触情绪。生活如此悲惨，却又如此不思进取，和农民的问题很相似。再加上，就好像城里人眼中的乡下人一样，程序员们木讷、邋遢、缺乏情调、土。可偏偏又自负而且互相看不起。</p>
<p>总而言之，在中国做一个程序员，很少有什么事情能让人觉得自己从事的工作很体面。那么，在整个社会以自嘲为风尚、许多行业都喜欢好勇斗狠地自轻自贱的状况中，使劲贬低自己的职业，自嘲和群吵时，就不会有什么心理包袱。不过，就好像黑人可以自称或者互称「黑鬼」，但是白人如果敢讲立刻会惹祸一样，喜欢以此自称的程序员并不见得能容忍其他人这样称呼自己。</p>
<p>最后，英语有类似的说法，将带有隔断的办公室叫做cube farm，常见于传统的软件公司。以讽刺（但不限于）软件公司日常生活为主题的漫画Dilbert就有不少格子办公室里的场景。不过cube farm说的并不是程序员们像农民，而是说他们像地里的庄稼或者果树，产出成果，等待收割。毕竟，欧美发达国家的农民生活往往比程序员更好。高收入，农机劳作，大片的私有土地，宁静的田园生活。农民的生活在那里，如果不是令人向往，至少也并无贬义。</p>
<p>补充：本版同文所说的<a href="http://en.wikipedia.org/wiki/Code_monkey" target="_blank">code monkey</a>在英语中的语用，与「码农」在中文里的用法并不一样。</p>
<p>code monkey是指以计算机程序员或者那些以编码为生的人。这个术语可能包含轻微的贬义，这意味着开发者可能编写代码，但不能执行复杂点的任务，比如：构建软件结构、分析和设计，一般指初级程序员。</p>
<p>如果一名code monkey正在努力增加知识和提升职业技能，那么会有另一个等级名词赋予他。</p>
<p>其实code monkey这个术语在层次划分上还是有点困难的，因为像那些真正熟练的开发人员或程序员他们仍然在做编码工作。或许像这样划分会好一点：</p>
<ol><li>coder：编码员</li><li>programmer：程序员</li><li>software engineer：软件工程师</li><li>software analyst：软件分析师</li><li>software architect：软件架构师</li></ol>
<p>或许还可以在前面加&#8220;初级&#8221;、&#8220;中级&#8221;、&#8220;高级&#8221;这几个前缀。这些都反映了一定的等级、技能水平和薪资。</p>
<p>请注意：它只能在小范围确定的某种层次结构，例如在一个公司、甚至一个部门。一个在A公司工作的&#8220;程序员&#8221;可能比B公司的中级架构师所要求的技能更多。</p>
<p><strong>下面是关注前端技术的邓陈华同学的回答：</strong></p>
<p>首先， 问题的题目&#8221;为什么中国的程序员总被称为码农？&#8220;是有一定的可辩论性的，因为我所了解的事实是，大多时候是&#8220;中国的程序员自称为码农&#8221;，很少有不同行的人称呼程序员为&#8220;码农&#8221;。当然，可能和我所处环境有关系。认可涛吴所说的&#8220;自称码农的程序员并不见得能容忍其他人这样称呼自己&#8221;，因为这就像他所举的例子，黑人允许自称，但不允许白人称呼，同样的词在熟人说来是亲切、是自嘲、甚至可以是自讽，但在外人说来，那不仅是不尊重，还有可能是侮辱。</p>
<p>其次，身处互联网行业，程序员工作辛苦，加班再正常不过，项目进度、突发情况、公司文化都可能成为加班的理由，虽然收入不一定差，但够苦逼。另外一方面， 程序员鱼龙混杂，水平参差不齐，而互联网向来是一个强调能力的开放行业，有多少能力就拿多少工资，这样注定有相当大一部分因为水平不够，导致收入问题成为&#8220;码农&#8221;的心病。</p>
<p>而&#8220; 工作辛苦&#8221;、&#8220;收入低&#8221;和农民有类似，所以无论自嘲或者是被别人冠以&#8220;码农&#8221;的称谓，辛苦、收入低这两个标志包含其一的可能性非常大。如果两者兼有，那就是纯种&#8216;码农&#8217;一枚，够苦逼。</p>
<p>当然，还有第三种情况就是像赵劼姐夫这样，&#8220;弹钢琴的码农&#8221;，已经做&#8220;码农&#8221;做到一种境界，并不一定强调其辛苦、更不会收入差，以&#8220;码农&#8221;调侃的口吻戏谑人生，这个心态和大家自称屌丝是一样的，更多的自嘲自讽。其实，这样收入高而且相对不这么辛苦的精英&#8220;码农&#8221;在行业内也不少。</p>
<p><strong>下面是在读研究生吴洲提供的，来自图灵中文社区电子杂志《码农》第一期的首卷语：《所谓码农》一文的解释：</strong></p>
<p>对于&#8220;码农&#8221;这个称呼，有些人喜爱有加，有些人不以为然。区别在于对待&#8220;农&#8221;这个字的感觉。农当然是指农民，这个词寓义很丰富，既可以说它伟大，也可以说它渺小。说它伟大，是因为我们的生存离不开农民，而且中国一直是个农业为本的国家，曾经说是百分之八十的人是农民，这意味着往前翻⼀两代，你我众人皆是农民出身。以此观之，农可谓大哉。说它渺小，则是因为大家的观念里，农民意味着有很多缺点，冠冕堂皇的说法是劣根性，比如目光短浅、思维陈旧、自私小气等等，总之是为我们受过教育的人群所看不惯的种种毛病&#8212;&#8212;这些毛病虽然我们自己也有，但是我们看不见&#8212;&#8212;于是乎&#8220;农民&#8221;成为了骂人时常用的字眼。</p>
<p>其实，把自己的编程生涯与田间地头的锄禾日当午对应起来，确是有那么些相似之处的。你能想象得到，田间整齐栽种的秧苗，与屏幕上显示的错落有致的代码行有几分神似。各种庄稼的种植是有讲究的，正如你要注意编程风格。施肥灌溉，犹如你对代码进行的编译链接。除草除虫，自然是在做着debug 。你挑水来我浇园，大概是在小菜园中进行的结对编程。因为靠天吃饭，农民们也要学点云计算，去五道口职业技术学校进修的人也多起来了。收割的季节，活多人少，也常常是要搞外包的，因为deadline 很重要。不过坦率地说，&#8220;码农&#8221;这个叫法让人体会更多的是滑稽、搞怪、无厘头。毕竟一个是简单的体力劳动，一个是高智商的脑力劳动，不可同日而语。而程序员却偏爱这样的时空错乱的感觉，自嘲</p>
<p>（我就是个农民！）的同时却又自命不凡（我是码农我怕谁？！），特立独行极了。</p>
<p>码农的草帽底下，是一颗充满创造力的自由不羁的头脑。他们遵从最佳实践而痛恨陈规教条，他们欣赏天才而不迷信权威，他们喜欢思考而不轻易苟同。他们是技术人，却追求人文理想；他们敢于呐喊，说出自己的观点和主张，也更善于脚踏实地，用自己的点滴工作去改变现状。码农们是勤奋的，加班加点的工作是常有的事情，城市夜间的灯火，有多少是在码农们的办公室和居所点燃？周末四处举办的技术交流和讲座，又活跃着多少码农的身影？线下读书，线上讨论，冥思苦想，动手实践，新技术驱动着码农们的脚步，码农们在改变着我们的生活。生存离不开农民，生活离不开码农。</p>
<p>各位&#8220;码农&#8221;，你们是如何看待这个称呼的呢？对于上面几位大牛的观点，你们有啥想说的？不妨和我们分享一下吧！</p></div><img src ="http://www.cppblog.com/jackdongy/aggbug/193635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jackdongy/" target="_blank">jackdong</a> 2012-10-21 22:42 <a href="http://www.cppblog.com/jackdongy/archive/2012/10/21/193635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>