为什么都说编程难,编程到底难在哪里
给你总结下编程的难点吧:
1、初学者。编程是用计算机语言和计算机交流,你输入什么,你期望计算机理解之后,输出你需要的结果。所以这个过程可以概括为“输入–计算–输出”。学习一门计算机语言,说难不难,说易也不太容易,为什么呢?如果你是编程的初学者,你要上手一门语言,是非常困难的(天才除外);但如果你是精通一两门语言,再去学其他语言,可以说一个星期就能熟悉。所以,对大部分初学者来说,编程语言是难点。
2、编程思想。程序员一定要有编程思想。跳过初学者这一关,假设你可以对任何语言顺手拈来、即插即用,那么,你水平就一定很高了吗?其实不然,这只能说明你学习能力上一层楼了,但并不说明你就多么厉害。比如,你熟悉设计模式吗?设计系统的时候有没考虑扩展性?是否考虑到性能问题……如果整天只做crud,不去关注以上问题的话,瓶颈是很难突破的。那么编程思想何来?就要平时多阅读这类的书籍和文章,比如设计模式,比如高并发系统设计相关知识等。除此以外,还要多思考,为什么这样设计,所谓学而不思则罔,思而不学则殆!
3、沟通能力。好了,即使你掌握多种语言,又可以把系统设计要得很溜了,但是如果你是个不会说话的哑巴,你就无法表达出自己的思想,无法向老板展现你的才能,那么你的职业生涯会受到很多限制。我自认为本人的沟通能力是弱项,自己也在不断努力改善这点。现在每次参加讨论的时候都会积极发言,表达自己的观点,除此之外还报了一些口才课,来提升自己的表达能力。
希望能帮到你,望采纳!!
我先回答一下工程上的难:
我们做一个比较, 就是开发一个大型软件, 和设计并建造一栋摩天大楼, 究竟哪个更难, 为什么?
实际上这个比较一旦抛出, 软件开发的"难"就立马显现出来了。
摩天大楼一旦盖起,将不再,也不可能“更新版本”,更不可能在建筑结构上进行“重构”,比如一个一百层的摩天大楼,不可能说过两个月发现地方不够住,然后再加五层,又过了两个月发现某个房间的设计满足不了人们日益增长的需求,将整个房间扩大两倍,究其原因,就是因为“建筑”这个东西太不灵活了,你如果想“重构”这个摩天大楼,几乎只有一个办法:炸毁,推倒重来。
而对于软件来讲,它本身的一个灵活性,导致了它可能在不破坏原有的大部分功能的前提下进行一定的功能性改造,在改造的过程中,原有的一些功能模块的更改,可能导致之前的一些文件或环境, 或应用程序在这个新的版本下出现不兼容的现象,所以它要保证旧的东西在新的东西下能成功运行。
一个东西越是牵扯的东西多,越和环境耦合,和“用户”耦合越深,和“自身”耦合,和“历史”耦合越深,它的“更新”就越难,而“重构”是多次更新之后的“必然结果”。
这就是为什么摩天大楼几乎无法进行功能性更新,因为建筑这个东西本来就是一个“超级耦合体”,你改变墙壁的厚度,会减轻它的重量,但于此同时因为墙厚度降低,它本身的抗压刚度和抗扭刚度也发生了降低,所以后果可能还需要重新计算,墙里面的电线会不会因为墙的厚度改变而需要重新布线?而且不仅如此,墙的厚度还会改变房间的大小,这是它和其自身的高度耦合。
它和用户的耦合性也很深,因为这个房间的一些地方有可能早已住了人,原有的位置放置了很多用户的东西,比如一些很重的家具等,你对墙重新施工,就意味着你要强迫用户更改它们原有的使用习惯,甚至可能让用户原有的一些家具无法在新的版本中放进去,这是用户的耦合性。那么类比软件,比如我们都知道的excel,这个软件开发了二十多年,你在2003版的excel里编辑的,十几年历史的excel文件,你觉得可以在2018版的excel中打开吗?这听起来很不容易,但是微软做到了,这就是为什么说现在除了微软几乎没有公司有能力开发出这样的软件,原因之一就是它变态的兼容性,长达十几年的时间跨度,版本跨度,保证文件的兼容性,这本就很了不起。