Saya telah mengembangkan aplikasi Windows di C ++ selama 10 tahun sekarang. Dan baru-baru ini saya mulai menggali beberapa proyek Linux, dan saya tidak tahan betapa tidak produktifnya saya ...
Saya seorang pembelajar yang cepat, dan saya telah menggunakan Linux sebagai platform utama untuk beberapa waktu sekarang. Dan saya merasa sangat nyaman dengan shell, prinsip-prinsip OS dan GUI. Tapi ketika datang ke pengembangan, rasanya aku kembali ke sekolah.
Begitu saya membuka beberapa proyek yang lebih besar, saya macet. Sebagian besar dari mereka berbasis makefile, jadi pada dasarnya ketika saya mencoba menavigasi mereka dengan QT atau CodeBlocks, paling-paling, saya bisa menggunakan intellisense berdasarkan per-file. Dan sebagian besar variabel waktu bocor dari ruang lingkup.
Lalu ada hal-hal yang masuk ke definisi, yang tampaknya tidak ada, cobalah untuk bergabung dengan beberapa proyek yang lebih besar dari sourceforge, dan Anda terjebak selama berhari-hari, karena menavigasi ke definisi sangat sulit ... grep -r "this_def" . --include "*.cpp" --include "*.h"
tampaknya sangat lambat dan canggung.
Dan kemudian, debugging, gdb berhasil, tetapi tidak peduli apa yang saya lakukan, sepertinya itu tahun-tahun cahaya di belakang WinDbg atau VisualStudio debugger.
Dan hal-hal ini membuat saya putus asa, saya ingin menulis kode, tapi itu berjalan sangat lambat ... Saya mulai berpikir bahwa pengembang Linux mempelajari definisi fungsi dengan hati dan menganalisis kode dengan mata, tetapi saya tidak percaya itu begitu.
Adakah yang pernah mengalami ini? Adakah sesuatu yang saya lewatkan yang dapat membuat saya lebih produktif?
Jawaban:
Cukup menarik secara berkala saya memiliki masalah yang sama di arah yang berlawanan. Saya terutama seorang programmer UNIX, tapi saya secara berkala harus porting barang ke Windows. Saya tidak bisa memberi tahu Anda berapa kali saya ingin mencabut rambut saya karena saya tidak dapat menemukan kotak centang yang sesuai untuk opsi kompiler yang terkubur dalam salah satu dari 35 halaman pengaturan preferensi untuk suatu proyek. Saya lebih suka membuka file proj dan menambahkan XML sendiri.
Bergerak ke arah mana pun, rahasianya adalah memiliki kesabaran, dan mempelajari alat yang diatur untuk platform yang Anda coba masuki. Tentu saja Anda akan frustrasi, itu baru, dan itu tidak dikenal, dan Anda akan menjadi status pemula. lagi. Tidak ada cara untuk menghindari ini.
Dalam kasus khusus Anda ada beberapa alat tambahan yang harus Anda ketahui. Yang pertama adalah DDD , front end GUI untuk gdb. Ini tidak selipis Visual Studio, tetapi itu akan memegang tangan Anda. Namun, saya benar-benar merekomendasikan menggigit peluru, dan mulai belajar seluk beluk gdb. Sebenarnya, jika Anda adalah pengguna biasa, tidak ada banyak perbedaan antara menghafal perintah mana yang harus diketik vs menghafal kotak dialog mana yang harus Anda bawa untuk mengubah pengaturan.
Anda juga perlu tahu tentang alat-alat seperti CScope dan CTags . Sebanyak mungkin Anda menolak, saya sarankan belajar VIM atau EMACS . Mereka terintegrasi dengan baik dengan alat tag yang baru saja saya sebutkan. Ketika di Roma, lakukan seperti yang dilakukan orang Romawi. Anda dapat menemukan ekstensi untuk VIM dan EMACS yang akan menyelesaikan kode untuk Anda. Pengalaman saya sendiri dengan alat yang menawarkan penyelesaian kode adalah bahwa ya, memang menghemat beberapa pengetikan, tetapi secara umum pengetikan mudah. Berpikir adalah yang sulit. Pendapat Anda mungkin berbeda, terutama jika Anda memiliki sindrom carpal tunnel.
Adapun make. Make memang diakui mengerikan, tetapi Anda mungkin harus menyedotnya dan mempelajarinya.
sumber
Kembangkan di Windows, gunakan di Linux.
Ini termasuk menjalankan unit test baik pada mesin Anda sendiri (Windows), dan pada server build (Linux).
Sebagai efek samping, Anda akan belajar cara menulis kode portabel.
Efek positif lainnya adalah bahwa menggunakan kompiler yang berbeda akan menghasilkan lebih banyak peringatan dan dengan demikian menangkap lebih banyak bug.
UPDATE : Untuk semua fanboys Linux downvoting jawaban ini: Saya tidak mengatakan bahwa semua orang harus mengembangkan pada Windows! Tetapi menggunakan platform yang Anda kenal dengan baik lebih produktif daripada menghabiskan banyak waktu untuk mempelajari platform baru.
sumber
Masalah Anda telah terpecahkan berkali-kali di dunia Linux, namun, tidak seperti alat Windows / Microsoft, itu tidak akan diserahkan ke piring perak dengan lauk tambahan. Anda mungkin perlu melakukan beberapa pekerjaan untuk mendapatkannya.
Saya menggunakan editor komersial (Visual Slick Edit, yang dianggap mahal oleh mereka yang tidak menghargai waktu mereka sebanyak yang saya lakukan) untuk masalah ini. Eclipse dengan plugin CDT adalah cara open source untuk pergi yang memiliki banyak pengikut. (Tidak baik untuk saya karena saya sering membutuhkan dukungan ADA)
Apa yang tidak saya lakukan adalah mencoba merekayasa makefile menjadi semacam proyek. Saya menggunakan sistem IDE build in dan secara manual menambah / menghapus file sesuai kebutuhan. Saya yakin saya bisa skrip itu, tetapi waktunya mungkin tidak sepadan. Untuk ini saya menemukan gerhana sedikit kurang dapat digunakan daripada Slickedit (Itu bisa dengan mudah (dan mungkin sudah) berubah sejak saya terakhir melihat)
Linux memiliki banyak sekali alat, orang-orang yang tahu benar-benar unggul dalam semua aspek pengeditan, ia memiliki referensi pencarian dll, hanya kurva belajar yang curam. Saya yakin Emacs dapat melakukan semuanya juga, meskipun belum pernah menggunakannya.
sumber
Untuk apa nilainya, di Linux Anda memiliki sistem pembangunan yang lebih baik daripada GNU tua biasa (yang sering berjalan dengan autoconf yang mengerikan ), misalnya omake dan banyak lainnya (
cmake
,scons
...).sumber
satu saran mengenai betapa membosankannya menggunakan grep untuk mencari kode: setel alias bash di file .bashrc Anda. Jadi itu hanya satu perintah:
mungkin ada cara yang lebih baik untuk menulis perintah, tetapi idenya sama. Ingin kode pencarian? tulis alias yang disebut searchCode. Ingat bahwa meskipun membosankan dan rumit, alat unix juga dapat digunakan untuk membuat hidup Anda lebih mudah.
sumber
2c saya sebagai seseorang yang telah mengembangkan C ++ di kedua platform dan menyukai keduanya.
1) Makefiles menyakitkan - saran terbaik yang bisa saya berikan adalah mencoba beralih ke sistem build lain, jika mungkin.
2) Untuk mengedit kode dan menjelajah, ada beberapa alat yang sangat berguna. Tentu, mereka tidak terintegrasi, tetapi itu tidak masalah ketika datang untuk menyelesaikan sesuatu. vim + ctags + grep hanya akan membawa Anda ke sana. Tentu saja, ada IDE juga, tapi terus terang saya tidak suka apa pun yang saya coba: Eclipse + CDT, KDevelop, Code :: Block. Anda mungkin sampai pada kesimpulan yang berbeda.
3) Untuk debugging, cukup ikuti perintah-gdb. Tentu, itu sangat di belakang Windbg ketika datang ke fitur, tetapi untuk sebagian besar tujuan baik-baik saja. Front-end grafis (ddd, KDbg) sangat buggy terakhir kali saya mencobanya, tapi sekali lagi semuanya mungkin telah berubah :)
Intinya adalah - ya Anda perlu melakukan upaya belajar, tetapi setelah itu Anda akan sama produktifnya dengan Anda di Windows.
sumber
gdb
dari dalamemacs
(di Linux) dan itu sangat membantu.Untuk semua saran bagus yang sudah Anda terima, saya ingin menambahkan beberapa tautan, masing-masing ke ack dan pss .
Mereka ditujukan untuk pemrogram yang harus secara khusus peduli dengan kode sumber, berusaha untuk meningkatkan lebih dari grep.
sumber
Jawaban yang bagus Menambah mereka,
Ketika saya melakukan langkah ini, kesalahan yang saya lakukan adalah mencoba untuk melompat ke kode tanpa memberikan uji tuntas ke sistem build GNU, yang kembali menggigit saya ketika saya ingin membuat perubahan kode. Luangkan beberapa hari untuk memahami bagaimana AutoMake / AutoConf / Make suite of tools berfungsi, Anda akan sangat cepat setelah itu.
Mengenai alat - Eclipse + CDT / GDB + DDD berjalan sangat jauh.
sumber
Berikut ini beberapa saran untuk membuatnya bekerja lebih mudah:
sumber