CodeProject 专访:Khaled S. Ali






4.98/5 (17投票s)
欢迎阅读我们 CodeProject 专访系列。在该系列中,我们采访开发人员,了解他们的背景、项目、兴趣和抱怨。本期我们采访的是 Khaled S. Ali,他是喷气推进实验室火星探测器团队的软件工程师。
欢迎阅读我们 CodeProject 专访系列。在该系列中,我们采访开发人员,了解他们的背景、项目、兴趣和抱怨。本期我们采访的是 Khaled S. Ali,他是喷气推进实验室火星探测器团队的软件工程师。
你是谁?
我的名字是Khaled S. Ali,我在喷气推进实验室工作,该实验室隶属于NASA和加州理工学院。
我的官方职位是机器人软件工程师。我是火星探险者号(MER)飞行软件和数据管理团队的负责人,MER 的探测器规划师,以及Axel 机器人项目的程序员。
您做什么?
作为 MER 飞行软件和数据管理团队的负责人,我大部分时间都在调查潜在问题和回答问题。这些问题通常是“如果我们这样做会发生什么?”,“飞行软件在这种情况下会做什么?”,“这个算法到底是如何工作的?”,以及“我们应该采取什么策略来尽快将数据从飞行器下载并删除。”
我负责开发和测试了 MER 飞行软件的最后两个版本,这两个版本分别于 2006 年和 2009 年上传到探测器上。
作为一名探测器规划师,我负责驾驶探测器和操作机械臂。这涉及到编写一系列航天器指令,这些指令实际上是用领域特定语言编写的计算机程序,将在几个小时后在探测器上执行。
对于 Axel 机器人项目,我正在重写该项目使用的部分CLARAty基础设施软件,特别是数学库。
在 MER 项目的主要飞行软件开发阶段,我编写了与航天器巡航和着陆阶段的大部分传感器和推进硬件接口的软件模块。我还负责管理并共同编写了用于确定和传播探测器位置和姿态知识的软件,以及用于将高增益天线对准地球进行通信的软件。
此前,我曾参与过几个不太成功的 NASA/JPL 任务。我是火星极地着陆器(Mars Polar Lander)的机械臂操作团队成员,该着陆器着陆时坠毁。
我还为2001 火星着陆器(2001 Mars Lander)进行了一些软件集成工作,该项目在发射前就被取消了。
此外,我还是月球表面操作试验台(Lunar Surface Operations Testbed)的软件负责人,该试验台用于验证 2010-2011 年Moonrise 任务提案的机器人方面。
我曾参与过几项机器人研究任务,包括自动化植物微繁殖、医疗保健机器人、用于全地形探索的可重构机器人、视觉目标跟踪以及行星表面科学操作模拟。
您的开发环境是什么?
对于 MER 飞行软件,我们是在今天看来非常古老的 Sun Ultra 10(sparcv9 450 MHz)和 Ultra 80(配备四核 sparcv9 450 MHz)系统上进行的开发,运行 SunOS 5.8。当我们仍需要更新 MER 飞行软件时,我们仍然使用这些系统,因为我们希望不改变任何可能导致问题的内容。软件本身运行在RAD6000 处理器(20 MHz)上,该处理器运行在VxWorks 5.3 上,并搭载在Spirit(现已退役)和Opportunity 探测器上。
对于 Axel 项目,我是在一台运行 CentOS 的 Intel Core 2 Duo @ 3.16 GHz 计算机上开发的。
我使用 Vim 来编辑代码,而不是任何 IDE,但我总是会运行 cscope。
目前,我最常使用的语言是 C、C++ 和 Python。
您最讨厌的编码习惯是什么?
我最讨厌的一种情况是注释与代码不匹配。代码经常更新,但注释却未随之更改。这至少可以说是粗心,最糟糕的情况则是令人困惑。
您是如何开始编程的?
在我十一岁或十二岁生日时(我记不清了),我劝说父亲给我买了一台雅达利游戏机。然而,我母亲说服我和父亲,认为给我买一台电脑学习使用会更好。我们最终选择了Atari 800。
在我玩腻了我们所有的游戏后,我决定尝试使用它附带的 Basic 语言卡带。经过一番阅读和尝试,我被迷住了。游戏无法与实际编写软件相比。由于我们没有磁带驱动器(那是唯一的 NVM 形式)也没有打印机,我通常会在写完和调试完程序后,把它们写在笔记本上。这样,如果我以后想再次使用它们,就可以重新输入。
您会对一个新兴的程序员提供什么建议?
学习编程或学习新语言时,请找一本关于该语言的书,并编写一些你工作中并不需要的程序。即使你想不出实际需要的程序,也要这样做。这能让你尝试各种在你工作中可能不允许做的事情。
从一开始就假设你将在学习过程中发现更好的做事方式,并进行重构。使用搜索引擎查找书中介绍的各种内容的示例。幸运的是,有很多人热衷于提供示例并解释他们的方法或技术为何是最好的。请比较这些不同的方法。