我如何知道我是否善于编程?

我最近和一个初级程序员说话,他问我一个很好的问题。一个很好的问题,让我停下来思考我对学习发生的看法。问题是:

“我怎么知道我是否善于编程?”

我经常被问到“我如何善于编程”这个问题的另一面,或者“我能做些什么来擅长编程”。答案是您自己的项目实验的一些组合,做课程,阅读书籍,与好的程序员合作,为开源项目做出贡献。但是,如果你想在以下方面的问题,“我怎么知道我是不是好?”这变得 更加的工程方法。您有一个指标,进行优化。

除了实践之外,改善任务的最重要的事情是良好的反馈。当没有好老师的新领域开始时,很好的反馈是困难的。例如,课程可能会有您获得反馈的考试或项目。但是,一旦你完成课程,你如何获得更高层次的整体改进反馈? 如果你有一个良好的反馈机制,那么下一步要做的事情的答案更容易。

那么我怎么知道我是否善于编程?一个好的开始是要问“什么是好的代码?”。如果一个程序员不能产生好的代码,他们不是一个好的程序员。

什么是好的代码?

所有代码都可以完成任务。良好代码的第一个标记是完成所需的任务。任务可能在复杂程度上有很大的变化,但是代码永远不会比完成任务更好。对此的反馈很简单,“  代码是否 达到预期的目标?代码只能 完成所需的任务,不应该有其他不良的副作用。在代码周围编写好的单元测试可以作为成功的指标。

如果您无法顺利完成任务,这里是您的第一个好的反馈信息, 将显示您需要接下来学习的内容。我认识你缺乏的知识,并找出最相关的资源。系统理论告诉我们,如果你不是在限制条件下进行优化,那么你正在浪费你的精力。这是约束,只学这个东西。

代码可读吗?

一个写得好的代码是一个干净简洁的想法表达。程序员应该尽可能简单地了解你所写的内容。熟悉你的语言的成语和语法糖。可能有一种很好的方法,只需一次写入3行中所写的内容,同时仍然保持可读性。确保您的代码正确记录,解释为什么代码不在做什么。为了测试这个,如果你没有朋友可以看看你的代码,我会建议你的代码发布到https://codereview.stackexchange.com/  或其他类似的网站。自己今后6个月也是一个很好的替代陌生人。

是否容易扩展或修改?

这是很多程序员最喜欢的投诉,“要求改变了”。这是现实,你不是用明确的功能和目标编程考试问题。在现实世界中的需求总是在不断变化,这是一个很好的 事情。如果一个任务花了3个月的时间才能完成,而且没有新的要求,有人没有做好工作。更多的时间应该引入新的信息和要求。

在接受采访时,我想请 候选人完成一个相当简单的编程任务,如编程电梯系统。一旦他们完成了,我请他们实施一个他们永远无法预见的疯狂功能。对人际关系和技术的回应告诉你,他们的技能很大。

一个好的程序员应该计划这个。如果您编写了一个程序来完成任务x,那么看到修改它以执行任务x和y,但是当条件k到q发生时不是很容易(除非k和m同时发生,然后执行y而不是x)。CS 101概念 - 像多态性和继承与构图之间的区别 - 当时似乎没有意义,现在可以感觉到有趣。

编写代码来 改变是一种让您感受 更多经验的东西,但是不要太早地添加更多的抽象层。过早的抽象导致企业FizzBu??zz(https://github.com/EnterpriseQualityCoding/FizzBu??zzEnterpriseEdition)。

代码是否有效?

效率有几个不同的组成部分,速度完成以及诸如内存使用率,CPU使用率等各种资源组件。幸运的是,所有这些都易于跟踪,并且每种语言都有可以显示程序时间和资源的剖析器正在使用。熟悉这些工具,然后查看您可以削减这些指标。如果您正在重新设计存在的问题,例如编写自己的LRU缓存,您可以查找理论上的最佳性能并将其与您自己的性能进行比较。在这里,您可能希望从大O角度开始考虑您的代码,大致了解不同操作需要多长时间https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html

你可以快速写吗?

特别是在学习中,不要把重点放在你的速度上。能够在速度编码竞赛中竞争是令人印象深刻的,但是在编程方面,这是一个糟糕的学习方式。速度本身不是目标,更是衡量进度。如果您正在掌握域,那么您应该能够编写完成任务的代码,并且在较短的时间内可以高效,可读和易于扩展。

很容易衡量完成任务所需的时间,但是这个度量难以实现。而是分析花费在各种子任务上的时间。你是否需要加深理解的领域?也许你花费大量的时间来手工测试你的代码,这可以通过自动化来加速吗?您可以开始查看您正在使用的工具。您的IDE具有各种有用的热键,可以提高速度,并从机械任务中释放大脑,从而可以将重点放在更高层次的问题上。

整理

如果你的代码实现了所有这些事情的高标准,那么你擅长编程的任务。如果不是有明确的领域要改进。然后,您可以在希望成为其他领域的其他领域寻求更复杂的任务或任务。

我想再添加一件事情来完成这篇文章。 鉴于当天的小时限制以及生产时间的限制,只有一个程序员才能做到这一点。Elon Musk作为一个富有成效的人,享有声誉,但如果他是PayPal的唯一工程师,他们就不会有这么远。在一定程度上,如果你想建立伟大的事情,你需要在一个团队中工作。在这一点上,编程成为社会活动。你想要能够编程不仅仅是你自己的手和大脑,而是在一定程度上通过整个团队合作。在这一点上,一个好的程序员不仅仅是你的代码是多么好,而是与你合作的人的代码有多好。

有很多方法可以获得有关这方面的反馈。在对同事进行代码审查后,他们会生成更好的代码吗?下一个问题是他们是否改进了您审查的具体代码或改进了其一般代码?以这种方式改善人们不仅仅是技术反馈的问题,而且也是动机。你可以让他们对这项任务感到兴奋,了解为什么不同的改进或方法很重要。你是否提高周围人的整体技能?着名的27x研究表明,最好的程序员是最差的27倍。那么如果你是一个6x的程序员,你帮助你的团队中的其他4个人从1到6倍,那么你的效率远远超过27倍。

对于我来说,这些是一个好的程序员的基本技能,如果你甚至在一些小的方式实现任何一个,你可以睡得很好,知道你是一个好的程序员。

原文:http://www.danielslater.net/2017/07/how-do-i-know-if-im-good-at-programming.html

时间: 2024-10-06 23:42:45

我如何知道我是否善于编程?的相关文章

洛谷 【P1074】靶形数独

P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格 高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1 到 9 的数字.每

作业4:结对项目—— 词频统计

1. 要求 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件. (第一阶段初 稿完成该要求). 命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名. 解释: 1.选项 -f 表示后面跟文件名 2.输出格式规定(参考作业3中

[NOIP2009] 靶形数独

[NOIP2009] 靶形数独 传送门 题目 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独” ,作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格高的小九宫格(用粗黑色线隔开的) .在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1到 9 的

搜索 素数方阵

一个比较麻烦的数独 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目.靶形数独的方格同普通数独一样,在9格宽×9格高的大九宫格中有9个3格宽×3格高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入1到9的数字.每个数字在每个小九宫格内不能重复出现,每个

【NOIP2009】靶形数独 DLX(Dancing Links)

[NOIP2009]靶形数独 T4 Time Limit: 2 Sec  Memory Limit: 128 MB Description 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有9 个3 格宽×3 格高的小九宫格(用粗黑色线隔开的).在

洛谷 P1074 靶形数独

P1074 靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格 高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1 到 9 的数字.每

[NOIP2009]靶形数独 题解

407. [NOIP2009] 靶形数独 ★★   输入文件:sudoku.in   输出文件:sudoku.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教,Z 博士拿出了他最近发明的“靶形数独” ,作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格

BZOJ 2119: 股市的预测 [后缀数组 ST表]

2119: 股市的预测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 331  Solved: 153[Submit][Status][Discuss] Description 墨墨的妈妈热爱炒股,她要求墨墨为她编写一个软件,预测某只股票未来的走势.股票折线图是研究股票的必备工具,它通过一张时间与股票的价位的函数图像清晰地展示了股票的走势情况.经过长时间的观测,墨墨发现很多股票都有如下的规律:之前的走势很可能在短时间内重现!如图可以看到这只股票A

[NOIP2009] 靶形数独(搜索+剪枝)

题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格 高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1 到 9 的数字.每个数字在每个