我们未来的路--现代软件工程

  今天在博客员中看到了一篇博文,是关于现代软件工程的讲义,可以说看了之后,我想了很多,也逐渐开始对未来有了一个较为清晰的认识。

  文章链接如下:https://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html

一.我的疑问。

  首先该讲义开篇的三个例子可以说就完全符合我的疑惑:
  1.学了用不上的为何要学,比如说,尤其是在C/C++的指针方面,学过的都知道指针在编程中的复杂性,可以说因为指针,这门语言开始“绕”了起来,但是现代更为常用,流行的一些语言java,Python,似乎都已经废除指针了,那为什么我们还要绞尽脑汁去学习呢,而且不止我们,似乎每一位程序员在入门之时,几乎都要接受指针的考验,但是,之后也是基本都用不上的,指针的定位到底在哪呢,他到底是重要还是不重要呢。

  2.为什么我的程序满足了作业的要求,运行之后的答案也完全正确却拿不了满分呢?但是有的同学却可以,我们的结果一样为什么分数却有所差别,程序的优劣该如何评价?

  3.别人的代码看不懂该怎么办,之后工作了,代码更为冗长,出现类似情况该如何面对?

  以上三问,可以说是困扰了我良久的了但是今天,结合上我之前可能看到的,听到的,似乎有了些眉目。

二.如今的我对以上三问的看法

  首先,是第一个问题关于指针的新的看法,可以说刚学Java的时候我是真的比较开心的,因为终于不用指针了,不用再担心因为,野指针,指针越界等等所带来的困扰了,但是记得有一次班主任问了我们这么个问题:

  String a="abc";
   String b="d";
   String c="abcd";
   String d=a+b;

那么d==c输出的是false还是true呢?

扫描二维码关注公众号,回复: 9756457 查看本文章

再如果有一个e="abcd",那么c==e是false还是true呢?

我当时就开始分析了,因为Java是万物皆对象的形式,那么由于c和d是两个不同的对象,那么显然这个等号是不成立的第一问是false,猜对了,那么很显然,第二问也是false了,但是又觉得老师应该不会讲两个原因相同,结果也是相同的列子吧,所以犹豫不定,后来由于时间关系,老师让我们自己去试试,并未给出解答于是就有了下面这段自己尝试的代码:

    

                          2-1.源代码截图 

结果为下边

                          2-2.源代码结果截图 

显然,c和d是不等的,但是c和e却是相等的,可是这和我刚才的分析显然是有出入的,直到后来忘了是什么时候从哪里看到的,似乎是用了指针来解释,我觉得十分的合理,想来也是,编程语言是在继承中创新的,虽然指针是没了,但是这种机制似乎一直保留着,我们却依然可以用他来解释许多情况。 要我说,指针就想是哲学一样,本身似乎已经渐渐没有了实际的用处,但是可以解释,说明,指引许多的事情,我现在把他称之为程序哲学。

  第二,何为优秀代码,这个其实我在学习完数据结构后我认为我了解了,但是看了这篇博文后,我觉得我所定义的优秀与实际上的优秀似乎并不是完全相符的,更严格的说我现在所认为的优秀代码,只是现实需求的优秀程序中的一个部分。学完数据结构我们知道代码的好坏可以从时间复杂度和空间复杂度上来判断,我们的结果也许是一样的但是我们的代码的时间复杂度,空间复杂度都可能是不相同的,所以优劣是可以判断的。但是现在我认为这种优劣只是产品的一个方面,正如博文所说,“hello world”程序完美了吧,优秀了吧,没有bug了吧,但是这个程序的实际意义大吗?我们会为了这么一个完美的代码而狠下功夫研究吗?显然不会啊,所以优秀与否不该单单有我们自己评定,甚至不该单单由同行评定,而应该由涉及此项目的所有人,从不同的角度来进行评定,正如博文中提到的例子一样,对于bug的判定,不同的人处于不同的目的、立场会做出不同的判断。而开发团队要做的便是做出一个相对合理,符合大多数人意愿的判断。

  第三,其实这也是大多数中国程序员的现状,其实包括我在内,许多人把编程当作一个创作的过程,是艺术,应该有自己独特的风格,然而殊不知也许正因为风格各异,导致同行间甚至团队间的交互合作都成了一定的问题,当然这也并不是说有自己的风格不好,而是说我们应该在保证合作成立的前提下发扬自己的风格,不然很可能出现博文开篇第三条的那种情况。当然这需要我们所有人一起努力才行。我也忘了从哪听到过,为什么印度的IT行业发达,因为他们的代码更为系统,不同程序员间的合作更为顺利。
三.现代软件工程

  那么现代软件工程到底怎么样的呢,相信百度一下都会知道答案:

  软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
  在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。

  然而在我看来软件工程其实就是一个过程,一个什么过程呢?从现实到团队到用户再到团队的一个循环往复的过程,正如博文中所举的那个四年级小孩的程序员父亲二柱的事情一样:

  “

移山公司程序员二柱的小孩上了小学四年级,  老师让家长每天出30道四则运算题目给小学生做。二柱立马就想到写一个小程序来做这件事。 这个事情可以用很多语言或者工具来实现:

Excel, C/C++, C#, VB, Unix Shell, Emacs, Powershell/Vbscript, Javascript, Perl, Python, …

请大家估计写好这个程序需要的时间.

我想程序员用自己最擅长的工具, 一袋烟的功夫就搞定了。

二柱一下打印出好多份不同的题目, 让孩子做了。老师看了作业之后, 对二柱赞许有加。  别的老师闻讯, 问二柱能否扩大他的影响力, 编个软件, 给二年级到四年级都用,  多了一些小小的要求:

  • 题目避免重复
  • 可定制(数量/打印方式)
  • 可以控制下列参数:
  • 是否有乘除法
  • 是否有括号
  • 数值范围
  • 加减有无负数
  • 除法有无余数
  • 是否支持分数 (真分数, 假分数, …)
  • 是否支持小数 (精确到多少位)
  • 打印中每行的间隔可调整

小同学兴高采烈地拿着需求回来了, 跟老爸说 – “老师明天就想要!” 现在大家估计做好这个软件需要多长时间。

我们假设二柱熬夜做出了这个软件的一个初始版本,  交给老师了。  过几天老师又问: 能否把这个程序放到学校的网站去,  再多一点点要求, 支持二元一次方程,  能开根号,  并且让所有人可以通过网页订制各种类型的四则运算作业.   二柱同志可能会想– 这是多复杂的一个工程哪! 他花了两个周末, 做出了一个版本.学校老师又有要求, 既然已经做得这么好了, 再多一点点要求,  让同学直接在上面做题好了。
不久学校说:干脆我们推广到全国,  老师给学生布置作业,  学生做作业, 老师批阅, 家长通过手机获得学生的进展... 都在网上搞定! ”

            例子来源:https://www.cnblogs.com/xinz/archive/2011/05/22/2053838.html



  从现实中发现需求,然后我们提出了想法(idea),然后实现它,回到用户(老师)的手里,用户很满意,并提出了进一步的需求,然后又回到了二柱(团队)的手上而这个软件也逐渐的走向壮大和成熟,当然耗费的时间也越来越多,用户范围越来越广。而在这么一个过程中我们的程序语言、算法是基础,而之后的一系列循环往复的过程才是决定了软件命运的,万一老师没有特别满意,或者说满意了但也仅限于此了,那么这个软件,或者说这还只是个程序,就只能止步于此了。

  最后我认为软件工程是计算机应用方面的商业模式。而我们除了单单学习基础的语言,算法之外还应该学习其他的思维,这样才能让我们变得真正的出类拨萃。会编程没什么,该怎么样编程,什么人适合编什么样的程序也许这些才会是在软件工程中更为重要,且被看重的东西。

猜你喜欢

转载自www.cnblogs.com/Ham-Leery/p/12462067.html