0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序员的价值体现在哪些方面?

j4AI_wujianying 来源:未知 作者:胡薇 2018-09-11 16:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

高手程序员之间的神对话

随着做软件的时间越来越长,我发现,做软件越来越难。难在哪?难在怎么做出一个好的软件。好的软件标准是什么?两个词,好用,好看!程序员的最大价值在于做出好用又好看的软件的能力。

因此,我觉得程序员的价值绝对不在于技术本身,而在于做出好用且好看软件的能力。

这是一个开放性的话题,每一个人都是菜鸟过来的,我希望和祝愿每一个技术人员都能尽快成为高手,也希望更多老鸟来分享经验。

在这篇文章,我将根据自己的经验来分享,期望能给人有更多的有帮助的信息。在这里,我只想从技术角度来分析,技术不一定和收入相关联的。

1 命名

程序代码的命名,我们就可以看出一个人的水平。最差的命名就是使用中文、拼音、拼音缩写、中英混搭,接下来要么是模仿式命名,要么干脆就随意命名。

模仿式命名典型的就是“××DAL”,说实话,我觉得类似于“UserDAL”这样的名字,我觉得太不美观了,一般这我就知道这是典型分层架构的模仿者,说明他是有些经验的人了。

随意命名,就是写代码的时候,名字压根就没有意义,比如var list = new List,其实完全可以写成var users = new List的。

想要命名的更有意义,你只需要将每一个类、每一个方法、每一个单词的名字都用你开发时的意思直接描述出来就行了。

2模型抽象能力

模型决定一个系统的可用性、稳定性、易用性、可维护性、可扩展性!

这个模型不是UML建模,而是软件的核心。就是你设计一个软件时,为其所抽象出来的原理性的描述。模型决定一个软件的质量、易用性和扩展性。

凡是优秀的软件,都有一个共同特点,就是其模型构建的非常漂亮,当然也有不怎么优秀的软件,模型也很漂亮。

微软MEF,我个人觉得其模型构建非常的漂亮和优雅,有兴趣同学可以看看《体验Managed Extensibility Framework精妙的设计》这篇文章。

MEF的核心就是组合基元,如下图所示,它简单的定义了动态组合的支持基础,然后一层一层的进行扩展。

当然了,因为文章是我写的,我也得得瑟的显摆一下OSGi.NET的设计。

可以说,OSGi.NET的设计。OSGi.NET的设计也是类似于MEF,内核很简单,只是为了实现三大功能:动态插件化、面向服务、扩展。

不过,我们却可以从简单的OSGi.NET来支撑WinForm、ASP.NET、ASP.NET MVC等任意应用,从简单控制台扩展到iOpenWorks这样的自动化部署与软件生产线平台。它的扩展方式是:

WinForm等桌面插件应用 = OSGi.NET + 应用插件

ASP.NET应用 = OSGi.NET + WebExtension + Web插件

MVC应用 = OSGi.NET + WebExtension + MvcWebExtension + Web插件

自动部署 = OSGi.NET应用 + iOpenWorksBundleRepository + iOpenWorksBootstrap + 自动升级插件

远程服务 = OSGi.NET应用 + 远程服务宿主插件

负载均衡 = OSGi.NET应用 + 远程服务宿主插件 + 负载均衡客户端插件。

在OSGi.NET之上的任何应用,都是基于组合和扩展的方式,并没有去不断变更OSGi.NET内核本身的代码。

此外,OSGi.NET内核能够支持.NET Framework、Mono、.NET Compact Framework,因为它设计的模型非常小,没有用过多的类库支持。

3 谦虚随和

我们的客户都是一些大的企业,接触了很多各种类型的技术人员。

你可以发现一个非常有趣的现象,那些懂得尊重别人、比较谦虚的人经过深入接触后,会发现他们的技术往往都很了不起。

而那些说话刻薄无礼,觉得这个技术也不怎样,那个技术没什么了不起的,这个技术没有什么用,我自己的东西已经挺好的,这样的人水平、经验和见识一般都不怎样。

软件的问题,并不是简简单单解决一个技术问题,从技术的角度上看,只要学会了使用技术,那么我们就已经掌握了技术,因此,单纯的技术是很简单的。

相反的是,软件的协作开发、管理,软件的易用性,软件是否美观,这些东西才是最麻烦的,也往往是技术水平一般、经验短缺的程序员意识不到的东西。

我曾经接触过不少一般的程序员,大体都是这一类,他们觉得软件太简单了,没有什么了不起的。对于什么思想,也不屑一顾,他们已经觉得自己掌握了很多真正的技术。

4异常处理与稳定健壮

通过异常处理可以看出一个程序员程序设计的严谨与扎实的基础知识。

对于Java开发人员而言,会发现每一个方法都有可能需要强制的处理异常和声明这个函数需要处理的异常,这中强制的约束,会强迫开发人员来习惯性的考虑和思考它。

不过,对于大部分人来说,它处理异常的方式就是简单的使用try { … } catch(Exception anyException) { // 忽略异常 },用这种方式来捕捉所有的异常信息。

这样做的好处就是快,傻,缺点就是一旦出现问题,就不知道问题在哪发生,怎么回事,如果有靠谱的QA还好一些,比如外企,他们都有规范的测试方法和测试流程,一旦发现问题,就会将重现捕捉完整的描述出来给开发者看。

不过,在国内没有严格的测试是很正常的,那么出现问题时,就傻了。客户是绝对不可能把出现问题的方式给你完整的Repro的,一旦出现问题,客户会干的就是急眼,那接下来怎么办?你就老老实实加班,老老实实的去猜去找问题。

当“try { … } catch(Exception anyException) { // 忽略异常 }”这样的代码充斥整个软件系统时,你就可以想象有多可怕,这个软件能稳定就怪了!

我曾经在一个热电公司,在半夜12点,好几个厂家的人聚在热电,等待0点时刻数据采集,一旦数据少了,那么你就麻烦了。

我到现场之后,发现有很多开发人员拿个本子,需要不停的看数据库,或者需要将软件Debug打开,然后看看每一个时刻数据是否正常上来。这真是让我喜出望外,因为竞争对手太弱了!!你们的软件在此之前,难道对它7×24小时不间断稳定运行那么没有信心?

我们的软件,我通过系统运行过程的消息和日志,我就可以看出所有的东西,如下,消息窗口能够展示系统后台运行的详细过程。

此外,还有非常完整的日志,任何异常我都可以找到,并想办法重现。

关于异常处理,另一面,就是菜鸟程序员在写代码或者实现功能的时候,一般不考虑反面情况,一个软件按照正常步骤可能能走通,但是一旦出点意外,就麻烦了。以下就是一个典型的代码。

If(*****)

{

// ….do something…

}

这个代码处理了if,但是万一出现else的情况呢?可想而知,系统将会出现无法意料的情况。

因此,这也是菜鸟程序员做的系统一般都非常不稳定的一个根源,做程序一般只考虑功能实现,忽略掉意外情况。

5优雅与美观

菜鸟程序员并不是缺乏审美,缺乏的是优雅和美观的抽象能力。

一个好的系统,要做到两点,好用,好看!因此,这绝对不是单单功能上的堆砌。

很多国产软件都深深的烙上了技术人员设计的印子,一看就知道这个软件是出自一个技术人员的设计和实现,一看就知道这个软件的实现过程,这简直是惨不忍睹,不过,各位看官,这就是你们的机遇啊。

菜鸟技术人员开发功能的时候,一般都是从实现的角度进行堆砌,怎么简单,怎么来。

不会去仔细分析,用户在操作这个功能的时候,到底还会做什么事情,各个功能之间怎么进行有机结合来完整的进行结合。

相反,一些技术比较好的程序员往往都要直面客户,经常被客户骂,骂着骂着,也有点觉悟了。

当然,也有一些程序员因为自尊,直接不干了。不过,我觉得厉害的程序员基本都有用户意识,也希望自己的软件能有很好的评价,甚至能够影响社会。

好用,好看,是软件能够被普遍采用的前提,因此,我们需要学会抽象优雅。

6 基础扎实

技术知识决定一个人能做的技术的层次。基础的知识有计算机组成原理、计算机操作系统、网络原理、数据库原理、计算机图形学、编译原理、数据结构、离散数学、人工智能等等很高深的理论知识。

在这些基础知识之上,就是软件开发语言、类库、框架,面向过程、面向对象、面向服务等编程思想,架构思想等等。

这些知识不一定会影响你现在的工作,但一定会影响到你的格局,那格局肯定也会影响到你自身的发展。

我碰到过有些理论很差的人,但技术在公司内也是有些影响力的,因此,他们对技术原理就很不屑,甚至为自己不懂太多理论而擅长实战而沾沾自喜。

这些人会对那些懂理论,但动手能力一般的人显示出由内而外的鄙夷,但是他们却不知道那些既有基础知识,也有动手能力的高手做出的东西是怎样的。

就像我本人,实在是想不通,那些技术天才是如何开发出一个数据库、操作系统这样的软件。因此,如果你已经发觉自己基础不够扎实,那么还是有空就修炼修炼自己的内功吧!

7文档与表达能力

很多技术人员都写不了文档。不过,坦白的将,如果要获得更好的报酬,文档时绝对关键的因素。没有文档就没有沟通,就没有交易。

有人提了,“文档是第一生产力”,我非常之赞同。文档的类型有很多,针对的对象也各不相同。不同的人,对文档的理解能力也是完全不一样的。

因此,你的文档必须适应于你的目标。这个对于搞技术的人太难,他觉得还不如写代码来得快。

表达能力决定了你所做的技术的影响范围,决定了你的影响力,决定你的威信。

因此,也绝对的影响到你的报酬。因为这个能力而影响到你的报酬,你可能会心里觉得亏,但没有办法,这是硬伤,可不仅仅是我只是不擅长写文档,但我擅长与搞技术。

如果哪一天,有一个擅长忽悠,技术不如你的人,爬到你的上面并且领导你,那也是该的。千万不要去怪别人擅长忽悠,而是要想办法来弥补自己的硬伤。

8积极的心态

技术好的人,一般人都坏不到哪去。很简单的一句话,想要技术好,就要投入时间,有时间投入到技术,那么就没有时间投入到其它方面,特别是消极的坑蒙拐骗,因此,技术人员一般也都比较靠谱。

积极的心态,不仅仅对于技术,对于生活也是如此。一旦有了积极的心态,那么菜鸟到高手的过程,仅仅是时间的问题!

9觉得软件不值钱

我特别烦的就是做一个软件和一些水平不怎么高的技术人员谈费用的问题。只要是想要做好,每一个哪一个事情是简单的。

凡是靠良心和能力谋生的,都是依靠自身的实力来获取合适的报酬,我们每一个人都需要有收入。我也一样的,况且,我还是在技术人员骨子里面认为的那种见钱眼开的“老板”,因此,这就很头大。

不过,好在,和我见面的人,都能看出来,我也是做技术的。但是,这依然不能改变一些技术人员认为软件不值钱的想法,他们的理论是,这个功能放我身上,我一天就搞定了,凭什么你要那么多钱?

可是,咱们的做法一样吗?一个功能的实现方法有很多种,就像我说的数据采集。如果你的数据采集实现没有以下“1、2、3”这些辅助的功能,后台的实现要简单的多。

7.jpg(66.97 KB, 下载次数: 0)

下载附件 保存到相册

昨天15:19 上传

如果没有指令重试,没有多线程,没有异步刷新,没有7×24小时稳定运行,没有采集数据丢失,没有指令优先级排列,没有多线程和分布式集群采集,没有支持1天1GB数据采集等等这些非功能性的需求。

那么这个软件会更简单,我也见过有人用一个控制台,用一个单线程,显示的信息都是完全看不懂的二进制数字,运行一会CPU就100%,内存不断升高的采集软件。这个也算得上是采集软件。

不过,菜鸟程序员一般都会按照自己的做事方法来对软件进行评估,如果没有好的经验,一般都会认为软件很不值钱。

事实上,做好看的、好用的软件非常难,做好看、好用、还要好维护以扩展的软件那就是难上加难。

还有一个几年前碰到的软件定制,有一个人直接说了,这是简单的CRUD,一个页面200元,你算算这个系统值多少吧,我现在都害怕跟这些人打交道,也害怕做业务软件定制了。

曾经也见到一个数据采集软件,软件负责人说,他们这个软件一个月3个人就实现了,而我告诉他我们需要更多人手,更多时间,然后他非常不屑。

最后,我就想看看他们的软件,他打开让我看看,我在一个TextBox里面没有输入信息就点击一个按钮,然后系统竟然直接崩溃,抛出异常。

看完我就笑着说了,我们不做这种通过拖拉控件直接数据绑定的软件,我们需要做出一个好用且好看的软件,能够容易追溯、容易跟踪状态且支持多线程和分布式集群部署的软件。

软件是一个充满智慧结晶的劳动成果,如果说的高尚一点,有些软件时无价的,当然我做的软件不是这样的层次!

10 工资

这点显而易见,工资是价值的体现,成为高手程序员就意味着你能为自己争取高报酬。所以小伙伴们,加油吧!(下图,对号入座)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件
    +关注

    关注

    69

    文章

    5302

    浏览量

    90939
  • 程序员
    +关注

    关注

    4

    文章

    955

    浏览量

    30791

原文标题:程序员高手和菜鸟的区别是什么?

文章出处:【微信号:wujianying_danpianji,微信公众号:单片机精讲吴鉴鹰】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电缆绝缘在线监测的好处体现在哪些方面

    电缆绝缘在线监测通过实时采集、分析其绝缘性能相关参数,评估电缆的绝缘状态并预测其潜在故障。由于其应用是在电缆带电运行状态下的,因此能针对性的实现电缆绝缘状态的动态跟踪与早期预警,从而有效保障电网安全运行、降低运维成本并提升供电的可靠性。 传统离线检测需停电操作,影响供电连续性,而电缆绝缘在线监测则可实时获取数据,避免非计划停电,降低运维成本、减少人工巡检频次,延长设备寿命。电缆绝缘在线监测所具有的实时
    的头像 发表于 12-03 14:17 79次阅读

    工业数采网关的协议采集能力体现在哪方面

    工业数采网关的协议采集能力体现在其 对多类型工业协议的广泛兼容、深度适配工业场景、实现跨系统数据交互,以及边缘侧的智能处理 ,这些能力共同构建了从设备层到云端的全链路数据贯通,支撑企业构建灵活、高效
    的头像 发表于 10-18 11:07 197次阅读

    边缘计算网关的分组策略功能体现在哪

    边缘计算网关的分组策略功能主要体现在 通过灵活的数据分组管理机制,实现设备、数据或应用场景的分类处理,从而提升数据管理效率、优化资源分配并增强系统灵活性 。其核心价值与应用场景可归纳为以下方面
    的头像 发表于 09-16 11:21 492次阅读

    边缘计算网关的公式计算功能体现在哪

    边缘计算网关的公式计算功能主要体现在其能够在靠近数据源头的边缘侧,对实时采集的数据进行复杂的数学和逻辑运算,无需将数据上传至云端即可完成本地化处理与分析,从而提升系统的实时性、效率和可靠性。以下从
    的头像 发表于 09-15 11:06 559次阅读

    数据中台对接MES系统的必要性体现在哪方面

    数据中台对接MES(制造执行系统)的必要性体现在 数据整合与共享、生产过程透明化、决策支持智能化、系统协同与效率提升、灵活性与可扩展性 等多个层面,能够打破数据孤岛、挖掘数据价值,推动制造业向智能化
    的头像 发表于 09-11 11:33 473次阅读

    边缘计算网关的数据过滤功能体现在哪

    边缘计算网关的数据过滤功能是其核心能力之一,主要体现在 本地数据清洗、冗余剔除、异常值处理、协议适配过滤及业务规则过滤 五个层面,通过减少无效数据传输和云端处理压力,实现高效、安全的数据处理。具体
    的头像 发表于 09-11 11:23 548次阅读
    边缘计算网关的数据过滤功能<b class='flag-5'>体现在哪</b>

    边缘计算网关的智能采集功能体现在哪些方面

    边缘计算网关的智能采集功能通过多维度技术融合,实现了数据采集从“被动接收”到“主动智能处理”的跨越式升级,其核心价值体现在精准性、实时性、高效性、安全性四大层面,具体体现在以下方面
    的头像 发表于 09-10 11:03 480次阅读

    物联网数据中台的重要性体现在哪

    数据中台的重要性体现在其作为企业数字化转型的核心引擎,通过系统化整合、治理和利用数据资产,推动业务创新、效率提升和决策优化。具体可从战略、业务、技术、组织四个维度展开分析: 一、战略层面:构建数据
    的头像 发表于 08-27 09:16 356次阅读

    MEMS陀螺工具的技术突破体现在哪些方面

     在石油天然气勘探、矿山钻探及管道检测等复杂工程领域,精确的方位测量是确保作业安全与效率的核心。传统磁定向工具易受套管、钻杆等铁磁性物质或外部磁场干扰,导致在关键井段或受限空间内方位数据失效。作为高精度、小型化、全固态的 MEMS 陀螺定向短节代表,ER-Gyro-15基于MEMS陀螺技术,通过感知地球自转角速度实现无磁寻北。凭借其独特的技术优势,成为复杂工况下的革新性解决方案。   核心原理: ER-Gyro-15的核心技术突破在于MEMS陀螺技
    的头像 发表于 07-22 14:33 387次阅读

    工业组态平台在智慧水务中的价值体现在哪

    工业组态平台作为工业自动化与信息化的核心工具,通过图形化配置、多设备兼容、数据集成与实时控制等能力,在智慧水务的建设中扮演着“神经中枢”的角色。其价值体现在对水务系统全流程的智能化升级,涵盖数据整合
    的头像 发表于 07-15 15:15 303次阅读

    工业智能网关的协议兼容性体现在哪些方面

    工业智能网关的协议兼容性是其核心功能之一,主要体现在 支持多种工业通信协议、物联网协议、非标准协议解析,以及协议转换与互操作性 四个方面,这些特性共同确保了设备间的高效集成与数据无缝流通。 一、支持
    的头像 发表于 07-07 15:09 559次阅读

    工业物联网平台的开放性体现在哪方面

    工业物联网平台的开放性是其重要特性之一,主要体现在多个方面,这些方面共同保障了平台能够与不同的系统、设备、应用和服务进行无缝集成和交互,具体如下: 接口开放性 设备接入接口 工业物联网平台通常提供
    的头像 发表于 05-23 16:40 404次阅读

    阻燃网线与普通网线区别体现在哪些方面

    阻燃网线与普通网线的主要区别体现在以下几个方面: 一、定义与用途 阻燃网线: 定义:阻燃网线是指在发生火灾时可以防止网络设备继续燃烧或加速燃烧的网络线材。 用途:主要用于对消防安全有较高要求的场合
    的头像 发表于 02-08 10:35 933次阅读

    能源管理系统的优势具体体现在哪些方面

    本文主要讲述了能源管理系统与设备管理系统在能耗监测、优化和维护方面的应用,通过实时采集和深度分析数据,帮助企业降低能源成本,提高能源利用效率。同时,本文还强调了设备运行管理与维护的重要性,通过预测性维护避免设备故障和能源浪费。
    的头像 发表于 01-23 09:53 839次阅读
    能源管理系统的优势具体<b class='flag-5'>体现在哪些方面</b>?

    TMS320C6000程序员指南

    电子发烧友网站提供《TMS320C6000程序员指南.pdf》资料免费下载
    发表于 12-24 17:19 2次下载
    TMS320C6000<b class='flag-5'>程序员</b>指南