C、C++、C# 我全都要!无痛学习经验分享

概要

       本文斗胆为大家分享一丢丢 C-Family 编程语言的学习经验(Objective-C先哭)。

       如果你属于:

                1)纠结于以上C系语言从哪门入手的新同学;

                2)掌握了以上其中之一,想学习其中另一种编程语言的同学;

                3)跟笔者一样,属于三者都需要学的抽象编码人;

        推荐食用本文,希望本篇经验文能够对你有所帮助。本文动态更新,欢迎宝子们的讨论。

写这篇文章花费好几个小时,阅读需要二十分钟。您将了解现在的  C-Family 编程语言

如 何 下 口 !


开局思路

        在正式论述学习路线的版本答案之前,笔者希望小小地强调两个思路作为前提:

1、选择哪个编程语言开局,请务必遵循 “未来一段时间能够精准解决你的核心问题”。

2、选 “面向对象 or 面向过程” 开局,有点像打野玩家选择 “红开还是蓝开”。

      不存在标准答案,更重要的是 “你是适合什么玩法的英雄”


推荐路线

        如果你需要三个都学,或是一名 C-Family 的语法爱好者,我个人比较推崇的学习路线是:

C → C++ → C#


为什么C之后,建议是C++而不是C#?

        理由比较简单。

我知道你大概率会在 C++ 前黯然神伤,然后从 C# 中重获救赎。

        初学阶段,C++ 的劝退原因各有不同——学习曲线陡峭、库和框架选择多...,它需要编程者掌握许多概念和技术细节,如指针、内存管理、继承、多态等。况且,语法这些只是开胃菜,当你成长到一定程度,需要运用设计模式面对那些兼具安全和性能的代码,面对各种奇奇怪怪的 Link error 就足以让人抓狂~

        无数次想掰开显示器问问那个多事的编辑器,你特喵的到底想让我哪样?

        其实从 C++ 发展趋势角度分析,这本就不是一门可以一蹴而就的编程语言。其严谨的风格,在一些语法和细节方面要求更高。此外,C++的核心团队一直热衷于努力引入新的特性和功能。而依靠顶级程序设计师不断加戏的结果,注定使得初学者跟不上这些王者选手的版本理解。

        而 C# 语法的设计理念,很大程度上在于对C++语法的删繁就简。C# 多数情况下不需要进行指针操作、不需要使用模板元编程。可以说,C# “自作主张” 地为你选好了诸多编程情景下的范本,牺牲灵活性以简化掉许多不被常用的 “冷门手段”。值得注意的是,这些所谓的“冷门手段”并不是一无是处,它们往往与更好的性能挂钩。

        先撸C++,后学习C# 的最大好处在于同学们可以意识到 C# 做了哪些简化,在简化的甜蜜中可以让认识变得更加深刻。不得不说,C# 的设计能更好地引导初学者聚焦在哪些核心特性上,有种携带着C++的诸多细碎知识,被划重点的感觉。而反之从C#到C++的路线,学习者很难get到设计师们专门为你做了哪些简化处理。

        所以,我更推荐在C++的学习过程中侧重理解,不必把语法一板一眼地背下来。我在学习C++和C#时相隔大概一年,脑呆里的很多问号和槽点会在C#中得到解决。相信这样一个持久满足的学习体验会对你有所帮助。
 


C++ 和 C# 中有哪些特性不同?

        接续上一个问题,笔者整理了一些 C# 中简化掉的特性:

        1、指针:C# 是一种类型安全的语言,它不允许直接使用指针。相反,C# 提供了一种称为“引用” 的机制,可以间接地引用对象。

        2、头文件和宏定义:C# 中没有直接的头文件概念,而是通过引用命名空间和程序集来实现类似的功能。同时由于缺乏类型检查等弊病,形如 #define 的宏定义被无情去除了,因此C#不再支持展开为替换文本。

        3、运算符重载:C# 运算符重载受限,没有C++那样几乎什么都可以重载。

        4、泛型编程:C#使用泛型来简化C++中模板元编程的方式,转而在编译时进行类型特化和计算的模板元编程功能。提高了代码的可读性和可维护性。

        5、默认函数参数:C# 中不支持默认函数参数。而C++ 中的函数可以指定默认参数值。 

        6、垃圾回收:C#中的垃圾回收机制自动管理内存,避免了C++中手动释放内存的问题。这使得代码更加简洁,也减少了内存泄漏等问题的风险。

        7、自动实现属性:C #中的自动实现属性允许在属性声明时省略set和get访问器,自动生成默认的实现。C++中需要手动定义属性的set和get访问器。

        8、C#不支持内联函数。这样可以更好地保证代码的可移植性和兼容性,并且能够更好地限制作用域。
        9、C#不支持多重继承。“Class 吕布 : 董卓, 丁原” 这种冷笑话式的故事只不会出现在C#里。

        10、简化多线程:C#中的多线程机制相对简单,不需要像C++中那样手动管理线程的生命周期。此外,C#中的多线程提供了更为丰富的同步和异步机制,使得编写高效的多线程程序更加容易。
       

        这些内容是笔者想到的一些特性差异,纵观这些差异上的不同,很容易看出C#相对于C++,C#在语法设计和范本选择方面提供了更为简化和“自作主张”的选择,以帮助开发人员更快速地编写代码并减少出错的可能性。

        注意:并不能说 C# 就是简化版 C++,二者的设计目标本身具有很大区别。C# 的设计目标是为了实现应用程序开发的过程简化,提高应用程序代码可读性和可维护性;而C++则更注重性能和底层控制能力。


私信问题Q&A整理(更新至2023年7月3日)

提问1——我是24k纯小白,我可以直接C#或者C++开局吗?        

        如果你是时间充裕的在校小白,你的核心问题大概是入门编程和打基础。为了稳扎稳打,建同学们先接触底层语言以扩展深度,再向其他高级语言扩展广度,从学习C语言开始。

        想打ACM等编程类算法竞赛的宝子,推荐你学会C的基础上,特别学习一下C++中的STL就可以点到为止了,算法竞赛更多的问题会聚焦在实现效率和解决问题的能力上,而不是复杂的功能。

提问2——要工作了,应不应该都学了,好让简历好看些?

        如果你是就业需要且时间紧迫的同学,你可以尝试直接选择你所就业方向相关的编程语言,把目标放在理解并熟练运用工作直接相关的库和框架上,以专业技巧武装你的开发效率和代码质量。比如你近期想入门 Qt C++,完全可以是登录bilibili大学,查询与Qt C++直接相关的视频教程,而不要去学那种纯粹的、脱离Qt框架的C++教程。更不需要试图从 C# 上寻找可以借鉴的设计灵感,除非真的很闲,不走弯路不舒服~

猜你喜欢

转载自blog.csdn.net/qingxiu3733/article/details/131502049
今日推荐