在C语言的发展过程中会遇到两个问题:
理解了基础之后,就少了很多练习。而且大量的练习本身也很费时,因为在考虑语法时要考虑逻辑问题,捉襟见肘,此时初学者,逻辑抽象能力和语法运用都是很难的。
阅读代码方面,C语言的成熟工程代码一般都会比较冗长,函数中夹杂了大量的宏和指针操作,我阅读的感觉就是读后先忘前,很难着手。若不了解某一函数的功能,就很费时费力地强行读取它,容易放弃。
如此一来,学过基础知识后的进阶之路就真的很陡了。在C语言的发展过程中,我个人大胆提出了一条相对平和的道路:
1.实现了链表、可变长数组、散列表等基本数据结构,实现了方便的字符串结构体。再大胆使用自己编写的程序。别怕写BUG,也别怕效率不高。在现代程序设计中,容器是非常重要的武器,不需要它。而且写容器时会练习封装,指针,内存分配,这些都是C语言在入门时极为重要的方面。
2.工作学习使用c语言比较好。举例来说,现在很多本科和硕士毕业论文都是用c语言完成的,此时练习更多是最好的时机。
3.尝试ACM竞赛,大、北邮这样的高校都有相似的网站,不仅有题目,还有算法,有答案,有提示,而且可以直接在网页上做题。刷题会得到及时的反馈,一旦你刷了3道题,那种成就感会让你继续做下去,哈哈。除了你对算法本身感兴趣之外,那么刷30道题基本也没问题,毕竟,这样的刷题会使算法的能力大打折扣,但对于架构能力的提升并不起作用,对于大多数人来说,建议不要刷太多。
4.非常重要的隐私:如果除了练习之外没有其他的练习机会,那就把C语言放在一边,快速地学习Python、Lua、JavaScript之类可以立即达到功能效果的语言,学会良好的动态语言有两个好处:
首先,通过表层,可以快速改进逻辑代码的编写。使用C语言构思半天就可以写出一点点的函数,使用动态语言会更快,动态语言会使我们摆脱内存分配、容器等基本问题,直接达到我们想要的效果。采用动态语言后,这些逻辑代码可以用C语言模仿,相当于一步到位,直接达到目标。
其次,更高层次的语言对于底层语言的编写有着很强的指导作用。在工作中,我个人用了很长的时间使用C++,但总觉得遇到瓶颈无法突破。在学习Python、编写一到两个更复杂的工具、从另一个角度突破逻辑设计障碍之前,我并没有感到编程水平有了显著提高。
在掌握了Lua和Python之后,在查找资料的同时又学习了Lua和Python的C源代码,这对提高C语言很有帮助。
下面是一个简单的例子:在一个文件中有许多对ID和字段,它们分别代表另一个文件。另外一个文件的内容也可以与更深层次的文件链接起来。如何将这些文件读入到一个树中?
对于有一定能力的人来说,这个问题是基本问题,而对于初学者可能是一个门槛,我建议先用Python来解决这些问题,然后理清思路,把它改成C代码。
概述:
总而言之,C语言学习的知识点少,难度大。上述给初学者提供了一些建议,在进阶方面写下了不少个人经验,希望对C语言初学者和进阶者有所帮助。如何学习c语言是一个重要的问题,读者有意见和建议,可以讨论交流,有问题可以修改。