Teaching yourself programming
多数时候,个人活动的展开都源于某个具体的动机。或许你是为了可以写点小工具,解决日常生活中的一些重复劳动;或许,你心怀梦想,梦想着某一天完成一款你心目中完美的游戏;又或许是,你内心憧憬电影里的hack,觉得动动手指就完成那些神乎其技的事很cool。然而你需要知道的是,程序的世界是一个复杂的世界。它构建在计算机的基础之上,往上又衍生出众多不同的领域,而每一个领域都有自己独特的知识体系。所以,在你开始学习编程之前,请清楚的认识自己学习编程的动机。它能让你确定自己学习的方向,使你尽可能少的误入歧途。
在你开始学习之前,事先了解你将要涉及的领域是十分必要的。你可以通过某些渠道,如:google、百度、论坛、专业社区等等,来获取相关信息;也可以咨询熟悉那个领域的人,从他们那里获得针对性的建议,以便于你能事先制定一个计划。在这个计划里,包括了你可能要学习的知识,以及不同的阶段的可能的目标。
如果说,你想成为一名专业的程序员,并以此为生。那么你需要知道的是,扎实的计算机科学基础知识作为你职业发展的根基,非常重要。你可能需要知道计算机是如何运行起来的;操作系统是如何管理底层硬件,如何在用户和底层硬件之间发挥一个桥梁的作用;你还需要一些网络的知识,毕竟这是一个网络的时代,如果没有网络,计算机也不过是一个大一号的存储设备和音视频播放器罢了。需要注意的是,这并不意味着在你学习编程之前,你就必须掌握这些知识,你大可以在学习的过程中慢慢补充它们。往往,在学习的编程的过程中理解这些知识,能让你对它们的印象更为深刻,理解也更透彻。
你需要选择一门在你钟意的领域独领风骚的编程语言,来开启你的编程之路。你需要理解它的程序结构,理解什么是变量,什么是控制流,以此来帮助你完成一些简单的程序。但这仅仅是一个开始,你还要掌握一些编程思想。记住,编程是一项方法论和实践并重技艺。你需要深入学习这门编程语言,理解它的某些高级特性。学会使用相关的库和开发框架来完成更复杂,同时也拥有更多功能的程序。在你经过大量的练习之后,你也应该对什么是程序设计有了自己的认知。
这时,如果你并不满足于单纯的功能实现。你想要完成可维护性更强,性能更优秀的程序。这时你可以开始学习数据结构和算法,它可以帮助锻炼你的程序设计思维,让你懂得思考并具备动手完成高性能程序的能力。你可能还需要学习一些软件工程方面的知识,来帮助你写出结构更合理,也更加优雅的代码。
当你经历了上面的阶段,某种意义上说,在那个领域里你已经是一个合格的开发者,你已经具备了完成自己当初的设想的能力。到这时,你可能会深刻的体会到编程语言终究只是一种工具,它们有着自己擅长的应用领域,但也有自己的短处。所以,放开眼界,多学习几种不同风格的编程语言。体会不同的编程风格的特点,理解它们的优势和思想,这有助于开拓你的程序设计理念。当然,基础知识依旧重要,也不要陷入不停学习新的编程语言的奇怪循环。深度和广度,要彼此兼顾。
关于学习方式的选择。每个人学习的点,都不尽相同。我只能结合自身经历提供一些建议。这是一个信息爆炸的时代,你可以很轻易的通过互联网获取到一些你想要的信息。但是这里存在一个陷阱,往往能轻易得到的东西,不一定真的正确且有用。所以,筛选你的学习资料也是一项富有挑战的工作。在学习语言方面,跟随一部经典的著作来了解这门语言,是必要的。一本著作可能已经发布了一些年头,而每本著作关注的点可能不同。所以阅读相关的数本书籍彼此补充,再参照相关的官方文档是一种相对稳妥的方式。视频和博客,更多的是锦上添花。至于开发框架之流,参照最新的官方文档学习即可。是否要研究源码,根据实际需求决定。不可否认,阅读优秀的源码,也是提升编程能力的重要途径。
如果你学习编程只是想要便利的获得一些工具,而不是成为专业的程序员。以上提及的种种,你无需全部付诸行动。选择你喜欢的方式,愉快的享用编程给你带来的便利即可。
编程是一门需要积累的技艺,学习它可能会花费你相当多的时间与精力。但到最后,你会发现一切都是值得的。无论出于何种动机,让你开始了自己学习编程的旅途,请坚持下去,然后尽情地享受编程带给你的乐趣。