28 Jan, 2021
Phần mềm và nhạc rock
Tôi đã nhận được một bức thư bất thường từ một sinh viên cũ mà tôi muốn chia sẻ cùng các bạn, một số trong các bạn có thể thấy nó thú vị
Thưa giáo sư,
Thầy đã đề nghị em chia sẻ kinh nghiệm làm việc của em với các sinh viên hiện thời. Kinh nghiệm của em có thể là bất thường bởi vì bên cạnh làm việc như người phát triển phần mềm, em cũng là một nhạc sĩ trong nhóm nhạc rock. Chúng em du hành dọc bờ biển California nơi em và cả nhóm dựng lên sân khấu và biểu diễn cho hàng nghìn người, người khác trả tiền để xem biểu diễn của chúng em.
Tôi thích phần mềm nhưng đam mê của tôi là trong âm nhạc. Có việc làm tốt giúp tôi theo đuổi mối quan tâm của tôi trong âm nhạc. Với thu nhập từ việc làm phần mềm, tôi có thể mua được nhạc cụ tốt nhất, hệ thống âm thanh tốt nhất cho nhóm rock của tôi. Tôi để các bài hát của chúng tôi lên YouTube và đã có nhiều ghé thăm ở đó. Chúng tôi đã có CD đầu tiên của mình được bán hàng trăm nghìn bản và trên một triệu tải xuống rồi chúng tôi trở nên nổi tiếng. Bây giờ tôi có việc làm tốt nhất ở cả hai thế giới: Người phát triển phần mềm ban ngày và ngôi sao nhạc rock ban đêm.
Trong cách tiếp cận Agile, tổ phát triển phải tự tổ chức để thiết kế, viết mã, kiểm thử và đưa ra phần mềm cứ mỗi bốn tuần (Sprint). Người dùng có chức năng mới mọi lúc chúng ta đưa ra phần mềm. Nếu họ thích nó, họ để chúng ta biết. Nếu họ không thích nó, chúng ta cũng biết điều đó. Cùng điều đó cũng xảy ra trong âm nhạc. Ban nhạc của tôi cũng là nhóm tự tổ chức nơi chúng tôi tạo ra bài hát mới, các tiết mục mới cứ mỗi mười hay hai mươi tuần rồi biểu diễn cho thính giả. Chúng tôi lấy phản hồi rất nhanh chóng. Nếu họ thích nó, chúng tôi được hoan hô lâu. Nếu không, họ la hét chúng tôi.
Với hoà nhạc rock, âm nhạc là không đủ. Nó cũng phải có cả ánh sáng tốt và âm thanh tốt. Ánh sáng laser càng nhiều càng tốt. Hệ thống âm thanh phải to nữa. Chúng tôi thuê những người hỗ trợ để quản lí các hệ thống âm thanh và ánh sáng này. Mọi người tham gia vào buổi hoà nhạc rock đều phải là chuyên gia. Từ người kĩ thuật âm thanh cho tới người vận hành ánh sáng, cần một nhóm chuyên gia để dựng buổi diễn lớn. Không có họ, mọi người sẽ không trả tiền để xem chúng tôi.
Phát triển phần mềm cũng giống như điều đó nữa. Nếu bạn là người phát triển giỏi, bạn muốn có ai đó cũng giỏi như bạn hay còn giỏi hơn ở trong tổ của bạn. Tổ phần mềm cần những người hỗ trợ như người kiểm thử, chuyên viên đảm bảo chất lượng, chuyên viên quản lí cấu hình. Điều tồi tệ nhất là có ai đó với kĩ năng giới hạn người làm chậm tổ lại. Mọi người tham gia vào phát triển phần mềm đều phải là chuyên gia. Cần một nhóm chuyên gia để tạo ra phần mềm tốt. Không có họ, mọi người sẽ không mua phần mềm.
Nhiều sinh viên đại học tin rằng lập trình là mọi thứ. Điều này không đúng. Lập trình chỉ là điều nhỏ trong phát triển phần mềm. Bạn cần biết vòng đời phát triển, phương pháp phần mềm cũng như công cụ phần mềm để dùng. Một số trong những điều này không được dạy ở trường cho nên bạn phải học chúng khi bạn làm việc trong công nghiệp nhưng bạn phải học nhanh. Mọi người trong tổ sẽ không chờ đợi bạn vì bạn có thể làm chậm họ. Điều này có nghĩa là bạn phải không chỉ là người lập trình giỏi mà còn là người học nhanh nữa. Chẳng mấy chốc bạn sẽ nhận ra rằng chính khái niệm cơ bản mà bạn đã học ở trường sẽ giúp bạn học nhanh. Chỉ khi làm việc trong công nghiệp, bạn sẽ nhận ra rằng lớp học về cấu trúc dữ liệu hay “lớp chán” về phân tích yêu cầu bây giờ là quan trọng. Không có những tri thức này, bạn sẽ đánh vật đấy. Đây là lí do tại sao các sinh viên lấy “lối tắt”, các sinh viên học “mách nước và thủ thuật” qua được kì thi sẽ không bao giờ sống sót được trong công nghiệp. Không có nền tảng mạnh, họ không bao giờ biết áp dụng tri thức và cách biến đổi chúng thành kĩ năng.
Nhiều người tin rằng kĩ năng ghi ta tốt là mọi thứ. Điều đó không đúng. Chơi ghi ta chỉ là một phần trong nhóm nhạc rock. Bạn cần biết về xu hướng âm nhạc, việc sản xuất chương trình radio và TV cũng như nhạc cụ để dùng. Một số trong những điều này là không có sẵn cho nên bạn học chúng khi bạn làm việc trong công nghiệp nhưng bạn phải học nhanh. Thị trường rất cạnh tranh và thính giả sẽ không đợi bạn. Nếu bạn không có bài hát mới, tiết mục mới thì họ sẽ bỏ bạn. Điều này nghĩa là bạn phải không chỉ là nhạc sĩ giỏi mà còn là người học nhanh nữa. Đây là chỗ tôi nghĩ phần mềm và nhạc rock có nhiều điểm chung. Âm nhạc là ngành công nghiệp đầy những bất ngờ cho nên để sống còn bạn phải học nhanh. Đột nhiên bạn nhận ra rằng có đam mê là không đủ mà bạn phải có “hiểu biết doanh nghiệp” nữa. Không có nó, bạn sẽ đánh vật vì điều đó là rất cạnh tranh với “phía tối” mà hầu hết mọi người không biết. Đây là lí do tại sao nhạc sĩ ngây thơ bị khai thác và những người có thái độ hồn nhiên sẽ không bao giờ tồn tại trong ngành công nghiệp này.
Với mọi vai trò trong tổ phần mềm, có tập các kĩ năng cần được học. Nhưng trong khi bạn học những kĩ năng này, bạn phải có tri thức nào đó về những kĩ năng của các vai trò khác nữa. Là một tổ, bạn phải học về cách tổ vận hành, cách nó làm việc cùng nhau để tạo ra phần mềm. Nhiều sinh viên chỉ hội tụ vào ngôn ngữ lập trình nhưng không vào đảm bảo chất lượng, quản lí cấu hình hay quản lí yêu cầu. Một sai lầm lớn là dự án phần mềm phần nhiều bị coi chỉ là viết mã. Chẳng hạn, là người kiểm thử bạn phải biết mã tốt so với mã kém. Việc của bạn bị ảnh hưởng trực tiếp bởi chất lượng của mã, cho nên điều mấu chốt với bạn là làm việc với người phát triển để loại bỏ các lỗi trước khi nó sang pha kiểm thử. Là người phát triển, điều quan trọng cần biết cái gì đó về quản lí dự án. Khác biệt giữa quản lí giỏi và quản lí kém là khác biệt giữa dự án thành công và dự án thất bại. Nhân tiện, khi dự án thất bại, người chủ đuổi người quản lí, chứ không đuổi người phát triển.
Cùng điều đó cũng xảy ra cho ban nhạc rock. Điều bản chất cho nhạc sĩ là biết về kĩ năng và vai trò của nhau. Người đánh trống chắc chắn biết khi anh ta phải dừng để cho người chơi ghi ta “độc tấu”. Người chơi đàn bass có thể gợi ý hợp âm nào đó cho người chơi ghi ta để họ có thể hài hoà âm nhạc. Kĩ sư âm thanh, chuyên gia ánh sáng phải lắng nghe cẩn thận chăm chú mọi thứ sẽ diễn ra trong buổi hoà nhạc, và làm những điều chỉnh tương ứng. Tất cả những người này đều làm việc dưới việc quản lí của đạo diễn sân khấu có kĩ năng và kinh nghiệm. Là nhạc sĩ, hiệu năng của bạn là tốt như âm thanh từ nhạc cụ của bạn. Cho nên điều mấu chốt cho nhạc sĩ là làm việc với những người hỗ trợ để đảm bảo ánh sáng đúng, âm thanh đúng trước từng buổi diễn. Khác biệt giữa buổi hoà nhạc rock tốt và buổi hoà nhạc kém là khác biệt giữa biểu diễn thành công và biểu diễn thất bại. Nhân tiện, khi buổi biểu diễn thất bại, người quản lí ban nhạc đuổi đạo diễn sân khấu, không đuổi nhóm hỗ trợ.
Không nhạc sĩ nghiêm chỉnh nào chơi nhạc cụ kém. Nhạc sĩ thành công chú ý và có nhạc cụ thích hợp cho việc làm này. Họ phải chuẩn bị các bài ca mà họ sẽ chơi, họ phải biết tiết mục của họ, vai trò của họ. Khi biểu diễn, nhạc sĩ không chỉ giỏi với nhạc cụ của họ mà họ phải biết giới hạn của hệ thống âm thanh, điều có nghĩa là họ phải biết mọi thứ về nhạc cụ và khi nào dùng chúng để có được âm thanh tốt hơn.
Cùng điều đó cũng áp dụng cho phần mềm. Trước khi bạn viết ra một dòng mã, bạn cần biết về yêu cầu, thiết kế, giao diện người dùng, và công cụ kiểm thử. Khi kiểm thử, không chỉ bạn phải giỏi tìm ra lỗi, mà còn phải có khả năng viết kế hoạch kiểm thử, trường hợp kiểm thử, và phát triển kiểm thử tự động. Bạn phải làm điều đó theo cách rõ ràng và chính xác nhất. Nếu bạn làm việc với người dùng, bạn cần hiểu qui trình doanh nghiệp của họ để cho bạn có thể viết chúng ra thành câu chuyện người dùng, trường hợp người dùng để chúng có thể được viết mã và kiểm thử mà không nhập nhằng. Chỉ thế bạn mới nhận ra rằng lớp học về yêu cầu về trường hợp sử dụng, về UML, về câu chuyện của người dùng là có nhiều ý nghĩa hơn cho bạn. Là sinh viên, bạn có thể nghĩ rằng các lớp này toàn về lí thuyết, không quan trọng. Xin đừng đánh giá thấp chúng. Chúng có đó là có chủ định cả đấy.
Không nhạc sĩ nào ra sân khấu mà không có chuẩn bị, không phần mềm nào được viết mã mà không có hiểu về thiết kế. Đây là khái niệm khó cho nhiều người phát triển phần mềm, nhiều người chỉ muốn viết mã mà không tư duy một cách cẩn thận. Nếu họ viết mã kém, họ viết lại chúng, nếu chúng có lỗi, họ sửa chúng sau. Không nhạc sĩ nào có thể lặp lại cùng bài hát nếu họ phạm sai lầm. Thính giả sẽ la hét họ và mắng mỏ họ. Họ không bao giờ có cơ may thứ hai cho nên trong trường hợp này tôi nghĩ nhạc rock là tốt hơn phát triển phần mềm.
Khi buổi hoà nhạc kết thúc, người quản lí sẽ triệu tập cả ban nhạc lại và bảo họ cái gì có tác dụng và cái gì không tác dụng. Khi dự án phần mềm hoàn thành, bao nhiêu người quản lí dự án sẽ triệu tập tổ và nói cho họ cái gì có tác dụng và cái gì không có tác dụng? Phần lớn những người quản lí dự án sẽ vui mừng rằng dự án đã xong và phần mềm được chuyển giao cho khách hàng rồi họ lo nghĩ về sửa lỗi sau. Bao nhiêu người phát triển sẽ suy nghĩ cẩn thận về hiệu năng của họ? Bao nhiêu người trong số họ sẽ biết về số lỗi của họ. Đây là chỗ tôi nghĩ nhạc rock tốt hơn phát triển phần mềm nhiều.
Đấy là ý nghĩ của tôi và kinh nghiệm của tôi, tôi ước là sinh viên hiện thời của chúng ta có nhiều thành công. Nhân tiện, có nhiều việc phần mềm ở California. Dường như là mọi công ti đều đang thuê người phát triển phần mềm và sẵn lòng trả nhiều tiền cho họ. Tôi ước cùng điều đó có thể xảy ra trong nhạc rock.
—-English version—-
Software and rock music
I have received an unusual letter from a former student that I like to share with you, some of you may find it interesting
Dear professor,
You have asked me to share my working experience with current students. My experience maybe unusual because beside working as a software developer, I am also a musician in a rock group. We travel along California coast where I and the band get up on stage and perform for thousands of people who paid good money to see our performance.
I love software but my passion is music. Having a good job helps me to pursue my interest in music. With income from software job, I can buy the best instruments, the best sound systems for my rock group. We put our songs on YouTube and had many hits. We had our first CD which sold hundred thousand copies and over a million downloads then we became famous. Now I have the best job of both worlds: A software developer by day and rock star by night.
In Agile approach, development team must be self-organized to design, code, test and release software every four weeks (Sprint). The users have new functions every time we release software. If they like it, they let us know. If they do not like it, we know it too. The same thing also happens in music. My band is also a self-organized group where we create new songs, new acts every ten or twenty weeks then perform to the audience. We get feedbacks very quickly. If they like it, we have a standing ovation. If not, they shout at us.
For rock concert, music is not enough. It must also have good lighting and good sound. The more laser lighting the better. The sound system must be loud too. We hire supporting people to manage these sound and lighting systems. Everyone involved in rock concert must be an expert. From sound technician to the people operating lights, it takes a group of experts to put on a great show. Without them, people will not pay money to see us.
Software development is like that too. If you are a good developer, you want to have someone as good as you or better to be on your team. A software team needs supporting people such as testers, quality assurance, configuration management specialists. The worst thing is to have someone with limited skills who slow the team down. Everyone involved in software development must be an expert. It takes a group of experts to create good software. Without them, people will not buy software.
Many college students believe that programming is everything. That is not correct. Programming is only a small thing in software development. You need to know development lifecycle, software methods as well as the software tools to use. Some of these things are not taught in school so you have to learn them when you work in the industry but you must learn fast. People on the team will not wait for you as you may slow them down. This means you must not only be a good programmer but also a quick learner too. Soon you will realize that it is the basic concept that you learned in school helps you to learn fast. Only when working in the industry, you will realize that the class about data structure or the “boring class” about requirements analysis are now important. Without these knowledge, you will struggle. This is why students who take “short cut”, students who learn “Tips and tricks” just to pass an exam will never survive in industry. Without a strong foundations, they never know how to apply the knowledge and how to transform them into skills.
Many people believe that good guitar skill is everything. That is not correct. Guitar playing is only a part in a rock group. You need to know about the music trends, radio and TV productions as well as the musical tools to use. Some of these things are not available so you learn them when you work in the industry but you must learn fast. The market is very competitive and audience will not wait for you. If you do not have new songs, new acts then they will abandon you. This means you must not only be a good musician but also a quick learner too. This is where I think software and rock music have many things in common. Music is an industry full of surprises so to survive you must learn fast. Suddenly you realize that having passion is not enough but you must have the “business savvy” too. Without it, you will struggle because it is a very competitive with a “dark side” that most people do not know. This is why naïve musician get exploited and people with an innocent attitude will never survive in this industry.
For every role on software team, there is a set of skills to be learned. But while you learn these skills, you should have some knowledge of the skills of the other roles as well. As a team, you have to learn about how the team functions, how it work together to create software. Many students only focus on programming languages but not at quality assurance, configuration management or requirements management. It is a big mistake as software project is much more than just coding. For example, as a tester you must know good code from bad code. Your job is directly affected by the quality of the code, so it is critical for you to work with developers to remove defects before it gets to the testing phase. As a developer, it is important to know something about project management. The difference between good management and bad management is the difference between a successful project and a failure one. By the way, when project failed, the owner fire the manager, not the developer.
The same thing also happens in a rock band. It is essential for musician to know about each other’s skills and roles. The drummer certainly knows when he must stop to let the guitar player does “solo”. The bass player can suggest certain chords for the guitarist to play so they can harmonize the music. The sound engineer, the lighting experts must carefully listening intently to everything that is going on during the concert, and making adjustments accordingly. All of these people are working under the management of a skilled and experience stage director. As musician, your performance is as good as the sound from your instrument. So it is critical for musician to work with supporting people to ensure proper lighting, proper sound before each performance. The difference between a good rock concert and a bad concert is the difference between a successful performance and a failure one. By the way, when a performance failed, the band manager fire the stage director, not the supporting crew.
No serious musician plays a bad instrument. Successful musicians pay attention and get appropriate instruments for the job. They have to prepare for the songs that they are going play, they have to know their acts, their roles. When perform, musicians not only have to be good at their instruments but they have to know the limitation of the sound system, that means they must know everything about instruments and when to apply them to get better sound.
The same thing also applies to software. Before you write a single line of code, you need to know about the requirements, the design, the user interface, and the test tools. When testing, not only you have to be good at finding defects, but also be able to write test plans, test cases, test scripts, and develop automated tests. You must do it in a clear and most accurate way. If you are working with users, you need to understand their business process so you can write them into users stories, use cases so they could be coded and tested without ambiguity. Only then you realize that the requirements class about use-case, about UML, about user-stories are more meaningful to you. As students, you may think that these classes are about theories, not important. Please do not underestimate them. They are there for a purpose.
No musician come on stage unprepared, no software should write code without understand the design. This is a hard concept for a lot of software developers, many just want to code without thinking carefully. If they write bad code, they rewrite them, if they have defects, they fix them later. No musician can repeat the same song if they made mistake. Audience will shout at them and scold them. They never have a second chance so in this case I think rock music is better than software development.
When a concert is over, the manager will call the band together and tell them what work and what does not work. When software project complete, how many project manager would call the team and tell them what work and what does not work? Most project managers would be glad that the project is over and software is delivered to customers then they worry about fixing defect later. How many developers would carefully reflect on their performance? How many of them would know about their number of defects. This is where I think rock music is much better than software development.
Those are my thought and my experience, I wish our current students a lot of success. By the way, there are plenty of software jobs in California. It seems that every companies are hiring software developers and willing to pay a lot for them. I wish the same thing could happen in rock music.