[IT読解]Bài 2 : Thiết kế phần mềm có cần kinh nghiệm lập trình không
Tiger Nguyen
Như thường lệ, giữa tuần mình up bài hay lên cho mọi người đọc. Cuối tuần sẽ có bản dịch.
Chủ đề lần này như title, thiết kế phần mềm có cần phải có kinh nghiệm lập trình không. Bài viết cực kỳ giá trị này do mình lấy từ blog của CEO Sonic Garden. Các bạn đọc và đánh giá xem thử quan điểm ông ấy đúng hay sai, bản thân có ý kiến phản biện không. Riêng mình mới chỉ làm design có 3 năm, còn rất nhiều khiếm khuyết. Sau khi đọc bài thấy sáng tỏ ra nhiều thứ. Ví dụ trước khi trả lời cho câu hỏi ở trên, ông tách design thành 2 loại, mỗi loại có yêu cầu khác nhau. Các này mình trước giờ đã trải qua nhưng chưa hề nghĩ ra. Thật là vi diệu.
Có lẽ nhiều người trong số bạn đọc blog này sẽ có ý kiến cho rằng nếu là người chưa từng code thì khó mà design được. Tôi cũng từng nghĩ như các bạn vậy nhưng sau khi nói chuyện với rất nhiều người thì thấy có gì đó sai sai.
Sau khi đi tìm hiểu cặn kẽ bản chất của cái cảm giác “sai sai” ở trên, tôi đã thử suy nghĩ về các khía cạnh của 2 vấn đề đã nêu ra từ đầu đó là Lập Trình và Thiết Kế. Để làm rõ sự khác nhau của cách tiếp cận đối với từng người trong việc thiết kế, thì phải giải quyết triệt để các khúc mắc.
Đầu tiên tôi sẽ ghi ra ý kiến cá nhân đối với khái niệm “Thiết Kế phần mềm là gì”.
ソフトウェア開発はすべてが「設計」である
Toàn bộ các công đoạn phát triển phần mềm đều thông qua thiết kế.
Trong chế tạo sản phẩm, ta có thể chia thành 2 công đoạn lớn đó là “thiết kế” và “chế tạo”. Việc quyết định làm cái gì và như thế nào ta gọi là thiết kế, còn thực thi để cho ra sản phẩm thì gọi là “chế tạo”.
たとえば、家を建てようという場合は、建築士が「設計」を行い、大工が「製造(施工)」を行う、という役割分担だと考えられます。また、iPhoneの裏にはこう印字されています。”Designed by Apple in California assembled in China”。これは「設計」をカリフォルニアのアップルが行って、「製造(組み立て)」は中国で行われたということです。
Ví dụ, trường hợp xây một ngôi nhà, ta cũng phân chia ra được 2 vai trò như sau : kiến trúc sư sẽ [thiết kế], thợ xây sẽ làm công việc [xây dựng]. Thêm 1 ví dụ khác, các bạn có thể thấy dòng chữ in phía sau chiếc iPhone “Designed by Apple in California assembled in China”. Ở đây, phía thiết kế chính là Apple tại Califọtnia. Còn chế tạo là do các xí nghiệp bên Trung Quốc.
Như vậy là nếu như chia việc làm ra sản phẩm thành 2 phần : thiết kế vs chế tạo thì không có gì sai đúng chưa nào.
Trong software thì như thế nào chúng ta hãy cùng xem xét. Phát triển phần mềm cũng chia đôi được thành “thiết kế” + “chế tạo”. Vậy thì “thiết kế” ở đây chỉ cái gì vs “chế tạo” là gì ?
Việc phát triển một sản phẩm phần mềm thường sẽ có rất nhiều người tham gia. Riêng công việc “chế tạo” thì chỉ bao gồm lập trình. Vậy nên chỉ có những người biết lập trình mới làm được công đoạn “chế tác”.
設計にはプログラミング経験が必要か否か
Thiết kế phần mềm có cần kinh nghiệm lập trình không ?
Cuối cùng, chúng ta sẽ quay trở về câu hỏi đã đặt ra từ đầu. Tính đúng sai của vấn đề “Người không biết lập trình mà đi làm thiết kế”. Thực ra thiết kế phần mềm có tới 2 loại đó là “Requirement Design” vs “Source code Design”.
Với “requirement design” (thiết kế yêu cầu) thì người muốn làm ra phần mềm (Product Owner) không nhất thiết phải có programming skill (kỹ thuật lập trình), nhưng mà Programmer (Lập trình viên – level cao hơn developer nhé) – người mà lập trình cái software đó nếu không nhảy vào cùng thiết kế thì sẽ không thể có được 1 bản design hoàn hảo.
Còn “Source code design” thì tất nhiên là phải cần người có skill lập trình rồi. Trong nghành lập trình thời kì này thì việc tách ra thành “source code design” vs “coding” rất khó, vì nếu phân chia kiểu đó sẽ không mang lại hiệu quả cho người đảm nhận.
Kể từ bây giờ thì người nào chỉ làm công việc “requirement design” thì coi chừng sẽ thất nghiệp. Và cũng sẽ không còn người nào mà chỉ biết có mỗi “source code design” cả.
Kết
Các bạn hãy khoan vội coi việc này là đúng hay sai. Đó chỉ là ý kiến của ông CEO nào đấy (link dưới). Thực ra tốt hơn hết là hãy luôn đặt cái tâm của mình vào mỗi sản phẩm thiết kế. Tức là suy nghĩ cả 2 khía cạnh, design của mình đã đảm bảo được yêu cầu đầu vào chưa. Đảm bảo ở đây là đúng – đủ. Thứ 2 đó là đầu ra của mình có tính khả thi không và đội tiếp nhận đọc xong có hiểu và làm theo được không. Đối với “source code design” thì không những phải biết lập trình mà phải dày dạn kinh nghiệm lập trình mới làm được. Vì khi master coding mình mới có thể biến những thứ phức tạp thành câu chữ giản đơn.