用代码在最短时间做成事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用代码在最短时间做成事相关的知识,希望对你有一定的参考价值。

0章 编程是什么

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。

君子生非异也,善假于物也。

0.0写给“非程序员”们的一句话

        编程只是手段,我们的注意力还是要放在提高工作和生活效率上。

0.1两条路

        大道和捷径

        学任何东西都有两种方式,我称为大道和捷径。

        大道就像小说中的正派武功,武当长拳、少林金刚掌之类,入门缓慢。五年站桩,十年学拳,练到二十年上才能出师下山,学成后便成为江湖上的一等高手。

        捷径就像小说中的邪派武功,九阴白骨爪、辟邪剑谱之属,上手极快,三天入门,五天学成,进入江湖后也能横扫一片,但是终究成不了一流高手,在跟正派的比武中很容易被一巴掌拍死。

        对于编程来说,大道和捷径初期的学习都是一样的,毕竟想练剑的人都得先知道怎么拿剑。在初窥门径后,两者的区别就开始显现,大道开始研究多态、封装、异常,开始探究子类化列表、生成器和回溯,可以一行一行写出自己理解的代码;而捷径,只需要知道某行代码能实现什么功能,即仅知道how而不关心why,一行一行复制粘贴别人的代码,并稍作修改实现自己的功能。

        对我来说,编程是实现我目的手段,我有我自己的领域,我并不想成为一个高超的程序员,所以我选择捷径的邪派。就像小说里说的,“能杀人的剑法,就是好剑法”或者说“不管黑猫白猫,抓住老鼠就是好猫”。

0.2我为什么要学编程

        作为一个非程序员,很多同事和朋友问我:你为什么要学编程?

        为什么要学编程?每个人给出的答案都不一样,有人觉得编程很酷,所以我想学,有人觉得编程会对我工作有帮助,所以我要学编程,有人觉得编程能让我找到好工作,所以我得学编程。

        那么编程到底是什么?

        我常说,编程是螺丝刀,是扳手,是锤子。它只是一种工具,没有人能通过精通一种工具而被人们所尊重,人们尊重的是你通过这个工具做出来的东西,我们听说过国画大师,木匠大师,却从来没有过毛笔大师、锯子大师。所以,请想好:

 

你想要做出什么?!

 

      写出我想要的工具,用我的思路解决问题,这才是我学python的目的。

0.3编程对我来说意味着什么?

        对我来说,编程意味着我手头掌握了足够的材料,我可以用它来搭建我想要的东西。用搭建出来的东西提高我的生活质量和工作效率。

0.4我如何利用编程

        工作上,我会经常处理包含大量数据的excel,在同事们焦头烂额的一行一行的复制粘贴的时候,我会把他们存成csv文件,导入python处理完成后在输出为csv文件,excel打开后重新排下版就好了。别的同事一天的处理工作,我只需要二十分钟写程序,十分钟调试,再花个半分钟运行就好了。

        生活中,根据学的爬虫知识。爬取租房信息,分析比较地区房价,确定租房的最佳地点;定时抓取豆瓣上的高分电影,收集起来自动发给我媳妇,写一个自动ping的程序,放在VPS上,检测网络通断,网络断了自动发邮件给我。

1章 我学习python

1.1想

        带着目的做事,我想做出什么,我要得到什么。

        对于我们这些非程序员来说,更多的时候,我们并不需要知道一个程序的底层是如何运作的,我只需要知道它能通过什么代码,实现什么功能,其具体原理我不会去深究。这样虽然浮于表面,但是对于通过写程序提高效率的人来说,是一种最便捷的方式。

        所以说,在我入门python的时候,我会去想我要做的东西是什么,达到这个目的需要哪些功能,然后通过搜索,知道达到这些功能需要哪些库,继续搜索得知这些库的使用实例。

1.2看

        研究别人的类似的代码,学习问题的解决办法。

        找到别人的代码后,复制,运行,通过运行结果检测代码的作用,筛选其中我需要的部分,在Evernote里存储,标注。

                                观其大略,不求甚解。

1.3干

        着手处理,除了碰到完全不理解,无从下手修改的代码需要翻书查原理之外,其他情况只要程序能够成功运行,就算大功告成。

1.4改

        随着不断地成长,能力不断的提高,我会慢慢的理解之前写过的或者粘贴过来的一些代码的意思,这时候再回过头去看当时的代码,将其中冗杂的部分修改精简,重新思考,重新运行,来进一步巩固自己的知识。

2章 示例

        只拥有《魔力教程》的基础知识,如何在未接触过网络编程的情况下做一个批量ping的工具。

2.0为什么要写这个示例

 

做成你会做得事不难,有能耐的人能做成他不会做的事。


2.1情形

        大清早刚上班,领导:“听雨你给我滚过来!今天内网怎么这么卡!给我统计一下有多少人在用!查查有没有人未分配的IP!

”我:“领导,咱们内网电脑又不允许安装外网下回来的软件,您还没买网络管理设备和软件,要搞定很慢的……”

领导:“我不管!我不管!我不管!一小时之内搞定告诉我!”

2.2想

        碰上如此傲娇的领导,我也很无奈,介绍一下情况:我们的局域网地址为192.168.159.0、192.168.160.0、192.168.161.0、192.168.162.0,均为22位掩码(不要问我为何是这么奇葩的地址段,我也想知道上级网管是不是脑袋被门夹了)。

        这个任务可以手动ping,但是我需要ping 1024个地址(VLSM),姑且不考虑时间问题,我一个个ping也绝对累吐血。所以,我需要实现的功能为:批量ping我的网段,看有哪些主机在线。

2.3看

        Google搜索“python ping”很轻易就找到了两篇示例:

        http://blog.chinaunix.net/uid-23855119-id-3895547.html的A

技术分享
 

        和http://blog.topspeedsnail.com/archives/963的B

技术分享
 

        显然,随便B更为简洁,但是显然已经超出了我们在《魔力教程》的基础能理解的范畴,所以我选择A。

        直接复制到pycharm。

技术分享
 

        这几行报错显然是提示有库没有导入,google一下知道是自带的库。 加上3个import后发现报错,所以只得一步步拆解

(1)寻找关键语句

        我们要实现的这个功能的关键语句显然是执行ping命令的那一行,因为知道有ping,所以很容易定位到:

技术分享
 

        复制到新的文件中

技术分享
 

 

(2)上下对比猜测

        变量ip指的是想ping的ip地址,ip_num是要ping的次数。修改为:

技术分享
 

        运行结果:

技术分享
 

       成功!(请忽略那堆问号……这是IDE的问题,在cmd中就没有问题,见下图)

技术分享
 

        所以这里我们就得到了我们的核心语句——ping命令

2.4干

        开始搭建程序主体,定义一个函数并调用:

技术分享
 

        运行结果(内网电脑中没安pycharm,在cmd下运行):

技术分享
 

        成功!

        将网段修改为局域网网段,将-n后面的包数改为1(此处不需要考虑arp的问题),for循环重复4次:

技术分享
 

        然后去泡杯茶,运行程序,边喝茶边在本本上画“正“字就好了。

技术分享
 

        代码很难看,效率也很低,但是它取代了我的重复劳动,没有这11行代码,我会用一上午的时间去打ip地址ping,而现在,我能在一个小时之内完成它。(程序速度大概3秒一个地址,存在的地址会更快些)

2.5改

        下一步等我有空的时候我可以给这个程序加上判断,输出哪些主机在线,并且使用多线程加速运行,最后做个gui方便我的同事们使用。但是那就是以后的事情了。

        我并不知道os.system这句到底通过什么方式起作用,但是我蒙对了它的结果,猜对了如何修改,实现了目的。总耗时小于十分钟。等我有空的时候可以慢慢研究os这个库的用法,而现在,我用最短的时间做成了事,这就叫提高效率。

3章 对于编程的体悟

3.1如何利用编程给你的工作加分

3.1.1节约时间

        1.找出你工作中最占时间的工作(当然是指电脑能解决的)

        2.思考这些工作的共性部分是那些,这些共性部分能否使用程序完成。

        3.写程序

3.1.2露脸

        前几天有幸跟两个局级领导(也就是市长那个级别)坐一辆车,车上请教他们年轻人发展和成长的问题,其中一个领导告诉我了一句话:“什么是机会?机会就是在某个领导面前把某件事做到最好。”

        所以请思考,如果利用编程让你把某件事情做到最好,做到在你所在的小环境中无人能比。

        懂的人已经懂了;不懂得人可以慢慢想;嗤之以鼻的人,呵呵哒。

3.2如何利用编程给你的生活加分

3.2.1单身的人

        学会批量爬妹子照片以后不要用这个技能去爬大量的妹子照片!不要用这个技能去爬大量的妹子照片!不要用这个技能去爬大量的妹子照片!

        电脑玩的好的不要总以为靠给妹子修电脑就能找到对象,有句老话说得好“电脑修的好,备胎当到老。”

        去给你们单位单身的美工妹子批量处理图片名称,去给你们单位单身的财会妹子批量处理excel表格,去给你们单位单身的人事妹子批量分发工资表。给追星的自动推送她偶像的信息,给花痴的爬点帅哥照片。万一刚才说的那些人里有觉得编程有趣想学的,主动教她啊!一来二去还搞不定,那你就得好好考虑一下你的长相问题了。

        学一个月的爬虫,你学会了爬虫、数据库、数据可视化、网站,这四样加起来,足够让你成为你们公司美女小白们眼中神一样的存在!到那时候,还爬他妹的美女图片啊?!

3.2.1有对象的

        媳妇就是你的甲方,甲方的需求就是圣旨,甲方想要的你要实现,甲方想不到的你要想到替她实现。

3.2.2兴趣爱好

        爬虫是一种手机大量数据的方法,那么可以试着爬你兴趣爱好相关网站的信息,通过点击量或者回复量来排序,优先阅读质量高的部分。

3.2.3最后的思考

生活中的哪些事,能被编程变得更美好?

 

3.3助你写出更好的code

        除了世界最小的眼镜制造商google和世界最大的同性交友网站github之外这两个大家都知道的网站外,还有什么能帮你写出更好的code。

3.3.1英语

        经常会在群里看到有人讨论VPN,求助FQ用什么好,我想问,你翻出去了又能如何?浩如烟海的英文资料你是否看得懂?在facebook和twitter上关注了一大堆中国人的朋友们,你们回到人人和微博可好?

        所以,一定要有较好的英语阅读能力,这样你才能看懂英文的文档,搜索问题的时候不会遇到英文的网站就跳过。如果只看中文内容,谷歌和百度何异?

        外面的世界很精彩,精彩源自丰富,外面的世界很无奈,无奈因为太多人看不懂那些丰富。

3.3.2虚拟机和VPS

        大部分人使用的系统是windows和mac,非IT行业的人使用linux的数量几乎可以忽略。但是想写好代码,就应该学习在linux下进行编辑,不论是在可视化的桌面版还是命令行,都应当了解学习。

        这时就涉及到了虚拟机和VPS。

        虚拟机能在不影响你系统的前提下提供linux环境,便于练习。因为很多人都开始使用虚拟机,这里我着重说一下VPS。

有了VPS,你会发现一个不一样的世界。

        有了VPS,你可以试验爬虫在百兆以上网速的爬取,充分制定自己的”反反爬虫策略“,有了VPS,你可以在需要的时候让你的程序24小时运行,有了VPS,你可以更方便的部署你的网站……这样的例子很多。有了自己的服务器,自己的公网IP,你会发现生活中的创新点又多了很多。

3.3.3双显示器

一图流,秒懂。

技术分享
 

        双屏这种东西就像固态硬盘一样,用了就戒不掉的。

3.4体悟·终章

 

        你成为什么样的人,取决于你想成为并努力成为什么样的人,你写出什么程序,取决于你想写出并努力写出什么样的程序。

It‘s no use going back to yesterday,because I was a different person then.

回到昨天毫无用处,因为过去的我和今天有所不同。

——《爱丽丝梦游仙境》

        希望朋友们不要辜负自己美好的时光。

以上是关于用代码在最短时间做成事的主要内容,如果未能解决你的问题,请参考以下文章

!!!!!!!1怎样在最短的时间内掌握asp?

如何在最短的时间内读取 1TB 压缩文件 [关闭]

面向对象的设计和开发不得不说的一些事

面向对象的设计和开发不得不说的一些事

死磕JAVA10余年,呕心整理出了核心知识点已经做成PDF,无私奉献

云计算这件事,为什么阿里巴巴能做成?