关于同时学 Python 和 C 的那些事

2022-03-20 17:24:54 +08:00
 NanFengXiangWan
本人 Python 学了估计有半年多,这久才开始学习 C 语言,请问大家在同时学习两门编程的时候有没有什么小建议,比如我现在在学 C 语言做一些小例题的时候,例如:素数判断、前 n 项求和、求最大公约数自己自己都会用 Python 再来复现一遍,感觉更能加深对代码逻辑的理解,不知是不是我产生的错觉。。。
2936 次点击
所在节点    程序员
12 条回复
AX5N
2022-03-20 17:39:04 +08:00
什么意思,新手入门吗?那别学 C 。

C 的语法非常简单,凡是有一定编程经验的人看两眼就学会,但是学会了 C 的语法不代表能理解 C ,理解 C 需要有汇编基础,最好还亲自操纵过内存,否则只能学个表面,没有任何意义。

如果你是在校学生,学到能应付考试程度的语法就够了。在初级阶段编程是门手艺活,而不是推理题,应该追求的是熟能生巧,而不是解各种奇怪的数学题,多写你的 python ,写多了你自然就会 c 了。
duke807
2022-03-20 18:14:54 +08:00
學 c 最好玩一些 c 擅長的東西,譬如玩一下 stm32 ,你會發現新大陸

重複素数判断、前 n 项求和、求最大公约数聽起來就很無聊,而且沒有意義,因為這些編程的核心是編程思想,而不是語法,這方面的編程思想 python 和 c 沒區別

還有,學 c 一定要在 linux 環境,因為 linux 環境 c 是一等公民,真正可以做很多事
villivateur
2022-03-20 18:28:34 +08:00
学 c 的话一定要直接玩内存,玩指针,多尝试一些疯狂的事情,比如靠几行代码把系统搞崩
chuanqirenwu
2022-03-20 18:36:40 +08:00
如果学 Python 的话,建议同时学 C++,因为 Python 是对 C++ 更高级别的抽象。学 C++ 的同时,又可以看看 Rust 。
ZXYF
2022-03-20 18:40:55 +08:00
亲身体会,如果新手的话,长远来看,C 学多一点真的好处很多,python 很多复杂一点的东西,借着学 C 的过程,很容易吃透,但是像楼上几个老哥说的,要想学好 C ,一定要去玩指针,内存,STM32 ,驱动,内核这些,理解透(可能很难,但是有这个过程对以后的帮助也是非常大的)
jones2000
2022-03-20 18:44:44 +08:00
cpython , 混合编程不就可以了嘛,2 个语言都可以用。
ch2
2022-03-20 19:31:09 +08:00
C 语言真正有价值的是 unistd 这些跟操作系统密切相关的库函数
你不学操作系统,没必要学 C 语言,特别是非常通用的计算,C 的精髓并不在这上面,比如网络编程现在有更专精于这一领域的 Go
除了几个特定领域比如嵌入式啥的非 C 不可,其它大部的工作还是面向 x64 展开的,性能强资源管够,压根没多少纯 C 的出场机会
FrankHB
2022-03-20 20:33:10 +08:00
学 C 对大多数没像样基础(指只摸过 Python 这种缺少严格的 spec 语言入门的)用户来说,最大的收获可能是知道 C 真有对象。
不开玩笑。
skinny
2022-03-20 21:32:21 +08:00
别信楼上那些的,就瞎装逼,Python 就很多库就用 C 写的,一门语言而已,不要想那么多,不要计较那么多,边学边用就是了
wffnone
2022-03-20 21:50:19 +08:00
C 你就把数据结构的实现这些过一遍就行了,几天的事情。

算法题用 C 写比较有快感。但是在工程领域其实你很少能体会到这种纯粹编程的快感,这也不是你的竞争力。
zomco
2022-03-21 09:47:19 +08:00
C 是要边用边学的。多看看优秀实践的开源代码,可以的话参与其中,C 好多编程经验是只可意会不可言传的,而这些经验都沉淀在项目代码里
FrankHB
2022-03-21 18:30:01 +08:00
看到 @skinny 的说法,我重新审视了一下这楼的问题,觉得有必要澄清。
上面所有楼层的回复,除了最开始两个以及我说的,没体验直接信都有直球误导的风险。
因为这些观点不说是否正确,至少都是片面的。

比如说:
@villivateur 从来没有靠几行代码把系统搞崩的体验照样可以掌握好 C 。
@chuanqirenwu 从来不学 C++也可以学好 C 。(虽然我不反对学 C++作为长期性建议。)
@ZXYF 学好 C 不保证能理解清楚大部分 Python 复杂一点的东西,反而可能养成依赖实现细节的坏习惯而学坏。
@jones2000 这是个进阶学法; CPython 的 C 这样的互操作不是适合新手学习的,虽然程度整体比混用 C 和汇编来得容易(因为 CPython 对互操作的支持相对非标准 C 的“官方性”更强而更完善)。
@ch2 不学 unistd 而使用 C 的价值仍然存在,比如制造和 unistd 并行的东西。Windows NT/ReactOS 执行体也是基本都用 C 写的,这也算操作系统,但和 unistd 无关,所以你说的还有点自相矛盾。注意嵌入式还有没操作系统的独立实现。当然,市场上讲非操作系统的东西用 C 来讲没多少收益。

而学会怎么写程序,说实话和是不是用 C 没什么关系。换别的看上去通用点的语言一样是这个建议,但一样不会让你特别地学会某种具体语言。
其它白开水观点不评价。
我强调的问题是,C 特别容易让人陷入表面上学会而实际上了解的另一套玩意儿的问题。极端点的就是谭浩强 C 。“C 没有对象”是另外一个常见的误解。这种错误通常不能通过你会不会写程序做对几个题目检验出来,直到参考文献推理一些具体的问题到底是谁做错的时候,才发现很容易被坑。

避免这种问题的简单方式就是阅读相关的文档。任意不足以区分具体语言和其它语言的区分的文献都不算是足够相关的。
务必摈除某些人认为的“装逼”思想。阅读文档理解意思这就是专业用户吃饭的本事。并且,这就是工程师这个职业的本职工作和区分于其它分工发挥价值的地方。
所谓“用”,反而是形而下的辅助手段。极端情况下一个用户可以化身人肉编译器在没有编译过一行程序的情况下“学会”某种语言(特别是在这种语言不存在实现时——这才是真正能算装逼沾点边的,但也就是专业人士的家常便饭)。
然而没有谁能虚空脑补出别人决定的设计。

自测具体语言的了解程度的简便方式同样直接阅读相关上下文的任意的文档,至少能有自信了解大多数是在讲什么,比如:
www.open-std.org/jtc1/sc22/wg14/www/docs/n2396.htm
毕竟,如果连 bug report 都看不大懂,这也水过头了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX