十月¢潴潴 发表于 2023-10-4 19:00:21

程序员的编程能力应该如何进阶?

程序员的编程能力应该如何进阶?

一塌胡涂 发表于 2023-10-4 19:00:47

作为一名工作多年的开发者,回过头来看一下,发现其实工作时间久了,想要从一个初级程序员进阶到下一个阶段,核心要考察的已经不再是编程语言、功能实现这些基础的能力,而是在长时间的工作过程中所积累下来的经验、养成的良好开发习惯。
这些是至关重要的,丰富的经验,能够让一位程序员在遇到棘手的问题时能够快速定位并寻找到最优的解决方案,良好的开发习惯,则是保障系统安全稳定的前提。
我之前写过不少有关提升程序员能力的内容,感兴趣的同学可以看一下:
如何高效地增强编程(特别是debug)能力?作为一个程序员,有什么想对新人说的吗?回到正题,程序员的能力应如何进阶?
工作几年,遇到过很多让人赞叹不已的大牛,也遇到过很多初入职场的初级程序员。
下面,就列出6个我看到的初级程序员和高级程序员之间比较普遍的区别,这也是一位程序员在进阶过程中需要注意的。
1. 添加太多特性

有多少次你通过考虑所有的”可能性“而使一个故事需求过度复杂化?
如果你正在开发的API可以被设计成与其他平台无缝集成呢?如果你的仪表板可以发送自动报告呢?
抵制这种行为,不要过度设计它。
你不应该在未来太过超前的功能上花费大量的时间。而且,更多的代码意味着更多的bug和不必要的脚本会增加应用程序的臃肿。
理解你的代码和添加新的特性也会更加复杂。
为了避免这种情况,要不断问自己,你的代码是否解决了具体的需求。
确保你想清楚用例和边缘案例,但不要在一个你可以更快上线的功能上花费数周时间。
如果你对添加一个有可能解决极端用例的功能感到困惑,在下一次版本迭代上提出来。
你将会节省大量的时间,并且你将会建立起你自己作为一个团队成员的形象。
2. 重复写同样的脚本

作为一名软件工程师,你应该遵循DRY(Don't Repeat Yourself)原则来提高工作效率。
这可以通过两种方式实现:消除代码中的冗余,或简化开发流程。
让我们看看如何解决这两种情况。
代码中的冗余

设置一个服务器,甚至一个虚拟环境,需要多次编写相同的脚本和动作。
你要用几乎相同的步骤和代码建立你的3层开发架构,包括开发、测试、生产。
除此之外,管理基础设施的依赖性也变得越来越复杂。
这不仅是重复和枯燥的,而且手动操作也让你容易出现人为错误。
低代码平台通过可重用的基于抽象的组件和可视化的拖放界面,开箱即有这种功能。
当然,你不会为每个场景找到一键式解决方案,但你会有最基本、可重复的解决方案。自动管道将帮助你为你需要的许多环境构建、复制和扩展代码。
流程中的冗余

清楚地勾勒出你在开发过程中的步骤数量,并思考如何减少这些步骤。
在这里,自动化能够提供有效帮助。
另外,留意那些你最终执行了两次以上的过程。制定一个自动化序列,每次你想做这个任务的时候都可以触发,你会从中受益。
不过,在你进行自动化之前,一定要注意时间上的权衡。
在实现自动化之前要问自己一些问题”如果我把它自动化,会比我做这个任务节省更多时间吗?在接下来的几周内,我是否会定期做这件事?“
如果答案是肯定的,就把它自动化。
3. 从零开始建立系统

如果一个开发者每次建立网络应用时都要对JDBC数据库连接进行自定义编码,那么完成一个项目就需要很长时间。
开发可维护和安全的软件应该是你的首要任务。
然而,这并不意味着从头开始构建系统。
你不需要重新从零开始造轮子、重建已经存在的功能。
公司想要高效的工作,而你花在从头开始构建系统上的时间,在大多数情况下是多余的。
因此,取而代之的是,通过使用成熟的框架,根据客户的需求进行定制。
另外,检查公司代码库。如果该工具现有的功能与分配给你的功能重叠,最好检查一下函数调用是否可以提供你所需要的数据,或者是否可以整合。
然而,当处理机密数据如财务,或健康记录时,从头开始建立功能以加强安全是有意义的。但在大多数情况下,框架、知名的开源库可以完美地完成工作。
4. 糟糕的测试策略

在选择自动化和人工测试时,你必须注意一个微妙的平衡。
因此,让我们了解一下,作为一个软件工程师,你如何利用这一点来制定一个有效的测试策略。
写一个小的手动测试来确保你添加的新功能工作正常是很容易的。
但是,当你扩大规模时,运行这些手动测试需要更多的时间,特别是当你试图找到那个讨厌的bug,不断破坏你的代码。
你需要花更多的时间来设置你的自动化测试。不过,一旦它们被写好,它们就可以被重复使用。因此,你不必因为增加了一个新的功能就手动重新测试以前的功能。
反过来说,选择正确的任务来实现自动化也同样重要。不幸的是,这是QA自动化测试中最常见的错误之一。
但是,不要陷入过度自动化的陷阱,最终把测试任务做的本需求本身还要复杂。
5. 不正确的代码优化

这是一种相当常见浪费时间点,通常很难从一开始就发现。
你花了很多时间来优化那些不是优先级的场景,甚至可能不需要的代码。
你首要的关注点应该是让功能发挥作用,然后再考虑优化问题。
而且,优化的决定通常是基于具体情况的。
如果这个性能优化只需要几分钟,那就做吧。如果你要花几个小时来获得1%的性能增量,最好先慎重讨论一下。
例如,让我们假设你正在为一个内部团队开发一个网页。如果网站在一秒内成功加载,使用者并非迫切需要在0.5秒内加载,而且,这并不能显著改善业务运营。那就没有必要花费太多精力进行优化。如果它是一个电子商务商店,一秒钟或者两秒钟加载对用户体验影响较为突出,那么,它就成了一个功能需求点,需要着重优化。
6. 低效的沟通

低效的沟通是造成软件开发中许多时间浪费的直接原因。
沟通是至关重要的,尤其是在开发和过渡阶段。
假设出现这样的情况:开发人员对业务需求有误。
这种沟通上的差距会使解决方案过于复杂,导致技术上的错误,并增强出现错误或返工的机会。
由于沟通是软件开发中最人性化的方面,这种时间上的浪费是无法完全消除的。
然而,有了适当的项目管理工具和协作环境,它肯定可以被减少。
就个人而言,在开会或开发一个功能时,总是考虑到大局。学会倾听和有效协作。养成写下或发送会议讨论内容纪要的习惯,以明确双方的期望。
另外,要尽早沟通,而不是拖延。
<hr/>hello,大家好,我是Jackpop,重点大学本科毕业后保送到哈工大计算数学专业读研,有多年国内头部互联网、IT公司工作经验,先后从事过计算机视觉、推荐系统、后端、数据等相关工作。如果同学们在升学考研、职业规划、高考志愿、简历优化、技术学习等方面有困惑,欢迎大家前来咨询!
推荐阅读

<a data-draft-node="block" data-draft-type="link-card" href="http://www.zhihu.com/question/21111278/answer/3127834708" class="internal">如何提高编程效率?有什么神仙软件,一辈子都不想删掉?用 Python 自动化办公能做到哪些有趣或有用的事情?

艾哥 发表于 2023-10-4 19:01:09

直接拿一个项目,限定时间想尽一切办法把它写出来,各种搜索,试探,拷贝,粘贴,问人工智能。
这个项目可以横跨需求,前端,数据库,后台,容器,测试 ,部署。
项目不用大,要全栈。
写完你觉得架构怎么这么糟糕?这个继承很不科学,代码冗余量过大,那个事务锁定的太厉害影响性能,一塌糊涂。
于是你对这个软件再重构一遍,这次要查和要问的东西少了,写的时候就更有思路。
这种方式取得进步完全靠谱。
可惜我这种老油条如果发现代码跑的挺好,绝对不会去重构,因为重构不知道又会搞出什么幺蛾子。。。

xiarunzi 发表于 2023-10-4 19:01:38

程序员的编程能力应该如何进阶?

看了这篇文章保证你能找到从入门到精通的路。作为干了多年程序员、架构、PM、到 CTO 的人,相信有足够的经验给你参考。

http://picx.zhimg.com/v2-251116356fc04b72bfd55a758efede00_r.jpg?source=1940ef5c
我们先谈一下一个优秀的程序员应该具备那些品质与能力吧,只有这样才有目标嘛。要不然就像是一个无所事从方向的车在乱开,尽管你可能有足够的目的,但是总达不到终点。
一个优秀的程序员的状态

[*]对于计算机系统有非常清晰的认知(CPU、MEM、OS、DISK/IO、Network),这个认知会影响到他对计算机负载的认知,对网络负载的认知,对于程序及 DB 的负载的认知。也就是他能清晰的知道怎么平衡一个系统中的每个部分。
[*]对于算法有清晰的认知,可以十分理性的平衡人与硬件的投入。有自己非常强的过人之处,所谓的金字塔结构的知识。
[*]对于技术,有自己相对独立的认知,可以知道自己与业界的发展方向。不会不断的追逐什么 C 到 C++,C++到 Java,Java 到 Scala,相反,他会非常清晰的知道 什么是主流与什么是自己需要。
[*]坚持学习,如果一个优秀的程序员放弃了学习,那就是他开始离开这个技术界的开始。
所以我觉得王国维的做学问的三境界是最最能体现的。
所以我们用了下面几个阶段表述一下。
技术入门打牢基础

在我的评价体系里,有很大一部分程序员可能会在这个境界下游离,因为编程这事对他们来讲只是个技术活或者说糊口的工作,没有足够强的意愿去认真专研它。去认真的想如果理解这个复杂的 CS 技术与科学体系。
还是继续谈这个体系的认知吧。如果说望尽天涯路。天涯路不尽,你能看到的技术也是无穷尽的。在整个 CS 技术体系里,最直接的表现就是多与杂。
编程语言上:Python、Java、C#、JavaScript、Ruby、Go、Swift、Kotlin、JavaScript、Object-C、C++、Lua 等等
在分类上:前后端、微服务、CI/CD、面向对象、面向过程、面向切片、Test Driven、Design Driven、
在设计方法上:瀑布、V字型、螺旋迭代、敏捷
这些在本质上都是在说 CS 整个领域的知识的广与杂,你想在任何一个方向深入下去可能都需要你花足够的精力。所以要想望尽天涯路,你需要的第一件事是建立起你对 CS 整个体系的技术认知。

http://pica.zhimg.com/v2-1ffba094fec6b8ef62cc21ff67cdc016_r.jpg?source=1940ef5c
https://www.csinsf.org/what-is-cs.html
如果你想有一个直观的印象,那就试着去扩展这张图。你相信任何一个方向都可以生成出足够的分支,构成一个新的图。
如此下去,你会看到一条无尽的路的。比如一门极偏的 AI 哲学,也可以是下面这样的。

http://picx.zhimg.com/v2-920ffc62b1565c3bfe19901ea7d0ec54_r.jpg?source=1940ef5c
https://gogeometry.com/software/ai/artificial-intelligence-mind-map-philosophy.html
这样的状态,你要怎么走下去?
总结一下就是,开拓视野,同时坚定的打好基础、同时确认自己的未来方向。也就是千万条路要走,但是可以选一条走下去。同时要锻炼好自己的基础,保证自己能走完。
所以我建议在这一个阶段要学好下面这些东西。

[*]多读几遍《代码大全》、《程序员的 Readme》
[*]计算机基础知识:也就是 《深入理解计算机系统》这本书的内容,你要有一个不错的理解。
[*]掌握一门编程语言:建议 Python 与 Java,同时必须熟悉 C 语言或者 C++。因为C/C++能让你知道 怎么使用 计算机的基础的信息:CPU、内存、文件、函数、指令。而 Python 或者 Java 已经是现在应用语言的典型代表了。你用它们,能够了解大量的应用案例,还有大量的应用库与算法,更重要的是用它们都可以快速的解决问题,完成你自己的任务目标。
[*]不要放弃算法:《算法导论》可能是很多人推荐或者不推荐的,但是你学会它,就相当于你掌握了一门算法的通天之路的基础,我想这个结论是对的。
[*]熟悉一个数据库,推荐 Postgresql,读本书《Postgresql 权威指南》
[*]熟悉 TCP/IP 及 HTTP 相关的网络知识《计算机网络 自顶向下的方法》
[*]大概懂得 HTML、JavaScript、CSS 三者的关系还有 Ajax 是怎么回事。
[*]知道些 Android 与 IOS 的开发。
[*]部署个人工智能应用
如果是这样的基础条件下,你可以认真的考虑自己对什么感兴趣,自己的未来要做什么了。也就是你要找好自己的未来的路。同时要相信,自己有了上面的基础,任何一个方向都足以走到足够的远。
如果你有个本科的 CS相关的知识,那差不多就是第一境界。而如果你是转到这个方向来的,那我建议你看一下 CS 的重点知识,有一个非常好的了解,才有助于你在这方面更好的发展与提高。
技术上自己的路

这一条路可能是你要坚持走下去的,至少要走到足够的远,才能达到的。也可能正是应了,衣带渐宽终不悔,为伊消得人憔悴!因为你深入每一个体系,都会发现现在的技术太复杂了。要有自己的核心目标,同时还要兼顾体系里技术的广度。举个例子:JavaSDK 的核心 API 可能是 200 多个类,但是 JDK 本身的 API 涉及到的类可能已经近万个了吧。下面是一个很久前的统计表,但是还是能看出这个规模扩张的速度的。

http://pica.zhimg.com/v2-487b84e9f0e379e6b232699b6739032a_r.jpg?source=1940ef5c
不幸的是这一条路我走了很多条,还是谈一下我的学习路径吧。
上学学了 C 语言、看了汇编,然后呢学了 Java。
工作就很幸运,第一个项目是做代码静态与动态检查工具,类似于编译器。
然后做通信的Gateway
再然后做 Web 的项目
开始创业又做人工智能相关的项目
所以,基本上是非常好的做了CS 的基础研究与学习,然后了解了各种网络相关的内容、加密的算法,又对 Web 的发展有了一个不错的了解。正好在潮头,开始做人工智能相关的项目。
你看,不过好在一直都在坚持学习,每天都在看书,写代码,阅读论文。
坚持下去,感觉自己是做到了在 CS 领域的衣带渐宽,终不悔。但是呢,身材确实是一直在宽。严格来讲我走的这条路并不是自己完全喜欢的,不过很幸运的就是自己走了一个感觉还不讨厌的路。现在做人工智能可能是我自己选的最终方向。
所以,如果一开始就选择这条路走下去,我觉得是最好的,也是最舒服的,最容易坚持下来的路。
期望你选择走一条路的时候,能够坚持下去。
我想可以有这么几个方向:

[*]人工智能
[*]后端开发
[*]前端开发
[*]数据库 DBA 与数据库研发
[*]IOS 开发与未来的空间计算的应用
[*]Android 开发
[*]游戏开发/引擎与应用
无论走那一条路,我想你都要坚持读书、坚持做项目,只有不断的给自己提升,才能。这里可能需要阅读大量的设计类的书籍,同时要考虑阅读一些哲学。
推荐一下吧。
《人人都是架构师》、《人月神话》、《HeadFirst 设计模式》、《编译原理》、《Designing Data-Intensive Applications》、《大问题 简明哲学导论》、《人类简史》
其实是每个人的认知都是有偏见的。
金字塔尖

这个境界可能到了就是到了,因为在这个世界,能够坚持走到一定境界的人并不多,找人参考是没有意义的。
只有你真的有一刻在工作或者研究中体会到了,“ 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”。你就知道它是。
这是一个没有太多技术路线的东西,但是我想在人工智能开始能够辅助或者在某些方面可以 辅导开发了,你是不是不需要那么多 技术的列表,不需要那么多技术的 ABC,你需要的是一个大的方向 的思考与坚持 ?
另外,如果你会一点儿编程,我建议你努力学习与应用人工智能。时代变革了,学习什么的,最重要的就是学 AI。工作什么的,最重要的就是用 AI。 而学习 AI,最好的方式应该是视频学习,类似 “知学堂推出的《程序员的AI大模型进阶之旅》”, 其实就是一份非常有意思的 AI 大模型的介绍性入门课程,简单看看,你可能马上就对大模型了解了,而不是要大量阅读。这也是个非常有效的学习方法。还有哦,加小助手的微信,好像有惊喜呢。
你要不要试一下
未来可能没有什么技术进阶指南了,只有一句话:AI,帮我完成一个任务:xxxxxxxxxx

tq12 发表于 2023-10-4 19:01:44

需要从思维上产生改变,将自己和学生思维转变为程序员思维。
不知不觉自己的编程生涯已经有 6 年,变秃了,也变强了。

http://picx.zhimg.com/50/v2-f1fceead18ecb6935cbf936573289d53_720w.gif?source=1940ef5c
回想起这些年的编程经历,保守估计自学看视频的时间都有 3000 小时,我的一些经历或许可以带给你一些思考。

http://picx.zhimg.com/v2-6917bd0fb8226896add1f1473cd57f74_r.jpg?source=1940ef5c
学习编程的道路上有太多的弯路,有的弯路很短,走进去就当散步,马上就能出来,增长了一些经验倒是好事;有的弯路是五连发夹弯,资深编程老司机都容易翻车;但还有一些弯路更可怕,它们是隐形的,弄不好你以为走在康庄大路上,实际上是南辕北辙却浑然不知。
学习编程的过程最切忌的就是用学生的思维学习编程,有不少人在这个弯路里面徘徊,浪费了时间与精力。

http://picx.zhimg.com/v2-a20df7960e6eaa3c36dcc3f1355a0452_r.jpg?source=1940ef5c
一、记笔记 Vs 写技术教程

在我们十几年的求学生涯中,关于知识的获取基本上都在执行以下步骤: 学习课本上给的教程案例,练习课后的配套习题,如此反复,直到通过考试。
很多学生思维的人会把这种学习方式映射到编程上:学习基础语法,练习几个小的教学案例,如此反复,直到认为学会编程。

http://pica.zhimg.com/50/v2-7fc032a9c338c98da7994c97bbb96fa8_720w.jpg?source=1940ef5c
在学习编程的过程中,读书时记笔记的习惯变成了抄代码,变量名、if语句是否换行、函数名完完全全照搬书中案例。
不可否认,在初期抄代码是不错的一个入门方式,每次都可以成功的运行代码极大的增进了学编程的信心,但一直抄很明显不是理智的行为,需要调整为写技术教程。
当你自己去写技术教程的时候,你必然会重新回顾一下整个流程,甚至会亲自再操作一遍,很容易发现之前学习过程中的疏漏点,为了弄明白它,你会查阅相关的资料,知识点得到了补充。
其次,由于你写的技术教程是发布于网上,为了让更多人看明白、更多人认可,肯定会尽可能的讲清楚,在讲清楚的过程中,对于所学的知识更加全方位的了解。

http://pica.zhimg.com/50/v2-e60f31982efb6c4986ce9fd99ca0d894_720w.jpg?source=1940ef5c
补充个我自己觉得不错的学习路线。
这才是你需要的 C 语言、C++ 学习路线!二、害怕未知 Vs 接受未知

学生时代大家总是会如饥似渴的学习,想尽办法把所有难题都弄明白,学生害怕的是未知,害怕一切不确定的问题,不知道问题是哪个范围,一旦问题找不到方向,总是会陷入焦虑的状态。
由于所学内容被限定了范围,所以总能通过书本、同学、老师、互联网找到明确的答案,即使无法弄明白也明确知道这个知识点属于哪个明确的范围,只是由于自己的问题做不出来而已。
但编程不同,很多编程问题无解的,无人知晓怎么去解决。
为了学好编程,我们必须忍受一定的未知。
未知是永远存在的,这是一个客观规律现实,不因人的意志而改变,和客观现实做斗争是无效的行为。

http://pic1.zhimg.com/50/v2-ada81dd383915cd47cba7566cd5670a6_720w.jpg?source=1940ef5c
其次,有些未知的事情就是无解,把时间精力投入到无解的事情上属于浪费,有些未知的事情是因为当下的知识贮备不足以解决,需要忍受这一时的未知、咬咬牙坚持学习后面的内容才能得出答案。
三、按部就班 Vs 不断回溯

课本上的内容都按部就班阶梯式上升,如果没有学会前面的 A 内容,后面的 B 内容根本搞不懂。
由于未知的存在,学习编程过程中总是有一些问题会拦住我们,我们需要做的是先记录它,然后搁置在一旁,继续前行,继续学习新知识、练习新技能、接触新领域,不断的积累,不断的成长,以后时不时回溯一番,把它拿出来重新审视,说不定在学到某个新知识、练习某个新技能、接触某个新领域的时刻突然豁然开朗:哦,原来是这么一回事。

http://picx.zhimg.com/50/v2-41d84575cd4b39566d7dad8035e1304a_720w.jpg?source=1940ef5c

<hr/>
从思维上开始改变,才能在编程能力上得到进阶。
最后,再给大家送上点干货!

下面这是一个高赞回答合集,建议大家点赞&收藏,Mark住别丢了,大学期间绝对用得上。
1、怎么学好数据结构,看下面这个回答,已经获得了 21000+ 的赞和 50000+的收藏。
怎么学好数据结构?2、如何系统地学习算法,看下面这个回答,已经获得了 11000+ 的赞和 26000+的收藏。
如何系统地学习算法?3、一份适合新手的算法刷题笔记,已经获得 4000 点赞和上万收藏。
程序员吴师兄:无意中发现一位大佬的算法刷题 pdf 笔记4、谷歌工程师的 LeetCode 算法笔记是怎么样的?
程序员吴师兄:谷歌工程师的 LeetCode 算法笔记是怎么样的?5、大家一般刷满 500 道 LeetCode 题目要花多久?
大家一般刷满500道LeetCode题目要花多久?6、如何系统地学习 C++ ,这个回答能帮你找到路线。
如何系统地学习 C++ 语言?7、想要准备 Java 面试,那么这些面试题必须掌握。
Java 面试都只是背答案吗?赶紧点赞和收藏吧~

tzwd873 发表于 2023-10-4 19:02:06

程序员这个职业究竟可以干多少年,在中国这片神奇的土地上,很多人都说只能干到30岁,然后就需要转型,就像《程序员技术练级攻略》这篇文章很多人回复到这种玩法会玩死人的一样。我在很多面试中,问到应聘者未来的规划都能听到好些应聘都说程序员是个青春饭。因为,大多数程序员都认为,编程这个事只能干到30岁,最多35岁吧。每每我听到这样的言论,都让我感到相当的无语,大家都希望能像《21天速成C++》那样速成,好多时候超级有想和他们争论的冲动,但后来想想算了,因为你无法帮助那些只想呆在井底思维封闭而且想走捷径速成的人。
今天,我们又来谈这个老话题,因为我看到一篇论文,但是也一定会有很多人都会找出各种理由来论证这篇论文的是错的,无所谓了,我把这篇文章送给那些和我一样准备为技术和编程执着和坚持的人。

论文

首先,我们先来看一篇论文《Is Programming Knowledge Related to Age?》操作提示这篇论文是两个北卡罗莱纳州立大学计算机科学系的两个人Patrick 和 Emerson Murphy-Hill 对StackOverflow上的用户做了相关的数据挖掘得出来的一些数据。(我们知道StackOverflow上的数据是公开的,任何人都可以用来分析和统计,所以这篇论文的真实性是有的)
数据采样和清洗条件如下:(数据全量是1694981用户,平均年龄30.3岁)



[*]15-70岁之间的用户(这年龄段的用户被称做“Working age”),当然,有很多用户没有输入年龄,这些用户都被过滤了。
[*]用户在2012年内都回答过问题。因为StackOverflow在2012年对问题和答案的质量要求得比以前高了一倍,所以更能反映程序员的真实水平。
[*]Reputation声望在2-100K之间(注:StackOverflow的用户Reputation是得到社会认可的,在面试和招聘中是硬通货币。比大学的学分更有价值)

上述的条件一共过滤出84,248名程序员,平均年龄:29.02岁,平均Reputaion在1073.9分。

年龄分布图
下面我们来看一下他们的年龄分布图:我们可以看到程序员年纪的正态分布(高点在25岁左右,但是中点在29岁左右)


http://pic1.zhimg.com/v2-229cbfcc3bfa83d114b7b1d93ec981e7_r.jpg?source=1940ef5c


能力和年龄分布图
然后,计算每个人每个月的Reputation,这样可以找到这个用户的真正的活跃时间,这样便于计算这个程序员的真实能力(总声望 / 活跃时间),可以得到他平均每个月得来的Reputation。
我们来看看程序员的能力和年龄段的分布图:(你可能会大吃一惊)


http://pic1.zhimg.com/v2-56f0eca97ed18969eff4afdd3a1c2872_r.jpg?source=1940ef5c

上图中我们可以看到,程序员的能力在从25岁左右开始上升,一直到50岁后才会开始下降。所以说,程序员吃的不是青春饭。只有码农,靠蛮力,用体力而不是用脑力的程序员才是吃青春饭的人。

年纪大的人是否跟不上新技术
论文的作者分析了Tag,用了最近5年内比较流行的技术Tag,然后用了一套比较严谨的算法来查看那些所谓的“老程序员”是否在新技术上跟上不了,所谓跟不上,也就是这些老的程序员在回答这些新技术上并不活跃。所谓老,就是37岁以上的程序员(就是我现在的年纪)。
得到了下表:可以看到,老程序员和年轻的程序员对于一些新技术的学习来说也是差不多的,甚至有些项还超过了年轻的程序员。


http://picx.zhimg.com/v2-8d82b0a075b0d9d4a659401ec504d4a3_r.jpg?source=1940ef5c

结论
1)程序员技术能力上升是可以到50岁或60岁的。
2)老程序员在获取新技术上的能力并不比年轻的程序员差。

我的一些感受
最后,我说一说我的一些感受:

[*]这些年来的对于外企和国内感受—— 国外牛B的IT公司的工程能力并不见得比国内的要强多少,但是国外那些NB的IT公司的架构和设计能力远远超过国内的公司,最可怕的是,那些有超强架构和设计能力的“老程序员们”还战斗在一线,这些战斗在一线的老鸟的能力绝对超过100个普能的新手。
[*]对年轻程序员的感受——国内新一代的程序员们太浮燥了。老实说,对于大多数人来说,如果你没有编程到30岁,你还不能成为一个“合格”的程序员。所以,并不是编程编到30岁就玩完了,而是编程编到30岁才刚刚入门。这些不合格的程序,整天BS这个不好,那个不好的,而且喜欢速成,好大喜功。
[*]我是一个奔四的人了,编程就像登山一样,越往上爬人越少,所以,在我这个年纪还有想法,对编程还有热情的人不多了,基本上都是转Manager了。其实,什么职位,Title都是虚的,公司没了什么都没了,只有技术才是硬通货。而且,越是这个年纪还在玩编程玩技术的人,其实其经验和能力都是比较强的,都是中坚力量,如果还有其它这个年纪和我一样的人,求交往。
原文地址:http://coolshell.cn/articles/10688.html
页: [1]
查看完整版本: 程序员的编程能力应该如何进阶?