2005年,作為“伊拉克自由行動”的一部分,我所在的國民警衛隊被派往伊拉克。我的MOS(軍事專業)是 92A,這基本上是一個后勤供應工作。我負責訂購和收拾機械的零部件,并退還舊器件,管理危險品緊急處理小組,分派/回收任務車輛,并辦理許可證。其實還做一些其他的事情,只是現在不記得了。總之,當時這個系統的核心是一個叫ULLS-G(部隊級物流系統 – 地面)的工具。我說“當時”,是因為我們回來不久后 SAMS-E(標準陸軍維護系統 – 增強型)替換了ULLS-G,它使用了Oracle作為后端數據庫。比起 SAMS-E,ULLS-G簡直就是恐龍。被派遣前,我在軍隊足足使用四年之久,從頭到尾都是噩夢。 ULLS-G是一個DOS應用程序(是的,MS-DOS),我在軍工廠使用的大多數計算機只能運行DOS系統(這時是21世紀初,所以DOS系統很常見)。到我被派遣時,多數計算機都運行WinXP/2K或類似的系統,所以可以使用”MS-DOS兼容模式”運行ULLS-G。
正如我前面提到的,使用ULLS-G是很痛苦的。作為DOS下的應用,你不能使用鼠標,只能通過鍵盤進行交互。記得在任務快結束時,我已經記住了按鍵,甚至不用看鍵盤,只需輸入它們就可完成工作。沒有任何形式的批處理功能,是該系統令人感到可怕的地方。比如說你得打印士兵的許可證,就不得不一個一個去檢查并打印。你得在一個屏幕前,輸入他們的許可證號,加載出許可證,然后打印。我們部隊大約有150名士兵,為了打印所有人的許可證,我不得不逐個查找每個士兵。如果你要為士兵添加一個車輛認證,同樣得逐一去做。其實這還不是最讓人惱火的,因為每次只需處理部分內容。但我們是專門為某一任務成立起來的(我們的士兵分別來自第180炮兵團第1營的四個連,組成了第180炮兵團第1營第1旅部與旅部連),這意味著這個ULLS-G系統里沒有士兵的認證。所以一開始,我不得不手動輸入每個士兵的認證,然后打印出他們的許可證,基本上要花費大半個小時。在正規部隊,情況會更糟糕。離開之前,我們在華盛頓州劉易斯堡有預動員訓練。士兵要進行多項車輛訓練(M-1114, 5-ton, deuce-and-half,等等)。這些都是交錯進行的,所以每次訓練任務結束后,我都不得不添加認證并重新打印許可證。
不用說,我很惱火。我甚至得到消息,到伊拉克后,將會有更多的車輛認證,這意味著我將不得不全部重新添加認證并打印許可證。現在作為一名程序員,我不斷地想發設法簡化工作。我不想坐在那一個一個地添加認證、打印許可證了。一是我懶得弄,二是這件事情效率太低了,所以我決定使這個過程自動化。我做的第一件事就是嘗試找出ULLS-G數據文件的格式。不幸的是,我一點都沒弄出來,主要因為時間不夠 (所有的軍事訓練都在進行)。不過令人意外地是,我偶然發現了一個頁面,上面有ULLS-G的ODBC驅動程序。這意味著我可以運行SQL查詢ULLS-G數據文件。有了這些,我開始編寫Perl腳本查詢數據。我們達到了伊拉克的時候,我有一個可以生成所有士兵文本文件形式許可證的腳本。腳本運行只花了一兩秒,最長的部分就是打印出許可證。但我還沒有完成,所以令人惱火的是不得不手動添加駕照。所以我又寫了一個腳本,以使駕照可以全部一起添加給駕駛員。腳本還有一個配置文件,允許把指定的某種認證添加到某人。
到了部隊以后,我又不得不打印每個人的證件,我仍記得二十分鐘后當我拿著一堆剛剛從打印機打印出來還溫熱著的許可證時,電機中士那疑惑的表情。他問道:“這個需要很長時間嗎?”,于是我開始和他談論腳本,可是當我剛說出幾句關于Perl、SQL和 ODBC 連接時,他就不再聽了,點著頭把許可證放到 TOC,或許他沒有問我太多問題是好事,因為我做的事是不太被批準的,只有取得執照的技術人員(另一種MOS崗位) 才能安裝,至少在部隊眼中,我是不合格的。
在伊拉克時,我發現我們必須每天向TOC發送報告(最終發送到軍營)。這些報告包括車輛的情況(報廢還是完好)和一些其他信息。幾乎所有的部隊都是手動向Excel表中輸入信息,然后打印出來并送到TOC。手動輸入總是出錯,每天早上我都得花20-30分鐘修正報告,確保它是最新的,最后打印出來,送到TOC。我記得有一兩次因為信息出錯被批評了,從那以后變得倍加小心。我又生氣了,這些事情需要有一個更好的方式來做,而且確實是有的。Excel可以使用在Windows中注冊的ODBC連接,而且我已經用ULLS-G的Perl腳本注冊了一個。
所以,我使用Excel宏簡單地復用了同一個連接,這個宏指令可以幫我高效地計算表格中的所有項。棒極了,它能夠自動更新報廢汽車單,同時也包括了其他部隊沒有上報的信息,像所有車輛的服務狀態及其行駛里程。以前的話,當它被從調度返回時,我們不得不手動查找每個車輛的維修狀態,所以說服務狀態位在日常工作中是非常有用的。現在,我只需要查找Excel表格就能了解到需要維護的車輛。
從編程的角度來看,我做的并不是很出色。我只是找到了從ULLS-G數據庫獲取信息的方法。但卻令我的領導印象深刻,尤其是我的班長和電機中士。大概兩三個月后,來了一個新的大隊電機員(如果沒記錯的話是CW2 Lee)。他對我做的事情非常感興趣。有次我演示給他看后,他看著我說“你難道不知道不能這么做嗎?”。一開始我擔心我會有大麻煩,但他臉上卻浮現出了笑容。他告訴我,他不會追究,因為我似乎知道自己在做什么,而且因為我提供了準確的報告,部隊的效率也提高了。
接下來的幾個月很快就過去了,還有一兩個月后就要離開伊拉克了。除了遇到一些小問題,我的腳本和宏一直運行得不錯。快結束時,部隊有一個頒獎典禮。指揮官和軍士長來到調配場發獎項。接到電話時我有點驚訝,我沒期望我會得獎(我的工作地點主要在營地,雖然我覺得我工作得不錯,但沒認為它值得表彰)。授予我陸軍嘉獎獎章(Army Commendation Medal)后,他們和我握了手并祝賀我。在我看到文書前,我認為這僅僅是一個一般性質的“優秀工作”獎。當我閱讀文書,看到因為使用Perl腳本和Excel宏完成工作,班長SSG Lopez將我選為獲獎者時,我很驚訝也很高興。雖然我不是為了得到獎勵而工作,但是自己的工作被贊賞,仍舊是一件很美妙的事情。
這就是我通過寫代碼獲得部隊獎章的故事。
-
代碼
+關注
關注
30文章
4845瀏覽量
69256 -
程序員
+關注
關注
4文章
953瀏覽量
29897
發布評論請先 登錄
相關推薦
阿里云升級通義靈碼AI程序員,全面上線
機械革命發布CODE AI程序員本
AI編程工具會不會搶程序員飯碗
第五屆長沙·中國1024程序員節開幕
京東上萬程序員都AI用它!

程序員節視頻創意大賽,用串口屏贏取千元大獎

程序員節視頻創意盛宴,邀您共襄盛舉!

助力程序員告別困擾已久的夢魘-Bug

GitHub Copilot:你的代碼超級助手!程序員的最強福音

評論