The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  下载本文的PDF版本 PDF

新手建议

你还记得第一次吗? 第一次,当你攻克一段代码后,你不仅感到“我能行!”,还感到“我热爱这个!” 也许后一种感觉还没出现,但如果你正在阅读这篇文章,很可能你至少对编程的乐趣有所体会。

正如任何经验丰富的开发者所知,纯粹的编码只是软件开发领域的一小部分。 本月,Kode Vicious 与一位充满热情的新手分享了一些他来之不易的经验。 即使你是一位经验丰富的工程师,回顾一下你刚入行时所做的事情——或者应该做的事情——也会有所帮助。

尊敬的 KV:
我是一名编程新手,刚刚开始阅读一些关于编程的书籍,特别是 C++ 和 Visual Basic。 我真的很喜欢编程——以至于在过去的几个月里,我从未有一天不写代码。 我现在主要关心的是程序员的未来会怎样。 如果有人被称为程序员(即,专业人士),他或她真正会编写什么程序? 就像,你会一直发明新的软件吗? 还是什么,真的? 这主要是指那些不为别人工作的人的情况。 我的另一个问题是,你真的可以建立一个自由程序员的职业生涯吗? 你基本上会编写什么程序?
编程新手

亲爱的新手:
“程序员的未来会怎样?” 这是一个非常有趣的问题,以至于我不会因为你把自己描述为新手,或者在正式场合提及 Visual Basic 而责骂你。 倒不是说我是正式场合,但周围可能有孩子会听到你说话。 我们必须考虑孩子!

虽然拿起几本关于编程语言的书籍(你已经这样做了)会教你关于这些语言的知识,但它们很可能不会教你关于编程的知识,而只会教你你正在学习的语言的语法。 我要冒险假设你真正想成为的与其说是程序员(这个术语真的应该过时了),不如说是工程师。

在我还是个毛头小子的时候,或者,实际上更接近我出生的时候,那时我还没长头发和牙齿,程序员是把程序输入计算机的人。 其他人设计软件和系统,然后程序员——通常有很多——将这些设计翻译成计算机可以理解的软件代码。

随着交互式编程(相对于批处理编程)的出现,程序员和工程师之间的界限变得模糊。 现在,一个工程师可以同时担任设计师、程序员、文档编写者、质量保证人员等等。 这不一定是最好的选择,但行业就是这样发展的。 因此,严格意义上的程序员数量实际上非常少。

如果你想成为一名独立的——就像你说的,自由职业——工程师,那么你必须放下那些关于随机编程语言的书籍,拿起几本关于如何构建软件的书籍。 我在之前的一篇文章(“Kode Vicious Bugs Out”,2006 年 4 月)中给出了我的推荐书单,所以在这里就不重复了。

我要说的是,你可能已经掌握了你所需的一项技能,那就是你每天都在练习。 计算机科学既是一门科学,也是一门艺术。 我不知道为什么人们觉得有必要如此频繁地区分这两者,因为大多数科学都是艺术,从某种意义上说,为了保持良好的科学水平,你需要练习,就像艺术一样。 你说,“……在过去的几个月里,我从未有一天不写代码”,这让我相信你将迎来充满苦差事和沮丧的生活! 哦,呃,那不是我的意思。 我的意思是,每天练习是成为一名优秀工程师或程序员(如果你喜欢)的一个非常重要的组成部分。

仅仅吐出代码是不够的,任何听过自学成才的邻居长号演奏者的人都可以告诉你。 演奏同样的歌曲多年后,他永远无法演奏正确。 你需要采取额外的步骤才能真正提升你的艺术水平。 第一步是阅读尽可能多的代码,可能比你写的代码还要多。 软件是一种表达形式,就像散文写作一样,与任何类型的表达一样,都有惯用语、短语和思维模式,这些模式可以产生令人愉悦的——或者在我们的例子中,是有效的——设计,以及导致灾难的设计。 文学老师们认为“阅读经典著作”可以帮助你的写作,这是正确的(尽管遗憾的是,他们常常被迫教授最无聊的版本,以免冒犯他人)。

在软件领域,有很多经典著作可以阅读,也有关于这些经典著作的书籍。 对于网络,我主要感兴趣的领域之一,有 FreeBSD 操作系统及其 TCP/IP 网络协议栈。 在数据库领域,有 MySQL;对于 Web 服务器,有 Apache。 这些代码库都是经典之作,而且它们是开源的,因此是学习的绝佳系统。

拥有完整的开发历史(以版本控制的源代码仓库的形式)是使用这些系统的另一个原因,因为你可以看到它们如何随时间演变,发生了哪些变化,以及出于什么原因。 没有一个是完美的,但每一个都有很好的文档记录,并且是一个活生生的系统的例子。 如果你是一位建筑师——建筑师设计建筑物而不是软件,尽管这种自负目前很流行——你会想要环游世界,研究各种建筑作品。 学习软件要便宜得多,因为你不需要机票——你只需要待在家里,通过简单的互联网连接就可以学习我们行业的伟大作品。

下一步是让别人看看你的代码。 除非你是那万分之一的天才,可以第一次就把所有事情都做对——而且我认为 0.1% 已经很慷慨了——否则你需要有人指导你并审查你的工作。 同样,开源可以提供帮助。

向你最喜欢的程序提交补丁,并学习与他人合作,因为这是一项在任何计算机科学系都学不到的伟大技能。 请注意,导师只是一个向导,你绝不能对他或她过于依赖,否则你实际上将一无所获。 导师是在你走投无路时寻求建议的人,而不是在你有一个可以回答但又懒得自己解决的问题时寻求建议的人。 懒惰是成为一名优秀工程师的糟糕方式,这会让 KV 非常恼火。

至于你对广阔的软件世界的期望,嗯,就像世界的其他地方一样,90% 都是垃圾。 无论你是一名自由工程师还是在一家大公司工作,你都很少会独自编写大量原始代码。 你肯定会更频繁地处理别人的代码,而不是你最初的设计。 有两种方法可以处理这种情况:第一种是杀死地球上的所有其他工程师,这可能需要一段时间,并导致你失去互联网权限;第二种是始终确保你领导或参与开发一些系统。 实际上,这就是我保持剩余理智的方法。

令我的许多非计算机极客朋友感到惊讶的是,在花了一天时间查看和处理软件之后,我会在晚上和周末去做在他们看来似乎是相同的事情,但事实并非如此。 当我处理自己的设计和代码时,我是主人,我说了算,这比大多数人能想象的更有价值。

对于你的最后一个问题,答案是,是的,自由程序员可以做得很好。 然而,通常自由职业者会得到一些最无趣的工作,至少根据我的经验,因为他们得到的是全职人员不想做的苦差事。 这并不意味着你不应该走这条路,因为它可能非常有利可图,如果平衡得好,实际上可以让你有更多时间用于自己的项目。 但你不应该自欺欺人地认为,你可以作为自由职业者加入并为一个团队或公司设计或构建一个大型系统; 这是一种非常罕见的情况。 你将构建什么完全取决于与你合作的人。 它可以是任何东西,这正是软件工作乐趣的一半。
KV

KODE VICIOUS,凡人称之为 George V. Neville-Neil,以网络和操作系统代码为乐和盈利。 他还教授各种与编程相关的课程。 他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。 他在马萨诸塞州波士顿的东北大学获得计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。 他是一位狂热的自行车爱好者和旅行者,自 1990 年以来就以旧金山为家。

acmqueue

最初发表于 Queue 第 5 卷,第 3 期——
数字图书馆 中评论本文








© 保留所有权利。

© . All rights reserved.