Bagaimana Cara Seorang Pelatih Kanan Menangani Kode Pelatih Kiri Besar? [Tutup]

11

Saya seorang seniman, kebanyakan, meskipun saya menggambarkan diri saya sebagai seorang seniman / fisikawan. Sementara saya bisa melakukan matematika, berurusan dengan kata-kata, dan hal-hal "logis" yang dianggap sebagai otak kiri, itu adalah upaya dan saya membuat kesalahan, sedangkan saya melakukannya dengan baik dan sebagian besar waktu berpikir dalam hal-hal yang berhubungan dengan otak kanan berpikir - hubungan spasial, konteks gambaran besar holistik, dll. Tentu saja semua itu kabur, karena teori otak kanan-kiri terlalu disederhanakan dan tidak ada aktivitas mental yang begitu sederhana. Namun saya merasa bahwa saya cocok dengan artis, sutradara video, koki, dan pemikiran kreatif non-verbal lainnya, sementara kebanyakan orang di "IT" atau insinyur perangkat lunak hardcore memiliki pikiran yang bekerja secara berbeda, dengan memperhatikan detail, memegang banyak detail dalam pikiran pada satu waktu, dan kemampuan rasional dan verbal yang kuat.

Jadi di sini saya dalam pekerjaan yang dibayar untuk memperbaiki bug yang cerewet dan tidak jelas dalam kerumunan besar perangkat lunak C ++, sangat berat pada OO, dan setiap baris kode tidak masuk akal kecuali saya ingat sekitar dua puluh nama kelas dan metode lainnya, hubungan di antara mereka, aliran eksekusi (sangat spageti) dan detail lainnya.

Selain itu, saya juga agak menentang sebagian besar gaya C ++ dan OO kontemporer. Mereka yang menulis kode ini benar-benar meminum OO yang dalam dan Modern C ++ kool-ade. Saya merasa itu benar-benar membuat kode lebih sulit untuk diikuti, lebih sulit untuk memutuskan di mana memperbaiki atau mengubah sesuatu. Saya tidak tahu apakah ini bagian dari perbedaan kiri / kanan (atau apa pun yang Anda ingin menyebutnya) atau tidak.

Tetapi bekerja pada C ++ saya harus - orang bergantung pada saya untuk penghasilan saya. Apa tip dan teknik untuk mengatasi situasi ini, agar seefektif mungkin bagi majikan saya?

DarW
sumber
9
Ini bukan perbedaan otak kiri / otak kanan - tidak ada yang dapat memahami atau memodifikasi kode C ++ semacam itu tanpa upaya besar-besaran, selain dari orang yang menulisnya (sering kali, bahkan bukan mereka). Pastikan saja ketika Anda diminta untuk memperkirakan berapa lama sesuatu akan dilakukan, Anda perlu mengeluarkan beberapa ratus persen untuk berurusan dengan desain "kontemporer".
Carson63000
8
Jangan frustrasi. C ++ adalah bahasa yang sangat aneh, di mana tujuan desainnya bukan kegunaan (untuk manusia) atau kompilasi, kejelasan, kebenaran (untuk kompiler). Satu-satunya tujuan desain C ++ adalah untuk membuat permutasi leksikal yang mungkin berarti sesuatu, bahkan jika itu sepenuhnya tidak taktis.
1
@Rocket: Anda meledakkannya :-) tapi saya setuju dalam beberapa bagian.
Geek
@mojuba - ya, kami menggunakan bentuk C ++: D yang lebih
canggih
2
Ini disebut "Kode Warisan", dan masalahnya bukan hanya untuk Anda. Lihat en.wikipedia.org/wiki/Legacy_code untuk tautan ke buku Michael Feathers tentang cara menjinakkan binatang buas semacam itu.

Jawaban:

2

Cobalah masuk lebih banyak ke sisi desain hal-hal di mana merasa nyaman dengan kekaburan adalah kekuatan akan menjadi saran saya dalam hal perkembangan karir. Sebagai seseorang yang suka menjadi kreatif, bekerja pada pemeliharaan mungkin tidak cocok sedangkan mengerjakan hal-hal baru mungkin lebih baik jika itu mungkin.

Meskipun tidak ada yang salah dengan menginginkan kebanggaan dalam pekerjaan seseorang, keinginan untuk tidak terjebak dalam detail mungkin adalah sesuatu yang Anda mungkin harus menemukan pendekatan baru untuk meningkatkan. Alih-alih melihatnya sebagai turun dan kotor, mungkin ada perspektif lain yang bisa membuatnya menyenangkan.


Dukungan dan pemeliharaan kemungkinan memiliki penggemar mereka karena beberapa orang lebih memilih untuk men-tweak sistem yang ada daripada dimasukkan ke dalam sistem baru. Saya tahu saya cenderung bekerja lebih baik dengan sistem yang ada yang saya ubah daripada mencoba menarik sesuatu dari eter.

Apa yang mungkin Anda coba lakukan adalah mencatat ketika orang menginginkan ide untuk berurusan dengan berbagai titik masalah dan bertukar pikiran karena ini adalah bagian dari apa yang Anda sukai. Ini bukan tentang mengetahui baris kode mana yang harus diubah tetapi jika Anda dapat memberi tahu seseorang, "Apakah Anda melihat objek itu dan melihat apakah ia melakukan lebih dari yang diklaimnya?" semacam itu.

Poin lain adalah mengetahui apa yang ingin Anda buat: Grafik, aplikasi, situs web, proses atau sistem? Ini semua adalah hal yang sedikit berbeda yang ingin dibuat, Anda dapat diminta untuk "Buat apa?"

JB King
sumber
Ide ini hampir langsung keluar dari pertemuan dengan bos saya baru kemarin. Saya bertanya-tanya - bukankah menciptakan hal-hal selalu lebih diinginkan oleh semua orang, dan pemeliharaan selalu seperti membersihkan toilet? Jika seseorang berkeliling mengatakan "Saya lebih suka MENCIPTAKAN hal-hal!" apakah mereka akan dianggap serius?
DarenW
4
Saya suka perawatan kode. Ini lebih seperti operasi daripada membersihkan toilet: Anda harus memperbaiki bagian dari sistem kerja, tanpa merusaknya.
Frank Shearar
"Tarik sesuatu dari eter" - mengingatkan saya pada mimpi di mana saya menarik donat lemon keluar dari udara untuk mengesankan seorang gadis: D Tapi serius itu adalah poin kunci bagi saya - Saya selalu ingin, memikirkan, menciptakan hal-hal baru.
DarenW
3
@ FrankShearar Terkadang ini seperti operasi yang dilakukan di toilet; (
mlvljr
16

Itu tidak terdengar (setidaknya bagi saya) seperti kode Anda sangat berorientasi objek, atau sangat mirip dengan "Modern C ++". Sebaliknya, salah satu elemen kunci dari orientasi objek yang baik adalah enkapsulasi, maksud utamanya adalah untuk mengurangi jumlah hal yang perlu Anda perhatikan pada waktu tertentu. Demikian juga, "aliran eksekusi yang sangat spaghetti" tidak terdengar berorientasi objek maupun modern (apa pun).

Sekarang, saya kira jika saya melihat kode yang Anda pertahankan, saya mungkin melihatnya secara berbeda, dan / atau Anda mungkin melihat kode saya mirip dengan apa yang Anda pertahankan saat ini - itu agak sulit ditebak. Memang benar bahwa jika Anda mencoba menelusuri setiap detail tentang bagaimana kode saya bekerja, saya kira Anda bisa melihatnya sebagai aliran kontrol yang agak spageti.

Sebagai contoh, saya jauh lebih menyukai (atau setidaknya toleran) dari beberapa konversi implisit daripada banyak programmer - saya menggunakan hal-hal seperti kelas proxy cukup sedikit. Ini berarti mungkin dengan mudah ada tiga atau empat objek sementara dari berbagai jenis yang dibuat dalam proses memanggil fungsi tunggal (dan perhatikan bahwa saya tidak berbicara tentang sebenarnya mengeksekusi fungsi, hanya memanggilnya ). Tentu saja, semua objek sementara itu akan dihancurkan lagi di akhir ekspresi yang berisi pemanggilan fungsi. Jika Anda menghitungnya, Anda mungkin dengan mudah memiliki setengah lusin atau lebih fungsi terpisah yang dipanggil dalam panggilan / kembali dari satu fungsi yang "jelas" dipanggil dalam kode.

Titik melakukan hal-hal seperti itu, bagaimanapun, adalah untuk membuatnya mudah untuk mengabaikan sebagian besar trivia terlibat dalam (misalnya) berurusan dengan rincian seperti bagaimana objek tertentu diwakili, dan hanya berkonsentrasi pada apa yang benar-benar adalah sebaliknya. Anda hanya perlu menangani sebagian besar kode itu jika Anda melihat bug di bagian itu. Saya mencoba untuk menghindari banyak dari itu, bagaimanapun, dengan menciptakan kelas yang sangat kecil dan sederhana, yang hanya sedikit, sehingga hanya perlu sedikit pandangan untuk menyadari bahwa itu jelas benar, sehingga mudah untuk diabaikan sejak saat itu.

Jerry Coffin
sumber
Ugh! Hal-hal semacam itu membuat saya ngeri! Mungkin gaya berpikir saya terlalu rendah, yaitu "pemrograman berorientasi opcode", untuk merasa nyaman dengan ini.
DarenW
2
Adapun "untuk membuatnya mudah untuk mengabaikan sebagian besar hal-hal sepele" - gaya pengkodean tampaknya menjadi trivia glorifier. Mencoba memperbaiki satu hal kecil minggu ini, ada sejumlah detail luar biasa yang tidak benar-benar melakukan apa pun.
DarenW
"... dengan membuat kelas yang sangat kecil dan sederhana, yang hanya sedikit, sehingga hanya membutuhkan sedikit pandangan ..." Apakah ada contoh open source yang bagus untuk ini?
DarenW
2
@ Darrenw yakin, smalltalk 80
Tim Williscroft
10

Peringatan : jawaban ini sangat panjang dan memiliki banyak masalah psikologis (yang saya coba jelaskan, tapi tetap saja). Apa yang bisa kukatakan? Psikologi adalah salah satu mata pelajaran favorit saya di luar pemrograman.

Saya seorang seniman, kebanyakan, meskipun saya menggambarkan diri saya sebagai seorang seniman / fisikawan. Sementara saya bisa melakukan matematika, berurusan dengan kata-kata, dan hal-hal "logis" yang dianggap sebagai otak kiri, itu adalah upaya dan saya membuat kesalahan, sedangkan saya melakukannya dengan baik dan sebagian besar waktu berpikir dalam hal-hal yang berhubungan dengan otak kanan berpikir - hubungan spasial, konteks gambaran besar holistik, dll. Tentu saja semua itu kabur, karena teori otak kanan-kiri terlalu disederhanakan dan tidak ada aktivitas mental yang begitu sederhana. Namun saya merasa bahwa saya cocok dengan artis, sutradara video, koki, dan pemikiran kreatif non-verbal lainnya, sementara kebanyakan orang di "IT" atau insinyur perangkat lunak hardcore memiliki pikiran yang bekerja secara berbeda, dengan memperhatikan detail, memegang banyak detail dalam pikiran pada satu waktu, dan kemampuan rasional dan verbal yang kuat.

Ini sebenarnya didasarkan pada pandangan neuroscience yang agak ketinggalan zaman. Pada satu titik waktu, para ilmuwan percaya bahwa otak kiri hanya bertanggung jawab atas logika dan data sensoris mentah, sedangkan otak kanan sepenuhnya bertanggung jawab atas intuisi dan perasaan. Ternyata, otak kiri benar-benar mampu melakukan segala hal yang dimiliki otak kanan dan sebaliknya. Sebagai seseorang yang sangat berotak kanan namun logis, mengerikan dengan arah dan orientasi spasial, dan sama sekali tidak memiliki kreativitas artistik yang secara tradisional dikaitkan dengan otak kanan, saya dapat membuktikan hal ini.

Cara terbaik untuk memikirkan perbedaan antara otak kiri dan kanan adalah dengan menganggap mereka sebagai bayangan cermin satu sama lain. Untuk memahami ini, Anda memerlukan beberapa data latar belakang. Seorang psikolog bernama Carl Jung datang dengan teori kepribadian di tahun 20-an yang membagi kepribadian sepanjang beberapa dimensi. Anda mungkin pernah mendengar salah satunya: introversi vs ekstraversi. Saya telah menulis beberapa posting blog tentang hal ini, tetapi pada dasarnya bermuara pada hal ini: introversi membedakan dirinya dari orang lain sementara extraversion berfokus pada bagaimana hal itu dapat terhubung ke orang lain. Ini disebut sebagai "sikap".

Kemudian Anda memiliki empat fungsi kognitif yang berbeda: berpikir, merasakan, sensasi, dan intuisi. Demi kesederhanaan, anggap saja dua fungsi ini dianggap sebagai fungsi "menilai" (berpikir dan merasakan) sementara dua lainnya adalah fungsi "mengamati". Fungsi penjurian membuat keputusan. Ketika Anda berada dalam pola pikir penilaian, Anda berusaha menghindari kejutan. Anda ingin membuat semua keputusan yang tepat sebelumnya sehingga Anda tidak harus beradaptasi ketika kejutan datang. Karena Anda telah melakukan begitu banyak perencanaan sebelumnya, Anda mungkin memiliki kecenderungan untuk menjadi kaku dan tidak fleksibel setelah keputusan dibuat. Di sisi lain, pola pikir mempersepsikan cenderung lebih suka terbang di kursi celana dan berguling-guling dengan pukulan.

Secara umum, Anda menggabungkan fungsi dan sikap untuk menciptakan fungsi-sikap (bernama kreatif) (pemikiran introvert, perasaan ekstravert, dll). Kepribadian sadar masyarakat sebagian besar ditentukan oleh sikap-fungsi dominan dan sikap-fungsi bantu. Akhirnya, para psikolog sampai pada konsensus bahwa ada dua jenis orang: orang yang dua fungsi utamanya terdiri dari fungsi penilaian introvert dan fungsi persepsi ekstra, atau orang yang fungsi utamanya terdiri dari fungsi penilaian ekstra dan fungsi persepsi introvert . Jika Anda pernah mengikuti MBTI atau tes kepribadian serupa, surat terakhir memberi tahu Anda kategori mana yang Anda ikuti. Jika Anda seorang P, itu berarti Anda seorang hakim introvert / pengamat ekstra dan J adalah sebaliknya.

Masih bersamaku sejauh ini? Di sinilah saya mendapatkan apa yang saya maksud dengan kedua belah pihak menjadi gambar cermin satu sama lain. Tidak ada yang menyadarinya pada saat itu, tetapi mereka pada dasarnya membuat sketsa di mana fungsi terletak di otak. Memang, setiap fungsi-sikap Jung telah dipetakan ke lokasi yang kasar di otak. Ternyata, semua fungsi P (menilai introvert dan persepsi ekstra) berada di sisi kanan otak dan fungsi J berada di sisi kiri otak.

Setiap kali Anda mengatakan bahwa orang berotak kiri pandai dalam hal detail dan orang berotak kanan pandai "gambaran besar" (walaupun saya akan mengatakan "gambaran keseluruhan" akan lebih akurat), Anda berfokus pada sisi hal-hal yang bersifat ekstravert. . Jika orang berotak kiri mengelola orang berotak kanan, kidal akan ingin mengetahui semua detail tentang bagaimana orang benar akan melakukan pekerjaan mereka di muka dan di muka. Mereka ingin persyaratan yang ditetapkan dalam batu dan tenggat waktu yang sulit diputuskan sebelumnya. Orang yang benar hanya ingin ide yang sangat luas tentang apa yang perlu mereka lakukan sehingga mereka dapat mengisi rinciannya nanti.

Namun, perhatikan bahwa ini sepertinya bukan yang Anda alami. Tampaknya seolah-olah kode kidal mungkin tidak terlalu dipikirkan dengan baik sebelumnya dan memiliki beberapa masalah yang bisa dicegah oleh beberapa pemikiran ke depan. Ini karena ketika Anda membangun model abstrak dari hal-hal seperti kode di kepala Anda, Anda menggunakan fungsi introvert Anda , yang bekerja sebaliknya. Orang yang benar ingin membangun model itu di muka dan melakukannya sedemikian rupa sehingga memenuhi semua detail yang diperlukan atau dengan mudah dapat mengisi semua detail. Selain itu, mereka mungkin menjadi kaku dalam hal pendekatan terbaik untuk diambil (perhatikan bahwa Anda mengambil garis keras tentang bagaimana perasaan Anda tentang fitur C ++ yang lebih maju). Model kidal 'akan lebih ad hoc dan diisi saat mereka pergi.

Pengalaman saya adalah bahwa karena ini, kaum kidal akan menuduh kaum kanan melakukan rekayasa berlebihan segalanya sementara kaum kanan akan menuduh kaum kiri terlalu cepat dan kotor. Kedua belah pihak memiliki kebenaran untuk mereka, tetapi hanya ketika pendekatan itu diambil secara ekstrim. Inilah yang lucu: mereka mengambil pendekatan yang berlawanan untuk mencapai tujuan yang sama (yaitu, menyelesaikan sesuatu). Orang kanan ingin memiliki model mereka diputuskan di muka sehingga mereka dapat menghabiskan lebih sedikit waktu untuk mengimplementasikan hal itu dan karenanya menyelesaikan seluruh proyek lebih cepat. Orang kidal ingin menghabiskan lebih sedikit waktu untuk merancang sehingga mereka dapat menyelesaikan sesuatu lebih cepat.

Kebetulan, kedua sikap ini terbalik ketika datang ke hal-hal jenis manajemen proyek (menentukan jadwal, datang dengan persyaratan, dll). Ini dapat mengarah pada situasi yang benar-benar membingungkan di mana satu pihak menuduh yang lain terlalu kaku sementara yang lain mengklaim bahwa pihak lain tidak cukup merencanakan ke depan, dan kemudian argumen berikutnya membuat kedua pihak mengambil sikap yang berlawanan.

Apa yang dapat Anda lakukan tentang semua ini? Tidak ada yang lain selain menyadari perbedaan-perbedaan ini dan berusaha mengakomodasi pandangan pihak lain sebanyak mungkin. Namun masalahnya adalah bahwa ini berjalan dua arah. Anda dapat memahami dan mengakomodasi kidung sebanyak mungkin, tetapi itu tidak akan membuat banyak perbedaan kecuali mereka berusaha membalas budi. Ini selalu merupakan tantangan. Bukan karena orang kidal adalah orang brengsek dan ingin membuat hidup orang kanan sengsara, tetapi karena orang kidal dulu dominan di bidang pemrograman. Jika cara berpikir Anda digaungkan oleh hampir semua orang, Anda akan cukup yakin bahwa Anda juga benar.

Jason Baker
sumber
Sangat dalam, dan cukup lama untuk dibaca untuk menunda melakukan pekerjaan nyata untuk sementara waktu!
DarenW
6
Hal yang sangat menarik. Punya sumber?
Mason Wheeler
4

Percayalah pada intuisi Anda. Jika Anda seorang profesional yang baik, itu berarti terlepas dari "kecerdasan" Anda - kiri atau kanan - hal-hal yang dilakukan oleh otak kiri secara sadar, Anda dapat melakukannya secara intuitif. Pada akhirnya itu adalah hal yang sama. Sayangnya kita tidak mengendalikan alam bawah sadar kita, tetapi ia melakukan pekerjaan lebih cepat daripada kesadaran kita, jika itu berhasil sama sekali. Wawasan intuitif ini muncul entah dari mana persisnya hasil perhitungan bawah sadar.

Oh, dan Anda mungkin gagal, itu terlalu tidak bisa diandalkan. Tetapi karena Anda bertanya ...;)

Mojuba
sumber
2

Saya juga berpikir secara visual dan rincian tipografi membuat saya bingung.

Istilah Google: situs disleksia Inggris juga Gaya belajar: pemikiran spasial visual, pembelajaran menyeluruh hingga sebagian.

Konsep Pertama, Tips Setelah

  1. Orang berotak kanan membayangkan segala yang ada di 'mata pikiran' mereka.
  2. Ketika visualisasi Anda sesuai dengan kenyataan, pekerjaan itu mudah
  3. Pemikir berotak kanan yang tidak melakukan pemikiran berotak kiri dengan baik harus mengandalkan visualisasi
  4. Pembelajar berotak kanan mempelajari semuanya sekaligus 'aha!' kemudian masukkan detail ke dalam konstruksi mental. Mereka membutuhkan ikhtisar PERTAMA, lalu perincian.
  5. Tanpa ikhtisar untuk konteks, detail mengapung dalam ruang hampa, tidak terhubung di mata pikiran - sehingga menghafal dengan kekerasan harus digunakan. Sangat sulit untuk otak kanan.

TIPS yang membantu saya:

  • 1 Gunakan Warna untuk membedakan bagian sintaks
    1. tulis pseudocode dari kode yang Anda debug: ini melakukannya, lalu buka di sini dan beri label bagian kode yang cocok
    2. jika objek itu, katakanlah, hewan asli, mereka akan memiliki kebiasaan, dan perilaku yang diharapkan. Ini adalah cara berpikir yang lebih mudah divisualisasikan tentang kode.
    3. Saya membayangkan kode sebagai sebuah cerita dengan kodesemu sebagai catatan saya dan kemudian mengikuti proses sekitar.

  • Bagian apa yang harus diperbaiki selanjutnya?

  • Alur kerja saya

  • Siapa yang tinggal disana? (proses, koneksi, data, dll.)

  • apa yang harus mereka lakukan? (fungsi) OKE

    baik

  • kode di suatu tempat itu bisa sintaks / mengeja diperiksa OK salin dan tempel

  • Uji

    Hasil -> Berhasil? Ya, teruskan

    Tidak? Karakter harus berakting Hamlet di mana semua orang mati.

  • Kembali ke lingkungan-

  • meninggalkan sesuatu ?, kesalahan sysntax
  • membutuhkan koneksi
  • membutuhkan data
  • kode kesalahan memiliki arti?
  • ia bekerja di bagian kode yang lain?
  • Masalah versi?
  • itu seharusnya bekerja
pengguna87105
sumber