程序员进阶,技术提升

计算机方面的基础主要包括计算机网络、算法、数据结构等,非常重要。

> 普通程序员与高级程序员的区别:

 普通程序员:
一、知识体系零散、没有系统性的思维,在写代码、改bug的时候没有工程素养,往往是拆了东墙补西墙。
二、对某种语言的依赖性太强,知识无法很好的迁移,一旦换了语言、或者领域不同就会不知所措
三、经验不足却自认为自己经验丰富,只对自己做过的比较顺手,但是碰到未知的问题,就束手无策

 高级程序员: 
一、知识体系完整,有系统性的思维,即使没有到架构师的级别,在写代码和改bug的时候也能从整体上去思考和把握。
二、学习能力强有了自己的心智模型,知识可以自由迁移,并可以高效地切入不同的领域和语言
三、拥有真正的经验,不只是做够那些项目,而是面向未知的解决问题的能力。
  a、提高代码优化的能力:“代码可运行”对一个优秀的程序员来说绝不是结束,而是开始。优秀的程序员一定熟知各种算法和数据结构,会灵活运用,致力于写出更简单、效率更高的程序。
  b、先考虑、多思考:编程思路,是系统的计划和设想,是程序员写程序时的条理和线索。编程思路,是系统的计划和设想,是程序员写程序时的条理和线索。

-- 高级程序员和普通程序员有哪些区别- https://blog.csdn.net/zhugeaming2018/article/details/81546344

-- 要避免程序员变成码农要做到如下几点:
1.必须对编码保持热情,并持续学习;
2.必须保持好奇心,乐于探求事物本质;
3.必须对所做的工作及时总结,主动优化代码,让系统变得更加有机;
4.必须主动尝试更好的开发方式、更先进的工具,来提升开发效率,并想办法避免重复性的工作;

5.必须不断改进设计,将编程变成创造性的工作。

-- 1.自己独立完成项目,这个叫初级程序员

2.能带Team完成项目,并且能够了解项目框架中的源码,思想,能够做一些改进,这个叫做中级程序员

3.能独立写框架,写算法,这个叫做高级程序员
-- 业务知识的积累,编码规范的积累,最佳实践的积累,开发流程的积累。建议:
1. 0~6个月 学习技能和术语和思维方式的阶段
2. 3~24个月 学习业务知识,编码规范,最佳实践,开发流程的阶段

3. 6~120个月 抽象梳理问题,寻找解决方案,参加其他人解决问题的思路,给出自己解决方式的阶段。

> 程序员的软技能和硬实力

  软技能是人们在进行自我管理,以及与共事者(例如客户和同事)交往的过程中所使用的技能,包括领导力、情商、说服及倾听的能力、对同伴的激励,以及建立有价值的关系。而硬技能则是指在解决问题或生产产品时所运用的高度专业化的科学知识。
  沟通,或者说是将想法或信息传达给另一个人的能力,就是这样一种常被忽视的软技能。
  首先,绝大多数编程活动都是在程序员与非程序员交互的组织内部完成的。通常,我们必须与产品经理沟通,以充实业务需求的技术细节,以便衡量难度,评估可行性,并基于这些因素,优先考虑任务;我们有时需要向项目经理提供评估并证明其合理性,项目经理则要确保项目符合预算要求并按计划进行;我们需要与设计人员密切合作,以解决目标环境的局限性,识别用户在交互中缺少的流程,或发现信息设计的问题。在与扮演这些角色的同事沟通时,我们必须时刻关注用于传达我们想法的词语或语气。高绩效团队的一个关键因素是团队动力,如果我们在沟通中用了过激的方式而导致冲突,那么团队中就会形成隔阂以至于大家不能高效工作。
  程序员必须学会沟通。真正有价值的成功产品是那些在规模不凡且需要多学科专业知识的产品。产品经理为不仅仅基于我们的定位编写业务需求——这只是程序员工作的一部分——他们还通过不断研究客户行为和公司业务领域的趋势来保持产品的价值;项目经理做的也不仅仅是证明估算的合理性——他们还会计划和调整时间表、预算,同时评估风险并管理资源分配;设计师除了培养对艺术的良好品味外,还研究了大量心理学、人机交互、甚至神经科学,就是为了将科学发现融入公司的产品中;测试人员不同于仅仅在开发环境中工作的单元测试,他还需要确保产品在部署到生产环境之后仍然按照预期的方式运行。
  互联网思维、小步快跑、试错思维。
  在美国这边,产品经理大多是行业经验非常丰富的人,要么是从工程师转过来,要么是从多年的商业领域经历然后读个 MBA转过来。上线一个功能,经过严谨的理论推演、多轮前期调研、科学的 A/B Test,从提出 idea 到最终用户看到更新,经常耗时半年或一年。很多不成功的 idea 还没面市,就因为数据不好而“胎死腹中”。这样一方面提高了产品需求的质量,另一方面也给技术团队足够多的时间来设计和实现一个可持续发展的架构。
  员工和公司谈忠诚、谈感情,是没有任何的意义,正如有的公司和员工谈情怀、画大饼,还不如落实员工的实际利益。毕竟有的公司在年前裁员不发年终奖,也从不谈论“厚不厚道”。年终奖是公司给过去一年辛苦工作的你,而不是给未来的你,你该拿得理直气壮的。职场不相信感动。主动提升自己的竞争力和能力。

> 写作,写代码,技术深度与广度,工具

• 坚持写作;
• 探究新技术,不断学习;
• 英文能力,阅读技术文档;
• 使用工具,提高工作效率;

  -- 除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物。

  技术以深度为主以广度为辅,时间分配80%放在自己第一技术上面,20%可以选择扩展技术广度。
  你要找到学习的目标,我当时想法是公司缺什么样的技术人才,就利用工作之余的时间去学习相关技能,快速学习,加入实战帮助公司,从而提升个人价值。如果你是想自己想做一个产品,你是前端开发,你就可以选择一门服务器的语言来学习,学习的方向其实都是根据自己的目标需求进行选择的。

  -- 人类懂得学习,会使用工具。
  在其中的一些项目中作为最好的程序员; 而在另一些项目中是最差的。当你是最好的,你能测试领导项目的能力,用你的观点激发别人。当你是最差的,你学习杰出者是怎么做的,了解他们不喜欢做 什么(因为他们吩咐你做事)。

  最后定义你的优秀程度的还是作为软件工程师的基本素养:学习能力和编程能力,还有设计能力。

-- 如何成为杰出的程序员或软件工程师- https://www.zhihu.com/question/19636213/answer/40350039
  JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:
(1)List、Map、Set实现类的源代码
(2)ReentrantLock、AQS的源代码
(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
(4)线程池的实现原理

(5)Object类中的方法以及每个方法的作用

年轻程序员如何快速发展成一名架构师或者技术专家?-http://blog.csdn.net/chancein007/article/details/53731148
最牛B的编码套路- http://blog.csdn.net/chancein007/article/details/53731514

-- 真正让自己技术得到提升的关键点有三个方面,一个是“实战项目”,一个是“技术书籍”,还有一个就是“开源代码”
 1.“实战项目”永远是积累编程经验最重要的途径,项目越复杂,开发中遇到的问题越多,经验的积累也越多,我相信任何一门技术,如果总只是自己写写Demo,是永远掌握不好的;
 2.“技术书籍”则指的是那种着重“思想”方面的书籍,能从本质上提升个人的编程素养,例如:“xxx编程思想”、“Effective xxx”、“重构”、“设计模式”等等,这些书都是需要反复看的,有了实战经验再带着问题看,效果会好很多倍。
 3.“开源代码”则是吸收“别人的实战项目经验”的最好途径,不要做井底之蛙,看看大牛们都是怎么设计代码的,深入学习优秀的开源代码,你能学到很多非常实用的编程技巧和编程风格。
  -- 其实学习编程无非就是以下几个阶段:
(1)第一阶段,了解系统/平台(Windows、Linux、Android、IOS)的基本工作原理,了解其开发环境,编译系统,以及有哪些可以使用的编程接口(API)和第三方库。
(2)第二阶段,学习该平台提供的各个API和第三方库,比如:UI控件、线程、Socket等等,并通过Demo和封装,转换为自己的库和API。
(3)第三阶段,在项目实战中积累开发经验,并通过技术书籍、开源代码提升编程技巧和能力。
(4)第四阶段,深入了解和研究平台本身,比如:UI系统工作原理,消息通知机制,内核和框架等等。

(5)第五阶段,开始从更高的角度来思考问题,研究最佳解决方案、编写或搭建开发框架,走向架构师之路。

-- 程序员的能力
 1. 编程能力,用代码解决问题,解决复杂的问题和各种麻烦,细分有调试 算法 数据结构 OS原理;
 2. 架构能力,解决代码规模的问题,架构的一些意识 如解耦 接口隔离,认识业务建立抽象模型,还有常见的模式 如经典的MVC,还有设计层面 面向对象 设计层面等;
 3. 工程能力,解决协作的问题,工程化建设,跨越多个业务及团队,包括前后端解耦,模块化,质量保证,代码风格等。

-- 工程师如何在工作中提升自己?- https://blog.csdn.net/MeituanTech/article/details/79922326

  跳槽不外乎是想有更好的待遇,更广阔的发展平台以及更丰富的资源,这一切都需要基于你目前的能力。有句话说的好,作为职业人,我们需要的不是当前的高薪,而 是拥有随时跳槽的能力。所以能力不仅仅包含专业能力,还有职业能力、沟通能力以及大局观的能力。
  结构化面试主要考量应聘者的3个匹配、6个维度的能力,分别是:职位匹配、团队匹配、企业文化匹配;知识维度、技能维度、能力维度、个性维度、动机维度、价值观维度。

    技术管理者,通过管理来提升技术的实现效率与效果,减少摩擦损耗。架构师,通过复制自己的技术能力来提升团队,达到放大个体价值的作用。

  通常程序员在这一阶段的职业发展分两条线,专家(技术)线和管理线。专家线主要跟机器打交道,搞搞性能调优,高并发处理等等高精尖的问题;管理线主要跟人打交道,了解下属的状态,控制资源和进度。

 -- 技术路线:高级-资深-技术专家-高级专家-资深专家-研究员等

 -- 管理路线:

Android开发工程师高级进阶(教程)- http://www.jianshu.com/nb/395384

程序员到高级程序员的10步- http://blog.csdn.net/wongdei123321/article/details/78960823
程序员技术练级攻略-程序员技术浅谈- http://blog.csdn.net/thanklife/article/details/73161117

-- 程序员、技术主管和架构师- http://blog.csdn.net/mindfloating/article/details/52665111
架构师的职责要求:
   ## 技术职责 
 继承技术主管的职责;高纬度的系统设计、抽象和封装;产品技术蓝图绘制与关键技术决策;
   ## 组织职责 
 继承技术主管的职责; 跨技术和非技术团队的接口协作;
技术主管的职责要求:
  ##  技术职责 
 研发任务管理;工作量评估;任务分解、分配;代码审核;风险识别;
 技术能力提升;代码规范制定和推广;生产力工具研发和推广;最佳实践总结和推广;关键代码实现;
  ## 组织职责 
 协调沟通; 招聘面试; 教练指导;复盘总结;

-----------------------------------

1.JavaWeb后台等级规划, H5前台等级规划

2.测试等级规划

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值