Xu Hướng 2/2023 # Redux Saga Phần Iii (Tips Khi Làm Việc) # Top 4 View | Channuoithuy.edu.vn

Xu Hướng 2/2023 # Redux Saga Phần Iii (Tips Khi Làm Việc) # Top 4 View

Bạn đang xem bài viết Redux Saga Phần Iii (Tips Khi Làm Việc) được cập nhật mới nhất trên website Channuoithuy.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

Phần III, mình sẽ chia sẻ một số kinh nghiệm đúc kết được khi làm việc với redux-saga qua những dự án thực tế để các bạn có thể áp dụng theo tình huống gặp phải, nếu có những tips nào hay trong tương lai thì mình sẽ cập nhật trực tiếp vào bài viết này luôn, cho các bạn tiện theo dõi

Sử dụng takeLatest để xử lý việc debounce time như thế nào

Sử dụng put effect nhưng lại muốn đợi kết quả từ put effect để xử lý tiếp

Quản lý trạng thái tải của toàn bộ ứng dụng khi dùng redux-saga như thế nào

Làm sao để nhận kết quả trả về khi dispatch 1 action tới saga

Sử dụng takeLatest để xử lý việc debounce time như thế nào

Xét đoạn mã sau

Đoạn mã trên xử lý việc, khi bạn input vào textbox để search các đơn hàng có tên đã gõ vào, và việc này rất hay gặp trong ứng dụng

Thông thường mình sẽ dùng debounce time theo nhiều cách, có thể dùng lodash, hoặc timeout rồi clearTimeout. Nhưng trong trường hợp mình đang đề cập là đang dùng redux-saga, và dùng takeLatest để bắt action và thực hiện truy vấn từ server để lấy dữ liệu về, thì ở đây mình không cần làm gì nhiều, là kết hợp thêm delay effect trong hàm worker là được như ý muốn, xem lại đoạn mã đã thêm phần debounce time

Giải thích đoạn mã trên, vì cơ chế của takeLatest là chỉ nhận action cuối cùng, nên khi bạn gõ 10 lần thì nó sẽ nhận 10 action và tạo ra 10 nhiệm vụ con (fork), mặc dù nó sẽ cancel những nhiệm vụ con đã tạo trước, để đảm bảo 1 nhiệm vụ được xử lý, nhưng việc call api là được gọi (điều này là không mong muốn), nên việc delay lại khoảng thời gian call api, thì takeLatest đảm bảo rằng chỉ 1 api được gọi khi mình call 10 action cùng 1 lúc, khoảng thời gian delay bên đoạn mã trên là 1000 miliseconds, các bạn có thể tùy chỉnh thêm

Sử dụng put effect nhưng lại muốn đợi kết quả từ put effect để xử lý tiếp

Thay vì cho phép đẩy call 1 action khác, và nó thuộc dạng non blocking và tiếp tục chạy đoạn mã tiếp theo, thì chúng ta có thể thay bằng putResolve là vấn đề được giải quyết

Quản lý trạng thái tải của toàn bộ ứng dụng khi dùng redux-saga như thế nào

Làm sao để nhận kết quả trả về khi dispatch 1 action tới saga

Mặc định thì khi dispatch 1 action tới saga thì kết quả bạn nhận được là action được gởi đi, xem đoạn mã bên dưới

Với đoạn mã trên nếu bạn chúng tôi loginResponse ra các bạn sẽ nhận được là action object đã được gởi đi thôi, vậy trong trường hợp mình muốn nhận được kết quả trả về khi call action type ‘auth/LOGIN’ để biết là thành công hay là thất bại để hiện thông báo (mình cũng hay làm việc này vì muốn dời luôn việc quản lý message này nọ ra cho component xử lý, theo vì UI và login api dính tới nhau). Và đầu ra của bài toán này là gì, trước đó thì mình cũng có tìm hiểu trên mạng thì có chia làm 2 dạng

Sử dụng package redux-saga-promise (cách này khả thi hơn)

vậy cuối cùng giải pháp đưa ra của vấn đề này là gì, đó là convert dispatch action hiện tại thành 1 Promise, thì mình có thể dùng async, await để đợi kết quả trả về khi dispatch 1 action trong saga rồi. Theo dõi đoạn mã bên dưới

Ở phần mình có tạo một loginWatcher để hiện thực mã gọi tới hàm tiện ích sagaPromise đã tạo ở trên

Đoạn mã này mình giả lập 2 trạng thái login thành công và thất bại, để các bạn hình dung được và khi dùng sagaPromise helper

Ở đây mình dùng hàm tiện ích là startActionWithPromise, và bắt được kết quả trả về khi gọi tới saga (resolve), trường hợp reject với lỗi mình sẽ bắt ở catch

Tìm Hiểu Về React Redux Saga Xây Dựng Ứng Dụng Đơn Giản.

Trong bài này chúng ta sẽ cùng tìm hiểu về xây dựng một ứng dụng đơn giản với React Redux Saga.

Trước tiên về môi trường chúng ta cần có nodejs , npm. Khởi tạo ứng dụng, tại cửa sổ termiantor

npm install -g create-react-app create-react-app app cd app npm install --save-dev redux react-redux redux-act redux-devtools-extension redux-form redux-saga npm install

Trong ứng dụng cơ bản này. Chúng ta sẽ dùng 1 api để lấy dữ liệu của trang https://newsapi.org/ bạn có thể nên đây tạo để tạo 1 api lấy bài viết mới nhất cho ứng dụng. Lúc mình tạo hiện tại đang là link sau:

https://newsapi.org/v2/everything?q=bitcoin&from=2019-04-21&sortBy=publishedAt&apiKey=df861cbe5f0b466996fff1ac1b60072e

Vòng đời ứng dụng sẽ như sau:

STATE(before call) →STATE(during call) →STATE(answer received)

Chúng ta sẽ cần tạo cấu trúc thư mục như sau:

Nội dung trong file index.js

Trong tập tin này, tôi đã khởi tạo redux store . Store này sử dụng hai phần mềm trung gian logger và SAGA. Redux-logger để kiểm tra trong bảng điều khiển kích hoạt các hành động và trạng thái của Redux store. Nội dung trong file APP.js

Nội dung trong file Button.js

Nội dung trong file actions/index.js.

Trình tạo hành động getNews . Nó trả về một đối tượng. Và cho reducer biết cách xử lý loại hành động này. Bây giờ trình reducer sẽ như thế sau:

Nội dung trong file reducers/index.js

Nội dung trong file sagas/index.js

Tập tin này khá phức tạp . Tôi đoán nó có vẻ khá khó khăn vì cú pháp bất thường của ES6 GENERATORS như ‘yield’ and , tôi xuất chức năng này rootSaga, trong đó tôi gọi hàm actionWatcher.

function* actionWatcher() { yield takeLatest('GET_NEWS', fetchNews) }

Nói một cách đơn giản, nó giống như tôi nói với SAGA hãy chờ đợi hành động ‘GET_NEWS, để được gửi đi. Và những ‘GET_NEWS, kh bị từ chối để gọi hàm fetchNews. Bên trong hàm fetchNews thực hiện lệnh gọi không đồng bộ tới API và khi yêu cầu đến hành động tiếp theo { type: “NEWS_RECEIVED”, json: json.articles, } được gửi đi. Như bạn có thể thấy, tôi không cần phải viết hành động, “NEWS_RECEIVED” in actions/index.js vì nó được mô tả đầy đủ ở đây.

Đến bây giờ, hãy để reducer biết cách đối phó với hành động này “NEWS_RECEIVED”.

Nội dung trong file reducers/index.js

Cuối cùng nội dung của reducer. Khi phản hồi từ lệnh gọi API đã nhận được trạng thái Redux sẽ có tin tức thuộc tính chứa json của một tin tức.

Nội dung trong file NewsItem.js

Nội dung file Loading.js

Và cuối cùng để xem kết chúng ta chạy lệnh sau:

Bạn có thể xem demo tại link sau:

https://sagatutorialapp.netlify.com/

Bạn có thể xem source tham khảo tại reposetory sau:

https://medium.com/@geekrodion/redux-saga-create-react-app-b6484f704d68 https://medium.com/@lavitr01051977/make-your-first-call-to-api-using-redux-saga-15aa995df5b6

Redux Qua Ví Dụ Thực Tế: Redux

Hôm nay chúng ta sẽ tiếp tục tìm hiểu về Redux và vai trò của nó trong application.

Redux được mô tả như là một predictable state container cho application. Phần lớn các bạn thường thấy Redux được đi một cặp với Redux ở client side application. Thực tế, Redux còn hơn thế, giống như Javascript đã lấn sân sang server side với NodeJS hay dùng trong việc phát triển IoT application, Redux có thể được sử dụng ở bất cứ nơi đâu cần một predictable state container. Bạn phải hiểu và nắm bắt được vấn đề mà nó giải quyết, thì mới nên sử dụng nó.

Nào cùng bắt đầu tìm hiểu Redux thôi.

Cách mà Redux làm việc

Nói một cách đơn giản, bạn sẽ trigger một action trong component, nó có thể là một button, một text field, hay blabla… sẽ có một thành phần khác listen đến cái action mà bạn vừa trigger, sử dụng payload mà action đó trả về, sinh ra một global state mới từ payload đó sau đó trả ngược lại cho component để nó thực hiện nhiệm vụ render lại nếu cái global state đó có thay đổi so với global state trước đó. Khi component được render xong thì lúc đó chu trình coi như hoàn tất.

Lý thuyết thế đủ rồi, còn chờ gì nữa mà không bắt tay vào implement nhỉ!

Từ folder của project các bạn cài đặt như sau.

npm install --save redux redux-logger

Dispatch action

Bây giời chúng ta sẽ tạo action đầu tiên. Mở file src/index.js lên.

import React from 'react'; import ReactDOM from 'react-dom'; import TrackList from './components/TrackList'; import {configureStore} from './store'; import * as actions from './actions'; const tracks = [ { id: 1, title: 'Em của ngày hôm qua' }, { id: 2, title: 'Cơn mưa ngang qua' } ]; const store = configureStore(); store.dispatch(actions.setTracks(tracks)); ReactDOM.render( document.getElementById('app') );

Như các bạn có thể thấy, chúng ta cài đặt một store object bằng function configureStore, chúng ta chưa vội implement nó lúc này. Hãy tìm hiểu store là gì trước đã. Store là một singleton object trong Redux, và giữ vai trò như là global state object. Hơn thế nữa, nó có khả năng sử dụng một số API để dispatch một action, lấy được trạng thái của store hay notify nếu store có sử thay đổi.

Trong trường hợp này, chúng ta đang dispatch action với payload là list track đã được hard code. Và vì thế chúng ta sẽ không cần phải pass tracks vào trong component như trước nữa, chúng đã không còn thuộc về nhau anymore. Haha.

Action Types

Chúng ta cần một file để chứa constant, những constant đầu tiên sẽ là những constant để giải quyết việc xác định action nào. Những constant này sẽ được sử dụng bởi cả reducer và action.

Tạo file src/core/constants.js.

export const ActionTypes = { TRACKS_SET: 'TRACKS_SET' }

Action Creators

Bây giờ chúng ta sẽ tìm hiểu về action creator. Action creator sẽ trả về một object với type và payload. Type là một trong số những constant ActionTypes mà chúng ta đã tạo ở trên. Payload có thể là bất cứ thứ gì, nó sẽ được sử dụng để thay đổi global state của application.

Có nhiều cách để structure một React/Redux application, trong bài này tôi sẽ dùng cách đơn giản nhất, chắc chắn sau series này, chúng ta sẽ có thêm một vài bài để refactor cũng như structure lại cho code base đẹp hơn.

Tạo src/actions/tracks.js.

import {ActionTypes} from '../core/constants'; export function setTracks(tracks) { return { type: ActionTypes.TRACKS_SET, tracks }; };

Action creator đầu tiên của chúng ta sẽ nhận vào input là list tracks, cái mà chúng ta sẽ set vào global state. Action creator này sẽ trả về một object chứa action type và payload là list mà chúng ta đã truyền vào.

Để giữ cho folder structure gọn gàng, mặc dù là cách cơ bản nhưng chúng ta cũng nên tạo một file index.js trong folder actions để chứa tất cả các action creator như sau.

import {setTracks} from './track'; export { setTracks };

Trong file này chúng ta sẽ bundle tất cả các action creator mà chúng ta có và export chúng ra như là một public interface cho các phần còn lại sử dụng.

Reducer

Sau khi dispatch action và implement action creator, chúng ta phải implement thứ mà ai cũng biết là thứ gì, nó làm nhiệm vụ canh chừng nếu có bất cứ action nào được gọi và update global state. Nó được gọi là reducer, bởi vì sao nó lại được gọi như vậy? Nói một cách đơn giản nó nhận vào type và payload action trả về, và từ đó biến state cũ thành state mới. Lưu ý rằng thay vì thay đổi state trước đó thì chúng ta sẽ trả về một object state mới, state là immutable.

State trong redux phải là immutable. Bạn sẽ không thể thay đổi state mà phải trả về một object state mới, việc này nhằm mục đích tránh những side effect trong application, chúng ta sẽ nói sâu hơn về vấn đề tại sao state lại phải là immutable trong một bài khác, vì nó vượt qua khuôn khổ mà chúng ta muốn biết trong bài này.

Nào cùng tạo reducer. Tạo file src/reducers/track.js.

import {ActionTypes} from '../core/constants'; const initialState = []; export default function(state = initialState, action) { switch (action.type) { case ActionTypes.TRACKS_SET: return setTracks(state, action); } return state; } function setTracks(state, action) { const {tracks} = action; return [...state, ...tracks]; }

Như các bạn có thể thấy, chúng ta sẽ export một anonymous function. Reducer sẽ nhận vào một state và action như tôi đã nói từ trước. Bản thân reducer sẽ phải handle nhiều action type khác nhau, bây giờ thì các bạn nhìn thấy có một, nhưng trong tương lai khi application phình to ra thì cũng nhiều đáng kể đấy. Cũng giống như cách chúng ta làm với action creator, chúng ta sẽ tạo một file index.js trong folder reducers để chứa hết tất cả reducer, và cung cấp ra cho các thành phần khác của application sử dụng.

import {combineReducers} from 'redux'; import track from './track'; export default combineReducers({ track });

Để tiết kiệm thời gian, chúng ta sẽ sử dụng helper function của Redux, đó là combineReducers. Thông thường bạn sẽ phải export từng reducer, reducer đó sẽ phải trả về toàn bộ state của application. Khi sử dụng combineReducers, bạn có thể sử dụng multiple reducer mỗi reducer sẽ trả về một substate. Nếu không sử dụng nó bạn sẽ phải access list tracks trong global state như thế này.

state.tracks

Nhưng với combineReducers, bạn sẽ get thẳng từ subset của state như sau.

state.track.tracks

Setting Store

Rồi, chúng ta đã có action, đã có action type và action creator, rồi chúng ta cũng đã có reducer để xử lý new state. Giờ chúng ta chỉ còn thiếu mỗi store, cái mà chúng ta đã làm từ lúc đầu nhưng vẫn bỏ ngõ trong file src/index.js.

Hãy nhớ rằng, chúng ta đã dispatch action thông qua store api dispatch.

store.dispatch(actionCreator(payload))

Nào cũng tạo store. Tạo file src/store.js.

import {createStore, applyMiddleware} from 'redux'; import createLogger from 'redux-logger'; import rootReducer from '../reducers/index'; const logger = createLogger(); const createStoreWithMiddleware = applyMiddleware(logger)(createStore); export default function configureStore(initialState) { return createStoreWithMiddleware(rootReducer, initialState); }

Redux cung cấp cho chúng ta function createStore. Chúng ta chỉ cần function này với những combined reducer chúng ta đã tạo trước đó để tạo store.

Redux store được khai báo với một middleware, thành phần này sẽ có nhiệm vụ để làm một số nhiệm vụ gì đó giữa khoảnh khắc dispatch action và khoảnh khác payload đến được với reducer. Có hàng tá middleware cho Redux ở ngoài kia, trong bài này, tôi chỉ sử dụng logger middleware để bắt đầu, cũng như để cho các bạn biết tới middleware là gì. Logger middleware sẽ console log previousState và nextState mỗi khi có action. Giúp chúng ta có thể keep track application một cách dễ dàng hơn. Tại sao chúng ta lại sử dụng nó, hồi sau sẽ rõ.

Cuối cùng chúng ta sử dụng helper function applyMiddleware để wire store và middleware chúng ta vừa khai báo.

Việc gì cần làm cũng đã làm xong rồi, thử npm start để xem thành quả nào!

Lúc này bạn sẽ thấy browser có một màu trắng tinh khôi, nhưng đừng vội buồn vì có lỗi, hãy mở console lên nào, chúng ta sẽ thấy action đã được dispatch.

Tuy nhiên thì vì chúng ta chưa connect component TrackList với store nên trang trắng là điều đương nhiên.

Source code trong bài các bạn có thể tìm thấy ở https://github.com/codeaholicguy/react-redux-tutorial/tree/master/redux

Bài gốc: Codeaholicguy

Làm Việc Theo Tổ Và Làm Việc Theo Nhóm – Sciences &Amp; Technologies In The World

Có khác biệt giữa “Làm việc theo tổ” và “Làm việc theo nhóm”. Là người quản lí phần mềm, việc của bạn là quản lí mọi người và đảm bảo rằng họ “làm việc với nhau” để làm ra sản phẩm đầy đủ theo thời gian, trong chi phí và có chất lượng cao. Vì hầu hết các dự án phần mềm đều yêu cầu “làm việc theo tổ”, chính việc của bạn là hình dung ra liệu bạn có “nhóm” hay “tổ”, và tạo ra môi trường nơi họ có thể làm việc hiệu quả. Tất nhiên, mọi người nói về tầm quan trọng của “làm việc theo tổ” nhưng làm sao điều đó xảy ra được nếu họ chưa bao giờ làm việc trong một tổ?  Làm sao bạn có thể làm cho mọi người làm việc cùng nhau nếu họ được đào tạo ở trường rằng công việc cá nhân được coi là “tốt” còn làm việc theo tổ được coi là “gian lận”? Làm việc theo tổ giống cái gì? Làm sao bạn biết liệu đó là một tổ hay không? Ta hãy nhìn vào những tình huống sau để hiểu khác biệt giữa “làm việc theo tổ” và “làm việc theo nhóm”:

C và D cả hai đều là kĩ sư phần mềm, tất cả họ đều tốt nghiệp từ cùng một đại học và làm việc cho cùng một công ti nhưng trong các dự án khác nhau. Bởi vì cả hai dự án của họ đang dùng công nghệ mới có tên XYZ, mỗi lần họ gặp nhau họ đều nói về công nghệ này. Họ có là một tổ không? – Không, họ KHÔNG là một tổ bởi vì họ làm việc trong các dự án khác nhau. Họ đang nói với nhau về công nghệ mới trên cơ sở bạn bè riêng, không như được yêu cầu.

E và F làm việc cho cùng công ti, trong cùng nhóm phần mềm. Từng người đều có trách nhiệm phân biệt cho các khu vực chức năng khác nhau. E hội tụ vào hệ phục vụ mạng còn F chịu trách nhiệm về ứng dụng phần mềm. Họ gặp nhau đều đặn trên cơ sở thông tin cho nhau về lịch biểu bảo trì mạng. Họ phối hợp với nhau trên cơ sở sao lưu hàng ngày, cập nhật phần mềm và an ninh. Họ có là một tổ không? – Không, họ KHÔNG là một tổ bởi vì họ có việc làm khác nhau, làm việc ở các khu vực khác nhau và không cần E và F cùng làm việc để đạt tới cái gì chung. Họ chỉ phải “phối hợp” với nhau để đảm bảo mọi sự làm việc tương ứng.

G và H cả hai đều là các kĩ sư phần mềm, họ làm việc trên một dự án rất lớn với hàng trăm kĩ sư. Bởi vì nó quá lớn, người quản lí chia dự án này thành nhiều nhóm nhỏ. Họ không biết nhau vì họ làm việc trong các nhóm khác nhau nhưng họ biết rằng một ngày nào đó, họ sẽ phải phối hợp các chức năng với nhau khi họ tích hợp công việc của mình vào sản phẩm cuối cùng. Họ có phải là một tổ không? – Không, dự án của họ quá lớn và họ thậm chí không biết nhau. Tuy nhiên nhóm của họ bên trong dự án lớn có thể vận hành như “tổ cộng tác”.

X và Y và sáu người khác làm việc trên một dự án phát triển phần mềm. Họ có những kĩ năng khác nhau nhưng tất cả đều cần để xây dựng sản phẩm phần mềm. Họ cam kết cùng nhau với cùng mục đích dự án và làm việc rất chặt chẽ để chuyển giao phần mềm trong việc lặp bốn tuần vì họ dùng Scrum – phương pháp mau lẹ agile. Họ chia sẻ các mục đích, họ đảm nhiệm lẫn nhau, và nếu họ không làm việc cùng nhau, không chia sẻ thông tin với nhau, không giúp đỡ lẫn nhau, và không học lẫn nhau, họ sẽ KHÔNG thành công và dự án có thể thất bại. Họ có là tổ không? – Có, dứt khoát họ là một tổ và làm việc tổ là quan trọng cho họ để thành công cùng nhau.

1)     Bạn phải thiết lập mục đích dự án và đảm bảo rằng mọi người làm việc cho dự án đều cam kết đạt tới mục đích đó, cũng như các thành viên cam kết lẫn với nhau để giúp nhau và chia sẻ việc đảm nhiệm.

2)     Bạn phải kiểm tra các kĩ năng cần để làm công việc và phân công người làm việc tương ứng theo kĩ năng và kinh nghiệm của họ. Mọi người phải hiểu vai trò, trách nhiệm và đảm nhiệm của mình.

3)     Bạn phải phân tích công việc vì một số công việc một người có thể hoàn thành từ đầu tới cuối nhưng một số công việc đòi hỏi nhiều người làm việc cùng nhau và tích hợp để tạo ra sản phẩm tập thể cuối cùng cố kết vì công việc của họ tuỳ thuộc vào công việc của người khác.

5)     Bạn phải thiết lập hệ thống giám sát nơi người cấp cao hay người có kinh nghiệm có thể giúp đào tạo và hỗ trợ người khác.

Xây dựng tổ không xảy ra một cách ngẫu nhiên đâu. Nó phải được lập kế hoạch và được đào tạo và việc của bạn như người quản lí sẽ làm khác biệt giữa người quản “tổ” hay người quản lí “nhóm”. Như nhiều người trong các bạn có thể thấy sự khác biệt giữa thể thao theo tổ như bóng đá, và thể thao cá nhân như tennis. Không đội bóng nào thắng được gì nếu cầu thủ chỉ muốn đá vào bóng. Là môn thể thao tổ, bóng đá bao giờ cũng cần một huấn luyện viên người cung cấp chiến lược, kế hoạch, và huấn luyện người của họ để phối hợp bởi vì tất cả họ đều chia sẻ một mục đích chung: Thắng trận đấu. Cùng điều đó có thể được áp dụng cho dự án phần mềm.

—-English version—-

Blog185- Teamwork and group work

There is a different between “Team-work” and “Group-work”. As a software manager, your job is to manage people and make sure that they are “working together” to get the product complete on time, within costs and with high quality. As most software projects require “teamwork”, it is your job to figuring out whether you have a “group” or a “team”, and create an environment where they can work effectively. Of course, people talk about the important of “teamwork” but how does it happened if they never work in a team?  How can you make people working together if they are trained in school that individual work is considered “good” and teamwork is considered “cheating”? What does teamwork look like? How do you know whether it is a team or not? Let‘s look at the following situations to understand the differences between “team-work” and “group-work”:

A is a software engineer and B is a hardware engineer, they all graduated from the same university and working for the same company. They meet often to talk about computer games, music, and movies that they both enjoy. Are they a team? – No, they are NOT a team because they work in different group. Their activities in the company are not related to each other and their works do not require that they work together.

C and D are both software engineers, they all graduated from the same university and working for the same company but in different projects. Because both of their projects are using a new technology called XYZ, each time they see each other they talk about this new technology. Are they a team? – No, they are NOT a team because they work in different projects. They are talking with each other about the new technology on their own friendship, not as required.

E and F work for the same company, in a same software group. Each has distinct responsibility for different functional areas. E is focusing on Network server and F is responsible for software applications. They meet on a regular basis to keep each other inform on network maintenance schedules. They coordinate with each other for daily backup, software updates and security. Are they a team? – No, they are NOT a team because they have different jobs, work in different areas and it is not necessary for E and F to work together to achieve anything in common. They only have to “coordinate” with each other to make sure things work accordingly.

G and H are both software engineers, they work on a very large project with hundred engineers. Because it is too large, manager divided the project into several small groups. They do not know each others as they work in different groups but they know that someday, they will have to coordinate their functionalities together as they integrate their works into the final product. Are they a team? – No, their project is too big and they do not even know each other. However their groups within the larger project could function as “collaborative teams”.

X and Y and six other people work on a software development project. They have different skills but all of which are necessary to build the software product. They jointly commit to the same project goal and work very closely to deliver the software in four-week iterations as they are using Scrum – an agile method. They share goals, they are mutually accountable, and if they don’t work together, do not share information with each others, do not help each others, and do not learn from each other, they will NOT succeed and the project may fail. Are they a team? –Yes, definitely they are a team and teamwork is important for them to succeed together.

1)     You must set up project goals and make sure that everybody on the project is committing to achieve that goals, as well as members mutually committing to help each other and sharing accountability.

2)     You must examine the skills needed to do the work and assign people to work according to their skills and experiences. People must understand their roles, responsibilities and accountability.

3)     You must analyze the work as some works that one person can complete from start to end but some works require several people to work together and integrate to create a coherent collective final product as their works depend on others’ work.

4)     You must have regular meeting to discuss project status, review works, and identify issues and risks among team members. They also need to share what have been accomplished and what have not and whether anybody needs help.

5)     You must set up mentoring system where senior or experienced people can help train and support the others.

Building a team doesn’t happen by accident. It must be planned and trained and your job as a manager will be different from the manager “a team” or manager “a group”. As many of you can see the different between a team sport such as soccer, and individual sport such as tennis. No soccer team ever wins anything if member only want to kick the ball. As a team sport, Soccer always need a coach who provides strategy, plan, and train their people to coordinate because they all share a common goal: To win the match. The same can be applied to software project.

Cập nhật thông tin chi tiết về Redux Saga Phần Iii (Tips Khi Làm Việc) trên website Channuoithuy.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!