您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

首选C++,彻底麻了!

时间:2023-11-23 11:37:25  来源:51CTO  作者:

作者丨SteelPh0enix

编译丨诺亚

出品 | 51CTO技术栈(微信号:blog51cto)

“作为初学者,我应该选择什么语言?”

网上冲浪时,我经常看到上面这样的疑问。作为一个同样在这个选择上挣扎许久的人,我最终选择了C++。我想,我可以就这个特定的选择以及它如何影响我之后的学习谈一下个人看法。

本文将围绕以下四点展开:

  • 这是个陷阱!
  • 你为什么要这么做?
  • 那么,还有什么其他选择呢?
  • 当真正有意义的时候,再将C++作为首选

一、这是个陷阱!

通常来说,选择C++作为你的初始语言并不是一个好主意。在用C++工作了很长一段时间,并尝试了许多不同的编程语言之后,我觉得C++就像是用劣质胶带粘在一起的一团乱麻,不知怎么地仍然坚持着,甚至可能在最近的变化中朝着相对较好的方向发展,但对于初学者来说,真的算不上一个好选择。

二、你为什么要这么做?

在大多数情况下,我总是会听到一些具体的论点,试图努力地证明选择C++作为入门也不错。比如:

1,它非常快!

这是很常见的误解。语言本身并没有快慢之分。当然,有些语言可以比其他语言更快地解析或解释,但这并不意味着用语言A编写的程序总是比用语言B编写的程序快,反之亦然。一个好的做法是问自己“为什么?”和“什么时候?”为什么用A语言编写的程序可能比用B语言编写的同等程序更快/更慢?它在多大程度上对性能有意义?但这不是新手应该关心的事情。一般来说,作为初学者,你不应该关心“语言性能”,因为这是你在学习编程时最不需要担心的事情之一。一开始,真正的性能主要取决于代码中使用的数据结构和算法,而不是语言的选择。   

2,学习C++会教你一些底层的概念,比如指针和手动内存管理!

它的确可以,但是问题在于:你大多数时候不需要知道这些低级的概念来编写软件和学习编程。每天都有成千上万的程序员在不知道指针是什么,或者如何手动管理内存的情况下编写出完美而有效的代码。这并不是为了编写工作代码而必须知道的东西。这对你来说可能永远都没有用。固然,知道指针和手动内存管理在很多情况下是有用的,但对于初学者来说,这不是刚需,因为即使在C++中,你通常也不想手动管理原始指针和内存分配。

3,游戏编程是在C++中完成的——通常伴随着“性能”参数。

这个论点有时也站不住脚,因为有许多非常流行的游戏引擎提供了一种更适合新手的游戏开发方法。Godot是最好的例子之一,因为它有自己的工具集,可以使用自己的GDScript语言,也可以与其他语言和工具一起使用。我知道有很多人在使用C++进行游戏开发,他们也有自己的观点——相对接近硬件。但我仍然坚信,如果你想学习“编程”和“游戏开发”,这可能适得其反,因为在学习你真正想学的东西之前,它带有“必须学习C++”的沉重包袱。

4,我懂一些C语言,所以C++只是一个扩展,所以我会学习它。

事实并非如此,这样的想法会迫使你走上一条很难回头的道路。注意,不要把C++看作是C的补充,因为这就像把龙看作是他珍贵的金山的补充一样愚蠢。如果执意如此,你将目睹你无法理解的恐怖。

四、那么,还有什么其他选择呢? 

除了C++之外,还有什么选择?关于这个问题,我将根据个人观点来回答,我也会努力解释为什么我是这样想的。

1.Python/ target=_blank class=infotextkey>Python

有些人会告诉你Python很烂。然而,我要告诉你,我喜欢Python,因为它很少让我失望。当我需要写一个简单的工具来自动做一些事情,我希望它在任何地方都能工作时,Python 就是我的梦中情“语”。

它的长期支持、庞大的社区、包管理器和现有的工具使我很难不向初学者推荐这门语言。它的语法确实非常具体,有些人甚至会说它很奇特,但是在使用它一段时间后,只有当我不得不将代码块移动到不同的位置并手动修复每个缩进时,它才会让我感到恼火。它甚至有类型提示和易于使用的工具,以确保你遵守键入规则,有些人可能会觉得非常有用。

不过,对于初学者来说,你很可能希望将重点放在庞大的PyPI存储库上,以便为自己编写一些有用的东西。它的文档也相对不错,甚至有一个教程让你入门,但如果你完全是IT新手,我建议你寻找一个更适合你的知识水平的入门教程,因为“官方”的教程不是很面向新手。

2.JAVAScript

它是通往广阔 Web 应用程序世界的非常简单的门户,但不仅如此,因为现在你几乎可以在任何地方插入 JavaScript......我个人不是这种语言的粉丝,但从我所看到的,我发现从 JavaScript 开始的人有一定的“自由”,可以在他们想要的任何地方使用这种语言。我更支持JavaScript作为初学者,而不是C++,但是要注意这种语言自带的许多陷阱。这基本上适用于任何语言,但大开发不会告诉你这一点!

3.Kotlin

如果你想学习Java,不管你有什么紧迫的理由,尽量放弃Java,学习Kotlin吧!如果你想制作Android应用程序,并且你更愿意使用官方工具而不是一些web开发工具,Kotlin就是你的理想之选。它的Java遗产使它成为一种相当不错的入门语言,因为你既有一门漂亮的现代语言,也有很好的现代语法和有用的功能,使用起来非常愉快,还有一个庞大的库存储库,其中一些库在Kotlin出现之前很久就编写了。我很少使用这门语言,但我几乎享受使用它的每一刻。

4.C

你想和你的硬件保持密切的关系吗?如果是,这就是一门合心意的语言。平心而论,C确实缺乏真正的泛型,但这并不妨碍人们现在使用它。

这份清单绝不是全面的。有很多被认为“适合初学者”的语言没有出现在这个列表中,只是因为我从来没有使用过它们,或者工作了太久,以至于我的知识储备已经不适应其当前的发展状态(比如C#,我想说点什么,但我真的不能)。

请注意,我在这里的重点是推荐一种相对容易学习和使用的语言,基本标准是它有一个大的社区和大量的学习资源。C++在这些方面都缺乏,这使得以“正确”的方式学习现代C++变得异常困难。而且,公平地说,这使得在C++中做任何事情都变得不合理地复杂和痛苦。

曾经尝试过从头开始设置具有自动单元和集成测试的C++项目吗?我做了,但都以失败告终。不是因为这是不可能的,而是因为我宁愿选择一种支持开箱即用的语言(至少是单元测试)。

四、当真正有意义的时候,再将C++作为首选

任何规则都有例外,当然也包括我的“不允许初学者使用C++”规则。

对我来说,最明显的例外是把嵌入式编程作为你想做的事情。这也是为什么C在我的列表上的原因——因为C比C++简单得多,所以它开始可能是一个更好的主意。但是,如果你想使用Arduino,就像现在大多数初学者一样,只坚持使用C没有什么意义,因为你已经可以访问C++中功能强大且相对易于使用的功能(并且可能必须使用,这取决于你使用的库)。当然,你可能没有标准库及其花哨的功能(我认为这是一件好事),但你仍然拥有模板、lambda表达式、constexpr和许多更酷的功能。如果你想摆弄硬件,那么学习C++对你来说可能是不可避免的。

另一个明显的情况是“你必须学习它,因为学校/大学/工作/我和一些C++开发人员一起做的业余项目”。或者你可能只是非常、非常、非常强烈地、奇怪地专注于学习C++。对此,我没有解药。我只有一个建议:尽量坚持使用现代的资源,不要被过时的、早于C++11的教程和那些名声可疑的书籍所吸引。

而且我真的想不出还有什么其他的情况能让C++真正有意义。

不久前,我曾说OS-dev是一个很好的利基,但你也可以用C来做OS-dev,还有别忘了Rust,如果你问我的话,我认为这比C++更明智。借用检查器可能很难,但它就在那里,永远不会离开你。你想从C或C++中得到同样的承诺吗?还是自行配置吧。而且它还不如Rust为你的代码所做的一半好。图形编程和游戏开发?是的,也许吧。如果你仍然年轻天真,这听起来是个不错的选择——你甚至可能毫发无损地走完这条路。但话又说回来,你可能不会。我还是会先看看其他的选择,因为很多人用C++做,并不意味着你也必须用C++做。

我可能听起来像一个非常讨厌C++的人,说实话,也不尽然。我花了好几年的时间学习这种语言,其中一半的时间我都在与它抗争。我会后悔吗?我很后悔没有早点改变方向,但我想说的是,我从C++中学到的很多东西在某些时候都很有用。我能在学习不同语言的同时学习这些东西吗?是的,其中一些,但不是全部。

如果我可以重新开始我的旅程,我会选择不同的道路吗?当然,我会直接跳到Python或web开发,但考虑到我的兴趣和专业领域,我最终还是会选择C++。

我也不是说永远不应该学习或使用C++。它有自己的东西,有一定的通用编程经验和建立软件项目的经验,就有可能使用它。但是你首先需要这些经验和知识,与其他可用的方法相比,在C++上一条道走到黑可能无助于你获得这些知识。

参考链接:https://steelph0enix.Github.io/posts/choosing-first-language/?ref=dAIlydev



Tags:C++   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
C++常见避坑指南
C++ 从入门到放弃?本文主要总结了在C++开发或review过程中常见易出错点做了归纳总结,希望借此能增进大家对C++的了解,减少编程出错,提升工作效率,也可以作为C++开发的避坑攻略。...【详细内容】
2024-04-03  Search: C++  点击:(4)  评论:(0)  加入收藏
C++ 之父反驳白宫警告:自诞生第一天起,C++ 的目标就一直是提高安全性
整理 | 郑丽媛上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语...【详细内容】
2024-03-25  Search: C++  点击:(4)  评论:(0)  加入收藏
八个 C++ 开源项目,帮助初学者进阶成长
通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。1.ThreadPool一个简单的 C++1...【详细内容】
2024-03-22  Search: C++  点击:(21)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03  Search: C++  点击:(68)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  Search: C++  点击:(113)  评论:(0)  加入收藏
C++质数检测器的设计与实现​
质数,作为数学中的一个基本概念,一直以其独特的性质吸引着众多研究者和爱好者。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。在实际应用中,质数检测也扮演着...【详细内容】
2024-01-15  Search: C++  点击:(110)  评论:(0)  加入收藏
指针变量在C/C++中的内存占用
在编程领域,尤其是C和C++这类底层语言中,指针是一个核心概念,它允许程序直接操作内存地址。然而,关于指针本身在内存中占用的空间大小,却常常让初学者感到困惑。本文将深入探讨这...【详细内容】
2024-01-09  Search: C++  点击:(94)  评论:(0)  加入收藏
C++的面向对象编程:深入解析与理解
当我们谈论C++时,面向对象编程(OOP)是一个无法回避的话题。那么,C++的面向对象究竟是什么?为什么它如此重要?本文将从基本概念到实际应用,为您详细解析C++中的面向对象编程。一、面...【详细内容】
2024-01-03  Search: C++  点击:(95)  评论:(0)  加入收藏
有什么好用的C/C++源代码混淆工具?
开始使用ipaguard前言iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP...【详细内容】
2023-12-29  Search: C++  点击:(117)  评论:(0)  加入收藏
C++中new与malloc:内存分配机制深度解析
本文旨在深入探讨C++中new和malloc两种内存分配机制的区别。通过对比它们在内存分配、初始化、错误处理、调用构造函数/析构函数、类型转换和使用便捷性等方面的不同,我们将...【详细内容】
2023-12-27  Search: C++  点击:(126)  评论:(0)  加入收藏
▌简易百科推荐
C++常见避坑指南
C++ 从入门到放弃?本文主要总结了在C++开发或review过程中常见易出错点做了归纳总结,希望借此能增进大家对C++的了解,减少编程出错,提升工作效率,也可以作为C++开发的避坑攻略。...【详细内容】
2024-04-03  腾讯技术工程    Tags:C++   点击:(4)  评论:(0)  加入收藏
C++ 之父反驳白宫警告:自诞生第一天起,C++ 的目标就一直是提高安全性
整理 | 郑丽媛上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语...【详细内容】
2024-03-25    CSDN  Tags:C++   点击:(4)  评论:(0)  加入收藏
八个 C++ 开源项目,帮助初学者进阶成长
通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。1.ThreadPool一个简单的 C++1...【详细内容】
2024-03-22  AI让生活更美好  微信公众号  Tags:C++   点击:(21)  评论:(0)  加入收藏
C# 中15个值得收藏的开源项目推荐
在开源的世界里,C# 编程语言也占有一席之地。这些开源项目涵盖了多个领域,从框架、库到工具,它们为C#开发者提供了丰富的资源和工具,帮助他们更高效地开发、测试和部署应用程序...【详细内容】
2024-03-20  程序员编程日记  微信公众号  Tags:C#   点击:(29)  评论:(0)  加入收藏
C#异步编程:Task.Run vs. async-await,掌握基础与高级用法
概述:C#中的异步编程有两主要方式:Task.Run用于在后台线程执行同步操作,而async-await更适用于清晰表达异步流程。基础用法展示了它们的简单应用,高级用法则演示了它们的结合使...【详细内容】
2024-03-09  架构师老卢  今日头条  Tags:C#   点击:(22)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03     AI让生活更美好  Tags:C++   点击:(68)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  AI让生活更美好  微信公众号  Tags:C++   点击:(113)  评论:(0)  加入收藏
C# 线程本地存储为什么线程间值不一样
为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类...【详细内容】
2024-01-26  一线码农聊技术  微信公众号  Tags:C#   点击:(66)  评论:(0)  加入收藏
C++质数检测器的设计与实现​
质数,作为数学中的一个基本概念,一直以其独特的性质吸引着众多研究者和爱好者。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。在实际应用中,质数检测也扮演着...【详细内容】
2024-01-15  鲨鱼编程  微信公众号  Tags:C++   点击:(110)  评论:(0)  加入收藏
C# 登顶!超越Java或非空想
整理丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)近日,TIOBE编程社区公布年度编程语言,此次摘得这一桂冠的是C#。这也是C#在TIOBE二十多年评选历史中首次赢得这一年度大奖。C#虽...【详细内容】
2024-01-15    51CTO  Tags:C#   点击:(112)  评论:(0)  加入收藏
站内最新
站内热门
站内头条