编程专业怎么样,有没有前途啊?

本文章内容来源于网络搜集整理,并不能保证百分之百准确,仅供参考,请使用者务必根据自身情况使用

  • :学职平台:职业微视频:
  • 《专业博物馆》:软件工程
  • 《306个专业详细介绍、全国各高校学生、毕业生分享感受.doc》:软件工程

  • :学职平台:职业微视频::

软件工程师英文是Software Engineer,是从事软件职业的人员的一种的认证,通过它说明具备了工程师的资格。工程师是从事相关工作的人员的统称。

它是一个广义的概念,包括人员、人员、软件工程管理人员、程序员等一系列岗位,工作内容都与生产相关。工程师的技术要求是比较全面的,除了最基础的(//等)、(SQL/ORACLE/DB2等)等,还有诸多如、AJAX、、等前沿技术。此外,关于和测试的其他技术也要有所涉猎。

是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为、、工程师、、、等等。各种软件工程师人们俗称程序员。

完整的计算机系统由两部分组成,即计算机的硬件系统和软件系统。而计算机软件是指计算机系统中除硬件以外的所有事物,一般包括计算机程序、程序说明以及其他资料等。

软件工程专业是2002年国家教育部新增专业,随着计算机应用领域的拓展及中国经济建设的不断发展,软件工程专业已成为一个热门专业。

软件工程是采用工程的概念、原理、技术和方法来开发、维护软件,把管理技术与开发技术有效地结合起来,以计算机科学与技术学科为基础,强调软件开发的工程性,培养能够从事软件开发、测试、维护和软件项目管理的高级专门人才的一门学科。

如果把计算机软件比作积木,那么软件工程则相当于玩积木的高手。

软件工程和计算机科学的区别?

软件的开发到底是一门还是一门,这是一个被争论了很久的问题。实际上,软件开发兼有两者的特点。但是这并不意味着它们可以被互相混淆。很多人认为软件工程基于和就如传统意义上的工程学之于和一样。在美国,大约40%的具有计算机科学的学位。在世界其他地方,这个比例也差不多。他们并不一定会每天使用计算机科学方面的知识,但是他们每天都会使用软件工程方面的知识。

软件工程计算机科学目标在、、这3个主要限制条件下构建满足用户需求的系统。探索正确的计算和建模方法,从而改进计算方法本身。产品软件(比如办公包和)。(比如希尔排序法)和的问题(比如哲学家进餐问题)。进度与时间表都有特定的进度与项目一般不具有设置的进度与时间表关注点软件工程关注如何为用户实现。软件理论关注的是软件本身运行的,比如,,和算法的正确性。变化程度随着和用户的不断变化,软件开发人员必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中。对于某一种特定问题的正确解决方法将永远不会改变。需要的其他知识相关领域的知识。。著名的探索者和教育家,,。,,,,,。著名的实践者,,,,。无。

许多同学不了解,计算机科学和软件工程有什么区别。其实软件工程学科是计算学科的分支。计算机科学主要从理论和数学的角度研究计算机如何工作。如果你喜欢数学,逻辑学,或者你想进入 CS 的某个专业领域,例如人工智能,机器学习,计算机安全或图形,你可以选择计算机科学。软件工程研究如何构建软件系统,包括诸如项目管理,质量保证和软件测试等。如果对实际操作方法更感兴

趣,并且想要了解软件构建和维护的整个生命周期,应该选择软件工程。计算机科学和软件工程都是学习编程和计算机科学的基础在面向科研时,两者的差距比较明显;但如果面向就业,两者的就业选择差距并不是很大。

《专业博物馆》:软件工程、

社会上对这个专业的认识误区

有些人认为,学计算机相关的专业是青春饭,到了30多岁后就没有发展前途了,总不能一辈子就当个程序员吧?这是一个很大的认识误区。实际上,软件工程专业更关注开发大型软件系统的组织方法和流程,培养学生掌握大型软件开发和管理的能力,随着经验和能力的增长,他们更能胜任越来越大的项目的组织和管理,成为千百程序员的管理者。

还有人认为,现在懂编程的人太多了,凡是理工专业都学过编程,抓来就能用。但是,软件工程专业所掌握的大型软件开发的组织、设计和管理技术,不是普通的编程技术可以比拟的。打个比方说,普通的工人稍微训练一下,让他盖个猪圈、砌堵墙没问题,但是让他去造一个摩天大楼就不行了。而软件工程培养的是有能力设计和制造摩天大楼的人才。

据阳光高考信息平台最新数据显示,软件工程专业的全国普通高校毕业生规模在55000人至60000人。最近三年,该专业的全国本科生就业率逐年递增,由80%增至95%,属于就业情况很好的专业。

软件产业作为信息产业的核心是国民经济信息化的基础,已经涉足工业、农业、商业、金融、科教文卫、国防和百姓生活等各个领域。采用先进的工程化方法进行软件开发和生产是实现软件产业化的关键技术手段。因此,为积极促进我国软件产业发展,加速我国信息化建设,增强其国际竞争力,急需培养大批软件工程领域的实用型、复合型软件工程技术人才和软件工程管理人才。

“相关数据显示,到2020年,整个中国新一代信息技术人才的需求,一年的缺口是750万人,而整个中国每年的大学毕业生也不过这个数字,但是其中计算机类专业的一共才30多万人。到2025年,这个缺口数字将达到950万。”东软睿道总裁李印杲在接受新商报记者采访时表示,目前,国内计算机软件类相关人才的需求非常巨大,随之产生的人才缺口也令人吃惊。

随着第五届世界互联网大会的召开,《世界互联网发展报告2018》《中国互联网发展报告2018》正式发布,报告显示,美国、中国、英国互联网发展名列全球前三名。从目前的形势来看,软件工程专业在未来多年内仍将是就业形势看好的专业。

软件工程专业的毕业生主要面向两类就业岗位:一类是各种规模的IT企业,从事项目管理、软件设计、软件开发和质量保证等相关岗位;另一类是进入到对IT技术依赖度很高的金融、电信等行业的IT部门,从事这些行业的业务软件的开发、测试、维护等相关工作。

例如,南京大学软件学院就业率连续多年100%,位居各院系前列,就业单位主要有Microsoft、Intel、百度、腾迅、阿里巴巴、华为、摩根士丹利等知名IT企业和金融类企业。85%以上的学生在上海、杭州、南京、苏州、深圳、北京等地就业。本科生平均入职年薪近20万。

师兄师姐都在从事什么工作

《专业博物馆》:软件工程

国内:升学方式分为保研和考研两种。从历年数据来看,继续攻读软件工程专业的学生前往国内各高校专业相关院系,其中世界一流大学建设高校 A 类的有:北京大学,清华大学,北京航空航天大学,北京理工大学,哈尔滨工业大学,上海交通大学,复旦大学,浙江大学。中国科学技术大学,华中科技大学华南理工大学,四川大学,电子科技大学,西安交通大学等;世界一流学科建设高校及科研院所的有:中国科学院大学,西安电子科技大学,北京邮电大学等。

国外:国外的软件工程相关专业有CS/ECE 等,以卡耐基梅隆大学,斯坦福大学,帝国理工大学等为代表,在美国,英国,新加坡和香港等地区有非常多的相关专业的强校,根据在校GPA,个人的雅思/托福/GRE 成绩以及比赛/科研经历等,做出不同的选择。

软件工程专业毕业后主要在新能源、计算机软件、互联网等行业工作,大致如下:新能源、计算机软件、互联网/电子商务、电子技术/半导体/集成电路、 计算机服务(系统、数据服务、维修)、 信息通信。

随着各行各业不断开始从传统转型互联网,相当一部分的传统行业对 IT 相关专业的人才的需求也逐渐扩大,比如教育、房产、医疗、媒体、旅游等等,所以就业的选择面非常广。

招生院校多 看清培养目标

据统计,目前开设软件工程专业的院校580多所,分布在不同层次。在这些招生院校中,既有综合性大学,也有理工类院校,还有师范类院校。

不同院校软件工程专业方向有所不同,例如,华东师范大学软件工程专业有四个学习方向,分别为软件科学与技术方向、嵌入式软件与系统方向、数据科学与工程方向、密码与网络安全方向。这四个方向培养侧重点是不一样的,软件科学与技术方向旨在培养具有良好的软件科学与工程素养和开阔的国际视野,以及扎实的软件理论基础和软件设计与开发综合能力的高层次软件人才;数据科学与工程方向旨在培养具有服务国家基础战略研究事业胸怀、独立的研究创新能力和专业可持续发展潜力、参与国际学术竞争能力的、社会培养急需的“数据科学家”专业人才。再如,东南大学软件工程一级学科主要包括软件工程的理论与实践、可信软件、软件智能化、软件自动化、软件服务工程和软件建模与分析等六个主要学科方向。

按大类招生 分清专业方向

除了单独的专业招生形式以外,很多院校都以“计算机类”、“软件工程”的大类形式招生。按照计算机类大类招生的院校,如中央民族大学、北京理工大学、北京信息科技大学等;按照软件工程大类招生的院校,如南京大学、厦门大学、武汉大学、湖南大学等。考生报考时,最好看一下大类包含的专业方向再填报。

例如,北京理工大学“计算机类”包含计算机科学与技术、物联网工程、软件工程三个专业方向;厦门大学“软件工程”包含软件工程、数字媒体技术两个专业方向。

考生在选择时,一定要根据自己的爱好和需求,看清各高校的招生章程要求和专业设置情况。

什么样的学生适合学软件工程

据浙江大学计算机科学与技术学院蔡亮副教授介绍,从技术和兴趣的角度上看,如果喜欢搭积木(组装产品),但对于做积木块本身不是很有兴趣,那么会对软件工程专业很有兴趣。从个性和人生规划的角度上看,如果喜欢在商界叱咤风云的感觉,喜欢跟着一批志同道合的伙伴一起创业,喜欢与人沟通,那么会对软件工程专业很有兴趣。

推荐专业源自高校学生实名推荐数据。当前累计投票数量超过434万人次。通过实名注册的高年级学生或毕业生,根据本校各专业办学情况进行投票,推荐优势专业或特色专业。下图仅展示了部分高校软件工程专业推荐情况,星号为推荐指数。点击图片可查看更多专业推荐数据。

全国各高校学生、毕业生分享感受

《306个专业详细介绍、全国各高校学生、毕业生分享感受.doc》:软件工程

软件工程毕业之后一般做什么?近几年的就业率和收入怎么样,能不能说一下你们毕业班的情况?

毕业找工作啊。做software的developer或者tester,当然,也不局限于此。很多方向都可以的。也有打算读博士的。软件工程的领域还是比较广的。 我们班,毕业的人,你是指本科吧。在软件企业的居多,当然也有,去政府机关的。还有去欧莱雅的,出国的。 (北京航天航空大学)

我们专业就是编程,有钱的自己开公司,做网站,做游戏,做ERP, (哈尔滨工业大学)

我没有考研,我是保送的,研究生的学习可以说给你一个提升的机会,让你有机会去更好的公司,我个人认为读书只是一个过程,提高自己和找到好工作才是最终的目的,至于软件工程,我的建议是希望可以到一个大城市来学习,因为大城市的机会多,工科好的学校很占优势, (厦门大学)

我们那个学校出来的软件工程的学生,大多数都进软件公司搞开发。少数回油田,石油局,剩下的就在读研。(西南石油)

各个大学的软件学院实力不一样,按我的观点,山大的软件学院不是特别好。 软件工程和计算机专业没有太大差别,主要是更侧重于软件理论一些。总的来说,计算机学院侧重于研究性的人,而软件学院侧重于培养适合软件开发的(好想更适合于有一些工作和项目开发经验道的人,当然也不是绝对的,自己的努力也是非常重要的,同学有的读研究生了,有的去工作了,去的地方和计算机学院也没什么差别。软件学院侧重于软件,可能去搞硬件的公司会困难点。其实也是看个人自己的实力,能力比较好的,去中科院,北大上研究生,去工作的 百度,用友,群硕等吧。 (山东大学"

做程序员啊,就是比较辛苦。还有在咨询公司的,那比较好(东南大学)

工作还是考研要看他们自己的想法了,如果去工作做技术会比较累,但是真的可以学到不少东西, (福州大学)

去哪里的都有,有一个人做了机房管理员, 有一个去了县政府. 有人做了老师. 最多的是去IT公司,搞编程。工资不等。指本科。 (东北师范大学)

这样,我们班的人有些有关系些的回了油田单位, 大部分在做软件开发和软件测试,进的有外包公司啊还有外企之类的 不过学软件的学费很高,这样下来我觉得不划算,因为其实我们现在出来了赚的并不会好高,并且都还满辛苦的,比如项目要的紧,就会加班加很多。 还是看个人,选专业可以依靠自己的喜好和看看这个行业的现在和未来的发展综合考虑! (西南石油)

大部分都到软件公司做软件开发工作,基本上不会出现找不到公司的情况 (新疆大学)

,javaXXXXXX在以类C表述的。 其次是面向对象的思想,它是一种设计思想而非一种语言,这是现代软件工程的主流设计思想。 在掌握了语言后其他课程才能学的更加精深。这就是软件————当你在学其他课的时候会有这种感想。 语言毕竟只是工具而已,要做的实质性工作还得在某个硬件平台或大多数考虑在那个操作系统平台下以某个协议为基础去以软件工程的方法和面向对象的思想通过你凭借自身的经验设计模块,数据结构或数据库,算法来实现 再高深的就是你怎么做客户才会满意,这里面大有文章,需要非常丰富的经验。譬如想windows的窗口程序会让你感觉比dos程序舒服很多,设计这种人性化的客户体验不仅仅要有丰富的编程经验了而且还要求对业务流程非常熟悉了。 (西北大学)"

优势: 软件工程偏重于实践一些,对于毕业之后找工作比较好找,因为大学里有相当多的项目的锻炼,而且英语等能力也会得到相当的提升,因为不少课程很多是外教全英文教学,要求做PRESENTATION和写一些PAPER。 劣势: 1.高收费,后两年是8000/年 2.相对于COMPUTER SCIENCE理论性要差,这是仅仅就学科而言 建议: 学习上来说软件工程专业如果每一门课都认真学习每一个课程设计都认真的参与会有很好的收获,在此之上的多余时间可以参加各种自己喜爱的活动,这就要针对自己的需求而定了,当然,个人认为参加编程比赛和数学竞赛都是相当不错的选择。另外,可以参与一些学校的项目,当然不要本末倒置了,毕竟,学好了所有的课程应付日后的任何一种人生选择都是一种强有力的后盾。(北京工业大学)"

工作:至少英语过了4级,掌握一门编程语言。最晚在三年内知道自己将来要往什么方向发展,工作的大概内容是什么,来研究这个方向,同时通过项目、实习等方式获得这个方向的工作经验。另外尽量参加学生会,科协等组织来锻炼自己和别人交往合作的能力。前三年一定要把学分按照毕业的要求拿够,必修的课程全过,英语达到毕业要求的水平,最好此时也有了一些实习的经验,一般会在最后一年的10月左右开始在校园有招聘会、网上招聘等信息,那时有挂科就简历就很麻烦了,如果有实习等工作经验那么在简历中和面试中都会是你的亮点。最后,在把自己卖给公司前,一定要谨慎,早了可能就要面对违约等问题,比较难办,我们这届就有能力很强但是公司找的不好的,签晚了,也有好工作不再招人的危险。(北京工业大学)"

如果做这行的话,考研不如找工作,真的,毕业了我觉得直接找工作比考研好些,只是我个人的看法啊 (武汉理工)

软件工程专业本科毕业了适合考研还是找工作?

关于读研,我自己没读,不好给别人什么意见,但是还是要自己的想法,如果不想这么早进入社会就读被,还有看以后想做什么工作。 出国的话,我也有想过,但是费用什么的太高,其实真正学的学不到什么东西,但是英语就能提高。

想提前进入社会,就找工作,刚开始工作是有点难,但是所有的新人都是要经过这样一个过程的,现在越来越精通了对工作的事情。(武汉理工)

这要看你将来想向哪方面发展了,如果有意深造当然读研了 不过读研出来也是为了找工作的话 那就要好好考虑一下了 现在研究生出来不一定不比本科生好 不过要是有机会出国的话 一定要抓住机会出去见识一下呀 (西北大学)

要看你的兴趣啊!应该从你的整个规划来看!你若是喜欢软件工程,达到热爱的程度,那么我建议你接着深造比较好,如果是深造,到国外比较不错,比如印度,美国等软件大国。当然,需要你有能力,家里条件也不错才行哦!在国内也行,可以到研究所,外资软件公司,比如摩托罗拉,诺基亚,微软研究所,中科院等地方!如果条件不允许,你又不想在学校长留,那还是出来工作比较适合,毕竟软件工程的实用行比较强,在现实中也可以深造! 总之,你若是侧重技术,继续深造吧;你若是侧重生活,现实的利益,工作吧! 当然,以我的世界观来看,考研还是工作不是最重要的问题,或者说这个问题的背后还有一个最重要的问题,就是你要明白什么才是你值得一生去追求的事情,既然你问了我,那么我就跟你谈谈我的经历,以及现在正在做的事情,我不十分喜欢软件工程,虽然我现在在公司负责软件质量管理,但是我却全力准备考研,不过已经不是软件工程,而是哲学,我已经报考了人大的哲学院,正在努力中,(南京理工)

考研的话好像不限制专业吧,学校的话也是随你报的,看自己的能力而定。出国具体的申请时间不清楚,找中介公司很多的,英语份够了,有钱就能出。关于读研,我自己没读,不好给别人什么意见,但是还是要自己的想法,如果不想这么早进入社会就读被,还有看以后想做什么工作。出国的话,我也有想过,但是费用什么的太高,其实真正学的学不到什么东西,但是英语就能提高。 想提前进入社会,就找工作,刚开始工作是有点难,但是所有的新人都是要经过这样一个过程的,现在越来越精通了对工作的事情。 (武汉理工)

软件工程专业的在校生大学应该怎么过?

我觉得 如果是很有兴趣在这方面深钻 第一当然是把学习搞好 软件是应用的很活的行业 它的更新奇快 所以自学的本领一定要学好 一定不能局限的课堂 可以看看相关企业的要求 有计划的学习 第二 软件讲求团队合作 要学会沟通 乐于帮助别人 多个人的思维碰撞往往比一个人闷书搞代码的收获来得多 如果后来发现软件不适合自己 就要从旁拓展了 真是这样的话可以修双学位或是自学 软件对英语数学的要求比较高 不管怎样要抓好英语 就上大学来说 还有很多有意义的事可以做 高校的活动比较多 社团、比赛呀等等可以适量参加 适量,玩游戏是蛮虚度光阴的 软件普及电脑 玩游戏是很容易的事 搞软件是件累人的事 如果有兴趣还好 没有兴趣的话要不转专业要不就安心呆着 心态要好 不管以后工作对口与否 它都很锻炼人的 ,软件搞得好是很有前途的 一开始就表现积极 比如竞选班干加入学生会 ~对于锻炼能力,搞好人际关系是有帮助的 在外就得靠自觉了 家里别太紧张 否则可能会适得其反 另外务必养好身体 (厦门大学)"

职业规划,其实还是看个人目标以及对生活状态的追求吧。 就目前我的工作情况来看,必须做好几点,才不至于影响将来的出路,当然这是针对那些有兴趣在软件领域成为牛人的人。 1.学好数学,一定且必须。数学是算法的基础,算法是软件的根本。 2.扎实的掌握一门语言(当然能掌握多门更好。一定要扎实。简单的程序谁都会写, 但是当编写很大很要求效率安全等等的时候,一切的不同都会凸显出来。 3.英语应该是必须的,不管你喜欢不,牛人的资料多是英文写的。以上是对于那些愿意弄技术的人说的。其实软件相关的不都是做技术。还有另外的出路,那就是软件的业务实现人员,不过这种人都会转向管理或者销售之类的,他们对业务很熟练。 这种人需要什么都了解一些,不用钻什么难的。多掌握时髦的技术,时髦也就意味着相对简单。多掌握语言,不管是web的还是后台的。都了解。总是要求的是一个广度。 目前这种人也很有市场。很多大公司都采用自己的平台。然后在平台上进行二次开发(哈工大)"

大一其实只是个适应和调节期,专业课程没有多少。核心的东西在二年级开始,当然计算机的基础课程数学(高数,线数,离散数学,概率统计等就要在”大一“好好学了。主要是养成一个学习的习惯和方法,大学里面的学习对个人的自律要求是很高的,因为没有人会盯着你学习。学好和学得不好都要靠自己自觉去做,并承担后果。 大一应该是过得很轻松的,不过网就不要天天上了,很浪费时间同时也是件很不明智的事情。多跟同学多交流,运动运动,保证你的人缘会很不错的。 还有一点很重要就是要跟高年级的学生交流(找个老乡唠嗑,对自己学生和生活帮助很大的,这个以后你就会体会到了。一般学院的老师都会安排这样的机会给你们的。 还有就是软件工程专业有很多的外语教学,英文是非常重要的。要自己看得懂,起码能通读教材。没有方法,经典的和最新的计算机方面的信息都是外文的。跟老外交流还是挺不错的,至少能够壮壮胆子,中国人就是不敢开口说英语。(东北师范大学)

大一的话,首先要有对整个计算机系统的认识,推荐一本书给你,编程高手箴言。 大一应该接触到c语言了吧,那是所有语言的祖宗,可以试着自己深入学习了,比如看看c语言精彩百例,linux内核源代码分析,还有谭浩强的那本书一定得认真学。多动手(西安石油)

软件工程专业毕业去哪些单位比较好?

对软工感兴趣并且有技术的话建议在外包公司2年然后自己出来做 对软工感兴趣但是对技术不感兴趣的话可以找大公司锻炼寻求非程序员工作 对软工没兴趣的话往政府部门靠拢,比如科技局下属的XXX公司以IT为名目的(东南大学

建议去大型国企吧,虽然钱没有跨国企业多,但是比较稳定,比较有发展前景。是去国企哦,不是说私企,民企什么的。 (东南大学)

想编码的去大型的软件公司,想做管理的去中小型的软件公司,想稳定的去银行 (北京工业大学)

如果是工大软件软件学院的去上海的autodesk比较好,这两届已经过去挺多人了,月薪在7K到9K,看能力而定 (哈工大)

迅雷,大连华信,东软,(西北大学)

,(有相应的app):可以找到一些过来人的切身经验

百度搜索“高考志愿”,会有很多相关的网站,例如,阳光高考,中国教育在线,知乎

把宝押在Java上?或是坚持C++不动摇?还是考虑考虑C#?你是否犹豫不决?那么不妨先听听下面这些专家的说法,对于面向对象程序设计语言的现状和未来作一番了解。

科技进展一日千里,产品生产周期则越来越短,不少程序员已经完全没有时间掌握第二种语言。不论一个程序员的技术能力是否被考虑,对于他来说,将来能够参与什么类型的项目,加盟什么样的公司,在很大程度上,将取决于今天选择哪种程序设计语言。为了帮助大家清晰地了解C++和Java这两个最流行的OOP语言现在和将来的有关情况,我们采访了C++语言的设计者Bjarne Stroustrup,以及Sun公司著名工程师Tim Lindholm。下面是他们的观点,内容涉及程序设计的未来、语言之间的比较、OOP语言的发展与革新之取舍以及程序

在未来三年,程序员编写代码的方式会发生那些变化?
Stroustrup: 在C++中,假如没有合适的库在背后支撑,完成任何重要的工作都可能是很复杂的。而一旦有了合适的库,任何东西都可以被我们操控于股掌之间。因此,构造和使用程序库的重要性与日俱增。这也暗示我们,泛型程序设计(generic programming)将会越来越多地被运用。只有通过GP,我们才能确保库的通用性和高效率。我还预期在分布式计算和“组件(components)”应用领域会出现喜人的增长。就大部分程序员而言,通过使用方便适用的程序库,这些开发工作会变得简单明了。现在有一个趋势,编译器厂商试图把其特有的“对象模型”和图形界面(GUI)细节推销给用户。比如微软的COM和Inprise的类属性“properties”。对于用户来说,这既不必要,也不情愿。我所希望看到的程序库,应该是用标准C++打造,界面灵活,值得信赖的程序库。通常,这些界面应该是平台无关的。C++的表达能力极强,即使不使用大量的宏,也应该足以达成这一要求。就算有些地方无法百分之百的遵守这一原则,也应该将对于平台和厂家的依赖性限制起来。这个目标的完成情况,可以反映软件工具产业对于应用程序开发行业的关注程度。我怀疑目前对于那些独立的、跨平台厂商来说,并不存在相应的市场。如果能够建立这样的市场,也许能够促进厂商们为客户做出“真正有用的”产品。
对于编写代码的开发者来说,主要的驱动力量仍将是两个:网络和分布式——也就是设计和开发非单机软件的需求。大部分的应用程序将不会是孤零零地运行在单一设备上,而是运用了类似EJB和JSP之类技术的,平台无关的分布式程序。程序员们将不得不面对分布式计算的重重险阻。这将对许多程序员所依赖的设计模式、技术和直觉构成严峻的挑战。这是选择编程语言之前必须认识到的,尽管不同语言的设计特性可能促进或者阻碍这一转化。在网络应用的增长中,一个很重要的部分是小型移动设备和特殊Internet设备的爆炸性增长。这些设备各有各的操作系统,或者只在某种特定的设备领域内有共同的操作系统。我们现在还可以一一列举出这些设备——家庭接入设备、蜂窝电话、电子报纸、PDA、自动网络设备等等。但是这些设备领域的数量和深入程度将会很快变得难以估量。我们都知道这个市场大得惊人,PC的兴起与之相比不过小菜一碟。因此在这些设备的应用程序市场上,竞争将会相当残酷。获胜的重要手段之一,就是尽快进入市场。开发人员需要优秀的工具,迅速高效地撰写和调试他们的软件。平台无关性也是制胜秘诀之一,它使得程序员能够开发出支持多种设备平台的软件。我预期的另一个变化是,我们对于代码(Java)和数据(XML)协同型应用程序的开发能力将会不断提高。这种协同是开发强大应用程序的核心目标之一。我们从XML的迅速流行和ebXML规范的进展中,已经看到了这个趋势。ebXML是一个针对电子商务和国际贸易的,基于XML的开放式基础构架,由联合国贸易促进和电子商务中心(UN/CEFACT)与结构性信息标准推进组织(OASIS)共同开发。

我怀疑,这个领域中之所以缺乏成果,正是因为人们——主要是那些非程序员们——对“组件”这个意义含糊的字眼寄予了太多的期望。这些人士梦想,有朝一日,组件会以某种方式把程序员赶出历史舞台。以后那些称职的“设计员”只需利用预先调整好的组件,把鼠标拖一拖放一放,就把系统组合出来。对于软件工具厂商来说,这种想法还有另一层意义,他们认为,到时候只有他们才保留有必要的技术,有能力编写这样的组
这种想法有一个最基本的谬误:这种组件很难获得广泛欢迎。一个单独的组件或框架(framework),如果能够满足一个应用程序或者一个产业领域对所提出的大部分要求的话,对于其制造者来说就是划算的产品,而且技术上也不是很困难。可是该产业内的几个竞争者很快就会发现,如果所有人都采用这些组件,那么彼此之间的产品就会变得天下大同,没什么区别,他们将沦为简单的办事员,主要利润都将钻进那些组件/框架供应商的腰包里!

小“组件”很有用,不过产生不了预期的杠杆效应。中型的、更通用的组件非常有用,但是构造时需要非同寻常的弹性。在C++中,我们综合运用不同共享形式的类体系(class hierarchies),以及使用templates精心打造的接口,在这方面取得了一定的进展。我期待在这个领域取得一些有趣和有用的成果,不过我认为这种成果很可能是一种新的C++程序设计风格,而不是一种新的语言。

Lindholm: 编写面向组件的应用程序,好像更多的是个投资、设计和程序员管理方面的问题,而不是一个编程语言问题。当然某些语言在这方面具有先天优势,不过如果说有什么魔术般的新语言能够大大简化组件的编写难度,那纯粹是一种误导。

微软已经将全部赌注押在C#上,其他语言何去何从?
Stroustrup: C++在下一个十年里仍然将是一种主流语言。面对新的挑战,它会奋起应对。一个创造了那么多出色系统的语言,绝不会“坐视落花流水春去也”。
我希望微软认识到,它在C++(我指的是ISO标准C++)上有着巨大的利益,C++是它与IT世界内其他人之间的一座桥梁,是构造大型系统和嵌入式系统的有效工具,也是满足高性能需求的利器。其他语言,似乎更注重那些四平八稳的商用程序。

C#会不会获得广泛的接受,并且挤掉其他的语言?
Lindholm: 通常,一种语言既不会从别的语言那里获利,也不会被挤掉。那些坚定的Fortran程序员不还用着Fortran吗?对于个人来说,语言的选择当然因时而异,但就整体而言,语言的种类只会递增,也就是说,它们之间的关系是“有你有我”而不是“有你没我”。 对于一个新语言的接受程度,往往取决于其能力所及。Java技术被迅速接受,原因是多方面的,Internet和World Wide Web接口,在其他技术面前的挫折感,对于Java技术发展方向的全面影响能力,都是原因。另一个重要的原因是Java独立于厂商,这意味着在兼容产品面前可以从容选择。
C#是否会获得广泛接受?视情况而定。总的来说,那些对于平台无关性和厂商无关性漠不关心的程序员,可能会喜欢C#。那些跟微软平台捆在一起人当然可能想要寻找VB 和VC的一个出色的替代品。但是对于程序跨平台执行能力特别关注的程序员,将会坚守Java之类的语言。这种能力对于多重访问设备(multiple access devices)和分布式计算模型至关重要,而Java语言提供了一个标准的、独立于厂商运行时环境。

Stroustrup: C#的流行程度几乎完全取决于微软投入的资金多少。看上去C#的兴起肯定会牺牲掉其他一些语言的利益,但是事实上未必如此。Java的蓬勃发展并没有给C++带来衰败。C++的应用仍然在稳定增长(当然,已经不是爆炸性的增长了)。也许其他的语言也还能获得自己的一席之地。 不过,我实在看不出有什么必要再发明一种新的专有语言。特别是微软,既生VB,何需C#

不同OOP语言各有什么优势和劣势?
Stroustrup: C++的优点自始至终都是这么几条:灵活、高效,而且并非专有语言。现在ISO C++标准的出现,巩固了最后一点。我认为C++的高效是它最基本的优点。这种高效来自于其特有的数据和计算模型,较之Java和C#,这种模型更加贴近机器。不过,哪些程序才真正地渴望这么高的效率?这是个问题。我认为这类程序非常多。人们对于计算机的期望,永远都超越硬件科技的发展速度。很显然,Java和C#的设计者的想法不同,他们认为,在很多地方效率问题无关紧要。 C++主要的缺点,归罪于糟糕的教育(是那些始终认为C++是个纯粹面向对象语言的人,和那些把C++当成C语言变体的人导致了这种情况),归罪于不同平台上的不一致性,归罪于不完整、不标准的编译器实现,归罪于平台无关的系统级程序库的缺少。 这些问题归于一点,就是缺乏一个卓越的厂商,能够满足整个C++社区的需求,勇于投入大量的资金开发必要的程序库。

Java技术的成功,是因为它在合适的时间,出现在合适的地点,而且合理地选择了语言和计算平台的支持目标。Java并不是在所有场合都优于其他OOP语言,但是对于出现的新问题能够解决得很出色。它面向Internet计算环境,避免了C++中晦涩的结构,成功翻越了继承机制的恼人问题。垃圾收集机制显著地提高了生产率,降低了复杂度。在网络背景下使用虚拟机,以及有关安全性和动态加载的一系列设计选择,迎合了正在出现的需求和愿望。这些特性使Java不仅成为现有程序员的新武器,而且也为新的程序员创造了繁荣的市场空间。
此外,Java拥有一个标准化的、二进制形式的类库,提供了必要的(当然并非充分的)平台与厂商无关性。平台与厂商无关性要求一项技术必须有清晰的规范,摒弃那些阻碍二进制标准实施的特性。C++虽然有一个ISO标准,但其实甚至对于相同系统与相同指令体系的各个平台,也提不出一个实用的、各版本兼容的二进制标准。 历史上很多使用虚拟机的语言饱受责难,是因为其不够出色的性能问题,而这要归过于缓慢的解释器和糟糕的垃圾收集器。Java的早期实现也因为同样的问题受到严厉的批评。但是自那时起,业界向新的虚拟机实现技术投入了大量资金,取得了显著的效果,如今在大部分场合,Java的性能跟常规的静态编译语言相比毫不逊色。这使得程序员在获得平台和
厂商无关性的同时,也不必付出性能上的代价。 C++并没有强制使用面向对象方法,因此为了编写出色的面向对象代码,就要求程序员们有相当强的纪律性。很多公司就是因为这个原因放弃了C++。作为语言,Java的一个突出的优点就是强制面向对象方法,不允许非面向对象的结构。 C#介于C++和Java之间,脚踏两只船,因此既不够安全,又失之复杂。对于公司来说,采用新的语言要付出巨大代价。雇不到好的程序员(没人熟悉这种新语言),培训费用高得惊人,学习过程中生产率和产品质量下降,多年的经验随风消逝,等等。

一种语言如何克服这些障碍?
Lindholm: 说得很对,采用新东西确实常常开销巨大。不过问题是:这个新东西是否能够节省更多的开支,或者提供巨大的改进,获取合理的回报?很多公司发现,转向Java技术不论在开发的后端(尽快进入市场、快速迭代开发、维护简单性)还是前端(跨平台发布,适用范围从低端设备到高端服务器的技术,安全性),都能节省大笔的开销。 对于新事物的接纳,常常是在痛楚的压力之下。很大程度上,这正是Java所经历的。Java的产生,是对当时很多系统的缺陷所做出的反应。Java技术通过下面的手段减轻了开发者的痛楚:1) 顾及了网络计算方面的需求,是应运而生。2) 在技术能力的抉择上,保持良好的品位,顾及了大众的心理。3) 采用适度强制性策略推行设计决定。此外,Java技术已经成为大学教学中的主流,这同样保证了Java开发者队伍的不断壮大。 但是最重要的一点是,再没有另一种程序设计技术,能够像Java那样允许程序员开发基于Internet的不同平台之上的应用程序。Java平台在这方面的杰出表现,已经被大量的实例证明。Java已经成为Internet上的缺省应用程序平台,Java APIs也成为Internet应用程序开发的天然平台。

Stroustrup: 微软和Sun把大笔的金钱扔在Java、VB和C#中,并不是因为他良心发现,也不是因为他们真的相信这些语言能够带给程序员更美好的生活,而是利益使然。
有一个说法,认为软件工具厂商如果能够把应用程序开发者的专业技术任务负担起来,将获取巨大的经济利益。我对其背后的经济分析颇为怀疑,我认为这很难成为现实,特别是当应用程序开发者使用开放的、标准化的工具时,他们可以有多种选择,从而使上面的想法更加不可能。

多年以前,C++就已经具有泛型能力(也就是templates和STL),有运算符重载,有枚举类型?我们会不会在Java的未来版本中看到这些特性?Java是不是应该纳入这些特性呢? Strousturp:从1988-89年起,C++就已经有了templates。但是我们花了不少时间来了解如何最好地运用这个工具,早期各厂家对于template的支持在品质上也有很大的差异。有些编译器厂商动作迟缓,至少有一个主要的编译器厂商(好像是指微软,微软在Visual C++4.0才开始支持template,在此之前一直声称template是过于复杂而又没什么用的技术,时至今日,Visual C++对于template的支持在主流编译器中都属于最差的一档——译者注)暗中鼓励声名狼藉的反template宣传,直到他们自己终于学会了这项技术为止。直到今天,对于template的支持在品质上仍然有待改进。
你上面提到的那些特性,我认为Java(还有C#)应该,也肯定会逐渐引入。那些对于程序员来说最有用的语言特性和概念,将会逐渐集中,成为各家主流语言的必然之选。也就是说,我认为类似析构函数和模板特殊化之类的机制,远远比枚举等机制重要得多。

Lindholm:Java技术成功的原因之一,就是很清楚哪些不该做。我们得多问几个为什么:这项特性是不是必不可少?增加它会带来哪些开销?运算符重载是C++中一项极其强大的特性,但是它也大大增加了C++语言的复杂度,很多人都难以招架。Java在各种可能的权衡之中,做出了明智的抉择,找到了能力与需求之间的完美平衡点。当然,Java也会发展,而且最重要的是,现在是开发者们在推动发展。Java增加泛型能力这件事,很好地展示了Java是如何通过整个开发者社群的参与,在权衡中决定正确的平衡点。关于增加泛型类型(generic types)的“Java规格申请”(Java Specification Request, JSR)已经进入JCP(Java Community Process)程序,而且已经开发了很长一段时间(参见 之JSR-014)。现在,在JCP中,有超过80个JSRs正在讨论中,这充分体现了整个体系对开发者的积极反馈和高度合作,这正是驱动Java平台不断进化的动力。

C++是一种发展型的语言,Java和C#似乎更像是革新型语言(它们是从头设计的)?什么时候,革新型的语言才是必需的呢?
Lindholm: Java技术并非凭空出世,反而更像是发展型的。Java所有的特性,在Java平台推出之前,都至少已经存在于另一种环境之中。Java的贡献在于,在众多的特性和权衡中,做出了合理的选择,使得产品既实用,又优雅。Java技术对于程序员的态度是:抚养,但不溺爱。

Stroustrup:从技术上讲,我并不认为Java和C#是什么“从头设计的”革新型语言。倘若Java是从技术原则出发,从头设计,大概就不会模仿C/C++那种丑陋和病态的语法了(不必惊讶,Stroustrup在很多场合表示过,C++采用C的语法形式,实在是迫于兼容性。他本人更偏爱Simula的语法——译者)。 我认为,只有当程序员们面对的问题发生了根本的变化的时候,或者当我们发现了全新的、极其优越的程序设计技术,又完全不能为现存语言所支持的时候,我们才需要全新的语言。问题是,我们恐怕永远也碰不到那些“根本”、“全新”的情况。 我以为,自从OOP问世以来,可称为“根本”的新型程序设计技术,唯有泛型程序设计(generic programming)和生成式程序设计(generative programming)技术,这两项技术主要是源于C++ templates技术的运用,也有一部分曾经被视为面向对象和函数式语言(functional languages)的次要成分,现在都变成正式、可用和可承受的技术了。我对于目前C++模板(template)程序设计的成果非常兴奋。例如,像POOMA, Blitz++和MTL等程序库,在很多地方改变了数值计算的方式。

Java和C#的一个“卖点”,就是它们的简单性。现在Java是不是快失去这个卖点了?
Stroustrup:新语言总是宣称自己如何如何简单,对老语言的复杂性颇多非议。其实这种所谓的“简单性”,简单地说,就是不成熟性。语言的复杂性,是在解决现实世界中极为烦琐和特殊的复杂问题的过程中逐渐增加的。一个语言只要活的时间够长,总会有某些地方逐渐复杂起来,或者是语言本身,或者是程序库和工具。C++和Java显然都不例外,我看C#也一样。如果一种语言能够度过自己的幼年时代,它会发现,自己无论是体积还是复杂性都大大增加了。

Lindholm:Java技术的的功能在增加,需要学习的东西也在增加。不过功能的增加并不一定带来复杂性的增加。Java技术的发展,并没有使学习曲线更加陡峭,只是让它继续向右方延展了。

标准化语言和开放型语言各自的优点和缺点何在?
Lindholm:对于一个开放、不允许专有扩展、具有权威的强制性标准语言或者运行环境来说,不存在什么缺点。允许专有扩展就意味着允许厂商下套子绑架客户。特别重要的是,必须让整个平台,而不只是其中一部分完全标准化,才能杜绝厂商们利用高层次的专有API下套子。客户要求有选择厂商的自由,他们既要有创造性,又需要兼容性。

Stroustrup:对于一个语言,如C/C++来说,建立正式标准(如ISO标准)最大的好处,在于可以防止某一个厂商操纵这种语言,把它当成自己的摇钱树。多个厂商的竞争给用户带来的是较低的价位和较好的稳定性。 专有语言的好处,一是流行,二是便宜(不过等你被套牢了之后,情况就会起变化),三是对于商业性需求可以做出快速的反应。 标准化语言的特点之一是,它不能忽略特殊用户的需求。比如我在AT&T中所考虑的东西,其规模、可靠性和效率要求,跟那些普通厂商关注的大众软件相比,根本不可同日而语。那些公司很自然只关注主要的需求。 然而,多数大机构和身处前沿的公司,都有着特殊的需求。C++的设计是开放、灵活和高效的,能够满足我所能想象的任何需求。跟其他的现代语言相比,C++的家长式作风可谓少之又少,原因就在这。当然,不能赞赏这一点的人会诟病C++的“危险”。 拥有正式和开放标准的语言主要是为编程工具的使用者和客户服务的,而拥有专属“标准”的语言,主要是为厂商服务的。

我要回帖

更多关于 学编程好找工作吗 的文章

 

随机推荐