python能开发什么产品_三周学 Python ?不,三周做个产品

我的同事在看到毫无开发经验的我用三周时间,不但从零基础用上了 Python,还做出了一个客户关系管理系统,强烈邀请我分享经验。惶恐,因为我并没有出色的智商,也没有觉得三周学 Python 是一个体现自己牛叉的事情(不少人可能用一周左右就可以做到),思考过后,我还是答应了同事的邀请,复盘总是一件能让人获益匪浅的事。首先,我接触 Python 也就几周,不可能分享 Python 的技巧和经验,其次,通过对同事需求的分析,我发现他的真正需求并不是学 Python 这件事,而是他感觉我比他高效。于是,我写下了这篇心得,以供那些有意愿,却未能有机会来参加我分享会的朋友们。

绕不开的三个终极哲学问题

我是谁

- 我是一个全球分布式云存储系统的软件测试工程师,常年工作在 Linux 平台下。

- 管理过 20 人的测试团队,负责测试交付。

从哪里来

- 曾就职于一家外经公司的国际劳务部,管理大量出国人力资源资料档案。

- 现任一家软件公司软件测试工程师,负责一个全球分布式云存储系统的测试。

要到哪里去

- 短时间内掌握 Python,期望能学以致用。所谓「人生苦短,我用 Python」,它向我敞开了编程之门。

分析态势

为什么要花时间研究这三个问题?因为我可以在此基础上分析出我的优劣势、机会和威胁,也就是肯尼思安德鲁斯的 SWOT 分析法。只有清晰了态势,才能规划出一个明确、具体且能追踪管理的实体化目标,而非面对一个空虚无法明细的愿望。

当时我简单列了一下:

优势

- 拥有 Shell 这一初始技能

- 有自动化测试经验

- 专业的灰盒测试技能使自己同时拥有客户视角和开发思维

- 作为一个大型分布式存储系统的测试经理,具有很强的项目管理能力及交付经验

- 可以把 Python 作为工作中的一项改进内容

劣势

- 没有任何语言的开发经验

- Python 零基础

机会

- 网上有不少优秀的 Python 教程

- 业内比较看好 Python

- Python 可以像脚本一样使用

- 项目组内鼓励自我学习型工程师

威胁

- 平时为追求工作效率,可能会使用熟悉的 Shell 而非生疏的 Python

- 工作中不要求使用 Python

立项

分析完之后,我制定出了第一个实体化的目标:

熟悉 Python 思维,把工作中现有的 Shell 脚本用 Python 重写。

何为 Python 思维,我并没有把这个名词定义得多么玄乎,其实很简单,就是在拿到一个需求的时候,我知道从何下手,并且能熟练的反应出用 Python 语法,不让自己觉得很痛苦。所以当我能够把目前工作中所使用的 Shell 脚本都转换成 Python 的时候,就肯定能达到这个效果了。

为了达成这样的目标,我列出了约束这个项目的三大要素:

范围

- 范围跟目标不一样,目标是个最终状态,而范围包含了具体要做的事情。

- 比如到底要学哪一款教程,具体要把哪些脚本重写。

时间

- 总周期:一周。

- 为什么逼自己这么紧?虽然这个项目看起来不需要花费金钱,但这项任务一定会耗费自己很多的非工作时间,这些都是应该计入成本的,时间就是金钱,战线拖得越久,损耗越大。

- 那这个时间是拍脑袋想的吗?当然不是,我制定了更详细的日程表,后面会提到。

资源

- 网上的教程很多,其实只要认定一个,专心看下去,都是可以的,不必纠结哪个教程最好。我直接搜索了一个在线阅读起来也比较方便的图文教程,为什么没有选择视频?因为太费时间,有时候为了提速,我必须要一目十行。

- 人力资源很纯净,就我自己一个人。

- 另外还有一类资源不能忽视:随身的笔记本电脑和流量充裕的手机。想要短时间内完成目标,必须用上所有可能的时间。有些人觉得零散的时间无法运用,我不完全认同。零散的时间可能无法专心编程,但可以用来做搜索式学习,以强化或者探索学习过程中遇到的问题点,所以笔记本电脑用作完整时间的学习,手机则是用在碎片化学习的时间中。

计划

由于只有一周时间,所以必须要把时间表细化到每天、每半天、甚至每个时间段,比如上班前、中午休息时间、下班后,还需要考虑到一些影响因素,比如就我来说,那一周里面有一个已知的未知状况 —— 可能要出差一天,但是预估应该只会占用上班时间,所以判断它不会影响进度。

时间表不仅仅是思考自己有哪些可以利用的时间段,还要计划每个时间段做什么,比如哪几个时间段学习,学习的具体章节,几天之后就要开始脚本重写,具体写哪个脚本,越详细越好。

控制进度

每天按照计划的时间表来学习,想按时完成教程一般都不会出现状况。意外多会发生在实践阶段,比如我经常会发现费力写了一段代码,竟然是重复造轮子,因为早有人提供了使用起来更方便快捷的第三方库。对此我并不丧气,因为我的目标是完成 Python 学习,而不是利用最高的效率去写 Python 程序,虽然别人已经造好了轮子,但我练习了基础,锻炼了 Python 思维,不亏,但它着实影响了进度。

每个时间段我都会检查自己是否按时完成进度。如果落下进度,只能赶工,怎么赶?如果真的压缩了工作之外的所有时间,那么只能选择稍微牺牲一下睡眠,以不影响第二天工作为限。那些「保证睡眠时间」的鸡汤文就不看了,天道酬勤才是真理。

风险评估

但即使这样,也难免还会出现失控。当我发现连续两天,也就是差不多 6 个时间段的进度都未能达成时,我意识到最后的目标肯定要延期了。虽然有点沮丧,但并不觉得难以接受,项目延期实在是再正常不过的现象了。

需求变更

在我分析完延期的主要原因是在于时间没有供给充足,比如出差那一天的时间远远超出我的预估,以至于相当于少了一天的练习。我开始考虑的是延期两天完成目标,虽然这是一个非常合理的需求,但在第二天我就改变了主意,总觉得少了点什么。于是,在分析了 SWOT 之后,愿意接受增加范围带来的影响,对自己提出了一个重大的需求变更:

- 范围从「把所有 Shell 重写」变更为「挑选两个脚本重写,用 Python 写一个客户关系管理系统」

- 项目完成时间由「一周」变更为「三周」

之所以选择做一个客户关系管理系统,是由于我曾经每天都要管理几百人的信息资料,对此类信息的管理有一些理解,另外因为斜杠青年的身份,我也需要这么一个 CRM,Python 的简单易用,也让这个目标变得可行。

由于这一重大变更,我不得不重新启动、规划、执行、监控。

变更后的项目其实包含了两个目标了,所以我的内心是把这次的项目当作两个项目去管理的, CRM 的实现更多还是站在了产品经理的角度去管理。

最终,我按时完成了预定目标,做出了一个适合自己用的 CRM,这个 CRM 并不完美,当时甚至没有图形界面,但它实现了从无到有。(第四周结束的时候,我又迭代完成了两个大版本的改进,但由于没有产品开发和架构设计的经验,导致在第三版的时候几乎重写了所有逻辑)正如一开始我说的一样,这不是一篇 Python 的快速学习指南,更像是 PMP 的文章,我的整个过程涵盖了 PMP 五大过程组。在这次的项目中,我接触到了很多新知识、新工具,甚至对于产品的架构设计也有了理解,希望分享的这次心得,能和大家一起进步,让自信的朋友更肯定自己,让怀疑自我的朋友突破自己。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬楼梯 java_Leetcode 70.爬楼梯(Java)

题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬…

WebView之2

首先需要添加权限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/>   MainActivity: package com.wyl.webview;import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.vie…

火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍

随着近几年新媒体行业的高速发展&#xff0c;新媒体行业的红利也越来越来&#xff0c;也有越来越多的人想要享受到这波红利&#xff0c;于是不管是个人是企业都纷纷开始进入这个市场。不过也随之诞生了一系列麻烦繁琐的问题&#xff0c;如怎么持续创作内容&#xff0c;怎么花费…

java 采样_Java编程实现beta分布的采样或抽样实例代码

本文研究的主要是Java编程实现beta分布的采样或抽样&#xff0c;具体如下。本文将使用math3提供的工具包&#xff0c;对beta分布进行采样。如下程序是对alpha81&#xff0c;beta219的beta分布函数&#xff0c;进行抽样&#xff0c;共采样10000次。package function;/*** author…

树莓派 蓝牙音响_你应该拥有一个树莓派

为什么你应该拥有一个树莓派树莓派并不是极客的玩具树莓派可以用来做什么?它能实现的实在是太多了,最常见的比如自动化脚本 各种机器人bot: QQ/wechat/微博/facebook/telegram,IM结合爬虫 telegram的bot如今被黑产们结合比特币,做成了交易系统 使用宝塔linux面板,一键安装word…

训练集的识别率一直波动_机器学习验证集为什么不再有新意?

机器学习中&#xff0c;一般将样本数据分成独立的三部分&#xff1a;训练集、验证集和测试集。其中验证集在机器学习中所起到的作用是&#xff1a;开发模型总需要调节模型的参数&#xff0c;而整个调节过程需要在验证集数据上运行训练的模型&#xff0c;从而给出其表现的反馈信…

java写一个web聊天工具_javaweb写的在线聊天应用

写这个玩意儿就是想练练手&#xff0c; 用户需要登陆才能在线聊天&#xff0c;不要依赖数据库&#xff0c; 不需要数据库的操作&#xff0c; 所有的数据都是保存在内存中&#xff0c; 如果服务器一旦重启&#xff0c;数据就没有了&#xff1b;登录界面&#xff1a;聊天界面&…

python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数

Pandas之drop_duplicates&#xff1a;去除重复项方法DataFrame.drop_duplicates(subsetNone, keepfirst, inplaceFalse)参数这个drop_duplicate方法是对DataFrame格式的数据&#xff0c;去除特定列下面的重复行。返回DataFrame格式的数据。subset : column label or sequence o…

O-C相关-08-动态类型与静态类型

08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言&#xff0c;是指程序在运行时可以改变其结构&#xff1a;新的函数可以被引进&#xff0c;已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除…

python中numpy是什么_什么是NumPy?

本文是对官方文档的翻译&#xff0c;原文在此What is NumPy? - NumPy v1.14 Manual​docs.scipy.org以下开始正文。NumPy是Python的一个用于科学计算的基础包。它提供了多维数组对象&#xff0c;多种衍生的对象(例如隐藏数组和矩阵)和一个用于数组快速运算的混合的程序&#x…

java for循环 等待_java – 主题:忙等待 – 空循环

参见英文答案 > Is this starvation? 2个在我们的大学课程中,我们学习了Threads并使用“Busy Waiting”方法作为在TrafficLight等待的汽车的示例.为此,我们构建了三个类&#xff1a;> TrafficLight(实现Runnable)>汽车(实现Runna…

人物角色群体攻击判定(一)

我们制作3D动作游戏的时候,常常主人公是一对多人进行攻击,或者敌人在角色前方一定范围内进行攻击. 我们怎么实现这种效果呢&#xff1f; 1. 使用触发器(多体攻击)方便调试,可视化(推荐)2. 运用点乘和叉乘,判断敌人的角度和位置(单,多)一般3. 使用Physics的Physics.OverlapSpher…

mfc cimage加载显示图片_在微信小程序里实现图片预加载组件

网页中的图片预加载我们知道在 Web 页面中实现图片的预加载其实很简单&#xff0c;通常的做法是在 JS 中使用 Image 对象即可&#xff0c;代码大致如下var image new Image() image.onload function() {console.log(图片加载完成) } image.src"//misc.360buyimg.com/lib…

java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除

1.null---表示空值或者该字段不存在&#xff0c;如{"name"&#xff1a;null}2.布尔 --- 和java中的布尔一样&#xff0c;有两种&#xff1a;true,false,如{"sex":true}3.浮点数---shell中所有的数字都是浮点数&#xff0c;如{"age":12},{"m…

HDU 2242 双连通分量 考研路茫茫——空调教室

思路就是求边双连通分量&#xff0c;然后缩点&#xff0c;再用树形DP搞一下。 代码和求强连通很类似&#xff0c;有点神奇&#xff0c;_&#xff0c;慢慢消化吧 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #include <vector>5 #…

wxpython菜单栏嵌套窗口_如何在wxpython中使嵌套的Panel和Sizer工作

此处的逻辑是创建一个Panel,在其中添加控件,然后创建一个BoxSizer,在其中声明您在Panel中添加的每个控件在调整大小时的行为,并最终在Panel上设置应用BoxSizer的对象.您有2期.>首先,您缺少posPnlobject的上述语句的最后一部分.添加&#xff1a;posPnl.SetSizer(posPnlSzr)将…

Java多态与反射

多态通过分离做什么和怎么做&#xff0c;从另一个角度将接口与实现分离开来&#xff1b;通过多态来消除类型之间的耦合关系&#xff0c;在Java中&#xff0c;多态也叫动态绑定&#xff0c;后期绑定或运行时绑定&#xff0c;那么什么是方法绑定&#xff1f; 方法调用绑定&#x…

java webservice用户验证_使用java webservice的.net4.0 web app需要Usernametoken身份验证

我是使用.net 4.0 VS2010的新手。我需要使用java web服务并发送usernametoken自定义身份验证来访问服务&#xff0c;这是我很容易在VS2005中使用WSE2.0&#xff0c;那么在net 4.0中替换它是什么&#xff1f;我的客户端是.net 4.0 Asp.net Web应用程序(网站)&#xff0c;服务是j…

python随机数模块_python 随机数模块 -- random

一、概述这个模块实现的伪随机数生成器。对于整数&#xff0c;从区间选取。对于序列&#xff0c;随机元素。在实线的&#xff0c;有功能来计算均匀分布&#xff0c;正态分布(高斯) &#xff0c;对数正态分布&#xff0c;负指数&#xff0c;γ和β分布。对于生成的角度分布&…

织梦dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法...

dedecms升级到5.7SP1后&#xff0c;开启二级域名&#xff0c;你会发现&#xff0c;在二级域名下的文章&#xff0c;上传的图片地址都是&#xff1a;二级域名图片地址&#xff0c;这是相对路径。但是你的图片是默认上传在uploads里面的。应该使用绝对路径。这就出现图片路径错误…