编程究竟难在哪?
1. 难在思路的构建
你学了很多语法,很多 API,但是当给你一个实际问题,让你通过编程实现,不是简单地罗列 API 即可完成,而是需要你对问题进行分析,理清解决问题的逻辑,然后再通过各种算法、数据结构和 API 等进行编程实现。
2. 做出来容易,做好难
当你解决了思路构建的难点,解决了一个问题,但是你是否使用的最好的方法,这就是所谓的做出来容易,做好难。
写的程序能够解决问题且没有 bug 是基本要求。这里的做好不是指功能正确,而是写的程序容易理解,能够很容易让其他接手的程序员(水平不差)看懂为什么这么写。
正确是现在怎么写不会挖坑害将来的人,现在怎么写能让别人1年后看你代码时候不可能理解错你现在的意图,现在怎么写能在别人将来犯错的时候提示他你错了。
编程是给未来的未知人讲故事,你无法知道将来这个人是谁,他都懂什么,他经历过什么,这个系统将来已经是什么样子了。我们需要在这种无知,缺乏信息的情况下做决定,从千万种把这件事做出来的方法里,选出你觉得最能把这个故事给讲好的那种方式,把故事写下来。
编程是一种沟通,用程序跨越时空之沟通则是一门属于程序员的特有的艺术 —— 阿莱克西斯
3. 规范性好,有良好的可扩展性
并且程序的可扩展性,规范性高,后期维护难度小。整体功能实现的过程中,各种情况考虑规范。
其实学习编程和学习其他内容一样,没有什么太大差别。心态放好,用对方法,你就能够学好。重要的是学知识的人是什么样子,而不是学的是什么。
在这给你一些学习编程的建议,希望对你有用。
1. 让编程成为一个习惯
想要培养一项技能的最好的办法,就是将他融入到我们的生活并成为我们的爱好。其实说白了,就是让这个爱好成为一个习惯,一天不去做这件事情,都会觉得少了什么。在不知不觉中,这个习惯会像滚雪球一样积累起来。
对我来说,养成这种习惯首先就是要对“拖延症”说不。比如,你想锻炼下自己的写作能力时,但是没有好看的本子,没有好的灵感,没有安静的环境....总之就是找各种理由一拖再拖,最后就不了了之了。
为自己设定一下,每周拿出几天,每天拿出几个小时,编程学习就这样慢慢步入正轨。
2. 将每天的学习过程拆分成小块
对待编程学习,我们没必要像健身狂人那样一口气做到筋疲力尽。与其直接编程2小时,我们完全可以先做40分钟、然后休息5分钟,整个过程重复4次。很明显。
首先,编程可以分为三个阶段,第一个阶段是对于编程语言自身语法的理解,这个部分虽然也具有一定的难度,但是大部分人,即使没有任何编程基础,经过一个系统的学习过程,都能够掌握。
第二个阶段是通过编程语言来完成各种逻辑操作,这个部分正是编程的难点所在,此时需要掌握各种算法和数据结构。实际上,编程问题说到底就是数学问题,但是并不是数学基础好的人,就一定能够顺利掌握编程,这中间还需要一个转换的过程,关键就在于算法设计能力的培养,这个过程比较考验程序员的逻辑思维能力和抽象能力。第三个阶段是通过编程来完成各种资源的整合和操作,这个部分也是编程的一个难点,此时对于程序员的知识结构有较多的要求,涉及到操作系统、计算机网络、数据库等计算机基础知识。
(1)思维模式的切换。你需要有技术思维。能够成功建模。这可能是大多数人,没有信心,或者不适合从事编程的原因之一。说到底,程序员就是在两种思维模型之间转换的人。一种是人类看到的感受到的外行人视角,一种是技术思维,即如何通过编程,来完成前者。
(2)语言上的难度,例如 C++ 语言本身。它包含了读写两方面的基本要求,达到你可以面对越来越复杂,越来越难于理解的代码,而不会感到困难和退缩的程度。很多人看到复杂的代码时,自信心就已经被击溃了。C++ 和 汇编,大概是目前难度最大的两门语言。汇编难度主要是代码可读性是最低的,代码量和跳转数量是最大的。
(3)超强的对耐心的挑战,编程中遇到的困难的挫败感极强,大部分人会对此感到崩溃。编程需要付出和投入极大精力和耐心,对人的能力是很大挑战,例如,无法完成任务,无法解决某个问题,无法找到问题所在。编程领域,有很多水平体现在稳定可靠性上,当你写出一个东西,实验是成功,然而在部署后实际运行时,总是出现隔三差五出现很难解释的问题的时候,说明你的水平有限。你的水平,和你的成果的可维护性,稳定性,可靠性是成正比的,而很多人可能会比较忽视这种“不够直观和直接,难以量化”的能力。它们需要程序员的责任心和经验的积累,比如说,多线程编程方面的经验等。
编程甚至对智商都没什么太大要求,对耐心与认真要求才是最大的。
实现一个简单的功能,就需要小心翼翼的操作每一个变量,设计每一个函数,设计每一个模块,耐心的写每一个测试,最后细心的debug认真检查程序运行的过程。而在学习编程的过程,也要耐心地读文档,读不懂倒回去再读或去寻求他人帮助。别人的代码一行一行的看,看不懂自己想办法跑一跑观察一下想办法搞懂。
现代人们习惯于快节奏的生活,做很多事缺耐心和毅力,心也不静。有很多人甚至连吃饭都没耐心,而编程这项活动却是世界上最需要耐心的事之一。所以很多人说难,是因为大多人没有耐心,没有极客精神。
极客精神就是耐心,对困难问题的耐心。面对难题非但不放弃,反而很兴奋。这些都是技术大牛的特质,也是我们常说的天才。
现代编程有了高级语言,其实已经简化了太多。我有时候没耐心了,就去想想几十年前,前人的打孔编程,插线编程。他们需要的耐心比我们现代要多几十倍,但他们把火箭送上了天。再想想自己有python,Go什么的,却没有什么大成就,就意识到了自己还要培养耐心。