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

编程能力是一种解决问题的能力。如果问题没能被很好地解决,知道再多也没用。

编程能力是一种运用机器解决问题的能力。首先是要判断问题在什么程度上可被机器解决,比如理论计算机科学会告诉我们什么可做、什么理论上不可做、什么理论上可做实践上不可做。然后是让机器更好地理解问题,比如计算机都是(图灵-冯诺依曼模型)等价,但不同的问题可能会适用不同的编程语言。再后是让机器能更高效率地解决问题,比如同样的问题可能会有效率差别巨大的算法。

编程能力是一种抽象问题的能力。借用轮子是很好的办法,省力省时间。今天任何软件工程师都会有意无意地使用很多轮子,从操作系统编译器数据库网络到算法数据结构。想高效地借用轮子,就需要将问题分解再分解,抽象再抽象。任何一个实用的系统(不包括教科书上的示例程序和简单的脚本程序)都需要进行大量的分拆和组合。所以系统设计是编程能力里的高级技能,加合理的假设简化问题尤其有难度,此处不展开讨论。

高手和新手的区别在于新手往往不知道轮子的适用范围,而高手的手上轮子数量多且熟知各种轮子的差异,所以对不同的问题可以轻松地找到合适的轮子,当实在找不到合适的轮子时可以自己动手改造现有的轮子。平时有时间拆装和改造已有的轮子会对水平提升有较大帮助。当然能知道怎样快速在搜索引擎里搜出轮子也是一种能力。

编程能力是一种需要考虑扩展性的能力。算法竞赛中的很多算法考虑的是单机的内存算法,计算模型经过高度抽象,在实践中机器的模型更为复杂。比如单机的多级结构带来的各种时间空间复杂度的取舍平衡,多机网络中如何能在提高单机性能外进一步优化整体性能。除了在机器端的扩展,在程序员一端的扩展也很重要。复杂的问题和工程往往意味着团队协同以及更长时间的开发维护,团队分工和设计沟通这里暂且不论。举个容易被忽视的例子,程序中的注释。高手会更在意完整且表达清楚的注释,因为这是写给现在和未来的团队(包括自己和其他成员)看的,直接影响到长期的整体开发维护效率。

编程能力是一种取舍的能力。局部的最优解未必是全局的最优解。如果一个美妙的解决方案需要将完工时间向后推迟一两个月,需要考虑是否先使用平凡方案解决问题,之后再进行优化。当你的工作延后会阻碍别人的工作时尤其如此。发现一个绝妙的优化方案时先想想这个优化是否真的有价值,如果只是系统中很小的部分,那么不要为了追求心理满足而花很多时间放一个漂亮的轮子上去(参考Amdahl定律)。

编程能力是一种预见未来的能力。目前的方案有哪些假设和局限性,在何种情形下会遇到问题甚至崩溃。在未来出现问题时问题是否需要重新定义,系统是否需要重新设计,代码是否需要重构或优化等等都需要未雨绸缪。编程能力是一种工程能力。无它,唯手熟尔。

编程能力是一种解决问题的能力。如果问题没能被很好地解决,知道再多也没用。

编程能力是一种解决问题的能力。如果问题没能被很好地解决,知道再多也没用。(重要的事情说三遍,重要的事情说三遍,重要的事情说三遍)

时间: 2024-11-06 16:47:20

什么才算是真正的编程能力?的相关文章

什么才是真正的编程能力

我发现一个非常奇怪的问题,用中文搜索一个确定描述的问题时,很多结果都是一模一样的答案.有时候一个答案的质量确实高,但是如果翻遍整个搜索结果,所有的网站都是复制粘贴,连一丁点自己的思考都没有,那这样做的意义是什么呢? 敲代码也好几年了,自己的水平是个什么层次,自己最清楚了.自从决定以后要走这条路,就不时的陷入一种焦虑之中.这个题目的知乎回答也看过好几遍,有所启发,但始终无法让自己满意. 搞算法和搞项目,这两者矛盾吗?在一个算法交流群里经常看到有人认为做项目是很简单的事情,只要把比赛打好,以后公司抢

程序员的编程能力层次模型

编程技能层次 编程技能层次,指的程序员设计和编写程序的能力.这是程序员的根本. 0段—非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题.也就是说,还是门外汉,还不能称之为“程序员”.计算机在他面前还是一个神秘的黑匣子. 1段—基础程序员: 学习过一段时间编程后,接到任务,可以编写程序完成任务. 编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG.也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂

编程能力层次模型

By良少 http://blog.csdn.net/shendl 前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 下面通过两个维度展开编程能力层次模型的讨论. 一个维度是编程技能层次,另一个维度是领域知识层次. 编程技能层次 编程技能层次,指的程序员设计和编写程序的能力.这是程序员的根本. 0段-非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题.也就是说,还是门外汉,还不能称之为"程序员".计算机在他面前还是一个神秘的黑匣子

编程能力七段论(上)

前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 下面通过两个维度展开编程能力层次模型的讨论. 一个维度是编程技能层次,另一个维度是领域知识层次. 编程技能层次 编程技能层次,指的程序员设计和编写程序的能力.这是程序员的根本. 0段-非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题.也就是说,还是门外汉,还不能称之为"程序员".计算机在他面前还是一个神秘的黑匣子. 1段-基础程序员: 学习过一段时间编程后,接到任务,可以编写程

程序员提高编程能力万无一失的办法

那就是去读别人写的代码.读那些你常用的库.编程框架的源代码,读那些你景仰的大牛的源代码,读代码里的测试(测试本身就是一种有效的文档):读代码.改代码.运行代码. 其实,所谓写程序,大部分的时间都是花在读代码上,“写”的部分耗时极少:所以把“读”的技能训练好了,是很有好处的. 提高编程能力万无一失的办法 编注:这篇文章最初于 2010 年 5 月为 Fuel Your Coding 网站而写.不幸的是,那个网站已经不复存在了,所以我将这篇文章重新发布.为了紧跟时代步伐,我想过对其进行更新,但我又觉

怎么样才算是精通 C++?

C++是一门很神奇的语言,让人又爱又恨. 在知乎上看到的一个帖子,怎么样才算是精通C++,这里节选一些精彩的回复. 链接:http://www.zhihu.com/question/20201972/answer/23454845 来源:知乎 1 精通C++是一个艰巨的任务.为什么C++比别的语言难学这么多?其实这基本上是因为C++他爹Bjarne Stroustrup说过的一句话"我特别讨厌语言的设计者把自己的喜好强加给用户"(看向go).结果C++为了不限制你的想法,于是也就变成了

[读后感]编程能力与编程年龄

又是一篇读后感, 你懂的,这篇附文的重量级别有多重, 尤其对于我们这样奔四的老程序员! 还有之前那篇<[读后感]一位39岁程序员的困惑:知道得越多编程越慢怎么办?>, 稍加实践,你会发现, 让自已少想一些,你也能很容易地快起来, 只不过,需要施加 强迫症 式的自我叮嘱, 因为,我们这个年龄的人, 如果不是被责任心充满着, 那八成可能会是个一事无成,连温饱都解决不了的闲人了! 其实,在程序员这个职业来说,确实刚积累到一定程度,思维可以自然迸出火花的年龄, 也确实就是这个年龄,才真正能从上往下式的

编程能力七段论(下)

领域知识层次 前面的所有层次,都是关注编程本身的技能,说白了,就是基本功,本身并不能产生太大的价值.但有太多的程序员浪费太多的时间在那些筑基的层次上. 有些程序员特别喜欢钻研编程语言,每有一种新的编程语言出来或者旧语言被热炒,就会投入精力进去研究.我就是其中之一,浪费了很多精力在编程语言上,在奇技淫巧上. 我觉得语言是一个特别大的坑.刚开始是作为面向对象的C被开发的.后来发现了模板编程,就大力鼓吹模板编程和进一步的模板元编程.最近又推出了新标准,进一步添加了很多新东西,函数式编程,类型推断等,过

究竟多大才算是大数据,大数据怎么学习?

大数据,什么是大数据呢?多大的数据叫大数据?红火一时的数据分析走向了我们,纷纷称不分析数据企业将长久不了,可是究竟什么样的数据才是大数据呢,什么样的数据才是最大的呢? 如果你没有接触过大数据,那么你就不知道大数据究竟有多大,大到什么样的数据才能称之为大数据.那么,根据数据收集的端口,企业端与个人端之间,大数据的数量级别是不同的. 大数据开发学习有一定难度,零基础入门首先要学习Java语言打基础,一般而言,Java学习SE.EE,需要约3个月的时间:然后进入大数据技术体系的学习,主要学习Hadoo