程序员能力等级分析

前言

       程序员的编程技能随着经验的积累,会逐步提高。我认为编程能力可以分为一些层次。下面通过两个维度展开编程能力层次模型的讨论。一个维度是编程技能层次,另一个维度是领域知识层次。

 

编程技能层次

        编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。

0非程序员:

       初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题。也就是说,还是门外汉,还不能称之为程序员。计算机在他面前还是一个神秘的黑匣子。
 

1基础程序员:

       学习过一段时间编程后,接到任务,可以编写程序完成任务。

      编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG。也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂死。

      程序员程序是写好了,但到底为什么它有时能正常工作,有时又不行,程序员自己也不知道。

     运行中遇到了bug,或者需求改变,需要修改代码或者添加代码,很快程序就变得结构混乱,代码膨胀,bug丛生。很快,就连最初的开发者自己也不愿意接手维护这个程序了。

2数据结构:

       经过一段时间的编程实践后,程序员会认识到数据结构+算法=程序这一古训的含义。他们会使用算法来解决问题。进而,他们会认识到,算法本质上是依附于数据结构的,好的数据结构一旦设计出来,那么好的算法也会应运而生。

      设计错误的数据结构,不可能生长出好的算法。

      记得某一位外国先贤曾经说过:给我看你的数据结构!

3面向对象:

         再之后,程序员就会领略面向对象程序设计的强大威力。大多数现代编程语言都是支持面向对象的。但并不是说,你使用面向对象编程语言编程,你用上了类,甚至继承了类,你就是在写面向对象的代码了。

       我曾经见过很多用Java,Python,Ruby写的面向过程的代码。

      只有你掌握了接口,掌握了多态,掌握了类和类,对象和对象之间的关系,你才真正掌握了面向对象编程技术。

      就算你用的是传统的不支持面向对象的编程语言,只要你心中有对象,你依然可以开发出面向对象的程序。

       如,我用C语言编程的时候,会有意识的使用面向对象的技巧来编写和设计程序。用struct来模拟类,把同一类概念的函数放在一起模拟类。如果你怀疑用C语言是否能编写出面向对象的代码,你可以看一下Linux内核,它是用C语言编写的,但你也可以看到它的源代码字里行间散发出的浓浓的对象的味道。

 

      真正掌握面向对象编程技术并不容易。

 

       在我的技术生涯中,有两个坎让我最感头疼。

       一个坎是DosWindows开发的变迁过程中,框架的概念,很长一段时间我都理解不了。Dos时代,都是对函数库的调用,你的程序主动调用函数。Windows时代,则换成了框架。就算是你的main程序,其实也是被框架调用的。UI线程会从操作系统获取消息,然后发送给你的程序来处理。Java程序员熟悉的Spring框架,也是这样一个反向调用的框架。

      现在因为框架这个术语显得很高大上,因此很多类库/“函数库都自称为框架。在我看来这都是名称的滥用。

      “类库/“函数库就是我写的代码调用它们。

      “框架就是我注册回调函数到框架,框架来调用我写的函数。

 

      另一个坎就是面向对象。很长一段时间我都不知道应该怎么设计类和类之间的关系,不能很好的设计出类层次结构来。

      我记得当时看到一本外国大牛的书,他讲了一个很简单、很实用的面向对象设计技巧:叙述问题。然后把其中的名词找出来,用来构建类。把其中的动词找出来,用来构建类的方法。虽然这个技巧挺管用的,但也太草根了点,没有理论依据,也不严谨。如果问题叙述的不好,那么获得的类系统就会是有问题的。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值