放弃理想,未必能成就现实-程序员宅基地

技术标签: matlab  c#  python  

放弃理想,未必能成就现实

(《程序员》2004年第9期的maglog专栏文章,有所删节。全文请见杂志。)

 

上个世纪90年代末,软件泡沫最高涨的时候,我还在学校里老老实实地学着我的结构工程。我当年的理想是要做一个好的结构工程师,跟我弟弟一起开建筑设计事务所,这话写在日记本上,白纸黑字。后来之所以毅然地抛弃本行来趟软件开发这摊浑水,很大程度上是受了技术高手们高大形象的鼓舞。那个时候真是有激情,觉得编程高手被泽着理想主义的光芒,向英雄一样崇拜他们,他们才像是搞技术的,我们这些土木工程师,嗯,也就是个混饭吃。

 

真的走到这个行业里才发现,中国的软件技术研发的环境根本就不是那么回事,按照一般程序员的大白话,就是“在中国,搞技术的没前途”。有点理想和抱负的程序员,大多面临被分化和钝化的命运。所谓分化,就是以这样那样的方式转变为管理者、市场人员、宣传员等等角色,所谓钝化,就是乖乖地接受降解,由研发人员转变为工程人员。.....

 

......

 

搞技术的先天都有点自命不凡,总是幻想向着未知领域冲锋,探索新的方向。谁不想重复Adobe在平面设计领域的辉煌?谁不想也搞个什么CAD来发掘和开拓新的市场?谁不知道搞项目的辛苦?谁不想安心做出好产品,名利双收,给人生添一抹亮色?可是,难啊!环境所迫,只能放弃理想,面对现实。

 

不过软件这个东西真的不太一样。我的判断是,放弃理想,也未必能成就现实。原因就在于软件太容易复用了。我们行业里的人整天叫嚣着要提高软件的可复用性,还煞有介事写一大堆书出来谈reuse,殊不知,相对于其他很多传统行业,软件的可复用性实在是太好了。比如说,雅典奥运会场馆中的钢梁,绝对不可能拿到北京奥运场馆来复用,连设计方案也没有多大参考意义。可是人家那成熟的奥运售票系统,改巴该巴就能跑在2008的售票主机上。不说那么玄的,就拿一般的任务来说,有几个程序员能把线性代数方程组的那些七七八八的数值求解算法记得清楚?恐怕能说清楚什么叫矩阵谱半径的人就已经不多了。可是谁又犯的上操这个心呢?真的碰上这种问题,囫囵吞枣地调用IMSL库的一个函数,或者Matlab的一个命令,算得又快又准,还不比你自己哼哧哼哧的写代码强?正是因为软件这东西能低成本大规模的复用,在这个行业里,就存在一个残酷的现象:强势的研发人员事实上在以自己的产品挤压弱势同行的生存空间。换句话说,你们雅典的建筑设计师抢不了我北京同行的饭碗,但是微软的多媒体专家就能把我们北京的编程高人们逼得没饭吃。道理很明显,你在做流媒体播放器,做得还不错,但是微软一出手,你肯定趴下。现在用C#分分钟就可以装配出一个不错的Media Player,你呢,要么转行或者转方向,要么也跑去搞装配。落到这个田地,其实就已经肯定只能分到残羹剩饭了。也许抢先干一段,还能有点出息,毕竟帮用户解决了“最后一公里”的问题,这活也不容易啊。但是长远干真的不乐观。为什么?装配这活,技术门槛太低,而且一定会越来越低。干这行,向上给核心产品供应商打工,向下给客户打工,里里外外装孙子。

 

我接触过很多做项目的程序员,水平高低参差不齐,但是大部分都有共同的心声,真不想做项目,真想踏下心来做做产品研发。大家起点差不多,学校里不见的谁比谁强,凭什么你能专心做产品,探索技术新方向,我却得汗流浃背周旋于客户和厂商之间?而且说实话,搞这种服务活,程序员人微言轻,不是滋味。你还别不服气,服务不就是让客户舒坦吗,客户也是人,让人舒坦的方法多的是,人家sales有的是手段和力量让人家舒坦,干嘛非在技术上较劲,谁也不比谁傻,对不?

 

要我说,咱们搞技术的真的不能甘心这么走下去。路不是没有,其正到各行各业去看看,沉下心来调查研究,你会发现,这所谓的信息化,在各行各业中的应用也就是一层皮。要往深里挖,空间还大得很,机会还多得很。无论是石化电力,还是机械建筑,哪一个行业里都有很多真正的机会。说句不夸张的话,你要真能帮人家解决实际专业问题,还真用不着感叹技术不值钱。不过要抓住这些机会,对这些行业就不能浅尝辄止,一定要有亲身投入、深入实践的决心。现在我们很多开发者喜欢自说自话,整天抱着架构啊、模式啊、N层结构啊孤芳自赏,其实上碰到专业问题根本深入不下去。搞结构软件不懂有限元,搞设备控制软件不懂控制理论,搞探测分析软件不懂信号处理,你上10层结构,用100个模式,也解决不了问题。要想深入行业应用,软件开发能力固然重要,专业知识恐怕更重要。行业应用软件一是复杂,二是专业。经过第一轮信息化,最容易挖的那桶金已经让人给挖走了,再往下走,就不能不沉下心来真正钻到人家专业里去。我相信,那里面的机会大的很。而且,这么想的人不只我一个,已经开始实践的人也不少。现成的例子,中国建筑科学研究院的专业结构设计软件PKPM就非常成功,在国内几十万人用,还出口到东南亚国家。蒸蒸日上的思维加速公司,也是一个深钻苦干的典型。我也知道不少个人,正抱着十年磨一剑的决心深入到某些应用领域里努力。他们是好样的。我觉得,振兴中国软件业的希望,在在他们身上。

转载于:https://my.oschina.net/darkness/blog/357352

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34128237/article/details/91939243

智能推荐

2019秋招:460道Java后端面试高频题答案版【模块二:Java集合类】-程序员宅基地

文章浏览阅读1.3w次。点击上方“码农进阶之路”,选择“设为星标”回复“面经”获取面试资料 来源:https://url.cn/5dVANAQ 说明:答案来自于我的秋招复习笔记,但是答案都是..._使用hashset存储数据,并不是按添加的顺序存储;不管数据所处的位置,访问数据的速度

Docker的数据卷和数据卷容器_docker容器和数据盘对应-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏11次。在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 容器中数据管理主要有两种方式:数据卷和数据卷容器。数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。数据卷容器(Data Volume Containers) 使用特定容器维护数据卷。数据卷数据卷是一个特殊的目录,它将主机目录直接映射进容器。可_docker容器和数据盘对应

mysql字符串分割_mysql字符串分割函数(行转列)-程序员宅基地

文章浏览阅读1.4k次。由于工作需要需要处理一些以逗号分隔的字符串,每次都要现做很是麻烦,网上找了很多都没有现成的,好吧,自己动手写一个好了1 CREATE DEFINER = `harri`@`%` FUNCTION `str_for_substr`(`num` int, `str` varchar(5000))2 RETURNS varchar(100)3 BEGIN4 /*函数功能: 把带逗号的字符串分割..._mysql 字符串分割行转列

Vue3.x新特性总结及与vue2.x的对比-程序员宅基地

文章浏览阅读513次。vue3.xVue3.x与Vue2.x的区别生命周期不同template模板支持多个根标签响应式对象函数refreactivetoRefs监听属性watch和watchEffect的区别watchwatchEffectVue3.x与Vue2.x的区别生命周期不同Vue2.xVue3.xbeforeCreatesetup()createsetup()beforeMountonBeforeMountmountedonMountedbeforeUpdate_vue3.x新特性总结及与vue2.x的对比

java jmstemplate_java – Spring JmsTemplate – 添加自定义属性-程序员宅基地

文章浏览阅读175次。我使用Spring API的JmsTemplate和MappingJackson2MessageConverter(版本:spring-jms-4.3.4.RELEASE.jar)来发布消息到ActiveMQ主题,如下面的代码所示.TopicPublisher类:@Componentpublic class TopicPublisher {@Autowiredprivate JmsTemplate..._spring 定义jmstopictemplate

初学者都能看懂的蒙特卡洛方法以及python实现_python编程蒙特卡罗-程序员宅基地

文章浏览阅读10w+次,点赞299次,收藏1.5k次。1.什么是蒙特卡洛方法(Monte Carlo method)蒙特卡罗方法也称统计模拟方法,是1940年代中期由于科学技术的发展和电子计算机的发明,而提出的一种以概率统计理论为指导的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。 20世纪40年代,在冯·诺伊曼,斯塔尼斯拉夫·乌拉姆和尼古拉斯·梅特罗波利斯在洛斯阿拉莫斯国家实验室为核武器计划工作时,发明了蒙特卡罗..._python编程蒙特卡罗

随便推点

飞思卡尔MC9S12G64串口发送接收驱动_s12z 串口-程序员宅基地

文章浏览阅读1.6k次。因为之前刚入职,对串口调试不了解,下面整理一下书上的串口程序。 移植性还比较强使用说明:MC9S12系列的串口有两种查询方式 1》使用中断方式查询 2》在主函数中使用轮询的方式的方法进行查询 这两种方法在下面函数中都有体现,需要在用的时候注意分别提取 主要是初始化的SCI1..._s12z 串口

DS Video for Android TV (稳定安装打开版)_ds video tv版-程序员宅基地

文章浏览阅读1.4k次。这个 apk 只支持到 Android 5.0 以上的版本。Android 5.0 以下的就不用试了。要想在普通的 Android 系统电视盒子上使用 DS Video for Android TV 版,DS Video for Android TV 版的 apk 请直接去群晖官网的下载中心下载吧。需要附件里的这个 apk 和 群晖官网下载中心下载的那个 apk 这两个都安装上才可以._ds video tv版

785. Is Graph Bipartite?-程序员宅基地

文章浏览阅读54次。https://leetcode.com/problems/is-graph-bipartite/discuss/115487/Java-Clean-DFS-solution-with-Explanation 1 class Solution { 2 int[] colors; 3 public boolean isBipartite(int[..._is graph byparti

harmonyos20官网,harmonyos 2.0-harmonyos 2.0系统官方预约 v1.0-优盘手机站-程序员宅基地

文章浏览阅读382次。harmonyos 2.0是华为打造的新系统,这个系统也将在2020 年华为开发者大上亮相,相信广大的用户们一定都期待很久了吧!不仅手机支持,包括平板、手表在内的产品也将搭载这各系统,是不是很给力呢?感兴趣的朋友赶紧来看看。harmonyos 2.0特色:1、这次的系统也是经过全面升级的,系统也会更加的刘畅的;2、实现了多设备融合为 “一个设备”的功能,这一点我觉得特别好;3、还加入了强大的分布式..._华为harmonyos20手机版

万字长文!二叉树入门和刷题看这篇就够了!-程序员宅基地

文章浏览阅读908次,点赞3次,收藏6次。今天是小浩算法 “365刷题计划” 二叉树入门 - 整合篇。本篇作为入门整合篇,已经砍去难度较大的知识点,所有列出的内容,均为必须掌握。因为很长,写下目录:二叉树是啥二叉树的最大深度(D..._万字长文,二叉树

性能测评 | Nvidia新品JETSON XAVIER NX与JETSON TX2和JETSON NANO_jeston tx2和xavier nx功耗对比-程序员宅基地

文章浏览阅读3.4k次。早在我们12月份的NVIDIA Jetson AGX Xavier基准测试中,除了关注机器学习和其他边缘计算场景中令人难以置信的Carmel+Volta GPU计算潜力外,我们还关注了ARMv8 Carmel CPU内核在不同单板计算机上与其他各种ARM SoC的性能对比。但是,这八个NVIDIA Carmel CPU内核与x86_64低功耗处理器相比如何?下面是其中的一些基准测试,供那些对NVIDIA CPU潜力感到好奇的人参考。作为复习,NVIDIA Tegra Xavier SoC具有八._jeston tx2和xavier nx功耗对比