大三了,不知不觉就大三了,两年的“软件”之路,摸爬滚打,终于让我渐渐的走进了计算机的世界。期间的心酸.......只有经历了才知道。
在软件工程之路上,曾有多少次想放弃编程学习。和很多人一样,当初,我读软件工程这个专业,纯属是为了就业,为了以后能有份比较高薪的工作,其实,我中学最好的科目是数学,也不是一般好那种,而是特别突出的那种,填志愿的时候,曾经想过大学去读数学,但是碍于当时考的分实在太低了,读数学的好,感觉在一般的大学读出来,也不咋地,所以就选了一个据说是很有钱途的专业(从小到大都没怎么碰过计算机)。大一的时候,我还是很有激情的,基本上所有课都提早学,大一就把大二的部分课给学了,理论课方面的话确实学的比较快,但是,当时所学的编程(第一次所接触的是html)却让我吃尽了苦头,因为,高中的一些学习特点,我那时,在学Html的时候,总是想知道为什么这么写,以及从本质去思考它的由来。此后学的很多语言都是如此,总想知其所以然,而缺少对这些语言的一个练习,等学到大二的时候,已经完全对这个专业产生了厌恶,对当初的选择已经后悔的不要不要的了。大二的那段时间,不知道有多少次,在梦中怀疑自己的选择到底是正确还是错误,怀疑自己在编程上的天赋,梦想着去学数学..........特别是,每当参加acm比赛的时候,就在想为啥现在的比赛都被别人虐的不要不要的,而当初的自己基本上是虐别人的节奏。
然后,大二的一整年,都是八点起来敲代码,半夜两三点睡。
---------------------------------------------------------------------------------------------分割线-----------------------------------------------------------------------------------------------------------------------------------
软件工程,到底是什么呢?我们到底怎么学,才能在软件工程上学的更好?数学和算法到底对软工有帮助吗?都说算法好,那算法又应该怎么学?
软件工程,顾名思义,是一门用工程化的思想去开发软件的学科。它实际上是一个工程,并不是大多数人所以为的,软件工程就是开发软件这么简单,写写语言代码这么幼稚。我本科所处的是一所非常一般大学,我刚来这个大学,以前的学长学姐给我们灌输的关于怎么学好软件工程的建议大多都是,你要多去网上一些慕课看视频,多学技术,一旦你会做一个什么什么项目(比如中型网站呀,app呀),你就算在这个领域学的差不多了,算是大神了。我觉得不仅仅是我们学校吧,很多大学藐视都是这样子的情况。其实,在计算机这个领域,学的东西真的有很多,一些技术固然是有必要掌握的,但是完完全全的以这些技术为重点,认为学好这些技术,就算是学好这个领域,那真的是对这个领域的一个蔑视。软件工程,一个计算机领域最偏编程的东西,其实它最为本质的东西和计算机科学一样,那就是它相应的基础课(操作系统、网络、计算机组成原理,数据结构等),以及数学和算法。其中数学和算法,直接决定着你将来走的有多远。
数学和算法以及基础课,在计算机领域中极其的重要,是我们最需要学好的!前段时间,曾经看到有篇文章,大致讲的是,现在的开发都是基于新技术、基于框架、基于封装进行开发,花时间去学数学呀,算法呀,基础课的话,真的没什么必要,因为,开发的时候,根本就用不到!说实话,从完成软件产品的角度来说的话,还真是,因为我大二做了一年的项目,所以做项目的流程也非常清晰,做的过程中,基本上所有的组件,网上都有,我们只需要在其上修修改改就能完成一个“秀色可餐”的作品。你想要什么技术,在开源的世界,总能找到你想要的。但是,你想过没有,你自己能不能做出一份属于你想法的作品,如果,没有这些资料,你还能做的出吗?而我相信所有的有梦想的程序员,都想通过自己的知识去创造一个属于自己想法的代码,而要做到这样的追求,就必须懂计算机基础课中的知识以及数学和算法。不仅如此,如果你在这些知识学的好的话,你在开发软件的时候,会特别的有感觉,真正的做到了知其然知其所以然的境界。举个简单的例子吧,操作系统,这门看似与硬件打交道的学问,其实,如果你善于学习的话,会从它的一些机理上学到很多的启发性的思想,比如,批处理思想,你想过没有,一些管理系统,现在很多是人工的吧,但是,我们其实可以写一个批处理文件去解决这些人为操作(不是写在后台逻辑那么简单,而是直接给客户,让客户去启动它解决)。还有其它的一些算法,也特别的值得在做软件解决问题时思考,比如信号量机制。数学和算法就更加了,现在的机器学习,说实话,你如果数学没学好,那机器学习基本上已经不是你的菜了。这种本源的知识,看似用不到,但是只要你花心思琢磨琢磨,就会发现,它的博大精深,对你对一些技术的理解,学习,创造,非常非常有帮助。
当然,在软件工程中,你的编程功底也要学的好,而学编程的方法,就是多敲代码,多练习一些项目。对于一门编程语言,如果你要去知其所以然,说实话,这非常难,它不是数学,它根本无从证明及推理,很多东西,特别是面向对象的语言,都是封装好的。学一门编程语言,学的最快的方法,就是一个礼拜的时间记住相应的语法后以及使用场景后(就是单纯的知其然),就开始大量的敲代码,直接敲,不要去探究为什么。
总而言之,在软件工程的理论学习上,就是要重基础,技术学习上,切记不要知其所以然,只需知其然就可。
最后,来讲讲算法的学习,算法,这个东西,说实话,和数学真的不一样,虽然两个都是产生于现实世界,但是数学,它的理念就是,用数学去描绘这个世界,对于内容,它是用函数去表示事物的联系和自身特征,用抽象去开拓每一个领域的研究。但是,算法,它说实话真的不是在描述研究什么,而是一个决策,是解题的步骤。所以,我们在学习其时,真正着手是:
一、对解题步骤要清清楚楚,十分清晰-----------可以通过记忆,最好方法是通过题目不断的练,练的时候多想。
二、变量
三、明白,此算法的解题场景。
四、可以去研究算法的推导。