Tôi cần phải hòa giải 2 sự thật này:
- Tôi không cảm thấy thoải mái khi làm việc trên Linux;
- Tôi cần phát triển phần mềm cho Linux.
Một số nền tảng: Tôi có hơn 10 năm kinh nghiệm lập trình trên Windows (hầu như chỉ có C / C ++, nhưng cũng có một số .NET), tôi là người dùng FreeBSD tại nhà trong khoảng 3 năm hoặc lâu hơn (sau đó phải quay lại Windows) và tôi chưa bao giờ gặp nhiều may mắn với Linux. Và bây giờ tôi phải phát triển phần mềm cho Linux. Tôi cần một kế hoạch.
Trên Windows, bạn có thể thoát khỏi việc chỉ cần biết ngôn ngữ lập trình, API mà bạn đang mã hóa, IDE (VisualStudio) và một số công cụ rất cơ bản để khắc phục sự cố (Depends, ProcessExplorer, DebugView, WinDbg). Mọi thứ khác đến một cách tự nhiên.
Trên Linux, đó là một câu chuyện rất khác. Làm thế quái nào tôi biết được DLL (xin lỗi, đối tượng được chia sẻ) sẽ tải, nếu tôi liên kết với nó từ plugin Firefox? Tương đương với Linux khi chèn __asm int 3 / DebugBreak () vào nguồn và chạy chương trình, sau đó để HĐH gọi trình gỡ lỗi? Tại sao các bản dựng phát hành địa ngục sử dụng một cái gì đó, được gọi là appLoader, trong khi các bản dựng gỡ lỗi hoạt động bằng cách nào đó khác nhau? Điều tồi tệ nhất: làm thế nào để cung cấp môi trường phát triển Linux?
Vì vậy, tính đến sự thù hận thường liên quan đến việc không biết đủ, bạn sẽ đề nghị gì? Tôi ổn với Emacs và GCC. Tôi cần phải tự học như một quản trị viên / người dùng Linux và tôi cần học các công cụ xử lý sự cố thích hợp (strace rất tuyệt, btw), tương đương với các công cụ tôi đã đề cập ở trên.
Tôi có cần làm Linux từ Scratch không? Hoặc tôi chỉ cần đọc một số cuốn sách (Tôi đã đọc "Môi trường lập trình UNIX" của Kernighan và "Lập trình nâng cao ..." của Stevens, nhưng tôi cần học một cái gì đó thực tế hơn)? Hay tôi cần có một số bản phân phối Linux trên máy tính ở nhà?
man
là bạn của bạn. Tôi sẽ man nm
và man ld
như một điểm khởi đầu.