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

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

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

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]刪除
最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-26
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-26
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-12-26
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-26
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-26
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-26
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-26
  • 如何在 PHP 中轉換所有類型的智慧引號?
    如何在 PHP 中轉換所有類型的智慧引號?
    在 PHP 中轉換所有類型的智慧引號智慧引號是用來取代常規直引號(' 和")的印刷標記。它們提供了更精緻和然而,軟體應用程式通常會在不同類型的智能引號之間進行轉換,從而導致不一致。智能引號中的挑戰轉換轉換智慧引號的困難在於用於表示它們的各種編碼和字符,不同的作業系統和軟體程式採用自...
    程式設計 發佈於2024-12-26
  • 循環 JavaScript 陣列有哪些不同的方法?
    循環 JavaScript 陣列有哪些不同的方法?
    使用 JavaScript 迴圈遍歷陣列遍歷陣列的元素是 JavaScript 中常見的任務。有多種方法可供選擇,每種方法都有自己的優點和限制。讓我們探討一下這些選項:陣列1。 for-of 遵循(ES2015 )此循環使用迭代器迭代數組的值:const arr = ["a", ...
    程式設計 發佈於2024-12-26
  • 如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    如何在 Python 中有效地暫停 Selenium WebDriver 執行?
    Selenium WebDriver 中的等待與條件語句問題: 如何在 Python 中暫停 Selenium WebDriver 執行幾毫秒? 答案:雖然time.sleep() 函數可用於暫停執行指定的秒數,在 Selenium WebDriver 自動化中一般不建議使用。 使用 Seleniu...
    程式設計 發佈於2024-12-26
  • C++ 賦值運算子應該是虛擬的嗎?
    C++ 賦值運算子應該是虛擬的嗎?
    C 中的虛擬賦值運算子及其必要性雖然賦值運算子可以在C 中定義為虛擬,但這不是強制要求。然而,這種虛擬聲明引發了關於虛擬性的必要性以及其他運算子是否也可以虛擬的問題。 虛擬賦值運算子的案例賦值運算子本質上並非虛擬。然而,當將繼承類別的物件分配給基類變數時,它就變得必要了。這種動態綁定保證了呼叫基於物...
    程式設計 發佈於2024-12-26
  • JavaScript 中的 Let 與 Var:範圍和用法有什麼區別?
    JavaScript 中的 Let 與 Var:範圍和用法有什麼區別?
    JavaScript 中的Let 與Var:揭秘範圍和臨時死區在ECMAScript 6 中引入,let 語句引發了開發人員的語句引發了開發人員的語句引發了開發人員的語句困惑,特別是它與已建立的var 關鍵字有何不同。本文深入研究了這兩個變數聲明之間的細微差別,重點介紹了它們的作用域規則和最佳用例。...
    程式設計 發佈於2024-12-26
  • 如何使用 JavaScript 用逗號分割字串,忽略雙引號內的逗號?
    如何使用 JavaScript 用逗號分割字串,忽略雙引號內的逗號?
    使用JavaScript 用逗號分割字串,忽略雙引號內的逗號解決用逗號分割字串同時保留double 的挑戰-引用段,我們可以在JavaScript 中使用正規表示式。方法如下:var str = 'a, b, c, "d, e, f", g, h'; var arr = str....
    程式設計 發佈於2024-12-26
  • JavaScript 函數表達式中的感嘆號 (!) 有何作用?
    JavaScript 函數表達式中的感嘆號 (!) 有何作用?
    揭示函數表達式中感嘆號的用途在JavaScript 中,執行程式碼時,前面遇到感嘆號(!)函數可能會引發一些問題。讓我們深入研究一下它的功能及其在語法中的作用。 JavaScript 的語法規定,以「function foo() {}」形式宣告的函數是函數聲明,需要呼叫才能執行。然而,預處理帶有感嘆...
    程式設計 發佈於2024-12-26
  • 如何在 Go 中以程式設計方式存取文件組 ID (GID)?
    如何在 Go 中以程式設計方式存取文件組 ID (GID)?
    在Go 中訪問文件組ID (GID)在Go 中,os.Stat() 函數檢索文件信息,包括其系統資訊-特定屬性。此資訊儲存在 syscall.Sys 介面中。雖然列印介面直接顯示 GID,但以程式設計方式存取它會帶來挑戰。 要以 Linux 系統的字串形式取得 GID:file_info, _ :=...
    程式設計 發佈於2024-12-26

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

Copyright© 2022 湘ICP备2022001581号-3