编程学习建议

学编程有哪些好处呢?

  • 帮助自动化完成一些冗长枯燥的手工劳动;
  • 学英语,编程的通用语言是英语,很多编程资料都是英文的;
  • 训练逻辑能力,把报错的程序调试到正确的过程也是认知提升的过程;
  • 训练产品思维,当你开始思考代码的易用性、健壮性等问题时,你就是在做一个虚拟产品,你也是一个产品经理;
  • 当然,这里还能列举更多的好处。
 

前期准备

确定自己学编程的目标

是为了把自己从冗长枯燥的手工劳动中解放出来?还是毕业论文没数据要去晚上爬取数据?还是编程就是饭碗?
总之,要任务导向,要学以致用,学习编程要能创造有效生产力
 

选择适合自己的学习材料

如何找教材?
  • 知乎、豆瓣、专业论坛(博客)推荐,e.g. 直接百度 "数据挖掘教材推荐 知乎";
  • 请教前辈
如何选教材?
  • 跟上时代,教材最好是结合最新版本的软件(以免一些旧操作已经失效),技术发展更新很快,太"古老"的资料不要看(经典除外);
  • 结构系统,找一本系统性强的评分高的入门教材入手,先搭建知识框架,后面逐步学习难度和专业性更强的资料,为知识框架“添枝加叶”,博客、论坛碎片化知识不适合入门(更适合查找特定问题的解决方案)
 

结构化学习

制定适合自己的学习路径

不同的学习者目标不一样,有的是为了数据分析、有的是为了网页开发、有的可能是网络安全等。
把编程要实现的大目标,拆分成一个个的小目标,先做什么,后做什么,难度一点点增加,就像登楼梯一样,技能一步步提高。
e.g. 我想用python 学习数据挖掘,那么可以试试检索“python 数据挖掘 学习路径”或者“python data mining learning path”,搜到的文章可以用来作为决策参考。
 

编程学习通用框架

以下分享自己总结的通用框架(大部分的教材的基本框架也是如此),通过4个步骤的学习路径来逐步提升。
 
编程学习通用框架:
1. 环境部署,即如何安装编程需要的软件、工具包、插件,以及配置编程开发环境等;
 
2. 编程元素,主要有以下3类:
  • 变量,分为基本变量(e.g. 数字、字符串、日期等)和复合变量(e.g. 数组、列表、结构体等);
  • 语句,逻辑判断(e.g. 大小比较、是否判断、集合归属、或且非等)、循环语句(e.g. for、while)等;
  • 函数,即一组处理变量的语句,e.g. 统计函数、日期函数、字符串函数等;
3. 数据操作
  • 数据输入、输出操作;
  • 数据变形,创建、增加、删除、修改,以及取数、拆分、合并等操作;
  • 变量运算,e.g. 统计、排序等;
  • 图形展示,e.g. 静态图、动态图、2维图、3维图等;
4. 高级操作
  • 数据产品,e.g.自定义函数、工具包、软件等;
  • 数据库操作,数据分析,界面设计等;
  • 高效率编程,大批量数据处理;
  • 多个数据产品交互,e.g. python、spark、Hive协同作业;
 

多练习多思考

和已有的编程知识联系

不同的编程语言,底层逻辑基本是一致的,基本学习框架也是一致的。
 

多实操,做点有趣的事情

把习得的技能应用于工作和生活,一方面可以检验学习效果,另一方面实战演练遇到的情况往往比教材复杂,更有利于综合能力提高。
兴趣是最好的老师,可以尝试用编程来做点有意思的事情,e.g. 做一些自动化的小工具,用来提高效率,用爬虫抓取美女图片等等。
在寻求他人帮助前尽量自己先多尝试,工具就在手中,探索得到的知识印象更深刻。
 

不断迭代改进

第一次写出来的代码总不是最完美的,后面会发现一些bug(漏洞),这些都是开始没有考虑完备的情况,所以要不断修改完善。
完善程序的主要目标有两个:
  • 提升健壮性(兼容性),即适应数据的变化;
  • 提升运行效率,单位时间内能处理更多的数据;
 

养成好的编程习惯

学会正确定义问题和提问

具体可以参考 Eric Steven Raymond 的文章《How To Ask Questions The Smart Way》
注: 什么?都是英文?学好英文很重要,技术领域的很多好资料都是英语写的
 

尽量避免重复造轮子

充分利用网络资源,合理使用他人分享的工具。
个人会常去github上找工具包,或者找cheat sheet(作弊手册),e.g. 搜索一下“python cheat sheet”,python常用知识点的总结就到手了,这些核心知识基本覆盖了80%的应用场景,尤其是初学者,cheat sheet必备啊。
注:关于避免重复造轮子,更多请参考《工具思维的陷阱》
 

优雅地写代码

更多可以参考《编程代码规范》这篇文章。
一个好的程序应该具有如下特点:
  • 易使用、易读懂、易维护;
  • 运算准确、兼容性强、效率可观;
  • 注释清晰、命名规范、语句精炼、信息完备(版本、作者、修改记录)等
 
 
编程难学吗?
虽然编程有点抽象,但是远没有数学公式来得抽象,借用《为学》里的那句话——“天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣”——如果你想学,那就开始动手咯。
posted @ 2020-03-22 10:14  dataxon  阅读(198)  评论(0编辑  收藏  举报