当前位置: 首页 > news >正文

长沙做网站的公司对比dz地方门户模板

长沙做网站的公司对比,dz地方门户模板,济南市建设银行网站,设计对网站的重要性你应当如何学习C(以及编程)(rev#1) By 刘未鹏(pongba) C的罗浮宫(http://blog.csdn.net/pongba) JavaScript是世界上最受误解的语言#xff0c;其实C何尝不是。坊间流传的错误的C学习方法一抓就是一大把。我自己在学习C的过程中也走了许多弯路#xff0c;浪费了不少时间。 为…你应当如何学习C(以及编程)(rev#1) By 刘未鹏(pongba) C的罗浮宫(http://blog.csdn.net/pongba) JavaScript是世界上最受误解的语言其实C何尝不是。坊间流传的错误的C学习方法一抓就是一大把。我自己在学习C的过程中也走了许多弯路浪费了不少时间。 为什么会存在这么多错误认识原因主要有三个一是C语言的细节太多。二是一些著名的C书籍总在不管有意还是无意暗示语言细节的重要性和有趣。三是现代C库的开发哲学必须用到一些犄角旮旯的语言细节但注意是库设计不是日常编程。这些共同塑造了C社群的整体心态和哲学。 单是第一条还未必能够成气候其它语言的细节也不少尽管比起C起来还是小巫见大巫就拿javascript来说作用域规则名字查找closurefor/in这些都是细节而且其中还有违反直觉的。但许多动态语言的程序员的理念我猜大约是学到哪用到哪罢。但C就不一样了学C之人有一种类似于被暗示的潜在心态就是一定要先把语言核心基本上吃透了才能下手写出漂亮的程序。这首先就错了。这个意识形成的原因在第二点C书籍。市面上的C书籍不计其数但有一个共同的缺点就是讲语言细节的书太多——《C gotchas》《Effective C》《More Effective C》但无可厚非的是C是这样一门语言要拿它满足现代编程理念的需求尤其是C库开发的需求还必须得关注语言细节乃至于在C中利用语言细节已经成了一门学问。比如C模板在设计之初根本没有想到模板元编程这回事更没想到C模板系统是图灵完备的这也就导致了《Modern C Design》和《C Template Metaprogramming》的惊世骇俗。这些技术的出现为什么惊世骇俗打个比方就好比是一块大家都认为已经熟悉无比再无秘密可言的土地上突然某天有人挖到原来地下还蕴藏着最丰富的石油。在这之前的C虽然也有一些细节但也还算容易掌握那可是C程序员们的happy old times因为C的一切都一览无余everything is figured out。然而《Modern C Design》的出世告诉人们“瞧还有多少细节你们没有掌握啊。”于是C程序员们久违的激情被重燃起来奋不顾身的踏入细节的沼泽中。尤其是模板编程将C的细节进一步挖掘到了极致——我们干嘛关心涉及类对象的隐式转换的优先级高低看看boost::is_base_of就可以知道有多诡异了。但最大的问题还在于对于这些细节的关注还真有它合适的理由我们要开发现代模板库要开发active library就必须动用模板编程技术要动用模板编程技术就必须利用语言的犄角旮旯enable_iftype_traits甚至连早就古井无波的C宏也在乱世中重生看看boost::preprocessor有多诡异就知道了连C宏的图灵完备性预编译期的都被挖掘出来了。为什么要做这些好玩标榜都不是开发库的实际需求。但这也正是最大的悲哀了。在boost里面因实际需求而动用语言细节最终居然能神奇的完成任务的最好教材就是boost::foreach这个小设施对语言细节的发掘达到了惊天地泣鬼神的地步不信你先试着自己去看看它的源代码再看看作者介绍它的文章吧。而boost::typeof也不甘其后——C语言里面有太多被“发现”而不是被“发明”的技术。难道最初无意设置这些语言规则的家伙们都是oracles 因为没有variadic templates人们用宏加上缺省模板参数来实现类似效果。因为没有concepts人们用模板加上析构函数的细节来完成类似工作。因为没有typeof人们用模板元编程和宏加上无尽的细节来实现目标… C开发者们的DIY精神不可谓不强。 然而如果仅仅是因为要开发优秀的库那么涉及这些细节都还是情有可原的至少在C09出现并且编译器厂商跟上之前这些都还能说是不得已而为之。但我们广大的C程序员呢大众是容易被误导的我也曾经是。以为掌握了更多的语言细节就更牛但实际却是那些语言细节十有八九是平时编程用都用不到的。C中众多的细节虽然在库设计者手里面有其用武之地但普通程序员则根本无需过多关注尤其是没有实际动机的关注。一般性的编码实践准则以及基本的编程能力和基本功乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。 学习最佳编码实践比学习C更重要。看优秀的代码也比埋头用差劲的编码方式写垃圾代码要有效。直接、清晰、明了、KISS地表达意图比玩编码花招要重要… 避免去过问任何语言细节除非必要。这个必要是指在实际编程当中遇到问题这样就算需要过问细节也是最省事的懒惰者原则嘛。一个掌握了基本的编程理念并有较强学习能力的程序员在用一门陌生的语言编程时就算拿着那本语言的圣经从索引翻起也可以编出合格的程序来。十年学会编程不是指对每门语言都得十年那一辈子才能学几门语言哪如果按字母顺序学的话一辈子都别指望学到Ruby了十年学习编程更不是指先把语言特性从粗到细全都吃透才敢下手编程在实践中提高才是最重要的。 至于这种抠语言细节的哲学为何能在社群里面呈野火燎原之势就是一个心理学的问题了。想像人们在论坛上讨论问题时一个对语言把握很细致的人肯定能够得到更多的佩服而由于论坛上的问题大多是小问题所以解决实际问题的真正能力并不能得到显现也就是说知识型的人能够得到更多佩服后者便成为动力和仿效的砝码。然而真正的编程能力是与语言细节没关系的熟练运用一门语言能够帮你最佳表达你的意图但熟练运用一门语言绝不意味着要把它的边边角角全都记住。懂得一些常识有了编程的基本直觉遇到一些细节错误的时候再去查书是最节省时间的办法。 C的书Bjarne的圣经《The C Programming Language》是高屋建瓴的。《大规模C程序设计》是挺务实的。《Accelerated C》是最佳入门的。《C Templates》是仅作参考的。《C Template Metaprogramming》是精力过剩者可以玩一玩的普通程序员碰都别碰的。《ISO.IEC C Standard 14882》不是拿来读的。Bjarne最近在做C的教育新书是绝对可以期待的。 P.S. 关于如何学习编程g9的blog上有许多精彩的文章这里这里这里这里… 实际上我建议你去把g9老大的blog翻个底朝天 :P 再P.S. 书单我是遑于给出一个类似《C初学者必读》这种书单的。C的书不计其数被公认的好书也不胜枚举。只不过有些书容易给初学者造成一种错觉就是“学习C就应该是这个样子的”。比如有朋友提到的《高质量C/C编程》这本书有价值但不适合初学者初学者读这样的书容易一叶障目不见泰山。实际上正确的态度是细节是必要的。但细节是次要的。其实学习编程我觉得应该最先学习如何用伪码表达思想呢君不见《Introduction to Algorithm》里面的代码《TAOCP》中的代码哦对了它们是自己建立的语言但这种仅教学目的的语言的目的就是为了避免让写程序的人一开始就忘了写程序是为了完成功能以为写程序就是和语言细节作斗争了。Bjarne说程序的正确性最重要boost的编码标准里面也将正确性列在性能前面。 此外一旦建立了正确的学习编程的理念其实什么书只要不是太垃圾的都有些用处。都当成参考书用的时候从目录或索引翻基本就对了。 再再P.S. myan老大和g9老大都给出了许多精彩的见解。我不得不再加上一个P.S。具体我就不摘录了如果你读到这里请务必往下看他们的评论。转载者别忘了转载他们的评论:-) 许多朋友都问我同一个问题到底要不要学习C。其实这个问题问得很没有意义。“学C”和“不学C”这个二分法是没意义的为什么因为这个问题很表面甚至很浮躁。重要的不是你掌握的语言而是你掌握的能力借用myan老大的话“重要的是这个磨练过程而不是结果要的是你粗壮的腿而不是你身上背的那袋盐巴。”。此外学习C的意义其实真的是醉翁之意不在酒像C/C这种系统级语言在学习的过程中必须要涉及到一些底层知识如内存管理、编译连接系统、汇编语言、硬件体系结构等等等等知识注意这不包括过分犄角旮旯的语言枝节。这些东西也就是所谓的内功了其实最最重要的内功还是长期学习所磨练出来的自学能力。对此大嘴Joel在《Joel On Software》里面提到的漏洞抽象定律阐述得就非常漂亮。 所以答案是让你成为高手的并不是你掌握什么语言精通C未必就能让你成为高手不精通C也未必就能让你成为低手。我想大家都不会怀疑g9老大如果要抄起C做一个项目的话会比大多数自认熟练C的人要做得漂亮。所以关键的不是语言这个表层的东西而是底下的本质矛盾。当然不是说那就什么语言都不要学了按照一种曹操的逻辑“天下语言唯imperative与declarative耳”。C是前者里面最复杂的一种支持最广泛的编程范式。借用当初数学系入学大会上一个老师的话“你数学都学了还有什么不能学的呢”。学语言是一个途径如果你把它用来磨练自己可以。如果你把它用来作为学习系统底层知识的钥匙可以。如果你把它用来作为学习如何编写优秀的代码如何组织大型的程序如何进行抽象设计可以。如果掉书袋光啃细节我认为不可以除非你必须要用到细节像boost库的coder们。 然后再借用一下g9老大的《银弹和我们的职业》中的话 银弹和我们的职业发展有什么相干很简单我们得把时间用于学习解决本质困难。新技术给高手带来方便。菜鸟们却不用指望被新技术拯救。沿用以前的比喻 一流的摄影师不会因为相机的更新换代而丢掉饭碗反而可能借助先进技术留下传世佳作。因为摄影的本质困难还是摄影师的艺术感觉。热门技术也就等于相机。 不停追新学习这个框架那个软件好比成天钻研不同相机的说明书。而热门技术后的来龙去脉才好比摄影技术。为什么推出这个框架它解决了什么其它框架 不能解决的问题它在哪里适用它在哪里不适用它用了什么新的设计它改进了哪些旧的设计Why is forever. 和 朋友聊天时提到Steve McConnell的《Professional Software Development》里面引了一个调查说软件开发技术的半衰期20年。也就是说20年后我们现在知识里一半的东西过时。相当不坏。朋友打趣道“应 该说20年后IT界一半的技术过时我们学的过时技术远远超过这个比例。具体到某人很可能5年他就废了”。话虽悲观但可见选择学习内容的重要性。学习 本质技艺技术迟早过时技艺却常用长新还有一好处就是不用看着自己心爱的技术受到挑战的时候干嚎。C/C过时就过时了呗只要有其它的系统编程语言。Java倒了就倒了呗未必我不能用.NETRuby昙花一现又如何。如果用得不爽换到其它动态语言就是了。J2EE被废了又怎样未必我们就 做不出分布系统了这里还举了更多的例子。 一句话只有人是真正的银弹。职业发展的目标就是把自己变成银弹。那时候你就不再是人而是人弹。 最后就以我在Bjarne的众多访谈当中摘录的一些关于如何学习C以及编程的看法结束吧没空逐段翻译了只将其中我觉得最重要的几段译了一下当然其它也很重要这些段落是在Bjarne的所有采访稿中摘抄出来的所以强烈建议都过目一下 I suspect that people think too little about what they want to build, too little about what would make it correct, and too much about efficiency and following fashions of programming style. The key questions are always: what do I want to do? and how do I know that I have done if?. Strategies for testing enters into my concerns from well before I write the firat line of code, and that despite my view that you have to write code very early - rather than wait until a design is complete. 译我感觉人们过多关注了所谓“效率”以及跟随编程风格的潮流却严重忽视了本不该被忽视的问题如“我究竟想要构建什么样的系统”、“怎样才能使它正确”。最关键的问题永远是“我究竟想要做什么”和“如何才能知道我的系统是否已经完成了呢”就拿我来说吧我会在编写第一行代码之前就考虑测试方案而且这还是在我关于应当早于设计完成之前就进行编码的观点的前提之下。 Obviously, C is very complex. Obviously, people get lost. However, most peple get lost when they get diverted into becoming language lawyers rather than getting lost when they have a clear idea of what they want to express and simply look at C language features to see how to express it. Once you know data absreaction, class hierarchies (object-oriented programming), and parameterization with types (generic programming) in a fairly general way, the C language features fall in place. 译诚然C非常复杂。诚然人们迷失其中了。然而问题是大多数人不是因为首先对自己想要表达什么有了清晰的认识只不过在去C语言中搜寻合适的语言特性时迷失的相反大多数人是在不觉成为语言律师的路上迷失在细节的丛林中的。事实是只需对数据抽象、类体系结构OOP以及参数化类型GP有一个相当一般层面的了解C纷繁的语言特性也就清晰起来了。 Well, I dont think I made such a trade-off. I want elegant and efficient code. Sometimes I get it. These dichotomies (between efficiency versus correctness, efficiency versus programmer time, efficiency versus high-level, et cetera.) are bogus. I think the real problem is that we (that is, we software developers) are in a permanent state of emergency, grasping at straws to get our work done. We perform many minor miracles through trial and error, excessive use of brute force, and lots and lots of testing, but--so often--its not enough. Software developers have become adept at the difficult art of building reasonably reliable systems out of unreliable parts. The snag is that often we do not know exactly how we did it: a system just sort of evolved into something minimally acceptable. Personally, I prefer to know when a system will work, and why it will. There are more useful systems developed in languages deemed awful than in languages praised for being beautiful--many more. The purpose of a programming language is to help build good systems, where good can be defined in many ways. My brief definition is, correct, maintainable, and adequately fast. Aesthetics matter, but first and foremost a language must be useful; it must allow real-world programmers to express real-world ideas succinctly and affordably. Im sure that for every programmer that dislikes C, there is one who likes it. However, a friend of mine went to a conference where the keynote speaker asked the audience to indicate by show of hands, one, how many people disliked C, and two, how many people had written a C program. There were twice as many people in the first group than the second. Expressing dislike of something you dont know is usually known as prejudice. Also, complainers are always louder and more certain than proponents--reasonable people acknowledge flaws. I think I know more about the problems with C than just about anyone, but I also know how to avoid them and how to use Cs strengths. In any case, I dont think it is true that the programming languages are so difficult to learn.For example, every first-year university biology textbook contains more details and deeper theory than even an expert-level programming-language book. Most applications involve standards, operating systems, libraries, and tools that far exceed modern programming languages in complexity. What is difficult is the appreciation of the underlying techniques and their application to real-world problems. Obviously, most current languages have many parts that are unnecessarily complex, but the degree of those complexities compared to some ideal minimum is often exaggerated. We need relatively complex language to deal with absolutely complex problems. I note that English is arguably the largest and most complex language in the world (measured in number of words and idioms), but also one of the most successful. C provides a nice, extended case study in the evolutionary approach. C compatibility has been far harder to maintain than I or anyone else expected. Part of the reason is that C has kept evolving, partially guided by people who insist that C compatibility is neither necessary nor good for C. Another reason-- probably even more important--is that organizations prefer interfaces that are in the C/C subset so that they can support both languages with a single effort. This leads to a constant pressure on users not to use the most powerful C features and to myths about why they should be used carefully, infrequently, or by experts only. That, combined with backwards-looking teaching of C, has led to many failures to reap the potential benefits of C as a high-level language with powerful abstraction mechanisms. The question is how deeply integrated into the application those system dependencies are.I prefer the application to be designed conceptually in isolation from the underlying system, with an explicitly defined interface to the outer world, and then integrated through a thin layer of interface code. Had I had a chance to name the style of programming I like best, it would have been class-oriented programming, but then Im not particularly good at finding snappy names. The school of thought that I belong to - rooted in Simula and related design philosophies - emphasizes the role of compile-time checking and flexible (static) type systems. Reasoning about the behavior of a program has to be rooted in the (static) structure of the source code. The focus should be on guarantees, invariant, etc. which are closely tied to that static structure. This is the only way I know to effectively deal with correctness. Testing is essential but cannot be systematic and complete without a good internal program structure - simple-minded blackbox testing of any significant system is infeasible because of the exponential explosion of states. So, I recommend people to think in terms of class invariants, exception handling guarantees, highly structured resource management, etc. I should add that I intensely dislike debugging (as ah hoc and unsystematic) and strongly prefer reasoning about source code and systematic testing. Pros: flexibility, generality, performance, portability, good tool support, available on more platforms than any competitor except C, access to hardware and system resources, good availability of programmers and designers. Cons: complexity, sub-optimal use caused by poor teaching and myths.
http://wiki.neutronadmin.com/news/272297/

相关文章:

  • 电影网站app怎么做的网站已经编辑好了 上线准备哪些工作
  • 建公司网站建设明细报价表仙踪林老狼网站欢迎您拍照
  • 网站原型图设计济南电子商务网站开发
  • 网站后台管理系统安装网页小游戏无需登录
  • 泗县口碑营销互联网营销推荐咨询seo建设网站
  • 融资计划书郑州网站seo
  • 书城网站开发新密做网站
  • 铁哥们网站建设注册网站手机号收验证码
  • 推广公司网站有哪些方式net网站开发框架
  • 三 网站开发使用软件环境腾讯云镜像安装wordpress
  • 公司网站建设的目的和意义用flash做网站建设
  • 和先锋影音和做的网站软件开发工资一般多少深圳
  • 晋江论坛怎么搜索帖子147seo采集工具
  • 专业做视频的网站有哪些泰安建设工程招聘信息网站
  • 公司网站开发与维护软件开发和网页设计的区别
  • 成品网站价格表网页美工设计网站
  • 苏州的网站建设沈阳专业做网站公司
  • 纺织行业网站怎么做吸引人metro大都会app
  • 做网站成都学校网站的建设费用吗
  • 网站如何引导页哪里有好的免费的网站建设
  • 平面设计网站首页公司网站制作需要多少钱
  • 成都营销型网站建设中账号手机站电影
  • 建设网站的意义作用是什么php网站开发怎么接私活
  • 仁怀企业网站建设科技论文
  • 网站建设与管理学校wordpress 滑动 评论
  • 网络建站如何建成小程序开发文档pdf
  • 网站热力图用ps怎么做网站ftp地址是什么
  • ps做网站导航条富阳区住房与建设局网站
  • 公司网站怎么建立优化体系手机制作游戏的软件
  • 一级a做爰片手机电影网站罗定网站建设