2016年6月23日星期四

python新手学习的阶段性总结

        在对python学习进行阶段性总结之前,先大概回顾自己的技术之路。我的大学学院和专业是数学,在学院和学校的职业生涯规划中,这个学院的很多学生会走写代码的技术路线。所以在大一学习C语言之后,身边很多人选择自学编程立志ACM竞赛。我大一第一个学期对生活充满了新鲜和好奇,所以没随一波人的潮流。但是第二个学期开始,因为学业压力以及选修了C++,我开始以刘汝家编著的《算法竞赛入门经典》学习算法和写代码。然而对于一个上了大学才知道编程这玩意儿的人来说,学习的过程倍感艰辛。早上六点半起床,学C语言的基础知识或者在书中或者学校的OJ平台找一道题目题目练习,大多时候临近上课了还是没有把题目做出来。这个过程经历多次,同时想着大学生活不能就这样经历无限苦闷思考循环而荒废了,所以我把学业的重心放在了课本的理论知识,决定放弃编程实践练习这条技术路线,转向对非技术岗位素质和独立思考能力的培养上面来。这个过程持续的时间到大二第二个学期,这里先略过,找个时间再好好回顾自己这个功利主义小粉红否定自己十多年人生的思想转变过程。
        大二下第一个学期上了一门全校选修过,因为和主讲老师在思想上产生很多共鸣,期末结束后被他忽悠组建了一个创业团队,呆了将近一年才发行团队里面包括我在内的几个人都是在帮他做一个电子商务的项目。在这个过程中,由项目开发重新开始接触技术。我从类UNIX系统的CentOS开始学习,这个过程主要学习了服务器运维和SVN代码管理的一些知识,参与修改利用OFBiz开源框架搭建的电商项目。在2015年8月份面临工作压力和几个朋友跳出团队之后,觉悟这一年拼命当狗卖命而痛苦不已,另一个方面,当我决定找和技术相关的工作时才发现这一年接触的东西很多都相当的落后,比如为团队搭建的SVN这种集中式的代码管理工具,当我学习了git并对比了之后,会觉得还使用SVN就像还活在20世纪一样。再者,自己在技术方面的基础知识相当薄弱,所以在秋招的一段时间里,屡屡碰壁。所以在秋招的两个月时间里,一边投着简历参加面试,一边恶补基础知识。但是要想在短时间内熟悉计算机操作系统、计算机网络、数据结构和算法,以及和自己要投的岗位JAVA开发相关的如JAVA语言的基础知识和JAVA生态圈的项目,我也觉得自己是在痴人说梦。但是我始终没有放弃和技术相关的工作,我总结了有两点原因:
  1. 技术学习的第一阶段放弃除了遭受挫折以及希望自己大学有另外一种多彩的生活之外,还有一个原因是害怕技术的快速发展给人带来的极大学习压力,但是现在反而是喜欢这种挑战。人有很多局限性,其中之一就是生活在一个舒适圈内不愿意接受新事物。当我意识并且痛恨这点时,技术变化的挑战能提醒我保持对新鲜事物的敏感以及在技术、语言等方面不断学习的决心。
  2. 或许在未来我会经历长时间的代码敲打工作,但是我不想把自己定位为一颗螺丝钉。我希望并且我努力让自己产生想法。当想法成熟那天,我能通过技术实现想法。 
       10月底,拿了两家公司的offer之后,我选择了其中一家公司。因为在找工作的过程中自己技术能力太弱了,所以决定先静下心来恶补基础知识。中途因为奶奶重病继而离世,停下了一段时间,所以重新真正开始学习python是大四第二个学期开学之后了。
        唠叨了这么多,这才开始总结自己的python过程。我决定学python是想看看openstack这个项目的,后来发现python语言如其哲学理念一样,优雅、明了、简洁,都说编程语言决定使用者的思维方式,应该有不少人像我一样不能抗拒这语言的魅力吧,所以决定进一步学习这门语言。
        虽然国内外已经有很多学习python资料汇总的网站了,但是我觉得将自己学习python的过程以及自己时涉及到的资料写出来,一方面是对自己学习的总结、沉淀,另一方面,如果遇到志同道合的朋友有幸看到这篇文章,可以对一些内容进行补充和交流。
        首先,我是先大概浏览了一遍廖雪峰老师网站的python教程。因为之前有一点计算机基础和JAVA语言基础了,所以在教程学习过程中困难不是特别大,遇到自己觉得重要的知识点,就直接复制粘贴到印象笔记中。
        到现在为止,我觉得掌握一门语言比较快的方式是问题驱动的实践,在这个过程中通过google、stackoverflow等工具查询知识点比反复阅读更有效。在这里顺便分享在Twitter上看到的陈皓老师的一段话:
有同事问我某个技术咋查不到?我发现他在Google里用中文关键词。我说,你得用英文关键词啊,就算是中文社区里有也要坚持用英文,因为技术都是从西方传过来的,不用英文的话,就永远无法与世界真正接轨,你的信息视野无法真正扩大,翻墙并不是架个VPN,还用中文搜索的话,就算翻了也等于没翻。
 个人的体会是抛开GFW全面的信息封锁不谈,单就技术领域的学习和查询,搜索工具和搜索方式真的很重要。
        基本了解了知识点之后,我从两方面实践进一步学习python语言,一个方面是上面python教程的实战内容;另一个方面做是leetcode上Array、String和Hashtable知识点相关的题目。
        在第一个方面实践的过程中我觉得有必要特别注意的是学习并善用git和github。原因有二:

  1. 通过git管理自己在网站上照葫芦画瓢的代码,可以更加直观的对比自己写的代码前后差别。
  2. 无论是学习廖老师的python实战教程还是学习《Flask Web开发:基于python的Web应用开发实战》这本书的内容,结合git和github,效率会比单独看内容要高。
 上面提到了《Flask Web开发:基于python的Web应用开发实战》这本书,在这里需要说明的是,单单学习廖老师的实战内容,对python和python应用在web开发的知识挺困惑,我尝试了再拓展了解使用python搭建的Tornado、Django和Flask三种框架之后,发现结合Flask学习有助于更深入的了解实战内容。下面我贴出在这个过程中我接触到的一些知识点和资料:

  1. 网友提供的资料:https://github.com/zhouxinkai/awesome-python3-webapp
  2. python的type和object之间是怎么一种关系:https://www.zhihu.com/question/38791962
  3. python中的函数、闭包和修饰器:https://mcfloundinho.github.io/python-function.html

没有评论:

发表评论