Apa teknik yang baik untuk menjaga tempat Anda dalam kode?

21

Saya mengerti menggunakan bookmark untuk mengingat satu titik dalam kode Anda. Namun, bagaimana cara melacak aliran kode yang mereka selidiki? Misalnya: banyak bookmark dan urutan pembuatannya.

Contoh:

  1. Laporan bug: "Tabrakan tidak berfungsi di sudut dinding"

    1. Reproduksi bug meletakkannya ke poligon tertentu yang tidak bertabrakan.
    2. Kode tumbukan ditulis oleh dev yang tidak tersedia. Jadi penyelidikan berlangsung seperti:

Skema sebuah aliran

Selama penyelidikan, terutama ketika meninjau item non-kode seperti Google, orang mungkin diharapkan kehilangan tempat mereka dalam kode ( Apakah saya sudah melihat jalur kode ini? Atau Jalur kode mana yang saya selidiki? Ada banyak yang mengarah untuk fungsi ini , dll). Hal yang sama berlaku untuk gangguan yang tidak terhindarkan (Boss: Saya perlu [Laporan Berujung Panjang] SEKARANG , dll)

Akan bermanfaat untuk memiliki sumber daya teknik atau alat untuk menyediakan cara untuk melacak tempat seseorang dalam kode.


Sunting : Contoh di atas dimaksudkan sebagai ilustrasi potensial, bukan sebagai masalah aktual yang perlu dijawab.

Cara lain untuk mengungkapkan pertanyaan ini adalah:

Saat mempelajari sistem baru, bagaimana Anda melacak di mana Anda sampai dalam mempelajari kode? Ini bukan tentang memahami mengapa kode melakukan apa yang dilakukannya (yang merupakan komentar untuk apa), tetapi bagaimana melakukannya (yang hanya dipelajari melalui membaca kode, bukan komentar).

Jess Telford
sumber

Jawaban:

14

Antarmuka gelembung mencoba untuk memecahkan masalah ini dengan menunjukkan banyak kode sekaligus. (Anda terjebak dengan browser Anda untuk Googling). Ini terlihat luar biasa tetapi saya belum mencobanya. Versi ide ini adalah implementasi Visual Studio untuk Visual Studio Ultimate.

psr
sumber
Memberi +1 karena ini adalah solusi praktis dan siap-pakai untuk masalah ini. (Ini juga sedikit luar biasa!)
Jess Telford
Salah satu hal yang saya temukan di kepala saya bertahun-tahun yang lalu, hanya untuk mengetahuinya sudah ada :( +1
phresnel
tampaknya mirip dengan apa yang dapat Anda lakukan di Squeak dan Smalltalks lainnya di mana Anda membuka jendela penelusuran kode baru dan Anda dapat menavigasi ke metode / kelas apa pun yang Anda inginkan di dalamnya.
Rudolf Olah
cukup mengagumkan ... Saya telah membuat aplikasi mainan kecil yang menyediakan visualisasi penjelajahan internet Anda dengan cara yang sama (saat Anda mengklik tautan, simpul baru akan ditambahkan dan dihubungkan kembali ke asalnya). Tidak pernah terpikir untuk menerapkannya pada visualisasi kode.
Michael Brown
12

Selain dari semua teknologi hebat yang disebutkan, saya menemukan bahwa kertas A3 kuno sangat membantu dalam masalah ini. Tulis ide-ide Anda dan aturlah dengan gaya mindmap.

thiton
sumber
Ya ya Jawaban terbaik sejauh ini.
Patrick Hughes
10

Baik editor dan debugger saya dapat melompat ke definisi fungsi dan memiliki tombol "kembali" bertingkat seperti browser web untuk kembali ke tempat saya sebelumnya. Itu biasanya cukup bagi saya untuk melacak aliran debugging yang kompleks. Ini juga membantu untuk memiliki kontrol sumber yang memungkinkan Anda melakukan banyak hal . Itu memberi saya pesan komit menjelaskan mengapa saya mencoba sesuatu, serta cara cepat untuk mendukung perubahan jika tidak berhasil. Selain itu, papan tulis sederhana untuk daftar calon pelanggan yang potensial dan yang sudah ditelusuri mengisi celah yang tersisa untuk saya.

Karl Bielefeldt
sumber
1
Sangat praktis. Saya tidak pernah berpikir untuk menggunakan kontrol sumber dengan cara ini.
Jess Telford
Editor dan debugger yang mana?
John Gaines Jr
Debugger MULTI Vim dan Green Hill.
Karl Bielefeldt
Dalam Visual Studio itu adalah CTRL + - untuk kembali dan CTRL + = untuk maju.
VitalyB
Gerhana dapat menunjukkan definisi simbol saat ini di bawah kursor di panel terpisah.
3

Berbagai cara yang saya ikuti:

  • Tuliskan . Ada rapat dalam dua menit? Tuliskan apa yang Anda lakukan dan di mana. Saya selalu meletakkan pena dan kertas di sebelah saya untuk menuliskan beberapa hal saat saya membuat kode.
  • Bookmark . Saya memiliki 10 penanda nomor yang dapat saya atur.
  • Stacktrace . Anda dapat dengan mudah melihat seluruh hierarki kode yang Anda lalui. Editor saya juga memungkinkan saya untuk menyalin jejak stack dan menyimpannya. Lain kali saya membuka editor saya, saya dapat memuat stacktrace untuk navigasi cepat.
  • Navigasi editor . Pergi ke anggota dasar, pergi ke pewaris, temukan penggunaan, pergi ke referensi, ...
Carra
sumber
1

Saya menggunakan solusi sederhana - tidak pernah menutup apa pun sampai saya selesai dengan tugas. Itu berarti bahwa biasanya salah satu dari 50 atau lebih jendela yang terbuka / tab memiliki sesuatu di dalamnya yang akan mengingatkan saya apa yang saya pikirkan ketika saya kembali ke sana.

Tom Clarkson
sumber
Masalah dengan pendekatan ini cenderung bagaimana Anda melacak beberapa cabang pemikiran / penelitian bersamaan?
Jess Telford
1
Saya tidak menemukan itu menjadi masalah - mereka semua buka dengan cara yang sama, dan tidak masalah berapa banyak cabang yang saya dapatkan kembali. Ini berfungsi lebih baik untuk browser web daripada IDE, tetapi itu mungkin saja karena basis kode saya saat ini tidak benar-benar diatur secara konseptual.
Tom Clarkson
1

Dapatkan alat pengembang nyata / IDE, apa pun yang membuat Anda suka. Vi, Emacs, Eclipse atau apa pun (Pilihannya sama besar dengan argumen mana yang terbaik, tapi itu masalah lain), dan belajar menggunakannya dengan benar . jangan, seperti terlalu banyak, gunakan seperti Notepad dengan sintaks highlighing. Pelajari cara menggunakan hotkey, dan jangan mengandalkan mouse untuk tindakan umum (Terlalu lambat). Layar besar (minimum 1920x1200) bermanfaat.

Alat dev saya telah menamai (Lebih lambat tapi nama yang berguna membuatnya tahan) dan tidak dinamai (Cepat untuk menyisipkan dan menghapus) bookmark, penelusuran maju dan mundur dan mencari referensi semuanya dalam satu, catatan todo dan catatan pengembang (pribadi dan grup) yang dilampirkan pada baris kode sumber tertentu. Itu setiap bahasa di bawah matahari, tanpa harus menginstal plugin lain.

Saya bekerja pada basis kode yang terdiri dari selusin atau lebih 1 Juta ditambah modul SLOC, menggunakan setengah lusin bahasa. Jelas saya tidak mengerjakan semuanya pada satu waktu, lebih fokus pada bagian kecil dari satu atau dua, tetapi saya dapat menavigasi dengan beberapa tindakan ke titik mana pun dalam kode yang relevan dengan apa yang saya lakukan.

mattnz
sumber
Saya setuju IDE yang tepat adalah yang terbaik. Saya menggunakan tanda hebat vim dan fitur tag jumping. Namun, keduanya memiliki batasan: tanda adalah penyangga-lokal, dan riwayat tag adalah linear. Untuk situasi yang kompleks, ini masih tidak cukup (karenanya mengajukan pertanyaan ini).
Jess Telford
1
Saya seorang Amature, tetapi telah melihat apa yang dapat dilakukan dengan itu di tangan pengguna yang siap untuk menulis beberapa skrip pendek, meluangkan waktu untuk belajar untuk benar-benar menggunakan VIM, atau mengubah alat yang memiliki fitur pengaturan di cara yang bekerja untuk Anda, dan menghabiskan waktu belajar itu. Itu maksudku. Pelajari alat Anda. Seorang pedagang yang baik tidak menyalahkan alatnya, Niether melakukan programmer yang baik.
mattnz
Sepakat. Saya seorang pemula yang mahir dengan vim (dapat menggunakan tanpa berpikir sebagian besar waktu, tetapi hampir tidak menggores permukaan), jadi saya yakin ada hal-hal yang saya tidak tahu. Meski begitu, saya tidak membayangkan bisa melakukan apa pun seperti jawaban psr di vi (m) (setidaknya, bukan dari penelitian saya).
Jess Telford
@Jess: tanda tidak harus menjadi penyangga lokal. Tanda menggunakan huruf kapital bersifat global.
Dave Kirby
@DaveKirby Luar Biasa - Saya suka belajar hal-hal baru tentang vim: D
Jess Telford
1

Dengan Visual Studio, dalam sesi debug, Anda dapat menggunakan jendela 'Call Stack' (Anda dapat mengaktifkannya Debug / Windows / Call Stackatau dengan cara pintas Ctrl+Alt+c) untuk melacak aliran kode.

Jim G.
sumber
1
Seperti pada sebagian besar debuggers. Pertanyaannya lebih pada garis ketika secara manual menelusuri kode Anda termasuk penelitian di luar basis kode Anda.
Jess Telford
1

Saya terkejut tidak ada yang menyebutkan banyak alat yang dapat membuat plot grafik panggilan. Saya menemukan doxygen sangat membantu. Anda bahkan tidak harus berkomitmen untuk menggunakan doxygen di seluruh program Anda, Anda bisa menandai fungsi yang Anda minati.

Charles E. Grant
sumber
0

Saya menggunakan mode org untuk emacs, yang merupakan alat uber-outlining. Dengan itu, saya bisa menulis garis besar yang meniru tumpukan panggilan kode dan menyertakan tautan langsung ke kode sumber itu sendiri (melalui org-store-link). Anda dapat menyertakan teks penjelas, tautan ke halaman web, dll. (Mis. Saat Anda mencari nomor ajaib di Google)

Itu tidak sempurna. Misalnya struktur outline tidak memiliki gagasan untuk naik kembali ke level, jadi sulit untuk melacak jalur eksekusi, yang bertentangan dengan hanya tumpukan. Tapi itu hal terbaik berikutnya untuk diagram di atas kertas yang saya temukan.

Mike B
sumber