2 điểm bởi GN⁺ 2024-12-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Năm 1843, Ada Lovelace công bố một quy trình tính các số Bernoulli cho Analytical Engine khi cỗ máy này vẫn chưa hoàn thiện, và vì thế trở thành tâm điểm của cuộc tranh luận về “chương trình máy tính đầu tiên”
  • Bảng được công bố cho thấy một bước trong phương pháp xử lý toàn bộ dãy số Bernoulli; giá trị mà Lovelace gọi là B7 tương ứng với số Bernoulli thứ tám theo ký hiệu hiện đại
  • Chương trình trong Note G tinh vi hơn nhiều so với ví dụ 11 phép toán không lặp của Menabrea, với 25 phép toán, vòng lặp lồng nhau và cả ký hiệu theo dõi giá trị biến
  • Trong quá trình dịch sang C, người ta phát hiện phép toán thứ tư v5 / v4 trong bảng gốc phải là v4 / v5; đây có khả năng là lỗi sắp chữ, nhưng cũng có thể xem là bug lâu đời nhất trong lịch sử điện toán
  • Điểm khác biệt của Lovelace không nằm ở danh xưng “lập trình viên đầu tiên”, mà ở việc bà hiểu việc tạo thẻ không chỉ là dịch đơn thuần các biểu thức đại số, mà là một công việc lập trình có thể làm tốt hoặc làm dở

Chương trình năm 1843 chưa từng được chạy

  • Khác với giai thoại sáng lập Microsoft, chương trình của Ada Lovelace không có cơ hội chạy trên một cỗ máy thật
    • Paul Allen và Bill Gates đã thử trình thông dịch BASIC bằng trình giả lập dựa trên đặc tả Intel 8080 khi chưa có Altair, rồi cũng chạy được nó trên Altair thật
    • Lovelace cũng viết chương trình cho một máy tính khi nó mới chỉ tồn tại trên mô tả, nhưng vì Analytical Engine chưa được chế tạo nên chương trình không thể chạy
  • Chương trình của Lovelace thường được gọi là chương trình máy tính đầu tiên trên thế giới, nhưng vị thế đó vẫn còn gây tranh cãi
    • Tranh luận xoay quanh phạm vi và giá trị đóng góp của Lovelace kéo dài đến mức Walter Isaacson gọi đó là một “chuyên ngành học thuật nhỏ”
    • Câu hỏi quan trọng ở đây không phải là đánh giá nhân vật, mà là chương trình được viết năm 1843 đã được thiết kế để hoạt động như thế nào
  • Chương trình vượt xa việc liệt kê các công thức đơn giản
    • Nó cấu thành các nhóm phép toán có thể lặp lại, sử dụng cấu trúc tương ứng với loop
    • Nó đưa vào ký hiệu để theo dõi sự thay đổi trạng thái của biến
    • Có những điểm tương đồng với trải nghiệm viết phần mềm ngày nay

Số Bernoulli và bài toán tổng lũy thừa

  • Chương trình của Lovelace được thiết kế để tính số Bernoulli
  • Nền tảng của số Bernoulli là một bài toán toán học cổ xưa: tính tổng lũy thừa
    • Trường phái Pythagoras đã tìm cách tính 1 + 2 + 3 + ... + n mà không cộng trực tiếp, và thu được công thức n(n+1)/2 bằng cách ghép hai tam giác thành một hình chữ nhật
    • Archimedes quan tâm đến các tổng dạng 1² + 2² + 3² + ... + n² và để lại một lời giải có thể diễn giải bằng hình học
    • Aryabhata công bố Aryabhatiya vào năm 499, trong đó có công thức tổng lập phương
  • Bài toán tổng quát hơn là tìm cách tính tổng dạng 1^k + 2^k + ... + n^k
    • Johann Faulhaber đã tính và công bố các công thức đến lũy thừa 17 vào năm 1631, nhưng không đưa ra nghiệm tổng quát
    • Blaise Pascal tạo ra một phương pháp tổng quát vào năm 1665, nhưng trước hết phải biết cách tính tất cả các tổng lũy thừa thấp hơn
  • Jakob Bernoulli để lại một nghiệm tổng quát thực dụng hơn
    • Ông dùng tam giác Pascal để nhận ra mẫu hình trong các hệ số của đa thức
    • Một phần hệ số được suy ra từ tam giác Pascal, phần còn lại được suy ra từ tính chất tổng các hệ số luôn bằng 1
    • Nhân tử hệ số thứ hai này trở thành dãy số được biết đến là số Bernoulli
  • Phát hiện của Bernoulli không lập tức biến việc tính tổng lũy thừa bất kỳ thành một bài toán dễ
    • Để tính tổng lũy thừa bậc k, cần biết các số Bernoulli đến bậc k
    • Mỗi số Bernoulli được tính dựa trên các số Bernoulli trước đó
    • Dù vậy, tính một dãy Bernoulli dài vẫn dễ hơn nhiều so với lần lượt suy ra từng công thức tổng lũy thừa

Hai cỗ máy tính toán của Babbage

  • Charles Babbage thiết kế hai loại máy tính cơ khí
    • Loại thứ nhất là Difference Engine
    • Loại thứ hai là Analytical Engine, ngày nay được biết đến như một máy tính cơ khí
  • Difference Engine không phải là máy tính, mà là một cỗ máy chỉ thực hiện phép cộng và phép trừ
    • Babbage không hài lòng vì các bảng logarit thời đó có nhiều lỗi, và muốn tạo bảng logarit bằng máy móc
    • Phương pháp sai phân chia nhỏ của Gaspard de Prony chia quá trình lập bảng logarit thành các bước nhỏ chỉ cần cộng và trừ
    • Đa thức có thể được dùng để xấp xỉ hàm logarit và hàm lượng giác
  • Difference Engine ánh xạ từng cột của bảng sai phân vào một cột bánh răng vật lý
    • Mỗi bánh răng là một chữ số thập phân, và cả một cột biểu diễn một số thập phân
    • Nó có 8 cột, nên có thể lập bảng cho đa thức đến bậc 7
    • Con người đặt giá trị ban đầu rồi quay tay quay để sai phân hằng được truyền sang cột tiếp theo
  • Babbage đã chế tạo và trình diễn một phần Difference Engine, nhưng không hoàn thiện được toàn bộ cỗ máy
    • Ông không tìm được nhà chế tạo có thể làm đủ số bánh răng cần thiết với độ chính xác đủ cao
    • Một Difference Engine hoạt động được chỉ được chế tạo vào thập niên 1990, sau khi gia công chính xác trở nên khả thi
  • Analytical Engine được hình dung là một cỗ máy mạnh mẽ và linh hoạt hơn nhiều
    • Nó dùng các cột bánh răng giống Difference Engine, nhưng dự kiến có hàng trăm cột trở lên
    • Có thể lập trình bằng thẻ đục lỗ như Jacquard Loom
    • Có thể thực hiện không chỉ cộng và trừ, mà cả nhân và chia
    • Một bộ phận gọi là “mill” được sắp xếp lại theo phép toán, đọc toán hạng từ các cột lưu trữ và ghi kết quả vào cột khác

Bài báo của Menabrea và các chú thích của Lovelace

  • Babbage gặp Luigi Menabrea, một kỹ sư người Ý và sau này là thủ tướng, tại Turin; Menabrea công bố một bài báo bằng tiếng Pháp vào năm 1842 mô tả tiềm năng của Analytical Engine
  • Lovelace dịch bài báo của Menabrea sang tiếng Anh vào năm 1843
    • Lovelace gặp Babbage lần đầu vào năm 1833 khi 17 tuổi, và bị cuốn hút bởi Difference Engine của ông
    • Bà được giáo dục nhiều về toán học từ nhỏ, và vẫn học toán với Augustus de Morgan sau khi kết hôn và sinh ba con
  • Bài báo của Menabrea trình bày ngắn gọn cách Difference Engine hoạt động và sự vượt trội của Analytical Engine
    • Analytical Engine được giới thiệu là cỗ máy có thể tính tích của hai số 20 chữ số trong 3 phút
    • Bài viết lấy ví dụ một hệ phương trình tuyến tính đơn giản và khai triển tích của hai nhị thức, sử dụng “diagrams of development”
    • Các bảng này cũng là chương trình theo cùng nghĩa với chương trình của Lovelace, nhưng chỉ là các ví dụ đơn giản không có rẽ nhánh hay lặp
  • Bản dịch của Lovelace kèm theo các chú thích dài hơn bản gốc, và chính tại đây các đóng góp chính xuất hiện
    • Note A bàn dài về khả năng Analytical Engine là một cỗ máy có thể thực hiện các phép toán toán học tùy ý
    • Bà cho rằng nó có thể hoạt động không chỉ trên các con số, mà còn trên những đối tượng mà các quan hệ cơ bản lẫn nhau có thể được biểu diễn bằng khoa học trừu tượng của phép toán
    • Chẳng hạn, bà đề cập rằng một ngày nào đó nó có thể sáng tác nhạc
  • Note G nổi tiếng vì hai lý do
    • Luận điểm của Lovelace rằng không thể nói Analytical Engine “suy nghĩ” về sau được Alan Turing gọi là “Lady Lovelace’s Objection”
    • Đồng thời, để cho thấy cỗ máy có thể xử lý các bài toán rất phức tạp, bà đưa vào một chương trình tính số Bernoulli

Cấu trúc thực tế của chương trình Note G

  • Toàn bộ bảng của Lovelace là một dạng “diagram of development” mở rộng; có thể xem ảnh gốc tại đây
  • Chương trình gần với một danh sách phép toán được chỉ định bằng ký hiệu toán học thông thường
    • Có vẻ Babbage hay Lovelace chưa tiến đến bước tạo ra thứ như tập opcode cho Analytical Engine
  • Lovelace mô tả cách tính toàn bộ dãy Bernoulli đến một giới hạn nào đó, nhưng chương trình bà trình bày dưới dạng bảng chỉ minh họa một bước trong đó
    • Đối tượng tính toán là giá trị Lovelace gọi là B7
    • Theo ký hiệu toán học hiện đại, đó là số Bernoulli thứ tám
    • Biểu thức có dạng B7 = -1(A0 + B1A1 + B3A3 + B5A5)
  • Mỗi hạng tử trong biểu thức này biểu diễn một hệ số của một đa thức tổng lũy thừa cụ thể
    • Lũy thừa tương ứng là 8, và công thức tổng lũy thừa bậc 8 của các số nguyên dương là nơi số Bernoulli thứ tám xuất hiện lần đầu
    • B1 đến B7 là các số Bernoulli khác nhau theo cách đánh chỉ mục của Lovelace
    • A0 đến A5 là các nhân tử hệ số mà Bernoulli có thể tính bằng tam giác Pascal
    • Chương trình của Lovelace dùng n = 4
  • Bản dịch sang C được cung cấp dưới dạng gist
    • Trước tiên nó tính A0B1A1
    • Sau đó đi vào một vòng lặp được lặp hai lần để tính B3A3B5A5
    • Sau khi tính từng tích, nó cộng với các tích trước đó để cuối cùng thu được tổng đầy đủ

Vòng lặp, trạng thái biến và bug lâu đời

  • Bản dịch sang C cho thấy rõ tầm nhìn đi trước thời đại của chương trình Lovelace
    • Chương trình gốc không có đúng một vòng lặp while, nhưng Lovelace đã tạo các nhóm phép toán và chỉ định bằng chú thích khi nào cần lặp lại
    • Bản dịch C có hai vòng lặp while, trong đó một vòng nằm lồng trong vòng kia
    • v10 trong bản gốc và bản dịch C hoạt động như một biến đếm giảm dần qua mỗi lần lặp
  • Bảng của Lovelace dễ theo dõi sự thay đổi trạng thái hơn bảng của Menabrea
    • Có một cột tên là “Indication of change in the value on any Variable”
    • Mỗi biến được gắn một chỉ số trên để biểu thị các giá trị liên tiếp mà biến đó giữ trong quá trình chạy chương trình
    • Chỉ số trên 2 nghĩa là giá trị được gán lần thứ hai kể từ khi chương trình bắt đầu
  • Khi chuyển sang C và chạy, ban đầu kết quả bị sai; nguyên nhân không nằm ở mã dịch mà ở bảng gốc
    • “diagram of development” của Lovelace ghi phép toán thứ tư là v5 / v4
    • Thứ tự đúng là v4 / v5
    • Đây có khả năng không phải là lỗi trong chương trình Lovelace tạo ra, mà là lỗi sắp chữ
  • Jim Randall cũng dịch chương trình của Lovelace sang Python và chỉ ra cùng lỗi chia đó cùng hai vấn đề khác
  • Những bug nhỏ trong chương trình gốc phù hợp với cách diễn giải rằng Lovelace đã cố viết một thứ gần với chương trình thực sự, chứ không chỉ là một bản trình diễn đơn giản

Ranh giới của danh xưng lập trình viên đầu tiên

  • Nói rằng Lovelace đã viết hoặc công bố “chương trình đầu tiên” không hoàn toàn chính xác
    • Menabrea đã công bố các “diagrams of development” một năm trước bản dịch của Lovelace
    • Babbage cũng viết hơn 20 chương trình chưa công bố
    • Tùy cách định nghĩa chương trình là gì, điều này vẫn còn gây tranh cãi
  • Chương trình công khai của Lovelace vượt xa những gì đã được công bố trước đó
    • Chương trình dài nhất mà Menabrea đưa ra có 11 phép toán
    • Các ví dụ của Menabrea không có vòng lặp hay rẽ nhánh
    • Chương trình của Lovelace gồm 25 phép toán và vòng lặp lồng nhau, do đó bao gồm cấu trúc rẽ nhánh
  • Menabrea cho rằng khi cỗ máy được hoàn thiện, khó khăn sẽ giảm xuống còn việc tạo thẻ; các thẻ chỉ là bản dịch của biểu thức đại số, nên có thể dễ dàng giao cho người vận hành thực hiện bằng một ký pháp đơn giản
  • Babbage và Menabrea chủ yếu tập trung áp dụng Analytical Engine vào các bài toán tính toán toán học mà họ quan tâm
  • Lovelace cho rằng Analytical Engine có thể làm được nhiều việc hơn Babbage hay Menabrea tưởng tượng, và hiểu rằng “tạo thẻ” không phải là một công việc phụ đơn giản, mà là một công việc lập trình có thể làm tốt hoặc làm dở

1 bình luận

 
GN⁺ 2024-12-17
Các ý kiến trên Hacker News
  • Dấu hiệu thật sự của một chương trình không tầm thường là nó không chạy ngay lần thử đầu tiên
    Thật đáng kinh ngạc khi Babbage, sau khi nản lòng vì thời đó chưa có công nghệ gia công chính xác hàng loạt để chế tạo một cỗ máy đơn giản, lại thiết kế một hệ thống mới phức tạp hơn thêm một bậc độ lớn và đi tới tận Ý để tìm năng lực chế tạo tiên tiến hơn

    • Tôi từng có một nhân viên như vậy
      Khi định làm gì đó mà bị kẹt, anh ta bắt đầu bằng việc tự làm công cụ cho mình; có lần, vì không thích phông chữ tích hợp ở cỡ điểm rất nhỏ, anh ta đã tự làm phông chữ của riêng mình
      Anh ta là kỹ sư giỏi nhất tôi từng biết, nhưng tôi luôn phải để mắt để anh ta không sa vào những “hang thỏ”
    • +1 cho lịch sử Babbage/Lovelace, nhưng ngay cả khi hai sự kiện đó đều đúng, cũng khó nói rằng Babbage đã chọn hệ thống phức tạp hơn và chuyến đi Ý như “con đường tốt nhất” vì thiếu gia công chính xác
      Tim Robinson cũng từng nói rằng “nếu Meccano của thập niên 1920 tồn tại sớm hơn 100 năm, Babbage đã hoàn toàn thành công”, và tôi nghĩ ông ấy về cơ bản giống một người làm phần mềm bị ném vào phần cứng bởi những ý tưởng đi trước mức khả thi trong thực tế
      Ngoài việc thiếu cảm giác về kinh doanh và lập kế hoạch dự án, không thể thu hẹp phạm vi hoặc từ bỏ độ chính xác 10 chữ số, ông còn liên tục nghĩ ra rồi đuổi theo các ý tưởng tốt hơn và sa vào hang thỏ; việc khi còn trẻ đã nhận nhiều giải thưởng chỉ nhờ đề xuất Difference Engine hẳn cũng khiến ông khó bỏ cuộc ngay cả nhiều thập kỷ sau
      Việc vướng vào chính phủ cũng là một trục lớn của bi kịch. Giới quý tộc khinh thường và không tin chính phủ, chính trị; tầng lớp dưới cũng không tin vì chính phủ chưa từng giúp họ mấy, nhưng Babbage thuộc tầng lớp trung lưu, rất dễ có quan niệm yêu nước về chính phủ, nên dường như ông nghĩ mình dâng phát minh cho “quốc gia” và chính phủ phải đền đáp
      Ông không hoàn thành được Difference Engine, nhưng hỏi chính phủ rằng liệu có thể dùng thêm tài trợ để hiện thực hóa Analytical Engine tốt hơn không, và chính phủ đã do dự suốt 20 năm. Ngay cả khi chính phủ đề nghị trả lại phát minh, ông cũng từ chối
      Có lẽ do ảnh hưởng của nhiều giải thưởng, ông dường như cũng bám chặt vào bản sắc rằng mình là “người thông minh”; có giai thoại rằng ông từ chối đề nghị làm giám khảo giải thưởng cùng Faraday vì cho rằng mình phải là giám khảo duy nhất. Thái độ như vậy rất có thể cũng khiến ông trôi về những ý tưởng kiểu thiên tài viển vông hơn là triển khai thực dụng
      The Thrilling Adventures of Lovelace and Babbage của Sydney Padua có vẻ là một cuốn sách được nghiên cứu rất kỹ; tôi chưa đọc nhiều phần chính, nhưng đã đọc kỹ phần phụ lục và có thể khuyên đọc
    • Câu “một chương trình không tầm thường thì không chạy ngay lần thử đầu tiên” không đúng
  • Bài viết thật sự rất hay. Ở phần mở đầu, tôi ấn tượng với việc Lovelace suy nghĩ sâu về cách tổ chức các phép tính thành những nhóm có thể lặp lại, qua đó phát minh ra vòng lặp, rồi nhận ra tầm quan trọng của việc theo dõi trạng thái khi biến thay đổi và tạo ra ký pháp để biểu thị những thay đổi đó
    Từ góc nhìn của một lập trình viên, thật đáng ngạc nhiên là công việc Lovelace làm giống trải nghiệm viết phần mềm ngày nay đến mức nào; phần giải thích rằng bà thiết kế nó để tính các số Bernoulli cũng đủ chi tiết để hiểu được bà đã làm gì
    Nếu còn sống ngày nay, tôi có cảm giác bà sẽ đang vật lộn với một vấn đề nào đó bằng Rust ở cuối hành lang, và rất có thể sẽ cực kỳ ưa chuộng ngôn ngữ kiểu tĩnh

    • Dù Ada xứng đáng được công nhận đến đâu về kỹ thuật lập trình, điều luôn nổi bật nhất là khả năng nhìn thấy bức tranh lớn của tính toán
      Điểm cốt lõi là bà thấy rằng Analytical Engine có thể tác động không chỉ lên các con số, mà còn lên những đối tượng khác có thể được biểu diễn bằng các quan hệ của khoa học thao tác trừu tượng; chẳng hạn nếu các quan hệ cơ bản của hòa âm và sáng tác được biểu diễn theo cách đó, thì máy có thể tạo ra âm nhạc tinh vi với độ phức tạp và độ dài bất kỳ
      Vào năm 1842, trước khi máy tính lập trình được thực sự xuất hiện cả một thế kỷ, chỉ dựa trên mô tả về nguyên mẫu máy tính cơ khí mà nghĩ được như vậy thì đúng là một pha hack xuất sắc
    • Ký pháp để theo dõi trạng thái khi biến thay đổi đặc biệt gây chú ý vì trông rất giống dạng gán đơn tĩnh
      https://en.wikipedia.org/wiki/Static_single-assignment_form#Benefits
      Ngay cả ngày nay nó vẫn gần với kỹ thuật hiện đại, vậy mà bà đã có nó từ 180 năm trước
  • Chi tiết Paul Allen và Bill Gates tạo trình thông dịch BASIC cho Altair mà không có Altair thật, kiểm thử nó trên máy tính Harvard bằng một trình giả lập được viết chỉ dựa trên đặc tả Intel 8080, rồi khi chạy lần đầu trước chiếc Altair thật thì nó hoạt động đúng, thật thú vị
    Nếu vậy, tôi nghĩ những anh hùng thầm lặng thật sự ở đây chẳng phải là các kỹ sư Intel, những người đã viết bản đặc tả chính xác đến mức phần mềm chạy trên trình giả lập được tạo chỉ từ đặc tả đó cũng chạy trơn tru trên phần cứng thật, hay sao

    • Năm 1976, trong công việc lập trình thương mại đầu tiên của mình, tôi đã sửa một trình giả lập 8008 viết bằng Fortran để nó chạy như trình giả lập 8080 trên một máy tính mini Data General
      Công việc là để một lập trình viên khác, người đang viết firmware 8080 cho máy vẽ, có thể debug mã; tôi nhớ mã nguồn trình giả lập đó đến từ thứ gọi là INTERP/8 8008 của Intel. Nhìn các bài viết trên mạng thì có vẻ Allen và Gates cũng dùng nó
  • Tôi nghĩ phần tuyệt nhất là công việc thực tế nằm trong các “ghi chú” bà thêm vào bản dịch
    Tham khảo: https://upload.wikimedia.org/wikipedia/commons/c/cf/Diagram_for_the_computation_of_Bernoulli_numbers.jpg
    https://en.wikipedia.org/wiki/Note_G
    Bài viết cũng tham chiếu tài liệu này, vốn chuyển công việc của bà sang Python: https://enigmaticcode.wordpress.com/tag/bernoulli-numbers/

    • Một nửa bài viết nói về Note ANote G
  • Đọc đến đoạn nói rằng việc chuyển chương trình của Lovelace sang C trông cũng không quá xa lạ, ngoại trừ chuyện đầy những biến có tên chẳng giúp ích gì, tôi thấy tác giả rõ ràng chưa từng gặp đồng nghiệp của tôi

    • Điều đó làm tôi nhớ đến hồi học lập trình ở trung học, bạn cùng làm dự án đặt tên biến bằng những từ thô thiển và tục tĩu nhất nảy ra trong đầu
      Tôi cũng chẳng phải người đặc biệt bảo thủ, nhưng tất nhiên cậu ta lần nào cũng không nhớ biến “butts” dùng để làm gì, và rốt cuộc cũng không hiểu vì sao chính code của mình cứ làm cậu ta rối
    • Hoặc có vẻ tác giả chưa từng làm việc với các nhà toán học, vật lý hay kỹ sư biết lập trình. Ngay khi thấy câu đó, tôi đã nghĩ: “đúng kiểu quant
      Cha tôi là kỹ sư hóa học, học lập trình bằng FORTRAN; thời đó tên biến phải là 1 chữ cái và tối đa 2 chữ số. Sau này ông học Basic, nhưng code về mặt tư duy vẫn là FORTRAN nên thói quen ấy còn nguyên
      Lúc đầu tôi tưởng chỉ cha tôi như vậy, nhưng mãi về sau khi làm ở Wall St và làm việc với các quant chép code từ Numerical Recipes, tôi thấy trong C họ cũng y hệt
  • Thật thú vị khi thấy Menabrea chủ yếu nhìn Analytical Engine như một công cụ tự động hóa những “phép tính dài và khô khan”, để năng lực trí tuệ của các nhà khoa học xuất sắc được dùng cho tư duy cao cấp hơn; điều đó cho thấy diễn ngôn về tự động hóa dai dẳng đến mức nào
    Ngày nay người ta cũng nói y hệt về LLM

    • Có lẽ điểm cốt lõi khiến máy tính với tư cách công cụ khác với một thiết bị tiêu thụ rốt cuộc vẫn là tự động hóa những “phép tính dài và khô khan”
  • Tôi tò mò không biết đã có ai tạo máy ảo cho tập lệnh của Babbage và chạy thử chương trình của Ada chưa

  • Ngay thời điểm bài này được đăng cũng từng có thảo luận
    What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - tháng 8/2018, 52 bình luận

  • Hơi lạc đề một chút, nhưng tôi đã tò mò không biết người thời đó gọi bà là gì
    Tên bà là Augusta Ada King và bà là Nữ bá tước Lovelace; tôi thắc mắc liệu khi ấy việc rút gọn tước hiệu để gọi như họ có phổ biến không, hay đó là cách gọi mới xuất hiện gần đây

    • Với trường hợp Bá tước Lovelace, người giữ tước hiệu, thường có cách gọi chỉ bằng địa danh/tước danh
      Sau khi William King-Noel trở thành Earl of Lovelace, ông được gọi là “Lovelace”, còn bà có lẽ được gọi là “Lady Lovelace” trong giới thượng lưu và “Countess of Lovelace” trong ngữ cảnh chính thức
  • Bài viết hay. Đây là lời giải thích rõ ràng nhất tôi từng đọc về việc Ada có tính đột phá theo nghĩa nào và vì sao bà xứng đáng được ghi nhận