Những kỹ năng nào là cần thiết cho lập trình chuyên nghiệp không thường được dạy trong trường học? [đóng cửa]


14

Tôi là một chuyên ngành khoa học máy tính năm đầu tiên. Tôi đã đi đến một hội chợ việc làm, đưa ra sơ yếu lý lịch, thật ngạc nhiên khi tôi có một cuộc phỏng vấn và cuối cùng là thực tập với tư cách là một nhà phát triển.

Tôi đã giải thích với người phỏng vấn (người sẽ là sếp của tôi) rằng tôi chỉ mới năm đầu tiên và không có nhiều kinh nghiệm lập trình. Anh ấy chỉ đơn giản nói với tôi rằng vì tôi có một nền tảng vững chắc về toán học (tôi gần như hoàn thành với BA về toán của mình, cộng với tôi có một số khóa học tốt nghiệp dưới vành đai của mình), anh ấy tự tin tôi sẽ làm tốt.

Tôi làm tốt trong tất cả các khóa học lập trình nhưng tôi vẫn cảm thấy mình gặp bất lợi. Ngay bây giờ, tôi thực sự chỉ muốn làm tốt công việc này khi nó bắt đầu. Công việc sẽ sử dụng chủ yếu là C #, nhưng bên cạnh việc học một số C #, kỹ năng mà bạn ước mình có thể học được trước khi trở thành một lập trình viên thực sự là gì?

Bất kỳ lời khuyên nào được đánh giá rất cao, nhưng nếu bạn có bất kỳ cuốn sách nào trong đầu xin vui lòng cho biết. Cảm ơn!


8
Câu hỏi này đã được hỏi nhiều lần trên trang này theo nhiều cách khác nhau. vui lòng tìm kiếm trước rồi mới hỏi. có một cái nhìn vào FAQ; lập trình viên.stackexchange.com/questions / 149970 / Google ; lập trình
viên.stackexchange.com/questions / 46716 / từ

3
Tôi đã tìm kiếm, và tôi thấy cả hai câu hỏi đó. Nhưng tôi không quan tâm đến việc học thiết kế hoặc phát triển web. Tôi quan tâm đến việc học những gì nhiều lập trình viên cảm thấy họ thực sự nên học ở trường. Những câu hỏi đó có một số lời khuyên tuyệt vời, nhưng đó không phải là những gì tôi đang tìm kiếm. Cảm ơn bạn
Eric

+1 Một kỹ năng tôi ước mình có thể thành thạo trước khi làm lập trình viên toàn thời gian là kỹ năng Toán học mạnh vì kỹ năng toán học được cho là kỹ năng quan trọng nhất phải có vì nó rèn luyện trí óc để giải quyết vấn đề và học các khái niệm mới và là một lập trình viên, đó là chủ yếu là những gì tôi sẽ làm hàng ngày.
Anthony

3
Quy trình làm việc. Và nhận ra rằng mã đó không phải là một bông tuyết độc đáo. Áp dụng nguyên tắc ít ngạc nhiên nhất khi thiết kế. Hãy suy nghĩ trước khi bạn làm. Quản lý sự phức tạp trở thành một khía cạnh rất quan trọng.
mất ngủ

1
Tôi thực sự không thích làm việc với những người có kỹ năng toán học mạnh mẽ. Họ biến mọi thứ thành một công thức toán học thay vì áp dụng các nguyên tắc của công nghệ phần mềm. Phần mềm KHÔNG phải là toán học. Điều cần thiết là bạn viết mã của mình sao cho dễ hiểu.
Rob K

Câu trả lời:


21

Ở trường, bạn học về viết mã. Những gì bạn không học được là phần còn lại của việc phát triển phần mềm. Những điều chính tôi không bao giờ học được bất cứ điều gì về trường học là:

  • làm việc như một phần của nhóm phát triển
  • sử dụng kiểm soát phiên bản
  • sử dụng trình theo dõi lỗi

Đây là những kỹ năng rất quan trọng đối với bất kỳ nhà phát triển nào và bạn không có khả năng có được chúng trong một lớp học, thật không may.


4
Làm việc như một phần của nhóm phát triển là một nghệ thuật tinh tế và phức tạp. Tôi không hiểu tại sao kiểm soát phiên bản và theo dõi lỗi luôn bị đóng khung là một trở ngại lớn cho các nhà phát triển mới. Chúng chắc chắn là những công cụ quan trọng nhưng bạn hướng người mới đến các trang nam, một cuốn sách O'Reilly hoặc một hướng dẫn trực tuyến và họ có thể chọn sử dụng bánh mì và bơ trong vài giờ. Tại sao bạn lại lãng phí thời gian trên lớp vào một cái gì đó như thế?
Charles E. Grant

1
@ CharlesE.Grant Kiểm soát phiên bản tương tự như lập trình ở chỗ bạn có thể giảm các vấn đề cơ bản trong một thời gian tương đối ngắn, nhưng cần có kinh nghiệm để sử dụng hiệu quả. Và DVCS như git và Mercurial mất nhiều thứ để hiểu hơn CVCS như svn.
Izkata

8
Tôi chưa bao giờ có các lớp về duy trì mã đã thiết lập (là một phần chính của hoạt động như một phần của nhóm phát triển) và kinh nghiệm trong lớp của tôi về cách kiểm tra mã là tối thiểu.
Velociraptors

1
@ CharlesE.Grant: Tôi đã dạy các khóa học sau đại học về lập trình và các chủ đề liên quan trong vài năm. Ngay cả sinh viên tốt nghiệp cũng có một thời gian khó hiểu tại sao họ nên sử dụng một hệ thống kiểm soát sửa đổi dưới bất kỳ hình thức nào. Và khi họ miễn cưỡng bắt đầu sử dụng nó, họ dường như rất bối rối vì nó rất nhanh. +1 cho Mason để nâng cao nó như một chủ đề không quan trọng.
Peter K.

1
+1 +1 +1, một cho mỗi điểm. Thật ngu ngốc khi họ không dạy bạn những điều này ... hoặc ít nhất là THỬ để dạy bạn.
Radu Murzea

20

Tôi ước rằng tôi biết sớm hơn trong sự nghiệp của mình rằng là một nhà phát triển, tôi có một vai trò rất quan trọng trong kinh doanh . Tôi không chỉ là một con khỉ mã.

Là một nhà phát triển, bạn có vai trò chính trong các bộ phận của doanh nghiệp liên quan đến phần mềm bạn đang làm việc.

Nếu công ty của bạn không viết bài kiểm tra cho mã của họ, hãy bắt đầu viết bài kiểm tra ngay bây giờ.

Nếu họ không theo dõi lỗi, hãy tìm một trình theo dõi lỗi thích hợp ngay bây giờ.

Nếu sếp của bạn muốn bạn bắt đầu ngay lập tức làm việc với một hình ảnh động lạ mắt cho màn hình giật gân của ứng dụng bảng tính của bạn - nhưng bạn vẫn có hàng tá lỗi cần khắc phục và một số tính năng chưa hoàn thành quan trọng trước hạn chót phát hành của khách hàng tiếp theo - hãy nói chuyện về việc ưu tiên chính xác cho công việc .

Ngay cả khi bạn chỉ là "một nhân viên bình thường", hành động như một nhà tư vấn là một cách tuyệt vời để tạo sự khác biệt với các nhà phát triển khác, những người chỉ viết mã và không hành động như họ có quyền lợi trong kinh doanh.


9

Trường học của tôi không bao giờ dạy tôi cách giải quyết vấn đề. Họ dạy tôi các cơ chế của mã hóa, nhưng để có thể nghiên cứu một vấn đề, hiểu nó và đưa ra giải pháp là điều họ không dạy. Nó đòi hỏi sự kiên nhẫn, nghiêm khắc và trực giác bên cạnh sự hiểu biết về ngôn ngữ lập trình.

Họ cũng không dạy về tinh thần đồng đội, về kiểm soát phiên bản và về tầm quan trọng của việc viết mã dễ duy trì. Họ cũng không dạy nhiều về cách kiểm tra phần mềm. Họ có thể đã chạm vào thử nghiệm đơn vị, nhưng họ không đi sâu vào các khái niệm về thử nghiệm chấp nhận, thử nghiệm hồi quy, v.v.

Tuyên bố miễn trừ trách nhiệm: Tôi đã đi học đại học vào những năm 80. Tuy nhiên, tôi thấy bằng chứng về điều này với những người tôi thuê ngày hôm nay - những sinh viên mới tốt nghiệp có rất ít kiến ​​thức về thế giới thực của lập trình: kiểm soát phiên bản, kiểm tra, mã hóa sạch, kỹ năng sửa lỗi, v.v.


+1 cho phần thử nghiệm. Ở trường đại học của tôi, họ cũng không dạy nó. Tôi đã có 1 lớp (có: một) trong đó giáo viên đề cập đến bài kiểm tra đơn vị ... trong khoảng 3 phút. Đó là nó.
Radu Murzea

Tôi biết đây là một phản hồi muộn nhưng đó là một trong những điều làm cho bằng cấp toán học của tôi hấp dẫn các nhà tuyển dụng của tôi. Quan điểm này chắc chắn được chia sẻ giữa các nhà tuyển dụng là tốt.
Eric

Đồng ý, trong nhiều trường học, các thuật toán (còn gọi là "giải quyết vấn đề") không được dạy đúng, hoặc không được dạy gì cả, hoặc không dạy cách áp dụng nó với ngôn ngữ lập trình, ngay cả khi tôi phải là "bất khả tri".
umlcat

Hmmmm .... câu trả lời của bạn không thể trái ngược với những gì tôi đã trải qua. Toàn bộ quan điểm của trường học là đưa ra một nền tảng để bạn có thể nghiên cứu một vấn đề một cách hiệu quả, hiểu nó và đưa ra giải pháp. Một học sinh mới có thể không "giỏi" ở trường mới ra trường nhưng chắc chắn họ phải được đào tạo và có khả năng về nó. Ở trường tôi họ không dạy lập trình gì cả. Bạn đã được dự kiến ​​sẽ học cách lập trình (một mình) trong khi học thông tin mà khóa học đang cố dạy bạn. Vì vậy, nơi bạn nhận được họ chỉ dạy "cơ chế mã hóa" từ bên ngoài tôi ...
Dunk

... Tại các trường học tốt, bạn không nhận được tín dụng chỉ đơn giản là học cách viết mã. Nếu bạn thấy khó khăn khi sử dụng kiểm soát phiên bản thì bạn có vấn đề nghiêm trọng hơn nhiều mà không có số lượng học tập nào có thể giúp đỡ. Khi bạn nghĩ ra cách viết mã dứt khoát, dễ duy trì thì hãy viết một cuốn sách và trở nên giàu có. Không ai đã giải quyết vấn đề đó. Bạn phải bỏ lỡ các phần trong trường học mà bạn phải bật các chương trình của mình để được kiểm tra. Kiểm tra chấp nhận / hồi quy là đặc thù của ngành và được dạy tốt hơn về công việc thực hiện theo cách của công ty hơn là ở trường.
Dunk

7

Theo tôi, một số điều quan trọng nhất không được học (hoặc học đúng cách) ở trường là:

  • Cách sử dụng và IDE đúng cách; sử dụng toàn bộ sức mạnh của một IDE hiện đại giúp tăng năng suất rất lớn: tái cấu trúc tự động, điều hướng mã, tích hợp VCS, phân tích mã, hoàn thành mã, v.v.
  • Cách sử dụng đúng trình gỡ lỗi: gỡ lỗi từ xa, gỡ lỗi ứng dụng đa luồng, đánh giá nhanh, v.v.
  • Sửa lỗi và bảo trì; ở trường đại học họ không dạy bạn gần như bất cứ điều gì về vấn đề này nhưng trong ngành công nghiệp là khá phổ biến để sửa lỗi.
  • Làm thế nào để làm việc trong một nhóm lớn và trên một dự án lớn; Về cơ bản trong trường đại học, các dự án là loại nhỏ, so với các dự án công nghiệp lớn.
  • Làm thế nào để viết mã tốt và làm thế nào để nhấn vào khả năng đọc; Điều này đi kèm với kinh nghiệm, nhưng có một số cuốn sách dạy bạn những điều cơ bản (Hoàn thành mã, Mã sạch, v.v.).
  • Cách sử dụng một khung với toàn bộ sức mạnh, sử dụng tùy chỉnh của nó; ở trường đại học có lẽ bạn đã học cách sử dụng một số khung trên một số tình huống rất cơ bản; trong ngành công nghiệp bạn sẽ đạt đến các trường hợp góc.
  • Làm thế nào để hiểu và viết mã sau khi đặc điểm kỹ thuật; có lẽ bạn sẽ học cách viết đặc tả nhưng bây giờ làm thế nào để đọc nó và làm thế nào để giải thích nó

VCS, hệ thống theo dõi lỗi, công cụ xây dựng, v.v. là những công cụ mà bạn bắt buộc phải học để có thể làm việc với một nhóm; họ không đòi hỏi nhiều thời gian để học ở cấp độ cơ bản và khá đơn giản sau đó (ít nhất là vào lúc bắt đầu); danh sách trên có chứa sự tinh tế mà nếu biết, sẽ tăng năng suất của bạn.


hay còn gọi là "Lập trình" không chỉ là biết một ngôn ngữ lập trình, còn có một "môi trường", "hệ sinh thái", "khung" ...
umlcat

4

Điều lớn nhất tôi thấy thiếu từ các sinh viên mới tốt nghiệp là sự hiểu biết tốt về kiểm soát phiên bản.

Nếu bạn có kinh nghiệm trong việc phát triển phần mềm nguồn mở bằng cách sử dụng các kho lưu trữ mã nguồn (như GitHub ), bạn sẽ đi trước một bước so với mostcác bạn cùng lớp.

Điều thứ hai là một sự hiểu biết về sự phức tạp ( big O). Hầu hết mọi người ra khỏi trường đại học đã nghe về nó, nhưng vẫn chưa phát triển phần mềm thực sự, nơi nó được sử dụng và do đó không hiểu tầm quan trọng thực sự của nó.

Khi bộ dữ liệu của bạn quá lớn đến mức lực lượng vũ phu sẽ không bao giờ cắt giảm và hiểu được các kỹ thuật khác là hữu ích và có thể đoán khi nào vũ lực sẽ ổn cho tình huống, là điều bạn phát triển với kinh nghiệm và mắc lỗi.


1
Tôi nghĩ rằng việc thiếu giáo dục kiểm soát phiên bản đang bắt đầu thay đổi. Kiểm soát phiên bản đã được nhấn mạnh ở trường của tôi.
Southpaw Hare

@SouthpawHare: Tôi không nói nó không tồn tại, họ thậm chí còn dạy nó trở lại vào thời của tôi. Chỉ là những người ra khỏi trường đại học với kinh nghiệm này vẫn còn trong thiểu số. Và những người như vậy có nó có giá trị hơn. Tôi không đồng ý rằng nó đã thay đổi nhiều trong 20 năm qua.
Martin York

3

Làm thế nào để gỡ lỗi tốt, đặc biệt là sử dụng trình gỡ lỗi và thực hiện một cách tiếp cận đúng để khắc phục lỗi, tức là tìm hiểu nguyên nhân gây ra, tìm hiểu lý do tại sao nó gây ra và hiểu lý do tại sao giải pháp của bạn khắc phục nó thay vì chỉ đơn giản là thử và hy vọng.

Hầu hết sinh viên tốt nghiệp ngành khoa học máy tính rất kém trong việc gỡ lỗi, và - kết quả là - mất nhiều thời gian hơn để sửa chữa những thứ cần thiết và tạo ra nhiều lỗi hơn khi làm như vậy.

Những thứ khác như kiểm soát phiên bản, theo dõi lỗi, v.v ... rất đáng được đề cập nhưng theo tôi, việc thiếu các phương pháp tiếp cận hợp lý để gỡ lỗi là một vấn đề lớn hơn nhiều và cần phải học hỏi nhiều hơn.


2

một kỹ năng mà bạn muốn bạn có thể học được trước khi trở thành một lập trình viên thực thụ là gì?

Theo kinh nghiệm của tôi, trường học của tôi không bao giờ dạy tôi cách giải quyết vấn đề.

Theo kinh nghiệm lập trình của tôi là tất cả về giải quyết vấn đề. Ở trường tôi, họ chỉ kiểm tra xem bạn có thể viết chương trình mà không bị lỗi cú pháp hay không. Những gì thực sự cần thiết không được đưa ra như là đầu vào. Cú pháp chỉ là thứ mà bạn có thể tra cứu từ bất kỳ cuốn sách nào nếu cần. Nhưng khả năng giải quyết vấn đề không thể đạt được từ bất cứ đâu ngoại trừ việc bạn luyện tập tốt và rèn luyện bản thân cho nó.

Hãy để nó thuộc bất kỳ loại nào, hãy thử hoàn thành càng nhiều câu hỏi càng tốt để bạn tự tin vào chính mình. Hãy thử làm điều đó với một số đam mê trong tâm trí của bạn, và bạn chắc chắn sẽ vượt qua.


2

Dành chút thời gian để tìm hiểu một số mẫu thiết kế phổ biến: nhà máy, singleton, bộ chuyển đổi, chỉ huy và người quan sát (trường đại học của tôi không dạy chúng).

Nếu công ty sử dụng phương pháp Agile để phát triển phần mềm, sẽ có giá trị để có một số hiểu biết về nó.


2

Nhiều kỹ năng bạn sẽ cần như một lập trình viên chuyên nghiệp hầu như không thể có trong mỗi môi trường đại học / học thuật.

Họ chỉ có thể đến từ kinh nghiệm làm việc trực tiếp trong lĩnh vực này.

  • Học cách cộng tác và giao tiếp với những người bên ngoài "nghề" của bạn, như nhà thiết kế đồ họa, nhà thiết kế sản phẩm, nhà quản lý, v.v.

  • Hiểu rằng công việc của bạn không phải là viết mã, mà là mang một sản phẩm vào cuộc sống. Nói dễ hơn làm.

  • Biết cách cân bằng thực hành mã hóa tốt với những cân nhắc thực tế. Có được khả năng phán đoán khi mã "đủ tốt", "quá kỹ thuật" hoặc "cần tái cấu trúc".

  • Học cách khắc phục điểm yếu và sự bất an của chính bạn. Có được khả năng chịu đựng những lời chỉ trích. Buông bỏ cái tôi của bạn. Học những gì nó có nghĩa là chịu trách nhiệm cá nhân, và sau đó nhận nó.

Thật dễ dàng để đọc về tất cả những điều này. Đó là một điều hoàn toàn khác để thực sự đưa điều này vào thực tế. Cách duy nhất là làm điều đó. Bạn sẽ bị cắn nhiều lần, và nó có thể sẽ bị tổn thương, nhưng bạn sẽ thoát ra khỏi nó mạnh hơn và tốt hơn.

Đọc có liên quan: Các mô hình học việc


1

Tất cả phụ thuộc vào trường học. Trong trường đại học của tôi, chúng tôi có rất nhiều dự án thực tế. Khá thường xuyên trong các nhóm và sử dụng các điều khiển nguồn khác nhau. Vì vậy, tôi nghĩ rằng một số trường học tập trung vào những người.

Nhưng một điều mà trường học không dạy: chi tiết. Rất thường khi trường dạy một số công nghệ hoặc thực hành (như phát triển web, phát triển giao diện người dùng JAVA, cơ sở dữ liệu nâng cao), họ sẽ chỉ vạch ra bề mặt và không bao giờ đi vào chi tiết, điều đó là cần thiết để sử dụng công nghệ này hoặc thực hành trong kinh doanh trong thế giới thực. Bạn sẽ có được cái nhìn tổng quát về những cách có thể để giải quyết vấn đề của mình, nhưng bạn sẽ cần tự tìm hiểu các chi tiết cần thiết.

Chỉ có thời gian khi trường dạy một cái gì đó thành chi tiết là khi có nền tảng lý thuyết hoặc toán học mạnh mẽ đằng sau một cái gì đó. Những thứ như ngôn ngữ chính thức hoặc cơ sở dữ liệu SQL thường là phần cốt lõi của chương trình học, bởi vì chúng được xây dựng trên cơ sở toán học và được sử dụng rất nhiều trong khoa học máy tính hoặc kỹ thuật.


1
  • yêu cầu - làm cho họ sai và nghỉ ngơi chủ yếu là một sự lãng phí
  • ưu tiên (tính năng trong đó phát hành)
  • thực hiện hoặc sử dụng hết hộp (mua / phần mềm miễn phí)
  • làm việc nhóm
  • quản lý dự án - yêu cầu, chất lượng (mẫu dữ liệu trong prod, trường hợp thử nghiệm, cách kiểm tra, phạm vi bảo hiểm trước khi bạn viết mã, có nhiều chi phí giống như nhưng không liên quan. đọc sách PMI
  • công cụ truyền thông (thư, cuộc họp: kế hoạch lịch)
  • quản lý mã nguồn

0

Tôi ước mình đã quyết định sớm hơn trong trò chơi dù muốn hay không muốn trở thành một lập trình viên tổng thể, học nhiều thứ khác nhau, ngôn ngữ, cơ sở dữ liệu và nền tảng, và cuối cùng trở thành một nhà phát triển web, hoặc tôi chỉ nên chuyên về một CMS, hoặc thậm chí chỉ chuyên về Photoshop, là một chuyên gia, các kỹ năng của bạn sẽ có giá trị và có lợi nhuận sau đó thực sự biết những gì một lập trình viên thực sự nên biết. Nói cách khác, nếu bạn chỉ cần kiếm tiền tốt, chỉ cần chuyên về MỘT ĐIỀU. Nếu bạn yêu thích máy tính và thích giải quyết vấn đề, thì hãy trở thành một lập trình viên.

[phản ánh lại và sau khi học như 4 hoặc 5 'khung' javascript khác nhau trước khi JQuery thực sự phát triển mạnh mẽ, Được chứng nhận trong JAVA và không bao giờ có được vị trí java và sau khi làm việc trên nhiều nền tảng; AS400- rpg,> .NET - c # và PHP, trước khi tôi muốn tôi thành thạo photoshop và kiếm tiền bằng nhau mà không phải sửa lỗi hoặc viết phần mềm. ]

Tôi có nghĩa là có một sự hài lòng nhất định khi biết một loạt các chủ đề, nhưng sự hài lòng bị vấp ngã khi bạn thấy một người chỉ biết photoshop tiền mặt cùng một mức lương.


2
Vâng, nhưng đó là một chuyên gia sẽ không bao giờ mở cửa hàng riêng của họ. Nếu ước mơ của bạn là trở thành một CEO của chính công ty khởi nghiệp của bạn đôi khi trong tương lai, bạn sẽ cần một loạt các kỹ năng LỚN.
Thưởng thức dralo
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.