Thứ Tư, 29 tháng 7, 2009

Lựa chọn editor cho lập trình viên

Để đơn giản hóa ngôn từ, trong bài viết này tôi sẽ sử dụng thuật ngữ editor để ám chỉ cả trình soạn thảo đơn giản (như Notepad) lẫn môi trường phát triển tích hợp IDE (như Visual Studio).

Trong giới lập trình viên, có một số chủ đề nhất định mà mỗi lần xuất hiện trên các diễn đàn hay blogs, chúng sẽ có xu hướng kích hoạt một cuộc tranh luận sôi nổi: Ruby hay Python, Java hay PHP, GNOME hay KDE, vim hay emacs ...

Những chủ đề so sánh công nghệ kiểu này có chung một đặc điểm: chúng mang tính cá nhân. Việc lựa chọn Ruby hay Python, Gnome hay KDE đều phụ thuộc phần lớn vào sở thích của lập trình viên - khó có thể nói công nghệ nào tốt hơn một cách hoàn toàn khách quan. So sánh Vim với Emacs chẳng khác nào so sánh Metallica với Megadeth.

Nói là vậy chứ tôi không thể hiểu nổi tại sao người ta có thể so Megadeth với Metallica :P

Nếu coi việc lựa chọn editor như một vấn đề mang tính cá nhân thì tiêu chí lựa chọn quan trọng nhất là nó phải mang lại cho bạn cảm giác thoải mái và sự hiệu quả. Có những siêu cao thủ chỉ dùng Notepad để lập trình. Lại có những siêu sao khác phải cần đến những IDE rất cồng kềnh như IntelliJ IDEA. Họ đều có lý, nhưng những sự lựa chọn của họ sẽ không giúp bạn xác định được đâu mới là môi trường thích hợp nhất cho riêng mình. Cách duy nhất là hiểu mình muốn gì và thử qua những lựa chọn phổ biến.

IDE hay text editor?

Với số lượng lựa chọn không nhỏ, điều đầu tiên cần xác định là liệu bạn muốn một IDE hay một editor đơn giản. Không cần phải nhắc lại IDE mạnh đến thế nào với những tính năng như auto-completion, refactoring, auto-error-detection, code generation, GUI building ...

Tuy nhiên để thực thi những tính năng này, IDE thường parse toàn bộ code base và liên tục re-parse khi ta edit một file trong code base. Việc làm này đòi hỏi CPU, ngốn RAM, và cả HDD space khi IDE có thói quen save lại công việc của nó sau khi kết thúc. Đối với một project nhỏ, những thủ tục này thường không đem lại cảm giác khó chịu cho lập trình viên, nhất là với phần cứng mạnh. Nhưng khi project lớn dần và trở nên lệ thuộc vào nhiều thư viện cũng như projects khác nhau, hoạt động của IDE luôn tỏ ra ì ạch và gây ra stress cho người sử dụng.

Đối với project nhỏ, ta không cần dùng đến IDE vì việc quản lý và sửa đổi đều nằm trong tầm quyển soát. Đối với project quá lớn, IDE lại không thể xử lý với tốc độ chấp nhận được. Đây là luận điểm chính của tôi giải thích tại sao tôi không mấy khi sử dụng IDE, trừ ở công ty cũ khi tôi dùng Visual Studio + Visual Assist X + cool color schemes để code C++.

Hơn nữa, tôi đề xuất không nên dùng IDE nếu bạn chưa quen với toolset của một ngôn ngữ mới. Có nhiều lập trình viên bị lệ thuộc vào IDE đến nỗi không thể compile một project java bằng javac và không biết tự viết ant build script. Theo tôi, bạn chỉ nên dùng IDE sau khi đã hiểu cơ bản nó đã giúp bạn thực hiện những thao tác gì.

Tuy nhiên, việc bạn có thích dùng IDE hay không vẫn là một vấn đề mang tính cá nhân. Là một người sử dụng Arch Linux, tôi đã quen với những tool nhỏ gọn và không cảm thấy thoải mái đối với IDEs, nhưng tôi có thể hình dung một designer quen dùng các sản phẩm của Adobe khi chuyển qua lập trình sẽ không lấy gì làm khó chịu với giao diện tích hợp quen thuộc của các IDE như Eclipse, NetBeans, IntelliJ IDEA, cũng như sự ì ạch thường trực của chúng. Đó là sở thích và cá tính của mỗi người, nó không trực tiếp thể hiện khả năng. Quan trọng là bạn làm việc hiệu quả với môi trường mình lựa chọn.

Có khi nào editor hiệu quả hơn IDE?

Ngay cả khi đã hoàn toàn thỏa mãn với một IDE nào đó và không hề phàn nàn về tốc độ của nó, lập trình viên vẫn nên tìm kiếm và lựa chọn một editor chuyên dụng. Editor này sẽ được sử dụng để edit các file text config đơn giản, để code các ngôn ngữ chưa được IDE hỗ trợ, hoặc để thao tác sửa đổi nhanh mà không muốn tốn thời gian mở và đóng IDE.

Tôi quan sát rất nhiều lập trình viên tìm đến Notepad khi cần làm những công việc trên. Trên thực tế, có lẽ họ sẽ hiệu quả hơn với một editor mạnh hơn Notepad trong khi vẫn nhanh nhẹn và nhỏ gọn gần bằng công cụ soạn thảo không thể đơn giản hơn này.

Cá nhân tôi dùng Vim trong mọi trường hợp, từ những đoạn script nhỏ lẻ viết xong xóa đi cho đến những project lớn hơn. Đôi khi cần code trên Windows, trong quá khứ tôi vẫn thường dùng SciTE hoặc Visual Studio, nhưng tôi đang chuyển sang giải pháp Textadept hoặc Geany.

Các công cụ mà tôi lựa chọn có một số điểm chung: nhanh, nhỏ gọn, hỗ trợ auto-indent, hỗ trợ syntax highlight, hỗ trợ thay đổi color scheme (vì tôi không thể làm việc lâu với nền trắng), hỗ trợ code snippets, và nên có khả năng tùy biến thông qua một scripting language.

Tuy Vim rất mạnh nhưng có thể hiểu được tại sao số người ghét nó không ít hơn số fan hâm mộ của nó là mấy. Dù rất thích Vim, tôi vẫn phải thừa nhận việc nó sử dụng một scripting language tự chế - gọi là Vim script - đã gây khó khăn cho người sử dụng trong việc tùy biến. Họ buộc phải học thêm một ngôn ngữ mới. Đó là chưa kể phong cách edit bằng mode của Vim rất mất thời gian để làm quen.

Có lẽ thừa kế bài học của Vim, một số editor mới ra đời đã sử dụng một ngôn ngữ script phổ biến nào đó như giao diện lập trình tùy biến. JEdit sử dụng một ngôn ngữ tựa Java. Textadept dùng Lua.

Trước khi làm quen với Vim, tôi không tin rằng có chuyện editor hiệu quả hơn IDE. Nhưng thực tế đã chứng minh tôi không những hiệu quả hơn mà còn thoải mái tinh thần hơn khi làm việc trên Vim + Shell, so với Visual Studio + Visual Assist X, hay NetBeans, hay Eclipse. Và như tôi đã nói, dù sao bạn cũng nên đầu tư tìm hiểu editor vì có những thao tác nhất định mà IDE tỏ ra không phù hợp.

Nếu bạn là một fan của Notepad++ hay UltraEdit thì cũng được thôi, nhưng hãy dành thời gian tìm hiểu các editor khác trước khi đưa ra kết luận cuối cùng.
Thay lời kết

Có thể coi editor là công cụ gần gũi nhất với lập trình viên. Nếu bạn vẫn luôn dùng một tool nhất định mà chưa từng bỏ thời gian để thử qua các IDEs và power editors khác thì đây chính là lúc nên làm việc đó. Sự đầu tư vào editor ảnh hưởng trực tiếp đến hiệu quả công việc của bạn. Một editor không phù hợp có thể làm gia tăng khả năng stress, gây đau đầu, và làm giảm tinh thần làm việc. Thỉnh thoảng thay đổi editor cũng có thể sẽ đem lại cho bạn cảm giác mới lạ và hấp dẫn hơn khi lập trình.