您现在的位置是:网站首页>技术百科技术百科
程序员怎么掌握好自己的职业发展方向呢?
小大寒2024-01-01[技术百科]博学多闻
程序员怎么掌握好自己的职业发展方向呢?本文探讨了程序员如何掌控自己的职业。首先,程序员需要了解世界的变化趋势与自我定位,明确自己的优势与兴趣。其次,打牢技术基础,无论技术如何变化,原理始终不变。最后,提高学习效率,通过主动学习和实践掌握知识。文章还分享了对不同人才的分类、成长路径的建议以及提升学习效率的经验,强调了构建知识图谱、总结归纳和坚持实践的重要性,帮助程序员更好地适应快速发展的技术环境。
程序员怎么掌握好自己的职业发展方向呢?
这篇文章的主要内容是想让一些技术人员对世界有一个大体的认识,并且在这个认识下能够有一个好的方法成就自己。而不是在一脸蒙圈的状态下随波逐流,逐渐迷茫和焦虑。
信息技术经历了很多技术的更新换代,整个技术模式、业务模式也在不断变化。我们这群老程序员成长过程中所经历的技术,甚至比今天的程序员更为杂乱和多样。下面简单罗列一些已经被淘汰的技术,大家先感受一下:
- MIS应用开发:FoxPro,PowerBuilder,Delphi
- OA:Lotus Notes,VBScripts
- 微软:ODBC/ADO,COM/DCOM,MFC/ATL,J++
- 服务器:AIX,HP-UX,SCO Unix
- Web:CGI,ISAPI,SOAP
- RPC:CICS,Tuxedo
- J2EE:Websphere,Weblogic
- DB:Sybase,Informix
我想说的是,无论是过去还是今天,我们这些前浪和你们后浪所面对的技术挑战和对技术的焦虑感是相似的。我们那时不仅玩996,还玩封闭开发(一周只能回家一天)。当然,唯一好的事情是,跟今天的程序员相比,我们那个时代没有像微信、微博、知乎、抖音这些巨大消耗你人生的东西,因此,我们的工作、生活和成长相对更加高效,不容易被打断,喜欢看书,Google 也没有被封……当然,那时没有 StackOverflow 和 GitHub 这样的资源,因此我们能完成的东西或者质量相对较低。
当然,这里并不是要做一个比较,只是想让大家了解两代程序员之间一些问题的异同。在整个成长过程中,有许多东西是相通的。归根结底,实际上就是下面的三件事:
第一:认识世界与自我
如果想要把控技术,应对这个世界的一些变化,首先需要大致了解这个世界的一些规律和发展趋势,同时还要认识自己。自己到底适合做什么?在这个趋势和规律下,属于自己的发挥领域到底是什么?这是我们每个人都需要了解的。
第二:打牢基础,以不变应万变
无论世界如何变化,基础能帮助我们快速适应。基础的重要性对于你能够飞多高影响巨大。懂原理的人,比不懂原理的人能解决的问题和做出来的事情完全处于两个层级。
第三:提升成长的效率
由于现在社会的节奏非常快,比二十年前快得太多,技术层出不穷,所以我们的成长必须更加高效。效率并不仅仅是速度,它指的是如何学到更有效的东西,或者如何更有效地学习,这是我们需要掌握的另一个关键。
下面是我这多年来的一些认识,希望对你有帮助。
世界发展趋势
我个人经历的信息化革命可以分为三个阶段:
- 1990年代到2000年,这个时代是“MB时代”,是雅虎、新浪、搜狐、网易门户网站的时代。这个时期互联网服务商主要是数字化资讯,并将其发布到网络上。
- 2000年到2010年,称为“GB时代”,也称为多媒体或UGC时代。这一时期,上网变得普及,每个人手里的数码设备开始增多,照片和视频的上传变得常见,社交网络也逐渐兴起。
- 2010年到2020年,称为“TB时代”,即移动互联网时代。手机成为在线的重要工具,不再依赖电脑,个人的各种数据始终在被收集,并且数字化,互联网也因此获得了前所未有的动力。
所有的硬件和软件都随着处理数据的需求而演进。从增加带宽、硬盘容量,到更多的处理器,直到技术架构进入分布式化阶段,再到数据中心面临极限,边缘计算成为不可或缺的部分。
人才需求
在这个过程中,社会对不同类型人才的需求也在变化。以下是我对不同类型人才的一些认识:
- 技工: 在机器和自动化面前,技术工人能够操作机器,他们是技术的劳动力,通常被称为“码农”。随着技术的变化,门槛下降,他们可能逐渐被淘汰。
- 特种工: 这种人了解技术原理,能够解决特定的难题。他们并不容易被淘汰,因为原理是解决问题的关键。
- 工程师: 不仅仅是使用技术,还能精益求精地做好工作,持续提高代码的可读性、可维护性等。
- 设计师与架构师: 这些人专注于开发工具、框架和模式,提高开发效率,降低成本,提升系统的稳定性和性能。
- 经理: 主要负责团队的组织、项目的完成和利润的创造。他们是团队和公司中的“粘合剂”,使团队高效运作。
通过了解这些,我们可以更清楚地认识到自己所处的位置,思考接下来应该朝哪个方向发展。
认识自己
认识了世界如何发展,也了解了技术人员的分类和层级,接下来需要认识自己。只有了解自己,我们才能找到合适的方向。
认识自己的标准方法:
- 特长: 找到自己的特长和天赋,发现自己比别人更擅长的领域。
- 兴趣: 如果没有特长,找到自己有兴趣的事,真正的兴趣是在困难面前不轻易放弃。
- 方法: 如果没有特长和兴趣,学习方法也很重要,包括时间管理、统筹规划和总结经验。
- 勤奋: 如果没有特长、兴趣和方法,勤奋也能帮助自己自食其力,但随着年龄增长,勤奋可能会变得不那么有竞争力。
总之,为了应对未来技术的变化,作为个人,我们需要不断从特长、兴趣、方法中筛选出适合自己的路线。如果没有这些,那么就要依赖勤奋。
打好基础
我们曾经接触过各种已经被淘汰的技术,可能会感到迷茫或失落。其实,应对未来变化的关键就在于打好基础,提升内功修养。变化的形式不断出现,但核心原理几乎没有太多变化。理论上的基础不变,形式变化才是表面。
提升代码的重用度、解耦等都属于技术的基础部分。只有打牢基础,才能突破瓶颈。如果没有足够的基础,任何形式上的进步都可能是无效的。
这些基础知识可以分为四类:
- 程序语言:语言原理、类库实现、编程技术(如并发、异步)等。
- 系统原理:计算机系统、操作系统、网络协议、数据库原理等。
- 中间件:消息队列、缓存系统、网关代理等。
- 理论知识:算法与数据结构、数据库范式、分布式系统等。
掌握这些基础原理,能帮助我们解决实际问题,并在技术变化中不断前行。
学习效率
谈到学习效率,就需要提到这张学习金字塔的图。从图中可以看出,学习方法可以分为两层:一种是被动学习,也即浅度学习,包含听讲、阅读、视听和演示,这些都是处于被动接受的信息。而与人讨论、自己动手实践、以及教授他人则属于主动学习,是深度学习的体现。如果无法进行深度学习,就无法真正掌握知识。这也是为什么你会常有“学那么多干什么,不用就忘了”的感觉,这正是浅度学习的典型症状。
下面是一些我个人认为非常有效的学习经验:
1. 挑选一手知识和信息源
学习方法的第一步是挑选知识源。知识的来源非常关键,二手信息会丢失大量的细节。例如,谭浩强写的书虽然很好,但很多内容已经失真。当前计算机领域的大部分一手资料都是国外的,因此英文变得尤为重要。我鼓励大家尽量阅读第一手资料。如果英语水平有障碍,至少要阅读经过良好翻译的资料,而非他人解读后的二手资料,因为通过他人理解的学习不会带给你深刻的体验,而你自己的体会往往更为深刻。
2. 注重原理和基础
即使最终可能会忘记一些技术细节,但原理应该牢记在心。掌握了基础原理后,即使面对新技术,也能够迅速掌握。例如,学会了C和C++,再学Java或Go就会变得更加轻松。基础和原理是学习其他技术的基础。
3. 使用知识图谱
学习时,要学会构建知识图谱,把知识结构化。从一个技术的核心概念出发,逐步关联和拓展。例如,学习TCP协议时,首先要理解其状态图,了解如何建立连接、如何断开连接以及状态的转变。接着,要理解TCP如何保证可靠性,如何处理丢包和重传问题,再扩展到拥塞控制、滑动窗口等相关技术。通过知识图谱,我们不必记住所有的细节,而是知道在哪里可以找到需要的信息。学习就像在城市中生活,你的脑海里要有一张清晰的地图,能够指引你在不同的知识点之间游刃有余。
4. 学会举一反三
学习时,要尝试用不同的方法学习同一知识。例如,学习TCP协议时,通过读书学习是一种方法,编程实现是一种方法,调试和查看网络抓包又是另一种方法。通过多种途径学习,可以更全面地掌握知识,甚至能顺带学到一些相关知识。例如,学习前端时,了解HTTP协议、长连接与短连接的区别,以及HTTP/1和HTTP/2的差异,都会帮助你更好地理解前端技术。
5. 总结和归纳
只有通过总结和归纳,才能形成自己的思维框架、方法论和学习套路。每次学习新知识时,可以先总结该领域的基础,比如学习新语言时,首先要了解其内存管理机制、数据类型、泛型、并发模型等。学多了之后,你会形成自己的套路:比如Windows与Linux的区别,或者Linux和Unix的差异。总结出自己的框架和方法论后,未来的学习会变得更加高效。
6. 实践和坚持
最后,多做、多练、多坚持。只有通过不断实践,才能获得经验。技能的提高离不开大量的实践,就像小学阶段学加减乘除,必须通过大量的题目练习才能掌握。选择好的知识源、注重原理基础,虽然一些基础书籍可能枯燥,但它们的价值不可忽视。学习这些基础内容,能为你带来长远的收益。要明白,真正有价值的知识,能够带来的是高回报,而不是辛苦的钱。
阅读完毕,很棒哦!
上一篇:程序员必须掌握的核心技能