首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序员的呐喊:C+为什么如此难学?来看看一程序员给你的答案吧

C ++不是开玩笑;这是真实的东西,是一种针对认真的程序员的语言,他们知道自己在做什么。我一直觉得自己在编写代码方面“很擅长”,并且对解决任何编程工作都充满自信甚至自负。一旦弄清楚如何解决它,我就开始觉得自己非常强大。C ++是使我停下来思考自己的唯一语言,并质疑我是否有资格成为一名真正的计算机科学家,而不仅仅是拥有该学科的高级学位的人。

有个故事,贝尔实验室语言的创始人Bjarne Stroustrup试图发明一种神秘而又复杂的计算机编程语言,只有他能使用它。如果他真的在想那件事,他就搞砸了,因为他不指望他的计算机科学家的持久性和深厚的才智。那些硬着头皮并学习了如何使用C ++进行有效编程的人发现了C ++的强大功能和优雅之处。

他们很快意识到这是一种主力语言,可以用来编写任何东西,这是编写消费者软件可用的最佳语言。在那些日子里,我们受内存和存储的束缚,大多数软件都分发在硬媒体上。代码必须严格而坚如磐石,才能证明正在开发的合理性,更不用说分发到整个世界了。

C很棒,它彻底改变了专用设备的编程,但是需要进行扩展以“为世界建模”。为此,Stroustrup选择了Simula和Ada之类的语言。他已经迷上了面向对象编程的理论,并想在贝尔实验室从事的软件开发项目中使用这种方法。因此,他采用了C,这是他们拥有的高效语言,并将其包装在新的结构中以支持面向对象的编程。

这样做导致C ++变得“困难”。具有属性和方法的对象的想法对于大多数程序员来说太抽象了,以至于无法完全掌握。我仍然对此感到麻烦,并且我在编写代码方面生活了30多年,其中包括13笔主要是用C ++编写的代码。但是,一旦掌握了完成的方式,就很清楚为什么今天所有的“重要”消费者应用程序都是使用C ++编写的。您可以轻松地完成其他任何流行语言都无法做到的事情。

最后的质量和使C ++成为困难的语言一样,也是其不断复杂化的构造所造成的。但是,语法的刚性也是一种福气,因为它不支持懒惰的思维。您不能随心所欲地将void *抛弃,您必须弄清楚自己在做什么,然后设计可以优雅地模拟现实世界的类。这些类必须包含完成工作的属性和方法。

当然,让大多数人受益最多的是难以理解和学习使用的东西。第一次看到模板时,我差点吓坏了。“你是什么意思将东西放在''之间?” 一旦冷静下来,我就明白了:模板促进了可扩展性,并使简化代码成为可能,从而避免了重复的复杂性。好的。学习C ++功能通常就是这样。您会在教科书中看到一些没有意义的代码或示例,学习它们,然后将其使用。一旦使用了语言功能完成了该过程,您就会了解他们为什么拥有它,这突然变得有意义。一段时间后,您想知道没有该功能的情况如何。您甚至可能想知道没有该功能的较不复杂的语言如何完成所有工作。

每个复杂的构造都有其原因。您是否不喜欢引用,因为它们似乎不必要地复制了指针?这是有原因的,虽然微妙,但却是真实的。还有一个笑话是,当Stroustrup的同事们嘲笑他的一首难以理解的语言时,他说这很琐碎,他说:“哦,是吗?” 然后,他回到自己的巢穴,直到添加参考和模板后才出现。这是合理的,但并非不可能。开个玩笑,不过。

这里还有更多示例。为什么某个方法的参数为“ const”?他们不希望您在您的方法中弄乱它。如果您正在编写代码,则表明您知道自己不应该弄乱方法中的参数,并且如果不小心这样做,编译器将不知所措。为什么所有这些“公共”和“私人”的东西?相同的原因;C ++可以防止您用脚砸自己的脚并弄乱物体。编译器强制执行的语法的复杂性和刚性是您的监护人,同时也是您的监督者。

最后,必须承认,由于必须这样做,因此C ++很难学习和使用。一旦接受了这一前提,您就更有可能屈服并学习它。

还有一个很好的理由总是要花更多的精力来学习“硬”计算机语言,工作保险。1990年,我在一家工程公司工作。我被录用为航空电子系统使用C语言和汇编语言编写代码。一名新经理在人才市场附近徘徊,为一个新团队招募人员,该团队将开发基于PC的地面支持软件,以自动执行两次飞行之间机载设备的工作。

我们刚刚采用Windows作为我们的操作系统,每个人都在玩单人纸牌游戏和Minesweeper,以学习如何使用鼠标。我们仍然在命令提示符窗口中使用基于MS-DOS的工具进行了所有工作。经理问我们是否要从编写固件切换到编写PC应用程序以在Windows下运行。几乎每个人都惊恐万状,不希望在Windows的任何部分工作。他们对GUI环境感到恐惧,或者对用C或汇编语言以外的任何语言进行编程持谨慎态度。经理曾说过我们可以用C来完成工作,但他对这种新奇的C ++感到好奇,并希望一些大胆的程序员与他一起工作,并在C和C ++之间做出决定。

我和所有其他最初以编程人员而不是电子工程师自认为是编码人员的人,我们都为C ++竭尽全力,因为我们急忙用完了这种新语言,并购买了一本教科书来学习它,然后才需要使用它来写东西。我们没有人有任何使用它的经验,因为它不是在大学里讲授的,没有人拥有编译器,而且很少有普通百姓在家用计算机上拥有软件开发工具。我们正在经历一次信念飞跃,大多数人都不敢尝试这种信念。

我们赌对了。C ++起飞了,公司里许多不那么大胆的人开始被解雇。C ++程序员成了明星。我们是制作神奇的图形应用程序并在Windows下运行的人。其他人都在为那些对编程专业一无所知的工程师设计的嵌入式系统添加废话。他们使用命令行在MS-DOS中工作,通常在黑屏上使用浅灰色字符。(很少有人知道如何改变颜色。)他们在大多数情况下都是白痴,每个人都知道。

几年后,一家不道德的公司买下了我们的公司,并在第一天解雇了一半的员工。他们解雇了所有Windows程序员,因为一些法国航空电子公司用他们的“高级”语言Pascal能够更快,更便宜地完成我们在Windows下所做的工作,这使他们大开眼界。(是的,帕斯卡!!)大约六个月后,他们意识到了自己的错误,并在报纸上刊登了很多广告,试图聘请了解C ++的Windows程序员。已经太迟了。所有的C ++程序员都能很快找到工作,因为我们了解热门的开发人员语言。我在Microsoft找了一份工作,但并没有持续,但是在接下来的13年中,我稳定地工作了,主要是在Microsoft和其他公司的C ++工作。

可以肯定的是,C ++的受欢迎程度在逐渐下降,因为我怀疑,所有好的工作都是由优秀的C ++程序员填补的,这些程序员在就业市场萎靡不振的过程中一直过着宝贵的生活。过了一会儿,如果您想工作,则必须了解一些新知识,例如Java,SQL或Javascript。我一直在用这种新语言C#为程序员们看广告。我读了几本书,很快就开始写C#

我是否提到过,每隔几年学习一次新的“硬”语言,就可以使我在整个职业生涯中工作并且收入丰厚?始终这样做,您将永远不会饿死。尽管我已经研究了其他几个并且在他们上面比较擅长,但我还是以COBOL程序员的身份开始工作的。那是一份工作,我靠谋生为生,因为COBOL在1977年仍然很热门。不久,我转而去另一家公司写FORTRAN和Z-80汇编器。当他们需要某人用COBOL或Pascal做某事时,我是首选人,因为没有其他人知道那些语言。几年后,我开始听说C,并花了两年时间在读书时寻找写它的工作。一家州外公司招募我去做,所以我收拾行囊搬家。在我从航空电子公司学习C ++并过渡到该语言之前,直接的C工作仅持续了大约四年。每次我根据需要或选择切换语言时,我的薪水都会增加。而且,每种新语言总是很难,非常非常难学的。

语言的难度保证了您的写作技巧将为您带来丰厚的回报。如果容易的话,他们可以从当地社区大学找人做这项工作,并付给他们钱。而且,这就是我的朋友,这就是为什么C ++如此难以学习。Bjarne Stroustrup希望对贝尔实验室如此有价值,以至于他永远也不必找工作。C ++是他的“金鹅”。发明和维护它是他的职业。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210302A074A300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券