你好。这篇文章是我们与专业软件开发人员交谈的系列文章的一部分,询问他们以编写代码为生是什么感觉,并可能在此过程中获得对软件开发行业的一些见解。
在我们今天的采访椅子上,我们有非常了不起的 Dalija Prasnikar。达利娅生活在克罗地亚历史悠久、风景如画的 Zageb 市。稍后您会听到更多关于达利娅的开发背景的信息,但她还是一位多才多艺的摄影师,也是一些伟大的编程书籍的受人尊敬的作者。你可以看出她是一名合格的编码员——她是迄今为止唯一一个使用MarkDown返回答案的人!
达利娅,感谢您同意参加采访!
谢谢
关于你是谁和你做什么的简短介绍是什么?
软件开发人员、顾问、书籍作者、Embarcadero MVP。自 85 年以来,撞毁其他人的软件并编写自己的软件。
您 a) 最常 b) 经常使用哪种 Embarcadero 产品?
当然是Delphi。
您是如何和/或为什么成为开发人员的?
当我还是个孩子的时候,我想成为一名宇航员。我真的很喜欢太空、天文学、科学……以及任何与它们相关的东西。当我大约九岁的时候,我记得看的第一个科幻系列是电视连续剧《布莱克七号》。我最喜欢的角色是 Kerr Avon。一个非常聪明,讽刺的计算机天才。在剧集一开始,他就说“谁控制电脑,谁控制飞船”,这是“我想当宇航员”演变成“我想控制电脑”的关键时刻。
当然,在现实生活中,作为一名开发人员,知道我现在所知道的,控制计算机和飞船真的是一种幻觉。更多的时候,情况正好相反。这也是我从不完全相信任何与技术相关的东西的原因。
您认为您将永远不再从事开发吗?如果是这样,接下来会是什么?
我可能会成为一名农民……但我会成为一名将编写代码作为业余爱好的农民。[我也是!我们都应该和开发者同行Alister Christie谈谈——他住在一个生活方式街区——IanB]
是什么让您开始使用 Delphi/C++ Builder?
我在高中学习了 Turbo Pascal,它很快成为我最喜欢的语言。它可以做 C 可以做的所有事情,而且速度要快得多——不仅在编写代码方面,而且在编译方面也是如此。
我的职业生涯始于 BYTE 克罗地亚(McGraw-Hill 许可持有者)的 IT 记者和 MIPS 计算机杂志的编辑。随着 90 年代 Internet 和在线出版的兴起,我转向了 Web 开发。在开始使用 Delphi 之前,我使用的是 Java 和 JavaScript。来自 Turbo Pascal,我也一直使用它来编写各种实用程序和网页生成器,Delphi 是开发 Windows 应用程序的自然选择。
达利娅,全面开启 MVP 模式!
你目前在做什么?
如您所知,我已经写了两本 Delphi 书籍:《Delphi Memory Management》 和 《Delphi Event-based and Asynchronous Programming》。
我喜欢写书。这是一个分享知识的机会,也是一个学习的机会。无论您对某个主题了解多少,总会有一些阴暗的角落需要您了解一下,以便向他人正确解释。
写完第二个之后,换到第五档就很容易了,所以我正在写更多的 Delphi 书籍。我还没有任何其他细节可以分享。
但是,是的,即将出现新的 Delphi 书籍。
您建议先学习哪种编程语言?
英语
如果您可以给正在考虑从事软件开发人员职业的学生一些建议,那会是什么?
从阅读书籍开始学习。首先了解概念和算法。编程语言是次要的。它们都受其实现的限制,通过编程语言学习概念通常会导致误解。因为不同的语言以不同的方式实现相同的概念,所以通常用于一种语言的编码模式不一定适用于另一种语言。
不要让规则统治你。良好的实践和规则比硬编码规则更具有指导意义。它们旨在帮助开发人员执行常见任务。当规则成为负担的那一刻,你应该停止应用它。然而,这是一把双刃剑,人们经常将其解释为允许在任何地方违反规则,因为他们不完全理解特定规则背后的推理。此外,随着时间的推移,规则和实践不断发展,出于某种原因,曾经的良好实践可能不再那么好。
达利娅非常受欢迎的“基于事件和异步编程”的书可以在这里订购:https ://dalija.prasnikar.info/delphiebap/index.html
简单的代码胜过聪明的代码。如果你不能用简单的代码实现一些东西,那么——只有这样——你可以应用聪明的技巧。写下聪明的代码做什么以及为什么这样做很重要,因为你很快就会忘记它。当然,解释可以让其他人更容易地理解你的代码。
经验不会阻止你编写愚蠢的代码和犯愚蠢的错误。经验可以帮助您尽早发现并承认此类错误,而这是解决这些错误的第一步。
活到老学到老。
开发者的座右铭
开发人员不是绝地大师。“做。或者不要。没有尝试,”不起作用。它是“如果一开始你没有成功,尝试,尝试,尝试,尝试……尝试,尝试,再试一次。”
编程的时候你使用制表符TAB键……还是空格键?(在美剧《硅谷》中,曾上演过一个编程时应该用“空格”还是“Tab 键”的著名场景。这场旷日持久的争议,最近又得到了微软首席云倡导者、兼 DevOps 领导人 Abel Wang 的加入。)
空格键。
缩进样式
Allman 表示支持语言,GNU 表示 Pascal。区别在于块缩进,其中 begin..end 需要额外的缩进以进行更清晰的分离。
作为开发人员,您度过的最美好的一天是什么?
有很多……很难选择一个。
作为开发人员最糟糕的事情是什么?
你永远不会停止在脑海中编码。
你知道的最酷的开发技巧是什么?
如果你被困住了,洗澡、散步、睡觉……做任何让你放松的事情。
在家工作、在办公室工作、在开放式计划/共享空间工作?你更喜欢什么,为什么?你可以选择吗?
在家里工作。更舒适的设置。它不会浪费时间在通勤上。你自己的厕所。您可以在不改变习惯的情况下度过大流行。
告诉我们一些您认为我们可能不知道的有趣事情。
我在高中使用的第一个 Turbo Pascal 版本是在 CP/M 上运行的。我也是第一代在课程中没有 COBOL 的高中生。
如果你可以挥动“修复科技行业”的魔杖,你会改变什么?
我会创建一个更大的字节蝙蝠!(对于那些不知道我在说什么的人,在 80 年代有一种橡胶棒球棒,您可以用它击打愚蠢的计算机而不会损坏任何东西。)
Dalija 的网站为您提供了有关她活泼个性的提示!
如果您可以说服某人考虑使用 Delphi 或 C++ Builder,您的方法是什么,您会怎么做?
我一直喜欢 Turbo Pascal 和后来的 Delphi 的事实是,它是一种非常通用的语言 - 不仅适合开发截然不同的应用程序,而且还允许您在非常不同的抽象级别上进行编程.
您可以将其用作 RAD 工具,用于快速原型设计和开发。您可以编写和使用高度抽象的框架,只需几行代码即可实现目标。然而,您仍然可以一直深入到操作系统级别并直接与操作系统 API 交互。在 Windows 平台上,你甚至可以更深入地直接编写汇编代码。
我真的很喜欢那个内置汇编部分。我现在不太会使用它,但在我很少使用它的情况下,我非常高兴它在那里。
我不确定这是否真的是一个非常有说服力的论点。也许这是过去的遗物,当时进入汇编级别的能力是一个极大的优势,但我只是喜欢这种灵活性。
您希望自己发明/设计哪种技术产品,为什么?
当我还是个孩子的时候,在看过Blake's 7 之后,我觉得把他们的电脑 Zen 放在手表里会很酷,所以我画了很多图来展示手表的样子。这样算吗?[绝对!– IanB,我也是布雷克 7 的粉丝!!!]
如果可以重来,你还会做开发者吗?为什么?
是的。控制飞船…
你一天喝多少咖啡,够喝吗?
很多。永远不够。
您是一个编码到深夜的夜鹰,还是一个早起并进入或遵守某种常规办公时间的早起人?
每当灵感来临时!
在您的职业生涯中,您是否曾经“熬夜”来处理绝对必须完成的事情?
是的。但不像我在出版时那样多次。我在那里最长的熬夜大约是 30 小时。
描述你在职业生涯中做过的其他一些事情,这些事情可能会让读者了解成为开发人员的背景。
我也是一名摄影师。我自己认为…
Dalija,绝对是一名摄影师
你被问到的最愚蠢的问题是什么(这些都不算数!)
需要花多长时间写完这个软件?
您为与客户的合作报价吗?如果你这样做了,没有透露任何会让你不舒服的东西,你使用什么样的过程?
按小时收费。固定费用仅适用于进行“模板”定制,即您拥有可以定制的产品,并且定制包含非常具体、已知和可预测的步骤。
您如何阻止客户/项目经理/经理“功能蔓延”?
通过说完成它需要多长时间。
为您描述一个典型的编码会话。它是如何开始的?你休息吗?你有什么仪式/习惯来陪伴它吗?
这本优秀的书可以从这里订购:https : //dalija.prasnikar.info/delphimm/
取决于我在做什么——我是在编写新代码、调试还是在写书。最常见的主题是我经常谷歌并阅读大量文档。
我在写作时会休息一下,因为在写东西之前你经常需要停下来思考。短暂的休息让您有机会重新思考并确保您没有走错方向。
另一方面,调试不喜欢中断,尤其是当您跟踪一些难以捉摸的 Heisenbug 时。你经常需要在头脑中跟踪大量的代码逻辑,任何分心或中断都会很容易地抹去所有这些,你将需要重新开始。
你在编码时听音乐吗?如果是这样,你能告诉我们一些曲目/艺术家/表演吗?
有时。电影主题、80 年代流行和摇滚……当我的孩子还小的时候,我一边工作一边照看孩子,包括整天听帝国时代或定居者 IV 的音乐。
您是否使用任何方法或技术,例如敏捷、Scrum、看板、TDD?如果是这样,为什么?如果不是,为什么?
简短的回答:是的。这取决于项目。
长答案:这是一个狡猾的问题。[嗯,发现了! –伊恩]
任何提到的技术都有许多变体(或者,至少,人们以自由式的方式应用它们)。对上述任何一项说“是”,并不意味着您完全按照给定的流程进行操作。这并不意味着使用一个优于另一个。就像好的编码实践不是凭空存在的,它们的主要目的是帮助您实现最终目标,项目和质量管理实践也只是同一过程的一部分。如果过程成为它自己的目的,那么您就失去了实现最终目标的能力:完成功能性、可维护性、高质量的软件。
这就是为什么我讨厌命名流程的各个部分,因为它从来都不是一成不变的,它会适应项目和团队的要求。
你跟踪错误吗?如果你这样做,你有什么建议?
不,我当场杀死他们。有时这会将它们变成僵尸虫。
优秀的软件开发人员:
一个生硬的开发人员,否则他们会一团糟。
一个糟糕的软件开发人员:
我,昨天
iPhone、Android、其他——为什么?
我没有智能电话。太多的分心。
对于开发人员:PC 还是 Mac?为什么?
PC,因为 Turbo Pascal 和 Delphi 在 PC 上运行。如今,我使用 Mac 进行 iOS 和 macOS 开发,但它从未真正在我身上成长。我并不是说 Windows 是完美的——远非如此——但我更习惯于它的怪癖。我无法习惯 macOS 上的那些。
你希望被人记住的一件事是什么?
我的帽子!
最好的开发者/黑客/技术/极客电影是什么?
最好的开发人员书籍怎么样?《银河系漫游指南》。
说到电影,我可能会说回到未来和星球大战:新希望,但科幻系列是最好的。很难给它们打分,因为我喜欢的每一个都是独一无二的:布莱克 7、太空堡垒卡拉狄加、星际迷航、星际之门……
任何开发人员都应该看到:____________________________
一台电脑!
如果拍一部关于你生活的电影,你想让谁扮演你?
1995年的安吉丽娜朱莉。
你有一个人们可以访问的网站,如果有,它是什么?
如果您使用 Twitter,您的 Twitter 句柄是什么?
@达利贾普