谢谢邀请。最近要入python坑的人真是太多了。要精通一门编程语言涉及职业规划问题,近期遇到一些朋友正在做这方面的选择,希望本文也能提供一些参考。
第一问不太好答,其实这个跟学习者本人各方面条件密切相关:学习能力、时间分配、软硬件环境如何,基础如何(比如其它语言基础),等等。
关于第二问,其实也需要知道你学python的目的。因为是否精通这件事,关键是看跟哪些人比。
因为你同时提到了R语言,估计你是准备入数据分析的坑。我以为达到以下标准就够了:熟练掌握python语法,代码风格符合pythonic和PEP8标准,能熟练地运用列表推导式、lambda,高阶函数等这样的语法糖写出高效、简洁、易读的代码。掌握生成器、闭包等有“现代”特征的语法点。
熟练掌握python常用数据结构及其基本操作。比如dict, list, set, collection,熟记各种数据结构如何完成增删查改,比较,排序,转换等操作。熟练掌握字符串、正则式、日期时间操作。熟练掌握日志功能。
完全了解1和2中的种种corner case和容易出bug的场景。比如不能在遍历过程中对集合元素进行删除等,各种数据类型做真值判断的实际意义(比如a = list(), if a:)
熟练掌握numpy, scipy, pandas, scikit-learn,matplotlib等python库的使用,了解在你工作的领域中的一些常用算法,在这些库中对应的API是什么,如何输入输出数据,如何制作图表等。
熟练掌握调试和查错技巧。
所以,对数据分析师来讲,精通python来讲相对很容易。有其它编程语言语法基础的话,我觉得1-3可能一个月足矣,第4可能要3个月,并有很好的教学用例伴着练习。
如果是题主是在相关行业,是为数据分析师提供后援支持,那么精通Python的要求可能就高一些(因为算法不是你的竞争力):参照前面1-3
python文档规范,包管理规范,import语句,python运行环境构建及排错
python的面向对象编程模型,包括如何封装,基类跟子类如何分工,如何写抽象类框架
设计模式
python多进程多线程编程模型。包括如何使用锁、信号量、管道等机制
python 异步编程模型
python网络编程、数据库、消息队列、缓存等编程
根据工作需要熟练掌握几个框架,比如web的flask, django,tornado(根据场景大小任选)等。
部署运维相关知识。
因为应用的场景不一样,所以第二个List更强调工程能力。在一个常规的商业项目里,往往是多人合作,因此对代码的可复用能力提出较高要求,这就对应了2-4;同时商业项目往往要求性能、稳定性和可靠性,因此就要求 5-7。8-9则具体对应你的工作环境了。
精通一门编程语言并不是程序员职业的终点。以后有机会再解答程序员序列的职业规划的更高阶段问题。