删除了不必要的资源文件更新了README.md
20
README.md
|
@ -39,7 +39,7 @@
|
||||||
|
|
||||||
![](./res/python-bj-salary.png)
|
![](./res/python-bj-salary.png)
|
||||||
|
|
||||||
![](./res/python-cd-salary.png)
|
![](./res/python-salary-chengdu.png)
|
||||||
|
|
||||||
给初学者的几个建议:
|
给初学者的几个建议:
|
||||||
|
|
||||||
|
@ -444,15 +444,15 @@
|
||||||
> - **客户合作** 高于 合同谈判
|
> - **客户合作** 高于 合同谈判
|
||||||
> - **响应变化** 高于 遵循计划
|
> - **响应变化** 高于 遵循计划
|
||||||
|
|
||||||
![](./res/the-daily-scrum-in-the-sprint-cycle.png)
|
![](./res/agile-scrum-sprint-cycle.png)
|
||||||
|
|
||||||
> 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)。
|
> 角色:产品所有者(决定做什么,能对需求拍板的人)、团队负责人(解决各种问题,专注如何更好的工作,屏蔽外部对开发团队的影响)、开发团队(项目执行人员,具体指开发人员和测试人员)。
|
||||||
>
|
|
||||||
> 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队。
|
> 准备工作:商业案例和资金、合同、憧憬、初始产品需求、初始发布计划、入股、组建团队。
|
||||||
>
|
|
||||||
> 敏捷团队通常人数为8-10人。
|
> 敏捷团队通常人数为8-10人。
|
||||||
>
|
|
||||||
> 工作量估算:将开发任务量化,包括原型、Logo设计、UI设计、前端开发等,尽量把每个工作分解到最小任务量,最小任务量标准为工作时间不能超过两天,然后估算总体项目时间。把每个任务都贴在白板上面,白板上分三部分:to do(待完成)、in progress(进行中)和done(已完成)。
|
> 工作量估算:将开发任务量化,包括原型、Logo设计、UI设计、前端开发等,尽量把每个工作分解到最小任务量,最小任务量标准为工作时间不能超过两天,然后估算总体项目时间。把每个任务都贴在白板上面,白板上分三部分:to do(待完成)、in progress(进行中)和done(已完成)。
|
||||||
|
|
||||||
2. 项目团队组建
|
2. 项目团队组建
|
||||||
|
|
||||||
|
@ -636,6 +636,4 @@
|
||||||
- 云存储
|
- 云存储
|
||||||
- CDN
|
- CDN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
> 致谢:感谢的我的同事古晔、张旭、肖世荣、王海飞、荣佳伟、路丰坤等在技术上给予的指导和帮助。
|
> 致谢:感谢的我的同事古晔、张旭、肖世荣、王海飞、荣佳伟、路丰坤等在技术上给予的指导和帮助。
|
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 554 KiB |
Before Width: | Height: | Size: 217 KiB After Width: | Height: | Size: 217 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 313 KiB |
Before Width: | Height: | Size: 195 KiB |
Before Width: | Height: | Size: 209 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 400 KiB |
BIN
res/celery.png
Before Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 436 KiB |
Before Width: | Height: | Size: 290 KiB |
Before Width: | Height: | Size: 336 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 253 KiB |
Before Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 140 KiB |
BIN
res/er-graph.png
Before Width: | Height: | Size: 147 KiB |
BIN
res/git_logo.png
Before Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 178 KiB |
Before Width: | Height: | Size: 86 KiB |
BIN
res/greedy.png
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 402 KiB |
BIN
res/mvc.png
Before Width: | Height: | Size: 296 KiB |
BIN
res/oauth2.png
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 378 KiB |
Before Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 333 KiB |
Before Width: | Height: | Size: 238 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 143 KiB |
Before Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 238 KiB |
Before Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 439 KiB |
Before Width: | Height: | Size: 37 KiB |
BIN
res/uml.png
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 174 KiB |
|
@ -15,7 +15,6 @@ else:
|
||||||
if c > the_max:
|
if c > the_max:
|
||||||
the_max = c
|
the_max = c
|
||||||
print('The max is:', the_max)
|
print('The max is:', the_max)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
但是我们刚才说了,程序员都是懒惰的,很多程序员都会使用三元条件运算符来改写上面的代码。
|
但是我们刚才说了,程序员都是懒惰的,很多程序员都会使用三元条件运算符来改写上面的代码。
|
||||||
|
@ -27,7 +26,6 @@ c = int(input('c = '))
|
||||||
the_max = a if a > b else b
|
the_max = a if a > b else b
|
||||||
the_max = c if c > the_max else the_max
|
the_max = c if c > the_max else the_max
|
||||||
print('The max is:', the_max)
|
print('The max is:', the_max)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
需要说明的是,Python在2.5版本以前是没有上面代码第4行和第5行中使用的三元条件运算符的,究其原因是Guido van Rossum(Python之父)认为三元条件运算符并不能帮助 Python变得更加简洁,于是那些习惯了在C/C++或Java中使用三元条件运算符(在这些语言中,三元条件运算符也称为“Elvis运算符”,因为`?:`放在一起很像著名摇滚歌手猫王Elvis的大背头)的程序员试着用`and`和`or`运算符的短路特性来模拟出三元操作符,于是在那个年代,上面的代码是这样写的。
|
需要说明的是,Python在2.5版本以前是没有上面代码第4行和第5行中使用的三元条件运算符的,究其原因是Guido van Rossum(Python之父)认为三元条件运算符并不能帮助 Python变得更加简洁,于是那些习惯了在C/C++或Java中使用三元条件运算符(在这些语言中,三元条件运算符也称为“Elvis运算符”,因为`?:`放在一起很像著名摇滚歌手猫王Elvis的大背头)的程序员试着用`and`和`or`运算符的短路特性来模拟出三元操作符,于是在那个年代,上面的代码是这样写的。
|
||||||
|
@ -39,7 +37,6 @@ c = int(input('c = '))
|
||||||
the_max = a > b and a or b
|
the_max = a > b and a or b
|
||||||
the_max = c > the_max and c or the_max
|
the_max = c > the_max and c or the_max
|
||||||
print('The max is:', the_max)
|
print('The max is:', the_max)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
但是这种做法在某些场景下是不能成立的,且看下面的代码。
|
但是这种做法在某些场景下是不能成立的,且看下面的代码。
|
||||||
|
@ -60,7 +57,6 @@ a = int(input('a = '))
|
||||||
b = int(input('b = '))
|
b = int(input('b = '))
|
||||||
c = int(input('c = '))
|
c = int(input('c = '))
|
||||||
print('The max is:', (a if a > b else b) if (a if a > b else b) > c else c)
|
print('The max is:', (a if a > b else b) if (a if a > b else b) > c else c)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
但是,这样做真的好吗?如此复杂的表达式是不是让代码变得晦涩了很多呢?我们发现,在实际开发中很多开发者都喜欢过度的使用某种语言的特性或语法糖,于是简单的多行代码变成了复杂的单行表达式,这样做真的好吗?这个问题我也不止一次的问过自己,现在我能给出的答案是下面的代码,使用辅助函数。
|
但是,这样做真的好吗?如此复杂的表达式是不是让代码变得晦涩了很多呢?我们发现,在实际开发中很多开发者都喜欢过度的使用某种语言的特性或语法糖,于是简单的多行代码变成了复杂的单行表达式,这样做真的好吗?这个问题我也不止一次的问过自己,现在我能给出的答案是下面的代码,使用辅助函数。
|
||||||
|
@ -74,7 +70,6 @@ a = int(input('a = '))
|
||||||
b = int(input('b = '))
|
b = int(input('b = '))
|
||||||
c = int(input('c = '))
|
c = int(input('c = '))
|
||||||
print('The max is:', the_max(the_max(a, b), c))
|
print('The max is:', the_max(the_max(a, b), c))
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的代码中,我定义了一个辅助函数`the_max`用来找出参数传入的两个值中较大的那一个,于是下面的输出语句可以通过两次调用`the_max`函数来找出三个数中的最大值,现在代码的可读性是不是好了很多。用辅助函数来替代复杂的表达式真的是一个不错的选择,关键是比较大小的逻辑转移到这个辅助函数后不仅可以反复调用它,而且还可以进行级联操作。
|
上面的代码中,我定义了一个辅助函数`the_max`用来找出参数传入的两个值中较大的那一个,于是下面的输出语句可以通过两次调用`the_max`函数来找出三个数中的最大值,现在代码的可读性是不是好了很多。用辅助函数来替代复杂的表达式真的是一个不错的选择,关键是比较大小的逻辑转移到这个辅助函数后不仅可以反复调用它,而且还可以进行级联操作。
|
||||||
|
@ -86,6 +81,5 @@ a = int(input('a = '))
|
||||||
b = int(input('b = '))
|
b = int(input('b = '))
|
||||||
c = int(input('c = '))
|
c = int(input('c = '))
|
||||||
print('The max is:', max(a, b, c))
|
print('The max is:', max(a, b, c))
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|