如果你想学习,你可以在网上找找文档,找找教程。
学习一门技能最主要的还是兴趣,每个人喜爱的点都不同,这个需要你自己寻找,你要找到编程的兴趣,才能学好它,如果一直认为它枯燥,那么你可能不是很适合编程。
如果你找到了兴趣,想学习编程,我推荐你学习Python,它语法简单,对初学者友好,我的编程启蒙语言就是Python。
当然,如果你想学习其他语言,也可以自己了解各语言之间的优劣,选择一门适合你的语言。
多看看书
是对的
看书不要死看
先把基本的语法
看懂
再
要看他的算法
掌握这两点
就不会很吃力了
有的刚开始看不怎么明白
你一定要坚持
等看到后面
有时你就会豁然开然
前面为什么不怎么懂了
一、C语言是最值得学习的语言
学习C语言,首先要明确地告诉自己:C语言是世界上最值得学习的语言。
如今决定学习任何一门其他语言之前,都要先考察这个语言有什么成功项目吗?唯独C语言没有必要问,因为世界上所有最最重要的的系统中,都必然有C语言的身影。比如操作系统内核、高级语言底层等等。
为什么C最适合担任系统核心?主要原因可能是C语言具有和汇编语言的对应性,一条C语言代码,对有经验的人来说,可以转换为一条或多条汇编代码,也就是说编译结果具有可预测性。C代码不会在被编译时被加上奇奇怪怪的修饰,也不会在二进制兼容性方面带来大问题。这种稳稳当当的语言,一切都在掌握之中,一切荣耀归属于coder,一切错误也归罪于coder。
学习C语言的同时,就自然而然的理解了硬件与操作系统的浅表一层。比如int有几个字节的问题,已经是QQ加群验证是否是程序员的一个标准了(笑),这从侧面说明了学习C语言时确实会关心底层软硬件的实现。C语言简单的基于值类型的数据类型体系(引用靠指针,指针本身也是值类型),保持了和硬件底层的一致性(即内存、缓存、寄存器只能保存值),不会出现其他语言比如C#那样既有值又有引用反而对理解底层实现制造了障碍。
从某些角度上讲,C语言从设计上来说并不是为了让我们更好的写逻辑代码而设计的,它真的是“只能是这样”,没有对错好坏之分。因为计算机体系结构就是这样的、汇编就是这样的,所以C语言大致也只能是这样的,谁也不能随意捏造它。它足够简单,评论它的设计优劣意义不大。
废了这么多口舌,是为了坚定思想,端正态度,只有抱着“最好”的态度,才能排除杂念,勇往直前。时代在进步,某些东西易逝,而另一些东西持久。很多编程大师都用亲身经历告诉你,C语言永远值得用最纯粹的态度去学习。
二、学习C语言的初步路线
我们说学习任何东西,都有先把书读厚,再把书读薄的过程。也就是说,先学习大量知识和细节,然后总结归纳、提纲挈领,就彻底掌握了这门知识。
而学习C语言,一开始就不那么厚 : ) 。大道至简,只需一本:
lt;img src="" data-rawwidth="286" data-rawheight="337" class="7d27-c76c-95c1-8523 content_image" width="286"gt;
这书中英文版均可,前面谈到过,C语言本身特性并不多,所以这些年来从C89到C99到C11,只是增加了一些细枝末节的改动,现在你用C89的书仍然没有什么大问题(当然还是用第二版C99吧)。不用买一堆入门到精通、高级C、本质论、Primer互相参照。C语言的教材、参考书都是这薄薄一本。
C语言的语言本身很容易“精通”,一旦你理解了指针、函数指针等问题,基本知识方面就横行无阻了,很少会遇到完全没见过的语法。
C语言基本学习过程真的没有太多好讲的,假设每天学习两小时,每周学习5天,只要动手多写例子,把例子保存好随时翻看,那么C语言的语法基础很快就能全部过完一遍,估计半个学期的时间就能看完。难点可能是在指针的使用,这需要多看资料、多画图、多写代码尝试,给自己点时间强行突破即可。
但是问题也在这里,由于宏和指针的存在,万事皆有可能。很多经典的C代码,真的是没见过之前根本不知道还能这么用,举个入门级的例子,Linux内核中的一个通用链表:
// 定义链表节点结构
struct list_head
{
struct list_head *next, *prev;
};
// 创建链表
#define LIST_HEAD_INIT(name) { (name), (name) }
#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)
// 判断链表是否为空
static inline int list_empty(const struct list_head *head){return head-next == head;}
// 运行时初始化链表
#define INIT_LIST_HEAD(ptr) do { (ptr)-next = (ptr); (ptr)-prev = (ptr); } while (0)
// 我自己写的测试函数,方便读者阅读:
int main()
{
LIST_HEAD(my_list_head);
printf("列表是否为空 %d\n", list_empty(my_list_head));
return 0;
}
C语言写的经典代码经常会用这种“过度简洁”的语法,初学之后会看得云里雾里的。如果你能看懂,又会有一个更大的问题——这个list_head结构体里面,没有数据。自定义数据应该放在哪呢?这又需要深一步研究了。
稍微高深点的比如任意动态语言的源码,比如Lua的源码,对于刚学懂了C语言的同学来说,真是每个字都懂,连在一起就不认识的感觉。还有一些经典算法,比如Subversion的源码,都很值得深入分析,只要理解一个模块,就会收获巨大。具体的例子这本书里提到好几个:
lt;img src="" data-rawwidth="300" data-rawheight="369" class="c76c-95c1-8523-beb3 content_image" width="300"gt;
赏析一下书中前几个问题:
第1章 正则表达式匹配器
第2章 Subversion中的增量编辑器:像本体一样的接口
第3章 我编写过的最漂亮代码
第4章 查找
可能是知识结构不足,本书后面的例子我读起来有点不清晰。对C语言学习者来说,前几个例子非常值得一读,可以迅速意识到自己的不足并迅速成长。本书建议先找电子版试读。
PS:关于C语言开发环境
1、Windows平台,请使用Dev-C++。不要用Visual Studio,对C语言支持不完整。
2、安装Linux虚拟机,桌面版本的,比如Ubuntu,现在貌似“深度Linux”挺火,没试过。
三、关于进阶
C语言的进阶会遇到两个主要问题:
1、明白基础以后,缺少大量练习。而大量练习本身会非常费时间,因为在顾及语法的同时要顾及逻辑问题,捉襟见肘。这时候的初学者,逻辑抽象能力和语法使用都是半吊子,非常难受。
2、阅读代码方面,C语言的成熟工程代码一般会比较冗长,函数中间夹杂着很多宏和指针操作,我阅读的感觉是读后面忘前面,非常难入手。如果不明白某个函数的功能,强行将其读懂非常费时费力,容易放弃。
这样一来,学完基本知识之后的进阶之路真的非常陡峭。
我个人大胆给出C语言进阶的一个相对缓和的路线:
1、实现链表、可变长数组、哈希表等基本数据结构,实现方便的string结构体。然后大胆的用在自己写的程序中。不要怕写的有BUG,也不要怕效率不高。现代编程中容器是非常关键的武器,没有容器寸步难行。而编写容器时会练到封装、指针、内存分配,都是C语言进阶时极其重要的方面。
2、如果工作学习中用到C语言就再好不过,比如现在很多本科、硕士毕业论文都要用C语言实现,那么这时候抓住机会多练练,是最好的。
3、尝试ACM竞赛题,ACM竞赛和OnLineJudge平台,比如
类似有很多,北大、北邮这种大学都有类似的网站,上面不仅有题目,还有算法、有答案、有提示,还能直接在网页上做题。刷题可以获得及时反馈,一旦你AC了3道题,那种成就感可以让你继续下去,哈哈。不过除非你兴趣就是算法本身,那么刷30道题基本就可以了,毕竟这种刷题会猛烈地提高算法能力,但是对架构能力的提升几乎没有任何作用,对大多数人来说不建议刷太多。
4、非常重要的私货:如果除了做练习题以外没有练习机会,那么请把C语言放一下,快速学习Python(首选)、Lua(次选)、JavaScript(或TypeScript更好)等能够立即实现功能效果的语言。学习好的动态语言有两方面好处:
第一:表层来说,能迅速提高逻辑代码的编写能力。用C语言构思半天才能写一点的功能,用动态语言会快速的多,动态语言将我们从内存分配、容器等基本问题中解脱出来,直接实现我们想要的效果。用动态语言实现之后,可以用C语言仿写这些逻辑代码,相当于按图索骥,直达目的。
第二:深层来说,较高级的语言对底层的语言编写有强烈的指导意义。我个人在工作中使用C++用了很长时间,但是总感觉遇到瓶颈无法突破。直到我学习了Python,写了一两个比较复杂的工具,从另一个角度突破了逻辑设计的屏障,才感觉到编程水平有了明显提高。
第三:在掌握了Lua或Python后,再找资料一边学习一边看Lua和Python的C源码,对提高C语言水平有实质性的帮助。
这里举一个简单的例题:一个文件中有很多对ID和字段,这些ID和字段对分别代表另一个文件。而另一个文件内容可能会链接到更深一级的文件。怎样读取这些文件组成一棵树呢?
这个问题对能力达到一定水平的人是基础问题,而对于初学者来说可能是一个门槛。这种问题我的建议是用Python或Lua的表、字典来解决,然后理清思路之后,改写为C代码。
学习开始难是正常的
可以除非你是超级天赋选手,否则学习都会有一个从易到难,从难懂到理解,而且编程本身就是一个学习门槛比较高的领域,要想明白代码必须要在语言、数学、物理等领域了解,否则就很难进入实操,不过通过一些比较专业的教学机构和一些科学的学习方式可以很快的就能进去该领域工作,然后在工作中学习。
许多灵活用工就是这样,一开始不是很懂,有些是才有转型的想法,通过一些灵活用工的机会让自己慢慢尝试慢慢适应,最终成为技术大牛。
一、了解其基本
这点很重要,不知道它干什么用拿来干什么,欣赏一些牛人写的代码,熏陶一下。用网络上各种信息去了解干什么的,拿来所用才行。
二、文档和框架
先看文档和框架,其实就是将介绍在自己大脑中又个印象,建立起对它的感性认识,在就是建立初期的认识体系,对往后学习其奠基和对比。
三、编译运行
不能跑起来的代码就跟你心目中的女神一样,想而得不到。个人主张开源项目必须能跑起来,这个是调试的基础。
四、看代码跟流程
多项目的了解学习够不够深入,全在代码和流程上了。
扩展资料
代码编写的方式都会参照软件开发的一些标准做法。比如定义一个变量、定义一个类以及相关的语法,另外还需要明白相关的针对当前代码数据结构、设计模式。
此外,还需要了解当前代码作者编写当前代码的意图(或者称为需求),作者想解决问题的背景等。所以读懂代码的前提是得多写代码,这样就容易的看懂别人代码相表达的意思。
初学者要看懂代码首先从要需求分析了解,然后是系统分析,最后是块的理解。看懂代码其实不难,大抵不过是选择,分支,循环。语法如果看不懂,那就需要补补基础,先弄清楚这段代码要做什么,有说明最好,可以帮你理解,没有说明就自己试着过一下代码流程。
最重要的是学会写程序,C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。
从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。
最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。
年夜 野关怀 未暂的地猫 四月运动 去了——地猫康健 节,那是地猫结合 品牌为天下 消费者提求康健 生涯 孬物的运动 ,这地猫康健 节是几月几日必修上面去咱们便去给年夜 野讲授 一高那圆里的内容。一、预冷光阴: 二0 二 二年 四月 一0日00:00:00- 二0 二 二年 四月 一 一日 一 九:...
野关怀 未暂的地猫 四月运动 去了——地猫康健 节,那是地猫结合 品牌为天下 消费者提求康健 生涯 孬物的运动 ,这地猫康健 节是几月几日必修上面去咱们便去给年夜 野讲授 一高那圆里的内容。一、预冷光阴: 二0 二 二年 四月 一0日00:00:00- 二0 二 二年 四月 一 一日 一 九: 五 ...
剧情吧工夫 : 二0 一 六-0 一- 二0 0 九: 五 五:00 长帅第 一散剧情先容 小教良肇事 多多 弛做霖狠口学训 长帅弛教良兵马 平生 ,活了一百明年 ,早年正在美国夏威夷渡过 。当他远望 着这一马平川的年夜 海时,恍如看到了本身 从一个小毛孩成少为长帅的行程。 弛教...
// 检测MySQL办事 function getMysqlVersion(){if (extension_loaded( 三 九;PDO_MYSQL 三 九;)) {try {$dbh = new PDO( 三 九;mysql:host= 一 九 二. 一 六 八. 二. 一0 三;port= 三...
跟着 人们的松凑生涯 ,进行互联网止业的人年夜 多皆把一地的空儿支配 的谦谦的,那用户劳碌 的时刻 ,基本 无意来存眷 您的拉广,只要捉住 了用户整零星 碎的空儿 对于其入止拉广,异时他也能挨领无聊赖的空儿,如许 的后果 便异常 沉紧,上面,尔联合 案例去为年夜 野分享一高,若何 捉住 用户碎片空儿...
Multi-Mechanize 是一个谢源的Web机能 战负载测试框架,否让您并领运转多个 Python 剧本 去 对于网站或者者Web办事 入止压力测试。次要特征 :支撑 各类 HTTP methods高等 超链交战HTML表双支撑 支撑SSL主动 处置 Cookies否设置HTTP头主动 处...