你遇到困难不退缩的例子了什么困难,举个例子写写

什么事例可以写出遇到困难后坚强面对 勇敢克服的 这是我需要的材料_百度作业帮
什么事例可以写出遇到困难后坚强面对 勇敢克服的 这是我需要的材料
这是我需要的材料
学自行车老摔……摔怕了以后…………然后克服心理障碍……终于……不摔且学会了查看: 8766|回复: 3
关于童年所遇到的困难的作文怎么写400字500字范文例文
关于童年所遇到的困难的作文怎么写400字500字范文例文
人生的道路中往往会遇到种种的困难。有的人选择了绕道而行,而有的人却选择去面对困难、去克服困难。第二个人虽然很难做,可他比第一个人收获却多的多。绕道的人就不会做出伟大的事来,因为一点困难他都不敢面对,了还如何面对人生中更大的困难,那时一选择绕道了要损失很多很多。而去面对、克服困难的人解决了困难,当然一份付出就有一份收获,所以他得到了成功的喜悦和许多知识。
&&有次,老师说家庭'相关的作文&&家庭作业是背书,我一听闷了,我最讨厌背书了。一回到家写完了其他作业立刻跳到床上,慢慢的开始背书了。可是过去了半小时,一小时,两小时,还是不太熟。我当时急地不想背了,什么也不想地去睡。妈妈看见我这样就陪我一起背,不一会我就背会了。克服了这个困难我也有收获,我知道了怎么背书其实就个成语——持之以恒,这四个字。别的什么也不想,只想着怎么背它,过一会就解决了!
&&曾有个记者采访一个被美国8所著名大学录取的个姐姐。记者问:“你在实现梦想'相关的作文&&梦想时遇见困难怎么办?”她回答说:“认准自己要做的事情,把其它事情简化,集中精力,坚持不懈,这样困难也就容易克服了。”记者又问:“你从克服困难中得到了什么?”她:“得到了自信,得到了勇气,同时志向也越来越高远。”这么说一个被美国8所著名大学录取的人,一生中就一直靠克服困难来得到自信、勇气和志向来成功的。所以大家遇到困难就是的得到了次考验的机会,千万不要错过,要去面对学习到更多知识。
&&解决困难也有很多的方法。可以相信这样一句话:我们现在碰到的每一个困难和问题在世界的某个地方一定出现过,而且有人已经找到了解决办法,我们要做的是把这个解决办法找到。或者告诉自己:最困难的时候往往就是你将要成功的时候。也可以拿起一本名人传记,看看主人公是怎样挺过难关的。解决的方法太多太多。总之,你只要相信一句话“人生没有迈不过去的坎!”就可以了。
&&困难只是一时的,选择绕道将会后悔一生;选择面对将会获得知识。由你们自己决定!
3、克服困难,战胜自己_
& & 以前的我,是一个十分胆小的女生。胆小到怕老鼠,胆小到不敢自己一个人睡,胆小到不敢站在高处,不敢离开父母。
& & 记得五岁前,爸爸常带我去爬西岩山。但每一次,我都是蹦蹦跳跳地去,抽抽嗒嗒地回。直到五岁那年。好不容易放暑假了,我兴奋得不得了。因为,我可以睡到十点,玩到十点了。第二天早上,爸爸把我从和周公的约会中拉了出来,“命令”我穿好衣服,换上运动鞋。我带着满腹疑惑,被爸爸拽到了山脚下。
& & “啊?老爸,不会吧,又要爬山了?”“那可不,不然,你那恐高症啥时候才能治好?”虽然,我的内心是十分、极其以及特别的不情愿,但是,我又不想爸爸回家对我实行“十大酷刑”,只好硬着头皮,抓牢爸爸的手,一级一级地往上爬。由于上山的台阶比较平缓,我们马上就到了半山腰。这时,我的眼前出现了一座寺庙,这可是无数次是我站难而退的地方。一位在庙门前,耸立着十级又高又陡的台阶。忍不住抬眼向上望,天啊,拿上面的两头石狮子还在龇牙咧嘴的“恐吓”我呢!爸爸看出了我的恐惧,用起了“激将法”:“怎么样,还怕了吧?早知道你这么没出息,我就不领你来这儿了。”这招果然奏效,我乖乖上了爸爸的当:“谁说我爬不上去了?今天,让你瞧瞧你宝贝女人的真本事。”
& & 我拽着爸爸,向前跨了一步。一台小意思,两台真轻松,三台没问题,四台还可以。眼看着就快要的中间了,我却“啊”的叫了起来。爸爸不停的说:“别怕,还有我呢!”可我还是很丢脸的说:“我上不去了,我宁愿呆在这儿。”爸爸听后,马上把我丢在一边,装作生气的样子说:“好呀,呆着吧。”说完,他马上又向上走了几级,我只好战战兢兢的漫漫移。游人像我们这对奇怪的妇女头来诧异、惊奇的目光。我,又气又急,恨不得冲上去在老爸那厚厚的脂肪层上擂一拳。老爸这时却不知死活地说:“愿意上来了?那就走吧。”渐渐的,地面离我越来越远,不知不觉,我已经到了庙门口。那两头石狮子,这时也友善的看着我,按目光中仿佛带着些许的鼓励和祝贺,更多的,是欣慰。
& & 忽然,我的肩上被爸爸拍了一下。自然,我的头向后转去。这一专不要紧,使我这个恐高症患者差点失足摔下台阶。虽然自己心中说着“不怕不怕”,但身体还是不太自觉地抖了起来。爸爸将双手轻轻蒙在我眼睛上,叫我向前走几小步。我照办了。我不知从哪来的勇气,掀开爸爸的手,睁大了双眼,看看下面的游人,想想自己的爬山经历,我不禁喜欢上了这种居高临下的感觉。这时,成就感涌上我的心头。
& & 现在,我长大了,已经可以在西岩山上上下自如,甚至可以从狭窄的小路上小跑回家。随着年龄的增长,我也可以独自一个人在家呆一晚。这一切,都是因为那次怕山,使我获益匪浅:不要惧怕困难,只有努力克服,才能到达光辉的顶点。
4、在人的一生中,不可能是万事如意的。做事时,肯定会遇到困难和挫折。这不重要,重要的是你会怎样对待困难和挫折,是放弃?还是前进?我在学习游泳时遇到了困难,我,毅然选择了前进!
记得那是在一年的暑假里,我看到电视上的游泳运动员如鱼得水地在水里穿行。我认为游泳是非常地简单,所以我让妈妈给我报了个泳班。
第一次上课,我高兴极了。不过一摸水,一股凉气贯穿我的全身,水这么凉啊!“不过第一次课不下水。”我自己安慰自己。可是我不想怎样练偏要怎样。毕竟我没下过水,我只在水里“扑腾”几下就被教练拉上来了。
回家后,妈妈对我说:“你没本事就放弃吧。”但我偏不,反而下了决心要练好。
刚开始,我站在跳台上不敢往水里跳,教练在后面把我推下水。慢慢地我可以游起来了。有时候游时,我的动作变了形,有的人就开怀大笑。而我,不理他们,好好练习,心想:等我练好后看你们还笑。下课后,我多留一会儿,让老师单独辅导我。过了几天,我的游泳技术大长。
考试那天,我胸有成竹地去了,很容易地拿下了考试。那时,那些笑我的人把笑声变成了掌声,我心里高兴极了。老师表扬了我,家人也夸奖了我,尤其是以后出去玩,游泳时,许多人都对我刮目相看。我想当时我要放弃,后果将不堪设想。
从这件事中我悟到了一个道理:人的一生不遇到困难和挫折时不可能的,但要正确面对它,不断努力前进,坚决不能后退。当你成功后,你会发现,你从一粒微不足道的沙子变成了一颗光彩照人、价值连城的珍珠。但前提是要付出。不是有一首歌唱得好吗,“阳光总在风雨后,乌云上有晴空.”人生也是如此。
谈谈改革遇到的困难及解决之道:任何改革不可能是一帆风顺的,任何一个改革都是新制度与旧制度之间的较量,改革的路上是曲折的,是探索中进行的,有较量就会有斗争。改革的直接原因是事物间的双方利益不相符,根本动力是矛盾双方此消彼长,结果必然是适应发展的留下,过时的被淘汰掉。改革的路上是艰难地,曲折的,探索中得。第一是与旧产物的较量,任何新东西的产生必将遭到旧事物的千方百计的阻挠,因为其或多,或少的撼动了旧事物的权益,新事物的产生必将遭到旧事物的打压,所以改革是艰难的。第二,新事物的产生本身就是曲折的,事物产生之前没有明确的目标,明确的纲领,成熟的思路,难免会走弯路。期间会遇到很多问题,,所以是曲折的。第三,改革的路是探索中的,既是走一步算一步,又是脚踏实地的走,即是不成熟的理论在指导,又是实践中摸索新的解决之道。之前谁都没有尝试过,即便有尝试又不知道是否适合自身,所以说是探索中的。那么在改革的路上,如何解决困难,尽可能的避免困难,从而达到最大的改革成效。我想第一是坚定目标,紧紧把握大的方向,方法可以多种多样,但是目的必须是一致的。其次是建立的有一个完善的机制可以紧紧团结人民在一起的的力量,指导人民一起克服困难。第三是多实践,局部的发展适应带动全面的发展。&&时间有限,仅此参考。
绿色免费PPT课件试卷教案作文资源为什么程序比较难写、bug 比较难调呢?
题主对计算机科学常见概念栈、队列、树、图都理解得较好,但是为什么还是比较难写好程序、 比较难调好bug呢?
按投票排序
程序处理的难点不在于计算,如果只需要处理计算那倒简单了;一段代码表明的实际上是“一段逻辑”,而逻辑是需要判断边界条件的。我是做前端的,就举个很经典的前端需求:名片卡。也就是你把鼠标放到某个答题者昵称上弹出的那个信息浮层。我尽量用非码农能听懂的话解释一下:在浏览器里,是这样处理鼠标移入和移出的:对上面这个蓝色区域设定一个监听器:当鼠标挪进蓝色区域时,会触发一个事件mouseover,浏览器会通知我,告诉我鼠标挪进去了,然后我去做我想做的事;当鼠标挪出蓝色区域时,会触发mouseout,也会通知我,我再去做想做的事。对上面这个蓝色区域设定一个监听器:当鼠标挪进蓝色区域时,会触发一个事件mouseover,浏览器会通知我,告诉我鼠标挪进去了,然后我去做我想做的事;当鼠标挪出蓝色区域时,会触发mouseout,也会通知我,我再去做想做的事。再来看名片卡:一个名片卡当然分昵称和卡片两部分:——————————————————————————————————一开始,B当然是不显示的,现在用户把鼠标挪进了A,于是:A的mouseover被触发这时要做的事,当然就是显示出B。那么好,逻辑就变为:A的mouseover被触发→弹出名片卡而当鼠标移出A时,名片卡就要消失,对吧,那么再加一个逻辑:A的mouseout被触发→隐藏名片卡——————————————————————————————————看似大功告成了,耶!但是上线后很快发现个问题:当鼠标先进入A时,B出现了,这个时候用户想要把鼠标挪到B上,去点击里边的按钮。可是按照上面的逻辑,当触发A的mouseout时,B是会消失的,于是用户根本无法点击B上的按钮!也就是触发A的mouseout时既要B消失又要B不消失,真是矛盾啊!怎么办呢?于是就想了一个办法:当触发A的mouseout时,先不让B消失,如果判断随后鼠标没有进入B,再让B消失;如果进入了B,则不让B消失。于是,以下是全部逻辑:A的mouseover被触发→弹出名片卡A的mouseout被触发→先不做任何事→500毫秒后检测是否触发了B的mouseover:若触发了,B不消失;若没有触发,B消失。——————————————————————————————————好啦,再次上线!但是很快又发现问题了:如果鼠标先进入A,然后进入了B,然后又从B挪出去了!这样名片卡就一直存在了,不会自动消失!也就是说,当触发B的mouseout时,也要让名片卡消失。于是,以下是全部逻辑:A的mouseover被触发→弹出名片卡A的mouseout被触发→先不做任何事→500毫秒后检测是否触发了B的mouseover:若触发了,B不消失;若没有触发,B消失。B的mouseout被触发:B消失。——————————————————————————————————好啦,上线之!很快,又有问题被爆出了:如果鼠标先进入A,再进入B,但又挪回了A,怎么办?按照逻辑,从B挪回A的时候必然要经过一个空白区域,而这是有时间间隔的,那么就会出现这种现象:挪出B时B消失了,进入A后B又出现了,按照一般的鼠标挪动速度,这会造成名片卡的一次闪烁,这在产品上肯定无法接受。也就是说,从B挪出去后也要判断鼠标的去向!于是,以下是全部逻辑:A的mouseover被触发→弹出名片卡A的mouseout被触发→先不做任何事→500毫秒后检测是否触发了B的mouseover:若触发了,B不消失;若没有触发,B消失。B的mouseout被触发:先不做任何事→500毫秒后检测是否触发了A的mouseover:若触发了,B不消失;若没有触发,B消失。——————————————————————————————————但几经周折后,又发现一个问题:用户的鼠标总是会不经意地划过昵称,他可能不是想要去看名片卡,只是想点击另一个东西时鼠标经过了名片卡;但按上面的逻辑,每次划过昵称后都会弹出名片卡,移出时再消失,于是——用户会看到不想看到的结果,名片卡乱闪,特别是鼠标滚轮往下滚的时候...也就是说,需求变成了:A的mouseover出发时,不要立刻显示B!而是要过一会看看鼠标还在不在A上!以下是全部逻辑:A的mouseover被触发→先不做任何事→500毫秒后检测是否触发了A的mouseout:若触发了,则不显示B;若没有触发,显示B。A的mouseout被触发→先不做任何事→500毫秒后检测是否触发了B的mouseover:若触发了,B不消失;若没有触发,B消失。B的mouseout被触发:先不做任何事→500毫秒后检测是否触发了A的mouseover:若触发了,B不消失;若没有触发,B消失。——————————————————————————————————7-21补充:很快又有问题了!我们来看这张图:大家来想一下:如果我先把鼠标移到B,再移到C,会发生什么呢?大家来想一下:如果我先把鼠标移到B,再移到C,会发生什么呢?按正常人的罗辑,C处于B的内部,所以一直都不会有什么问题,对吧?错!坑爹的浏览器会告诉你,如果你挪进了C,那么会触发B的mouseout!然后触发C的mouseover!于是B就顺理成章地消失了!所以,要增加一个判断,当触发一个节点的mouseover时,要看看它是否处于B的内部!这里有一个技术问题,一个名片卡内的DOM节点少则十几个多则数十个,难道要给每一个节点都绑定mouseover来判断?好在浏览器有一个机制叫做“事件冒泡”,如果C的mouseover被触发,它在响应自身的mouseover后,会继续把mouseover这个事件通知上一层,也就是说B的mouseover也会随后触发(是同步的),B当然也会继续向它的上一层冒泡,一直冒到整个页面的最顶层document.body也就是说,B的mouseover被触发时,事件的源节点不一定是它本身,有可能也是它内部的元素。所以,只需要在B的mouseover上再加个判断就好了!以下是全部逻辑:A的mouseover被触发→先不做任何事→500毫秒后检测是否触发了A的mouseout:若触发了,则不显示B;若没有触发,显示B。A的mouseout被触发→先不做任何事→500毫秒后检测是否触发了B的mouseover:若触发了,B不消失;若没有触发,B消失。B的mouseout被触发:先不做任何事→500毫秒后检测是否触发了A的mouseover:若触发了,B不消失;若没有触发,B消失。B的mouseover被触发:先不做任何事→500毫秒后检测其事件源节点是否处于B的内部:若属于,则B不消失;若不属于则什么也不做。——————————————————————————————————以上就是一个名片卡如何显示的逻辑。你可以看看,有多少地方可能出错?判断得越多,越可能出现因马虎大意而造成的bug。所以大家可以去所有有名片卡的网站,如百度贴吧,新浪微博,人人,甚至知乎,可以发现鼠标放到昵称后名片卡都不是立即出现的,而是有一定延迟的(已考虑第一次放上去时会发起请求,请求本身会有延迟,但一般第二次之后放上去则会直接读缓存,不会有请求的延迟),为的就是考虑以上这些情况。不信你看:这是新浪微博的名片卡:如果你先把鼠标放到昵称上,等名片卡出来后慢慢地挪到箭头所指的缝隙处,会发现名片卡消失了;但如果快速经过缝隙处挪进名片卡,则不会消失,这就是你在500毫秒后鼠标的去向问题了这就是一个简单的名片卡显示的问题,之所以加粗是因为我还没细谈上面提到的缓存问题:为了减小服务器压力,对某一个昵称第一次显示名片卡时会发起请求读取数据,但第二次第三次...就会读取第一次时存在本地的缓存,而不去读服务器。逻辑就是:触发某一昵称的mouseover→查看本地hash表中是否已有缓存:有则读取;没有则发起服务器请求。而服务器请求会引起另外一个问题,从发出请求到收到返回是需要时间的,如果在返回之前用户从该昵称上挪走了鼠标,那怎么办?一般的做法是抛弃返回数据而不是继续显示。如果这里没做好,那就可能会出现鼠标从昵称上挪开了但名片卡还是显示出来了的情况。还有位置计算的问题,名片卡不能一半显示在屏幕里边一半显示在屏幕外边,所以要动态计算昵称距离屏幕边缘的距离,逻辑就是:名片卡优先出现在昵称上方;如果上方空间不够则显示在右侧;如果右侧不够则显示在下方;如果还不够就显示在左边;都不够那没办法了以上不但要考虑名片卡位置问题,还要考虑名片卡上那个箭头的指向问题,箭头需要恰好指着昵称的正中间,而这个是需要计算的+++++++++++++++++++++++++++++++++这还不包括名片卡内部的一些按钮的逻辑,比如下面这个:名片卡里有求关注、取消关注、设置分组、私信!这些逻辑都很复杂!虽然组件都可以服务化但成本也很大!一个组件要考虑各种不同的调用方!你可以看看有多少边界条件需要考虑,多少逻辑需要处理,随便哪个地方出个问题,到了测试那里都是个bug。而这些,以上,仅仅只是一个名片卡的问题!而且我还没有把后端的bug算进去,比如如果发起请求返回的数据出错怎么办,弹个错误提示呢还是不作为呢还是重新发请求?如果后端把名片卡数据打错了怎么办?html模板托管在哪?后端吐出全量html还是止吐数据让前端去拼模板?这套机制换一个页面能不能用?(可移植性)如果其他脚本文件没加载的话还能不能用?(依赖程度)是否可以适配多种样式的名片卡?(可定制)还有其他的地方,看似简单的功能,实际的逻辑都非常复杂,并不是外行人想的那样“这个功能很简单你很快就能搞定吧”,刚入行的PM都是这么想的!
题主试试Haskell吧,会有一番新的体验。
这是一个依赖逻辑建立起来的世界,在这里你无法依赖上帝建立起来的自然法则。你本身就是你建立的逻辑世界的上帝,需要操心一切细节,制定一切规则。没有规则或规则不完善的地方,那就是你创造的世界的缺陷,就是bug。而建立一个自洽的世界并不是那么容易的。因为你毕竟是人,而不是神。
初中生都懂电场和磁场互相转化,你要不要解解各种介质、各种边界条件的麦克斯韦方程组试试?栈、队列、树、图只是看上去好理解而已,你要不要用代码实现一遍试试?要不要用这些东西解决问题试试?这个问题不是数学和计算机科学的区别的问题,而是表面上理解一个概念,和能用这个概念解决问题的程度的差异问题。
我是来吐槽“其常见概念栈、队列、树、图都比较好理解”。。。当你遇到有数百万的节点的图,数百万节点的树,你还拿最简的方法去处理,肯定哭瞎了好么?就一个树,还有B+ B-树,红黑树等,每一个都不简单。
看到有同学表示我的回答有偏颇,特此作以说明:下面引用了我最开始看到的时候题主的问题原文,没有删改,我的回答也是针对这个问题而作的。后来题主修改了问题,我也没有再回答过。特此说明。题主原问题如下:计算机科学并不涉及高数、线性代数这类高大上的知识,其常见概念栈、队列、树、图都比较好理解,但是为什么还是程序比较难写、bug 比较难调呢?首先分析题主的问题:1.计算机科学不涉及高数、线性代数这类高大上的知识;2.计算机科学的常见概念栈、队列、树、图、都比较好理解;3.程序比较难写,bug比较难调;4.题主认为在上述的1.2两点成立的前提下第3点不应该成立,但第3点的成立是事实,因而有所疑问。回答如下:1.关于题主的第1个论点:计算机科学不涉及高数、线性代数这类高大上的知识。首先高数、线性代数并非什么高大上的知识,作为大学课程的高数和线性代数只是工科专业的入门和基本课程,还有很多远比这些课程高深的知识。其次计算机科学中有很多地方涉及到了高数、线性代数以及许许多多其他高深的知识。例如,计算机图形学中大量应用到了矩阵论等知识,而矩阵论在大学课程中一般是作为线性代数的后续课程学习的。处过矩阵论之外还有很多知识,题主感兴趣的话可以自己去查。因此,题主的第一点论点是不成立的。2.关于题主的第2个论点:计算科学的常见概念比较好理解。常见的数组、链表、堆、栈、队列、图、树等概念的基础版的确不难理解。但是,由这些概念延伸出的概念并不都是好理解的,如计算机使用的数据结构中,“树”就有很多种,并不都是非常明白易懂的。由于题主的问题中有常见二字,而我们对“常见”的定义不尽相同,我只能说我对题主的第2个论点持保留态度。3.关于题主的第3个论点:程序比较难写,bug比较难调。一般而言,程序难写的程度视程序所要完成的功能、要达到的要求以及完成程序的时间等外部条件而定。举个例子,写个给二三十人用的聊天室程序就比较简单,而12306网站的构建则非常困难。所以,作为互联网从业人员,我只能说,大多数人见到的网站、应用等程序的编写是比较难的事情。主要的难度在于:1)如何完成用户所需要的功能。2)如何让程序稳定可靠的运行,尽量少出问题。3)如何应对大量用户使用带来的问题。4)如何随着用户需求的变化而在不影响现有用户使用的前提下对程序加以改进。5)如何在尽量不影响程序运行的情况下改进程序的效率等。(其他的难点就不一一列举了)而关于bug的问题,由于bug的存在尝尝难以定位和处理,另外,在实际应用中计算机程序的逻辑复杂度非常高,所以,bug是不可避免的。关于bug问题的逻辑分析我并没有做过,欢迎大家补充。4.由于计算机科学涉及到了许多复杂的知识,而计算机程序本身具有极高的逻辑复杂度,而我们尝尝要在完成指定功能的同时兼顾程序性能等其他方面的考虑,程序是比较难写的。同时,也是由于程序的逻辑复杂,所以bug难以避免。5.题主本身的第4个论点中的推理部分:论点1、2成立则论点3 不成立首先,程序难写,bug难调的直接原因是程序的复杂性,既包括数据的复杂性,也包括运行过程的复杂性,同样包括外界限制的复杂性,因而论点3 的成立并不依赖于论点1和论点2。举个例子,英语就是26个字母(基本概念简单易懂),在所有语言中算是比较易学易用的,学习难度完全无法和汉语相比,不涉及高大上的文字体系(不涉及高大上的知识),但是用英语写出好文章依然很难(程序难写,bug难调)。其次,题主的论点1.2并不正确,原因我在上面已经分析过了。综上,题主问题中的推理并不正确,前提条件也不正确。所以才会出现自己推理出的结果与实际有所偏差的情况。PS:水平有限,欢迎大家纠正或补充。
先来纠正几个错误的观念,再来解释原因。计算机科学并不涉及高数、线性代数这类高大上的知识这句话不对,计算机科学很多都用到了高数和线性代数,来举几个例子,高数当中的牛顿迭代可以作为逼近数值的方法,傅里叶变换又是信号处理的基础,图形计算里大量充斥着矩阵计算。其常见概念栈、队列、树、图都比较好理解栈,队列,树是实现的方法而不是解决问题的方法,图更是一个比较广的话题,从实现方法上来说图有多种实现方法,从算法上来说,根据图本身的性质演变出来的算法又有很多,数学上有专门的图论分支。程序难写,bug难调,因为解决问题的方法多种多样,举一个简单的例子,从简单的文件搜索来说,正常人的想法是根据输入搜索的信息,一个文件一个文件的寻找,看是否符合关键词。那是不是有更加快捷的方法能够找到文件呢?这个方法肯定更加复杂难写,更加难以实现。解决问题的方法有问题,再来举一个简单的例子,设计一个银行系统,可以转账。本人账户=本人账户-转账数目
目标账户=目标账户+转账数目
这样看好像没有问题,但是如果考虑到转账数目可以是负数的话。。。。问题就大了。即使限定了数字必须大于0。这个算法在实际操作当中还是有问题,比如如果执行完了第一句话,机器崩溃了,那是不是这部分钱就不翼而飞了?所以这种情况也会造成bug。实现的方法有问题,再来举个例子,你的解决方法需要用图来解决这个问题,结果这个图的结构太复杂,你写的程序根本不是按照你的思路来运行的,这也会造成bug,这就是算法对的情况下,你的代码有问题。
八成在于不知道现在的需求,二成在于不知将来的需求
栈、队列、树、图这些东西都已经是前辈们对一些现实问题经过总结后抽象出来的计算机世界的模型。对于这些抽象出的模型讨论编程是否困难,查BUG是否困难没有任何意义。因为在你学栈、队列、树、图这些模型时,其实写程序最痛苦的事情你都还没有开始。私以为写程序的本质是对现实世界中的某个问题,在计算机的规则世界中抽象出一个解决方法。仔细想一下,就算平常人和人之间,对于一个人抛出一个问题,另外一个人都有可能理解岔了给出一个错误的答案。而且这还是在人类思维方式基本相近的前提下。考虑在用计算机给出解决方法的目标背景下,考虑以下场景:1.
人类甲给出了一个问题A,需要一个答案B(姑且理解为“需求”)来解决问题A。2.
人类乙按自己熟悉的思维方式理解了问题A(假设人类乙理解后的问题是A’)3.
人类乙根据自己理解的问题A‘在脑内抽象了一个在计算机规则世界中呈现的问题A''4.
人类乙根据上述问题A''设计了一个解决方法(假设人类乙设计的解决方法为B''')5.
人类乙根据设计出的解决方法B’‘',用编程语言实现了解决方法B''''。以上过程还没有考虑到软件工程中众多干系者参与在内从而产生的交流过程中的信息失真等情况。在如此一个“脑力密集型”的劳动中,只要在上述整个过程中,思维上存在一点点理解的偏差,一点点的理解不充分,哪怕是一点点的疏忽, BUG就被做进去了。而且大部分情况下,BUG并不会立刻体现出来。因为一个程序是多人脑力的结晶,它是如此精密而复杂(不管怎样,就算是一个没有经过充分设计的“烂程序”, 它也仍然拥有很高的复杂度),以至于BUG要么在平日里掩藏起来,只有满足了某些特定条件,它就以程序员最匪夷所思的形式发作。所以当调试代码时,你要考虑的是 如何从这个匪夷所思的现象,回溯上述的场景1~6(而且,负责找问题的人很可能根本就没有参与这个1~6的过程),找到问题所在地,这是一件多么痛苦的事情。当然你手头会有很多工具帮你去搜集程序出错时的蛛丝马迹,从而提高找到问题真正所在地的效率,但这个过程仍然无比痛苦。最后再举一个例子:Perter Van Der Linden在他的《C专家编程》(Expert C Programming)中举了一个价值2000万美元的BUG的例子。从书中描述来看这只是一个误将 赋值符号"=" 错写成了比较符“==”的错误,看上去这是一个似乎很简单的问题,但有理由相信作者他们在面对操作系统所表现出的不正常而经过一轮轮调试调查后锁定到最可疑问题点时,他们面对着个"=="符号,也就只能苦笑一下了。向所有将热血奉献在调查BUG的技术者致敬~
那么请题主不用线代和高数的知识计算一下500个点的最小二乘拟合?
你先给我搞搞图像的处理和识别
答题的都没答到点子上,关键是在于规模问题。楼主看武侠小说吗?里面有一个理念是:将简单的动作重复多次而不出错就会上升到一个更高的境界,典型的比如傅红雪挥刀(自宫?)十万次,方练成绝世刀法。毛太祖曾经说过,一个人做一件好事容易,难的是一辈子做好事。其实都是一个道理。写一个几百行的代码,用户规模不超过5人,应用场景两张稿纸就能列完,这样的代码完全可以做到无bug。但是放大之后,一套几百兆的源代码,对你没看错,不包括资源文件,就是记录源代码的纯文本文件就有几百兆,这里面bug的数量是会呈几何比例上升的。支撑编程的,只有那么几条能数清的规则,但当规模扩大之后,原本简单的,也变得不简单了。这就是工程学的魅力。
计算机科学不需要数学。。。真是亮瞎狗眼而且高数线代这种跟小学算术差不多的玩意,怎么变成高深的数学了。。
概念是好理解,但是把你理解的概念实践出来,是非常困难的。从理论到实践有太多的问题要解决。理论是在理想状态下的一个优化的抽象,而实践是个跨域合作的混乱环境。要把现实环境理顺再在有限的接近理想状态下做出了一个相对合理的理论实现,是要一个很长的过程。好比去火星的理论已经非常完备了,但是还是至今没有人干尝试去火星。就是去月球,已经有人去过了,理论已经很完备了,但是至今没有任何国家冒险去月球旅行一次了。回到计算机上,理论到实践有很多困难。主要克服一下几点:1. 硬件限制硬件限制之一空间,大部分理论上的数据结构,都是理论上可以保存无限数据的结构,然而现在电脑的内存+硬盘,可能并不允许产生无限大的数据。速度上来说,历遍任何一个数据结构,都是要相当长的时间,数据越大,时间越长,但速度不是主要的,只要数据结构做成了,历遍一次只是时间问题。然而数据结构并不是只有历遍,还有删除,添加,甚至排序等操作,但是由于cpu,内存,硬盘的速度限制,可能会很慢,在应用的过程中可能并不理想。然而硬件最大的问题并不是空间和速度,而是硬件是有生命周期的,会故障,会老化,甚至是突然毁坏,在你实践过程中,尤其是做产品,这个必须考虑的问题。2.语言本身的bug语言是有bug的,有的是天生的的,有的是硬件造成的,有的是历史原因,有的就是故意设计成那个样子的。 (javascript有个项目叫做wtf.js,专门记录js的怪异之处)。编写一个代码有时候不知道它的bug在什么地方,然后就出错了;有的时候升了级,然后本来没有错误的,现在有了;有的时候知道了,绕过错误避免了错误,但是问题很多。实践中,语言本身的bug是要面对的3.错误处理程序编写完了,然后有很多实践中才会有的错误,你如何去处理这些错误,也是非常重要的,这样才能保持程序的稳定。有硬件错误,比如内存硬盘容量不够了怎么办?有软件错误,比如指针指错了位置,然后如何处理把指针回归的真确的位置上?超出了定义边界,如何处理等等错误都需要你去思考4.文字编码理论上的数据,一般都是用英语字符的。但是现实中太多的文字编码,现在在用uft8等标准在统一,但是事实上,不是所有人都用uft8,尤其是历史项目,都不是uft8,这样,你以为你存的是对的,但最后取出来的是乱码。5.数据结构内部保存内容你打算让你的数据结构保存什么类型的内容,这个也是一个问题。一个链表的一个数据,可以是字符,也可以是另外一个链表。一些语言只需管你的逻辑结构,其实很好处理,但是如果语言不但要保证逻辑结构的正确,还要保证物理结构正确,那么就十分困难了。6.数据保存的结构你用数据结构保存了那么多内容,你如何保存,下次如何加载,又是个问题了。当然可以放在数据库内,也可以放在自己定义文件中,但如何快速存放,又如何快速加载成员了的数据结构,这又是问题了。这里还有个问题,万一这个文件被篡改,万一结构被破坏了,你又如何处理,又如何尽可能的恢复这个数据结构的内部结构和数据的完整性。7.安全性如果你要保存的内容非常敏感,有如何保证其安全性,如何在数据结构内的快速加密和解密?在这个过程中,又能保证其不被轻易的破坏8.其他问题实践过程中有太多可以总结的问题了,有些是经常会遇到的,有些是你没有遇到前,更本没有办法想到的问题。如何让开发者方便的使用,提高简洁的API。理论很完善了,是不是要一套行业标准,来统一使用方式,给出统一API。如何快速检测你算法作出来的数据结构是正确的,如果发现有节点错误,如何快速纠正把节点放到真确的位置上。如果TB级的数据上,进行快速的数据操作和处理,等等等等,等待你的思考和解决
计算机的基础是二进制。相比人类的逻辑能力,二进制逻辑非常低级(或者说愚蠢)。编程就是让傻子理解正常人的思路,能不难么。上帝往地上扔了多少个苹果才让人类懂得万有引力。
排名第一的答主说明了一点原因,但是并不能说明全部问题。我最近在学习算法,个人感觉最大的难点是在于抽象问题的能力上,嗯,抽象问题,感觉很玄学的样子,但事实如此。算法设计思想无非就那么几种,其中分治、贪心、动态规划和状态空间搜索是最重要的,解决问题时所有的算法大部分可以归为这么几类(我之前学排序时学到快排和合并排序时都是死记硬背的,后来学了分治思想后恍然大悟,不用看也能手写出来)。其实方法前人总结的很好但是,当遇到真正的问题时用什么样的方法,才是程序设计中的重难点。学会运用方法是一门技巧,这和弯弓射大雕一样是需要不停的锻炼,才能达到熟能生巧境界,只有多刷acm题,才有可能锻炼出抽象问题的能力和套用方法的本领我明白我的回答包含了大量偏见,语言也不太通顺,将就着看吧…过一段时间再来做个总结吧,只能写到这里了
程序的核心是逻辑。写程序就是完成一个完备的逻辑流程,包括各种情况的处理。Bug就是有些情况没有考虑到导致的。还有些Bug是调用下层库方法有误、下层库错误,甚至是编译器Bug导致。说白了,就是逻辑复杂度太高导致。至于数据结构的复杂度并不高,大部分Bug不是由它们导致。
1. 脑子里的模型转化成实体代码的过程栈、队列、树、图都比较好理解 但是你知道怎么用c语言实现吗?2. 各种欠缺考虑的情况就算你把它实现了 你能保证在你代码的某个角落没有出现解引用空指针的情况 或者其他各种奇怪的情况吗?3. bug难以重现 导致难以找出并解决4. 需求不断在变化就算你把它写出来了 也debug好了 你还要考虑后续维护的事情一个东西做出来容易 维护起来难啊建议你以后写什么东西先考虑一下 没事不要瞎开坑====================================================================总之就是现实世界太复杂了 高数线代那些理论只对真空中的球形鸡有效现实世界如果像高数线代那么简单抽象化就好了
觉得现在排名第一的答案不够好,不服怒答。
题主确定对你说的那些理解的比较好?我觉得题主可以重新审视一下自己的理解程度。
不过回归正题,假设题主理解的较好,那么程序难写,bug难调的主要原因有以下几点 :
对业务需求理解不透彻,导致程序设计混乱,bug频出,此为程序难写。
逻辑不严密,在全面了解业务需求后,仍然无法完成业务到代码的正确转换,某些条件处理不正确或者忘记处理,此为程序难写。
不会使用调试工具,瞎猜bug位置和原因,效率低下不说,还极有可能诊断错误。此为bug难调。
总结一下,原因就是:没理解好需求,没做好设计,逻辑能力差,使用debug工具不熟练。
解决方案:多谢多练!

我要回帖

更多关于 工作中遇到的最大困难 的文章

 

随机推荐