zoukankan      html  css  js  c++  java
  • 程序员如何摆脱“码农”的称谓

    很多程序员习惯自嘲称自己是码农、民工、矿工等等,如果仔细分析一下,除了经常加班之外,还是有一些系统性的原因的。

    首先,程序员和这些民工、矿工一样,都是使用非常简单的工具,典型的就是vim/emacs加make,典型的活动就是使用这些工具一个字符一个字符地敲代码,这和使用榔头的农民没有本质的区别。要摆脱码农的命运,就需要使用更加先进的工具,比如DSM(Domain Specific Modeling,这里有一篇中文的简介),使用模型(领域知识)构建产品。

    其次,程序员的产品一般都是一个萝卜一个坑,为一个产品写的代码下一次还需要再写一次,也就是同样的价值需要差不多同样工作量的重复劳动才可以创造,有人据此称软件开发为一个劳动密集型的产业。其实程序员在一个产品开发过程中,创造的财富不仅仅是代码,还包括领域知识、需求工程、架构、设计决定、文档(有兴趣的可以看一下,SEI的发掘现有产品中的财富),可以说在软件开发的整个生命周期中,程序员的劳动成果都是宝贵的财富。就我个人的工作经验来说,一个月用于编写代码的时间不会超过25%,所以带着重用的思想做每一件事情就显得非常的重要。

    第三,如果我们比较一个工人和农民的区别,就会发现,有形形色色的工人(环卫工人、机械工人、纺织工人等数百个工种),但是农民只有非常有限的几种(粮农,菜农,花农,还有吗?)。从分工的力度和专业化的程度来看,写代码的都叫程序员,程序员也是什么都干,写脚本、装机器、写代码、写文档、做测试。套用某培训机构的广告语“只有正规,才有机会!”,只有分工明确、专业化程度增加,程序员才能从“民工”跨越到“工人”。

    顺着“工人”这条路子,我们就走进了软件工厂。软件工厂的概念其实很简单,为了更加的专业化,它把软件工程分成了两部分,领域工程和应用工程。领域工程根据领域支持提取公共的知识,构建可以重用、定制的软件资产;应用工程使用这些资产为客户定制出产品。领域工作者就可以根据领域通用规则、知识、需求进行工作,当然还是要把应用程序的需要放在比较重要的位置,程序员在这里可以发展成为领域分析专家,企业在这里就类似于零件提供商。应用工作者可以专注于客户商业需求分析和产品构建,程序员在这里可以发展成一个产品专家,企业在这里就类似于产品装配商。

    从个人的角度来讲,软件工厂并不意味着程序员从一个码农成为一个组件生产员或者一个组件装配工,那些还是重复劳动,每个领域都有产业链的上游,还是要有意识、有计划地力争上游。

  • 相关阅读:
    单例模式
    HashSet、LinkedHashSet、SortedSet、TreeSet
    ArrayList、LinkedList、CopyOnWriteArrayList
    HashMap、Hashtable、LinkedHashMap
    andrew ng machine learning week8 非监督学习
    andrew ng machine learning week7 支持向量机
    andrew ng machine learning week6 机器学习算法理论
    andrew ng machine learning week5 神经网络
    andrew ng machine learning week4 神经网络
    vue组件监听属性变化watch方法报[Vue warn]: Method "watch" has type "object" in the component definition. Did you reference the function correctly?
  • 原文地址:https://www.cnblogs.com/utopiazh/p/software_factory.html
Copyright © 2011-2022 走看看