编程到底难在哪里?
谢谢邀请!
作为一名IT行业的从业者,同时也是一名教育工作者,我来回答一下这个问题。
首先,编程可以分为三个阶段,第一个阶段是对于编程语言自身语法的理解,这个部分虽然也具有一定的难度,但是大部分人,即使没有任何编程基础,经过一个系统的学习过程,都能够掌握。
第二个阶段是通过编程语言来完成各种逻辑操作,这个部分正是编程的难点所在,此时需要掌握各种算法和数据结构。实际上,编程问题说到底就是数学问题,但是并不是数学基础好的人,就一定能够顺利掌握编程,这中间还需要一个转换的过程,关键就在于算法设计能力的培养,这个过程比较考验程序员的逻辑思维能力和抽象能力。
第三个阶段是通过编程来完成各种资源的整合和操作,这个部分也是编程的一个难点,此时对于程序员的知识结构有较多的要求,涉及到操作系统、计算机网络、数据库等计算机基础知识。随着当前云计算和大数据的发展,目前云计算平台和大数据平台对于程序编写的影响越来越大,因为程序员需要借助于这些平台来完成资源整合。相对于算法设计来说,虽然这部分的难度也比较大,但是经过一个系统的学习过程,程序员的资源整合能力也会越来越强,这部分难点是完全可以通过努力来解决的。
对于很多初学编程的人来说,学习最大的难点在于如何建立自己的编程思想,而要想建立自己的编程思想,可以从编程过程和编程方法两个方面入手。虽然不同的编程语言有不同的编程过程,但是说到底就是一个抽象问题,而要想提高自身的抽象能力,多做实验是非常有效的方法。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
作为基层程序猿多年,总结一下编程的难点:
1、初学者。编程是用计算机语言和计算机交流,你输入什么,你期望计算机理解之后,输出你需要的结果。所以这个过程可以概括为输入计算输出。学习一门计算机语言,说难不难,说易也不太容易,为什么呢?如果你是编程的初学者,你要上手一门语言,是非常困难的(天才除外);但如果你是精通一两门语言,再去学其他语言,可以说一个星期就能熟悉。所以,对大部分初学者来说,编程语言是难点。
2、编程思想。这个是我第一家公司的部门老大常给我灌输的重中之重:一定要有编程思想。跳过初学者这一关,假设你可以对任何语言顺手拈来、即插即用,那么,你水平就一定很高了吗?其实不然,这只能说明你学习能力上一层楼了,但并不说明你就多么厉害。比如,你熟悉设计模式吗?设计系统的时候有没考虑扩展性?是否考虑到性能问题如果整天只做crud,不去关注以上问题的话,瓶颈是很难突破的。那么编程思想何来?就要平时多阅读这类的书籍和文章,比如设计模式,比如高并发系统设计相关知识等。除此以外,还要多思考,为什么这样设计,所谓学而不思则罔,思而不学则殆!
3、沟通能力。好了,即使你掌握多种语言,又可以把系统设计要得很溜了,但是如果你是个不会说话的哑巴,你就无法表达出自己的思想,无法向老板展现你的才能,那么你的职业生涯会受到很多限制。我自认为本人的沟通能力是弱项,自己也在不断努力改善这点。现在每次参加讨论的时候都会积极发言,表达自己的观点,除此之外还报了一些口才课,来提升自己的表达能力。
好了,以上总结了三点本人以为编程的难点,如有不当之处,欢迎批评斧正!
编程的难主要是下面几方面:
1、软件开发是脑力劳动,而一个人的脑力是固定大小的,比如超过100万行代码之后,基本上无法再增加理解能力了。
2、软件开发是从一个无到有的过程。因此无法判断最后做出来的结果是否就是我们需要的。导致反复地修改,这个修改的过程,可能是一个无底洞。
3、现代的软件都是团队合作开发,导致配合问题难以解决。因为每个人都有自己的想法和经历,导致代码不能相互理解。
4、最后软件开发都是有时限性,时间压力之下,无法做到完美无缺,因此技术债越来越多。
编程到底有多难?你有什么看法?
编程是有点难度的,就像我们从小都开始学习语文一样,但是论述同样的事情,有的人能论述的好,而有的人却依然论述的不好或者不完整。由此可见,即使是从小都在不断学习文字,语法,叙事方法等,依然不能把文章写的很好,而编程也是同样的道理!
现在任何一种编程语言,都包含很多的关键字,函数,语法等,这就使得编程和写文章很像了!
写文章需要词汇量,需要文章的结构明晰,需要论点鲜明,论据有说服力;而编程也是一样的,需要对很多函数指令的用法了如指掌,也需要整体的架构构建的合理,层次清晰,还需要每一个事件属性动作都被正确设置和触发。可以说,很多事情的本质是一样的,我们学习日常的语言,和学习计算机软件的编程语言,有一定的通用性存在!而难的原因,还是因为量太大,容易忘记和容易考虑不全面!
函数指令等用法容易忘记,考虑不全面就造成一些bug,可能一般的调试也不能发现,只有经过很多的验证测试才能发现一些bug,而这些bug的产生其实还是因为条件分析考虑的不够全面!
对于我个人来说,编程难的一个原因可能是因为现在主流的编程软件,还是以英文环境为基础的,有时相关的帮助解释翻译不到位,也会造成一些使用上的困扰!当然,可能计算机技术的相关发展,很多概念和解决方式也都是由外国人主导实现的,这就造成有些源头性的概念理解的不够清楚,或者不能深入理解当时的技术工况!
就简单说这么点个人意见,谢谢!
编程跟艺术创作类似,通过编程创作出伟大的软件产品,向我们经常使用的电脑的Windows系统、MacOS系统、手机的Andriod和IOS系统、微信、Fackbook等社交软件都是优秀的软件产品,编写的软件根据应用层次不同简单分为基础软件、中间件软件、应用层软件,各层次软件解决的问题不同,难点各有不同。1、基础软件
基础软件是最靠近硬件的软件系统,例如我们经常用到的电脑操作系统Windows系统,苹果电脑的MacOS系统,Linux系统,手机的Andriod和IOS系统,还有编译器系统等,这些软件比较基础,很多软件都依赖基础软件,这类软件对编程技能要求很高,软件比较复杂,涉及的模块比较过,工程耗资巨大,向Linux系统,Windows系统这样的操作系统,都有上百万行的代码,工程很巨大,有成千上万的软件工程师维护,我们在基础软件远远落后于欧美国家,前一段时间华为的手机被禁止使用Andriod系统,导致华为手机在国外销售大跌,基础软件是我们需要奋起直追的。
2、中间件软件
像数据库软件,缓存软件,消息队列软件都属于中间件软件,这些软件解决某一领域的问题,像数据库软件Oracle在金融、电信领域数据存储的应用广泛,赚钱了巨额的利润,这类软件对编程要求也比较高,要求开发的软件系统比较稳定,我们在这方面已经在奋力追赶了,像BAT这些互联网大厂已经有自研的数据库系统、缓存系统、消息队列系统等中间件软件已经可以跟国外的媲美了。前几天报道说阿里的OceanBase数据库的性能基准测试已经遥遥领先Oracle了。
3、应用层软件
像社交软件微信、微博,天猫、京东的电商系统,手机支付系统,360,搜狗等浏览器等都属于应用层软件,这类软件解决用户的需求,需要熟悉用户的需求,将需求转化为软件产品,需要解决系统的高并发,我们在这方面已经完全和国外媲美了,甚至已经超越他们了,像手机支付系统已经遥遥领先国外了。
我们的软件行业在20、30年的发展,已经在应用层软件取得巨大进步,中间件软件近几年也取得不小的进步,但是在基础软件方面落后很多,需要我们奋起直追。
编程难,还是不难?每个人都会有自己的看法。但有一些观念或者经验,是值得借鉴的,如带着课题去学习;听网课;从宏观到微观等等方法,都值得借鉴。
带着课题去学习,效率最高。
一个人什么时候学习效率最高?当然是有一个很急迫、很重大的任务交给你完成时,效率最高,能最大限度激发你的能动性。
1992年之前,编程语言只会BASIC,FORTRAN77,宏汇编,dbase等。但在92年5月份,参与了一个85攻关项目,指定要用C语言做开发。
接到任务后,找到一个有TC开发经验的工程师,先把TC系统软件在我们的笔记本上安装好。然后,他给我们演示了TC的编绎、编辑、调试、开发配置等等操作,我们也一一照做了。紧接着,就是一个简单的带图形的编辑软件的大致做法,如,几大类库函数介绍,如io、图形、文件操作、字符串操作、数学库、内存管理等;库函数的调用方法;对VGA、分辨率模式的设置;定时中断、串口中断等用法。最后,给我们推荐了一套共三本的C语言编程语法、库函数用法的书。当天,我们自已做了一个显示helloworld!的著名程序,做为c语言开发的开端。两周后,我做了一个能够编辑64KB字符的编辑程序,可以存储、打开文件,可以用malloc,free动态管理内存,可以用鼠标选择按钮,可以进行两个电脑的串口通讯。。。。。总之,学的非常快。
相反,我的一些同学,毕业后,买C语言的书看,四五年后,依然一知半解。为什么?没有相关c语言的开发项目,根本记不住。从宏观到微观,先框架,后细节,采用逆向学习的方法。
VC在上世纪九十年代后期逐渐被国内软件开发者所接受,但当时的资料很少,能借鉴的,就是微软MS的最有名的MSDN。这套软件当时花了两万多RMB,650MB的光盘,共三张。还买了windows编程,VC编程,美国人编的中文译本。
第一步,主要学windows的工作机制,如消息Message传递机制、线程及进程、内存管理机制、IO访问方法等等,从宏观上,认识了windows,认识了它与MSDOS的异同点。
第二步,VC的框架构一造。单页面、多页面、属性页、资源文件、MFC类的层次结构、类的生成及调用等
第三步,再次分解细化,如:资源文件中,文本、编辑、按钮、单选多选、组合框、进度条等的应用;字符串CString类、文件类、CDC、数学函数等等的应用。
按照这三步,大结构、大框架,逐步细化到一般的编程、编绎找错、执行程序。
很多人学习,总是按步就班,在语法细节上花大力气学习,却不想先搞安装VC,做一个学习平台,去实际编程,测试、学习语法,去逆问学习。
曾经有个学生,整天纠结i与i到底区别在那,老是在说
i;
if(i1)
与
i;
if(i1)
到底有什么区别。我给他说没区别,他愣是不相信。
最后,我告诉他,用在
for(i0;iMAX;i)及for(i0;iMAX;i)时,才有区别,他才恍然大悟。
还有,在函数、变量中的用法,有的人也是永远糊涂。
写法、用法是固定的,编程实践一次,永远记住了;看书听讲,过几天就忘了。
总结:编程,看似简单,实则是一个系统的科学,涉及到计算机、操作系统、各种系统开发环境等等基础科目,这些在学校一定要掌握好。有了基础,具体到JAVA,C,C,PYTHON的编程,应以项目为主导,按照工作中的具体项目,进行深入学习,这样不仅效率高,而且记忆深刻。
把大象放进冰箱分几步,1开冰箱门2放大象3关冰箱这是正常思维。编程思维要考虑,各种假设比如,冰箱大小,大象大小,大象能死吗,不能死怎么办,可以死怎么办,冰箱是一台还是多台,大象是亚洲象还是,非洲象,还有各种环境都要用逻辑排除过滤。一个简单的游戏考虑因素都这么多,何况具体到某个案例项目。语言无非变量,常量,语句,语法等等,最重要是解决问题思维,所有可能性都要想得到,并把这是因素或排除,或继续执行
难就难在程序员这个角色。
大部分人理解计算机只是工具,而自己是主宰者。利用编程达成自己的目的。
我理解的编程者是计算机的话事人,需要将现实世界抽象,析构,翻译成计算机能理解的程序,让计算机理解现实世界。这也是编程语言隐喻的由来。
因此,计算机世界自有其运转逻辑,也自有其自己的主宰,而话事人的顶尖者就如同《黑客帝国》的neo一样,对于两个世界的无比深刻理解,来建立起中间的桥梁。
所以,编程多难?要用计算机的思维抽象现实世界,然后以现实世界思维来设计计算机。
最难的就是你把需求转化成程序的设计,如果一次没做过,90的程序员只能等别人设计完自己去实现
很多人认为编程的难点是自己的英文不好,看不懂英文,其实不然。
其实编程用到的常用英文单词并不多,也就几十个,普通人一到二天就可以掌握这些单词,那么编程的难点到底在哪呢?以我多年的编程经验,认为编程的难点有二个:一个是理解能力,一个是逻辑思维能力。
关于编程中的理解能力,我先给大家说几个编程中的几个常用名词,如命名空间,条件反射、依赖注入,什么是命名空间呢?命名空间各种语言使用的一种代码组织的形式,通过名称空间来分类,区别不同的代码功能。什么是依赖注入呢?依赖注入就是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。大家通过上述的解释理解了这2个名词了吗?肯定大部分人看了是云里雾里,编程中理解能力的重要性从这几个常见的名词解释就可以略见一斑。
编程中的逻辑思维能力的重要性更不用说了,大家是不是经常在网络上看到秃顶的程序员呢?程序员为什么容易秃顶呢?就是因为编程过程中思考解决逻辑问题太多伤脑导致的,编程过程并不是大家电视中看到的轻轻松松几秒钟就敲几十行代码,大部分的编程过程是在解决程序中遇到的各种逻辑问题,举个例子:我们做一个简单的日历小程序,是不是要考虑日期和星期几相对应,要不要考虑月大月小的问题,要不要考虑农历和公历日期的对应呢?这些都是逻辑问题,需要花脑经去解决的,没有一定的逻辑思维能力不是那么轻松就能解决的。
综上所述,编程难点就二个,一个是理解能力,一个是逻辑思维能力。