精华内容
下载资源
问答
  • 别为了学编程学编程

    万次阅读 多人点赞 2014-01-14 09:39:03
    请不要为了学编程学编程!更别为了高工资而从事编程这个行当。我诚挚的建议是,我们应该把时间花在:(1)学习如何贪婪地做研究,并对我们周围的事物是如何工作的有个基本的理解;(2)学习如何有效地与别人沟通。...

    原文作者:Jeff Atwood

    “所有人都应该学习编程”(Everyone should learn programming)——这个“病毒”已经广为扩展,达到了失控的地步,以致于纽约市长竟然也在2012年郑重宣布他要学习编程了。他在Twitter上这么说


    他摆出的这种高姿态当然是为了获取纽约技术社区的选票,但如果市长先生真的在他的工作中玩起了JavaScript代码,那么纽约州的政治必定存在一些深层次的、糟糕透顶的问题。即使Bloomberg先生真的学了编程,他最终也会对Adam Vandenberg怀有歉意,因为我们将看到的是这个:

    10 PRINT "I AM MAYOR"

    20 GOTO 10

    而Adam早在2012年1月就在Twitter上发布过这两行代码了:


    值得庆幸的是,这种奇特事情(市长开始他的技术之旅)发生的概率为零,即使只是玩玩而已。原因很简单:纽约市长应该把他的时间花在纳税人出钱雇用他去做的事情上。从市长办公室的首页(http://www.nyc.gov)公布的信息来看,市长应该致力于学校的旷课问题、公共交通的改善、每一年的城市预算……真的要我把每一项都列出来吗?

    有些人鼓吹:“编程是一项基本技能,我们应该像教阅读、写作和算术一样教孩子们学习编程。”我想问问那些人:你能解释一下吗——如果Michael Bloomberg先生某天早上一觉醒来突然变成了一名Java程序员,他如何能在日常工作中更好地领导这个美国最大的城市?在我看来是很显然的:拥有娴熟的阅读技能和写作技巧,还有至少中学水平的数学功底,这些对于做好政治家这份工作才是最基本的。说到这一点,也许任何工作都是这样。但是,理解变量、函数、指针、递归也有这么重要吗?那我就不明白了……

    我写过一篇博文,题为“对于编程:要么热爱,要么离开”。不难看出,我本人是热爱编程的。我也相信,在特定的情境之下,编程对于某些人来说是很重要的。但是,很多技能都是这样子的啊。我不会敦促每个人都去学习编程;相比之下,我更愿意建议每个人都去学会怎么修水管。这听起来很荒谬,对不对?


    “所有人都应该学习编程”这个倡议是不对的,不仅仅只是因为它错误地把编程与一些生活的基本技能(阅读、写作、算术)相提并论,其实还有很多其他的方面:

    • 它认为,这个世界天生需要更多的代码,而且多多益善。然而,经过30年的程序员职业生涯,我发现其实并不是那么回事。你应该学习写代码吗?不要。我不赞成那样。你应该学会尽可能少地写代码。(参阅《高效能程序员的修炼》的第3.2节“大道至简”。)最好一点也别写!
    • 它认为,编码就是目的。软件开发者倾向于成为软件行业里的“瘾君子”,他们认为自己的工作就是写代码。其实不然!他们的工作应该是解决问题。(参阅“你的团队能通过电梯测试吗?”)请不要因为写了多少行代码而沾沾自喜;真正的得意应该表现在你完成某个解决方案的时候。我们已经有太多太多沉迷于多写一行代码的“码农”啦!
    • 它搞错了先后顺序,在问题出现之前先强调方法。在匆匆忙忙开始学习编程之前,请你先搞清楚真正的问题是什么。你真的碰到问题了吗?你能以一种别人能够理解的方式解释给他们听吗?你做过研究了吗?深入探索过可能的解决方案了吗?编程能解决那个问题吗?你确定吗?
    • 它认为,有更多天真无邪的菜鸟(他们甚至不确定自己是否真的喜欢编程这个行当)加入程序员的世界肯定是一件好事。也许吧,如果你认同“一个糟糕的程序员每年可以轻易创造两个新的就业机会”这种说法……其实,甚至大部分自称为程序员的人都不会编程。因此,真的每个人都能学会编程吗?请原谅我对此的怀疑。
    • 它暗示,在学习编程与以编程为业(有偿)之间只是隔着一层薄膜,很容易就能“渗透”过去。看看吧,一些新手程序员在参加了两个半月的训练营之后,就能得到平均年薪79000美元的工作。也许你也可以在24小时之内自己学会Perl!尽管编程是一个机会均等的领域,学历和证书在经验面前毫无用处——这些都是我真心喜欢的——但是,你仍须像我们一样花上一万小时的时间去学习。(注:Peter Norvig写过一篇经典的文章“Teach Yourself Programming in TenYears”,意思是要花10年时间去自学编程。)

    我觉得,我还是能够支持学一丁点儿编程的,但目的只是让你对代码有一个感性的认识,并且你可以了解在碰到什么问题时通过编程来解决是合适的。不过,即使没有经过特殊的专业训练,我也能一眼看出水管问题。普通大众(以及他们的政治领袖)只要对电脑和互联网的原理有了基本的理解,也许就已经能够很好地利用它们了。善于利用互联网的能力正在成为一种基本的生活技能,我们应该首先担心的是这个,而不是冒冒失失地开始学习编程。

    请不要为了学编程而学编程!更别为了高工资而从事编程这个行当。我诚挚的建议是,我们应该把时间花在:

    • 学习如何贪婪地做研究,并对我们周围的事物是如何工作的有个基本的理解;
    • 学习如何有效地与别人沟通。

    这些技能比单单学会编程要强得多,而且会让你在生活的方方面面受益。

    展开全文
  • 编程语言编码规范

    2014-04-02 17:44:32
    严格按照实际工作中的代码规范,学习中和工作中是不一样的,工作中有严格的编码规范,尽快养成良好的编码习惯,不仅利于代码的可读性,更能让自己的代码质量有个高品质。
  • 怎样学习一门编程语言

    万次阅读 多人点赞 2015-04-06 02:12:38
    选择一门语言确定你感...如果你想进入Web开发行业,那你将会有一堆语言需要去学习,这开发计算机程序相反。移动App的开发需要比PC等的开发更多的技巧。所有的这些决定将会影响着你的发展方向。考虑从一个“易学”的

    选择一门语言

    这里写图片描述

    确定你感兴趣的领域

    你可以开始学习任何编程语言(尽管其中一些被描述地比其他的更加“易学”),你得去问自己自己想用通过学习这门语言完成什么样的工作。这将会帮助你确定你应该追求的编程方式并且提供一个良好的开始。

    如果你想进入Web开发行业,那你将会有一堆语言需要去学习,这和开发计算机程序相反。移动App的开发需要比PC等的开发更多的技巧。所有的这些决定将会影响着你的发展方向。

    这里写图片描述

    考虑从一个“易学”的语言开始

    无论你做了什么样的决定,你可能只会希望从一门高水准又易学的语言开始。这些语言对于初学者非常有用,因为它们教授基本的概念和适用于几乎任何语言的思维过程。

    在这种语言中最流行的两种是Python和Ruby。它们都是使用着易读的句法的面向对象的Web应用开发语言。

    “面向对象”因为着这个语言是围绕着“对象”、数据收集和操作的概念来打造的。这一概念被用在许多先进的编程语言上,比如C++、Java、Objective-C和PHP。

    这里写图片描述

    通读大量语言的基本教程

    如果你还不确定你应该开始学习哪一门语言,那么就去阅读一些不同语言的基本教程吧。如果一门语言比别的更有意思,那就多去看看是不是真的那样。在网上对于所有的编程语言有无数个基本教程。

    Python——一个非常适合初学者的语言 ,而且当你掌握它的时候它会变得更加强大。被用来开发了许多Web应用、甚至一些游戏。
    Java——被无数个项目所使用,从游戏到Web应用再到ATM软件。
    HTML——对于任何Web开发者必不可少的起航点。在从事其他一系列Web开发之前掌握好HTML非常重要。
    C——最古老的语言之一,它已经是非常强大的工具,也是一些更现代的语言的祖先,比如C++,C#和Objective-C。

    从简单的开始学起

    这里写图片描述

    学习语言的核心概念

    虽然这一步中适合的部分将取决于你所选择的语言,但所有编程语言都有对建立有用的程序至关重要的基本概念。尽快的学习和掌握这些概念,将会使你更容易地解决问题和创建强大而有效的代码。下面只是一些在不同语言中的核心概念:

    变量——一个变量就是一个去存储和应用以改变代码片的方式。变量可以被操作,并且经常被定义成“整数”、“字符”,还有其他的确定可以存储的数据类型。进行编码时,变量通常具有让它们对于我们有种某种含义的名称。这样一来我们就容易理解该变量如何与其余的代码进行交互了。

    条件语句——条件语句是基于条件是否为真的一种行为。对于一个条件语句最常见的形式是“如果-那么”。如果这个条件为真,那么就有一件事发生,如果条件为假,那么就会发生另一件事情。

    函数或子例程——这个概念的实际名称可能取决于不同的语言。它也可能被叫做“过程”、“方法”或是“可返回单元”。它本质上是一个大程序中的一个小程序。一个函数可以被别的程序“调用”多次,运行程序员去有效的创建复杂的程序。

    数据输入——这是在几乎所有语言中都使用的一个宽泛的概念。它涉及到处理用户的输入以及存储这些数据。这些数据怎样收集则取决于程序的类型以及对于用户的可用的输入方式。它和关于显示在屏幕上还是打印在文件上的输出有着精密联系。

    这里写图片描述

    安装一些有必要的软件

    许多的编程语言都要求有被程序员设计来讲代码转换成机器能理解的语言的编译器。其他一些语言,比如Python,使用可以立即转换成程序而不需要编译。

    一些语言有自己的往往包含着代码编辑器、调试器和/或者翻译以及调试的IDEs(集成开发环境)。这些程序员在同一个地方去执行任何必要的功能。IDEs可能还包含着包含对象层次结构和目录的可视化界面。

    在网上有许多的代码编辑器可以用。这些程序都提供不同方式的语法高亮和提供其他开发人员友好的工具。(译者推荐用Emacs)

    创建你的第一个程序

    这里写图片描述

    每次只专注于一个概念

    几乎学习任何语言时被教的第一个程序就是“Hello World”。这是一个仅仅在屏幕上显示“Hello,World”的简单程序。这个程序教会初学者一些简单的语法来创建一个可以运作的基本程序,以及如何处理显示输出。通过改变文本,你还可以学习到这些基本数据是怎样被程序处理的。

    这里写图片描述

    通过在线示例的片段来学习

    在网上几乎每个编程语言都有数以千记得在线代码示例。用这些例子来学习不同部分如何与语言协同工作,以及各个部分之前的差别。用这些在不断示例中取得的碎片来创建你自己的程序。

    这里写图片描述

    检查语法

    语法就是一门语言被写得让编译器或解释权能够理解的方法。每种语言都有自己独特的语法,虽然有些元素可能在不同的语言中共享。学习语法对于学习怎样编程是非常重要的。在现实中,它只是更高级的概念赖以建立的基础。

    这里写图片描述

    试验性的更改

    对你的示例程序做些修改,然后测试结果。通过试验你可以学到什么有用、什么没用,这比多阅读一本书或指南在任何时候都要快得多。不要害怕破坏了你的程序,学习去修复错误是任何开发过程中最重要的一步,并且新的事物永远不可能在第一次就正确运行。

    这里写图片描述

    开始练习调试

    当你在编程时,你总会碰到bug。它们存在程序中,并且可能随时随地的出现在程序中的任何一个地方。漏洞可能会破坏程序,或者只是让程序不能编译/运行。捕捉和修复这些错误在软件开发周期中这是一个主要的过程,所以要早早地习惯于这么做。

    当你快要修改程序时,你可能会碰到它们不能运作的情况。想办法弄清楚,并且采取不同的方式来解决,这将会成为你作为一个程序员最宝贵的技能之一。

    (已经2点半了,明天再译。)

    这里写图片描述

    给所有代码添加注释

    几乎所有编程语言都有一个允许你包含未被解释器或编译器处理的文本的“注释”功能。也就允许了你可以留下短小但清晰的关于这段代码是用来做什么的人类语言的解释。这将不仅仅帮助你记住你的代码在这个大型程序是做什么的,在协作环境中因为它允许其他人也能够明白你的代码是做什么的,所以也是非常重要的做法。

    不断练习

    这里写图片描述

    每天都要敲代码

    花大量的时间对于掌握一门语言是最重要的。即便是像Python这样的简单语言,它可能也要画上一两天去了解它的基本语法,花大量的时间才能真正精通。想任何其他的技巧一样,练习是变得更加娴熟的关键。尽量每天都要花一些时间去敲代码,即便是在工作之后和晚餐之前的一小时。

    这里写图片描述

    给你的程序设定目标

    通过设定能够实现但又有挑战性的目标,你将能够开始解决问题并拿解决方案。尝试着去设想去一个基本的应用程序,比如一个计算器,然后想办法去做出来。使用你一直学习的语法和概念,然后将它们应用到实际中。

    这里写图片描述

    和别人交流并且阅读他人的程序

    有很多编程社区致力于特定的语言或学科。找到并参与到这些社区会为你的学习创造奇迹。你将会获得能够帮助你的学习过程的各式各样的示例代码和工具。通过阅读他人的程序代码不仅可以激励你,还可以帮助你回忆那些还没有掌握的概念。

    为你所选择的编程语言找到论坛或在线社区。确保自己是真正参与进去而不是不断地问问题。这些社区往往看着做协作和讨论的地方,而不仅仅是简单的提问-回答问题。请随时寻求帮助,但要准备好你的程序以及尝试用不同的途径。

    一旦你已经有了一些经验,可以参加一些编程的活动。这些活动是个人或团队争分夺秒的开发功能的程序,通常会围绕一个特定的主题。这些事情都很好玩并且是一个认识其他程序员的很好的方式。

    这里写图片描述

    挑战自己并保持乐趣

    去尝试着做一些你现在还不知道怎么做的事情。研究该怎样完成这个任务的方式,并且不断的将它们添加到你的程序中。一定要尽量避免勉强能运行的程序,你应该让各个方面都很完美。

    分享你的知识

    这里写图片描述

    参加一些培训课程

    许多的大学、社区学院、社区中心都提供了你可以参加的编程课程和工作室,而无需在学校注册。这里对于新手程序员是很有裨益的,因为你可以从其他有经验的程序员那里得到帮助,或者你也可以通过网络和其他地方的程序员一起交流。

    这里写图片描述

    买或者借一本书

    有成千上万种你所能想象出的所有语言的教学书籍。虽然你的知识不应该全然来自一本书,但它们会给你提供许多的参考,而且往往内涵了大量友好的示例。

    这里写图片描述

    学习数学和逻辑

    大多编程都涉及了基本的算术运算,但可能你想要学习更先进的概念。如果你想写出复杂的模拟或者算法级别程序,这将是非常重要的。对于大多数日常编程而言,你并不需要太多先进的数学知识。但学习逻辑,尤其是计算机逻辑,将能帮助你理解处理更先进程序的复杂问题的最好方式。

    这里写图片描述

    永远不要停止编程

    有一个流行的理论,成为一名专家至少需要10000小时的练习。虽然这个理论还处于辩论中,但它内含的原则永远是正确的:精通需要时间和奉献精神。不要指望一夜之间你就能学会一切,但如果你保持专注,并且不断的学习,很快你就会成为你的领域里的专家。

    这里写图片描述

    学习另一种编程语言

    虽然你可以仅仅精通一门语言,但许多的程序员通过学习多种语言来提高在其领域内成功的机会。它们的第二或者第三个语言往往和第一个语言相辅相成,这就能帮助他们去写出更加复杂和有趣的程序。一旦你掌握了你的第一个语言,你就有时间来学习第二个语言。

    你可能会发现第二个语言会学的比第一个更快。那是因为许多的核心概念对于多种语言都是相通的,尤其是如果这两个语言本身就是密切相关的。

    应用你的技能

    这里写图片描述

    参加一个四年的课程

    虽然这并非绝对需要,但在学院或大学的四年学习可以让你见识到各种不同的语言,你可以在网络上和专业人士或者其他学生交流。这种方法不一定适合所有人,并且很多成功的程序员都没有在一个耗时4年的机构学习。

    这里写图片描述

    创建自己的代码库

    当你在创建程序并且不断扩充你的知识时,确保你所有最好的程序都保存自己的代码库中。你可以把这个展示给招牌和面试官看你所做的工作。确保这包含了你所有时间的工作,并且确保你可以用这些程序给给另一家公司做任何工作。

    这里写图片描述

    做一些外包兼职工作

    对于程序员来说有非常大的自由职业市场,尤其是移动App开发。带上几个小的外包兼职去感受一番商业编程是如何运作的。通常境况下你可以用外包兼职的工作来帮助你建立代码库,并且这将有益于新的作品。

    这里写图片描述

    开发你自己的免费程序或商业软件

    你不必为一家工作来换取金钱。如果你有能力,完全可以独立开发软件并且让其免费,通过你自己的网站或者其他的市场。准备好提供为你的商业软件做技术支持,因为你的客户希望它们能完好的工作。

    免费软件是一种发布小程序和应用程序的流行方式。开发者不会收到任何款项,但会帮助你建立知名度以及让自己在社区中有一定声望。

    (译者注:翻译完毕,其实更多的是可以感受到中外的软件行业的诸多差异,同时也欢迎交流。)



    感谢您的访问,希望对您有所帮助。

    欢迎大家关注或收藏、评论或点赞。


    为使本文得到斧正和提问,转载请注明出处:
    http://blog.csdn.net/nomasp


    展开全文
  • 本人在校大学生,从大一下学期开始自学编程(JAVA)。到现在2018年7月2号也过了一年半的时间了。期间做过很多应用程序(PS:大多数都是做着玩的),比如做一个GUI聊天室(JAVA)、Android应用、Unity3D游戏(C#)、SSH整合...

    本人在校大学生,从大一下学期开始自学编程(JAVA)。到现在2018年7月2号也过了一年半的时间了。期间做过很多应用程序(PS:大多数都是做着玩的),比如做一个GUI聊天室(JAVA)、Android应用、Unity3D游戏(C#)、SSH整合开发一个WEB系统(完整版)等…虽然我这些都做过,但是…其中原理我却了解甚少,比如说JAVA的虚拟机的内存释放(垃圾回收器)、socket的连接过程(TCP三次握手以及四次挥手)、HTTP协议,这些东西我都不是很了解。

    看过一篇文章,具体内容忘记了。说的是遇到一个解决数据库连接太慢的问题,有三种人去解决。我只记得2种人,因为太有比较意义了。第一种是通过网络抓包工具分析得到瓶颈,然后把问题解决了。另一种人是对这种数据库的经验已经很丰富,然后改了配置文件把问题解决的。当然在这个问题中,后者可以迅速的把问题解决,但是如果换了一个数据库,也许第二种人就不知道该怎么解决问题了。(PS:本人就属于第二种人,应用知道很多,理论懂得甚少。)这其实是非常不利于自己以后的发展的,IT新技术出来的太快了。自己也学过很多什么听上去吊吊的技术,也搭建起来了,手机上可以访问,一切正常。但是在这个过程中遇到的BUG基本上都是通过百度查找“得来”的答案。所以自己想了挺多之后,也是拿起来底层理论开始进行系统性的学习。最后这本书的博客只作为随笔,说给自己听,若有“有缘人”看到且看且珍惜吧。


    编码的奥秘全书总结

    这本书很通俗易懂,跟看故事书一样。从手电筒到ASCII编码,从十进制到二进制再十六进制,从组合电路到8080芯片,从开关到控制台汇编程序。这一个历经过程写的算是淋漓尽致了。


    加法器

    • 加法器
      • 半加器(结果是xor,进位是and)
      • 全加器(考虑低位进位)

    半加器逻辑图如下:
    这里写图片描述
    全加器逻辑图如下:
    这里写图片描述

    用加法器实现减法的方式是通过原码、反码、补码实现。

    步骤是:

    1. 求减数的补码
    2. 被减数与第一步的结果相加
    3. 对第二步结果+1
    4. 减去最高位

    (PS:以上步骤针对于被减数大于减数的情况下)


    同步计数器

    D型边沿触发器和时钟实现同步计数器(CP)

    D型边沿触发器特性表(PS:上升沿有效,也就是上升沿的时候输出取反,现态为0,次态则为1)如下:
    这里写图片描述
    逻辑图如下:
    这里写图片描述
    波形图(PS:图片顺时针旋转90°就会得到0000->0001-…->1111的序列)如下:
    这里写图片描述


    RAM存储器

    得到8位锁存器后。这样就得到拥有4根地址线的16x1的RAM存储器了。

    D型触发器特性表:
    这里写图片描述
    D型触发器和写入信号实现8位锁存器:
    这里写图片描述
    通过3-8译码器选择写入数据,通过8-1选择器实现输出数据,得到8x1存储器:
    这里写图片描述
    再通过2-1译码器,得到16x1存储器
    这里写图片描述

    通过前面的实现我们可以得到一个方程:RAM阵列的存储容量=2的地址线的根数

    通过这个我们就可以用16根地址线跟8个数据输入得到一个64Kx8的RAM
    这里写图片描述

    至于为什么是易失的,是因为继电器的电源来自于给这个RAM提供电源的设备(我们在这里称这个设备为总电源吧)。读到后面会知道,现在的计算机的RAM不用继电器,而是采用别的技术来实现,不过还是易失的就对了。


    自动操作

    接下来是自动操作。实现原理很简单,我们用一个振荡器来驱动一个16位计数器,计数器输入到64Kx8的RAM从而读取到RAM中的数据,最后再通过加法器跟锁存器实现读取RAM自动进行加法运算的操作。

    不废话。上图:
    这里写图片描述
    发现灯泡亮的意义不大,改进这样就可以将锁存器的值通过在W=1时存入RAM中
    这里写图片描述

    到目前为止,我们一直“强调”着电路的实现。现在我们把这些实现当做细节忽略
    这里写图片描述

    这里,我们定义几个指令:

    1. Load 装载
    2. Add 相加
    3. Store 保存
    4. Halt 停止

    通过这4个指令就可以这一项操作,并且停止

    现在,我们将抽象的实现这个电路:
    这里写图片描述
    这个时候,我们只要把我们需要的操作存放到代码的RAM中即可实现自动操作

    我们理解完高字节与低字节以及加法减法的设计后,我们又抽象出一个电路:
    这里写图片描述
    第一个锁存器保存指令代码,第二个锁存器保存地址的高字节,第三个锁存器保存地址的低字节。第二和第三个锁存器的输出组成了数据RAM 阵列的16位地址。

    这个时候我们发现,用2个RAM太浪费了。可不可以只使用一个RAM呢?

    由于我们已经知道每条指令都占3个字节,所以是可以的,只要在原来电路的基础上做一点改进:
    这里写图片描述

    这样,我们就可以通过控制面板向RAM写入程序。此时PC计数器开始从程序入口地址开始计数,通过代码和地址锁存器的共同作用执行所编写的程序

    到此为止,我们已经做出一个通过 计数器(PC) 就可以让所编写的程序自动执行。不过我们发现:我们该如何规定程序入口呢?再是当我们计算机开机的时候PC是从什么位置开始呢?所以,我们引入一个 jump指令,而PC从什么位置开始我们先不做回答(因为与本课程无关,答案是从BIOS的ROM开始执行)。

    因为我们增加了一个jump指令,所以需要改进的是PC计数器的一个取值。如下:
    这里写图片描述
    通过这种设计,我们就可以更改PC的值。让程序自动执行。(PC是一个振荡器,这与RAM的W输入不同)

    到这里,我们的一个小型CPU已经被设计出来,而且这个CPU还与内存有着非常紧密的联系


    从算盘到芯片

    一个发展过程,不做阐述。


    两种典型的微处理器

    8080和6800PC机。位数不同,一个8位,一个16位。我们知道8位可以通过转换实现16位、32位、64位以及更高的的位数的处理。通过高低位字节实现。

    8080是第三代微型处理器。8位。
    6800是第三代微型处理器。16位。

    由于每个不同的处理器都有对应不同的指令集,所以不做阐述。我们需要学习的是8086PC的指令集,一般汇编语言的教程都是用8086微型处理器,也是16位


    ASCII码和字符映射

    ASCII 码是 7位 编码。
    Unicode 采用 16位 编码,每一个字符需要 2个 字节。

    这里是有历史原因的。因为大多数国家用 7位 编码都不足以存储信息。所以每个国家都有自己的编码集

    这样会导致一个问题:在一个txt文本中既写中文又写阿拉伯文,而txt的编码集设置为 GB2312 中国编码集。保存后,读取时会发现阿拉伯文变成乱码

    于是Unicode出来了,将所有国家语言统一起来。此后又在Unicode的基础上为了提高效率而提出 UTF-8 的标准。


    总线连接

    总线是提供给计算机中每块电路板的数字信号的集合,这些信号可以分为 4类:

    • 地址信号。这些信号由微处理器提供,常用来寻址RAM单元,也可用来寻址连接到计算机上的其他部件。
    • 数据输出信号。也由微处理器提供,用来写入数据到RAM或其他设备。要仔细推敲输入(input)和输出(output)的含义。数据输出信号是从微处理器输出,变成RAM和其他设备的数据输入信号。
    • 数据输入信号。是由计算机的其余部分提供,由微处理器读入的信号。数据输入信号通常来自于RAM的输出,也即表示微处理器读入存储器内容。但是其他部件也提供数据输入信号给处理器。
    • 控制信号。由各种各样的信号组成,通常与计算机的特定处理器的控制信号一致。控制信号可来自于微处理器或从其他部件传送到微处理器。例如,微处理器可用一个控制信号来指示它要写一些数据到某一存储器地址。

    这里的总线,并不是指地址总线、数据总线、控制总线,从数据输入输出的作用就可以看出。因为数据输入可以来自于其他设备(如键盘,而不是单一从的RAM获取输入),会响应中断信号


    从操作系统开始到图形革命的内容自行理解吧~

    展开全文
  • 适合 C++ 新手学习的开源项目——在 GitHub 学编程

    万次阅读 多人点赞 2020-11-05 08:15:00
    作者:HelloGitHub-小鱼干俗话说:万事开头难,学习编程也是一样。在 HelloGitHub 的群里,经常遇到有小伙伴询问编程语言如何入门方面的问题,如:我要学习某一门编程语言,...

    作者:HelloGitHub-小鱼干

    俗话说:万事开头难,学习编程也是一样。在 HelloGitHub 的群里,经常遇到有小伙伴询问编程语言如何入门方面的问题,如:

    • 我要学习某一门编程语言,有什么开源项目可以推荐吗?

    • 我是某编程语言的新手,有什么练手的项目推荐吗?

    • 等等

    See,这就是本系列文章的由来,我们希望学习各类编程语言的同学们,读(Mark)完我们的入门系列,可以找到学习的方向、系统地学习某一门语言,然后做个简单的小玩意,不只是 Hello World 。

    《GitHub 上适合编程入门的项目》系列,共计 5 篇文章:

    1. C++ 篇

    2. Python 篇

    3. Go 篇

    4. Java 篇

    5. JavaScript 篇

    以下为 C++ 篇 的内容。不管哪门编程语言,基础都是很重要的。所以我们要先从基本的语法和基础知识学习学起,一步步掌握这门语言。

    一、基础

    1.1 一个项目入门 C++ 足以:CPlusPlusThings

    CPlusPlusThings 是国人开源一个 C++ 学习项目。它系统地将 C++ 学习分为了【基础进阶】、【实战系列】、【C++2.0 新特性】、【设计模式】和【STL 源码剖析】、【并发编程】、【C++ 惯用法】、【学习课程】、【工具】、【拓展】。

    作为一个全面系统的 C++ 学习项目,CPlusPlusThings 是优秀的,它合理地安排了 10 Days 的实战部分,在实战中了解语法和函数用法,唯一不足的是,在注释部分有些不尽人意,对部分新手程序员并不是很友好。【基础进阶】部分内容:

    • const 那些事

    • static 那些事

    • decltype 那些事

    • 引用与指针那些事

    • 宏那些事

    GitHub 地址→https://github.com/Light-City/CPlusPlusThings

    1.2 基础部分之算法:C-Plus-Plus

    C-Plus-Plus 是收录用 C++ 实现的各种算法的集合,并按照 MIT 许可协议进行授权。这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等各种主题。除外,你可能会发现针对同一目标的多个实现使用不同的算法策略和优化。

    GitHub 地址→https://github.com/TheAlgorithms/C-Plus-Plus

    二、进阶

    2.1 现代 C++:modern-cpp-tutorial

    modern-cpp-tutorial 是现代 C++ 教程,它的目的是提供关于现代 C++(2020 年前)的相关特性的全面介绍。除了介绍了代码之外,它还尽可能简单地介绍了其技术需求的历史背景,这对理解为什么会出现这些特性提供了很大的帮助。

    GitHub 地址→https://github.com/changkun/modern-cpp-tutorial

    2.2 进阶指南:CppTemplateTutorial

    CppTemplateTutorial 为中文的 C++ Template 的教学指南。与知名书籍 C++ Templates 不同,该系列教程将 C++ Templates 作为一门图灵完备的语言来讲授,以求帮助读者对 Meta-Programming 融会贯通。本项目写作初衷,就是通过 “编程语言” 的视角,介绍一个简单、清晰的 “模板语言”。我会尽可能地将模板的诸多要素连串起来,用一些简单的例子帮助读者学习这门 “语言”,让读者在编写、阅读模板代码的时候,能像 if(exp) { dosomething(); } 一样的信手拈来,让 “模板元编程” 技术成为读者牢固掌握、可举一反三的有用技能。

    适合熟悉 C++ 的基本语法、使用过 STL、熟悉一些常用的算法,以及递归等程序设计方法的 C++ 学习者阅读。虽然项目章节文章写的深入浅出,不过唯一的遗憾是尚未完成所有章节内容。进度如下:

    • 0.前言

    • 1.Template 的基本语法

    • 2.模板元编程基础

    • 3.深入理解特化与偏特化

    • 4.元编程下的数据结构与算法 (尚未开始)

    • 5.模板的进阶技巧(尚未开始)

    • 6.模板的威力:从 foreach, transform 到 Linq(尚未开始)

    • 7.结语:讨论有益,争端无用(尚未开始)

    GitHub 地址→https://github.com/wuye9036/CppTemplateTutorial

    三、动手实战

    3.1 来实践一下:MyTinySTL

    当你学习完 C++ 的“书本”知识后,是不是有些手痒了呢?MyTinySTL 这个注释详细、实践夯实基础的项目便是你 C++ 学习之旅的下一站。作为新手练习用途,MyTinySTL 的作者 Alinshans 用 C++11 重新复写了一个小型 STL(容器库+算法库)。代码结构清晰规范、包含中文文档与注释,并且自带一个简单的测试框架,适合 C++ 新手来实践一番。

    GitHub 地址→https://github.com/Alinshans/MyTinySTL

    3.2 重温同年俄罗斯方块:Tinytetris

    Tinytetris 是一个用 C++ 编写的终端版俄罗斯方块游戏。它提供了两个版本的源码,分为注释版和库版,注释较多易于理解和学习。

    GitHub 地址→https://github.com/taylorconor/tinytetris

    3.3 学习下大佬们的代码:calculator

    微软开源的 Windows 系统预装的计算器工具。该工具提供标准、科学、程序员计算器的功能,以及各种度量单位和货币之间的转换功能。快来看看微软工程师编写的代码吧!学习大厂的编码规范、项目结构之类的,提高阅读源码的能力。英文的项目且没有讲解部分,需要通过阅读源码学习,难度较高。

    GitHub 地址→https://github.com/microsoft/calculator

    最后

    HelloGitHub 想让更多人爱上编程、开源,所以一直在尝试、摸索如何可以帮助到更多的人。我想试试 HelloGitHub 能不能组建一个大学生开源俱乐部你们的编程路才刚开始 HG 想陪你们走一段。

    如果你是在校大学生或研究生热爱编程、开源,喜欢讨论和学习技术相关的内容,但是周围没有和你乐趣相投的小伙伴?那么来 HelloGitHub 的大学生开源俱乐部吧!加微信号:HelloGitHub (备注:学校和专业)不备注是不会通过的

    关注公众号第一时间收到更新

    「阅读原文」 发现更多 C++ 项目

    展开全文
  • Linux C 编程一站式学习.pdf

    千次下载 热门讨论 2010-11-24 01:27:27
    1. 程序和编程语言 2. 自然语言形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. 简单函数 1. 数学函数 2. 自定义...
  • C# Socket编程(3)编码和解码

    千次阅读 2013-03-25 15:16:53
    但是字符信息并不能够直接通过网络传输,这些字符集必须先转换成一个字节序列后才能够在网络中传输,于是这里就产生了编码和解码的概念: 将字符序列转换为字节序列的过程称之为:编码编码的字节序列转换为...
  • 我是如何学习编程

    万次阅读 多人点赞 2019-04-15 22:58:25
    我是如何学习编程
  • 字体编码学习-关键字:USC,...UCSISO10646 ISO10646定义了通用字符集(Universal Character Set,UCS).UCS是国际标准编码,包含了全球所有字符。UCS使用31bit进行编码。现在只分配了前65534个码位,这个16位的子集称
  • 每个人都应该学习编程吗?

    千次阅读 热门讨论 2014-09-21 22:13:39
    每个人都应该学习编程吗?...每个行业都需要革新进化才能蓬勃发展,因此,整合复杂的计算解决方案追求高质量的理念、高效的设备一样必要。为了完成任务,我们需要将基本的编程知识转化为自己的能力。 编
  • 原文:Six programming...译者注:本文介绍了六种编程范式,提到了不少小众语言,作者希望借此让大家更多的了解一些非主流的编程范式,进而改变对编程的看法。以下为译文:时不时地,我会发现一些编程语言所做的一些...
  • 2019年你应该学习哪种编程语言?

    万次阅读 多人点赞 2019-01-19 12:37:34
    ▲点击上方"什么技术值得",关注持续获得知识无论您是专业开发人员还是初学者,对学习新的编程语言总是一个好主意。当然,并不是每个专业或有抱负的开发人员都必须绝对学习的单一...
  • 学习编码不仅需要熟悉语法,还要求有一定的逻辑分析能力。每种编程语言都有各自的优缺点,但它们的基础这块在一定程度上都是一样的。我们知道,学习编程语言最好的方法是上手编码,但是如果你厌倦了传统的编码方法...
  • 21个免费学习编程的网站

    千次阅读 2019-04-16 10:36:00
    精选的网站列表,用于学习编码编程,Java,Python,SQL,GitRuby on Rails。 您好,如果您是一个自己学习编程和编码并寻找一些很棒资源的人,那么您来对地方了。 在本文中,我将分享21个网站,您可以在舒适的...
  • 当你编码时你在做什么:谈编程的本质(一)状态机

    千次阅读 多人点赞 2017-01-18 22:22:47
    当你编码时你在做什么:谈编程的本质(一)状态机1.State Machine这学期学习了两门有意思的课,Theory of ComputationDistributed System,一低一高完全两个层次上的分支,却意外地发现两者在理论方面的重叠——那...
  • 如何把一门编程语言学习好?

    千次阅读 多人点赞 2017-03-12 14:20:39
    现在刚好点,接下来要准备大腾讯的2017实习生招聘,虽然觉得可以进入的机会可能比较渺茫,但人要是没有些梦想的话,岂不是咸鱼没什么区别?所以觉得还是要好好准备一下,博客这里可能会冷落一阵子了,3.28号如果...
  • 编程入门学习的困惑

    千次阅读 2019-07-13 11:33:24
    学习编程这段时间以来,接触了不少一起学习的小伙伴,首先我自己经常会问XXX 语言怎么入门、如何学好编程语言等问题。这里我总结了我作为初学者的一些困惑与大家分享 1、如何入门? 在学习编程第一天,大部分人会想...
  • Kingofarks50 Points of View About Learning C++ And ProgrammingK ][ N G of A R K™关于学习C++和编程的50个观点2003修订版Revision 2.0by K ][ N G of A R K ™前 言Long long time ago, on a to
  • 在线学习编程网站收集

    万次阅读 多人点赞 2013-06-16 14:38:42
    下面收集一些个人觉得比较好的在线学习编程网站。当然用google搜索下,会有很多推荐。   update 2015-11-11 收集到几个做题网站 http://www.codewars.com/ Codewars http://codeforces.com/  codeforces ...
  • 大学四年,我是如何学习编程的?

    千次阅读 多人点赞 2019-12-04 23:40:27
    大学四年,我专业是计算机专业...今天我分享下,如何在学校里免费技术,沉淀一些编程技能。 编程书籍 这是我大学看过的书籍。 设计模式 这里简单介绍一下: 设计模式是软件设计中常见问题的一般可重复解决方...
  • 文章目录 简介 使用Properties读取文件 乱码初现 字符集文件编码 解决Properties中的乱码 真.终极解决办法 总结 简介 小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现了一个无法解决的问题。把大象装...
  • 机器人学编程简介~2019~

    万次阅读 2019-04-22 21:21:34
    参考链接: https://blog.robotiq.com/what-is-the-best-programming-language-for-robotics ... 先来看一组问题: 什么是机器人? 机器人是一种机器,其传感器机械组件...
  • python3中网络编程编码问题

    千次阅读 2018-04-22 16:54:37
    在学习python3网络编程的时候,总是出现“a bytes-like object is required,not ‘str’ ”这种提示,很苦恼,网上也百度了一波,可是还是没有得到解决,便看了看有关编码的知识,可是看了之后还是报同样的问题,...
  • 不花钱计算机及编程 (预备篇) --概述:如何学习计算机及编程 个人是98年进入大学,开始学习计算机的,当时对计算机等于零了解,只有初中的时候在镇上一个同学家见过,当时放卡拉OK听,别的也不...
  • 对于任何一个Java开发人员来说,必须学会面向对象的设计原则各种设计模式的知识。但有一些关于面向对象设计原则、设计模式最佳实践的书籍,只有少数几本书能做到真正在讲解这方面内容。 设计原则设计模式,...
  • 近给大家讲了一堂关于初学者如何从零基础到就业正确的学习步骤,在课堂中我提过两点困难是初学者最大的问题,其中一个问题就是了后面忘了前面的问题,还有一个最重要的问题就是编程思维。今天主要给大家讲一下初学...
  • 新手程序员必的代码编程技巧

    千次阅读 2020-10-12 15:57:51
     软件工作应该成为一项技术艺术融合的高智力活动,而项目经理应该是一个高度理解质量、范围进度客观规律的明白人,“高效工作,快乐生活”才应该是程序员的座右铭。  可现实情况却是,团队在一边超负荷的做着...
  • 是什么让C#成为最值得学习的编程语言

    万次阅读 多人点赞 2017-04-18 10:49:06
    是什么让C#成为最值得学习的编程语言,阅读完本文,你就知道。
  • ~编程不需要天赋激情

    千次阅读 2016-06-22 12:22:12
    如果你缺少这两个因素之一,那么你要么是一个骗子,要么不会走得太远,不论是哪种,其实都是因为你不适合编程的缘故。这种根深蒂固的成见不仅是完全错误的,而且还是有害的——但是许多成功的程序员都赞同这个...
  • ascii编码,UnicodeUTF-8之间的关系1,ascii编码,这是一种单字节编码,8位,一个char的长度。最多可以存放255中不同的字符。对于早期的计算机系统来说,对于应付英文字符一些符号绰绰有余了。 事实上基本的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,005
精华内容 58,002
关键字:

学编码和编程一样吗