Là mã hóa quan trọng để giỏi khoa học máy tính? Có nên thực hiện thuật toán để biết rõ về nó?
Tôi nhớ một thành ngữ của giáo sư cs rằng " Tôi không bao giờ viết mã"
Là mã hóa quan trọng để giỏi khoa học máy tính? Có nên thực hiện thuật toán để biết rõ về nó?
Tôi nhớ một thành ngữ của giáo sư cs rằng " Tôi không bao giờ viết mã"
Câu trả lời:
Bạn sẽ không thực sự biết các thuật toán tốt cho đến khi bạn mã hóa nó.
Mã hóa không quan trọng đối với giáo sư của bạn, nhưng bạn cần lưu ý rằng anh ta không được trả tiền để làm những việc DO. Anh ta được trả cho SAY những thứ (và những thứ VIẾT.)
Tôi là một cựu giáo sư toán học, vì vậy tôi hiểu rất rõ về năng động này.
Nếu bạn muốn đi theo con đường của anh ấy, và trở thành một nhà khoa học máy tính lý thuyết, thì đúng vậy, mã hóa có tầm quan trọng thấp hơn. Nhưng nếu bạn làm vậy, hãy nhớ duy trì sự khiêm tốn, biết rằng tiền lương của bạn được trả bằng các nguồn lực kiếm được từ những người đã chọn làm việc.
Khoa học máy tính không phải là về máy tính nhiều hơn thiên văn học là về kính viễn vọng
- Edsger Dijkstra
Tôi có xu hướng đồng ý.
Nếu bạn đang nói về việc trở thành một học giả Khoa học Máy tính thuần túy chuyên về các khái niệm Khoa học Máy tính trừu tượng, nền tảng, thì không nhất thiết phải như vậy.
Để bẻ cong một sự tương tự: điều này giống như hỏi liệu mọi nhà khoa học tên lửa ở NASA có phải bay trong không gian để trở thành một "nhà khoa học tên lửa giỏi" hay không. Dĩ nhiên là không. Trở thành một phi hành gia là một phần của ngành công nghiệp bay vũ trụ, và là một phần rất thực tế, nhưng điều đó không có nghĩa là các nhà khoa học mặt đất không quan trọng theo cách riêng của họ.
Điều đó nói rằng, có lẽ là một ý tưởng tốt để ÁP DỤNG thuật toán mà anh ta đã tạo, nếu không thực sự viết nó bằng ngôn ngữ lập trình thực sự. Theo nghĩa này, bạn có thể nghĩ về thiết kế thuật toán như một nhánh của toán học.
Mã hóa không phải là siêu quan trọng để trở thành một nhà khoa học máy tính thực sự. Và suy nghĩ trong mã có thể hạn chế suy nghĩ khi họ tìm cách phát triển các khái niệm trừu tượng hữu ích. Hầu hết các lập trình viên xuất sắc không có các nhóm trí tuệ để phân tích các thuật toán phức tạp hoặc phát triển các khái niệm như ngôn ngữ lập trình, thuật toán tìm kiếm và sắp xếp nâng cao, lý thuyết tự động hữu hạn, lý thuyết điện toán phân tán, R-Plants, giao thức chịu lỗi, giao thức truyền thông đáng tin cậy, kỹ thuật số thuật toán xử lý tín hiệu, lý thuyết mật mã, phân tích hiệu suất và tối ưu hóa, bộ nhớ đệm hiệu quả, giảm bản đồ, giao thức bảo mật đáng tin cậy, v.v. Các lập trình viên và kỹ sư máy tính xuất sắc thường có thể sử dụng các lý thuyết này trong các hệ thống mà họ đang cố gắng xây dựng và thực hiện khá hiệu quả, nhưng đó thực sự là lĩnh vực của kỹ sư hệ thống máy tính hoặc lập trình viên máy tính.
Mã hóa là cực kỳ quan trọng để trở thành một lập trình viên máy tính. Hiểu cách mã hóa các khái niệm trừu tượng hữu ích được tạo ra bởi các nhà khoa học máy tính thành mã làm việc cũng hữu ích.
Một vấn đề lớn trong khoa học máy tính là họ thường phải tìm giải pháp cho các vấn đề toán học có ít tiện ích trong việc giải quyết các vấn đề lập trình ngày nay. Ngay cả khi họ mã hóa một giải pháp, không ai thực sự có thể sử dụng nó. Hãy suy nghĩ về lý thuyết xử lý tín hiệu kỹ thuật số. Nó được phát minh bởi những người như Fourier, Hilbert và Shannon, nhưng ứng dụng cho các vấn đề DSP được vi tính hóa không thể phổ biến rộng rãi cho đến khoảng 20 năm trước.
Vấn đề lớn trong giáo dục máy tính là hầu hết mọi người được dạy bởi các nhà khoa học máy tính sẽ không trở thành nhà khoa học máy tính. Nhưng quá nhiều nhà khoa học máy tính không có được điều này. Mã hóa có thể không quan trọng đối với họ, nhưng nếu bạn ở trong lớp của họ, điều đó gần như chắc chắn sẽ quan trọng với bạn.
Một vấn đề lớn khác trong giáo dục máy tính là nhiều nhà khoa học máy tính thực sự thiếu kinh nghiệm công nghiệp để có ích trong việc giảng dạy phát triển phần mềm. Họ chủ yếu cố gắng dạy điều gì đó mà họ thực sự không biết. Điều đó khiến họ mất uy tín. Những điều quan trọng trong môi trường công nghiệp thường không đăng ký với một số nhà khoa học máy tính này.
Dài và ngắn, mã hóa rất quan trọng đối với hầu hết những người trở thành "nhà khoa học máy tính" bởi vì hầu hết những người đó sẽ trở thành lập trình viên máy tính và kỹ sư hệ thống máy tính.
Phụ thuộc vào trường con mà giáo sư đang ở.
Bất kỳ ai có khả năng phân tích số có lẽ là một người thích Fortran. Bất kỳ giáo sư AI nào cũng sẽ viết mã trong Lisp hoặc Prolog hoặc đại loại như thế.
Trong một số lĩnh vực toán học hơn, thực sự không cần phải viết mã. Bản thân tôi vẫn là một người nghi ngờ.
Nghe có vẻ giống như một chàng trai toán học rời rạc hơn ... chỉ vào toán học và lý thuyết đằng sau khoa học máy tính. Lấy những gì các loại giáo sư nói với một hạt muối.
Tôi sẽ phải nói "Logic là quan trọng"
Bạn chỉ có thể hiểu được lý thuyết nhưng tôi luôn thấy tôi hiểu thuật toán và tốt hơn 1000 lần sau khi mã hóa chúng (ví dụ như Bubble sort so với Quicksort, thật tuyệt khi biết Big-O nhưng nhìn thấy nó trong thực tế với dữ liệu lớn -sets cung cấp cho bạn một sự đánh giá thế giới thực nhất định để đo độ phức tạp tính toán).
Một điều thú vị mà tôi đã tìm thấy là bạn càng nghiên cứu các tham vọng lý thuyết của khoa học máy tính, việc mã hóa trở nên dễ dàng hơn. Tại một số điểm bạn ngừng suy nghĩ về mọi thứ trong một ngôn ngữ cụ thể mà thay vào đó chỉ xem chúng là những khái niệm rộng lớn hơn về tâm lý máy tính.
Điều này giống như hỏi liệu tất cả các giáo sư tiếng Anh có khả năng viết phim, phim truyền hình, tiểu thuyết, vở kịch và thơ cho tôi không. Tương tự như vậy, hãy tưởng tượng một giáo sư toán học không bao giờ sử dụng các con số cho một ý tưởng kỳ lạ như nhau. Điều đó có nghĩa là có một số yếu tố cơ bản giúp mã hóa một số tầm quan trọng trong việc có thể dạy Khoa học Máy tính cơ bản. Do đó, giáo sư nên biết cú pháp ngôn ngữ cơ bản và cách viết chương trình tinh vi như các khóa học mà giáo sư đang giảng dạy. Nếu giáo sư đang dạy về thiết kế trình biên dịch và chưa bao giờ viết trình biên dịch trước đây thì đây sẽ là một vấn đề lớn. Hãy tưởng tượng một đầu bếp nấu một chiếc bánh chưa bao giờ nấu hoặc ăn bánh trước đó. Aye carumba.
Mặc dù tôi có thể thấy một số lợi thế khi thực hiện một thuật toán để biết nó, tôi nghi ngờ đó là một yêu cầu. Rốt cuộc, người ta có thể tự hỏi rằng lỗ thỏ của việc triển khai sẽ đi sâu đến mức nào để hiểu được thuật toán được thực hiện như thế nào? Ví dụ, có ai đó phải thực hiện bất kỳ thuật toán nào và thực hiện nó theo các mô hình khác nhau như lập trình thủ tục, hướng đối tượng và lập trình chức năng để thực sự biết nó không? Họ có phải biết làm thế nào các trình biên dịch dịch tất cả các mã và di chuyển các bit xung quanh ở mức độ electron-by-electron để khá khoa trương về nó.
"Tôi không bao giờ viết mã", mặc dù có một hàm ý chứa quá khứ cũng như thì hiện tại theo một cách nào đó. Cũng có thể có một giả định ngầm định về "mã hóa" là một điều thấp kém bên dưới giáo sư về một cách khác để xem tuyên bố có thể mang một âm điệu khá tiêu cực đối với nó có thể không đi qua tốt trong một số vòng tròn.
Mặc dù là một nhà phát triển phần mềm chuyên nghiệp, tôi đã có bằng Kỹ sư cơ khí.
Bạn có thể là một nhà thiết kế cơ khí giỏi với rất ít kinh nghiệm xây dựng và gia công các bộ phận, giao công việc đó cho thợ máy. Nhưng biết cách chế tạo và các bộ phận máy sẽ giúp bạn trở thành một kỹ sư giỏi hơn đáng kể, bởi vì bạn có thể dự đoán những khó khăn liên quan đến việc chế tạo và lắp ráp bất cứ thứ gì bạn đang thiết kế.
Phần mềm cũng vậy. Một "lập trình viên" là một thợ máy hoặc kỹ thuật viên, trong khi một kỹ sư phần mềm là kỹ sư. Đối với nhiều nơi, một người làm cả hai công việc. Điều đó không phải là không thể, và đối với một số vấn đề rất trừu tượng, vị trí "chỉ kỹ thuật" có thể hoạt động.
Nhưng đối với đại đa số, hoàn toàn không có lợi ích gì từ việc từ chối viết mã.
Trừ khi bạn đang suy nghĩ và kết thúc vấn đề tạm dừng, luôn có việc sử dụng mã hóa trong mọi khía cạnh của Khoa học Máy tính.
Lớp CS duy nhất tôi học mà hoàn toàn không có lập trình là lý thuyết. Tôi tưởng tượng có rất nhiều nhà vật lý ngoài kia nói rằng "Tôi không bao giờ thử nghiệm" nhưng có lẽ họ cũng là những người nói, "Tôi không bao giờ khám phá bất cứ điều gì". Và tôi sẽ ngạc nhiên nếu họ quan tâm.
Là một sinh viên Khoa học Máy tính, tôi nghĩ rằng ban đầu, tốt hơn là hiểu các khái niệm liên quan đến phát triển phần mềm. Một khi bạn đã học được ý tưởng đằng sau phần mềm và cách nó tương tác với máy tính, thì đã đến lúc bắt đầu mã hóa và xử lý các vấn đề triển khai cụ thể.
Điều này giống như "Ngoại lệ phần mềm", ban đầu bạn chỉ xử lý chúng vì bạn đã làm điều gì đó không được phép làm. Sau đó, khi bạn tìm hiểu chúng, hãy bắt đầu làm tương tự với mã của bạn để làm cho nó dài dòng hơn.
Vâng, tôi nghĩ rằng những người không quan tâm đến các khái niệm như những lập trình viên sử dụng Exceptions như một quy trình làm việc bình thường trong các ứng dụng của họ. Họ biết CÁCH nhưng không thực sự hiểu TẠI SAO.
Tôi đã có một thành ngữ khác cho giáo sư của bạn:
Những người có thể, làm, những người không thể, dạy.
imo, nói chuyện là rẻ. Bất cứ ai cũng có thể giật mình về 'lý thuyết' và gọi đó là 'khoa học máy tính'. Nhưng cho đến khi nó được đưa vào thực tế, lý thuyết không hữu ích lắm vì không có cách nào để xác nhận nó. Tôi muốn lấy ý kiến của prof về một cái gì đó nghiêm túc hơn nếu tôi biết anh ấy thực sự giải quyết một vấn đề cụ thể trong mã hơn nếu anh ấy chỉ regurgitating 'lý thuyết' mà có thể hoặc không thể có bất kỳ bằng chứng hỗ trợ để sao lưu quan điểm của mình.