Làm thế nào để giới thiệu nhóm của bạn với phong cách chức năng của mã hóa?


10

Tôi có một tình huống mà hầu hết mọi người trong nhóm của tôi đến từ một nền tảng lập trình hướng đối tượng mà ít hiểu biết về lập trình chức năng. Thậm chí không cơ bản như đóng cửa.

Bất kỳ đề xuất về những gì có thể là một cách tốt để giới thiệu chúng với phong cách mã hóa chức năng? Rất nhiều mã hóa mà chúng ta làm có thể được rút ngắn nếu chúng ta thực hiện theo cách chức năng cho các trường hợp cụ thể của chúng ta.

Tôi đã đưa ra một vài bài thuyết trình về các mô hình chức năng và mã hóa. Thật không may, chúng tôi không sử dụng ngôn ngữ lập trình chức năng phù hợp như Haskell (về cơ bản mã kế thừa có trong C, C ++, Java) vì vậy chúng tôi phải làm bất cứ điều gì có với những thứ này.


11
Trước khi hỏi làm thế nào, hãy hỏi tại sao . Bạn đang làm việc trên các vấn đề có thể dễ dàng giải quyết theo phong cách chức năng hơn là phong cách hướng đối tượng? OO hoạt động thực sự tốt cho rất nhiều thứ (đó là lý do tại sao nó rất thành công) và không tốt cho những người khác. Từ câu hỏi của bạn, nó làm cho nó nghe giống như "Tôi muốn thực hiện mã của chúng tôi theo kiểu chức năng chỉ vì tôi nghĩ lập trình chức năng là tuyệt vời, ngay cả khi chúng tôi không có ngôn ngữ hỗ trợ và nhóm không biết cách để làm điều đó!" Đó là một ý tưởng rất tồi. Hãy nhớ rằng, công cụ phù hợp cho công việc phù hợp.
Mason Wheeler

2
@MasonWheeler: Tôi biết tại sao chúng ta cần chức năng. Không thành ngôn ngữ mát mẻ của tháng. Quá cũ cho điều đó.
Fanatic23

1
Giả sử ai đó biết Haskell, bạn có thể khiến nó hoạt động trong hệ thống của mình không?
JeffO

4
Có vẻ như lập trình chức năng đang giải quyết vấn đề mà nhóm của bạn không gặp phải. Họ biết cách viết mã C, C ++ Java vốn không phải là ứng cử viên tự nhiên cho lập trình chức năng (việc thực hiện các bao đóng là điều kinh khủng trong các ngôn ngữ này).
James Anderson

Câu trả lời:


8

Luca Bolognese đã thực hiện bài thuyết trình tuyệt vời này khi anh giới thiệu lập trình chức năng (để trình bày F #) bằng một ví dụ về cà phê thực sự tuyệt vời và giúp tôi rất nhiều để giới thiệu Lập trình chức năng cho bạn bè và đồng nghiệp.

Bạn cũng có thể xem Lập trình chức năng thế giới thực của Petricek, đây là một cách tuyệt vời để bắt đầu suy nghĩ theo chức năng theo ý kiến ​​của tôi.


bài thuyết trình đó thật tuyệt vời .. đặc biệt là do nó được đưa ra bởi một ma cà rồng !! CƯỜI LỚN!! j / k .. các chàng trai có sức thu hút ..
hanzolo

7

Do đồng nghiệp của bạn mã bên ngoài công việc?

Xem xét rằng bạn không làm bất kỳ FP nào tại công ty của bạn, sau đó khiến bất cứ ai học một ngôn ngữ / mô hình mới khi họ không làm bất cứ điều gì ngoài nhiệm vụ công việc trực tiếp của họ sẽ là điều không thể.

Nếu họ làm, sau đó tìm các dự án thú vị mà họ sẽ liên quan đến lập trình chức năng và hiển thị chúng. Bạn không ở vị trí bắt buộc thay đổi, vì vậy bạn sẽ phải gieo hạt giống nếu quan tâm ở cấp độ cá nhân. Đây là cách tôi được giới thiệu với nó - được cấp bởi người bạn thân nhất của tôi, người tình cờ làm việc với tôi.

Bên ngoài đó, hầu hết mọi người viết các công cụ trong nhà để thực hiện các nhiệm vụ nhỏ dễ dàng hơn. Cố gắng viết một số trong số họ bằng một ngôn ngữ chức năng. Bất cứ ai muốn xem mã sẽ được tiếp xúc với vẻ đẹp (hy vọng / có thể) của mã và có thể sẽ hỏi bạn về nó khi họ làm. Đó là một cơ hội để bán ý tưởng.

Hãy nhớ rằng, có các ngôn ngữ chức năng sẽ hoạt động trên ngăn xếp của bạn (cả scala / clos đều chạy trên JVM). Nó không "hoàn toàn hoạt động" như Haskell, nhưng đó là một khởi đầu tốt trên một hành trình dài.

Nếu bạn có bất kỳ sự kiểm soát nào đối với việc tuyển dụng, hãy thuê những người có một số kinh nghiệm về chức năng (hoặc ít nhất là quan tâm đến lập trình chức năng).

Và cuối cùng ... bạn có thể ở sai công ty nếu bạn đam mê viết mã chức năng. Bạn sẽ không thay đổi cách toàn bộ công ty của bạn viết phần mềm - đặc biệt là nếu họ đang kiếm tiền và đặc biệt hơn nữa là không có bất kỳ khoảng thời gian hợp lý nào.

Đây là tất cả về việc bán nó cho các nhà phát triển ... quản lý là một con thú hoàn toàn khác.


2

Chuyển đổi từ cấp bách sang lập trình chức năng thuần túy là một thay đổi lớn với đường cong học tập dốc. Tôi sẽ đề nghị thử chuyển đổi ít nhanh hơn, và trong trường hợp đó bạn có nhiều lựa chọn. Ví dụ: Python hỗ trợ khả năng hiểu danh sách và biểu thức trình tạo , Ruby hỗ trợ các hàm bậc cao hơn thông qua các khối mã, v.v. Vì bạn đã đề cập đến Java, nếu tất cả các bạn đều có nền Java và bạn muốn hỗ trợ lập trình chức năng đầy đủ, bạn có thể thử Scala .


2

Thuê (hoặc nhận ông chủ thuê) một lập trình viên chức năng

Cuối cùng, điều này sẽ ảnh hưởng đến phần còn lại của đội bạn.

Ngoài ra, như đã nêu trước đây, khuyến khích họ viết mã bằng ngôn ngữ chức năng trong thời gian nghỉ cũng không bị tổn thương.


2

Nếu lập trình chức năng thực sự sẽ giúp cuộc sống của bạn dễ dàng hơn nhiều, thì tôi khuyên bạn nên cách ly một trường hợp như vậy và chứng minh việc triển khai tương đương trong cả OO và ngôn ngữ chức năng cho các đồng nghiệp của bạn.

Nếu sự khác biệt về độ phức tạp là rộng như bạn nói, thì điều này sẽ nói lên điều đó.


2

+1 cho faif khi đề cập đến Scala: điều này bắt đầu như một nhận xét về câu trả lời đó nhưng đã quá lớn ...

Tôi muốn học một cái gì đó về lập trình chức năng (đến từ C / C ++, một số Python & rusty Java); Tôi đã thử lặn ở cuối sâu với Ocaml và sau đó là Haskell và Chỉ không nhận được nó. Sau đó, tôi đã thử Scala và thấy nó cho phép tôi bắt đầu sử dụng những thứ chức năng trong môi trường OOP / Java thoải mái, nơi tôi có thể dễ dàng quay trở lại phong cách mệnh lệnh quen thuộc khi một cách tiếp cận chức năng lảng tránh tôi. Một số người có thể phàn nàn bản chất "đa âm", "lai" của ngôn ngữ có nghĩa là bạn không bao giờ bị ép buộc phải đi "chức năng thuần túy", nhưng tôi nói nó có nghĩa là bạn có thể thực dụng về mọi thứ và biết bạn sẽ có thể có được những thứ thực sự dễ dàng bằng cách nào đó khi bạn cần.

Một vài năm (và hơn 200 giải pháp Project Euler Scala ở Scala sau này), cuộc gặp gỡ với chức năng đã ảnh hưởng đến Python của tôi (sử dụng nhiều hơn bản đồ, bộ lọc, giảm, lambdas, itertools, liệt kê các chức năng và chuyển các chức năng xung quanh hơn tôi ' chưa từng được dự tính trước đó) và ở mức độ thấp hơn C ++: có thể cố gắng sử dụng các bẫy chức năng của STL hơn một chút, nhưng tác động chính là tôi cảm thấy thoải mái hơn rất nhiều khi sử dụng các bản đồ / giảm cấu trúc của TBB và thực sự thích cách khai thác tính bất biến có thể khắc phục sự phức tạp trong mã đa luồng.

Vì vậy, cá nhân tôi, nếu tôi là bạn, tôi sẽ tạo ra một trường hợp giới thiệu Scala vào một số phát triển trong thế giới Java của bạn, tốt nhất là bằng cách hiển thị một số ví dụ về việc đơn giản hóa một cái gì đó và tạo ra những lợi ích mà bạn yêu cầu. Điều xảy ra tiếp theo là toàn bộ hoạt động kinh doanh "vô địch" các ý tưởng mới và thúc đẩy thay đổi ... có vẻ như đó có thể là một vấn đề lớn hơn nhiều.


1
@timeday Nói rất hay. Tôi là một người Java / OO. Tôi đã chọn Scala một năm trước. Và nó khá khó khăn đối với tôi khi học FP. Tôi đang làm một chút tại một thời điểm và ngồi với nó. Tôi không cố gắng để có được tất cả cùng một lúc.
hỗn loạn3quilibrium

1

Tôi muốn giới thiệu một cách tiếp cận dần dần bằng Scala. Và tôi khuyên bạn nên bắt đầu với cuốn sách của nhà sáng tạo Scala, "Lập trình trong Scala, tái bản lần thứ 2" . Cuốn sách này là FANTASTIC khi từ từ giới thiệu một đến (FP) Lập trình chức năng bằng Scala. Và khi thể hiện động thái hướng tới FP, nó không từ chối OO. Trong thực tế, nó tận dụng nó. Tôi đang thực hiện lần thứ hai thông qua nó bây giờ.

Về cơ bản, Scala cho phép một người thực hiện Java / OO "không có dấu chấm phẩy". Và sau đó người ta có thể thử một chút FP mà không cần phải đi cả con lợn. Ví dụ, khi tự đào tạo để làm FP, tôi thường sẽ tập trung vào tính minh bạch tham chiếu ở cấp phương thức lớp, nhưng hãy để các phương thức của tôi có nhiều var-s, mutable và mệnh lệnh cần thiết để tôi vượt qua lần đầu tiên tại một thực hiện. Sau đó, tôi tập trung vào việc từ từ làm lại từng phương pháp để chuyển nó sang hướng thuần túy. Và tôi cũng sử dụng trang web chị em để StackOverflow, CodeReview, để được giúp đỡ với quá trình chuyển đổi tinh thần / suy nghĩ của tôi. Đây là một ví dụ về một bài đăng gần đây tôi đã thực hiện điều này rất.

Dù sao, may mắn nhất trên hành trình FP của bạn. :)

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.