由于发了一些教学视频,近期经常有网友向于老师提出自己的困惑,希望给予解答。我摘取了一些有代表性的问题发出来,大家可以一起探讨:
网友问题:
于老师您好,我不算是完全编程小白,但是也差不多,仅仅是知道一点点编程的东西,也写过几个最简单的c++程序,但是自己去设计程序根本不知道如何下手,想系统的学习c++,数据结构,算法,您有什么好的建议吗?真心想学编程,完全没有学过c,就是从c++起步的。
我写的几个程序也就是“helloworld”之类的,不算是写程序,只能算是照着书本敲过代码吧应该[捂脸],不为奥赛,只为掌握一门编程语言,学习一种编程技能。
我个人用的是VS,您看可以吗?
我个人想要系统的学习c++界面设计MFC数据结构算法以及数据库,愿意花时间,但是看书又感觉枯燥,有些东西不是那么的理解透彻,也看过一些课程教学视频,感觉效果好一些,就是想问一下您有什么好的建议吗?系统的去学习掌握这些编程的相关东西。谢谢老师。
于老师解答:
设计程序不知道如何下手,这就是编程初学者最常见的困惑。要想解决这些困惑,我们要明确一系列的问题。
学习目的,软件项目与软件技术研发的关系、学习路线、如何学习,如何取舍等。
我们学习编程、软件研发的目的是什么?不外乎两种,一是从事软件项目的开发;二是从事软件技术的研发;这两者有什么区别呢?
软件项目包括:软件工程项目、软件产品、小程序等。就是说你最终要做出“东西”出来。
软件技术研发:一般是指专门从事软件的一些高端的技术研发,比如扫描技术、人像识别技术、指纹技术等等,研发出的这些尖端技术可以用在软件项目或软件产品上。而软件项目或软件产品只使用已有的技术。
从技术难度上讲,当然软件技术的研发要高于软件项目的研发。这两种工作对人员的基础要求是不同的。软件项目人员只要能熟练使用软件工具,了解掌握基本的软件技术就可以胜任了。而软件技术研发需要有很高的技术基础,尤其是在数据结构、算法等方面要有很高的基础。举个例子,我只会一种冒泡排序,我就可以参与项目研发,但我要从事技术研发,可能需要我掌握5种甚至更多的排序方法。还有,从事项目研发,可能只需要理解栈、队列等最基本的数据结构,就可以。但从事技术研发,可能就需要深刻掌握栈、队列、树、图的数据结构。从事项目研发,可能只需要理解掌握结构化及面向对象的概念就可以,但从事技术研发,则更多的是算法、解决问题的能力。
当然,初学者很可能不知道自己将来会干什么,所以需要制定学习路线:
1、基础的:
c++、数据结构、算法,达到计算机二级水平。
2、进阶一点的:
JAVA、C#的学习,也要达到二级水平(有C++基础,学习起来会快一些),javascript的学习,HTML,掌握web编程
3、数据库的学习:
掌握数据库的基本知识、sqlserver的操作、sql语言、SQL长语句的编写
4、了解一些国内的软件项目开发平台的使用,学会安装、操作、建立简单的项目。有很多,自己百度搜索,逐个安装测试比较。
开发平台达到以上4点,就可以从事软件项目开发了,绝对没有问题。你可能会问,掌握到什么程度算可以呢?最基本的要求是能够看懂别人的程序、能修改成自己需要的,知道自己需要什么,能在网找到自己需要的。
有点绕是吧,我举一个例子。我的讲座里有几个编写游戏的例子,如果我以前从来没有编写游戏的经验,直接动手写一个游戏的程序,肯定是有难度的。好,我在网上搜索一下C++游戏源码,会有很多结果,你下载下来发现,有很多超级复杂的、根本看不懂的,也不是你需要的,那就过,你一定会找到你能看的懂的,又是你想要的源码!那你就从别人的源码里分析吧,经过分析,这个游戏其实是由游戏引擎,也就是游戏架构+游戏代码组成的,游戏架构包括初始化画面、难度、开始、控制、画面刷新等等功能,我们完全可以根据这个引擎创建自己的游戏,我创建了两款游戏给大家做了讲解,当然我还可以通过这个引擎创建更多的符合这类游戏特征的游戏,比如飞机大战、推箱子等,这些游戏产品当然就是属于我开发的了。
做软件项目其实也是一样,我们做软件项目,不会从零代码开发做起的,甚至不会使用VS。现在快速开发项目基本都是平台化开发,框架都是搭好了,只需要我们把业务代码填进去就好了,这实质上就大大降低了对程序人员的技术能力要求。
如果希望自己能在更高层次上有所发展,则需要更深刻地理解数据结构与算法。
你的问题中提到的类似界面设计MFC,其实都属于软件使用的问题,用某种软件就需要学习和掌握该软件的“功效”。包括对一些开发平台的学习。其实无论你学到多少,我都可以说你只学到了1%,还有99%你不会,我也是一样,我还有许许多多不会的东西。但你学会的1%里面一定要包括“如何学习你没有掌握的但你需要的知识”。两个意思,一是不会学习方法,你就连1%都没有达到,二、需要什么学习什么,不可能在工作之前把所有东西都学会再工作。就比如你说的MFC,百度一下你就会知道MFC是什么,但不代表你就要完全掌握,可以慢慢来。其实我的那两个游戏教学就是MFC编程,我能用MFC编程,不代表我对MFC精通,能看到懂、会用、会改,基本就达到了我的要求。
MFC框架还有,大家可能看到我在视频里讲解C++头头是道,但我的C++水平也就是二级水平。因为我现在没有使用C++工作的机会,因此,没必要弄得更精通,就算我把C++弄精通了,又能怎样,还有N个语言我不精通。如果某一天,需要我用C++做项目,我一定会找到项目需要哪些C++的技术,从而找到解决方案,从而完成工作,这就够了。
关于学习方法,就是多看多练。如今有了互联网,基本任何问题、需求都可以在网上找到答案,包括你想学习的知识内容,都可以在网上找到文字、PPT、视频等教程,有多有少,只要认真看下去,你一定会提高。
我们回到最开始的问题,设计程序不知道如何下手。归结起来,就是用别人的框架改,用开发平台完成,建立自己的框架。VS是微软的编程级开发平台,如果你想利用VS创建你的项目,你可以详细学习VS使用教程,不断地找教程,找到多多的教程,筛选你能看得懂,对你用帮助的部分,你就一定会用VS创建各种项目了。国内还有很多项目级开发平台,能完成项目的开发,如果你认为有需要,你就要认真学习平台。
说了这么多,总结一下,初学者需要先把基础打好,学会学习方法,不需要对某一方面精通,可以在后来的学习中不断加深理解,不断扩展知识范围,只要坚持不断地学习,一天、两天、一年、两年,你一定会有收获。