Learn as much detail about the domain you are working on as possible. Talk with potential clients about their business, product and trouble, though 80% you are an introvert. Visit end-users in their "natural habitat". Those are the homework of a software engineer. Doing homework is meant to improve your understand of the business logic in your current system.
Of all engineering professions, software engineer is one of a kind. No one would possibly ask a traffic engineer to build her house. But a software engineer who built a social network yesterday and is implementing a mobile health care system today, is an everyday story.
In short term, the domain-specific knowledge allows you to work and communicate with your clients in their own language. Which of these below codebases would you rather be working?
if employeeID in PayCheck.get(paycheckID).getEmployeeIds:
if paycheck.include(employee):
Coding in the domain language means you can represent a business concept right in the code. Whenever you skip a domain term, you are introducing a secret understanding that this int over here means the way to identify an employee while that int over there is the way to identify the paycheck this month. And the testers and next engineers inheriting the codebase aren't happy about that.
Programmers "talk" the programming language: classes, objects, and databases. Clients talk in the language of their domain: payroll, social insurance and tax evasion. You could try to translate the two languages, but sooner or later, bugs will creep in. Eventually programmers need to speak the language of their client, not the other way around. A client isn't going to pick up Python 101 and tell you that the payroll is containing some duplicated employeeID, she is more likely telling you she is paying double for a freeloader.
But more importantly, it is about your value as an engineer. You are worth more than your code. Don't accept a job where you're told exactly what to build and how to build it. You need to work somewhere that appreciates your insights into the product as well as your ability to build it. Don't be a guy who has worked in e-commerce for 3 years but can't tell what e-commerce is rather than a shopping cart. I once worked on a mobile health care project. The team leader, despite of having 2 master's degrees from MIT and CMU, knew nothing about a health care system. But she tackled that head on, learned everything she could find about existing systems and legal regulations of the US government and talked to countless physicians and specialists in every conference she happened to attend. To an extend she could tell the difference in procedure between two stages and probably had enough material to write a book about US health care industry.
Nowadays, tools and technologies are advanced and abundant, but more often than not, we often hear of projects in big words that are at the end of the day, empty and meaningless because of the lack of commitment.
=====================================================
Tỉ mẩn tìm hiểu mảng ngành của dự án mình đang tham gia. Trò chuyện với khách hàng tiềm năng về công việc, sản phẩm và những mối lo của họ, dù 80% bạn là người hướng nội. Khảo sát đối tượng của sản phẩm. Đó là bài tập của nghề kỹ sư phần mềm. Làm bài tập đầy đủ là hiểu thêm về hệ thống bạn đang triển khai.
Trong hầm bà lằng thứ kỹ sư, kỹ sư phần mềm nó hơi lạ (không phải vì mềm). Chẳng ai đi hỏi anh kỹ sư cầu đường về xây nhà. Nhưng chuyện anh phần mềm sáng làm mạng xã hội chiều mần hệ thống y tế lại bình thường như cân đường hộp sữa.
Ngày một ngày hai, hiểu biết về mảng ngành đang tham gia giúp bạn làm việc và trao đổi với khách hàng bằng "tiếng mẹ đẻ". Thay kệ bạn biết python hay không, bạn thích làm việc với đoạn code nào hơn?
if employeeID in PayCheck.get(paycheckID).getEmployeeIds:
if paycheck.include(employee):
Tái hiện được khái niệm của mảng ngành qua những dòng lệnh có rất nhiều giá trị. Bất cứ khi nào bạn từ chối ăn nằm với thứ ngôn ngữ thực tế này là bạn đang tích góp một bí mật nho nhỏ "chỉ có hai ta" kiểu như số ở đây là kí kiệu của nhân viên còn số ở kia là kí hiệu bản lương tháng này, lộn là tháng này nhịn. Mà testers và các bạn lập trình viên về sau này thì chúa ghét cái của để dành này, của cho là của nợ mà.
Dân kỹ sư suy nghĩ theo ngôn ngữ lập trình, đủ thứ âm binh classes, objects, và databases, đối với người ngoài thì rất biến thái, vẹo vọ. Còn khách hàng, họ nói bằng ngôn từ của ngành nghề họ: bảng lương, bảo hiểm xã hội và trốn thuế, kiểu vậy. Bạn có thể gắng gọng mà dịch hai thứ ngôn ngữ vốn chả có gì chung chạ này, nhưng không chóng thì chày, bọ cũng bò vào thôi, hồng nào hồng chẳng có gai. Chuyện này dù đúng hay sai, vẫn là bạn phải học thứ ngôn ngữ lạ lẫm kia của khách hàng thôi. Vì sẽ chẳng có chuyện chị client vác sách Python 101 lên và bảo bạn cái bảng lương có mấy mã số nhân viên bị trùng. Chị sẽ cất giọng nam cao 5 quãng 8 mà bảo rằng mình đang phải trả lương gấp đôi cho một thằng ất ơ nào ấy.
Đùa chút thôi, chuyện này còn quan trọng hơn, nó can dự đến giá trị của bạn. Gọi mình là kỹ sư phần mềm, bạn phải có biết rằng bạn đáng giá hơn cái máy chuyển hoá pizza và cà phê thành code. Đừng dễ dãi nhận một công việc mà bạn được dắt tay từng thứ một. Để nuôi lớn khả năng của mình, hãy làm việc với những người biết đáng giá cao kiến thức và ý kiến của bạn. Đừng gọi mình là kỹ sư nếu sau 3 năm ăn nằm với thương mại điện tử, bạn vẫn chả biết thương mạng điện tử khác với cái giỏ hàng thế nào. Ở thì quá khứ chưa xa xôi lắm, tôi từng theo đuổi một dự án theo dõi sức khoẻ qua di động. Chị trưởng nhóm, dù dắt lưng 2 tấm bằng thạc sỹ, ở cả MIT và CMU, lơ ngơ như bò đeo nơ về hệ thống chăm sóc sức khoẻ cũng như các chế tài tại Mỹ, thị trường chính của sản phẩm. Nhưng chị dấn thân lắm, đọc tất cả những gì tìm được về những hệ thống hiện hành và các qui định pháp luật. Chị gặp những người làm trong ngành y tế để trò chuyện còn nhiều hơn gặp ba mẹ mình. Đến độ chị giờ kể vanh vách chế tài của 2 bang khác nhau ra sao, và có lẽ đủ tư liệu để viết sách về nền y tế Huê Kỳ.
Ngày nay, công cụ và kỹ thuật tiên tiến đầy rẫy, nhiều khi đến thừa mứa, 1 việc mà đến hai ba tools. Nhưng vẫn đầy ra những dự án đao to búa lớn và thất bại thậm tệ chỉ vì biếng nhác cống hiến với nghề.