编程,无国界
进入大学时,我开始迷恋上了编程。只有在编程时,我可以直接看到自己思维的产物。这个感觉很不错:手指搭在键盘上,就是在构建世界。然而,野路子出身的门外汉,就有门外汉的烦恼。我完全不知该如何规划自己的道路。下一步又该学什么?做些什么的练习?何时可以做出像样的东西?每天夜里,我都不自觉的会琢磨这些问题。
我用了笨人的方法,就是把各个门类都学习一下,即所谓的“遍历”。我从网上找到计算机专业的课程表、技术博主们给出的路线图,按图索骥,一个门类一个门类的学习。这个过程有些辛苦。学Python的时候,家里堆了五六本书,翻完这本翻下一本。读《UNIX环境高级编程》时,超级厚的一本书,前后看不到岸。看机器学习时,不能完全理解代码,又回身学习统计…… 但有趣的是,学得多了可以触类旁通。技术的东西很多都相互借鉴。我构建起基础之后,学新的内容,会有熟悉的感觉。比如一门SQL学过,了解了关系型数据库,再看MySQL、安卓和HTML5中的SQLite、R语言中的Data Frame,都似曾相识,难度大大降低。
所以我在校时候就已经能用python接活赚零花钱,到在创业公司用python开发商业网站和游戏后台。所有遇到的问题,几乎都可以从互联网上的公开资源找到答案。
python自学
关于自学python,个人最大的3点经验:
- 找一本浅显易懂,例程比较好的教程,从头到尾看下去。不要看很多本,专注于一本。把里面的例程都手打一遍,搞懂为什么。我当时看的是《简明python教程》,不过这本书不是非常适合零基础初学者。零基础推荐《与孩子一起学编程》。
- 去找一个实际项目练手。我当时是因为要做一个网站,不得已要学python。这种条件下的效果比你平时学一门新语言要好很多。所以最好是要有真实的项目做。可以找几个同学一起做个网站之类。注意,真实项目不一定非要是商业项目,你写一个只是自己会用的博客网站也是真实项目,关键是要核心功能完整。
- 最好能找到一个已经会python的人。问他一点学习规划的建议(上知乎也是个途径),然后在遇到卡壳的地方找他指点。这样会事半功倍。但是,要学会搜索,学会如何更好地提问。没人愿意帮你写作业或是回答“一搜便知”的问题。
然而,别人的经验未必能完全复制。比如我没有说的是,在自学python之前,我已在学校系统学习过其他的编程语言。
对于完全没有编程经验的初学者,在学习python的时候,面对的不仅仅是python这门语言,还需要面临“编程”的一些普遍问题,比如:
- 从零开始,不知道从何入手,找了本编程教材发现第二章开始就看不懂了
- 缺少计算机基础知识,被一些教程略过的“常识性”问题卡住
- 遇到问题不知道怎么寻找解决方案
- 看懂语法之后不知道拿来做什么,学完一阵子就又忘了
- 缺少数据结构、设计模式等编程基础知识,只能写出小的程序片段
所以除了前面说的3点经验,给初学编程者的额外建议:
- 首先要有信心。虽然可能你看了几个小时也没在屏幕上打出一个三角形,或者压根儿就没能把程序运行起来。但相信我,几乎所有程序员一开始都是这么折腾过来的。
- 选择合适的教程。有些书很经典,但未必适合你,可能你写了上万行代码之后再看它会比较好。
- 写代码,然后写更多的代码。光看教程,编不出程序。从书上的例程开始写,再写小程序片段,然后写完整的项目。
- 除了学习编程语言,也兼顾补一点计算机基础,和英语。
- 不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别人的代码。
- 学会查官方文档,用好搜索引擎和开发者社区。
学习资源分享
Python 面试宝典
Python 知识手册
Linux 知识手册
爬虫查询手册
而且,这些资料不是扫描版的,里面的文字都可以直接复制,非常便于我们学习:
数据分析知识手册:
机器学习知识手册:
金融量化知识手册: