Saya perlu merekonsiliasi 2 fakta ini:
- Saya merasa tidak nyaman bekerja di Linux;
- Saya perlu mengembangkan perangkat lunak untuk Linux.
Beberapa latar belakang: Saya memiliki 10+ tahun pengalaman pemrograman di Windows (hampir secara eksklusif C / C ++, tetapi beberapa .NET juga), saya adalah pengguna FreeBSD di rumah selama sekitar 3 tahun atau lebih (kemudian harus kembali ke Windows), dan saya tidak pernah beruntung dengan Linux. Dan sekarang saya harus mengembangkan perangkat lunak untuk Linux. Saya butuh rencana.
Di Windows, Anda bisa lolos hanya dengan mengetahui bahasa pemrograman, API yang Anda koding, IDE (VisualStudio) dan beberapa alat yang sangat mendasar untuk pemecahan masalah (Tergantung, ProcessExplorer, DebugView, WinDbg). Segala sesuatu yang lain datang secara alami.
Di Linux, ini adalah cerita yang sangat berbeda. Bagaimana saya tahu apa yang akan dimuat DLL (maaf, Shared Object), jika saya menautkannya dari plugin Firefox? Apa yang setara dengan Linux dengan memasukkan __asm int 3 / DebugBreak () di sumber dan menjalankan program, dan kemudian membiarkan OS memanggil debugger? Mengapa rilis build menggunakan sesuatu, yang disebut appLoader, sementara debug build bekerja dengan cara yang berbeda? Terburuk dari semua: bagaimana cara menyediakan lingkungan pengembangan Linux?
Jadi, dengan mempertimbangkan bahwa kebencian biasanya dikaitkan dengan tidak cukup tahu, apa yang akan Anda rekomendasikan? Saya setuju dengan Emacs dan GCC. Saya perlu mendidik diri saya sebagai admin / pengguna Linux, dan saya perlu belajar alat troubleshooting yang tepat (strace is cool, btw), setara dengan yang saya sebutkan di atas.
Apakah saya perlu melakukan Linux dari Awal? Atau apakah saya perlu membaca beberapa buku saja (saya sudah membaca "lingkungan pemrograman UNIX" oleh Kernighan dan "Pemrograman Lanjut ..." oleh Stevens, tetapi saya perlu belajar sesuatu yang lebih praktis)? Atau apakah saya perlu memiliki distro Linux di komputer rumah saya?
man
adalah teman Anda. Saya akanman nm
danman ld
sebagai titik awal.Jawaban:
Anda mungkin menemukan artikel Dynamic Linking di Linux dan Windows menarik yang menjelaskan bagaimana setiap OS melakukan tautan dinamis. Artikel Jalur Pencarian Perpustakaan Bersama menjelaskan bagaimana perpustakaan ditemukan. Juga Statis, Shared Dinamis dan loadable Linux Perpustakaan sangat baik. Satu hal yang menyenangkan tentang pustaka Linux adalah mereka memiliki dukungan yang lebih baik untuk versi dan memiliki beberapa versi pustaka sekitar daripada Windows (AFAIK, saya tidak melakukan Windows). Lihat Versi Antarmuka Perpustakaan di Solaris dan Linux untuk itu. Artikel-artikel ini harus benar-benar membuat Anda dilindungi dengan perpustakaan.
GDB sangat perkasa, pengantar yang bagus mungkin adalah Tutorial gdb RMS . Anda mungkin ingin membaca tentang breakpoints bersyarat. Agar setara,
__asm(int 3)
lihat pertanyaan. Atur breakpoint dalam kode C atau C ++ secara terprogram untuk gdb di Linux .Buku Advanced Unix Programming dari Marc Rochkind adalah buku yang harus dibaca, IMHO. Memiliki banyak contoh dan mencakup semua topik POSIX / SUS dengan cara yang sangat baik. Ini buku terbaik tentang topik yang saya baca sejauh ini.
Tetapi untuk membuat hidup Anda lebih mudah, saya sebenarnya merekomendasikan untuk menggunakan API tingkat tinggi yang mengabstraksi barang untuk Anda, seperti Qt. Juga membuat penulisan lintas platform jauh lebih mudah.
Melakukan Linux Dari Awal membantu Anda mendapatkan pemahaman tentang bagaimana sistem Linux disusun, tapi saya pikir itu tidak banyak meningkatkan pengetahuan Anda tentang hal itu dari sudut pandang pengembang. Itu memang membuat Anda lebih nyaman dengan Linux, karena Anda belajar bagian apa yang ada di lingkungan Linux (dan sebagian juga mengapa ). Linux tidak akan menjadi kotak hitam besar bagi Anda setelah bekerja melalui Linux From Scratch.
sumber
Jika Anda suka
strace
, jangan lupaltrace
: setara dengan panggilan perpustakaan.Juga, ya, saya merekomendasikan Linux From Scratch . Ini adalah latihan yang baik dalam mengerjakan elemen-elemen inti dari OS dan bagaimana mereka cocok bersama.
Untuk perawatan referensi pemrograman sistem yang modern dan lengkap, saya akan merekomendasikan mengambil Antarmuka Pemrograman Linux .
sumber
Mac OS X seperti Mercedes; itu yang tercantik dan terbersih tetapi harganya sangat mahal. Windows seperti Toyota; itu akan membuat Anda di sana dan kembali.
Linux seperti hot rod; Ini untuk orang-orang untuk menggali dan membongkar dan menyatukan kembali. Linux bukan untuk seseorang yang hanya ingin menggunakan komputer; ini untuk orang yang suka komputer. Orang yang tidak suka komputer harus menjauh darinya.
Hal-hal yang Anda pelajari di Windows tidak akan menerjemahkan dengan sangat baik, tidak. Tapi Anda bisa melihat bagian dalam dan menyaksikan mesin menyala.
Cobalah untuk menggunakan Linux sebagai mainan baru, yang dapat Anda mainkan dan rangkak ke dalamnya dan lihat apa yang terjadi. Hal-hal yang mudah di Windows lebih sulit di Linux; hal-hal yang mustahil di Windows dimungkinkan di Linux.
Jika Anda menyukai komputer, Anda dapat menyukai Linux; jika Anda tidak menyukai komputer mengapa Anda pemrograman sama sekali?
sumber
Bagaimana kalau Anda berkembang di Mono dengan Monodevelop? Ini akan membantu Anda memulai dengan cukup mudah dengan menggunakan kembali pengalaman Anda di .NET.
sumber
Ini menakutkan ketika Anda melihatnya dari awal (seperti jika Anda adalah seorang pengembang Linux yang ditugaskan untuk melakukan pengembangan Windows). Saya akan mengatasi masalah yang satu ini pada suatu waktu.
Yang terpenting, tinggalkan semua pendapat subjektif Anda di depan pintu. Dan tidak, Anda tidak perlu menjadi guru untuk berkembang di Linux, saya cukup tahu untuk berkeliling, dan tidak semuanya - tapi saya nyaman dengan itu ...
sumber
The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.
Berapa lama waktu yang Anda butuhkan untuk menjadi mahir dalam bekerja di lingkungan windows. Anda mungkin mengatakan itu mudah Anda baru saja mulai. Tapi Anda sudah beberapa tahun bekerja dengan windows sebelum itu. Berapa lama Anda menggunakan windows sebelum Anda menulis program tinju Anda. Itu 8 tahun bagi saya, meskipun sekarang saya sudah menggunakan Linux hampir secara eksklusif selama 5 tahun. Saya sekarang lebih mahir di Linux daripada di windows. Anda harus memberi diri Anda setidaknya waktu sebanyak itu untuk mengenal sistem baru.
Mulailah dengan daftar aplikasi yang Anda tidak bisa hidup dengan di windows dan mencari alternatif di dunia * nix. http://alternativeto.net/ dan bagian bacaan lebih lanjut Wikipedia dapat membantu di sini.
Berikut adalah daftar perangkat lunak alternatif yang terbukti sangat berguna. Berikut adalah beberapa alternatif untuk hal-hal yang Anda sebutkan.
Sumber daya bermanfaat lainnya dalam berpindah dari satu sistem ke sistem lainnya
Tentang menjadi pengguna yang lebih baik atau pengguna admin, lihat sumber daya ini
Sepertinya ini sudah lama sejak Anda melihat dunia * nix. Saya akan merekomendasikan beberapa rilis distro baru dari fedora , suse , debian , atau stasiun kerja pilihan saya Ubuntu .
Sekarang Anda mungkin bisa lolos dengan tidak mengetahui internal sistem dan hanya dasar-dasar seperti di windows. Saya tidak akan hanya mencoba untuk pergi dengan minimum. Jika Anda melihat Linux sebagai alat yang benar-benar membantu Anda dalam pengembangan dan bukan hanya sistem operasi yang Anda kembangkan, akan sangat membantu.
Linux From Scratch akan jauh lebih penting jika Anda secara khusus mengembangkan Linux adalah pengertian yang sangat spesifik dan teknis. IE yang ingin Anda kembangkan untuk kernel, atau port program Anda ke komputer super yang menjalankan Linux. Ini akan sangat bermanfaat, tidak pernah kurang. Saya pikir Anda mungkin bisa meninggalkan itu selama beberapa bulan sementara Anda hanya mencoba untuk pergi di Ubuntu. Ubuntu akan sedekat dengan hal - hal yang hanya berfungsi di dunia mac dan windows.
sumber
Saya pikir Anda menjawab pertanyaan Anda dalam pertanyaan:
"Di Windows, Anda bisa lolos hanya dengan mengetahui bahasa pemrograman, API yang Anda koding, IDE (VisualStudio) dan beberapa alat yang sangat mendasar untuk pemecahan masalah (Tergantung, ProcessExplorer, DebugView, WinDbg). Segala sesuatu yang lain datang secara alami. "
Gues what, di Linux Anda bisa lolos hanya dengan mengetahui bahasa pemrograman, API (atau pasangan), IDE Anda (Eclipse atau NetBeans, bahkan Geany, Emacs, atau vim, jika Anda mau) dan beberapa alat dasar untuk pemecahan masalah ( gdb, tracing tools, lint, htop, ps).
Anda memiliki banyak pengetahuan yang diinvestasikan dalam ekosistem pemrograman Windows. Sebagian besar dari itu (semoga) pengetahuan abstrak (apa itu kompiler, debugger, pustaka bersama, proses, utas? Apa yang mereka lakukan?) Yang akan ditransmisikan dengan mudah, setelah Anda mendapatkan kecepatan pada alat yang berbeda. Beberapa spesifik domain (Apa DLL ditautkan ketika saya menambahkan X ke proyek?), Tetapi bahkan pindah dari satu kelas bahasa ke yang lain dalam Windows akan memerlukan beberapa pembelajaran baru.
Instal Ubuntu atau Fedora di VM, baca beberapa tutorial C ++ Hello World di Eclipse atau NetBeans, dan beberapa debugging di tutorial Eclipse / NetBeans, dan biarkan kemampuan alami otak Anda untuk beradaptasi mengambil alih. Ini akan menerjemahkan ide untuk Anda jika Anda rileks dan menjalankannya.
sumber
Saya belajar Unix secara umum dengan membaca halaman manual. Anda setidaknya harus membaca skim mereka. Ya, maksud saya semuanya. Metode yang saya gunakan untuk cd ke direktori halaman manual, dan serang mereka satu bagian pada suatu waktu.
Saya menggunakan ini:
... mengganti .1 dengan nomor bagian yang Anda baca, .2, .3, dll. Tekan ctrl-Z ctrl-C untuk keluar dari loop. Jarak tempuh Anda mungkin berbeda-beda jika distro linux Anda menyimpan berbagai hal secara berbeda, yaitu bukan sebagai cmdname.1.gz.
Pergi melalui deskripsi, dan lebih banyak lagi jika itu sesuatu yang menarik. Bagian 1, 2 dan 3 adalah yang paling penting bagi seorang programmer. 1 mencakup perintah pengguna umum, yang meliputi alat kompilasi Anda, dan berbagai utilitas forensik. 2 adalah panggilan sistem, dan 3 adalah panggilan perpustakaan.
sumber
xman
sebagai antarmuka yang lebih "ramah". Pilih bagian, klik halaman manual, baca itu. Bilas, ulangi.Jangan memaksakan diri untuk melakukan sesuatu yang tidak Anda sukai. Gunakan Windows sebagai lingkungan pengembangan Anda, menulis kode portabel, kompilasi silang untuk Linux, dan hanya mengujinya sesekali dalam VM.
sumber
Saya tidak yakin itu berfungsi untuk platform tetapi untuk bahasa pemrograman, saya merasa terbantu untuk memikirkan bagaimana saya menjadi terbiasa dan nyaman dengan yang saya pahami dan mencoba untuk memutar ulang pengalaman dan kegiatan tersebut untuk apa yang saya ' Saya mencoba belajar.
Mungkin sesuatu di jalur itu?
Namun secara umum, minat dan kepercayaan diri saya dengan GNU / Linux telah membuatnya jauh lebih menggerumit (dan membutuhkan bermain-main pada hari-hari awal) daripada Windows. Saya perlu mengacaukan banyak hal agar pekerjaan berjalan lancar dan itu membantu saya belajar banyak hal. Segalanya jauh lebih baik sekarang, tetapi semua jam itu membantu.
sumber
Saya adalah salah satu dari dua orang yang ditugaskan dengan sesuatu yang serupa, tetapi berbeda. Saya bekerja di distrik sekolah K-12, dan sistem bisnis (SDM, keuangan, dll ...) bermigrasi dari dB HP3000 / TurboImage ke platform Linux / MS SQL. Saya nyaman dengan sisi MS SQL. Tapi bukan sisi Linux. Kami berdua berada di sisi admin, bukan sisi pemrograman. Pemrograman dilakukan di luar - aplikasi bisnis pihak ke-3 untuk K-12 orgs.
Saya mengambil kelas Intro to Linux (Redhat) akhir pekan 5 pada akhir pekan - sebagian besar dilakukan dalam mode command line - dan itu layak waktu bagi saya sebagai lompatan cepat ke Linux cara melakukan sesuatu. Jelas YMMV tergantung pada kelas / guru.
Anda menyebutkan 'Terburuk dari semua: bagaimana cara menyediakan lingkungan pengembangan Linux?'? Karena Anda sudah terbiasa dengan Windows, saya sangat menyarankan Anda mendapatkan salinan vmWare Workstation. Dengan itu Anda dapat menjadikan Windows sebagai workstation Anda, dan menginstal Linux sebagai sistem tamu - hapus, bilas, dan ulangi sesuai kebutuhan. Ketika Anda mendapatkan pengaturan yang baik, saya yakin Anda dapat memotretnya, tetapi saya tidak bisa memastikan versi mana yang mampu dari aspek snapshotting. Dan jika Anda masuk ke vmWare Workstation untuk mengaktifkan beberapa pengaturan pengembangan - tentu saja, tambah memori.
Saya juga tidak keberatan merekomendasikan menggunakan CentOS sebagai OS Linux untuk para tamu. Dari apa yang saya pahami, ini seperti RedHat tanpa branding dan / atau promosi penjualan dan / atau biaya dukungan. Saya tidak terbiasa dengan rasa Linux lainnya, jadi tidak bisa memberi masukan pada mereka.
Greg
sumber
Saya suka kedua platform dan untuk semua perbedaan dalam antarmuka pengguna dan sistem ramah lingkungan, saya menemukan mereka lebih mirip daripada berbeda di bawah penutup. Bahkan, untuk sebagian besar konsep Windows Anda dapat menemukan yang setara Linux hanya dengan mencari di Internet.
Karena itu, saya sangat menyarankan belajar bagaimana melakukan hal-hal dengan "cara Unix". Gunakan baris perintah daripada buggy GUI front-end (saya berbicara sebagian besar tentang gdb di sini); jangan mencari IDE, dan pelajari cara menggunakan seperangkat alat khusus. Pilih editor yang baik (menunjuk ke vim) dan pelajari dengan baik. Baca caranya
make
meskipun Anda tidak berencana untuk menjadi ahli. Mungkin Anda bahkan menyukai Linux. Itu ramah geek dan menyenangkan untuk dimainkan.sumber
Pertimbangkan ini: Anda pernah tidak tahu apa-apa tentang Windows, tetapi Anda mempelajarinya dan lama-kelamaan menjadi nyaman dengannya.
Kemudian MS mengubah sistem pemrograman apa pun yang Anda sukai menjadi .NET dan Anda tidak lagi tahu apa-apa tentang DLLS, COM, dan apa pun, Anda harus mempelajari hal-hal seperti assemblies, GAC, domain aplikasi. Anda belajar itu ok.
Jadi mengapa Anda sekarang khawatir melakukan hal yang sama dengan Linux?
Ada banyak tutorial 'buat Anda memulai' di web untuk semua jenis lingkungan pemrograman. Sekarang Anda mengatakan GCC jadi saya akan menganggap pengembangan C ++. Dapatkan sendiri Eclipse, instal CDT (c dev tools) di atas platform Eclipse Anda (Eclipse adalah IDE multi-tujuan, Anda dapat menggunakannya untuk C ++, PHP, Java, apa pun - tetapi Anda perlu menginstal tooling untuk bahasa Anda karena Anda tidak akan benar-benar menginginkan semuanya pra-instal seperti VS dan membutuhkan 3 hari untuk menginstal :))
Ada tutorial yang mudah digunakan di seluruh web. IBM punya satu di sini yang cukup komprehensif.
Alat debugging ... eclipse telah tertanam ( tutorial ), tetapi Anda dapat menemukan banyak alat seperti yang Anda sebutkan, cukup cari di web dan Anda akan menemukan banyak pilihan. Ini akan membawa Anda sedikit waktu untuk mencari tahu cara membaca dump inti (sebagai lawan dari windows userdump misalnya) tetapi Anda akan sampai di sana.
Mungkin juga bermanfaat memulai blog dengan pengalaman Anda, tidak hanya itu akan memungkinkan Anda untuk mengingatkan diri sendiri tentang apa yang telah Anda lakukan (mis. Mengatur gerhana bagaimana Anda menyukainya, Anda akan lupa ketika Anda perlu melakukannya lagi dalam sebuah tahun) tetapi itu akan membantu orang lain dalam situasi Anda.
sumber
Saya tidak berpikir Anda perlu melakukan Linux dari awal. Jika saya jadi Anda, saya akan pergi untuk Ubuntu. Lebih nyaman, dan berdasarkan debian, ada banyak materi teknis yang tersedia.
Jika Anda ingin lebih banyak menyelam di Linux, Gentoo adalah pilihan yang bagus. Ini mengharuskan Anda untuk membaca cukup banyak tentang konfigurasi dan kernel, tetapi juga memberi Anda cukup sistem fungsional untuk bekerja di af
sumber
Google "Seni pemrograman Unix" dan membacanya. IMO, kesulitan utama Anda adalah filosofi yang berbeda, dan buku itu adalah bacaan yang bagus untuk ini.
Ini juga memperkenalkan Anda pada beberapa perbedaan yang tidak jelas tetapi secara teknis sangat penting antara * n * x dan sistem Windows - ini menjadi kunci untuk memahami mengapa melakukan sesuatu dengan cara lain masuk akal di Linux.
sumber
Pertanyaan pertama yang saya tanyakan adalah apa yang ingin Anda kembangkan? Jika itu aplikasi berbasis gui maka itu bisa berbeda dari keharusan menulis sesuatu seperti ekstensi kernel.
Dalam kasus aplikasi gui, saya menemukan metode termudah adalah dengan menggunakan Qt, yang memiliki lingkungan pengembangannya sendiri (Qt-Creator) dan menjadi cross-platform, memungkinkan Anda untuk belajar hanya satu API yang dapat digunakan untuk Windows / Linux / OSX dan bahkan pengembangan ponsel. Seperti studio visual di Windows, atau XCode di OSX, Anda dapat membuat dan menata jendela dan item dari editor grafis dan API sangat mudah diambil dengan banyak aplikasi sampel.
Jika Anda perlu mendapatkan lebih banyak level rendah, maka setelah Anda mengetahui jalan-jalan di linux pada baris perintah, tahu cara melintasi direktori, memanipulasi file, memahami izin, dll., Maka mulailah membaca cara menyusun program sederhana dengan gcc, cara menautkan file dan menjalankan file yang dapat dieksekusi dan kemudian cara debug dengan gdb.
Atau, jika itu agak menakutkan, Anda bisa mengunduh Eclipse atau IDE lain, tetapi Anda mungkin akan menjadi lebih nyaman dengan Linux dalam jangka panjang, jika Anda menempatkan waktu dan usaha ke dalam baris perintah terlebih dahulu.
sumber