Tại thời điểm nào tôi có thể nói rằng tôi đã học được một ngôn ngữ?


67

Trong vài năm lập trình, tôi đã chơi mọi thứ từ Ruby đến C ++. Tôi đã làm mọi thứ, từ việc chỉ học cú pháp cơ bản (Ruby) đến hoàn thành một số dự án lớn (đối với tôi) giúp mở rộng khả năng của tôi với ngôn ngữ. Với sự đa dạng này (và thực tế là việc học một ngôn ngữ không bao giờ dừng lại), khi nào tôi có thể nói tôi biết (hoặc đã học) một ngôn ngữ?


12
Tôi nghĩ rằng từ bạn đang tìm kiếm là "thông thạo" một ngôn ngữ, "đã học" trong ngữ cảnh này hơi lạ.
Pieter B

7
"Các từ có nghĩa là: khi bạn có nghĩa, bạn có thể quên các từ." - Zhuangzi
jfrankcarr

9
Khi bạn không phải hỏi câu hỏi này, bạn sẽ học được những gì bạn cần biết ...

1
@JarrodRoberson Đây có phải Zhuangzi cũng nói vậy không?
jadkik94

2
Theo LinkedIn, có rất ít ngôn ngữ lập trình trong sơ yếu lý lịch kỹ năng của bạn ... Theo LinkedIn của tôi, những người đã xem mã Java trước khi cảm thấy thoải mái khi liệt kê nó trong phần kỹ năng của họ.
Chris Dale

Câu trả lời:


70

Tại thời điểm nào bạn có thể nói rằng bạn đã "học" một ngôn ngữ như tiếng Anh hoặc tiếng Pháp? Tôi nghĩ rằng hầu hết mọi người sẽ chấp nhận rằng bạn đã học một ngôn ngữ khi bạn có thể sử dụng nó để giao tiếp. Bạn không cần phải biết từng từ hoặc hiểu mọi thành ngữ, nhưng bạn nên biết hầu hết các tập hợp con (khá nhỏ) của ngôn ngữ mà mọi người sử dụng trong cuộc trò chuyện hàng ngày. Có "học" một ngôn ngữ đến mức đó, bạn có thể tiếp tục học nhiều hơn khi bạn sử dụng ngôn ngữ này hàng ngày và tiếp xúc với bản thân ngày càng nhiều ngôn ngữ đó. Khi bạn chết, bạn vẫn sẽ không biết tất cả những gì cần biết về ngôn ngữ, nhưng không ai sẽ nói rằng bạn không bao giờ "học" ngôn ngữ.

Tôi nghĩ vậy, với ngôn ngữ máy tính. Bạn có thể nói rằng bạn "biết" một ngôn ngữ như C ++ hoặc Ruby khi bạn có thể viết các chương trình hữu ích trong đó. Nếu bạn cần định lượng mức độ bạn biết ngôn ngữ, hãy sử dụng các thuật ngữ tương tự mà bạn sử dụng cho ngôn ngữ của con người. Nói "Tôi biết một chút C ++" hoặc "Tôi biết C ++ đàm thoại " hoặc "Tôi thông thạo C ++" có nghĩa là bạn biết vừa đủ để cạo, đủ để hoàn thành những việc hữu ích hoặc bạn là một chuyên gia, tương ứng.


15
Các thuật ngữ đàm thoạilưu loát khá chủ quan và trong khi phù hợp với ngôn ngữ tự nhiên, rất khó để biết ý nghĩa của chúng khi áp dụng vào ngôn ngữ máy tính. Mặc dù vẫn chủ quan, chức năngidomatic có thể hoạt động tốt hơn. Chức năng ngụ ý rằng bạn biết cú pháp đủ tốt để viết các cấu trúc hữu ích, trong khi có một kiến thức thành ngữ ngụ ý rằng bạn không chỉ biết viết bằng ngôn ngữ mà còn biết nó đủ để sử dụng các thành ngữ của ngôn ngữ, chẳng hạn như sử dụng usingtrong C # hoặc b, a = a, bvà máy phát điện trong python. Mặt khác, +1.
Gian hàng đánh dấu

13
@MarkBooth Bất kỳ mô tả nào về điểm số trong bài kiểm tra sẽ có phần chủ quan. Vấn đề là sử dụng sự quen thuộc mà hầu hết mọi người đã có với trình độ hiểu biết về ngôn ngữ của con người như một hướng dẫn sơ bộ về kiến ​​thức về ngôn ngữ máy tính và thực hiện nó theo cách thân thiện mời bạn điều tra thêm. C ++ đàm thoại là viết tắt của "Tôi quen thuộc với những điều cơ bản, nhưng bạn có thể cần giúp tôi với mã tiên tiến, tối nghĩa hoặc khó hiểu."
Caleb

3
Trong khi tôi nghĩ bạn hầu như đúng, tôi nghĩ nhiều người cho rằng họ đã học một ngôn ngữ tự nhiên khi họ vẫn còn ở mức độ khốn khổ. Và nó cũng áp dụng cho những người nói rằng họ đã học ngôn ngữ lập trình.
haylem

Tôi nghĩ rằng câu trả lời của bạn là hoàn hảo, nó thậm chí còn cho thấy mức độ không thể định lượng kiến ​​thức ngôn ngữ. Thật vậy, mặc dù thông thạo có nghĩa là bạn có thể nói về hầu hết mọi thứ, với nhiều lời giải thích như người bản ngữ yêu cầu, nhưng điều này không giải quyết được thực tế là hầu hết người bản ngữ không có một phần mười kiến ​​thức ngôn ngữ mà các nhà văn cũ giỏi (không , không harry potter hay dan brown, kiểu cũ thực sự khó đọc thứ). Làm thế nào bạn sẽ giải quyết điều đó, trong khi thực tế không ai bận tâm đến việc giải quyết nó cho các ngôn ngữ? và khi thực tế nó ảnh hưởng mạnh đến năng suất trong lập trình?
Mẹ ơi.

1
@Morg. Những gì hoàn toàn rác rưởi. Lập trình cũng giống như giao tiếp với các lập trình viên tương lai (bao gồm cả chính bạn) cũng như nói với máy tính phải làm gì. Chắc chắn, đơn giản ghi một mã có thể không cần phải được truyền đạt tốt, nhưng trong thế giới thực làm cho ý định của bạn rõ ràng để bảo trì trong tương lai của mã này là xa quan trọng hơn nhận được máy tính để làm điều đúng đắn. Dù sao, những bình luận này không còn phục vụ để giúp cải thiện câu trả lời này, vì vậy tôi sẽ đề nghị chúng tôi đưa nó vào Trò chuyện Kỹ thuật phần mềm nếu bạn muốn thảo luận thêm.
Đánh dấu gian hàng

25

Nó phụ thuộc vào người đang hỏi

Người hỏi có thể có một ý tưởng nhất định về mức độ kỹ năng được mong đợi từ một người nói rằng anh ta đã "học một ngôn ngữ".

Về cơ bản, tôi đã gặp hai thang đo nguyên mẫu, qua đó mọi người đánh giá câu trả lời cho câu hỏi "bạn đã học X chưa?"

Đối với hầu hết các mọt sách, đây là một câu hỏi mẹo để loại bỏ các câu hỏi Điều này đã được thể hiện bằng các câu trả lời khác cho câu hỏi của bạn;). Nếu bạn nói rằng bạn đã học nó, bạn thất bại trong việc nhìn thấy phạm vi của nhiệm vụ, đó là "sự hoàn hảo", và tệ hơn nhiều: bạn thất bại trong sự khiêm tốn.

Đối với hầu hết các ông chủ, bạn "đã học được", nếu bạn có thể giải quyết vấn đề của họ , một tiêu chí thường xuyên đã được đáp ứng nếu mã của bạn biên dịch. Trả lời câu hỏi của anh ấy một cách khiêm tốn sẽ dẫn đến việc anh ấy giao nhiệm vụ cho một người đặt câu hỏi cũng có thể là người thân.

Vì vậy, khán giả của bạn là gì?


4
Trong các cuộc phỏng vấn, bạn biết điều đó nếu bạn biết điều đó. Tại nơi làm việc, bạn biết điều đó nếu Google biết điều đó.
asfallows

3
Trong các cuộc phỏng vấn, đó là "tôi biết điều đó" nếu người phỏng vấn đeo cà vạt và đó là "vui lòng xác định 'để biết" "nếu anh ta không làm vậy;). Công bằng mà nói, hầu hết những người phỏng vấn đều hỏi liệu một người "có kinh nghiệm" hay không, tôi dễ dàng trả lời câu trả lời bằng "có"
keppla

18

Tôi nghĩ mọi người đang tập trung vào tính hữu hạn của từ "đã học" trở nên hoàn hảo, điều đó có nghĩa là bạn đã học xong. Và như mọi người đã lưu ý, ngôn ngữ lập trình là những thực thể sống giống như ngôn ngữ nói. Ví dụ, một người đã hoàn toàn làm chủ C # 2 sẽ xem xét C # 3 với LINQ, Lambdas, vartừ khóa, bộ khởi tạo đối tượng / bộ sưu tập và các phương thức mở rộng và thấy rằng nhiều thứ đã thay đổi so với những gì anh ta đã học cho phiên bản trước. Điều tương tự cũng xảy ra với C # 4 với await, asynctừ khóa và các cấu trúc ngôn ngữ mới khác.

Và chúng ta chỉ nói cú pháp ở đây. Chúng tôi quên rằng hầu hết các ngôn ngữ được ghép nối với một khung . C # có khung .NET, Java có khung riêng, cũng như Ruby, C ++, PHP và PERL. Hãy nghĩ về khuôn khổ cho một ngôn ngữ là từ vựng và bản thân ngôn ngữ chỉ là cú pháp. Biết ngôn ngữ có nghĩa là bạn biết cách đặt câu trong ngôn ngữ. Biết khuôn khổ có nghĩa là bạn có thể thể hiện bản thân tốt bằng ngôn ngữ. Cuối cùng, một khi bạn biết cú pháp và từ vựng, bạn cần học các thành ngữ để bạn viết mã dưới dạng "người bản ngữ".

Tôi muốn nói có một số cấp độ học tập.

  1. Hello World (bạn có thể viết các chương trình thô sơ nhất.)
  2. Thành thạo (bạn có thể viết các chương trình cơ bản nhưng cần tham khảo trợ giúp trực tuyến thường xuyên)
  3. Thông thạo (bạn có thể viết chương trình trước với một số tài liệu tham khảo cần thiết).
  4. Người bản ngữ (bạn có thể viết các chương trình nâng cao với sự trợ giúp trực tuyến tối thiểu, mã của bạn không thể phân biệt được với mã của người bản ngữ khác).

3
Nitpick: awaitlà từ C # 5, điều mới quan trọng trong C # 4 là dynamic.
Svick

Bạn nói đúng ... Tôi liên tục không biết phiên bản C # nào đi với phiên bản .NET nào
Michael Brown

7

Bạn hiếm khi có thể nói bạn đã học một ngôn ngữ. Điều đó có nghĩa là bạn đã hoàn thành việc tìm hiểu về nó, điều đó thật ... ngu ngốc.

Nói rằng bạn biết một ngôn ngữ là tốt khi bạn có thể viết mã không phá vỡ thành ngữ trong ngôn ngữ (có thể sau một tuần làm mất kiến ​​thức) mà không cần tham khảo cú pháp.


2
Thành ngữ thay đổi, phong cách thay đổi từ nơi này sang nơi khác và thực sự ngôn ngữ tự thay đổi theo thời gian. Nếu bạn không thể nói rằng bạn "biết" hoặc "đã học" một ngôn ngữ như C ++ cho đến khi bạn học xong về nó, thì có rất ít người thực sự có thể tuyên bố đã học C ++.
Caleb

1
@Caleb chính xác.
Michael Brown

3
Nếu bạn học như vậy, thì bạn thậm chí không biết ngôn ngữ mẹ đẻ của mình, điều này cũng thật ngu ngốc (ít nhất là đối với hầu hết mọi người)
superM

@Caleb, tệ hơn thế, nhiều phần của c ++ sẽ tốt hơn khi bị bỏ qua, vì cả hai đều là chỉ ra của Carmack và Torvald - vì vậy .. việc học tất cả các cpp không thực sự có lợi.
Mẹ ơi.

3

Đây là nhiều hơn một yếu tố dựa trên ý kiến. Trong tất cả các thuật ngữ kỹ thuật "Đã học" có nghĩa là có kiến ​​thức đầy đủ về, như trong bạn sẽ được biết là MỌI THỨ ngôn ngữ.

Tuy nhiên, trong thế giới lập trình, tôi tin rằng sẽ tốt hơn nếu bạn có thể lập trình thành thạo ngôn ngữ để hoàn thành mục tiêu / nhiệm vụ. Nó cũng có thể có nghĩa là nếu bạn cảm thấy thoải mái với ngôn ngữ. Chắc chắn bạn có thể ra khỏi đó và lấy bằng sau nhiều năm và đại học, nhưng điều đó chỉ để được chú ý? Bạn xác định khi nào bạn có thể nói bạn đã học một ngôn ngữ.


2

Khi bạn bắt đầu nhận thấy sai sót của nó. Khi bạn bắt đầu học một ngôn ngữ, bạn vẫn thường bận học bây giờ để làm công cụ hoặc tham gia nhiều vào nó để nhận ra nơi nó thất bại (tất nhiên, điều này trừ khi bạn bắt đầu học nó từ quan điểm tiêu cực chỉ để xem nó tệ hơn như thế nào được so sánh với ngôn ngữ yêu thích của bạn cho đến nay). Tôi muốn nói rằng bạn không thực sự biết một ngôn ngữ cho đến khi bạn nhận thức sâu sắc về các lĩnh vực mà nó không thành công.


Tôi không thể đồng ý với điều đó. Nó có thể đúng với ngôn ngữ đầu tiên hoặc hai bạn học - bạn có thể đơn giản là không biết phải tìm gì, do đó, ngay cả những thất bại trong thiết kế tồi tệ nhất cũng không thể phân biệt được với cách làm đúng. Khi bạn đã học được một vài ngôn ngữ, bạn sẽ bắt đầu có thể thấy các lỗ hổng ngôn ngữ ngay sau khi bạn bắt đầu học một ngôn ngữ mới. Nhưng sau đó trong một thời gian trong sự phát triển của bạn, bạn sẽ nhầm lẫn giữa "khác biệt" với "sai". Cho đến khi bạn học một vài ngôn ngữ của từng loại chính (thủ tục, OO, chức năng, khai báo ...) các phán đoán ngay lập tức của bạn sẽ bị nghi ngờ.
Warren Young

2

Câu trả lời cá nhân của tôi cho điều này là khi,

  1. Tôi biết những điều cơ bản để viết một chương trình cấp sản xuất đơn giản.
  2. Tôi đã dành ít nhất 3 giờ liên tục để giải quyết một vấn đề có vẻ đơn giản nhưng không phải.

Từ đó trở đi, tôi sẽ không gọi nó là học, mà thành thạo.


1

Tại thời điểm ứng dụng hoặc thành phần của bạn có thể đọc thư, tức là luật của Zawinski , trong đó nêu rõ:

Mỗi chương trình cố gắng mở rộng cho đến khi nó có thể đọc thư. Những chương trình không thể mở rộng này được thay thế bằng những chương trình có thể. Được tạo bởi Jamie Zawinski (người gọi nó là Luật Phần mềm Envelopmentật) để bày tỏ niềm tin rằng tất cả các chương trình thực sự hữu ích đều phải chịu áp lực để phát triển thành bộ công cụ và nền tảng ứng dụng ( điều ông gửi thư, ông nói, chỉ là một tác dụng phụ của điều đó).

Điều này đã được cập nhật khi RSS trở nên phổ biến thành "... có thể đọc các nguồn cấp RSS" và có thể có thể được cập nhật vào những ngày này thành "... có thể đọc các nguồn cấp dữ liệu Twitter". ;-)


0

Tôi nghĩ rằng bạn đã học một ngôn ngữ khi bạn không nhìn thấy nó. Bạn không thấy các chu kỳ và truy cập dữ liệu, nhưng quy trình làm việc của thuật toán.

Bạn không chơi các thủ thuật với việc truyền tham số và xử lý mảng, macro ma thuật. Bạn không nghĩ mã của bạn là một tài liệu tự tiếp thị để hiển thị cho bạn bè và giáo viên của bạn, nhưng để thể hiện sự hiểu biết của bạn về một vấn đề và ý chí của bạn đối với máy tính theo cách dễ đọc nhất.

Bạn có những thói quen giúp bạn tránh được rất nhiều lỗi chỉ bằng cách tuân theo chúng, như: sử dụng {} khối mã và () trong các biểu thức ngay cả khi bạn chắc chắn rằng "đó sẽ chỉ là một dòng" hoặc "Tôi không ngốc và biết thứ tự ưu tiên nhà điều hành ".

Bạn ngừng đếm có bao nhiêu lớp, mẫu và API khung mà bạn biết. Đây là những gì intellisense, các tài liệu tham khảo và hướng dẫn và Google dành cho. Nhưng khi bạn nhìn vào một vấn đề, bạn sẽ biết ngay phần nào nó có thể được chia, và với những công cụ và thuật toán nào bạn sẽ giải quyết chúng.

Những gì bạn làm công việc , là thanh lịchnhỏ . Bạn thích mã hóa và dễ dàng tìm thấy lỗi của bạn. Vâng, các bậc thầy cũng tạo ra lỗi vì họ là con người - nhưng họ tìm thấy chúng nhanh chóng vì cấu trúc mã của họ dẫn họ đến đúng nơi.

Và cuối cùng nhận ra: bạn đã học cách suy nghĩ, phân tích và giải quyết vấn đề; so với họ, ngôn ngữ thực tế chỉ là thứ yếu, chỉ là hộp quy tắc và công cụ hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.