on
关于编程
这几周在项目中很闲,论文的脑洞又开不动,趁机读了几个小项目的源码,补了些基础知识,顺便练了练手。我看的几个项目都是基于python的,写python稍稍多一点之后,真的有些过度依赖于这个语言的第三方库,不需要自己实现底层的乱七八糟的功能 ,这当然很方便,但我其实也是比较惶恐的,虽然我现在的初级阶段还完全没必要担心后续python对求职的影响,但是记得之前在leetcode上跑过某道题,同样的算法,C++和Java稳过,python一直fail;同时看到最近Java真的很火,一方面它是编译型语言, 基本无需担心其性能问题,另一方面它比C++又高级一些,写个简单的网站啥的也是很轻松的事情。不过我不希望这个担忧成为阻碍我学习python的理由,毕竟,我还很初级…还有另外一个惶恐就是最近听/看到周围很多非CS专业的人开始学python拿它写点脚本什么的小东西了,难道python如此easy to get on? 作为CS出身的(学渣),还是想坚持下编译型语言的阵营,主要是打牢下基础。
但是近两个月我会focus on Python,目前只是用框架照猫画虎的阶段,对于真正理解还有些距离。
最近看python,总结了目前认知中这门语言的特点:
- all things are objects, 我想这导致了变量的dynamic type
- class中的self,这好像不算特点,
php
好像也有? - magic methods,对override方法实现自己的需求很方便
- @decoration, wrapper用来加个日志什么的很方便,大概是属于高级用法了
- coroutine,好像是python3中新加入的特性,在同一个线程内部做异步,性能提升很多,这种基于yield和生成器的用法,看皮毛还可以看懂,深入理解就比较费脑筋了
如果是做web应用,那么几乎无一例外的绕不开Django, Flask, Tornado, web.py等框架,在实验室的小项目中我用web.py做了一个请求API的web应用,当时考虑的是,没什么需求,越简单越容易上手即可,所以web.py这个小框架脱颖而出, 虽然小,但是基本上web框架的一切都涵盖了,WSGI、路由处理、数据库交互、模板引擎,再配合上从某API请求来的数据,这就是我的第一个web应用。后来浏览到Flask,应该是众多框架里top2的选择,还没来得及细看,不过对于只是简单 应用的人来说大同小异,了解到用法基本就可以轻松架起来一个应用了。接触Tornado是因为项目中其实是有实时刷新的需求,这个除了定期轮询外,不知道有什么现成的好方法去实现,搜到Tornado是一个高性能异步I/O框架,看了几个demo, 稍稍有一点理解,仍然远远不足够,毕竟我现在仍不知道处理实时刷新的具体方法,按照理论可能long poll或者web socket是两个不错的选择。
为了熟悉Tornado的用法,加上之前一直有这个想法,写了一个简单的markdown_editor(没用到Tornado异步,并不是真正意义上的Tornado应用) ,里面的css文件是直接引用了现成的。markdown_editor的想法其实蛮简单,对于oninput事件,执行显示框的文本更新,我又加了支持创建多个文档 的功能,代码也只有一百多行,可能技术细节还需要去深挖,打算做成一个类似于单用户版本的markdown_editor。
Python用来写小东西,确实是方便极了。无论任何一门语言,都有其特性,掌握下它的语言特点,会有助于进一步理解这门语言,最主要是让代码更加pythonic,不要写什么都像C++…
还有很长的路要走,但是感觉还挺有意思的。希望自己最终不惧怕任何一门新语言,当然也不以接触过某一门语言为资本,毕竟只是工具,最终的目的才是真正要达到的。