编码实践

【编码高手】他酷爱编程,喜欢以技术方式解决问题。本期有线院 陈皓为您分享:“程序猿”高手是如何炼成的...... 精华

夏青00002351  2017-12-12 09:05:19  1383  34

标签:

【本期分享人】:

陈皓,有线院,多业务承载深圳软件开发二部,负责过承载设备多个项目的软件架构工作,酷爱编程,喜欢以技术方式解决问题。同时,是敏捷技术教练和代码大全讲师,长期负责深圳地区代码大全高级班的授课。

【正文】

程序员,或写或读,大部分时间都在跟代码打交道,即使在少部分和人打交道的时间里,也是为了确定将会和哪些代码打交道。作为程序员也摸爬滚打了好些年,碰到了很多困难,也解决了一些问题。借此机会分享一些我的小经验,希望你能用的上。

一、学  法

1、高手与普通程序员拉开差距的关键是什么?

能当程序员,学习能力肯定不差,差距仅仅体现在是否愿意主动思考上。你会看到高手没有人是完全依靠问别人来解决问题的。他们会首先做出独立的思考,有自己的判断,然后再通过实践去验证、修正自己的判断,并对结果负责。他们不仅会问别人,更多的是会问自己。

即使是问别人问题,也是经过深入思考之后总结出来的问题。“帮忙看下我这里这个现象好奇怪啊”,“怎么提高软件设计能力呢?”这些都不能算是好的问题。“这个故障我觉得有这么几种可能,但我们怎么才能验证它呢?”就是一个还不错的问题。当然,有些时候你还需要善于借助互联网去找技术问题的答案。搜索技术问题少用那个搜索引擎。对,就是你想到的那个。stackoverflow.com应该是公认的搜索问题答案的好地方。

2、技术发展这么快,怎么才能不被“落后”?

首先,掌握多种语言的目的并不是在简历上多填写几行字。

当下看似很火的框架和技术,很可能随着时间的推移慢慢变得“落后”,但编程语言可以说是软件设计领域留下来的最珍贵最精华的作品。很多专家在书籍中(如《代码大全》)会建议程序员应该每年学习一门新的编程语言。

这里的学习,当然不是说简单的学学语法,而是深度使用后去积极思考这门语言是要解决什么问题,通过什么方式解决的。那么,即使你在工作中不会直接应用,也会给你带来很多全新的思路,你的代码一定会写的更好。

另外,还建议尽量选择差别较大的语言,比如C/C++/java可以认为是同一族的语言。我推荐以下几种编程语言:go、erlang、python。如果你能够掌握他们,你一定会收益匪浅。

3、无法做到1万小时的时间锤炼,如何也成为高手?

作家格拉德威尔在《异类》一书中提出了10000小时定律。“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。是任何人从平凡变成世界级大师的必要条件。”可问题是你有没有10000小时?或者说你能不能做到10000小时?

因此,如果你在工作中想使自己的某个方面能力有所提升,或者你想掌握某种技能,不能像上学时那样按部就班的从一年级的知识学习到六年级了,而是为这件事定一个目标,直接去实现这个目标。例如你想学习C++,你应该直接使用C++去编写项目或某些程序,而不是手捧着近千页的《C++ Primer》彻夜苦读。在这个过程碰到了实际的问题,再反过来补充必要的知识。

二、干 法

1、解决问题的几个段位

程序员的主要工作就是解决各种问题。可以说解决问题的方式是衡量一个程序员水平高低的主要标准。面对一个问题或者故障,有多种解决方式:

● 初级段位:如果一个程序员是靠猜靠蒙,可想而知那通常水平不会太高。

● 二级段位:好一点的是会加个调试打印,或用调试器设个 断点观察状态;

● 三级段位:更好一点的是会用各种测试或TDD,不需要调试器了;

● 四级段位:更好一点的是用逻辑推理、形式化验证的方式,从而可以证明程序没有问题或者推断出问题出在哪里,甚至不需要运行程序;

● 高级段位: 不仅解决了问题,还可以把解决问题的方法工具化,把同类问题全部解决掉,而且还能推广出去,产生更大的价值。

因此我们要珍惜每一个问题,追求更好的方式解决,让我们段位不断升级。

2、写代码、改代码是你成为代码高手的台阶

作为一个程序员,多写代码是提升能力的必要条件。并且幸运的是,这件事的成本非常低,有台电脑就可以。你可以在项目中选取一小部分核心业务代码反复多写几遍,既能加深对业务知识的理解,又能实践不同设计方法之间的区别;你可以把经典书籍里的例子编写出来,例如《编程珠玑》、《SICP》中的题目;遇到了某些平时靠人工繁琐重复性的工作,你可以挑战一把,编写一个工具去搞定它.......其实不用多久,你解决问题的能力会飞速提高。

当然,写的太多其实也有问题,很可能多半是“拷贝+复制”堆出来的。仔细阅读项目中的代码,一定会发现一些冗余的,重复的代码。在绝对安全的前提下,有些时候扫除烂代码比写代码更有意思。

3、你真的是沟通表达能力不强吗?

程序员通常会被认为是沉默寡言,沟通表达能力不强。刚工作的那段时间,我认为自己就是这样的人,当我描述一个问题描述不清楚时,把原因归结为没办法,表达能力不强嘛。

但是,我慢慢发现,其实当我表达不清楚一个问题时,并不是表达能力的问题,而是我自己还没有完全想清楚,而表达出来可以促使你把问题思考清楚。否则你认为你理解的问题,其实并没有。

日常工作中其实到处都是这样的机会。会议上,讨论中,培训,甚至回邮件,写文档都是一个很好的表达问题的机会。抓住这样的机会,努力用最简单流畅的语言表达你所要表达的内容。

【结束语】

其实高手和普通人的差距并不大。每遇到一个问题都把它当成一个机会,保持一个精益求精的态度面对每一件事情、每一行代码,力求做的比别人好一点点。日积月累,每个人都会变成高手。

本文借鉴了邓辉、孙鸣的《我们的核心竞争力》宣讲和武研所魏猷君的一篇总结,谢谢你们!

时间: 2024-11-01 17:32:43

编码实践的相关文章

Hadoop项目实战-用户行为分析之编码实践

1.概述 本课程的视频教程地址:<用户行为分析之编码实践> 本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编码.调度流程.下面我们来看看本课程有哪些课时,如下图所示: 首先,我们来学习第一课时:<Hadoop项目基础代码>. 2.内容 2.1 Hadoop项目基础代码 本课时介绍编写Hadoop基础代码及脚本,在前面搭建好的Hadoop项目工程上, 完成项目的基本代码的编写,以及一些注意事项,为编写核心

ElasticSearch实战-编码实践

1.概述 前面在<ElasticSearch实战-入门>中给大家分享如何搭建这样一个集群,在完成集群的搭建后,今天给大家分享如何实现对应的业务功能模块,下面是今天的分享内容,目录如下所示: 编码实践 效果预览 总结 2.编码实践 由于 ES 集群支持 Restful 接口,我们可以直接通过 Java 来调用 Restful 接口来查询我们需要的数据结果,并将查询到的结果在在我们的业务界面可视化出来.我们知道在 ES 集群的 Web 管理界面有这样一个入口,如下图所示: 我们可以在此界面的入口中

七、Kafka 用户日志上报实时统计之编码实践

一.数据生产实现 1.配置数据生产模块 项目基础配置所包含的内容,如下所示: •项目工程的文件配置 •集群连接信息配置 •开发演示 2.实现 Flume 到 Kafka 模块 实现 Flume 到 Kafka 模块所包含的内容,如下所示: •Flume 集群信息配置 •数据收集 •数据收集演示 二.数据消费实现 1.配置数据消费模块 配置数据消费模块信息所包含的内容,如下所示: •Storm 集群信息配置 •依赖文件配置 •操作演示 2.实现 Kafka 到 Storm 模块 实现 Kafka

后端开发实践系列之三——事件驱动架构(EDA)编码实践

在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architecture, EDA),那是几十年前就出现了的话题:单纯地讲领域事件,那也是这些年被大量提及并讨论得快熟透了的软件用语.然而,就笔者的观察看,事件驱动架构远没有想象中那样普遍地被开发团队所接受.即便搞微服务的人都知道除了同步的HTTP还有异步的消息机制,即便搞DDD的人都知道领域事件是其中的一等公民,

后端开发实践系列之四——简单可用的CQRS编码实践

本文只讲了一件事情:软件模型中存在读模型和写模型之分,CQRS便为此而生. 20多年前,Bertrand Meyer在他的<Object-Oriented Software Construction>一书中提出了CQS(Command Query Seperation,命令查询分离)的概念,指出: Every method should either be a command that performs an action, or a query that returns data to th

【安全编码实践】保护自己免受跨站点脚本攻击

声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用. 文章来源:https://medium.com/bugbountywriteup/how-to-write-secure-code-b2757b59cd4b 如何编写安全代码?保护自己免受跨站点脚本攻击! 过去几个月我一直致力于安全代码实践,我一直在努力与社区讨论易于采用的方法.我们每天看到的不安全代码的数量确实令人震惊,我们都同意“预防胜于治疗”. 保持我们的代码和应用程??序安全的最佳方法是从一开始就正确编程.编写安全代码并不困

javascript最佳实践,包含性能优化、编码实践等。

昨天跳过<javascript高级程序设计>前面几章书的内容,直接跳到最佳实践那一章,然而那一张说的又和我在实习的时候的实践,有很大的关系,因此我就觉得应该整理出来,分享一下,毕竟还是挺好的一部分. 一.编写可维护的代码 可维护的代码就有一些特征: (1)可理解性 (2)直观性 (3)可适应性 (4)可拓展性 (5)可调试性   二.代码约定        1.可读性:代码缩进大小为4个空格 需要进行注释的地方: (1)函数和方法:如函数的目的和用于完成任务所可能使用的算法. (2)大段代码:

软件工程(c编码实践) 学习笔记(一)

vim 有三种模式:一般模式,编辑模式,命令模式. ----------------------------------------------------------------------------------- 打包命令:tar -zcvf name.tar.gz path_and_files 解包命令:tar -zxvf name.tar.gz 参数: -z:有gzip属性的-c :建立一个压缩文件的参数指令(create 的意思)-x :解开一个压缩文件的参数指令 -v:显示所有过程

10个精妙的Java编码最佳实践

这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不常见的情况,可能有很大影响. 我在编写和维护jOOQ(Java中内部DSL建模的SQL)时遇到过这些.作为一个内部DSL,jOOQ最大限度的挑战了Java的编译器和泛型,把泛型,可变参数和重载结合在一起,Josh Bloch可能不会推荐的这种太宽泛的API. 让我与你分享10个微妙的Java编码最佳