首页 编程 软件学院 查看内容

程序员从编程开始总结的11个经验

2017-3-1 22:46 |来自: 互联网 2717 0

摘要: “十年来,尽管软件行业发展迅速,热门编程语言的发展似乎却成了例外,始终未有太大改变。编程技能层次编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。0段—非程序员:初学编程者,遇到问题,完 ...

“十年来,尽管软件行业发展迅速,热门编程语言的发展似乎却成了例外,始终未有太大改变。

编程技能层次

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

0段—非程序员:

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

1段—基础程序员:

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

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

2段—数据结构:

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

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

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

3段—面向对象:

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

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

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

4段—设计模式:

曾经在网上看到这样一句话:“没有十万行代码量,就不要跟我谈什么设计模式”。深以为然。

记得第一次看Gof的设计模式那本书的时候,发现虽然以前并不知道设计模式,但在实际编程过程中,其实还是自觉使用了一些设计模式。设计模式是编程的客观规律,不是谁发明的,而是一些早期的资深程序员首先发现的。

5段--语言专家:

经过一段时间的编程实践,程序员对某一种常用的编程语言已经相当精通了。有些人还成了“语言律师”,擅长向其他程序员讲解语言的用法和各种坑。

6段--多语言专家:

这一个阶段的程序员,因为工作关系,或者纯粹是因为对技术的兴趣,已经学习和掌握了好几种编程语言。已经领略了不同编程语言不同的设计思路,对每种语言的长处和短处有了更多的了解。

他们现在认为,编程语言并不是最重要的,编程语言不过是基本功而已。

程序员从编程总结的6个经验

1. 从小事做起,然后再扩展

无论是创建一个新的系统,还是在现有的系统中添加新的功能,我总是从一个简单到几乎没有任何所需功能的版本开始,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。

2. 一次只做一件事

当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。

3. 尽早地添加日志和错误处理

在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。对系统来说它比一大把代码更有用,你需要一些了解程序状态的方法。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。

4. 每一行新代码必须至少执行一次

在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。

5. 在整体测试之前先进行模块测试

先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。

6. 所有事情所花费的时间总是比你预期的要长

特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。一个简单的合并操作会导致一系列小bug,一次框架升级意味着一些函数必须改变或者一些API不按照你想象的那样工作。

7. 先了解现有的代码

大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一,因为你首先必须了解上下文。

8. 阅读和运行代码

幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。

故障排除

9. Bug 总是难免的

我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么努力,bug总是难免的(BUG的定义基本上是:“我们没有想到”)。最好能够做成可以快速故障排除、修复bug和部署修复的系统。

10. 解决故障报告

每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。不要错过这些好处。

11、 小黄鸭调试法

遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。听起来像魔法,但是这经常起作用。详情看这篇文章:《小黄鸭调试法,每个程序员都要知道的》

软件开发人员和程序员语录需牢记:

1.A good programmer is someone who always looks both ways before crossing a one-way street. (Doug Linder)

好的程序员即使在过单行道时也总是会环顾两边。

2.Don’t worry if it doesn’t work right. If everything did, you’d be out of a job. (Mosher’s Law of Software Engineering)

不要担心它能否正常工作。如果一切正常,那么你就会失去工作。

3.The trouble with programmers is that you can never tell what a programmer is doing until it’s too late. (Seymour Cray)

程序员的烦恼是,你永远无法知道一个程序员在做什么,直到为时已晚。

4.Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. (Larry Wall)

程序员的美德:懒惰,没有耐心以及老子天下第一。

5.Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. (Martin Golding)

写代码的时候总是想象维护你代码的家伙是一个知道你住在哪里的暴力精神病患者。

6.One man’s crappy software is another man’s full time job. (Jessica Gaston)

一个人写的烂软件将会给另一个人带来一份全职工作。

搜狗CEO王小川说过:

现在搜狗有2000多人,80%都是技术人员。我早就专注做战略和管理,有好几年不碰编程了。

这也是源于我作为一个码农的某种执著。我记得做CMS,把宿舍好友拉过来帮忙,但我发现我不能接受两个人一起编程,因为会破坏我那些代码原来的美感。作为码农,我不能放弃优雅和美感,但作为管理者,我就要妥协。

对我来说,编程是创造一个生命。这个生命有你的技术展,有你的思想注入,有你对美的理解,最后产生表达虚拟运行的生命。程序是有生命的。

那么我们此时应该更加努力~

另外还有一点可以通过自身的学习来获取一大进步。

这次我把所有干货重新梳理精简,免费分享给大家 。

究竟有哪些干货呢?

免费领取资料,请关注微信公众号 “程序员精选”,或者微信搜索“wnl1121"

本文出处: http://www.toutiao.com/a6392501025782448385/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除
1

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

  • 路过

    匿名

最新评论

返回顶部