什么才算是真正的编程能力?

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/80122231 编程能力是一种解决问题的能力。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/80122231

编程能力是一种解决问题的能力。如果问题没能被很好地解决,知道再多也没用。
编程能力是一种运用机器解决问题的能力。首先是要判断问题在什么程度上可被机器解决,比如理论计算机科学会告诉我们什么可做、什么理论上不可做、什么理论上可做实践上不可做。然后是让机器更好地理解问题,比如计算机都是(图灵-冯诺依曼模型)等价,但不同的问题可能会适用不同的编程语言。再后是让机器能更高效率地解决问题,比如同样的问题可能会有效率差别巨大的算法。
编程能力是一种抽象问题的能力。借用轮子是很好的办法,省力省时间。今天任何软件工程师都会有意无意地使用很多轮子,从操作系统编译器数据库网络到算法数据结构。想高效地借用轮子,就需要将问题分解再分解,抽象再抽象。任何一个实用的系统(不包括教科书上的示例程序和简单的脚本程序)都需要进行大量的分拆和组合。所以系统设计是编程能力里的高级技能,加合理的假设简化问题尤其有难度,此处不展开讨论。高手和新手的区别在于新手往往不知道轮子的适用范围,而高手的手上轮子数量多且熟知各种轮子的差异,所以对不同的问题可以轻松地找到合适的轮子,当实在找不到合适的轮子时可以自己动手改造现有的轮子。平时有时间拆装和改造已有的轮子会对水平提升有较大帮助。当然能知道怎样快速在搜索引擎里搜出轮子也是一种能力。
编程能力是一种需要考虑扩展性的能力。算法竞赛中的很多算法考虑的是单机的内存算法,计算模型经过高度抽象,在实践中机器的模型更为复杂。比如单机的多级结构带来的各种时间空间复杂度的取舍平衡,多机网络中如何能在提高单机性能外进一步优化整体性能。除了在机器端的扩展,在程序员一端的扩展也很重要。复杂的问题和工程往往意味着团队协同以及更长时间的开发维护,团队分工和设计沟通这里暂且不论。举个容易被忽视的例子,程序中的注释。高手会更在意完整且表达清楚的注释,因为这是写给现在和未来的团队(包括自己和其他成员)看的,直接影响到长期的整体开发维护效率。
编程能力是一种取舍的能力。局部的最优解未必是全局的最优解。如果一个美妙的解决方案需要将完工时间向后推迟一两个月,需要考虑是否先使用平凡方案解决问题,之后再进行优化。当你的工作延后会阻碍别人的工作时尤其如此。发现一个绝妙的优化方案时先想想这个优化是否真的有价值,如果只是系统中很小的部分,那么不要为了追求心理满足而花很多时间放一个漂亮的轮子上去(参考Amdahl定律)。
编程能力是一种预见未来的能力。目前的方案有哪些假设和局限性,在何种情形下会遇到问题甚至崩溃。在未来出现问题时问题是否需要重新定义,系统是否需要重新设计,代码是否需要重构或优化等等都需要未雨绸缪。
编程能力是一种工程能力。无它,唯手熟尔。
编程能力是一种解决问题的能力。如果问题没能被很好地解决,知道再多也没用。

目录
相关文章
|
9月前
编程要搞明白的东西(一)
编程要搞明白的东西(一)
51 0
|
9月前
|
程序员 Go 数据库
程序员如何在工作中进步
程序员如何在工作中进步
|
7月前
|
大数据 程序员 API
|
9月前
|
Java
编程要搞明白的东西(二)
编程要搞明白的东西(二)
62 0
|
自然语言处理 程序员
从0开始的小白如何一步步进入程序员的职业生涯
从0开始的小白如何一步步进入程序员的职业生涯
从0开始的小白如何一步步进入程序员的职业生涯
|
程序员
少儿编程值得报班学习吗?程序员被问懵了!
赢在了起跑线上,输在了终点线前。
120 0
少儿编程值得报班学习吗?程序员被问懵了!
|
JavaScript 程序员 Go
为什么每一名程序员都应该学习 C++?
本文最初发布于 Level Up Coding 博客。
203 0
为什么每一名程序员都应该学习 C++?
|
Java 程序员 Spring
程序员,这四个学习建议值得收藏
大家好,我是本周的值班编辑 江南一点雨 ,本周将由我为大家排版并送出技术干货,大家可以在公众号后台回复“springboot”,获取最新版 Spring Boot2.1.6 视频教程试看。
程序员,这四个学习建议值得收藏
|
设计模式 算法 Java
程序员成长秘籍:个人编程能力的修炼之路
本篇文章主要和大家分享了一位程序员如何快速提高自己的编程能力。要想真正提高自身的编程能力,一定要做好这几个方面,包括学习一门新的编程语言,尝试独立完成一个项目,重温经典书籍,认真研读源码,使用Google进行搜索,使用英文文档并且深入学习技术