TIL about twine
A simple, interactive storytelling tool
It’s useful for creating interactive flow chart too. For example, a guide to follow when you feel like shit
A simple, interactive storytelling tool
It’s useful for creating interactive flow chart too. For example, a guide to follow when you feel like shit
Các kỹ sư phần mềm có thể được xem như các anh nông dân 4.0: hiền lành, chất phác, không sỡ hữu công cụ sản xuất, chỉ muốn được yên thân ngồi một góc để làm việc.
Oái oăm thay, cây muốn lặng mà gió chẳng dừng. Có rất nhiều vấn đề một kỹ sư phần mềm phải giải quyết ngoài chuyên môn công việc, trong đó bao gồm chính trị trong phát triển phần mềm.
“Chính trị” ngoài nghĩa hẹp là các tranh đấu có tính vĩ mô về điều hành một đất nước còn có nghĩa rộng là tương tác giữa một nhóm người với nhau. Trong phần mềm có rất nhiều bộ phận tham gia: marketing, product owner, project managers, designer, developer… nên hiển nhiên 9 người 10 ý, ai cũng muốn ý kiến của mình được tiếp thu và thực hiện, dẫn đến tranh đấu.
Chính trị len lỏi vào mọi ngách trong cuộc sống!
Đây là loại chính trị diễn ra thường xuyên nhất và căn bản nhất. Khi làm phần mềm hiển nhiên không thể làm một lúc hết các tính năng mà phải chia ra thành milestones và phân phối các tính năng một cách hợp lý.
Tuy nhiên thế nào là “hợp lý” thì còn tuỳ vào quan điểm của từng bộ phận tham gia khác nhau!
Người kỹ sư thường xem xét vấn đề theo quan điểm kỹ thuật, rằng tính năng A làm trước thì làm tính năng B sẽ dễ hơn. Nhưng marketing thì lại thấy nếu cho ra tính năng B ngay thì có thể chạy campaign viral do một sự kiện gần đây… Kết quả là việc có thể chỉ cần 1 ngày để làm nhưng bàn luận nên làm trước hay sau thì lại cần đến một tuần!
Nếu người kỹ sư là người có bản tính ngại tranh đấu sẽ chịu rất nhiều thiệt thòi khi tranh luận. Do đó để tồn tại trong nghề phát triển phần mềm người kỹ sư cần rèn luyện kỹ năng phát biểu, tranh luận và trang bị một tính cách vững vàng cho bản thân.
Những người có vai trò lãnh đạo với tấm bằng MBA rất thích quantification và measure performance. Tuy nhiên trong phát triển phần mềm thì khó có một cách đo đếm performance một cách khách quan và phản ánh đúng thực tiễn. Tuy nhiên điều này vẫn không ngăn lãnh đạo muốn áp dụng thử.
Và kết quả là performance review.
Performance review rất tốn công sức của kỹ sư, vì đó không phải là việc của họ. Họ cần có kỹ năng chuẩn bị một bài ca con cá tự ca ngợi các thành quả mình đã làm, họ cần phải chứng tỏ mình là một kỹ sư xuất chúng bằng cách tranh giành làm những project có impact lớn, làm những project không bao gồm trong phân công…
Một số công ty còn bắt buộc nhân viên “trèo lên đầu nhau mà sống” bằng stack ranking (xếp hạng review từ cao đến thấp, cao thì được thưởng, thấp thì bị trừng phạt, cho dù có làm tốt đi chăng nữa nhưng không tốt bằng người khác hoặc team khác vẫn bị phạt!) và bắt buộc phải chỉ ra điểm cần cải thiện của đồng nghiệp khi làm performance review.
Do đó khi phỏng vấn nên hỏi kỹ một năm công ty tổ chức đánh giá mấy lần? Một lần là đủ, hai lần là hơi nhiều, ba lần trở lên — bạn nên tìm công ty khác để làm phần mềm vì ở công ty này bạn sẽ trở thành nhân vật trong Game of thrones.
Việc kỹ sư phần mềm phải đối ngoại không phải là việc diễn ra hằng ngày, tuy nhiên vẫn diễn ra khá thường xuyên: kỹ sư phần mềm phải làm việc với người ở công ty đối tác, đến công ty đối tác để cài đặt hoặc thảo luận… Đối với người làm phần mềm nguồn mở (và pseudo-open source) thì còn phải nhận báo cáo lỗi từ bên ngoài và trả lời sao cho hợp tình hợp lý.
Một ví dụ rất không đẹp từ bluez**e: khi nhận góp ý từ chuyên gia thì các anh kỹ sư thiếu não không thèm phản biện mà tạo nick clone vào tấn công cá nhân chuyên gia.
Nếu đây là một công ty làm ăn đàng hoàng thì các anh ấy đã mất việc, tuy nhiên, đây là công ty B, một công ty rất giỏi marketing bằng scandal.
Khi bạn trả lời khách hàng hoặc đối tác, bạn là đại diện của công ty. Hành động của bạn sẽ được cân đong đo đếm và dùng để đánh giá công ty của bạn. Cần cân nhắc và hành động sao cho hợp lý, hình ảnh bản thân của bạn cũng sẽ được nâng cao!
Cuối cùng và quan trọng nhất, trong nội bộ công ty rất dễ sinh ra bè phái hoặc người có quyền sẽ thích một số người này và không thích một số người kia. Việc này là rất bình thường trong xã hội nhưng khi nó xảy ra ở công ty, nó sẽ ảnh hưởng trực tiếp đến anh kỹ sư phần mềm. Loại chính trị này không chỉ có ở công ty phần mềm mà có mặt ở hầu hết mọi loại doanh nghiệp.
Khi công ty xảy ra khó khăn, ai sẽ là người lên thớt đầu tiên?
Không phải anh kỹ sư không làm được việc, mà là anh kỹ sư không thân với sếp, cho dù anh ấy có giỏi hơn đi nữa! Trên quan điểm của người quản lý, tìm một người làm đúng ý mình thì khó hơn là tìm một người giỏi chuyên môn.
Do đó, người kỹ sư phần mềm cần khéo léo trong việc giải quyết bất hoà trong công ty, không gây mâu thuẫn nội bộ, làm thân với các thành phần cần thiết phải làm thân (mà cách đơn giản nhất là hút thuốc cùng hay đi nhậu chung).
Nói chung một công ty càng ít các vấn đề về chính trị, luôn luôn thông báo rõ đường lối phát triển cho mọi cá nhân trong công ty là một công ty tốt. Để biết một công ty có tốt không thì cách nhanh nhất là đọc review trên các website như blind (nếu là công ty cùng ngành) hoặc glassdoor.
Công ty F là một công ty phần mềm ở nước V, chuyên môn làm các dự án outsource cho thị trường các nước phát triển. Công ty F luôn luôn nhấn mạnh về các chương trình đào tạo nội bộ khi tuyển dụng ứng viên: đào tạo ngoại ngữ để phục vụ nhu cầu ở nước khách hàng, nước J.
Một nhân viên công ty F muốn phát triển bản thân đã đăng ký học khoá học tiếng J. Tuy nhiên trước khi khoá học bắt đầu anh này được tin mình có học bổng đi Mỹ, thế là anh xin nghỉ.
Công ty F đã bắt anh phải hoàn lại tiền của khoá học tiếng J, một số tiền khá lớn với anh, cho dù anh chưa học được một ngày nào.
Đây là một động thái chính trị chèn ép nhân viên dựa vào nguyên tắc tự bịa ra. Khi tranh cãi này được công bố lên các phương tiện thông tin đại chúng thì công ty F đã rút yêu cầu và đắm xuồng vụ việc.
Bài học: hãy quen vài người bạn làm nhà báo.
A là một công ty về thương mại điện tử. A rất khéo léo khi chơi các con bài chính trị. A đã nhử miếng mồi là sẽ xây cơ sở 2 ở “đâu đấy” và chờ các thành phố lên tiếng ưu đãi đủ thứ cho A.
Trong khi thật ra A đã dư biết sẽ xây cái gì ở đâu.
Khi tình hình lợi nhuận sụt giảm, A vẫn tuyên truyền rằng mình đang tuyển dụng rất nhiều người để nhận ưu đãi thuế của chính phủ…
… tuy nhiên trong nội bộ A thì A dùng cớ performance review để loại bớt nhân viên.
Công ty C cũng giống như A, là công ty về thương mại điện tử. Công ty C lại hoạt động ở thị trường Hàn Quốc. Một năm C bắt nhân viên performance review… 4 lần. Cũng giống như A, khi tình hình kinh tế khó khăn không ty C lại giở trò performance review và nợ lương nhân viên.
Đạo đức (và luật pháp) trong phát triển phần mềm thường ít khi được đề cập tới trong các chương trình giảng dạy, tuy nhiên với vai trò càng ngày càng lớn của CNTT trong cuộc sống thì khó mà bỏ qua vai trò của nó.
Nếu bạn là một độc giả của truyện khoa học viễn tưởng, hẳn bạn rất quen với 3 điều luật dành cho Robot của Asimov:
Nghĩ thì đơn giản và hiển nhiên, nhưng hãy thử tưởng tượng nếu bạn xáo trộn thứ tự của 3 điều trên một tí:
Hậu quả đều rất nghiêm trọng, đúng không? Và đó là giả sử người viết phần mềm cho robot đã tuân theo chặt chẽ 3 điều luật nói trên.
Asimov gọi 3 điều trên là “luật” trong thế giới của mình. Đó là một thế giới lý tưởng! Còn trên thế giới thực tại 3 điều trên chưa phải là luật ở bất kỳ đâu. Con người vẫn có thể tạo ra robot vi phạm 3 điều luật trên, dẫn đến việc Terminator xuất hiện chỉ là vấn đề thời gian…
Khác với “luật”, là những quy tắc đạo đức bắt buộc phải tuân theo, “đạo đức” là những quy tắc được đúc kết và được nhiều người đồng ý là đúng, nhưng vì lý do hành chính, mâu thuẫn về lợi ích, chi phí… chưa được đúc kết thành luật. Thông thường để trở thành luật, một quy chuẩn đạo đức nào đó luôn phải được đánh đổi bằng sinh mạng con người, như việc bắt buộc đeo dây an toàn khi lái xe hoặc cấm uống rượu và lái xe.
Phần mềm giết người? Khoan hãy nói đến terminator. 5 ngày trước (17/09/2020), một bệnh nhân ở Đức đã qua đời vì bệnh viện gần nhất bị dính ransomware. Mục đích của người viết ransomware không phải là giết người, nhưng đó là một hiệu ứng phụ của việc họ muốn kiếm tiền gây ra.
Người viết phần mềm gây ra vụ việc trên có khi không biết mình đã gián tiếp làm ảnh hưởng đến tính mạng của người khác. Họ chỉ nghĩ mình viết phần mềm và bán cho người khác dùng làm gì là việc của họ, họ không có trách nhiệm.
Ransomware như đã đề cập ở trên đang là một vấn đề rất đau đầu cho nhiều doanh nghiệp trên thế giới. Nó không những gây tổn thất tài chính do phải trả tiền chuộc dữ liệu mà còn gây ra thiệt hại về giảm sút doanh thu, doanh nghiệp suy yếu dẫn đến buộc phải sa thải nhân viên.
Phishing cũng có chiều hướng tăng cao, các đối tượng tội phạm tạo ra các website giả dạng website chính thức để ăn cắp dữ liệu, tiền bạc của người dụng.
Khi người kỹ sư viết ra phần mềm độc hại phục vụ cho các mục đích trên, họ có thể tự biện minh mình không phải là người trực tiếp gây ra thiệt hại cho người khác, nhưng điều đó là không đúng. Khi có ít người sẵn sàng tiếp tay cho tội phạm làm những việc trên, rào cản đối với các tổ chức tội phạm để triển khai lừa đảo sẽ cao hơn rất nhiều.
Bạn là người viết ra phần mềm, nhưng ai mới là người có quyền lợi với những gì bạn làm ra? Bạn có thể sử dụng những gì mình viết vào mục đích riêng được không? Bạn thấy đã có nhiều tấm gương thành công của người khác bằng cách làm side project và phát triển rộng lên nên cũng muốn làm như thế? Ranh giới giữa việc riêng và việc tư đối với một kỹ sư phần mềm khá là lu mờ.
Pháp luật Hàn Quốc quy định mọi sản phẩm và sáng chế bạn tạo ra khi làm việc trong một công ty là của công ty ấy. Ngoài ra theo luật cạnh tranh, nếu bạn hoạt động kinh doanh trong cùng lĩnh vực với công ty hiện tại mà chưa được sự đồng ý của công ty ấy cũng là vi phâm pháp luật.
Do đó, để tránh rắc rối về pháp lý bạn không nên tự ý sao chép nội dung công việc, cũng như tận dụng lại những gì mình đã viết ở nơi khác mà không được sự đồng ý nếu như bạn làm trong công ty tại Hàn.
Việt Nam đã có luật về vấn đề này!
Theo luật Sở hữu trí tuệ năm 2013 thì:
Điều 39. Chủ sở hữu quyền tác giả là tổ chức, cá nhân giao nhiệm vụ cho tác giả hoặc giao kết hợp đồng với tác giả
1. Tổ chức giao nhiệm vụ sáng tạo tác phẩm cho tác giả là người thuộc tổ chức mình là chủ sở hữu các quyền quy định tại Điều 20 và khoản 3 Điều 19 của Luật này, trừ trường hợp có thoả thuận khác.
2. Tổ chức, cá nhân giao kết hợp đồng với tác giả sáng tạo ra tác phẩm là chủ sở hữu các quyền quy định tại Điều 20 và khoản 3 Điều 19 của Luật này, trừ trường hợp có thoả thuận khác.
Theo đó, bạn là người làm ra phần mềm cho công ty do đó bạn là tác giả. Công ty là người giao kết hợp đồng, giao cho bạn làm phần mềm. Như vậy, phần mềm thuộc sở hữu của công ty hay nói công ty của bạn mới là chủ sở hữu của phần mềm.
Việc đề ra luật cũng giống như lập trình (có thể xem là một dạng meta-programming cho xã hội). Ý người làm luật khi viết ra luật là một đằng nhưng khi thực thi, có thể vì sai một câu chữ trong luật mà luật sẽ bị lách hoặc bị hiểu sai lệch đi, giống như 3 điều luật của Asimov.
Thế nên những điều sau không phải là luật, mà chỉ là những thứ bạn nên để tâm một tí khi làm phần mềm.
Capitalism has its strength, but American capitalism should be aptly named ‘corporatism’. The governments serves the interest of big corporations, and they alone. They prioritise media before the rest of society. We have seen absurd cases like NASA’s mars landing video get taken down by a local station that reported the news because f-ing news itself “violates” that station’s copyright. And Youtube is not at fault because it took down that video. The local station requested that, and they may have done that on an automated basis, abusing their rights and impose their greed on every video that even remotely resembles their content. And the local station didn’t even get fined for disrupting millions of viewers!
My favorite internet radio service, Pandora is struggling financially even though it did its job fantastically: It allows user to listen to music they like most, categorizing music and expanding our knowledge. But they have to pay 50% royalty on their revenue while terrestrial radio stations pay only 15% simply because they are… old technology, limited to a local area and belongs to bigger media corporation. What sort of retarded environment that penalizes innovation, adaptation and quality of service?
In today’s news Aereo, startup focused on bringing terrestrial over-the-air programming to internet users won a lawsuit because Fox news want them to pay for making their program more accessible to viewers. Specifically, Fox news want Aereo to pay for rebroadcasting free content. Actually Fox got what they wanted before, arguing that every video streaming service is a public performance (sorry, what?) and thus have to pay royalty. Aereo work around this stupid law in a roundabout, but efficient way to circumvent this stupidity:
Here, briefly, is how Aereo works: You pay $8-ish a month, and get assigned a mini-antenna, roughly the size of a dime, that is located in a warehouse in Brooklyn. Aereo has thousands of these antennas, each of which is assigned to a single user and connected to a single DVR-like device. When you want to watch, let’s say, “The Voice,” Aereo’s app pulls the show from your antenna, streams it to your device, and makes a copy that is only viewable by you. If 40,000 other Aereo users are watching “The Voice” at the same time, there will be 40,000 dime-sized antennas streaming 40,000 identical copies of the show onto 40,000 devices and into 40,000 DVRs.
If that sounds absurd, it’s because Aereo’s entire business model is based on a legal head-fake. Under copyright law, 40,000 people with their own antennas can watch TV at home for free, but if you want to have one giant antenna that picks up TV shows and distributes them to an audience of 40,000 people, the law calls that a “public performance,” and you have to pay a copyright fee to do it. Aereo didn’t want to pay those fees, so it figured out a way to make what is essentially a simultaneous mass broadcast look like lots of little broadcasts.
Or that’s what they say. This may be entirely fictitious and the explanation is just there to please lawyers. Yep, there you have it, free content with ads is not free, and you have to pay to see it. Also, you have no choices because every f-ing media company operates on the same model: Trying to attract more viewers by limiting access to some viewers and make people pay for free-by-law content. What kind of logic is this?
When I tried to connect my HP laptop to a Samsung TV via HDMI, I expected sound to work out of the box, but unfortunately this is not the case. After making sure that my laptop output sound to the ‘HDMI adapter’ and that it was not disabled per the HP support forum, I came to the sudden realization that Samsung treat the input port differently on how you tell it. I registered the HDMI input port as ‘DVI PC’ and usually I use a separate 3.5mm audio cable, so I tried to fiddle with the option (via the input menu -> context menu button -> edit device)
Because DVI cannot convey sound, I had to select ‘PC’, which is a little weird since ‘PC’ is also the term Samsung applies to VGA input, but well, if there were a separate ‘HDMI PC’ category it would have been clearer