返回社区

ABAP 与 ABAP

Lars Hvam 住在丹麦哥本哈根,非常喜欢 ABAP 编程语言。他在 Exercism 上搭起 ABAP track 之后,我们约上他,轻松地聊了聊他是怎么进入科技行业的。

在 Youtube 上观看
时长 31分钟

Jonathan: 大家好,欢迎收听。我叫 Jonathan。我是 Exercism 播客的主持人,今天请到了 Lars。Lars,你现在人在哪里?

Lars: 我在丹麦的哥本哈根。

Jonathan: 不错。很好。那是在赤道以北一点。而我现在的位置在赤道以南很远。很高兴你能来参加今天的节目,非常开心能和你聊这一场。那我就不绕弯子,直接开始本周的节目了。Lars,给大家简单介绍一下你自己吧。你是怎么进入科技行业的?又是怎么走到今天这个位置的?

Lars: 嗯,让我想想,我现在在哪,刚才说了,哥本哈根。主要是在 SAP 自定义代码 ABAP 这个领域做咨询。我是怎么走到这一步的?嗯,跟往常一样,说来话长。不过这就是科技。那就聊聊科技这条路吧。我年轻的时候,那是很久以前了。我和我的同卵双胞胎……我有个……

Jonathan: 你有个同卵双胞胎,那我怎么知道今天说话的不是你另一个双胞胎兄弟呢?

Lars: 他做微软那一块的东西。

Jonathan: 好吧,有点吓人。

Lars: 那一类的东西。所以,你要是问他 SAP 的事,他答不上来;他要是问我微软的事,我也答不上来。

Jonathan: 是啊。

Lars: 但我们小的时候,就开始了。在 Commodore 64 上玩,我记得用 BASIC 语言在 Commodore 上写一些非常基础的代码,在一块很小的黑白电视屏幕上。一写就是好几个小时。后来换了新电脑,在 386 和 486 上写 QBasic。再后来升级到 8 MB 内存,当年那可是很了不起的事。对,那是 QBasic,还写过 Pascal。最后转到 Windows 上,写了很多 Visual Basic。嗯,我喜欢 Visual Basic。那是在……九十年代吧。后来又开始折腾 Linux。对。还记得当年 Linux 美好旧时光的人应该知道,有个 themes.org 网站,可以在上面下载各种窗口管理器的主题。特别 Linux 的一件事。我想那是我第一次真正参与到社区里,花时间用 PHP 搭那个网站。对。

Jonathan: 好的,哇。

Lars: 算是给我盖了几个章。Visual Basic,然后读博期间编程。对。

Jonathan: 好的。不错,不错。嗯,那挺好的。

Lars: 后来上了大学,读了个计算机科学的硕士,写各种程序,然后随便找了份小活儿,因为我……得挣钱付房租。写写别的程序。后来就一直在做 SAP ABAP 自定义代码开发,差不多 15 年了。嗯,对。那下一个问题。为什么?为什么一直做这个?因为 ABAP 现在算不上很现代的语言了。它很像 COBOL,但它同时也是一门很有意思的编程语言,因为它非常庞大,有很多不同的语句,很多地方都可能出错。

Jonathan: 好。所以有很多问题要解决,也有很多种调试。是这样吗?

Lars: 对。我通常会说,我做这类工作是因为我真的很喜欢调试,而且有大量旧代码等着你去调,对吧?上周我就在修一个 20 年前的旧程序。我当时想,好,不错不错。而且每次翻看旧程序,就算我干这行很多年了,总还有……一些新的旧东西要学,一些一直在用、至今还在天天跑的老特性,对吧?

Jonathan: 好。所以你是 15 年前开始的。是一直待在同一家公司,还是刚开始接触 SAP ABAP,然后换过不同的公司?

Lars: 现在,我现在有自己的公司,做点有趣的东西,做什么我自己说了算。我也给不少咨询公司做过大量咨询,还当过实习生。所以现在我是自由职业,接一些自由职业的活儿,好再挣点钱付房租。这很重要。

Jonathan: 是啊。听起来付房租是你人生里一个反复出现的主题。

Lars: 对。

Jonathan: 总能找到办法付钱。

Lars: 可还是会花太多时间在开源项目上,不知不觉就跑到某个有挑战的东西上去了。

Jonathan: 好。那你的业务里有一起共事的团队吗,还是基本就你一个人?你每天或者每周的工作是什么样子的?

Lars: 我是单干,有自己的公司。说到协作,我确实会和客户协作,对吧?然后在开源这边,我在开源社区里也有很多好朋友,时不时帮我搞定一些东西。我也会时不时帮帮他们,所以是个双赢的局面。

Jonathan: 是啊。所以如果我没记错的话,Exercism 上的 ABAP 学习轨道其实基本是你一手建起来的,或者说你深度参与其中。跟我们讲讲这方面的情况吧。

Lars: 对。ABAP 学习轨道是由很多社区成员一起做出来的,主要是来自 ABAP 开源项目的一些社区成员。当然,我们有点特殊,得从零开始自己搭客户端,不过那是另一个故事,改天再说。

Jonathan: 是,是,是。

Lars: 就是这样。有很多人给 Exercism 做贡献。不过 ABAP 这条学习轨道有点特殊,对吧?因为它这门编程语言其实很难上手,你没法像下载 Node 这样的 JavaScript 运行时或者 Python 运行时那样。在 ABAP 里你没法很轻松地这么做。最新的做法是用一个 Docker 容器,有 60……我记得是 16 GB。

Jonathan: 16。

Lars: 运行它至少需要 32 GB 内存。真正能轻松拥有这套基础设施的人并不多。而且在 Exercism 这样的基础设施上跑也不现实,我也不清楚。生态系统背后的基础设施是这样,可这些学习轨道,靠的都是一堆小的 Docker 容器,启动、运行代码、检查练习,然后再关掉。

Jonathan: 是啊。

Lars: 而启动一个这么大的 Docker 容器,轻松就要 10 分钟。

Jonathan: 嗯?不会吧,不会吧。确实。

Lars: 所以我们需要另一套办法。幸运的是,我之前一直在做我的静态分析工具,几年前就开始了,它有抽象语法树。所以我们实际上是把这段代码转成 JavaScript 代码,然后在 Node 上跑,再给出反馈。所以我们说,这不是我们官方支持的 ABAP 那门语言。而且像我之前提到过几次的,ABAP 有点特殊,它本身并没有一份像样的官方语言描述。不像其他那些被设计出来的语言。我觉得 ABAP 主要是从七十年代,或者它刚起步的时候,一路演化成现在这样的。所以我们就边走边摸索。

Jonathan: 那这样在你的日常工作里会带来哪些挑战?我猜是因为你每天都得用全新的眼光去看一个问题,还得努力揣摩当初写它的人在想什么,因为你可参考的资料很少。是不是可以说,你能参考的文档很少,所以你……

Lars: 文档是很多,但都不是……只是纯文本,而且并不总是百分之百正确。

Jonathan: 好的。

Lars: 正确的做法是去跑这段代码,看它到底干了什么,对吧?当然,语言里很多东西是准确的。但还有一点,当我们在 SAP 系统里工作和搭东西的时候,通常一个系统里会有好几个开发者,而这一个系统……有 2 亿多行代码,还有 8 万多张数据库表。

Jonathan: 天哪。

Lars: 这挺好的。我就喜欢这种。尤其是当你把所有东西都建得非常紧密的时候,你能做很多很酷的静态分析,把东西串起来;而如果你搞的是微软那样的架构,一切都是松散耦合的。两者各有利弊。

Jonathan: 所以你更偏好单体架构,这么说准确吗?还是说,随你更喜欢哪种都行?

Lars: 对,我确实更喜欢单体。嗯。凭你 BASIC 的老底子,更偏好那种管理方式吧。对,不错。

Jonathan: 遗留代码。对。都是早就存在的东西,那一类的东西。

Lars: 对,我喜欢老东西。挺有意思的,对吧?我通常会说,等我老了,我想去搞 PL/1 或者 APL 编程,就是那一类语言。我不知道,我大概也能在这儿做吧?在某……

Jonathan: 大概吧。我们现在底层什么都有了。来看看都有什么。Abl……你说的是 APL 还是 Abl?

Lars: APL。哦,就是还没有 APL 学习轨道。

Jonathan: 哦,也许这是个机会。

Lars: PL/1 也是。也还没有 PL/1。好吧。好吧。那就是两条学习轨道,社区里某个人可以……

Jonathan: 哦,你现在就要报名了?这……

Lars: 没有。

Lars: 那日常是什么样子的,比如 ABAP 学习轨道?ABAP 学习轨道是对“正确”的一种近似,我们总是努力让它一步步更接近百分之百。所以我们确实会遇到一些人的解法是正确的,但在 Exercism 上就是跑不通,

Jonathan: 好。

Lars: 因为我搭的那套奇怪的流水线。但一步一步,一天一天,它开始能跑起来了。我们也不断地往后台、往 Exercism 的运行器,还有各种地方加越来越多的单元测试。希望有一天它能达到百分之百完美,不过……

Jonathan: 谁知道呢。谁知道从那一刻起会发生什么。那现在,你一周通常和几个客户合作?是一两个、三个,还是能到 10 个?

Lars: 就一两个。

Jonathan: 好。这样有挺长一段时间了吧。

Lars: 对,对。我做咨询已经很多年了。

Jonathan: 主要是集中在哥本哈根,还是疫情期间你有机会远程到更远的地方?你是什么……你经常出差吗?

Lars: 年轻的时候经常出差,但现在我基本就是待在家里做远程工作。

Jonathan: 好。

Lars: 就是……

Jonathan: 是啊,你就让咖啡机一直热着。

Lars: 对。

Jonathan: 让一切都照常运转。那最后……你说你很小就开始编程,从很小的时候就对这类东西感兴趣。编程有没有在某一刻对你来说突然讲通了?有没有某个瞬间你觉得一下子开窍了,还是说它就是你从小自然而然就理解的东西?你会怎么形容?

Lars: 哦,我不知道。我觉得我一直都懂怎么编程,对吧?

Jonathan: 是啊。

Lars: 不过我年轻的时候,一直都是写过程式编程。我记得大学里有一次讲函数式编程和逻辑编程的入门。这是两种完全不同的编程范式。据我所知,有 Prolog。对,有 Prolog 学习轨道。所以还没试过逻辑编程的人,我建议写点 Prolog 程序,Standard ML 大概也有,让你换换脑子,体会一下过程式编程之外的东西。当然还有很多别的可以玩。所以,对,我每天都在学新东西,一直没到那种“开窍”的地步。

Jonathan: 你还在跟各种东西较劲?不是,只是觉得有意思,因为我自己的很多经历都是……我必须沉浸在某种东西里,比如一门语言。然后那些原本陌生的概念突然之间,一夜之间就变了。几乎就是,哦哇,这样一来完全说得通了。我在播客里聊过的其他人也说,对,他们有类似的经历。我问他们是怎么做到的,有人说,哦,有个姑娘说,哦,我就把程序想象成一个故事,把函数当成里面的角色,诸如此类。所以那真的很有意思。不过你是怎么决定就要专注 ABAP 的?只是因为,哦,这能付房租,还是因为我真的喜欢它,比起 JavaScript 之类我更喜欢它?

Lars: 进入编程总是从偶然开始的,对吧?写点 BASIC,写点 Java,都是偶然起步的。而它之所以突出,是因为它是一门非常有挑战性的编程语言,它的不同语句特别多。Java 和 JavaScript 其实并没有很多语句。它们有的是庞大的库。

Jonathan: 好。

Lars: 和 ABAP 一比就很明显。在 ABAP 里,很多库的东西是编程语言本身的一部分;而在 JavaScript 里,你用的是同一种语言结构去调用不同的库。

Jonathan: 好。

Lars: 对。

Jonathan: 好。所以几乎可以说你是偶然发现了 ABAP。那么往后看,未来十年左右……不知道你想不想得那么远,不过。接下来五到十年,在编程和业务上你有什么打算?你有没有一点感觉,哦,这是我想待的位置,这是我想做的事?

Lars: 啊,你永远说不准,对吧?只要我觉得一件事有意思,我就会继续做下去。要是不好玩了,我就放下,去做别的。

Jonathan: 好吧,那这就是……

Lars: ……计划,对吧?在我看来,一件事要能天天做下去,就必须好玩。十年后,菜单上大概还是 ABAP,我觉得。说到底就是这样。我对编程语言和技术挺挑的。我做 ABAP,也做 JavaScript 和 TypeScript,除此之外我尽量不碰别的语言。

Jonathan: 好。那如果我这么说,Lars,你现在必须放下 ABAP 和 JavaScript,得去学另一门编程语言。你有想法会选哪一门吗?好,那我就说吧。

Lars: 对,我们之前聊到过 APL。

Jonathan: 好,对。

Lars: 很酷,非常……这门语言大概比我还老,我不知道,差不多吧。APL 和 PL/1,我觉得这两门都比 ABAP 老。

Jonathan: 好。哇。那为什么会是这两门呢?它们哪里吸引你?

Lars: APL 我其实没怎么试过,但网上有几个模拟器可以玩。里面全是希腊字母,什么都是矩阵、矩阵乘法。我不……它看起来就是很奇怪,对,有点傻。但这恰恰也是它好玩的地方,对吧?总得有点挑战。PL/1 就是另一回事了,不太一样。我也说不准。

Jonathan: 有点神秘,有点……

Lars: 对,也不全是。我喜欢玩那些经典的老东西,而不是所有那些花哨的新东西。所以我大概会说 Rust,不。也许哪天会去搞 Rust,但那更多是因为需要,而不是因为我想。

Jonathan: 是啊。那你有没有注意到,用 ABAP 的人是在减少还是增加,或者说最近这门语言有没有出现复兴的迹象?你怎么看?

Lars: 嗯,这挺难说的。因为 ABAP 是那种在大型跨国公司内部运行的大系统,所以很难拿到真实、准确的公开数字来说明实际情况到底如何。但有传言说,真正精通它的开发者年龄越来越大,正越来越接近退出市场。

Jonathan: 好。

Lars: 就像 COBOL 一样,对吧?它是一门老语言,年轻人觉得它不太好玩,对吧?所以干这行的都是像我这样的老家伙。但也正因如此,我们才做了 ABAP 学习轨道,对吧?我们想让更多年轻人接触这门语言,而 Exercism 是个很好的平台,可以尝试很多东西。上手非常容易。同步、点击、登录,然后就开始写代码。搞定。

Jonathan: 是啊。你有没有注意到,有很多人在做这条学习轨道?ABAP 学习轨道?

Lars: 有。我们现在有将近 5000 名学生。

Jonathan: 哇,太厉害了。是啊。

Lars: 对,今年九月有一场……九月。一场由 SAP 开发者布道师组织的社区代码挑战。目的是把人们拉到平台上,做一些练习,练练我们所谓的内表。在其他语言里……它们通常叫数组,但在我们这儿叫内表,还有嵌套内表,在其他编程语言里通常有另外的叫法。

Jonathan: 是啊。

Lars: 那次活动让我们多了很多新学生。我们也收到了很多反馈,还有 GitHub 上的 bug 和 issue。这也是 ABAP 圈子里不太习惯的一件事。跨多个组织协作。真的在 GitHub 上分享代码,在这个社区里并不常见。

Jonathan: 这只是因为大家一直都很封闭吗?这家公司做自己的事,另一家公司做自己的事,开发者之间也不太交流,各自待在自己的环境里,分享和协作就少一些,还是说有别的什么原因?

Lars: 这也和 SAP 系统的性质有关,因为它是个标准系统。它能为你做任何事,所以通常我帮客户的时候,都是因为客户需要一些特别的东西。

Jonathan: 嗯。

Lars: 而且这特别之处,正是因为他们业务独特。所以这大概也是别的客户用不上、也不会去用的东西,因为每个客户的独特之处都不一样。不过现在已经有一个开源社区在慢慢发展,开始分享代码了,但通常还停留在工具层面。工具,比如日志、错误处理之类的。不过总会走到那一步的。只是在 SAP 的世界里,什么事都得花上五年以上。

Jonathan: 是啊,就为了让一切开始攒起那股劲。这其实是我们每期节目都会问嘉宾的问题之一。你可能看过我发给你的那份文档。我们通常会问,在技术圈里,有哪一个观点或者看法是你坚持、绝不妥协的?或者说,你愿意为之“死守”的那个山头上站着的是什么,好让那件事永远屹立不倒?它可以是那种很傻的,比如如果你是做前端的,我永远先写 CSS、后写逻辑。也可以非常琐碎,或者像“我绝不用 GitHub”这种。都可以,但你得能为自己的观点辩护,或者把它讲清楚。那对你来说,那一个观点是什么?

Lars: 一个,一个。就一个观点?

Jonathan: 好吧。那给你两个。可以两个。对,三个也行。好吧,三个。你可以说三个观点,因为我知道,搞技术的人通常其实一点都不固执己见。

Lars: 对。我想如果要别人来形容我,有时候我对某些事确实观点很强硬,对。所以我的主要观点之一是:不行就说不行,这件事做不了。换个更契合这个解决方案和技术的东西。比如,对 Jenkins 这类工具说不。对 Jenkins 说不。这是我特别喜欢点名的一类工具,谁都不该用,对吧?

Jonathan: 为什么?为什么?这是为什么?理由是什么?

Lars: 让流水线贴近代码要容易得多。所以……我就是觉得它已经过时了。

Jonathan: 好。所以那是一种多余的抽象层,如果你清楚自己在做什么,根本不需要加这一层。

Lars: 对。还有别的工具能把事情做得更好。另一个我喜欢跳过的工具是 Eclipse。在 Java 圈里,要是你回头看 5 到 10 年前,Eclipse 通常是被用来构建 Java 代码的。在我看来,现在已经到了 Eclipse 甚至都不再用来构建 Java 代码的地步。它通常被用在一些大型企业应用上,还有那些 Eclipse 里跑的东西、构建 Eclipse 本身,这些一开始根本不是它的用途。而现在又没多少别的办法做这些事,还有很多别的工具可选。所以 Eclipse 已经黯然失色了。

Jonathan: 好。对,我喜欢这个。那我再让你说一个观点。另一个,第三个观点是什么?

Lars: 空格,或者说空白。我的一个副业项目是给 ABAP 做静态分析。其实在 ABAP 里,我们有各种各样的语句,缩进方式五花八门,大小写、匈牙利命名法,什么都有。对。在文本里某个地方出现两个连续空格,这件事真的会让我受不了。

Jonathan: 这只是因为它打乱了一切,简直就是噩梦吗?

Lars: 它会让你读的时候跑偏,不管是读一段文字还是一段代码。哦,这里两个词之间有两个空格,就……会让我措手不及。

Jonathan: 好好好。那我理一下:Jenkins,把流水线贴近代码。Eclipse,没必要。还有双空格。这样我就已经拿到你三个观点了,而且严重程度似乎还挺不一样的。不,那真的很酷。不,那很棒。对,我觉得你在这些立场上守得挺好。

Lars: 还有,说到持续集成,别把持续集成搞成持续等待。

Jonathan: 好,所以代码一推上去,它就在那儿干等,等着能开 PR 为止,你是这个意思吗?

Lars: ……要让开发者快速拿到反馈,而不是让他们等上一两个小时才有反馈。

Jonathan: 好。那是因为系统上、机制上它是一种保险措施吗?所以才会有那个等待?还是说只是为了暂停一下好让东西被审查,否则为什么……

Lars: 就是架构太差。

Jonathan: 是啊。好。好,有意思。好,今天最后一个问题。希望你到目前为止聊得开心,我想问你的是:这周你对 Exercism 社区有什么建议?如果只能给社区推荐一件事,你会推荐什么?什么都可以。吃寿司。跳进河里。随便什么都行。

Lars: 当然是来试试这条学习轨道。这大概是……

Jonathan: 这个我给你免了。这个不算数。这个不算数,好吧。

Lars: 不过当然,前面也提过几次了,记得要玩得开心。一定要好玩。所以有时候,就算想法有点奇怪,只要好玩,就去试试。看看会怎么样。我聊创建开源项目时通常也这么说。直接跳进去,看看好不好玩。试一试。要是不行,也没关系。那就跳到下一个项目、下一个开源项目或者下一门语言去。

Jonathan: 是啊。

Lars: 因为科技圈里、科技圈外有那么多事情可做,如果你一直都觉得无聊,那真的不值得。

Jonathan: 是啊,不,当然。不,这是个很好的建议。所以,外面的各位,在技术圈里找点乐子吧。最后,非常感谢你今天抽出时间。真的很感激。等我停止录制之后你再留一下,我们最后再聊几句。我只是想说一声非常非常感谢。外面有兴趣的朋友,去看看 ABAP 学习轨道吧。去跑几个练习。去看看你做起来怎么样。如果你想学点那种存在了很久、又重新在重要性和影响力上增长的东西,可以这么说,因为它支撑着很多核心的跨国平台。你会认得的人,你会认得的公司。如果你想了解内幕,那 ABAP 绝对值得一看。Lars,等我们到了,我会把你可能有的所有节目链接都放在下面的描述里。不过在那之前,非常感谢你,我一会儿再找你。对,再次感谢。很感激。

来自我们社区的更多故事

倾听、学习,并从我们的社区成员那里获得启发。