」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Claude Sonnet 將 C# 遷移到 Python。

使用 Claude Sonnet 將 C# 遷移到 Python。

發佈於2024-11-03
瀏覽:196

Migrating C# to Python with Claude  Sonnet.

我承擔了一項相當具有挑戰性的任務。也就是說,將一些醜陋的企業 C# 程式碼轉換為 Python。在深入研究之前,我覺得我需要做一些解釋。

這個 C# 專案充當某些機器學習模型的資料管道層。聽到數據,你首先想到的應該是Python。不幸的是,情況並非如此,為了讓它變得更好,它使用了 Apache Spark 的 .NET 擴充功能。將其遷移到 Python 是有道理的,因為它使用相當非標準的技術來解決問題,這使得招募未來的人才相當困難。還有其他明顯的問題,在其他企業 OOP 語言中也很常見,例如多層抽象、無所不在的繼承、控制反轉,以及您在資料管道中不做的事情。為了進一步助長魔鬼,原來的承包商/顧問團隊(因為除了一些企業顧問之外,還有誰會使用 C#)將於下個月離開。

順便說一句,我使用Neovim,自從我拿到預覽版本以來,我已經使用Github Copilot 近兩年了,還有Copilot Chat(技術上是ChatGPT),所以我絕不是一個完全的新手,當它涉及法學碩士和代碼。

肉!

使用 Claude 3.5 編寫程式碼感覺如何,有好的、壞的和醜陋的部分。但大多數情況下,即使您能夠從頭開始編寫相同的功能,您也不知道發生了什麼。

好的

Claude 3.5 往往會產生令人驚訝的正確結果,但是,有時它會嘗試變得聰明,但會失敗,但您可以指導它解決問題。總的來說,它是提問的好夥伴,對我來說,因為我有嚴格的工作流程,而且我確實付出了很多努力來製作帶有大量示例和邊緣情況的複雜提示,所以我非常滿意。我可以學習 C# 課程並將重要部分翻譯成 Python,只需要很少的額外指示。

不好的

我通常可以寫 12 小時的代碼,偶爾上廁所,補充我的水壺。是的,當我真正投入其中時,我不會感到飢餓。和克勞德在一起時,我確實進入了心流狀態,但大約三個小時後,我感覺死了。在這3 小時內,我確實產生了很多程式碼,而且我感覺很有成效,但這就像不停地進行程式碼審查、要求更改,而且大多數情況下,如果生成的內容有效,則不會查找文件.

醜陋的

如果您是編碼員,您可能在某種程度上熟悉您編寫的程式碼。這種熟悉感往往會隨著時間的推移而消失,但如果您在程式碼庫上工作了足夠長的時間,您就會熟悉周圍的情況。使用 LLM 產生的程式碼,這種情況就不會發生。我對發生的事情知之甚少。幾天來,我確實編寫了很多程式碼,審查了每一行,時不時地要求進行一些更改,但最終我幾乎不知道到底發生了什麼。最後,程式碼庫感覺就像一個陌生人,不是我寫的。更糟的是,實際的程式碼風格不一致,你可以告訴appart哪些檔案是同一天寫的,感覺像是不同的人寫的。

外賣

我花了很多時間來審查、重新設計、調整這個完整的 LLM 編碼方法,但大多數時候的結果只是程式碼,這在某種程度上有效,但你不知道為什麼或如何。最大的問題是:

最終得到一個你幾乎沒有依戀的程式碼庫是否值得,它立即感覺就像你一年前與一次想像中的同事一起寫的。

總而言之,我確實覺得我產生了更多程式碼,但品質比平常低。在某些情況下,這種較低的品質是合理的,特別是如果您不在乎的話。但我擔心的是,時間即將到來,每個程式碼庫都將在創紀錄的時間內成為「遺產」。

版本聲明 本文轉載於:https://dev.to/n1o_c0rtx/migrating-c-to-python-with-claude-35-sonnet-4676?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_rename() runkit_function_redefine() //重新定義'this'以返回“新和...
    程式設計 發佈於2025-05-26
  • Java字符串非空且非null的有效檢查方法
    Java字符串非空且非null的有效檢查方法
    檢查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。 isement(Isement() trim whitespace whites...
    程式設計 發佈於2025-05-26
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-05-26
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-05-26
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-05-26
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-05-26
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-05-26
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-05-26
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-05-26
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-05-26
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-05-26
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-05-26
  • 如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    如何解決AppEngine中“無法猜測文件類型,使用application/octet-stream...”錯誤?
    appEngine靜態文件mime type override ,靜態文件處理程序有時可以覆蓋正確的mime類型,在錯誤消息中導致錯誤消息:“無法猜測mimeType for for file for file for [File]。 application/application/octet...
    程式設計 發佈於2025-05-26
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-05-26
  • Python中嵌套函數與閉包的區別是什麼
    Python中嵌套函數與閉包的區別是什麼
    嵌套函數與python 在python中的嵌套函數不被考慮閉合,因為它們不符合以下要求:不訪問局部範圍scliables to incling scliables在封裝範圍外執行範圍的局部範圍。 make_printer(msg): DEF打印機(): 打印(味精) ...
    程式設計 發佈於2025-05-26

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3