Nếu bạn là một lập trình viên, đừng coi mình là "nhà khoa học máy tính"; các nhà khoa học máy tính là những người tạo ra thế hệ máy tính tiếp theo, một số trong đó vẫn là khoa học viễn tưởng cho đến khi kết hợp chính xác các vật liệu, thu nhỏ và lý thuyết tính toán được rút ra. Họ chỉ là sự khởi đầu của đường ống. Những người phát triển phần mềm ở đây và bây giờ là "kỹ sư phần mềm"; họ lấy các lý thuyết và công cụ, đôi khi đặt lý thuyết thực tế và các công cụ trong thế giới thực lên hàng đầu, để khai thác sức mạnh của tiềm năng của trò ảo thuật điện phức tạp này và khiến nó làm những gì chúng ta muốn. Đến lượt nó là một chuyên ngành của lĩnh vực "kỹ thuật máy tính", lấy lý thuyết của các nhà khoa học máy tính và áp dụng chúng, phần cứng và phần mềm, cho các giải pháp điện tử của người dùng cuối thế giới thực.
Đây là IMO, nơi kinh doanh đáp ứng lý thuyết. Trong những trường hợp này, câu ngạn ngữ cũ "kẻ thù tốt hơn là đủ tốt" có thể dễ dàng quay lại để đọc "kẻ thù đủ tốt là tốt hơn". Xem xét bản thân một "kỹ sư" thay vì "nhà khoa học" và đặt những gì bạn làm song song với các ngành kỹ thuật khác, sẽ ném sự khác biệt vào sự nhẹ nhõm.
Giả sử một khách hàng đến với bạn, một kỹ sư xây dựng / dân dụng và yêu cầu bạn xây dựng một cây cầu. Cây cầu cần kéo dài 20 feet, tự hỗ trợ và tải trọng một tấn, nó sẽ kéo dài 10 năm với bảo trì thường xuyên và họ muốn nó trong một tháng với giá 20.000 đô la. Đó là những hạn chế của bạn; đáp ứng mức tối thiểu trong khi không vượt quá mức tối đa Làm điều đó là "đủ tốt", và giúp bạn nhận được tiền lương. Sẽ là kỹ thuật kém cho bạn khi xây dựng Cầu Cổng Vàng, vượt xa cả thông số kỹ thuật thiết kế và ngân sách theo một số đơn đặt hàng lớn. Bạn thường kết thúc việc ăn vượt chi phí và trả tiền phạt cho thời gian quá hạn. Nó cũng sẽ là kỹ thuật kém cho bạn để xây dựng một cây cầu dây được xếp hạng cho trọng lượng của 5 người đàn ông trưởng thành mặc dù nó chỉ tốn 1000 đô la về thời gian và vật liệu; bạn không nhận được đánh giá và lời chứng thực tốt của khách hàng,
Quay trở lại phần mềm, giả sử bạn có một khách hàng cần một hệ thống xử lý tệp được xây dựng để tiêu hóa các tệp đến và đưa thông tin vào hệ thống. Họ muốn nó được thực hiện trong một tuần và nó phải xử lý năm tệp một ngày, dữ liệu trị giá khoảng 10 MB, vì đó là tất cả lưu lượng truy cập mà họ hiện có. Lý thuyết quý giá của bạn phần lớn đi ra ngoài cửa sổ; Nhiệm vụ của bạn là xây dựng một sản phẩm đáp ứng các thông số kỹ thuật đó trong một tuần, bởi vì bằng cách đó, bạn cũng đáp ứng ngân sách chi phí của khách hàng (vì các vật liệu thường giảm trong một hợp đồng phần mềm có kích thước này). Dành hai tuần, thậm chí cho mười lần tăng, không phải là một lựa chọn, nhưng rất có thể, không phải là một chương trình được xây dựng trong một ngày chỉ có thể xử lý một nửa thông lượng, với hướng dẫn để có hai bản sao chạy.
Nếu bạn nghĩ rằng đây là một trường hợp bên lề, bạn đã sai; đây là môi trường hàng ngày của hầu hết mọi người. Lý do là ROI; chương trình ban đầu này không tốn nhiều chi phí và do đó sẽ tự chi trả rất nhanh. Khi người dùng cuối cần nó để làm nhiều hơn hoặc đi nhanh hơn, mã có thể được cấu trúc lại và thu nhỏ.
Đó là lý do chính đằng sau tình trạng lập trình hiện nay; giả định, được đưa ra bởi toàn bộ lịch sử điện toán, là một chương trình KHÔNG BAO GIỜ tĩnh. Nó sẽ luôn cần phải được nâng cấp và cuối cùng nó sẽ được thay thế. Song song, sự cải tiến liên tục của các máy tính chạy chương trình cho phép giảm sự chú ý đến hiệu quả lý thuyết và tăng sự chú ý đến khả năng mở rộng và song song hóa (một thuật toán chạy trong thời gian bình phương N nhưng có thể song song để chạy trên lõi N xuất hiện tuyến tính và thường chi phí cho phần cứng nhiều hơn rẻ hơn so với các nhà phát triển để đưa ra giải pháp hiệu quả hơn).
Trên hết, có một nguyên lý rất đơn giản rằng mỗi dòng mã nhà phát triển là một thứ khác có thể sai. Càng ít nhà phát triển viết, càng ít có khả năng những gì anh ta viết có vấn đề. Đây không phải là một chỉ trích về "tỷ lệ lỗi" của bất kỳ ai; đó là một tuyên bố thực tế đơn giản. Bạn có thể biết cách viết MergeSort ngược và chuyển tiếp bằng 5 ngôn ngữ, nhưng nếu bạn chỉ cần một mã định danh trong một dòng mã thì toàn bộ Sắp xếp không hoạt động và nếu trình biên dịch không bắt được thì nó có thể đưa bạn đi hàng giờ để gỡ lỗi nó Tương phản với List.Sort (); nó ở đó, nó hiệu quả trong trường hợp chung, và, đây là điều tốt nhất, nó đã hoạt động.
Vì vậy, rất nhiều tính năng của các nền tảng hiện đại và nguyên lý của các phương pháp thiết kế hiện đại, đã được xây dựng với ý tưởng này:
- OOP - xây dựng dữ liệu và logic liên quan vào một đối tượng và bất cứ nơi nào khái niệm về đối tượng đó là hợp lệ, do đó, nó là đối tượng hoặc một dẫn xuất chuyên biệt hơn.
- Các mẫu dựng sẵn - 60% mã trở lên là cú pháp cú pháp và những điều cơ bản để chương trình hiển thị một cái gì đó trên màn hình. Bằng cách tiêu chuẩn hóa và tự động tạo mã này, bạn giảm một nửa khối lượng công việc của nhà phát triển, cho phép tăng năng suất.
- Thư viện thuật toán và cấu trúc dữ liệu - Như ở trên, bạn có thể biết cách viết Stack, Queue, QuickSort, v.v., nhưng tại sao bạn phải, khi có một thư viện mã có tất cả những thứ này được tích hợp? Bạn sẽ không viết lại IIS hoặc Apache vì bạn cần một trang web, vậy tại sao lại triển khai thuật toán QuickSort hoặc đối tượng cây đỏ đen khi có nhiều triển khai tuyệt vời?
- Giao diện trôi chảy - Dọc theo cùng một dòng, bạn có thể có một thuật toán lọc và sắp xếp các bản ghi. Nó nhanh, nhưng có lẽ không dễ đọc lắm; nó sẽ khiến nhà phát triển cơ sở của bạn mất một ngày chỉ để hiểu nó, chứ đừng nói đến việc thay đổi phẫu thuật cần thiết để sắp xếp trên một lĩnh vực bổ sung trong đối tượng thu âm. Thay vào đó, các thư viện như Linq thay thế rất nhiều mã rất xấu, thường dễ vỡ bằng một hoặc hai dòng lệnh gọi phương thức có thể định cấu hình để biến danh sách các đối tượng thành các đối tượng được lọc, sắp xếp, chiếu.