目录
两招让你成为卓越的T型人才
工作中如何发现自己要学什么,怎样构建自己的技能树,是十分重要的。假如你不知道要学什么,那么一旦你工作不那么忙时就会觉得无聊,只能通过浏览新闻、看小说、打游戏等方式消磨时间消耗自己。
在学习技术中有两种,如果能贯彻两种学习策略,就会慢慢形成程序员最里程的“一专多能”
广度学习
以C++为例,如果做网络方面的开发,遇到选择哪个框架的问题,libevent、ACE还是Asio?如果做GUI开发,可能会在Qt、MFC和DirectUI之间做选择
选择和了解的过程,是个人进行广度学习的过程。快速的了解每一个框架并快速写一些Demo来对关键技术点和需求做验证……最终会根据文档和实验结果来选择。这个过程非常难得,会快速拓宽个人的知识面。建议把每次了解到的技术框架都记录下来,以便日后进一步学习
深度学习
对技术框架的学习,大体分三个阶段:
- 基础开发,了解及使用API,基于API完成应用
- 熟悉内核及原理,主要是了解框架的设计原理、阅读源码、洞悉内在机理
- 优化框架,对已有功能的不足进行完善、优化,或者对其进行扩展、定制,让它适合特定环境
很多时候我们一直停留在第一个阶段,如果能往第二、三阶段去钻,熟悉原理和内核然后去扩展、定制,才能真正掌握一个框架,才会有深度,才能进一步形成自己的价格和竞争力,比如Qt的技术图
小结
不管是广度还是深度学习,都是从实际需要出发的,是你工作中要用到所以不得不学—在有明确目标时最有学习动力,在热度还未退却时学习效果最好
如果你想投资自己的未来学习其他技术,最好的办法是给自己设计一个软件产品(或参与到别人的项目中),设定一个期限,用你想掌握的技术完成它
程序员的能力拓展模型
一般工作中,技术能力和解决问题的能力达到一定的水平之后,有能力解决匹配的问题,此时处于舒适区,该区域的大小根据能力界定;当超出现有技能和经验时,能看到了解,但还不能解决,那么当前处于挑战区;途中大圆外是未知区域,未知即迷茫,即痛苦,贸然跳入,可能折戟沉沙、铩羽而归
假如你愿意跳出舒适区接收一定的不适,那么有可能从左边的园变成右边的园(区域更大了),但同时痛苦区也会变大,即“知道的越多,不知道的也越多”
在开发过程中扩展舒适区
在一个项目中,每个人都做自己驾轻就熟的事情,对整个项目是最经济的,可是对个人来说是最不经济的;作为程序员自己,如果想要更快的成长,主动去完成一些挑战性的任务,哪怕加班在别人看不见的地方复出,却能够不断的提高舒适区,基础新挑战的机会也会变大,进入了良性循环,越来越强大
在渴望成就自我的人眼里,问题即机会。只有抓住机会,解决问题的能力才会在痛苦的历练中像雪球一样越滚越大
点亮程序员的个人品牌
- 产品
- 所在公司和团队的背景
- 开源项目
- 技术博客
维护技术博客是相当有挑战的事情,需要锤炼你的技术和写作能力,还需要有很好的自控力,不过,一旦坚持下来,就会收获多多 - 出版技术书籍
维护一个高质**量的技术博客,能增大你出版图书的机会 - 口碑
你今天的负责、努力、上进、能钻研、与人为善、乐于助人、有担当,一定在将来能帮到你
什么样的轮子可以重新造
当我们掌握了一门技术并将它运行到了实际项目中时,关于造轮子就有了另外的划分:
一些基础的工具库,比如String、XML、Json、Http,重新造的必要性不大。而与业务相关的,可以尝试重构、再造,对理解业务有好处,也能更好地适应新需求
阅读源代码
目的
- 纯粹学习
- 添加新功能
- 重构旧代码
- 修复他人的bug
为了学习去读远吗是最愉快、最放松的。不过应该设定一个课检验的目标才会有收获
工具
- SourceInsight:可以绘制调用关系图
- Visio:用于绘制简单的狂徒,表述远吗的模块划分、层次结构等
笔记
- 尽可能详细地做记录,比如弄明白了某个子模块的逻辑,某个类的作用、某些函数的调用关系时再记录,否则记录动作会打断思考
- 每天工作结束,记录进度(弄明白的部分),记录疑问,记录第二天要弄明白什么东西,这样第二天就能快速进入工作状态
- 记录看到的优秀设计,提高审美,自我成长
避免造成技术债务
大多数人从某个问题的多个备选解决方案中会优先选择那条最简单、容易的路,因为人的习惯让我们容易不假思索地放弃挑战,挑战伴随着不确定性和自我控制,不如唾手可得的方法来得快速。因此,形成延迟满足的思维和行为习惯,才能让我们做出更好的抉择
成为指导者的好处
- 知识与经验可以相互促进
- 表达能力可以不断得到锻炼
- 捕捉关键问题的能力可以不断提升
在和别人交流问题时,需要先清空自我,这样才可以捕捉到他人的“点”,他人才会觉得“你是理解我的”,这是一种宝贵的能力 - 建立好的口碑
- 提升团队实力
你帮助团队里的伙伴成长,你所在的团队实力就能增强 - 提高团队凝聚力
让其他人感觉“不是一个人在战斗”“我知道我遇到问题时会有人帮助我”“我愿意在这样的团队里工作”
怎样新学一门技术
- 选择什么技术栈
每一个技术栈都有适合他的使用场景 - 列出你的问题和技术栈的特点
- 列出待学习的技术点
- 寻找合适的学习资料
- 坦然面对问题,不放弃
- 保持对最终目标的清晰认识
- 不断实践,积累自信
最好一两天就能有一个小demo,这样刺激就会不断,如果能将每个小demo都和前面从大目标拆分出来的小目标结合起来,形成每一个小demo完成大目标的某一个细分小目标,就更好了 - 记笔记
1、学习过程中搜集的资源链接
2、遇到的未决的疑问
3、那些很宽而我们用的很窄的知识点
4、那些能进一步深入而浅藏辄止的知识点
5、某个功能可能存在的其他实现方案的蛛丝马迹
带你长发及腰或者胡渣胜草,在回头整理笔记,回顾并进一步学习,这样更能够掌握新学的技术 - 步步为营,持续推进
在新学一门技术时,要力求落到实处,避免走马观花 - 投资自己要放开手脚
在增值的方向上投资自己,才是最明智的 - 坚持,坚持,再坚持
效率提升圈
工作效率低下的原因
- 不知道为什么要做
- 没有确切地认定他们的预期结果是什么
- 没有明确的截止期限
- 没有决定你下一步的具体行动到底是什么
- 如果你的某个任务能明确上述四点,一定可以高效地完成
-
按照如下表格提升工作效率
需要明确的 | 目的 |
---|---|
为什么要做 | 给做某件事赋予你有关的某种意义 |
预期结果 | 预期结果应该能够明确衡量什么是完成 |
截止期限 | 最好能够精确到天,下一年、下个月都是无效的期限 |
下一步计划 | 下一步计划应该是简单的、可立即开始做的 |
精力预算 | 规划你的时间和精力,保证这件事的投入 |
程序员保值的5个秘密
- 应用技术
哪些人会被替代:不求甚解、似懂非懂、干了多少年还看不透所用技术的本质、遇到问题仍然茫然,注定会被一大波小鲜肉挤下来
假如你对一门语言的各种特性都体察入微了悟于心,假如你对一个框架的机理和各种应用场景都有独特的理解和丰富的实践经验,那么你几乎是无可替代的,你已经成了这个语言和框架方面的专家,价值不可估量 - 高难技术
比如windows内核或Android内核,能够熟练撰写各种驱动,唯其稀缺,所以保值 - 算法
比如你精通图像处理算法、视频编解码算法或者精通搜索推荐相关的算法…… - 产品意识与思维
别被技术绑架
- 一定有某一项技术最适合解决某个问题
技术时用来解决问题的,当我们要解决某个问题、实现某个目标时,选择综合成本最低的那项技术
当我们做技术选型时,应当问“这项技术适合解决哪类问题?”,而不是问“我掌握的技术该怎么解决这个问题?” - 换工作时拒绝换技术
不要让自己仅仅局限于某一种技术中,你熟练掌握了某门技术,其实你应该是你掌握了:学习能力、解决问题的能力
通过掌握、精通一门技术,发现自己的学习模式、确认自己的学习能力,再去学其他技术会更加迅速,毕竟所获得的有关学习的经验和认知是通用的
如果你确认自己已经收获了学习能力和解决问题的能力,那么具体的技术就已经不重要了,它也不应该成为你选择新工作新产品的绊脚石
程序员接私活的玄机
为什么接私活
- 缺钱,机箱多赚钱
- 业余时间闲得慌,没事干,把时间共享出去赚点外块
- 想在实战中培养自己感兴趣的技能
私活与成长
- 赚更多的钱
- 让自己更值钱
最好的私活,能在经历、技能、方向、未来可能性上使你更丰富、更加值钱
什么样的私活可以做?
- 缺了这笔钱生活会无法为续吗?
- 会影响到我当下的生活质量吗?
- 能让我更值钱吗?
- 相信你可以做出更好的选择
假如你想成为全栈工程师
全栈ABC
1、对自己产品的渴望
一个真正的全栈工程师,会从生活中发现问题,洞察需求,设计解决方案并迫不及待地实现产品。换句话说,只有在一个人既对产品有迫切的渴望、又没人帮他是现实,才会走上全栈之路
2、时势造全栈
加入了一个缺人的创业型公司,什么都自己来
3、思维方式和学习能力
只要你学到的那部分能够顺利帮你实现目标,就可以继续前进了
全栈的好坏
全栈工程师的好处在于涉猎技术很广,能够很快运用他所了解的技术开发出产品原型,所以很多全栈工程师走上了创业之路
但同样的因为是横向发展,没有精度,所以去面试时会很吃亏;不过,如果可以做到先一专再多能,然后有意识地选择目标职业,就可以避免这种情况
坚持每天记录工作笔记
工作笔记的内容,一般包含下列几点
- 今天完成了什么
- 今天遇到了什么问题
- 明天要做什么