能求m的阶层 写出程序具体程序吗?

程序猿,怎样才能写好程序?_网易科技
程序猿,怎样才能写好程序?
用微信扫码二维码
分享至好友和朋友圈
本文作者余晟,来自其微信公众号“余晟以为”,原文题目为《“把程序写好”这回事》刚领证的著名程序员狗叔(@Googollee),前几周提出了很好玩的问题:“把程序写好的知识,是从哪里学来的呢?”。我和狗叔回忆,我们好像都没有正经上过什么“把程序写好”的培训班,也没有《九阴真经》之类的宝典。但是我们又都看到,很多程序员写的程序是不合格的,大量基础规范都没有遵循(更可怕的是这样的程序很可能还在服务我们每天的生活)。那么,优秀的程序员,是从哪里学到把程序写好的知识的呢?这个问题我想了很久,有几点结论可以分享给大家。首先,必须要正视“写代码”这回事有很多人虽然做着程序员的工作,其实内心是看不起写程序的。对他们来说,写代码只是不得不经历的初级阶段,等到职业生涯发展了,就可以脱离这种单调无聊的工作了。但是,这种想法是错的,有这种想法只能说明对计算机和程序的认知还相当肤浅。写代码绝不是简单无聊的劳动,程序员首先必须了解计算机的运行原理,然后需要把现实问题建模,并在计算机的世界里精确地还原出问题的解决方案。既然代码要交给功能强大的计算机去严格执行,程序员要担负的责任就相当大,因为代码的任何一点差异,都有可能影响程序最终的运行结果——因为程序的细小缺陷导致航天任务失败的例子已经有好几次了。反过来说,程序员能掌握的权力相当大,成为“合格程序员”的门槛也相当高,虽然这种门槛并不为许多人所知。前段时间有很多人叫嚷“我万事俱备,只差一个写代码的”,恰恰是因为他们把写程序看成简单机械的劳动,但以自己的聪明才智又学不会这种“简单机械”的劳动。这种矛盾,恰恰说明写程序是有门槛、有要求的。所以,要想成为称职的程序员,必须正视写代码。其次,必须读过一些基本的书籍学校里通常会安排编程语言的课程,但不会教“怎样把程序写好”的课程。许多人对计算机的理解还停留在“科学与理论”的角度,只要程序能“对”,能输出正确结果就可以;却不知道如今与计算机相关的大量工作,其重心已经转移到实践和工程意识的方面了。这种错误的理解,导致很多程序员在工作之后相当长的时间里,学习的内容还局限于钻研理论和算法,一直忽略了“把程序写好”的补习。其实市面上已经有一些教人“把程序写好”的书籍,认真读完这些书,认真落实其中的规范,至少能保证把程序写“合格”,不会有明显的缺陷,为将来把程序写好奠定坚实的基础。从我和身边朋友的经验出发,我觉得《代码大全》、《重构》、《编程珠玑》、《程序员修炼之道》这几本书都是很不错的,如果能耐心读完并认真思考,写程序的水平会有相当的保证。要保持好奇心,多借鉴其它项目的内部实现我们时常开玩笑说,现在很多程序员的工作,就是从网上下载一些开源项目,然后改改参数。其实这并非玩笑,而是很多程序员工作的真实写照。充其量,他们还要做一些穿针引线的工作,把这些项目粘合组装起来。这看起来确实是简单机械的劳动,也不会给人多少提升。但事实并非如此。很多好的程序员就在这个过程中学会了把代码越写越好。因为他们保持了好奇心,去探究这些开源项目的内部实现,把应用的过程当成了学习的途径。在使用一个现成方案之前,先想想如果自己去解决要怎么办,再看看其他人的现成代码,确保自己懂得了这些代码蕴含的思维。甚至比较相类似的几个开源项目的源代码,分析其优劣,在自己的工作中注重借鉴其长处,避免其短处。久而久之,写程序的水平自然会有大的提升。在写程序时,要懂得在工程与理论之间求得平衡在谈到写程序时,经常有人引用奥卡姆剃刀原则,说“如无必要,勿增实体”;也有人引用爱因斯坦的话,“要足够简单,但不应该过于简单”。由此证明,好的程序应当是足够简单而且非常优雅的。在大方向上,我认同这种说法。但在具体的问题上,它未必正确。因为编程是与工程密切相关的工作,与工程密切相关就意味着大量的权衡、取舍。无论奥卡姆剃刀原则还是爱因斯坦的话,原本的主题都是针对理论的,所以两者并不能严格划等号。在实践中我见到过很多过份迷恋简单、美感的程序员,我称之为“玩套路”——他们太在意程序的形式美感,为了刻意追求那种严谨整齐的感觉而忽略了现实,也不懂得针对现实做出取舍,最终把自己套了进去。结果,用户明明需要的一亩菜地,他们交付的却是一份盆景,还振振有辞地指责用户不懂技术。这样的人,往往既当不好程序员,也成不了软件开发工程师。坦然接受其他人对自己代码的批评Code Review是提高代码质量的有效手段,这一点大家公认。但是在很多场合,Code Review很难推行起来,原因之一就是程序员内心难以接受其他人对自己代码的批评。这种现象倒也情有可原,因为写程序这回事,大家多少认为是有绝对标准,可以分出高下的。对大多数人来说,潜意识里也确实很难区分“对我的工作的批评”和“对我的批评”。所以面对其他人对自己代码的批评,除非是来自上级,否则多少有些面子上挂不住,天然有争辩的冲动。我自己就遇到过好几次这样的情况,本来讨论理论和方案一切正常,只要涉及到“看某人的代码”,气氛就随之大变。我们需要明白,不经历挑战和批评,人是很难提高的。其他人的批评,只要不是恶意的,总是能提供不一样的视角,帮助我们更深入或者更全面的认识问题,这是很好的成长机会。相比起来,“丢面子”更多只是一闪而过的,甚至根本只是自己觉得很丢脸,其他人完全不在意的。为了怕“丢面子”而排斥其他人的批评,实在是得不偿失。另一方面,团队领导也应当营造平等合理的协作气氛,倡导“对事不对人”的价值观。这样,才能让更多的成员坦然接受对自己代码的批评。程序员需要有对荣誉感的追求归根到底,“荣誉感”是驱动个人不断追求更高境界的源动力。对没有荣誉感的程序员来说,“把程序写好”充其量是不得已背上的负担;而对于具有荣誉感的程序员来说,“把程序写好”是需要不断追求的目标。在我看来,程序员的荣誉感主要体现在两个重要的方面。第一是对质量的追求,好的程序员一定会对自己交付的程序的质量负责,力求做到没有缺陷,所以不会依赖Code Review来发现代码的缺陷,也不会依赖测试来发现功能的缺陷…… 甚至要向上游扩展了解问题的起因和目的,向下游扩展了解程序运行的状态和行为——这已经是“全栈工程师”的雏形了。
第二是对“用技术更好解决问题”的不断思索和追求。程序与现实不完全相同,所以很多时候并不受现实的严格限制,程序能不能突破这些限制,如何突破这些限制,靠的就是程序员的荣誉感。现实中很多时候确实“鱼与熊掌不可兼得”,但是在程序的世界里,在某些情况下,鱼与熊掌是可能兼得的。现实中“菜刀用来杀人”似乎是无解的,但在程序的世界里,有些菜刀就可以做到不能用来杀人。普通人或许囿于现实生活经验无法想想“鱼与熊掌兼得”、“菜刀不能杀人”,但想把程序写好的程序员,一定不能就此止步。最后我想说的是,程序员应当属于德鲁克说的“知识工作者”。对于知识工作者,我们就不能像对待机器和工人那样去严格约束工作的过程,只能要求结果,或者说“找到合适的人,提供合适的环境,期待美好的事情发生”,这也是很多程序员享受的方式。但是,如果程序员不在乎自我驱动和追求,把写程序当作不需要任何想象力和创造力简单重复劳动,那么“血汗工厂”的工作方式可能更能保证生产效率。
本文来源:网易科技报道
责任编辑:王朦_NT2210
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈程序员怎样才能写出一篇好的博客或者技术文章? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="4分享邀请回答phodal.com/ )这个答案由四部分组成:博客的流量来源不同文章类型的写作要点如何写博客如何收集写作的灵感流量来源首先,我将技术博客分为下面几种类型:技术细节型。频率: 每天几次,15~30分钟可以写完。干货型。频率: 每月几次,1~2小时可以搞定。实践总结型。频率: 每周1~2次,2+小时以上的时间。杂谈与鸡汤型。频率: 每季度几次,少则几小时,动则上月。接着,奉献上一章我的博客的用户来源图,分析完大概如下:前三者可以带来很多的流量,后者可以带来大量的评论啦。前三者可以让你在Google上有一个好位置~~,后者可以让你在用户心中有个好位置。通过社交媒体可以让第四种类型的文章,有大量的评论和转载。干货型和实践总结型的文章通过聚合网站来传播的效果最好。在Google中有个好位置意味着——第一的位置会有50%以上的用户访问,这一点很重要哦~~。再放出神图:首先作为一个专业的程序员,我们会用某个关键词去搜索,如“InsecurePlatformWarning: A true SSLContext object is not available.” :如果这时你的标题就是《》,那么你就找到了你的用户了。这是我之前用了5分钟不到的文章写的一篇文章,它在半年的时间里带来了6,599个访问量。它在Google的搜索结果中排第一:虽然很不情愿地被排名第二的文章抄袭了——但是我还是第一,这该死的伪原创。而用户不会只访问你的一个页面的:一般来说,前三种类型的用户获取到他们想要的信息就走了,不会留下评论。至于第四种类型,没有大V的光环,偶尔文章被转企业V转转也能多个几十个粉丝。所以我没有第四种类型的文章太多的经验哈。不同文章类型的写作要点接着, 让我们再看看上面的几种类型:技术细节型在我的博客里很大一部分文章都是这一类,主要是原自早先对SEO的研究。对于先这种没有光环的人来说,这是我博客的主要流量来源。这也是让我坚持下去的动力,每天有大概三百个用户来自搜索引擎。这种类型主要来自于日常工作,但是好像写这一类的人不多。每天我们都会遇到不同的技术问题——如某个第三库更新,某个浏览器bug,如何使用某个技术。因此,我们就会用这样的关键字和词去搜索,反正大部分教程序员使用Google的文章就是这么写的。既然你想要这样的搜索,那我就直接把搜索结果放前面好了,如:如果你也擅长用Google的话,我想你就懂了奥秘。标题的前半部分是关键字,后半部分指名意图。接着,就是贴解决方案和代码咯~~。在这时候需要注意几点:试着去表达一些技术上的细节,也会省去一些技术上的细节。以自己学习的角度去想怎样写可以一步步下来。加入一点点自己的情感,博客和文档是不一样的。(详细见下文)编写更简洁的内容,因为技术博客与此文不同的是,技术博客是面向寻找信息的人。干货型一般来说,这种类型的文章更类似于GitHub上的那些Awesome类型的Repo。说说几个标题,大概可能就会有点感觉了:作为一个前端工程师你了解你的小伙伴么 - chromeApp 上架相关事宜、解决技巧20 个非常有用的 Java 程序片段Java 开发者不容错过的 12 种高效工具通常来说,这一类型的文章都是作者一段时间对于某一个东西的总结,非常有收藏价值。故而,这种类型的文章会在GitHub或者聚合网站上比较受欢迎。所以,它也更容易传播。但是写起来的难度比较大,这依赖于你的使用经验。所以,也不是一天、两天就能搞定的。实践总结型看看标题,可能大家都知道这一类文章要怎么写了:JavaScript之闭包与高阶函数(一)Android开发从零开始这通常是一系列的文章,而这一系列的文章一般是连续写出来的。也因此,我们可以发现很大的书都是由这一类的文章衍生出来的。这一类的文章更像是干货型和技术细节型的结合,面向特定领域的技术,也属于干货。对于这种类型的文章来说,更依赖于代码——读者需要依据代码一步步往下深入。所以在这一类型的文章中代码往往比较重要。杂谈与鸡汤型来几一些标题:为什么整个互联网行业都缺前端工程师?程序员职业生涯中应该思考的10个问题 怎么减少编程中的 bug?为什么大公司看起来都那么糟糕?BlaBla,简单地来说这一类文章基本上是没有技术的,都是一些以理论为主的概括。同时,写这一类文章的时候,也意料着可能在某一领域有一定的水平——写出来才会有人看。而由于偏向理论,这一类文章看的人往往会更多,因为它并不倾向于使用领域特定的技术。所以这种类型是受众很广的文章,并且也像鸡汤一样容易传播。同时,这种类型的文章,更依赖于社区媒体及聚合网站的传播。因为大部分情况下,用户不会这么去搜索文章的。如何写博客对于博客的内容来说,下面几点很重要哦:标题、小标题。一个好的标题会带来更多的流量的。内容。以代码为例的文章,最好有代码。代码可以放在GitHub上,一举两得。图 —— 一图胜千言,如本文第一节中的框架图。,一个框架图可以省去你的很多话语。排版,又可称为UI设计。基本的语法高亮要有,容易阅读也要有。最简单就是白底黑字。下面有我之前在《》一文中说到的一些要点:标题——必须重要,类名对于写博文的人来说,重点的是如何清楚的去表达他们的想法,标题算是其中之一,这个也就是为什么标题党成为了标题党,而《设计模式》成为了经典。刚开始学编程的时候,更吸引你注意力的可能是《72小时学会Javascript》,而不是《Javascript 权威指南》,兴许让你买前者的原因是因为你能看懂前者,而后者不仅看不懂,而且价格更贵。只是一年以后,《72 小时学会Javascript》被你扔到了垃圾箱,而《Javascript 权威指南》却放在了原来放那本书的位置上。你定义的类难道仅仅应该是class class1么?小标题——地图,method小标题有点类似于sitemap.xml,只是他就是站点地图,一点就到了相应的地方。他应该直接了解的说这是开始菜单,标题栏,菜单栏,而不应该是简简单单的第一章,如果你真是那样写的话,你写的函数想必是def fun1
如果你写的是getdata那么,我想你的函数名应该和你的文章一样,告诉人们,你要的是getdata。所以不要吝啬你鼠标的一下,它可以承受上百万字的点击。如果因为那样坏了,你可以告诉我,我可以帮你免费换一个欧姆龙的微动,前提是你的鼠标可以换。如果是HTML那么应该是h2 h3,markdown也就是用得比较多的github上的README.md的##或者是###内容——函数体这里可不是让你用一个让人难以理解的Magic Number,你写得越复杂,别人看的时间就越久,通俗易懂,就是一个很好的开始。你可以把一个个复杂的方法分解出来,或者提炼函数,或者重命名。当你相信你看不懂你的文章,正如你看不懂你写的hello,world我想你是时候去重构你的函数了。复杂的部分,就用段落来解决,一个函数如同一个段落只应该表达一个思想,太长了就如同这篇文章一样没有多少人会认真去看。你需要给你写的一个精美的代码加一个注释,所以你也需要给你复杂的地方加上个(PS)。在编写内容的时候需要注意下面的几点:代码。必要的时候贴出代码,会是一种快速有效的方法,工作的时候是为了完成某个任务。列表。列表可以简明扼要的说明你想要表达的内容。图表。一张流程图可以说明程序的步骤,一个表格可以作好一个对比。标题。标题的好处,可以让用户快速定位,让用户找到想要的内容。链接。一个好的URL对于使用英文的人来说,可以利于SEO,对于中文,使用的人可以判断出文章的专业与否。引言——README我想都会去看的,无论是在破解软件的时候,还是github上面的项目。简单的说说,这篇文章是干什么的,这个程序是干什么的。大家都会,不是么?没有什么好写的?说说你是怎么开始编程吧,然后写在你的博客上,你会发现你会爱不释手的。如何收集写作的灵感下面是我最近在做的,感觉很不错,推荐一下咯:一般是先有个论点,然后再论据,最后才写。第一步,在平时把想到的一些能写的文章用TODO的形式列出来,如我用的是“奇妙清单”。下面就是我最近想写的一些文章的一些标题:但是有一些还没灵感,只是想到了个大概——所以有的是只是一个标题。这些文章大部分都属于杂谈型的,想到什么就说点什么,但是会有个核心。第二步,在平时偶然会有点灵感的时候,就用Google Keep创建一个新的记事,稍微写几句,提醒一下自己咯。在这一步,相当于就是找一些论据来支撑自己的观点,等到这些观点差不多的时候就可以写了。第三步,便是写。写的时候其实没有啥感觉,就如同我之前在《》一文中所说的。不得不再说说这个标题,一看就知道要写什么了~~。真正的想法都在脑子里,而不在纸上,或者IDE里。所以,其实写代码的时间很短,真实长的是想出怎么写,文章也是如此。原文链接:欢迎关注我的微信公众号哈: (二维码自动识别)31318 条评论分享收藏感谢收起gashero.iteye.com/blog/2075324 。在iteye(原javaeye)上还没见到有其他博文的PV能超过此文,我的博客也因为此文成了iteye博客2014年度总排名的第二位。一篇技术文章的命运,当然要靠干货的奋斗,但也要考虑到历史进程。日凌晨2点开始的Apple发布会,发布了新的iOS编程语言Swift。早上五点多我被儿子叫醒,闲来无事就把Apple同步公布的一份英文文档的第一章翻译了出来。早上10:14,发布到网上。于是大家早起上班看到Swift语言发布的同时,就看到第一份中文入门了。我发布这篇文章的微博如下,172转发,63评论。另一位朋友帮我发布的微博则超过500转发。评论里一片的惊呼出手太快。在金融领域有这样一种说法,即想要赚钱必须符合3个条件之一:Be First、Be Smart、Be Cheat。此文的重点就在Be First。Be Smart的玩法则对应了某个领域最完善的文档。Be Cheat则可以认为是讲段子之类的,或者是充分利用平台的知名度。Be Smart的举个例子:
。这是国内至今最完整的Python扩展模块的文档,6.8万字。从我的角度来看,想要获得足够的浏览量,还是Be First的效果更好。过去的十多年我也做过多次介绍最新的技术到国内。所以我的个人简历里有个列表,即由我翻译首次引入国内,或极大的推进了该项技术在国内的应用程度的技术:mod_python:翻译version3.2.8文档,比国内的第一份文档规模扩大3倍多zenoss:国内第一份中文文档Twisted网络编程必备:翻译完该书的1/2,开始让网上的文章不仅限于hello worldStackless Python:与朋友合作翻译,首次引入DBUtils:我的翻译已被官方采用Programming Erlang:翻译了该书的1/3并发布到网络SQLObject:翻译官方文档SQLAlchemy:翻译官方文档Python的C扩展模块:翻译了Python标准发行版中《Extending and Embedding》的70%,让网上的例子不在局限于hello worldsendpkt:我的开源项目,让Python具备了发送数据包的能力,不再仅仅监听pysqlite:国内最全的文档是我从官方文档翻译的greenlet:同上protobuf:同上greenlet/eventlet:由我主要引入国内826 条评论分享收藏感谢收起怎么才能在一天写出万行代码并且基本没有bug? - 知乎105被浏览<strong class="NumberBoard-itemValue" title="2分享邀请回答3710 条评论分享收藏感谢收起176 条评论分享收藏感谢收起

我要回帖

更多关于 写出一个c程序的构成 的文章

 

随机推荐