编程究竟难在哪?

发布网友

我来回答

5个回答

热心网友

1. 难在思路的构建

你学了很多语法,很多 API,但是当给你一个实际问题,让你通过编程实现,不是简单地罗列 API 即可完成,而是需要你对问题进行分析,理清解决问题的逻辑,然后再通过各种算法、数据结构和 API 等进行编程实现。

2. 做出来容易,做好难

当你解决了思路构建的难点,解决了一个问题,但是你是否使用的最好的方法,这就是所谓的做出来容易,做好难。

写的程序能够解决问题且没有 bug 是基本要求。这里的做好不是指功能正确,而是写的程序容易理解,能够很容易让其他接手的程序员(水平不差)看懂为什么这么写。

正确是现在怎么写不会挖坑害将来的人,现在怎么写能让别人1年后看你代码时候不可能理解错你现在的意图,现在怎么写能在别人将来犯错的时候提示他你错了。

编程是给未来的未知人讲故事,你无法知道将来这个人是谁,他都懂什么,他经历过什么,这个系统将来已经是什么样子了。我们需要在这种无知,缺乏信息的情况下做决定,从千万种把这件事做出来的方法里,选出你觉得最能把这个故事给讲好的那种方式,把故事写下来。

编程是一种沟通,用程序跨越时空之沟通则是一门属于程序员的特有的艺术 —— 阿莱克西斯
3. 规范性好,有良好的可扩展性

并且程序的可扩展性,规范性高,后期维护难度小。整体功能实现的过程中,各种情况考虑规范。



其实学习编程和学习其他内容一样,没有什么太大差别。心态放好,用对方法,你就能够学好。重要的是学知识的人是什么样子,而不是学的是什么。

在这给你一些学习编程的建议,希望对你有用。

1. 让编程成为一个习惯
想要培养一项技能的最好的办法,就是将他融入到我们的生活并成为我们的爱好。其实说白了,就是让这个爱好成为一个习惯,一天不去做这件事情,都会觉得少了什么。在不知不觉中,这个习惯会像滚雪球一样积累起来。

对我来说,养成这种习惯首先就是要对“拖延症”说不。比如,你想锻炼下自己的写作能力时,但是没有好看的本子,没有好的灵感,没有安静的环境....总之就是找各种理由一拖再拖,最后就不了了之了。

为自己设定一下,每周拿出几天,每天拿出几个小时,编程学习就这样慢慢步入正轨。

2. 将每天的学习过程拆分成小块
对待编程学习,我们没必要像健身狂人那样一口气做到筋疲力尽。与其直接编程2小时,我们完全可以先做40分钟、然后休息5分钟,整个过程重复4次。很明显。

热心网友

编程究竟难在哪:
首先,编程可以分为三个阶段,第一个阶段是对于编程语言自身语法的理解,这个部分虽然也具有一定的难度,但是大部分人,即使没有任何编程基础,经过一个系统的学习过程,都能够掌握。

第二个阶段是通过编程语言来完成各种逻辑操作,这个部分正是编程的难点所在,此时需要掌握各种算法和数据结构。实际上,编程问题说到底就是数学问题,但是并不是数学基础好的人,就一定能够顺利掌握编程,这中间还需要一个转换的过程,关键就在于算法设计能力的培养,这个过程比较考验程序员的逻辑思维能力和抽象能力。第三个阶段是通过编程来完成各种资源的整合和操作,这个部分也是编程的一个难点,此时对于程序员的知识结构有较多的要求,涉及到操作系统、计算机网络、数据库等计算机基础知识。

热心网友

一、初级编程困难

普通的像office上写个vba,此时需要的只是永远不会变的业务逻辑,并且这种代码一般都是一个人写的1000行以内。

因此你不需要软件工程的知识,时间长了甚至也许会有编程很简单的错觉。

这种编程的难是在于逻辑。

逻辑的难再上升一点便是算法,数据结构,这时候你会学到时空复杂度,学会用三种方法证明快排的时间复杂度,知道了现代计算机在面对非P类问题的无力,知道图灵机对于undecidable的问题的局限性,知道了用泵引理证明标准正则表达式永远也找不到匹配的括号。

这时候你觉得很难,难在发现计算机其实干不了很多事。

二、中级编程困难

接下来你或许回去刷各路oj,面对题目,第一步难在问题的抽象和建模上,第二步难在抽象出中正确模型后算法的选择上.也许一个非常像贪心的题结果是网络流,也许一个非常像DP的题,结果是最短路,矩阵快速幂......

抽像出模型后,根据实际问题的各种条件选出最优方案,例如这种形式的dp可以单调栈,斜率,平行四边形优化,选择在线or离线算法?稀疏图还是稠密图?

这时候你会觉得很难,难在最基础的算法。

三、高级编程困难

接下来你会细分到具体的领域,此时的难就难在领域知识。

这也是见仁见智.图形学各种立体角的积分也许对你很难,数学系转过来的小张也许就觉得公式比代码来得亲切。

当然你也可以不管的,将系统看成一个黑盒,无脑调用现成的api,你不必关注神经网络是如何backpropagation的。

tensorflow,caffe等成熟的库已经把所有东西封装的很好了,你不必关注C++ RTTI的特性是如何实现的。

现实生活中存在着大量这样的"程序员",当发生问题时,梯度消失?爆炸?

即使没有太难的专业知识只是业务逻辑,也会疑惑为啥我把循环展开速度会快那么多(gcc O2默认不进行循环展开优化)?

热心网友

编程的困难之处在于:

(1)思维模式的切换。你需要有技术思维。能够成功建模。这可能是大多数人,没有信心,或者不适合从事编程的原因之一。说到底,程序员就是在两种思维模型之间转换的人。一种是人类看到的感受到的外行人视角,一种是技术思维,即如何通过编程,来完成前者。

(2)语言上的难度,例如 C++ 语言本身。它包含了读写两方面的基本要求,达到你可以面对越来越复杂,越来越难于理解的代码,而不会感到困难和退缩的程度。很多人看到复杂的代码时,自信心就已经被击溃了。C++ 和 汇编,大概是目前难度最大的两门语言。汇编难度主要是代码可读性是最低的,代码量和跳转数量是最大的。

(3)超强的对耐心的挑战,编程中遇到的困难的挫败感极强,大部分人会对此感到崩溃。编程需要付出和投入极大精力和耐心,对人的能力是很大挑战,例如,无法完成任务,无法解决某个问题,无法找到问题所在。编程领域,有很多水平体现在稳定可靠性上,当你写出一个东西,实验是成功,然而在部署后实际运行时,总是出现隔三差五出现很难解释的问题的时候,说明你的水平有限。你的水平,和你的成果的可维护性,稳定性,可靠性是成正比的,而很多人可能会比较忽视这种“不够直观和直接,难以量化”的能力。它们需要程序员的责任心和经验的积累,比如说,多线程编程方面的经验等。

热心网友

难在耐心。

编程甚至对智商都没什么太大要求,对耐心与认真要求才是最大的。

实现一个简单的功能,就需要小心翼翼的操作每一个变量,设计每一个函数,设计每一个模块,耐心的写每一个测试,最后细心的debug认真检查程序运行的过程。而在学习编程的过程,也要耐心地读文档,读不懂倒回去再读或去寻求他人帮助。别人的代码一行一行的看,看不懂自己想办法跑一跑观察一下想办法搞懂。

现代人们习惯于快节奏的生活,做很多事缺耐心和毅力,心也不静。有很多人甚至连吃饭都没耐心,而编程这项活动却是世界上最需要耐心的事之一。所以很多人说难,是因为大多人没有耐心,没有极客精神。

极客精神就是耐心,对困难问题的耐心。面对难题非但不放弃,反而很兴奋。这些都是技术大牛的特质,也是我们常说的天才。

现代编程有了高级语言,其实已经简化了太多。我有时候没耐心了,就去想想几十年前,前人的打孔编程,插线编程。他们需要的耐心比我们现代要多几十倍,但他们把火箭送上了天。再想想自己有python,Go什么的,却没有什么大成就,就意识到了自己还要培养耐心。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com