如今,当考虑用计算机解决实际问题时,必须使用高级语言。C语言在你创作的代码和针对实际硬件编译时执行良好的代码之间取得了很好的平衡。C语言有简单明了的代码结构和大量有用的运算符(这些特性已被广泛应用于许多后续语言中,使其成为微控制器精简代码的理想选择)。C语言还可以将问题分解成更小的子问题。你可以对代码(以及代码中不可避免的错误)进行推理,这是一件非常方便的事情。
不过,C语言也有它的缺点。C语言不具备其他语言中有的一些高级特性,如Java的自动内存垃圾回收。许多现代语言以牺牲一点性能为代价,向程序员隐藏了大部分这些细节。C语言要求你在分配和管理内存等资源时更加谨慎。有时,这种要求会让人感觉烦琐。
C语言还能让你编写一些令人印象深刻的bug。它没有类型安全或任何安全检查。同样,作为程序员,这种放手不管的方法意味着你可以编写出巧妙、高效的代码,让硬件真正运转起来。这也意味着,如果你出了问题,只能靠自己去发现并解决问题(像精简器和调试器这样的工具可以帮上大忙,后续我们肯定会关注这些工具)。