Retrospective

2021年7月10日 作为Senior Consultant来公司半年多了,上个月初已经过了试用期,但却没有想象中的那么高兴。 近段时间因为手头工作的不善处理让自己陷于十分被动的境地,可以说是一次深刻地教训了,如果没有深入的思考反省,难免以后会再犯。因此我不得不与自己妥协,承认自己的种种不足,并采取各种手段来补齐。 前段时间读完Bob大叔的《程序员的职业素养》后,我觉得自己并不是一位合格的专业的程序员,我的Title已经到了Senior,但实际情况着实还需要跳一跳,稳一稳,才能对得起这个Title。 花了点时间整理了一下这本书的要点脑图,稍微来分析下自己的教训时刻吧。 专业主义 建卡的目的是追踪进度,并非简单的to-do -> in progree -> done列的拖拽,需每天更新进度,若当天没有进度可更新,那是不是说明今天产出极其有限?即使没有什么产出,也应该有被block的原因。 任务分解并非简单将任务分为各步骤执行,若单个任务较重,考虑创建Epic。花一定时间讨论未来任务潜在的问题,block,若在一开始就发现难以逾越的鸿沟,也许就不会到最后被动的束手无策。 TDD是当前公司,团队所推崇的实践,若不采取TDD,实在无足够自信通过CICD直接部署,已经深刻体会到了。 结对编程是分享context,从泥潭中获救的最有效的方式,也是相互学习的好方式。由于时差和任务分解不清晰导致结对编程的效率比较有限。 做卡并非简单的完成任务,需深入思考背后所带来的价值,可以给客户提供的业务价值,若看不到价值,果断地及时止损是很有必要的。TL的视野大多数情况下比你长远,认真听,认真思考。 说"是"和"不" 说了太多试试看,有一种盲目自信和英雄主义,这是一种来自菜鸡的虚荣。 如果不以解决问题为目标,很容易陷入消极对抗中,“你说的都对,但我就是有我的主意”。也许并不是有意为之,但表现出来的就是。这很容易造成无限期的延期。 认真地说是,如果你的承诺做不到,不如直接坦诚的说不会。真正的承诺是,你可以掌控的事情。 恶性循环 近两三个月处于恶性循环中,白天无精打采低效地做事,晚上回家疲惫不堪,身体的疲惫和心理的疲惫让人快乐不起来。分析过后,原因如图所示。 拿到了与自己岗位不足够匹配的role,HR明确地说需要跳一跳才能够到,我听进去了,但做了行动上的矮子。入职之后将其抛之脑后,理所当然的接受。很怀念为了来这里付出的努力,但得到之后并没有珍惜。 周围人的期望,领导的看好,再加上我的求胜心切,让我盲目的以50的战斗力挑战100的要求。难免不会显得力不从心,有点像高中时期,还带着初中的光环,以为自己无所不能。对自己没有太清晰的认识,处事也不足够圆滑。 越是感受不到成就,越是想做更难的任务,心中的英雄主义无时无刻再告诉我自己去做点出彩的任务,却忽视了自身的战斗力。 越是在日常工作中的愚钝表现,越让我斗志消沉。 我在期间陷入长期的自我怀疑和颓废,一直在想到底适合我的是什么,我反馈给TL的愿景到底是真实要想要的还是不甘心?长期以来我也没有想出自己到底想做什么,也许真的陷入了能力陷阱?我也不知道,不过也许可以尝试一下新的认知。 也许是想太多,根本原因已经找到,就是职业要求和个人能力不匹配。现在必须采取一下方式进行破局。 不再纠结自己到底适合什么,做好手上的每一件小事,积累满足感,成就感,为自己提供正向激励。 专研所在领域,每天学习一点,积跬步,积累满足感,为自己提供正向激励。 努力做好手上的小事,学习好计划的内容,越努力越幸运。 别忘了自己当初是因为什么契机才涉足云计算领域的?又是为什么在跳槽的时候可以升职加薪?再说的远一点,当初是因为什么才能得到的全国数学竞赛二等奖,或者演讲比赛二等奖? 没啥说的了,干吧。

Python Newbie 3

1. The walrus operator Walrus operator is the coolest feature that was added in the Python 3.8 update python codes. start = input("Do you want to start(y/n)?") print(start == "y") # double parentheses here # using parentheses with the walrus operator is encouraged print((start := input("Do you want to start(y/n)?")) == "y") # With parentheses if (sum := 10 + 5) > 10: print(sum) #return 15 # Without parentheses if sum := 10 + 5 > 10: print(sum) #return True a = [1, 2, 3, 4] if (n := len(a)) > 3: print(f"List is too long ({n} elements, expected <= 3)") 2....

Python Newbie 2

To make your codes more beautiful and more readable, try to use below checker to scan your python codes. 1. mypy Mypy is an optional static type checker for Python. from typing import Union, Any, List, Optional, NoReturn, Dict, Tuple, Annotated, AnyStr def fib(n: int) -> Iterator[int]: a, b = 0, 1 while a < n: yield a a, b = b, a + b Repo here. Mypy supports reading configuration settings from a file....

Python Newbie 1

1. functions def name_of_function(): ''' python function name should be snake chasing ''' Arbitary arguments *args **kwargs def func(*args): ''' will get a tuple ''' print(args) def func(**kwargs): ''' will get a dictionary ''' if 'fruit' in kwargs: print(f"choice is {kwargs['fruit']}") func(fruit='apple',veggie='lettuce') 2. yield What does the “yield” keyword do? the-python-yield-keyword-explained

April 24, 2021 51 words 1 min

SQL in BigQuery 1

1. How to handle duplicate column names on left join A SELECT * EXCEPT statement specifies the names of one or more columns to exclude from the result set. All matching column names are omitted from the output. SELECT t1.* EXCEPT (name), t2.* EXCEPT (name,account_id), t1.name AS deployment_name, t2.name AS account_name FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name 2. Extract date from timestamp Returns a value that corresponds to the specified part from a supplied timestamp_expression....