大哥 大姐 求一篇 学计算机新技术的感想作文 我们听的是演讲 == 800字左右 拜托 急用啊 .......谢谢了

大哥 大姐 求一篇 学计算机新技术的感想作文 我们听的是演讲 == 800字左右 拜托 急用啊 .......谢谢了,第1张

1.开场

自我介绍, 简单讲述我大学的学习的历程,成果和感想。(1分钟)

我一直都感慨本年级许多同学在大一时因为缺乏好指引,在一开始就对编程很害怕,对计算机的学习没有开好头,动手能力长期跟不上,空会理论,不会实践,一直拖累到大四,最终选择忍痛考研或者抱怨找工作难。我也帮助过不少在这方面比较弱的同学,但是总是因为基础没打好导致难以提高。我也一直希望学校能在大一的时候就让同学们明白学习的重要性,打好扎实的专业基础。现在终于有一次这样的机会站在这里,为指引大家如何在大学专业技术学习的道路上开好头做点贡献。

今天我将结合我自身的经历和我对计算机的理解,我对编程的感悟,我对大学学习的认识,给大家做报告。

首先问三个问题:

1) qq聊天软件是用什么语言写的(第二天要换个问题)

答对的演讲结束后留下来,我要亲自给他传授宝贵经验,没人答的话,很遗憾

2) 谁玩电脑游戏比较牛

恩,人很多,大家很踊跃,很好

展示下我写的人工智能黑白棋游戏,声明真正的编程高手基本从来不玩游戏

(结合大四同学长期沉迷游戏最后找不到工作的例子,说明一个严肃的问题,只会玩游戏没有用,会做游戏才牛,鼓励大家努力学习,让会玩游戏的同学也热爱编程,最后也能自己写游戏)

请大家记住:只会玩游戏没有用,会做游戏才牛

3) 有没有人对计算机特别感兴趣 (为什么感兴趣)

如果有兴趣,对学习计算机有巨大的帮助

兴趣是最好的老师,鼓励他们,勉励其他人,兴趣是可以培养的,要学会培养兴趣

2.概述

计算机"科学"与"技术" 包含两个层面

"科学" 指计算机硬件、软件与应用的理论知识 理论的学习

"技术" 指软件开发、工程实践等技能与方法能力的培养

我主要讲的是如何学习技术(计算机技术)

讲之前 澄清一个观点 计算机技术 不等于 编程技术

编程只是一个工具,编程没学好不代表你技术就学不好

计算机技术应该是与计算机软件、硬件和网络三个部分相关的各种科技成果和应用的综合,包括了多媒体,数据库, *** 作系统,嵌入式系统,计算机安全,计算机网络,计算机管理和维护,计算机应用,人工智能,模式识别,管理信息系统等,在我们生活的方方面面计算机技术几乎无处不在。

(举几个例子)在现在社会,它几乎与我们的生活息息相关。

(大学和高中的学习方式的区别)(学好技术的重要性)

在大学,学习的方式与高中或小学是有很大的区别的,大学更大,大学更自由,不再是完全跟着老师,不再是只要吃稿此透了老师教授的内容就万事大吉了,从我这一届的情况看,许多同学特别是女生在大学还沿袭着高中的学习方式,勤奋刻苦,天天自习,非常认真,上课笔记做得秘密麻麻,把理论学得非常扎实,但是却严重地忽略了实践能力的培养,理论考试分数很高,但课程设计做不出东西来,显然这种学习方式是不对的,这和高中的偏科又有什么本质区别呢。

我觉得理论的学习和技术的学习是同等重要的,二者都不应该轻视,没有侧重点是不可能的,至于如何侧重,如何在二者之间找到平衡点就取决于你自己的人生目标了。如果你喜欢研究理论,以后想继续读研深造可以稍微偏向理论,把理论基础打得扎实一些,毕业以后可以留校任教或到科研院所去发展。如果你想走技术路线,那么你就可以稍稍偏向技术,在不落下理论学习的情况下,把技术学好学精,毕业以后可以去IT企业发展,也可以自己创业,有了一身技术不怕键辩迅没饭吃。切莫完全忽视技术最后变成书呆子或完全不顾理论最后只是个代码搬运工。

大家每个人,从现在开始就要下决心学好技术,那么,如何学好技术呢。

3.如何学好技术

3.1制定好的学习计划

3.1.1大一大二:打好基础

3.1.1.1计算机方面的基本技能的学习

包括计算机众多的应用技术的学习 和 常见的硬件维护

(大家应该尽量多多掌握计算机方面的基本技能,如word excel ppt access* photoshop* flash* dreamveaver* 结合我的经历讲讲,我大一在自己没有电脑的情况下把这些基本全学了 举一个考研的同学不会在excel里找自己的名字的例子,如灶没果这些最基本的技能都不会,只能说计算机还没入门)大二有电脑之后,终于有机会整自己的电脑了,要学习常见的常见的硬件维护(系统崩溃了怎么办,如何安装 *** 作系统,如何分区等)

3.1.1.2专业理论基础和编程基础的学习

技术是将理论运用到实践中去,不能轻视理论,没有理论何来应用。计算机"科学"与"技术" 中的"科学"和"技术"应该是相互依赖和促进的。

先学好《高级语言程序设计》《数据结构》等专业课,理论基础扎实了,学应用性技术就更容易了

编程基础:学精C++(为什么),可以考虑过渡到 java 或 C# (最好只学一个,为什么)

(编程的学习会在后面再详细讲)

3.1.1.3珍惜这两年大学自由学习的黄金时间

(曾经和一家公司的经理开玩笑,总经理感慨的说现在在大学里找一个又能力的学生来帮忙做项目真是很难啊,我说是呀,大学四年,大一的刚进校还在打基础没法做,大二的还刚起步没足够的能力做,大三的课程会很紧没时间做,大四的找工作的找工作去了,考研的考研去了,没人做了),大学四年,实则三年,希望大家不要把最宝贵的时间荒废在游戏和娱乐上

3.1.2大三:深入学习,确定方向(技术方向,职业规划)+多多实践

到了大三,各种专业课会非常多,包括很重要的 *** 作系统,汇编,组成原理,编译原理,数据库,计算机网络,软件工程等等,大家将深入学习计算机的各大核心课程。这时大家的基础打得也差不多了,可以选择一门自己比较感兴趣的技术并确定自己的技术的一个方向,比如选择j2ee, .NET,WEB技术,数据库技术,嵌入式,linux内核开发等等。当然也会有非常丰富多彩的专业选修课可以选择学习。这段时间大家可以利用课程设计的机会好好锻炼自己。

3.1.3大四:实践和进步

大四,如果不打算考研的同学,工作有了着落之后,可以试着做项目,大四基本没什么课,相对轻松,这段时间是获得经验,银子和巨大的进步黄金时期。

3.2重视专业课的学习

要把数据结构、算法、数据库、 *** 作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好

除非你足够牛,请务必认真听专业课,有些课像《数据结构》,《编译原理》,《组成原理》,《 *** 作系统》等等,这种课老师讲一分钟能让你明白的内容,你自己看要看好几个月

3.3培养好的思维能力

数学是锻炼是思维的最好的东西了,他是你思考问题的最得力的工具,他体现着你的思想,在编程中会思考才能编出好的程序。

此外还要注重离散数学,数值分析,线性代数,数字逻辑等等课程的学习,他们对培养好的思维能力大有裨益

3.4激励创新意识

创新太重要了,不管在哪个学科都重要,计算机同样需要

3.5培养独立分析问题和解决问题的能力

遇到问题,要先学会独立思考,不能凡事依赖他人,尽量自己解决,在独立解决问题过程中能获得更大的进步,实在不能解决再请教别人也不迟

3.6培养自学能力和快速获取知识的能力

自学能力之重要(大学和高中的学习方式的区别)

可以说高中是靠老师,大学是靠自己,要做到严格自律,自我约束,必须要学会自学

学习的过程也是学会学习的过程

要充分利用图书馆和网络上的丰富学习资源,要培养计算机新知识,新技术方面的自学习能力,要学会如何通过网络,书籍,文献,独立地快速获取自己需要的知识和信息

3.7培养团队协作精神

在一个大型项目中,往往要求各种参与者密切配合才能取得成功。大家要从现在就开始注重团队协作精神的培养,要学会与人沟通,善于表达,要注意提高自己的综合素质,成为综合型人才。

3.8学好英语

包括现在的大学英语和日后的专业英语。

也许有人会问,英语和技术有什么大的关系吗。大家是否知道,计算机的发展飞速,国际上新技术不断涌现,如果今天国外出现了一门新的技术,或者国外某本技术书籍出了新版本,相关资料的中文的翻译不知道要等到什么猴年马月才会出来,现在的许多出版也有了越来越多的英文原版书。

大家要学好英语,培养阅读专业外语资料的能力,开始会看不懂,看多了自然熟练了。

(讲下四六级,四级最好一次就过,六级在大二下结束前最好过)

3.9适时关注新技术

了解学科发展动态,跟上时代步法

3.10勤学苦练,持之以恒

学好技术不是一蹴而就的,要长期坚持。

4.无

5.无

6.关于编程的学习

6.1为什么要学习编程

编程是软件开发的基础,学习计算机,只会编程是千万不行的,但是开发软件,不会编程是万万不行的

(结合本年级的情况将一下现状,学习的重要性等)

6.2编程真的那么难学吗

(讲讲编程的苦与乐)

编程真的那么可怕,那么枯燥,那么没意思吗?假如真是这样,为什么世界上还有那么多优秀的人乐此不疲。

其实编程并不可怕,可怕的是你的心态。

编程固然很苦,编程时长时间对着屏幕,对身体不好,而且,经常因为考虑不周,会遇到各种各样的错误和麻烦,初学者处处容易受挫。

但是其实编程是很有趣的,编程中充满着无穷的快乐

首先,你通过编程得到了想要的成果的过程是一种创造的快乐

(编出了有用的东西的那一刻会有一股美好的成就感)

其次,你开发了有用的软件可以方便自己或他人,方便自己,是一种享受的快乐,方便他人,是一种奉献的快乐

再次,假如你开发的软件得到了用户的认可或好评,会有一种欣慰和满足感

还有,你可以根据自己的意愿写你想要的东西,经过自己的努力亲自实现你心中的愿望

然后,编程也是一个挑战自我的过程,遇到困难想办法解决的过程是思考的过程,思维能得到锻炼

最后,在代码中有一种看不见的美,就像诗一样,美景全是你的,你可以随心所欲

编程真的非常有趣,它不仅满足了我们内心深处进行创造的渴望,让人头脑变得灵活,而且还愉悦了每个人内在的情感。

6.3学好编程的建议

6.3.1请热爱编程

如果想成为编程牛人的话,请热爱编程。有兴趣是最好了,没兴趣也没关系,可以慢慢培养,当你感受到了编程的乐趣的时候你会爱上它。

6.3.2不要畏难

很多初学者往往都在遇到许多困难,遭受多次挫折后,自信心受到打击从而对编程丧失兴趣

这些困难每个人都会遇到,我在初学编程时也遇到过,关键是看你用什么心态对待,是想办法解决困难还是选择逃避。很多问题其实是有很多解决方法的。譬如看书,遇到看不懂的部分,可以暂时跳过,先往后看,看完后面的之后,再回头看前面跳过的部分往往会有一种豁然开朗的感觉。再比如,编程调试时死活找不到错误会很郁闷,这个时候很多同学会束手无策,其实只要在程序不同的地方加上输出语句,然后运行看有哪些输出,这样一步步缩小错误的范围从而确定错误发生的位置。等等。。。

不要畏惧困难,要用你的智慧战胜它。

6.3.3多实践,多交流

学习编程的秘诀是:编程,编程,再编程;(讲讲如何动手实践)

在学校的实验室就算你做错一万次程序都不会有人骂你,如果在公司你试试看!所以多去实验室上机,现在错得多了,毕业后就错得少了。多实践,多从失败中吸取教训,积累经验。要勤奋,三天打鱼两天晒网是学不好的,学会了的东西一段时间不用就容易忘记,实践得越多才能记得越牢。

现在大家是大一,可能有人会说没有电脑不方便,其实实验室不是只有在老师安排的实验时间才可以去的,它是是面向计算机专业的学生免费开放的,大家有时间就去实验机房练习,只要拿着学生证,或者干脆直接跟那个阿姨说你是计算机的就行了。航海楼7楼的机房和图书馆电子阅览室也是可以的。我大一的时候甚至还到阳光网吧编程呢。

到大二大三的时候课程设计就会多起来,大家一定要自己动手做,不要去网上搜一个就完事了。

与人交流,分享自己编程中的乐趣和经验,共同进步。

6.3.4多阅读书籍和代码

编程不是非要在电脑上才能学的,阅读书籍和书中的代码也是一种学习方式,自己还可以尝试着改进那些代码,最后可以把自己的成果拿到电脑上调试

千万不要忽视书后面的习题

6.3.5养成良好习惯

细节很重要

要细心,沉下心来编程,戒骄戒躁

养成良好习惯,注重编程风格,尽量写代码注释,把写过的代码保留下来,以后会有用

6.3.6善于思考

遇到问题动脑筋解决

6.3.7注重基础

打好编程基础,除了熟悉基本的语法之外,要深刻理解指针,引用,面向过程思想,类,模板,标准库,接口,继承机制,面向对象思想等等,课后习题尽量全做一下

刚才说了,有精力的可以学学 photoshop图像处理, flash动画制作,3dmax或maya三维建模,dreamveaver网页设计,但是不要因为他们花费过多的时间而影响了你基础的学习,那些都是些应用技术,你学会了更好,不会也没什么丢人的,基础打好了,以后学啥都轻松。

在基础没打好的情况下,不要觉得你编的程序只能在黑白的DOS窗口了运行就去学VC做漂亮的窗口,3d程序很有意思就去看OpenGL或DirectX,那些都属于高级应用,没有基础学起来会很吃力。

基础要扎实,不要觉得C#中没有指针就扔掉C++, 不要今天看C#,明天搞java

要有明确的方向,计算机技术的发展实在太快,新技术不断涌现,了解一下就可以了,不要随波逐流,要沉得住气

6.3.8选好开发环境

选择一种适当的开发环境并熟悉它就可以了,不要今天摆弄Visual Studio,明天钻研Eclipse,后天来个netbeans,在工具的使用的学习上白白浪费时间。

6.3.9选好编程语言

我在选择语言时,走过一些弯路,浪费了一些精力,我在这里选出一些主流编程语言,对语言特性与环境稍作介绍,希望可以帮助大家,让大家尽早了解与选择,少走弯路

C(多用在性能要求较高的场合,如 *** 作系统,嵌入式等)

C++(应用最广泛、成熟,强大而复杂,兼有性能高和易于构建大型程序的优点,基本是衡量一个国家软件产业发达程度的核心基础)

Java(著名的SUN公司推出的,面向对象、安全、跨平台、强大稳健,需要java虚拟机的支持)

C#(微软推出的完全面向对象,运行在 .NET Framework 环境中新兴、易学、强大语言)

Python(新兴的面向对象脚本语言,跨平台,语法清新易于使用,代码优美得像数学一样,非常容易学)

PHP (目前最流行、强大、稳健的动态网站开发脚本语言,语法类似C++)

ActionScript (Flash的编程脚本,最新版支持面向对象,能基于Flex开发RIA应用)

除此之外,还有vb, vb.net, asp.net, jsp, asp, ruby, Javascript等

这么多五花八门的语言,大家可能都会觉得眼花缭乱了。

其实各种语言之间只是语法不同,编程思想都是相通的,学精一门,了解多门是上策。

" 程序=算法+数据结构 " 其中并没有编程语言,说明语言只是程序员与计算机的编译器沟通的一种工具,程序员用某种语言来表达程序的逻辑结构,计算机中相应的编译器或解释器理解这种语言,编译得到二进制程序或者直接解释执行。

以上这些语言我在大学前三年全部学过了,有的学得很深,有的很浅。因为人的精力毕竟有限,很多语言学过了之后根本就很少用到,几乎是白学了,现在我深深的体会到,

语言并不是学得越多越好,与其泛而不精不如有针对性的先精通一门,其他的触类旁通。

就大家现在的情况,希望大家把当前正在学习的C++学好,学到一定程度的时候,可以继续深入的研究C++的各种库,也可以从上面选择感兴趣的新语言学习,如果把C++基础打好了,后面的学习就会容易得多。

最流行的语言不一定是最好的语言,用的人最多的语言也不一定是最好的语言。

请大家记住,没有最好的语言,只有最适合某个领域的语言,在不同的环境下选择不同的语言就可以了。

6.3.10重视数据结构和算法

理论上,计算机的任何编程语言都有可能会被淘汰,随着时间的推移和计算机软硬件的飞速发展,不断会有新的语言产生和和旧的语言过时,但不会过时的是数据结构和优秀的算法。真正的高手应该是善于设计优秀的数据结构和算法的,应该是具有独立分析和解决问题的能力并利用计算机程序来实现的,他的思想应该是超脱语言、在更高处的一种升华。

如果某一天,你深切的体会到,真正重要的不是什么语言而是思想的时候,说明你可以出师了。

本文整理自Clojure语言发明人Rich Hickey发表于2011年的一次题为《Simple Made Easy》的演讲,该演讲虽然年代久远,但一直备受推崇,也曾推荐为每个程序员都要看的埋衫十大技术演讲之一,可以说是相当经典。

在这次演讲中,Rich Hickey从辨析简单和容易的词义开始,清晰地指明了它们的辩证关系,以及复杂性的根源,同时也给出了如何构造简单系统的方法,以及我们使用的语言中,哪些是可以用来帮助我弯核腔们构造简单系统的工件,而哪些又蕴含着复杂性。整个演讲风趣幽默,又不乏金句,虽然并不一定所有的观点都正确,但足以带给我们很多启示,值得反复观看,每次可能会有不同的收获。

由于文章篇幅较多,又有很多晦涩难懂的地方,赶时间的同学可以看看这些核心观点:

如果我们需要建立一个好系统,那么应该建立的是一个简单的系统,而这一点通常不被我们重视。

研究单词的起源很有意思,可以让我们了解它的本义,从而更精确地使用它。

Simple(简单)这个单词由sim和plex两个词根组成,表示一次折叠。它的反义词Comlex(复杂)则表示多次折叠、编织在一起。

常常与Simple(简单)混淆的一个词是Easy(容易)。而Easy首先关联到古法语单词aise,又(被Rich Hickey强行)追溯到拉丁语单词adjacens,找到它的本义为“躺在...附近”。而Easy的反义词为Hard(艰难),词义并不是“躺的很远”,而是“曲折”。

那么,什么是简单的东西呢?

简单的东西应该只有一个角色,它们只完成一项任务,或是只有一个目标,只关乎一个概念,一个维度,比如安全性。

当你在寻找简单的东西时,你希望它 专注于某一领域 ,而不是把东西组合在一起。

但是我们也不能机械地执着于“一个”,简单并不意味着只有其中之一,并不意味着接口只有一个 *** 作时才称得上简单。 简单最重要的特性是没有交织,而不是只有一件事。

简单还有一个重要特性,那就是客观性,和具体人没有多大关系,这是和容易显著的区别。

再来看容易。

上面说了,容易的本义是“就在附近”,意味着物理上很接近,唾手可得,手到擒来,易如反掌等等。

容易也可以引申为“与我们的理解接近”,或者就是我们已经拥有的技能,就是对我们来说很熟悉。

区分简单和容易还有一个关键点,那就是 容易是相对的 ,拉小提琴对于某些人来说很容易,而对于大多数人来说很难。所以, 容易是一个相对术语,是主观的 。

对于软件,首先要区分制品和构造。

我们只能把可靠性寄希望于我们能够理解的东西上。 而这通常是需要做出权衡的,因为太注重扩展性和动态化的东西可氏改能在理解上就变得不容易。

然而, 我们的理解能力总是有限的 ,对于那些我们试图理解并需要确保正确的事,终会受限于我们的理解力。 我们只能同时处理少数事情,当许多事情纠缠在一起时,我们就无法单独对待其中一个。

如果每次我认为我拿出软件的一个新部分时,我需要理解它,然而它与另一件事有关,我不得不把另一件事拉到我的脑海中,因为我无法撇开其中一个思考另一个。这就是它们纠缠在一起的本质。因此, 每一个相互纠缠的因素都在增加我们理解事情的负担。 所以,从根本上说,这种复杂性,我的意思是这种事物的相互牵扯,将限制我们理解系统的能力。

介于这种情况,我们将如何来修改已有的软件呢?

我在今天的一次演讲中听说,敏捷和极限编程已经表明,重构和测试可以使我们能够以零影响进行变革。我不能确定,这实际上不是一件可知的事情。 有测试保障,并不鼓励不加小心地修改代码。

如果你要修改软件,你需要分析它的作用,并决定它应该做什么。你知道,我的意思是,至少你将不得不去问,“这种潜在变化的影响是什么?”“我需要去软件的哪些部分来实现更改?” 无论是使用XP还是敏捷或其他任何东西,都不能回避这个现实问题。如果你不能对你的程序进行推理,你就无法做出这些决定。

对于软件来说,通常都需要做两件事情,一件是添加新功能,另一件则是修补现有功能。

让代码通过类型检查,通过所有测试,这是一种护栏编程,并不能为我们指引方向,引导我们到达期望的目的地,我们必须对程序进行“推理”。

什么样的跑步者能从比赛一开始就跑得尽可能快?答案是只有那些短跑的人。

在软件开发中,如果你忽视复杂性,你终究会放慢脚步,时间越长越是这样。

当然,如果你正在做一些非常短期的事情,你不需要任何这些。你甚至可以用1和0来写它。

对于大多数软件项目,如果选择了容易,会很快有进展,但随着时间的推移,累积的复杂性最终会把项目扼杀掉。你每次只能进展一点儿,而多数时候在重复已经做过的事情。而如果选择了简单,项目启动速度会变慢,因为必须在开始之前对问题进行一些思考。

容易的东西也可能是复杂的 ,我们经常会碰到描述简洁、熟悉且易于使用的复杂构造,我们把这种复杂性称为偶然复杂性。

具备简单性的软件有什么好处呢?至少是容易理解的,也是可以轻松更改的,调试起来也很方便,最终也带来了灵活性。

通过模块化和将事物分开,将赋予我们调整和移动它的能力。当我们让事情变得简单时,就会在决策上拥有更大的独立性。

拥有一个测试套件和重构工具会让改变编织的城堡比改变乐高城堡更快吗?不可能。

我们可以学习更多的东西,通过熟悉来让各种事情变得容易,但是我们不能让我们的大脑变得更聪明,必须通过简化事物来“接近”它。

即使最了不起的杂耍演员,也最多在空中抛9到12个球,但是不能多达20或100个。与我们面对的复杂性相比,我们整体都处于同一级别,非常有限的级别。

因为我们只能玩这么多球,所以必须做出决定,希望这些球中有多少是偶然的复杂性,有多少是你希望成为问题的复杂性?还能多出多少球?

以上是一句挖苦Lisp程序员的话,也反映出了 程序员只喜欢强调新工具或新方法的好处,但很少提及缺点或权衡。

来看一下我们的工具包中的对象。

状态(State)和对象(Object)是复杂的,而值(Value)更简单一些,许多情况下,可以用值来替换对象。

方法(Method)是相对复杂,而函数(Function)和命名空间(Namespace)则简单些,这是因为方法通常在一个类中,在一个很小的、不好的命名空间中。

变量(var)是复杂的,而托管引用(Manged ref)相对简单。

继承、Switch、模式匹配都很复杂,可选的多态策略则是简单的。

语法是复杂的,而数据是简单的。

最终一致性对于程序员来说很难,需要同时思考相关的东西。

组合就是单纯地放在一起,它是简单的,而一旦相互交织在一起则是复杂的,将简单的组件组合起来也会是简单的,这就是编写强大软件的方式,我们可以通过模块化来创建简单的系统。

简单意味着可以方便地垂直分区和水平分层,但是能够分区和分层并不一定是简单的,复杂的东西也可以做到,但不会带来任何好处。

在系统中处理状态从来就不是一件简单的事,这是因为状态天然是一个由值和时间构成的交织体,你没有能力脱离时间去获取值。

状态的复杂性是无法摆脱的,即使用上了模块化的方法,因为有状态的东西封装起来还是有状态的。你每次使用相同的参数去调用它,然而得到的却会是不同的值,复杂性就油然而生。相当于你每次问它相同的问题,却总是得到不同的答案,这就是复杂性。

请注意这种复杂性和并发性无关,我们谈论的是你如何理解你的程序。

一些闪亮的新语言,也有变量和引用,但是却没有让状态变得简单。

另一些把不可变作为默认特性的语言,大大减少了对状态的使用,是非常好的。

而Clojure和Haskell在这方面就显得特别优越,它们通过一些小的构造将时间和值组合在一起,并提供某种抽象来通过时间获取到值,真正回到了简单的路上。

首先是状态,它将时间、标识和值三者混编在一起,让我们无法分解开来。

方法则编织了函数和状态,甚至在有些语言中还将命名空间编织进来。

语法则编织了含义和顺序,无论你多么喜欢你使用的语言中的语法,它都不如数据简单。

继承则编织了类型,将两个类型彼此编织起来。

Switch和Match(匹配)将多对谁将做什么以及将发生什么编织在一起,并且局限在一个地方完成所有这些 *** 作,这非常糟糕。

变量会将时间和值密不可分地编织在一起。我们只能从内存地址获得一个单词、标量,却无法获得一个复合对象。

循环编织了你正在做什么和如何做这两件事。高阶函数也同样地暗示了事物的顺序。

条件判断散布在整个程序中,编织了整个程序的组织结构。

获得更简单生活的第一步就是选择更简单的东西。

函数也是一种简单的工具,多数语言都支持,它就像是无状态方法。

命名空间是真正需要语言做的东西,而多数语言做的并不好。

数据其实很简单,多少年来,数据的本质没有太大变化,还是Map、Set、线性表、顺序数据这些。但是我们创建了数十万个变体,这些变体与本质无关,却难以 *** 纵。我们应该 *** 纵数据的本质,这并不难。

我们如何设计简单的东西?首先就是使用简单的构件。

但我们有时必须编写自己的构件,如何抽象才能简单呢?要一次又一次地把一些东西拿开,将事物的物理特性剥离出去。

有时人们通过抽象粗暴地隐藏一些东西,这不是抽象的本质,不会真正地帮助到你。

关于如何正确抽象,可以从两方面进行。首先是去做5W1H分析,把这些东西分别列出来,然后通过回答“这方面是关于谁的”“这是关于它的哪一方面”这些问题来将事物拆开。然后是通过确定哪些东西“我不知道,也不想知道”来把它们解开。

[微风]What

但是抽象应该非常小,比我们通常看到的都要小。分解包含巨型接口的程序将困难很多,最好将它们多态化。

最重要的是, 抽象表达的是“What(是什么)”,千万不要和“How(如何做)”编织在一起,将它们严格区分开来,是为他人避免问题的关键所在。

[微风]Who

Who指的是数据或实体,这是我们的抽象最终要连接的东西,用来实现抽象。

在构建较大的组件时,将子组件作为参数传递,不要将他们硬连接到他们的父母身上,以提升灵活性。

要使用更多而不是更少组件,以利用小接口的简单性。

不要将组件和组件之间、实体和实体之间编织起来,不要尝试去了解对方的细节,从而避免提升复杂度。

[微风]How

How代表的是如何做,是真正用来完成工作的代码。最好 用多态性将它们和抽象、实体连接起来 。如果使用了switch和模式匹配,那么就会带来把所有东西都混在一起的问题。

要尽可能地隔离实现,避免和其它任何东西编织在一起。

[微风]When、Where

关于何时、何处的简化规则很简单,就是不要把任何东西和它们编织起来。但是,人们在设计一些直接连接对象的系统时,问题就会溜进来。如果A调用了B,那么你就把它们编织了起来。调用时,你需要知道B在哪里,而A什么时候调用B。

解决这种问题的方法就是 使用队列(Queue ),如果您没有广泛使用队列,则应广泛使用队列,你应该立即开始。

[微风]Why

Why是关于程序的策略和规则的部分,这部分是很难简单化的。我们通常将它们直接放在应用程序中,如条件判断、控制流等。这样,当你与用户讨论应用是如何做的时候,就必须坐下来一起看源代码,这非常困难。

[微风]信息

对象不是被设计用来作为信息载体的,不要把对象用于信息,它是复杂的,会破坏我们构建通用数据处理的能力。

ORM也将业务逻辑与数据展现编织在一起,带来了复杂性。

所以,数据就是数据,把它放在那里,语言中如果有Map、Set,直接用它们就好,不要专门为信息创建类。

[微风]Work

我们选择简单的工具,写出简单的东西,有时不得不去简化别人的东西,简化问题空间或者别人写的代码,这本质上也是一种“解开”。

在开始之前,我们需要花一些时间对事情进行简化。在简化事情的过程中,我们往往会得到更多的东西。简单并不是数量少,我们宁愿让更多的东西整齐划一,而不是让少数东西纠缠在一起。把这些编织的东西分开的美妙之处在于你可以获得更多的能力。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12557566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存