Trong's BSE Diary vol.16

コウェルのBSEのTrongによる日本で働くとは?BSEの仕事とは?日本で働きたいベトナム人、BSEを目指す人へ贈る日記です。

企画と設計は一人で
					できるべきか

第16回、[IT読解]レッスン2:
プログラミング経験のない人がソフトウェアの設計をすること

The author is Trong.
Global Innovation Headquarters
SystemEngineer
I joined CO-WELL in August, 2018


前回の[IT読解-Lesson1]はいかがでしたか?
皆さんは「プログラミング経験のない人がソフトウェアの設計をすること」の是非について、どう考えますか?、ソフトウェアデザインなどのトピックには、プログラミングの経験が必要です。
まず、最初に断っておきたいことがあります。今回の「問い」に関する非常に貴重な内容は、CEO Sonic Garden (https://kuranuki.sonicgarden.jp/2013/01/post-109.html)のブログから直接引用しています。
この内容について紹介することにしたのは、読者の皆さんには彼の意見が正しいか間違っているかご自身の経験から考えてみる良い機会にして欲しかったからです。この内容について様々な意見があると思います。私自身も自分でプログラミング設計し始めてから数年経ちますが、未だに多くの欠陥があります。この記事を読んだ後、読者の皆さんにとって少しでも疑問点が明らかになると嬉しいです。

もしかしたら、このブログの読者であれば、プログラミングが出来ないのにソフトウェア設計をするなんてありえない!という意見の方が多いかもしれません。私も以前はそういう意見ではあったのですが、色々な人と話をするにつけ、どこか違和感を感じていました。
その違和感の正体を探るべく、ソフトウェア設計とプログラミングについて考えてみました。そこでわかったことは「ソフトウェア設計」について、人それぞれに捉え方が違うために、話が通じないことがあることから産まれた違和感だったということです。この記事では、私の考える「ソフトウェア設計とは何か」について書きました。

1-ソフトウェア開発はすべてが「設計」である

Toàn bộ các công đoạn phát triển phần mềm đều thông qua thiết kế.

モノづくりにおいて、大きく工程を2つに分けるとしたら「設計」と「製造」に分けることが出来ます。何をどう作るかを決めることを「設計」と呼び、それを実際のモノとして形にすることを「製造」と呼んでいると思います。
たとえば、家を建てようという場合は、建築士が「設計」を行い、大工が「製造(施工)」を行う、という役割分担だと考えられます。
また、iPhoneの裏にはこう印字されています。”Designed by Apple in California assembled in China”。これは「設計」をカリフォルニアのアップル社が行って、「製造(組み立て)」は中国で行われたということです。
このように、モノづくりでは「設計」と「製造」を分けて考えることが出来ます。
ソフトウェアの場合はどうでしょうか。ソフトウェア開発であっても「設計」と「製造」を分けて考えることが出来ます。では、ソフトウェア開発において「設計」とは何を指していて、「製造」とは何でしょうか。
ソフトウェア開発の業界にいる多くの人が、ソフトウェア開発における「製造」とは、プログラミングのことだと考えています。そのため、「製造」であるプログラミングだけをアウトソースできると信じています。



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”.
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”.



2-設計にはプログラミング経験が必要か否か

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

いや、ちょっと待って、これが本当かどうか確認してください!
これらは一部のCEOの意見にすぎません(https://kuranuki.sonicgarden.jp/2013/01/post-109.html)。
実際問題、それぞれの製品デザインについて、常に心を配る方が優れたデザイン製品ができるでしょう。
つまり、一人のひとが、デザイン仕様と設計の両方の側面を全て考えている方が、その人の作ろうとしているものに必要な設計となっているか、要件定義の段階で確認できます。ここの段階で製品保証されているのとそうでないのとは全く異なります。
そして、プログラミングしたものを本人が出力可能だったのならば、受け取り側の開発チームはそれを読み、すぐに理解し終えることができます。 「ソースコードの設計」では、プログラミングの方法を知っているだけでなく、プログラミングを経験している必要があります。なぜなら、コーディングをマスターすると、複雑なことを単純な言葉に変えることができるからです。


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.



※Facebookページ:https://www.facebook.com/kysubrse で質問も受け付けます。

では、次回もお楽しみに〜〜^ - ^

pagetop