不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到最后也无法确定自己的方向到底是什么,所以,在你开始前,最好先想清楚,你是想成为一名程序员,还是游戏开发者,还是机器人专家?
2、选择一种编程语言
初学者一定要从主流语言开始学习,比如中级语言C和C++。这两种语言是任何一名合格、专业的程序员都必须掌握的,因为它们称得上是软件开发界的主流。但是最好不要从高级语言开始学,如Java,因为这些语言对于初学者来说难度未免太高(高级语言可以以后再学,但是C语言和C++应该作为你的基础)。然而对于完完全全的门外汉的来说,可能C和C++都有点困难,那么你也可以从Python开始学,这种语言被大家广泛认为是适合初学者的。
此外,每一种语言都要学习至少一年。要熟悉编程范式,尤其是面向过程及面向对象这两种;要广泛阅读,多用编译器及IDE(网上有许多免费的)练习编程。
掌握一种语言后,先不要急着运用,而要去多买些数据结构方面的书来看,学习搜索、分类、二叉树及链表创建等概念。因为无论你是要制作游戏还是开发软件,数据结构都是必须要考虑的。
随后,你就可以开始学习更加高难度的语言,如Java。对于进阶学习者来说,可能还需要学习分而治之(Devide-and-conquer)、贪婪算法(Greedy Method)及回溯(Backtracking)等计算机算法,这又要花上至少一年的时间。
3、热爱数学
许多人都由于这样那样的原因而对数学颇不感冒,而作为一名优秀的程序员,却要整天与一箩筐的数学问题打交道。正如你所见,学编程真的是说起来容易做起来难,而它的难并不在于你对一种语言的了解程度,而在于这种语言牵扯到的数学问题。编程中的大多数问题都能在数学模型(如斐波那契数列、弗洛伊德算法、傅立叶级数等等)中找到端倪,更不用说数学公式在解决编程问题中的广泛应用了。所以,现在开始,去学习各种公式及其特性吧,还要仔细钻研算术及微积分,因为不懂数学,就好比巧妇难为无米之炊。
4、要保持内在的动力
记住,罗马建成非一日之功,所以不要在短时间里给自己填压太多知识。学习编程语言并不容易,因为这是一门需要时常调用逻辑思维的知识。你要做的,就是理解程序背后的逻辑,然后不断练习,直到熟能生巧为止。如果你只是死记硬背一些程序,那么你就错过了学习过程中的乐趣,而且一些概念你也未必真的理解。所以,学习编程需要不断地挑战自己,但也不要操之过急。
5、要有耐心
有时,即使是卓有成就的程序员也会被简单的小问题难住,所以,遇到问题时,一定要让自己放松下来。找张草稿纸,想想有什么现成的公式可用,或者自己想一个公式出来。你看,这就是你为什么要学习数据结构和数学。在成为熟练的程序员以前,一个人往往需要花费大把的时间来构思用于解决特定问题的程序。这一过程中,你可以去Project Euler或者Codecademy这样的网站上看看,上面有简单的编程作业及教程,可以用以练习并提高技能。
6、绝不轻言放弃
如果你在编程过程中经常粗心犯错,那么整个过程就会变成一场旷日持久的折磨,然而一旦问题解决,所有的沮丧都会烟消云散。在学习各种算法(傅立叶级数、向量、边界问题、线性代数、矩阵)的同时,也要注意休息。在解决特别复杂的问题时,要按时放松大脑,让困扰在心头的难题暂时转移到潜意识中。另外要有合理的工作计划,当你编程编到倦怠的时候,就可以小憩一会儿,或者出去散一会儿步,但是永远不要说放弃。
7、成为高手
学到这个阶段,你就可以试着去教教别人,并且向别人展示你制作的应用。如果你认识比你更厉害的人,就要与他分享你的想法和问题,这样会使你积累更多的经验;你也可以模仿诸如文本编辑器、windows软件等专业软件来进行自主开发;积极参加相关竞赛来挑战自我。
懂得一种编程语言是很赞的,但更赞的就是懂得多门语言,这不仅仅意味着你的“工具箱”里有了更多的“工具”,更是意味着你掌握了更多解决问题的方法。因为不论你惯用哪种语言,懂得其他语言总是能使你更好地了解常见的抽象概念及问题。所以,有条件的情况下,尽量多学几种语言,最好是学习两三种具有不同设计原理的语言,如Lisp、Java及Perl。但是每一种都要用心学。
8、广泛阅读
许多高水平的程序员阅读量也十分惊人,他们也往往会在输入第一行代码前深思熟虑一番。所以,你一定要多阅读、多思考。每周都要检查一次自己的作品(平时要养成保存代码的习惯,这样日后才能复查、反思);还要多买编程方面的好书。购买的书必须是最值得一看的,而并非是最畅销的。永远不要盲目地追随某一种资源,因为那样只会让你的眼界变得狭隘。一旦你掌握一种知识,就要仔细钻研其用途及改进的可能。
9、去培训中心参加培训
如果你觉得自学效果不理想,就去报名参加一些初级的编程班吧。但是报名前,一定要先向之前在里面学习过的人了解一番。
10、勤加练习
要养成用编程解决问题的习惯,如果你能自己发现生活中需要解决的问题的话最好,如果不能,就可以去看看以下这些网站:
TopCoder(http://topcoder.com/tc) - 这是美国著名的编程竞赛网站,能够极大地增长算法方面的知识。
Codeforces(http://codeforces.com/) - 另一种编程竞赛网站,这里举行竞赛的频率要略高于TopCoder。
Project Euler(http://projecteuler.net/) - 该网站上有许多涉及的编程问题。
CodeAbbey(http://codeabbey.com/) - 该网站上有许多初学者经常会遇到的问题,其难度低于上述所有网站。
小提示
要学会利用软件发行者提供的最新应用程序接口及官方参考资料。
对于大多数人来说,编写自己感兴趣或者能够真正投入使用的程序要比照着教科书上的案列来做有趣得多。那么,你不妨利用搜索引擎来搜寻自己感兴趣的项目。
学会利用参考材料。即使无法记住所有的知识也不用觉得难为情,真正重要的是你知道去哪里找参考资料。
编程之前可以先打打草稿来构思可能的解决方法,然后去问问别人的意见。
教学相长。因为在教别人编程的同时,你不仅会对既有的知识更加熟悉,也会帮助你从其他的角度来看待问题。
光看教程是不足以把任何一门编程语言学到家的。所以,你要尽量去找些志同道合的人,然后互相学习。多多浏览并参与讨论这个小团体内其他人发表的意见,这样你才能学习更多的技能。
如果你对游戏编程感兴趣,就要尤其用心学Python、C++以及Java。在这三者中,C++是最强大的一个,Python最简单,而Java制作的游戏则最适合在不用改动的情况下在Windows、Mac OS及Linux系统上运行。
每天至少练习几个小时,正所谓熟能生巧。
学习新知识的时候,亲手实践、做出改动、预测结果这一过程是非常重要的,因为这样你才能把一个概念吃透。
多和其他程序员交流,多看其他人写的程序。这比看任何书、上任何课程都有用。
致力于计算机语言标准化。你可以关注C++标准委员会(ANSI C++ committee),也可以在自己的小团体中把2格缩进还是4格缩进统一一下。不管怎样,通过这些实践,你都能对其他人在编程方面的偏好及其原因有更深的理解。
多学最常用的及行业内规范的算法。
多学着用Java解决问题。
向免费软件学习。多研究免费软件的源代码,因为如果你能利用现成的代码,又何必费尽心思去重写呢?只不过抄下来的时候要确保自己真正理解。
如果仅仅是用于在Windows上执行简单任务的程序,就可以用C#(类似Java)或Visual Basic来做;如果是其他平台,那么比较常用的就是Perl、Python、bash(或其他shell语言)。
你可以用编程来解决模拟真实情景中的问题。
来源和引文
如何成为一名黑客(http://catb.org/~esr/faqs/hacker-howto.html),作者:Eric S. Raymond,其中编程部分是本文大部分内容的来源。
10年自学编程(http://norvig.com/21-days.html),作者:Peter S. Norvig,关于如何学习编程有其独到的见解。
我应该学哪种编程语言?(http://regulargeek.com/2009/02/11/what-programming-language-should-i-learn/)简要分析了主流编程语言的特点及其优势。
来自How Stuff Works的《Java的原理》(http://www.howstuffworks.com/program.htm) ,完全新手指南。
PHP 教程(http://phpforms.net/tutorial/tutorial.html),教你如何在网站上运用php。
W3Schools(http://www.w3schools.com/)该网站包含各种网页编程语言(如PHP、HTML、CSS、Javascript、SQL) 的教程、参考资料及案例。
类Linux中各种各样的编程语言:http://www.linuxdiyf.com/linux/108.html
程序员获取新编程技能的5个技巧:http://www.linuxdiyf.com/linux/12794.html
几种Linux编程工具介绍:http://www.linuxdiyf.com/linux/84.html