用代码在最短时间做成事

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.

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

——《爱丽丝梦游仙境》

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

时间: 2024-07-31 14:30:40

用代码在最短时间做成事的相关文章

动态规划之DP中判断是否到达某一状态(最短时间是什么)?

codevs1684 垃圾陷阱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D (2 <= D <= 100)英尺. 卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了.另外,卡门可以通过吃一些垃圾来维持自己的生命. 每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间. 假设卡门预先知道

王小川清华大学毕业典礼演讲:我也有过学渣经历(和时间做朋友,要和华军、天空这些下载站做合作推广)

文讯网据新浪科技讯 7月4日上午消息,搜狗CEO王小川近日应邀在清华大学2016年毕业典礼上发表演讲,他在题为<和时间做朋友>的演讲中,讲诉了从清华毕业加入搜狐,并开始从无到有研发搜狗搜索的过程,希望通过创立搜狗的经历,向其学弟学妹讲诉从毕业到创业最大的感悟. 公开资料显示,王小川是清华大学1996级计算机系学生,并于2008年再度返校取得了清华大学经管学院EMBA学位. 王小川以自己为例作为开通,虽然大家都说他经历上很漂亮.但他说:“我也有不顺的时候,经历过很多的困难和挫折.先来说学渣的经历

HDU 1242 Rescue(求最短时间救出同伴,BFS+DP)

Rescue Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and G

hdu 4771 bfs 从起点经过几个特定的点所需的最短时间

[题意]:给你一个n*m的地图,问你从起点出发,必须经过几个特定的点所需的最短时间 [思路]:地图较小且这里最多有4个点必须经过的点,所以直接BFS就可以了,step[x][y][zt]  表示在点[x,y]且已经走过的点的状态为zt(二进制表示)(要是数据量大一点 可以先预处理这些必须经过的点两两之间的最短距离再状态压缩dp)(直接看记录盼盼的代码算了) 1 #include<iostream> 2 #include<cstdio> 3 #include<queue>

多个蚂蚁过独木桥,求通过的最长时间和最短时间

首先对题目进行分析: 求最长时间也就是最后掉下去的一只蚂蚁需要经历的最长时间: 求最短时间也就是最后掉下去的一只蚂蚁需要经历的最短时间:所以让所有的蚂蚁都向距离它们最近的那一段走,这样它们每个走的时间是短的,再求它们中用时最短的那个时间: 分析最长时间如下图所示: /************************************************************************* > File Name: 162.cpp > Author: > Mail:

偶然看到的面试算法题_最短时间找出十包粉末中的两蓝粉末。

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色.求找出两包蓝色粉末的最短时间.假设水和粉末用不完. 解:以下给出四种解法,标记10包粉末为(1,2 ... ) 杯子为[1,2,3,4]首先我想会不会是有某种算法,dp 二分..@[email protected]..没有,懵懵的. 法一:这是我最初想到的比较傻的方法 第一趟:[12,34,56,78] 每个杯子分别放两包加水融化,剩下两包不管.可能的情况: (1)0个杯子变色,说明剩下两包就是蓝粉末

hdu 1242 到目的地的最短时间 dfs

到目的地的最短时间 Sample Input7 8#.#####.#.a#..r.#..#x.....#..#.##...##...#.............. Sample Output13 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 8

Sql 时间做条件

在sql的查询中我们应该尽量避免在WHERE条件中的字段上用函数,如DATEDIFF,DATEADD,CONVERT 因为这样做会使该字段上的索引失效,影响SQL语句的性能.即使该字段上没有索引,也会给sql带来压力. 在以时间做条件查询的时候,比如要查询1天前的数据多数人会这么写: --前一天数据 SELECT * FROM TableA WHERE DATEDIFF(DAY,dtTime,GETDATE()) < 1 --当前时间到昨天的数据 SELECT * FROM TableA WHE

今天看到别人的面试算法题,求找出十包粉末中两包蓝色粉末的最短时间

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色.求找出两包蓝色粉末的最短时间.假设水和粉末用不完. 方法一: 第一趟:[12,34,56,78] 每个杯子分别放两包加水融化,剩下两包不管.可能的情况: (1)0个杯子变色,说明剩下两包就是蓝粉末 (2)1个杯子变色,则蓝粉末在这个杯子两包和未融化的两包其中两包,第二趟四包融化一定可以找到 (3)2个杯子变色,则在这两个杯子的四包粉末中,第二趟可找到. 时间均值:E = 2*1/45 + 4*44/45