当前位置:网站首页>C语言是低级和高级的分水岭
C语言是低级和高级的分水岭
2022-07-06 09:25:00 【编程小鱼六六六】
作为一门古老的编程语言,C语言已经坚挺了好几十年了,初学者从C语言入门,大学将C语言视为基础课程。不管别人如何抨击,如何唱衰,C语言就是屹立不倒;Java、C#、Python、PHP、Perl 等都有替代方案,它们都可以倒下,唯独C语言不行。
程序是在内存中运行的(我们将在《载入内存,让程序运行起来》一节中详细说明),一名合格的程序员必须了解内存,学习C语言是了解内存布局的最简单、最直接、最有效的途径,C语言简直是为内存而生的,它比任何一门编程语言都贴近内存。
所谓内存,就是我们常说的内存条,就是下图这个玩意,相信你肯定见过。
所有的程序都在拼尽全力节省内存,都在不遗余力提高内存使用效率,计算机的整个发展过程都在围绕内存打转,不断地优化内存布局,以保证可以同时运行多个程序。
不了解内存,就学不会进程和线程,就没有资格玩中大型项目,没有资格开发底层组件,没有资格架构一个系统,命中注定你就是一个菜鸟,成不了什么气候。
以上这点我有深刻的体会!工作期间我曾专注于网站开发,虽然能够设计出界面漂亮、体验良好的网页,但是对内存泄漏、多线程、共享内存等底层概念一窍不通,感觉和周围同事的差距很大,这让我非常郁闷,不知道如何突破。我曾多次尝试学习内存和线程,也找了很多资料,但是无论如何都啃不懂,到头来还是一头雾水。
离职后我全职运营C语言中文网,于是决定再次系统、深入、全面地学习C语言,并结合C语言去了解一些内存知识,这个时候我才发现,原来C语言就是为内存而生的,C语言的设计和内存的布局是严密贴合的,我因为学习C语言而吃透了内存,了解了计算机内存是如何分布和组织的。
C语言无时无刻不在谈内存,内存简直就是如影随形,你不得不去研究它。
至关重要的一点是,我能够把内存和具体的编程知识以及程序的运行过程结合起来,真正做到了学以致用,让概念落地,而不是空谈,这才是最难得的。
另外一个惊喜是,攻克内存后我竟然也能够理解进程和线程了,原来进程和线程也是围绕内存打转的,从一定程度上讲,它们的存在也是为了更加高效地利用内存。
从C语言到内存,从内存到进程和线程,环环相扣:不学C语言就吃不透内存,不学内存就吃不透进程和线程。
我感觉自己瞬间升华了,达到了一个新的高度,之前的很多谜团都解开了,和大神交流也没有障碍了。
「内存 + 进程 + 线程」这几个最基本的计算机概念是菜鸟和大神的分水岭,也只有学习C语言才能透彻地理解它们。Java、C#、PHP、Python、JavaScript 程序员工作几年后会遇到瓶颈,有很多人会回来学习C语言,重拾底层概念,让自己再次突破。
初学者最常问的几个问题
隔行如隔山,初学编程往往不知道从何入手,非常迷茫,以下几个问题是我经常被问到的,总结出来分享给读者。
1) 多久能学会编程?
这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。如果你每天都拿出大把的时间来学习,那么两三个月就可以学会C/C++,不到半年时间就可以编写出一些软件。
但是有一点可以肯定,几个月从小白成长为大神是绝对不可能的。要想出类拔萃,没有几年功夫是不行的。学习编程不是看几本书就能搞定的,需要你不断的练习,编写代码,积累零散的知识点,代码量跟你的编程水平直接相关,没有几万行代码,没有拿得出手的作品,怎能称得上“大神”。
每个人程序员都是这样过来的,开始都是一头雾水,连输出九九乘法表都很吃力,只有通过不断练习才能熟悉,这是一个强化思维方式的过程。
知识点可以在短时间内了解,但是思维方式和编程经验需要不断实践才能强化,这就是为什么很多初学者已经了解了C语言的基本概念,但是仍然不会编写代码的原因。
程序员被戏称为”码农“,意思是写代码的农民,要想成为一个合格的农民,必须要脚踏实地辛苦耕耘。
也不要压力太大,一切编程语言都是纸老虎,一层窗户纸,只要开窍了,就容易了。
2) 学编程难吗?
编程是一门技术,我也不知道它难不难,我只知道,只要你想学,肯定能学会。技术就是一层窗户纸,是有道理可以遵循的,在我看来,比搞抽象的艺术要容易。
在技术领域,编程的入门门槛很低,互联网的资料很多,只要你有一台计算机,一根网线,具备初中学历,就可以学习,投资在5K左右。
不管是技术还是非技术,要想有所造诣,都必须潜心钻研,没有几年功夫不会鹤立鸡群。所以请先问问你自己,你想学编程吗,你喜欢吗,如果你觉得自己对编程很感兴趣,想了解软件或网站是怎么做的,那么就不要再问这个问题了,尽管去学就好了。
3) 英语和数学基础不行,可以学会吗?初中毕业可以学会吗?
首先说英语。编程需要你有英语基础,初中水平完全可以胜任。编程起源于美国,代码中会出现很多单词,有英语基础记忆起来会非常容易,如果你不认识也没关系,我推荐你安装有道词典,它的划词功能非常棒,选中什么就及时翻译什么,不管是句子还是单词。这样,相信你开发出常用的软件不成问题。
当然,如果你希望达到很高的造诣,希望被人称为大神,那么肯定要阅读英文的技术资料(不是所有资料都被翻译成了中文),初中水平就有点吃力了。不过,长期阅读英文会提高你的英文水平,只要你坚持一段时间,即使只有初中水平,我相信借助有道词典也会提高很快。
如果你没有学过英语,不知道 am、is、are,那我该怎么说呢,有志者事竟成,只要你想学,相信英语的障碍你也能克服。
至于数学,只要你不打算搞算法、机器学习/人工智能、大数据/数据分析,会加减乘除法,知道次方、开方、科学计数法等最基本的概念,就不要把数学当做学习的障碍了。
4) 需要什么配置的电脑
如果你囊中羞涩,3K以上的台式机,4K以上的笔记本也可以胜任,当然有时候会卡顿。
经济条件允许的话,最好5K以上的台式机,6K以上的笔记本。
如果想从事编程行业,你早晚要有一台高配的机器。它不但会让你工作更加流畅有效率,还会让你觉得工作是一种享受,所以很多程序员配备了MacBook。
5) 学习编程要用Linux吗
很多大神都轻视地说,我不用Windows,一直在用Linux,只有Linux才能让你看到C的本质,C就是为Linux而生的。
话虽没错,但是你想想当初你学习Windows花了多长时间,是不是一开始连切换输入法也不会,编辑Word文档也不会;如果你切换到Linux,你也会遇到同样的问题,你需要一段时间来熟悉Linux,加大了你的学习成本,会慢慢消磨掉你对编程的兴趣。
所以我建议,你可以在Windows下学习C语言,完全没问题,如果有一天Windows不能满足你的学习需求了,那你再切换到Linux,这个时候你对编程已经很了解了,切换的成本也低了。
喜欢的话关注、收藏、评论、转发一波 ,比心么么哒!
资源&更深入的阅读资料:
领取资料的神秘通道开启点击链接加入群聊【C语言/C++编程学习基地】:828339809
边栏推荐
- JS --- BOM details of JS (V)
- Do you know the performance testing terms to be asked in the software testing interview?
- Jupyter installation and use tutorial
- ucorelab3
- 基于485总线的评分系统
- What are the commonly used SQL statements in software testing?
- cs零基础入门学习记录
- Threads et pools de threads
- LeetCode#204. Count prime
- 学习记录:串口通信和遇到的错误解决方法
猜你喜欢
Threads and thread pools
ucore lab5
Learning record: how to perform PWM output
ucore lab7
Learning records: serial communication and solutions to errors encountered
Do you know the performance testing terms to be asked in the software testing interview?
UCORE LaB6 scheduler experiment report
STM32学习记录:LED灯闪烁(寄存器版)
力扣刷题记录
ucorelab4
随机推荐
C4D quick start tutorial - Introduction to software interface
Matlab example: two expressions of step function
STM32学习记录:玩转按键控制蜂鸣器和LED
The wechat red envelope cover designed by the object is free! 16888
ucorelab4
UCORE Lab 1 system software startup process
Es6---es6 content details
How to become a good software tester? A secret that most people don't know
Jupyter installation and use tutorial
Learning record: STM32F103 clock system overview working principle
LeetCode#2062. Count vowel substrings in strings
LeetCode#412. Fizz Buzz
FSM和i2c实验报告
Threads et pools de threads
Do you know the advantages and disadvantages of several open source automated testing frameworks?
LeetCode#62. Different paths
What are the commonly used SQL statements in software testing?
Learning record: use STM32 external input interrupt
Cost accounting [13]
What to do when programmers don't modify bugs? I teach you