<![CDATA[Latest posts for the topic "Mình cần mở rộng tư duy trong việc lập trình"]]> /hvaonline/posts/list/21.html JForum - http://www.jforum.net Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#235606 /hvaonline/posts/list/38361.html#235606 GMT Mình cần mở rộng tư duy trong việc lập trình

explorer88 wrote:
Chào mọi người. Mình đang tập tành viết code. Thời gian viết code cũng được một, hai năm. Nhưng hiện tại mình thấy việc lập trình của mình càng ngày càng đi vào lối mòn. Vấn đề hiện tại của mình là như sau: Công việc lập trình của mình chỉ đơn thuần là: Đọc hiểu yêu cầu -> Tưởng tượng trước chương trình của mình có diện mạo như làm sao và các hành vi như thế nào -> Lên google tìm kiếm mã nguồn -> Tìm được thì copy - paste từng khúc mã nguồn sao cho phù hợp - rồi chỉnh sửa cho đến khi đạt yêu cầu thì thôi. Xem chừng nó chả đòi hỏi gì về chuyên môn sâu sắc. Với cách làm trên thì mình quá phụ thuộc vào mã nguồn tìm được trên mạng. Thú thật, nếu không tìm thấy thì mình cũng chả biết viết code thế nào nữa. Nếu không có các tutorial hướng dẫn với mã nguồn mình hoạ thì ngồi nhìn đống APIs, và đọc mô tả của APIs cũng không giúp mình viết được chương trình. Việc đọc APIs mình cũng cho là cần thiết nhưng nếu thiếu mã nguồn minh hoạ sử dụng APIs thì mình cũng không biết phải viết như thế nào nữa. Mình không muốn phần đời lập trình còn lại của mình là đi copy-paste code của người khác về chỉnh sửa như thế mãi. Mình cũng chưa gặp nhiều lập trình viên. Số mình đã gặp thì cũng lập trình hệt như mình. Mình cần biết những lập trình viên kinh nghiệm hơn thường làm gì vì với cách làm hiện tại của mình thì thế giới phần mềm không thể phát triển như ngày này được. Thêm nữa như đã nói, mình toàn dựa trên mã nguồn của người khác đã viết, mình chưa thể sáng tạo ra mã nguồn. Vậy thì có những điểm nào trong công đoạn lập trình mình có thể khai thác để đưa vào đó sự sáng tạo ?  
Sáng tạo trong khuôn khổ có phải là sáng tạo ko ? Bạn trả lời là có ngay đáp án để mà tư duy tiếp P/S:Sáng tạo có ở khắp mọi nơi. Ví dụ A->B có thể hiểu A :giả thiết , B:kết luận và -> là bước suy ra , cũng có thể hiểu rộng là dãy hữu hạn các bước để đạt được B --> dẫn đến khái niệm thuật toán đó bạn Quan trọng là bạn có thấy được cái mới trong những cái quen thuộc hằng ngày ko :P]]>
/hvaonline/posts/list/38361.html#235611 /hvaonline/posts/list/38361.html#235611 GMT
Mình cần mở rộng tư duy trong việc lập trình

explorer88 wrote:
Chào mọi người. Mình đang tập tành viết code. Thời gian viết code cũng được một, hai năm. Nhưng hiện tại mình thấy việc lập trình của mình càng ngày càng đi vào lối mòn. Vấn đề hiện tại của mình là như sau: Công việc lập trình của mình chỉ đơn thuần là: Đọc hiểu yêu cầu -> Tưởng tượng trước chương trình của mình có diện mạo như làm sao và các hành vi như thế nào -> Lên google tìm kiếm mã nguồn -> Tìm được thì copy - paste từng khúc mã nguồn sao cho phù hợp - rồi chỉnh sửa cho đến khi đạt yêu cầu thì thôi. Xem chừng nó chả đòi hỏi gì về chuyên môn sâu sắc. Với cách làm trên thì mình quá phụ thuộc vào mã nguồn tìm được trên mạng. Thú thật, nếu không tìm thấy thì mình cũng chả biết viết code thế nào nữa. Nếu không có các tutorial hướng dẫn với mã nguồn mình hoạ thì ngồi nhìn đống APIs, và đọc mô tả của APIs cũng không giúp mình viết được chương trình. Việc đọc APIs mình cũng cho là cần thiết nhưng nếu thiếu mã nguồn minh hoạ sử dụng APIs thì mình cũng không biết phải viết như thế nào nữa. Mình không muốn phần đời lập trình còn lại của mình là đi copy-paste code của người khác về chỉnh sửa như thế mãi. Mình cũng chưa gặp nhiều lập trình viên. Số mình đã gặp thì cũng lập trình hệt như mình. Mình cần biết những lập trình viên kinh nghiệm hơn thường làm gì vì với cách làm hiện tại của mình thì thế giới phần mềm không thể phát triển như ngày này được. Thêm nữa như đã nói, mình toàn dựa trên mã nguồn của người khác đã viết, mình chưa thể sáng tạo ra mã nguồn. Vậy thì có những điểm nào trong công đoạn lập trình mình có thể khai thác để đưa vào đó sự sáng tạo ?  
Cái bồ cần không phải là "mở rộng" mà cần thay đổi hoàn toàn tư duy lập trình. Những việc bồ làm trước đây không phải là lập trình mà chỉ là công tác "xào nấu". Lập trình ở cấp độ thủ công nhất đi chăng nữa cũng đòi hỏi suy nghĩ, phân tích và lập luận để hình thành code. Lập trình ở cấp độ master luôn luôn trăn trở là liệu mình code có đẹp nhất chưa, sạch nhất chưa, tối ưu nhất chưa, vững vàng nhất chưa.... ? Bồ cần bắt đầu với cái này: Hiểu rõ đòi hỏi (requirements) --> phân tích & hình thành giải pháp cho đòi hỏi ---> thực hiện coding --> thử nghiệm ---> điều chỉnh và hoàn thiện. Bồ có thể tham khảo code của người khác nhưng tuyệt đối không bao giờ dùng code của người khác một cách lười lĩnh như vậy.]]>
/hvaonline/posts/list/38361.html#235617 /hvaonline/posts/list/38361.html#235617 GMT
Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#235626 /hvaonline/posts/list/38361.html#235626 GMT Mình cần mở rộng tư duy trong việc lập trình

panfider wrote:
bạn không nói là bạn viết chương trình bằng ngôn ngữ gì ? 
Có quan trọng không? :-/ ]]>
/hvaonline/posts/list/38361.html#235637 /hvaonline/posts/list/38361.html#235637 GMT
Mình cần mở rộng tư duy trong việc lập trình http://www.procul.org/blog/2011/03/30/programmers-people/
When a normal person is lazy, she looks for what’s already there before doing it herself. When a programmer is lazy, she does it herself before looking for what’s already there. 
Thế nên theo cách nói này thì những người chủ topic gặp chưa phải là programmer rồi :D Nói chung cố bỏ thói quen copy-paste càng sớm càng tốt. Thân,]]>
/hvaonline/posts/list/38361.html#235659 /hvaonline/posts/list/38361.html#235659 GMT
Mình cần mở rộng tư duy trong việc lập trình

conmale wrote:
Cái bồ cần không phải là "mở rộng" mà cần thay đổi hoàn toàn tư duy lập trình. Những việc bồ làm trước đây không phải là lập trình mà chỉ là công tác "xào nấu". Lập trình ở cấp độ thủ công nhất đi chăng nữa cũng đòi hỏi suy nghĩ, phân tích và lập luận để hình thành code. Lập trình ở cấp độ master luôn luôn trăn trở là liệu mình code có đẹp nhất chưa, sạch nhất chưa, tối ưu nhất chưa, vững vàng nhất chưa.... ? Bồ cần bắt đầu với cái này: Hiểu rõ đòi hỏi (requirements) --> phân tích & hình thành giải pháp cho đòi hỏi ---> thực hiện coding --> thử nghiệm ---> điều chỉnh và hoàn thiện. Bồ có thể tham khảo code của người khác nhưng tuyệt đối không bao giờ dùng code của người khác một cách lười lĩnh như vậy. 
Anh có thể nói rõ hơn chút nữa ở chỗ phân tích & hình thành giải pháp cho đòi hỏi được không? Nội dung của nó có giống như là môn phân tích thiết kế hướng đối tượng không. Mỗi lần lập trình lại phải ngồi vẽ cả đống hình + viết một loại tài liệu để mô tả mình sắp làm gì vậy hả anh ? Còn phần coding thì không lấy code trên mạng mà phù hợp với logic đã xây dựng ở bước trước thì phải thuộc à ? Lấy ví dụ thế này: Giả sử trong phần phân tích và thiết kế em dự liệu chương trình của mình sẽ cần đọc ghi file text nào đó bằng java chả hạn. Bài thảo luận này em không có ý hướng đến ngôn ngữ cụ thể nào cả. Em chỉ lấy ví dụ vậy thôi. Em biết đoạn code mình hoạ nằm ở trên java almanac, Em lên đó search và copy paste về. Tất nhiên là em hiểu đoạn code đó vận hành như thế nào. Em có thể lên mạng copy paste về hoặc tự viết cũng được vì để đọc ghi file text thì với java, dòng code khá ngắn và em cũng biết thư viện nào sẽ phục vụ việc đó. Nhưng bây giờ nếu em cần đọc ghi file xml, em chưa từng đọc ghi file xml bằng java nên làm sao em biết sử dụng thư viện nào để viết đây. Rồi nếu có biết tên thư viện rồi thì chỉ nhìn vào thư viện đó code được không ? Cách duy nhất lại là lên mạng tìm kiếm một đoạn code mình hoạ viết đọc ghi xml bằng java rồi lại copy paste về để thực hiện công việc đó. Và sửa đổi chút ít như là thêm bớt vài dòng code chương trình chỉ đọc một số thẻ xml nhất định thôi chả hạn. Vậy anh thấy đấy phân tích và hình thành giải pháp, rồi các giải thuật xong thì để thực hiện giải pháp mình vẫn lại phải tim code để lắp vào. Code đó mình đâu có thể bịa ra được vì tất cả đều phụ thuộc vào thư viện mà bên java cung cấp mà . Step by step hết đấy chứ ạ. Các mẩu code để đọc ghi file text hay xml về cơ bản thì mình đâu có thể làm khác đi được. Việc copy paste trong trường hợp này xem chừng còn hiệu suất hơn là type lại từng dòng code. Nếu cần hiểu đoạn code đó hoạt động ra sao thì chạy chương trình của họ. Chạy đến đâu comment đến đó. Tất nhiên, không bao giờ em có ý định tìm một chương trình giống hoàn toàn thoả mãn đầy đủ yêu cầu của chương trình mà mình đang làm. Em chỉ tìm kiếm các mẩu code từ các tutorial minh hoạ và đoạn code từ các chương trình mà thoả mãn vài chức năng. Sau đó cứ thế mà ghép vào. Em biết tư duy lập trình của em bị hạn chế. Lập trình như thế có khác gì trò chơi xếp hình không. Lắp ráp, chỉ vậy thôi. Nguồn cung nguyên liệu (code mẫu) thì phụ thuộc hoàn toàn vào Google. Logic hay giải thuật gì đó thể hiện ở công việc lắp ráp này là nếu ráp đúng thì không có lỗi, ráp sai thì exception quăng ra tùm lum. Đôi lúc công việc sửa đổi này cũng khá vất vả. Mấy năm trời học lập trình chả ích gì đến nỗi bây giờ phải làm lại tư duy hoàn toàn rồi. ]]>
/hvaonline/posts/list/38361.html#235666 /hvaonline/posts/list/38361.html#235666 GMT
Mình cần mở rộng tư duy trong việc lập trình

noWhere_Man wrote:
Mình đọc thấy câu này rất hay trên Blog Khoa học máy tính: http://www.procul.org/blog/2011/03/30/programmers-people/
When a normal person is lazy, she looks for what’s already there before doing it herself. When a programmer is lazy, she does it herself before looking for what’s already there. 
Thế nên theo cách nói này thì những người chủ topic gặp chưa phải là programmer rồi :D Nói chung cố bỏ thói quen copy-paste càng sớm càng tốt. Thân, 
Mình đâu có does it myself before looking for what’s already there . Ngược lại là khác mình toàn tìm xem có code mẫu không rồi lắp vào rồi sửa rồi sài. Mình không phải là người được đào tạo về lập trình. Thói quen copy-paste hình thành vì chung quanh mình, những người mình đã gặp đều làm thế. Mình thấy thế không ổn nên mới lập topic này.]]>
/hvaonline/posts/list/38361.html#235667 /hvaonline/posts/list/38361.html#235667 GMT
Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#235669 /hvaonline/posts/list/38361.html#235669 GMT Mình cần mở rộng tư duy trong việc lập trình

explorer88 wrote:

conmale wrote:
Cái bồ cần không phải là "mở rộng" mà cần thay đổi hoàn toàn tư duy lập trình. Những việc bồ làm trước đây không phải là lập trình mà chỉ là công tác "xào nấu". Lập trình ở cấp độ thủ công nhất đi chăng nữa cũng đòi hỏi suy nghĩ, phân tích và lập luận để hình thành code. Lập trình ở cấp độ master luôn luôn trăn trở là liệu mình code có đẹp nhất chưa, sạch nhất chưa, tối ưu nhất chưa, vững vàng nhất chưa.... ? Bồ cần bắt đầu với cái này: Hiểu rõ đòi hỏi (requirements) --> phân tích & hình thành giải pháp cho đòi hỏi ---> thực hiện coding --> thử nghiệm ---> điều chỉnh và hoàn thiện. Bồ có thể tham khảo code của người khác nhưng tuyệt đối không bao giờ dùng code của người khác một cách lười lĩnh như vậy. 
Anh có thể nói rõ hơn chút nữa ở chỗ phân tích & hình thành giải pháp cho đòi hỏi được không? Nội dung của nó có giống như là môn phân tích thiết kế hướng đối tượng không. Mỗi lần lập trình lại phải ngồi vẽ cả đống hình + viết một loại tài liệu để mô tả mình sắp làm gì vậy hả anh ? Còn phần coding thì không lấy code trên mạng mà phù hợp với logic đã xây dựng ở bước trước thì phải thuộc à ? Lấy ví dụ thế này: Giả sử trong phần phân tích và thiết kế em dự liệu chương trình của mình sẽ cần đọc ghi file text nào đó bằng java chả hạn. Bài thảo luận này em không có ý hướng đến ngôn ngữ cụ thể nào cả. Em chỉ lấy ví dụ vậy thôi. Em biết đoạn code mình hoạ nằm ở trên java almanac, Em lên đó search và copy paste về. Tất nhiên là em hiểu đoạn code đó vận hành như thế nào. Em có thể lên mạng copy paste về hoặc tự viết cũng được vì để đọc ghi file text thì với java, dòng code khá ngắn và em cũng biết thư viện nào sẽ phục vụ việc đó. Nhưng bây giờ nếu em cần đọc ghi file xml, em chưa từng đọc ghi file xml bằng java nên làm sao em biết sử dụng thư viện nào để viết đây. Rồi nếu có biết tên thư viện rồi thì chỉ nhìn vào thư viện đó code được không ? Cách duy nhất lại là lên mạng tìm kiếm một đoạn code mình hoạ viết đọc ghi xml bằng java rồi lại copy paste về để thực hiện công việc đó. Và sửa đổi chút ít như là thêm bớt vài dòng code chương trình chỉ đọc một số thẻ xml nhất định thôi chả hạn. Vậy anh thấy đấy phân tích và hình thành giải pháp, rồi các giải thuật xong thì để thực hiện giải pháp mình vẫn lại phải tim code để lắp vào. Code đó mình đâu có thể bịa ra được vì tất cả đều phụ thuộc vào thư viện mà bên java cung cấp mà . Step by step hết đấy chứ ạ. Các mẩu code để đọc ghi file text hay xml về cơ bản thì mình đâu có thể làm khác đi được. Việc copy paste trong trường hợp này xem chừng còn hiệu suất hơn là type lại từng dòng code. Nếu cần hiểu đoạn code đó hoạt động ra sao thì chạy chương trình của họ. Chạy đến đâu comment đến đó. Tất nhiên, không bao giờ em có ý định tìm một chương trình giống hoàn toàn thoả mãn đầy đủ yêu cầu của chương trình mà mình đang làm. Em chỉ tìm kiếm các mẩu code từ các tutorial minh hoạ và đoạn code từ các chương trình mà thoả mãn vài chức năng. Sau đó cứ thế mà ghép vào. Em biết tư duy lập trình của em bị hạn chế. Lập trình như thế có khác gì trò chơi xếp hình không. Lắp ráp, chỉ vậy thôi. Nguồn cung nguyên liệu (code mẫu) thì phụ thuộc hoàn toàn vào Google. Logic hay giải thuật gì đó thể hiện ở công việc lắp ráp này là nếu ráp đúng thì không có lỗi, ráp sai thì exception quăng ra tùm lum. Đôi lúc công việc sửa đổi này cũng khá vất vả. Mấy năm trời học lập trình chả ích gì đến nỗi bây giờ phải làm lại tư duy hoàn toàn rồi.  
Hello em, Nếu anh hiểu đúng ý em thì dạng lập trình em nêu ra ở đây thuộc giới hạn các "helper classes", có nghĩa là em chuyên chú ở mảng giải quyết cụ thể các hành động xử lý dữ liệu chớ không nhìn ở góc độ vĩ mô. Một ví dụ điển hình là lập trình một "shopping cart" cho thương mại điện tử. Shopping cart thấy hao hao nhau nhưng chưa hẳn cái nào cũng như cái nào bởi vì mỗi công ty thương mại có mặt hàng khác nhau, có quy chế khác nhau, có giá cả khác nhau, có tỉ lệ giảm giá khác nhau, có cơ chế giao hàng khác nhau.... và hàng trăm điểm khác nhau nữa. Đành rằng các thư viện tiêu chuẩn có bao nhiêu đó thứ để dùng nhưng cách sắp xếp làm sao cho shopping cart đó làm việc từ góc độ khách hàng cho đến góc độ quản lý của chính doanh nghiệp (để thoả mãn nhu cầu cả doanh nghiệp lẫn khách hàng) không chỉ dừng ở cấp độ cụ thể nhất đó là viết các "helper classess". Khi em đề cập đến java hoặc các OOP khác, điều em cần nắm bắt đó là tinh thần tạo và sử dụng "object" chớ không phải các primitive (như int, string, char, boolean...). Một shopping cart có thể là 1 object và trong object đó có hàng trăm hoặc hàng ngàn object khác. Trong mỗi object ấy, data được nhồi nắn như thế nào chỉ có một mớ thủ thuật (mà em lấ từ java almanac). Trong khi đó, nguyên cái khối objects ấy được hình thành thế nào cần tư duy lập trình thật sự. Tiếp tục với shopping cart, doanh nghiệp cần kinh doanh đúng mức không chỉ dừng lại ở chỗ bán 1 sản phẩm nào đó cho khách hàng mà còn đi đến chỗ track và đánh giá khách hàng thích cái gì để giới thiệu thêm hoặc khuyến khích, khuyến mãi khách hàng để tranh thủ được sự ưa chuộng của khách hàng. Những mảng này đi song song với một shopping cart bình thường khiến cho thay vì 1 shopping cart chỉ có 1, 2 món hàng, nó có thể có chục món hàng nhưng khách hàng lại hoan hỉ. Những thứ này đi từ việc chuyển dịch ý muốn của đám business sang những business logic và từ đó mới hình thành những classes, những methods để thực thi. Nếu em có lần hoặc nhiều lần trải ra trước mặt một tờ hoặc nhiều tờ A3 có các biểu đồ UML, em sẽ hiểu ý anh muốn nói cái gì. Ví dụ:
Ở đây, tư duy lập trình là hình thành một abstact class "Booking" và trong "Booking" đó cần có những gì sâu sát với đòi hỏi cần thiết lập một dịch vụ đăng ký (booking). Chuyện thực thi bên dưới như đặt xe gì, bao nhiêu tiền... thì hầu hết là standard và những biện pháp cộng trừ nhân chia..... cũng là standard. Tư duy lập trình không nằm gói gọn trong mới "standard" đó mà trải dài từ điểm hình thành abstract class "Booking" và thậm chí bên ngoài "Booking" và sau khi booking đã thực thi xong nữa kìa. Những thứ anh tạm gọi là "standard" kia là những helper classes có thể được tái sử dụng khắp nơi trong các chương trình của em. Trong khi đó, nhữnng điểm khởi đầu cho mỗi thứ tương tự như "Booking" kia đòi hỏi một quá trình tư duy và sắp xếp sao cho hữu lý nhất, gọn gàng nhất, đẹp nhất và ít bị thay đổi, chỉnh sừa nhất... đó chính là tinh tuý của "tư duy lập trình". Nói thêm, đôi khi sử dụng những thứ có sẵn từ Java Almanac không có gì sai. Chỉ có điều đó chỉ là những ví dụ tổng quát và đôi khi vụng về, giới hạn. Tư duy lập trình đúng mức đòi hỏi (hoặc thúc đẩy) lập trình viên dùng những ví dụ ấy làm khởi điểm điều nhưng phải chỉnh lại cho phù hợp với coding convention của nơi mình làm việc hoặc thậm chí viết lại hoàn toàn vì mục đích bảo mật hoặc tối ưu hoá.....]]>
/hvaonline/posts/list/38361.html#235671 /hvaonline/posts/list/38361.html#235671 GMT
Mình cần mở rộng tư duy trong việc lập trình When a normal person is lazy, she looks for what’s already there before doing it herself. When a programmer is lazy, she does it herself before looking for what’s already there.   Mình nghĩ câu này rất chí lý.]]> /hvaonline/posts/list/38361.html#235712 /hvaonline/posts/list/38361.html#235712 GMT Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#235735 /hvaonline/posts/list/38361.html#235735 GMT Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#237009 /hvaonline/posts/list/38361.html#237009 GMT Mình cần mở rộng tư duy trong việc lập trình

conmale wrote:
Bồ có thể tham khảo code của người khác nhưng tuyệt đối không bao giờ dùng code của người khác một cách lười lĩnh như vậy. 
Có phải là viết tắt của "Lười biếng và liều Lĩnh" không bác conmale :D ]]>
/hvaonline/posts/list/38361.html#237035 /hvaonline/posts/list/38361.html#237035 GMT
Mình cần mở rộng tư duy trong việc lập trình /hvaonline/posts/list/38361.html#237762 /hvaonline/posts/list/38361.html#237762 GMT Mình cần mở rộng tư duy trong việc lập trình

khigiadano wrote:

conmale wrote:
Bồ có thể tham khảo code của người khác nhưng tuyệt đối không bao giờ dùng code của người khác một cách lười lĩnh như vậy. 
Có phải là viết tắt của "Lười biếng và liều Lĩnh" không bác conmale :D  
Mình nghĩ không phải là thế đâu. Tiếng việt có từ lười lĩnh mà, nhưng ít người dùng, thậm chí nhiều người không biết từ này. http://tudien.xalo.vn/tratu/l%C6%B0%E1%BB%9Di%20l%C4%A9nh ]]>
/hvaonline/posts/list/38361.html#237764 /hvaonline/posts/list/38361.html#237764 GMT