Showing posts with label Growth. Show all posts
Showing posts with label Growth. Show all posts

Friday, April 8, 2016

Lesson Learned - Programmer



https://www.thekua.com/atwork/2016/04/12-years-12-lessons-working-at-thoughtworks/
http://news.cnblogs.com/n/542833/
1. Tools don’t replace thinking
3. Safety is required for learning
4. Everyone can be a leader
5. Architects make the best decisions when they code
I advocate for Tech Leads to spend at least 30% of their time coding. Spending time with the code helps build trust, respect and a current understanding of the system. Making architectural decisions without regard for the constraints of the current system are often bad decisions.

6. Courage is required for change
7. Congruence is essential for building trust
In reality, regardless of what you say, people will remember how you act, first and foremost. Acting congruently is making sure that your actions follow your words. Acting incongruently destroys trust. Saying “no” or “not now” is better than promising to do something by a certain time, only to not deliver it.

9. Multi model thinking leads to more powerful outcomes
I have come to appreciate the value of diversity, and to see a problem through multiple lenses. Systems thinking also recognises that facts can be interpreted in different ways, leading to newer ideas or solutions which may be combined for greater effect.

10. Appreciate that everyone has different strengths
A strength in one area may be a weakness in a certain context, and teams are stronger when they have a broader set of strengths. Differences in strengths can lead to conflict but healthy teams appreciate the differences that people bring, rather than resent people for them.
11. Learning is a lifelong skill
12. Happiness occurs through positive impact

https://www.thekua.com/atwork/2016/03/two-topics-best-avoided-in-retrospectives/
1. Interpersonal conflict
behavioral issues for a single person
https://www.thekua.com/atwork/2016/03/3-tips-for-building-a-technical-vision/
1. Use a visual
2. Discuss as a team
3. Iterate – reflect and review

MAKING CHANGE STICK
https://www.thekua.com/atwork/2016/01/making-change-stick/
1. Keep it small
2. Build on an existing habit
3. Keep it social
4. Visualise the end state

Wednesday, April 6, 2016

Growth: 全栈增长工程师指南



http://growth.phodal.com/
https://github.com/phodal/growth-ebook
这里不得不提到一本书《卓有成效的程序员》,在书中提到了很多提高效率的工具。使用快捷键是其中的一个,而还有一个是使用快速启动软件。于是,我在Windows上使用了Launcy:
通过这个软件,我们可以在电脑上通过输入软件名,然后运行相关的软件。我们不再需要点击某个菜单,再从菜单里选中某个软件打开。
Homebrew
包管理工具,官方称之为The missing package manager for OS X。
Homebrew Cask
brew-cask 允许你使用命令行安装 OS X 应用。
iTerm2
iTerm2 是最常用的终端应用,是 Terminal 应用的替代品。
Zsh
Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容 Bash 的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进,例如:
  • 更高效
  • 更好的自动补全
  • 更好的文件名展开(通配符展开)
  • 更好的数组处理
  • 可定制性高
Oh My Zsh
Oh My Zsh 同时提供一套插件和工具,可以简化命令行操作。
Sublime Text 2
MacDown
MacDown 是 Markdown 编辑器。
CheatSheet
CheatSheet 能够显示当前程序的快捷键列表,默认的快捷键是长按⌘。
SourceTree
SourceTree 是 Atlassian 公司出品的一款优秀的 Git 图形化客户端。
Alfred
Mac 用户不用鼠标键盘的必备神器,配合大量 Workflows,习惯之后可以大大减少操作时间。
上手简单,调教成本在后期自定义 Workflows,不过有大量雷锋使用者提供的现成扩展,访问这里挑选喜欢的,并可以极其简单地根据自己的需要修改。

Vimium
Vimium 是一个 Google Chrome 扩展,让你可以纯键盘操作 Chrome。

ReText是一个使用 Markdown 语法和 reStructuredText (reST) 结构的文本编辑器,编辑的内容支持导出到 PDF、ODT 和 HTML 以及纯文本,支持即时预览、网页生成以及 HTML 语法高亮、全屏模式,可导出文件到 Google Docs 等。brew install scala

输出是最好的输入

上面那张图『学习金字塔』就是在说明——输出是最好的输入。
如果你不试着去写点博客、整理资料、准备分享,那么你可能并没有意识到你缺少了多少东西。虽然你已经有了很多的实践,然并卵。
因为你一直在完成功能、完成工作,你总会有意、无意地漏掉一些知识,而你也没有意识到这些知识的重要性。


Output is Input
Output is Input

从我有限的(500+)博客写作经验里,我发现多数时候我需要更多地的参考资料才能更好也向人们展示这个过程。为了输出我们需要更多的输入,进而加速这个过程。
而如果是写书的时候则是一个更高水平的学习,你需要发现别人在他们的书中欠缺的一些知识点。并且你还要展示一些在别的书中没有,而这本书会展现这个点的知识,这意味着你需要挖掘得更深。
所以,如果下次有人问你如果学一门新语言、技术,那么答案就是写一本书。

如何应用一门新的技术

对于多数人来说,写书不是一件容易的事,而应用新的技术则是一件迫在眉睫的事。
通常来说,技术出自于对现有的技术的改进。这就意味着,在掌握现有技术的情况下,我们只需要做一些小小的改动就更可以实现技术升级。
而学习一门新的技术的最好实践就是用这门技术对现有的系统行重写。
第一个系统(v1): Spring MVC + Bootstrap + jQuery
那么在那个合适的年代里, 我们需要单页面应用,就使用了Backbone。然后,我们就可以用Mustache + HTML来替换掉JSP。
第二个系统(v2): Spring MVC + Backbone + Mustache
在这时我们已经实现了前后端分离了,这时候系统实现上变成了这样。
第二个系统(v2.2): RESTful Services + Backbone + Mustache
或者
第二个系统(v2.2): RESTful Services + Angular.js 1.x
Spring只是一个RESTful服务,我们还需要一些问题,比如DOM的渲染速度太慢了。
第三个系统(v3): RESTful Services + React
系统就是这样一步步演进过来的。
尽管在最后系统的架构已经不是当初的架构,而系统本身的业务逻辑变化并没有发生太大的变化。
在我们真正开始去写代码之前,我们可能会去考虑一些事情。怎么去规划我们的任务,如何去细分这个任务。
  1. 如果一件事可以自动化,那么就尽量去自动化,毕竟你是一个程序员。
  2. 快捷键!快捷键!快捷键!
  3. 使用可以帮助你快速工作的工具——如启动器。
不过不得不提到的一点是:你需要去考虑这个需求是不是一个坑的问题。如果这是个一个坑,那么你应该尽早的去反馈这个问题。沟通越早,成本越低。
  1. CoffeeScript是一套JavaScript的转译语言,并且它增强了JavaScript的简洁性与可读性。
  2. Webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX)、coffee、样式(含less/sass)、图片等都作为模块来使用和处理。
  3. Babel是一个转换编译器,它能将ES6转换成可以在浏览器中运行的代码。
并且类似于Ionic这样的混合框架,也将Ionic带到了移动应用的领域。

React

React似乎很受市场欢迎,各种各样的新知识——虚拟DOM、JSX、Component等等。React只是我们在上面章节里说到的View层,而这个View层需要辅以其他框架才能完成更多的工作。
并且React还有一个不错的杀手锏——React Native,虽然这个框架还在有条不紊地挖坑中,但是这真的是太爽了。以后我们只需要一次开发就可以多处运行了,再也没有比这更爽的事情发生了。

Vue

Vue.js是一个轻量级的前端框架。它是一个更加灵活开放的解决方案。它允许你以希望的方式组织应用程序,你可以将它嵌入一个现有页面而不一定要做成一个庞大的单页应用。
JSON Web Token (JWT) 是一种基于token 的认证方案。
在人们大规模地开始Web应用的时候,我们在授权的时候遇到了一些问题,而这些问题不是Cookie所能解决的。Cookie存在一些明显的问题:不能支持跨域、并且不是无状态的、不能使用CDN、与系统耦合等等。除了解决上面的问题,它还可以提高性能等等。基于Session的授权机制需要服务端来保存这个状态,而使用JWT则可以跳过这个问题,并且使我们设计出来的API满足RESTful规范。即,我们API的状态应该是没有状态的。因此人们提出了JWT来解决这一系列的问题。
通过JWT我们可以更方便地写出适用于前端应用的认证方案,如登陆、注册这些功能。当我们使用JWT来实现我们的注册、登陆功能时,我们在登陆的时候将向我们的服务器发送我们的用户名和密码,服务器验证后将生成对应的Token。在下次我们进行页面操作的时候,如访问/Dashboard时,发出的HTTP请求的Header中会包含这个Token。服务器在接收到请求后,将对这个Token进行验证并判断这个Token是否已经过期了
从上图中我们可以看到,Chrome的前台正在不断地向后台查询API的结果。由于浏览器需要不断的向服务器发出请求,而HTTP的Header是非常长的,即使是一个很小的数据也会占用大量的带宽和服务器资源。为了解决这个问题,HTML5推出了一种在单个TCP连接上进行全双工通讯的协议WebSocket。
WebSocket可以让客户端和服务器之间存在持久的连接,而且双方都可以随时开始发送数据。
如果说持续交付则是一种对卓越的追求,那么持续学习应该就是追求软件卓越。 如果说持续集成是一种软件开发实践,那么对于技术人员来说——持续写作应该就是持续学习的实践
生活总会遇到压力,来自工作上的也好,来自对于技术上的兴趣也罢,我们需要持续来断地学习。没有一直能立于不败的方法,在传说中的武林上也是如此。
对于持续学习来说,通常会有以下的
  • 阅读
  • 编程
  • 写作
有意思的是持续学习有额外的好处便是
  • 持续学习可以降低危机感
写给其他技术人员看的,有时候更多的是代码、思路、图。写作对于学习的意思怕是有一大把,写作是最好的输入,也是最好的输出。你需要为你的这篇文章
  • 去参考更多的资料
  • 更深入的学习
  • 更多的时间付出
然而这些都是有价值的,你也许可以从中得到
  • 一份工作
  • 一些志同道合的朋友
  • 一个博客
  • 一种习惯
  • 还有人生
  • 或许还能写书。

Mac web developer apps
 https://gist.github.com/erikreagan/3259442

https://github.com/macdao/ocds-guide-to-setting-up-mac

Tuesday, March 1, 2016

How to be Better



https://m.signalvnoise.com/sleep-deprivation-is-not-a-badge-of-honor-f24fbff47a75
http://www.jianshu.com/p/1b8be9a92a79
Stubbornness: When I’m really tired, it always seems easier to plow down whatever bad path I happen to be on instead of reconsidering the route.
  • Lack of creativity: What separates programmers who are 10x more effective than the norm is not that they write 10x as many lines of code. It’s that they use their creativity to solve the problem with a tenth of the effort. The creativity to come up with those 1/10 solutions drops drastically when I’m tired.
  • Diminished morale
Irritability: Your ability to remain patient and tolerant is severely impacted when you’re tired. 

http://katemats.com/7-proven-ways-to-get-more-done-in-less-time/
Planning. 
Prioritization.
Be on time
Be present and focus.
Keep track of everything in one place.
Set deadlines and establish timelines.

http://www.devstore.cn/essay/essayInfo/6147.html
在职场中,并不需要时刻比拼智商,大部分情下,做事认真一点、考虑更深入一点、积极主动一点,已经好于70%的同学了,这样的同学我们都称之为“靠谱”。
获得了合作伙伴包括主管的认可,自然获得的机会就会更多,做的事也会更复杂,合作伙伴也会越来越强,这样就会形成正循环,成长就会比较快。所以前3年需要通过做事形成自己的影响力,积累人脉,锻炼自己的对未知事物的判断能力,因为随着你做的事情越来越多,专业知识能覆盖的范围会越来越小,遇到越来越多自己不懂的领域。你不可能掌握所有知识,因此培养判断力非常重要。包括对事物未知发展方向的判断、事情产生价值的判断,以及对人的判断等。
所谓后3年做人,是更多发挥出人的价值,不仅仅把事做好就行,包括在合适的时间做合适的事。在公司里做先烈的情况有很多,找到多个团队的共同价值点把事情一起做好,其实这个最难,因为越有价值的事情,涉及到的利益方也会越多,平衡好各方的诉求是事情成败的关键。事情做好后还要有人帮你宣传等,这当中可能会涉及人的性格、交际能力、向上管理等综合能力。
善于发现兴奋点
1.发现工作中可以提升效率的地方,可以把琐事的事情工具化,记得当时在做一个搜索需求时,发现传给搜索的参数非常多,而且每次拼URL异常麻烦。因为工具是给运营同学用,所以便做了一个页面,把参数做成表单,运营同学只要在对应的字段(含义有说明)表单中填入值,就可以自动生成最终URL,提升了他们生成URL的效率,也肯定受到了运营同学的好评。
2.除了发现工作中可以提升的效率外,还可以积累人品,比如我们曾经有个小图书馆,借书信息需要一位同学人肉记录,于是我做了个图书管理系统给那个同学用,收获了友谊。
3.除了在主动和积累人品外,最重要的还是要积累技能,我曾把在公司用到的中间件都深入学习一遍,并且写成学习文档,和其他同学写那种简单的使用心得型文档不同,我写的学习文档都是分析设计原理,为什么这么设计,用到了哪些设计模式,关键的技术点等。那些工作几年,对中间件熟悉的同学也会有兴趣来看。但公司的同事毕竟有限,写作文章也会花费不少精力,所以我要寻找新的动力继续写下去。当时我从写公司独有的框架转到写公司内外通用的技术框架,如Spring、iBATIS、Tomcat等JVM技术。并且找机会投到杂志和网站上,一方面有经济回报,另外更重要的是能收到反馈信息。
善于从工作中找到源动力非常重要,做一件事情从不同角度发现其中的价值可以始终保持做事的激情,如果事情做好,可以得到感谢、称赞和认可,获得更多知识。找到正向的反馈,附带获得知识和影响力,然后促使自己持续把事情做好。
写文章和总结有多种好处:
可以系统地沉淀和总结自己的学到的知识,只有经历这样的过程,知识才记得牢。
可以增加影响力,因为分享给别人带来价值,才有人关注你。
给做事增加动力,尤其是那些琐碎的事。如果把琐碎的事情都连接起来,说不定也能收效显著。
与人协作
在与人协作上,这几年我的感触也很深,从最初的想一个人完成所有事,到现在尽量让别人完成所有事,这种转变真是很特别。公司中的大部分事都是团队协作,以公司中常用的项目运作模式为例,一般会有一个项目经理(PM)、一个或者多个架构师,若干个不同功能的开发,其他就是不同的岗位分工,如PD、UED、测试、PE等。PM和架构师两个角色刚好给两个同质的团队利益分配提供了很好的选择,PM一般会拿到业务结果,而架构师能体现这个项目中的技术成果,典型的场景是一个很好的技术通过PM来落地而达到双赢。与人协助上有几个阶段需要经历。

积极主动给老板带来一些惊喜,是你获得更多机会的助燃剂,老板一般喜欢两种人,一种是听话的人,兢兢业业的完成交给的任务;第二种是总有新想法并且爱折腾的人,有想法还不够,最好是有结果。很显然第二种人更容易获得提拨。
适当给老板找些麻烦也有好处,这里所谓的找麻烦有两重含义:
一是,要有自己独立的主见,即当发现明显有问题时还听之任之,只会让老板觉得你没有主见。积极表达自己的观点。当然,这要基于大家都是正直的人,如果你的老板小肚鸡肠,那还是好自为之吧。
二是,尽量不要让老板的认知范围完全覆盖你的认知。如图2所示,如果这样,你在老板眼里就是个透明人,因为你的所有思考和行动都在他的可预知范围内。所以在工作场景中用到的知识深度、广度或者其他技能上你要有所长。比如技能上你擅长前端,或者线上运维非常好,又或者思考问题非常全面,再或者逻辑推导能力很好,图2是一种比较理想的状态。
“当然有种情况也要避免,就是当你掌握的知识如果大于你的老板的话,你可能会觉得老板不如你,但是千万不要忘了,他的推理范围可能还是远远覆盖你,也就是对事情的判断能力,所以也不要过于自大。”

前期精力都应该放到具体的小事上。先以事服人,再以德服人。
你每天90%的注意力,都浪费在了鸡毛蒜皮上

于是一个清晰的事实出现了,浅尝辄止的人很可能将一无所获,而专注投入走到最后的人将获得超额收益。
——采铜《如果你的资源贫乏,那么专注做好一件事将是你的唯一出路》






专注当下从做计划开始
  • 所有事项都要记在一个地方
  • 养成列To do list的习惯后,就把所有要做的东西都记下来
  • 每天记得定时查看,不然一样会忘事
真正有智慧的人从不让手机束缚自己
手机的出现不是让别人随时找到你,而是让别人在“你想让他们找到你的时候”找到你。






想把一件事做精就必定要学会取舍
只关注你生活中
最重要的事情
 很多时候,我们会慢慢变成我们专注的那个人或事。

你是否注意到,结婚多年的夫妻会变得越来越像对方,而在性格上,很多人会逐渐和他们工作的上司、同事甚至是和他朝夕相处的宠物越来越像。

人的精力是有限的,如果你一下操心太多事情,就坚持2-3件你已经开始操心的事情,然后放弃剩下的那些。 
这些放弃不仅包括一些工作和生活上的目标,甚至会包括你长久以来的生活习惯甚至是你的一些人脉关系,但是请你记住,你是在为自己的人生做选择。
为什么大部分人的勤奋是完全无效的
生活中存在一种怪圈,一些埋头苦干,很努力工作的人往往不会混得太好,当然混得也不会太差

他们身上都有一些特质,比如勤奋。这里的勤奋,我指的是埋头苦干,努力工作,少了些活学巧用。

然而,这部分人却很少知道,这些勤奋大多都是无效的。因为太沉迷于执行,而少了些思考。

俗话说“磨刀不误砍柴工”,当你觉得自己很努力了,依然陷入瓶颈期时,脱身出来想想这些点你是否都中枪了?
不会充分利用琐碎时间
(2)全方位调动感官
(3)推荐基本时间管理的书
说多了理论,真正还是需要靠自己去实践。找出适合自己的方式才是王道。

推荐基本时间管理的书,根据理论自己详细规划。

《如何掌控自己的时间和生活》
里面提到一个重要的方法,就是做任务分解,先把大目标分解成小目标。再把任务分成ABC,按优先等级完成。

《番茄工作法》
将工作时间分成小部分,以25分钟为一个单位,当时实践这个理论的时候在iphone上面找到了一个关于番茄工作法的软件,发现实践的非常好。

《拖延心理学》
为你分析拖延的原因,看见我们自身潜意思里的害怕与恐惧。

还有《GTD》、《80/20法则》这类书籍都很推荐。曾经还使用过一些国外的时间管理软件,例如43 Things\Like Tick\Goal Migo\大芝麻......都可以尝试使用。
学习不系统
很多人学习都是粗暴学习法,囫囵吞枣。刷刷知乎大V,看看专业微博文章,就觉得学到了真本事,其实不然。长期接受碎片信息的后果,就是让你的思维变得狭隘,难以进行复杂的思考。

因为这些碎片信息通常具备这样的特征,它们往往大量简化了推演过程,将多路径简化为单一路径,不够严谨、全面。


不专业、不权威
都说跟对师傅很重要,学习也同理,要看经典的图书,跟着专业的老师学,否则再怎么努力都是白费劲。

比如想成为Java 开发工程师就应该跟着浙江大学的翁恺老师学;想学C++就该跟大神级人物侯捷、硅谷技术大牛董飞;学office软件,就应该跟着职场老鸟秋叶......

名师出高徒,加上你的努力与勤奋。学习效果会更好。
不会利用零碎时间、不懂的系统学习,不跟着专业、权威老师学习......这些都是你为什么勤奋却不出成绩的原因。

Winning Habits: 4 Secrets that Will Change the Rest of Your Life
Be first on, last off, and add extra value!
Never trade results for excuses
Solve problems in advance
Always make those around you look good

http://codecloud.net/15199.html#1

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts