Apa yang bisa dipelajari oleh pengembang perangkat lunak senior yang mahir secara teknis untuk terus meningkat [ditutup]

15

Katakanlah Anda telah memprogram lebih dari 10 tahun. Anda tahu banyak bahasa, dengan sedikit bahasa di tingkat yang sangat rinci. Anda telah merancang arsitektur untuk solusi, mengerjakan dan mengirimkan proyek yang lebih besar. Anda telah mempelajari pola, praktik terbaik, pedoman pengkodean yang efektif, pengujian unit, multi-threading, dll.

Dan kemudian Anda perlahan-lahan mengembangkan perasaan bahwa sebagian besar buku yang Anda baca, memberikan informasi yang kurang dan kurang berharga per 100 halaman teks. Jadi mereka mulai memberikan hasil yang semakin berkurang. Anda masih belajar, tetapi Anda tidak lagi meningkat dengan pesat.

Mengapa belajar menjadi kurang produktif dibandingkan dengan sebelumnya?

Saat itu, itu digunakan untuk mengubah cara berpikir Anda, mengajarkan Anda hal-hal baru dan memperluas wawasan Anda yang kemudian meningkatkan profesi Anda saat ini, atau memungkinkan untuk menciptakan / mengelola / membangun sesuatu yang baru. Mengapa tidak lagi demikian?

Coder
sumber
9
Per faq , pertanyaan tentang apa yang harus Anda lakukan selanjutnya (proyek, buku, teknologi, atau bahasa) berada di luar topik. Saya bisa memahami sudut pandang Anda, tetapi Anda tidak mungkin tahu semua yang perlu diketahui terkait dengan pengembangan perangkat lunak. Masalah Anda adalah bahwa Anda bosan, mungkin jatuh dalam kebiasaan intelektual. Hal yang menginspirasi Anda untuk keluar dari kebiasaan itu sangat tergantung pada Anda , dan mungkin akan menjadi sesuatu yang sama sekali berbeda untuk orang lain. Tapi inilah jawabannya: keluarlah dari zona nyaman Anda . Pelajari tentang sistem tertanam, matematika, grafik, atau apa pun yang menarik minat Anda.
Caleb
2
Saya tidak melihat pertanyaan ini terbatas pada apa yang harus OP lakukan selanjutnya. Ini lebih tentang pendekatan umum yang tersedia untuk melanjutkan studi mereka. Mungkin ini bisa diutarakan dengan lebih baik, tetapi tidak berbunyi seperti "apa yang harus saya lakukan selanjutnya" kepada saya.
Frank
3
Yah, sejujurnya saya tidak tahu pertanyaan mana yang tidak di luar topik hari ini. Sebenarnya menjadi sulit untuk menemukan diskusi menarik di sini belakangan ini. Ok, b / b, kunci saja topiknya ...
Coder
2
Saya yakin pertanyaan itu dapat diedit untuk dibuka kembali. Sejauh yang saya tahu, masalah yang disajikan: "hasil yang menurun ... mempelajari pola, praktik terbaik, pedoman pengkodean yang efektif, pengujian unit, multi-threading ..." cukup sesuai topik untuk Programer
gnat
2
Anda akan mendapatkan pemahaman yang lebih lengkap tentang suatu subjek ketika Anda mencoba mengajarkannya kepada orang lain.
JeffO

Jawaban:

23

Pertama, meskipun cara pertanyaan Anda dirumuskan, tidak ada akhir untuk belajar, terutama di bidang kami, di mana hal-hal baru muncul lebih cepat daripada yang dapat Anda baca tentang mereka. Yang sedang berkata, ketika Anda ingin meningkatkan, ada kategori berikut yang akan saya pertimbangkan. Untuk keuntungan / ROI yang paling besar Anda harus memilih sesuatu dari area terlemah Anda tentu saja.

Pengetahuan dasar

Meskipun mengetahui bahasa pemrograman dan memiliki pengalaman praktis, orang sering memiliki (terutama belajar sendiri) di mana masalah dasar dasar dibiarkan tidak lengkap. Pikirkan tentang hal-hal seperti struktur data, algoritma, strategi cache, fungsi hash, ...

Perhatikan bahwa ini juga termasuk dasar-dasar bahasa pemrograman - mulai dari kompiler, teknik optimisasi dan sistem tipe, hingga teori kategori, monad, dan sejenisnya.

Jika Anda diajar dengan baik, seperti yang telah menempuh gelar tingkat universitas selama beberapa tahun, maka Anda cenderung sudah kuat dalam kategori ini (jauh dari selesai tentu saja, tetapi dasar yang kuat). Jika tidak, cobalah membaca beberapa buku di area ini untuk mencari tahu apakah ada sesuatu yang Anda bahkan tidak tahu hilang dalam repertoar Anda. Kategori ini adalah yang termudah untuk menaksir terlalu tinggi.

Pengetahuan Paradigmatic

Saya selalu terkejut ketika programmer muncul yang berpikir mereka tahu segalanya, tetapi sama sekali tidak tahu tentang selain paradigma utama. Jika Anda berpikir orientasi objek adalah akhirnya, ini adalah kategori Anda untuk perbaikan. Jika Anda berpikir pemrograman fungsional juga ada dan bahkan mungkin pernah mendengar pemrograman logika, maka itu masih pilihan yang baik. Ada lebih banyak paradigma di luar sana dan mempelajarinya memiliki efek mendalam yang memberi Anda sesuatu yang mirip dengan pandangan baru tentang dunia pemrograman.

Hanya saja jangan lupa: sering ada (agak filosofis dalam sifatnya) argumen tentang apa yang dapat dianggap sebagai paradigma atau tidak. Jangan dilacak oleh ini. Tujuan Anda harus memperluas wawasan Anda dan itu berarti mempelajari hal-hal ini, apakah orang lain menganggap X paradigma sendiri, atau tidak, tidak ada bedanya dengan itu.

Pengetahuan Spesialis

Yang termudah dari semuanya - dan paling tidak berguna pada saat bersamaan. Tentu saja, Anda dapat berkomitmen pada satu teknologi dan mengenal semua seluk beluknya, tetapi Anda harus siap membayar harganya. Teknologi semakin menua dan mereka melakukannya dalam kecepatan yang terus meningkat, yang membuatnya hampir menjadi jaminan bahwa waktu yang diinvestasikan di sini akan tidak berharga selama beberapa tahun ke depan.

Juga masalah pengembalian yang berkurang bersinar di sini. Pada dasarnya menjadi spesialis pada sesuatu berarti Anda harus menghabiskan berjam-jam untuk subjek yang sempit itu, dan karenanya, menurut definisi, Anda akan membutuhkan waktu lama untuk mempelajari sesuatu yang baru dan hal baru itu akan menjadi potongan puzzle kecil kecil yang tidak akan mengubah pandangan siapa pun tentang apa pun.

Pengetahuan Domain

Baik itu karena domain pekerjaan Anda, atau hanya berdasarkan minat pribadi Anda, tetapi menjadi ahli dalam ilmu komputer dan domain tertentu sangat berharga dan bermanfaat. Saya tidak berbicara tentang sisi-sisi CS di sini, seperti grafik komputer atau AI. Alih-alih perhatikan bahwa komputer telah menguasai kehidupan semua orang dan itu membuat setiap bidang lainnya tunduk pada komputer dan area yang bisa Anda masuki.

Yang ini jelas jatuh ke dalam kategori "di luar bidang Anda", namun itu bukan matematika "luar" yang tajam, melainkan bidang aplikasi. Pertimbangkan obat-obatan: Saya tidak menganjurkan Anda untuk menjadi dokter. Namun, mempelajari dasar-dasar kedokteran untuk menerapkan pengetahuan Anda yang ada tentang ilmu komputer pada masalah-masalah bidang itu memang bermanfaat. Ini berkisar dari teknik visualisasi, robotika, hingga sistem pakar dan manajemen data belaka untuk akuntansi / administrasi. Meskipun Anda telah melakukan semua itu sebelumnya, melakukannya di domain lain dapat berakhir menjadi pengalaman yang sama sekali baru.

Perlu diingat, bahwa ini adalah cara yang lebih radikal dalam mengubah arah Anda daripada kategori lainnya. Anda mungkin tidak memiliki kontak ke bidang itu dalam pekerjaan Anda sehari-hari, yang membuatnya sangat sulit untuk dilakukan. Bahkan bisa berarti berpindah pekerjaan. Plus, Anda akan memerlukan semacam sertifikasi tentang domain baru Anda - Anda adalah pemula yang lengkap untuk domain itu, dan Anda harus bersaing dengan lulusan dari studi interdisipliner, yang sudah memulai perjalanan mereka untuk menjadi ahli dalam niche tersebut.

Pengetahuan Tambahan

Seperti ditambahkan Mike Brown, ada juga bidang pengetahuan yang dalam beberapa hal menyertai pekerjaan Anda saat ini, tetapi tidak sepenuhnya diperlukan. Anda tidak perlu menjadi manajer proyek untuk belajar tentang manajemen proyek, tetapi seperti biasa, pengetahuan tambahan akan memberi Anda wawasan yang lebih besar tentang bagaimana pihak lain berdetak. Seseorang bahkan bisa menggeneralisasi hal ini sampai berfokus pada soft skill. Saya kira semua orang yang bekerja pada proyek nyata dengan orang lain tahu nilai ini.

jujur
sumber
+1, terutama untuk "Pengetahuan Domain" - itu adalah sesuatu yang paling tidak berfungsi untuk saya.
Doc Brown
1
Saya setuju 100% dengan apa yang Anda katakan. Saya tertarik pada pengetahuan dasar yang lebih dalam. Untuk efek yang saya terdaftar dalam kursus tentang kompiler sekarang. Apa yang tidak Anda sentuh adalah apa yang saya klasifikasikan sebagai pengetahuan tambahan: desain grafis, manajemen proyek, dll.
Michael Brown
+1 untuk paradigma - Saya telah melakukan OOP / prosedural selama ~ 10 tahun (dan mulai bosan) dan kemudian saya mulai belajar pemrograman fungsional dan mata saya terbuka ke dunia yang sama sekali baru.
paul
9

Saya pikir perangkat lunak selalu berkembang dan karena itu ada penekanan pada peningkatan yang konstan. Saya mengerti dari mana Anda berasal, saya merasa agak mirip baru-baru ini dan saya sekarang mengejar MCSM di SQL Server.

Pelajari bahasa baru berikutnya, atau kerangka kerja, atau apa yang saat ini "panas". Setiap tahun ada teknologi, kerangka kerja atau bahasa yang keluar, atau mencapai massa kritis sehingga menjadi kata yang populer. Saya bisa memikirkan beberapa dari ini selama beberapa tahun terakhir: node.js, Ruby, jQuery. Ini juga kemungkinan akan memengaruhi cara berpikir Anda untuk platform lain, misalnya, lihat apa yang ROR lakukan pada Java dengan Grails.

Selalu ada ruang untuk perbaikan. Saya pikir sangat tidak mungkin bahwa Anda bisa menjadi ahli dalam segala hal, dan saya banyak membaca dan saya selalu belajar. Saya setuju dengan apa yang Anda katakan tentang belajar kurang dan kurang per 100 halaman, tetapi ini diharapkan ketika Anda seorang ahli materi pelajaran.

Dalam hal apa yang dapat Anda lakukan, berikut adalah beberapa saran:

  1. Ikuti perkembangan komunitas dan apa yang sedang "dilakukan orang". Pelajari tumpukan baru, setidaknya sehingga Anda memiliki cukup untuk merekomendasikan mereka di mana sesuai

  2. Berpartisipasilah dalam situs tanya jawab seperti ini, di mana Anda dapat memberikan pengetahuan Anda pada orang lain. Jika Anda meluangkan waktu untuk membaca kontribusi orang lain, kemungkinan Anda akan belajar sesuatu, dan paling tidak Anda akan melihat perspektif orang lain.

  3. Pilih hobi yang terkait dengan pekerjaan Anda. Ada banyak hobi dengan cross over, pikirkan AI, lego mindstorms, RaspPi, dll.

  4. Selain berusaha meningkatkan lebar pengetahuan Anda, lihat juga untuk meningkatkan kedalamannya. Misalnya, pelajari cara kerja EF di balik sampul, sehingga Anda dapat mendiagnosis kasus sudut aneh itu daripada hanya menggunakan kerangka kerja.

  5. Kejar sertifikasi tingkat atas hanya untuk membuktikan bahwa Anda mengetahui barang-barang Anda

Secara pribadi, saya akan memberi tahu Anda apa yang membuka pikiran saya saat ini. Saya membaca 97 Hal-Hal Yang Harus Diketahui Setiap Arsitek Perangkat Lunak dan saya hanya memahaminya sebagian tetapi itu memunculkan banyak nasihat bijak. Buku ini gratis untuk dibaca online di tautan yang saya berikan.

Dalam hal hobi yang akhirnya saya ambil, saya masuk ke diagnosa kendaraan (dengan komputer, jelas) yang membuat saya sepenuhnya merawat mobil saya sendiri. Saya sebenarnya sangat menikmati waktu yang saya habiskan bekerja dengan tangan saya.

Sam
sumber
Lucu, saya kenal salah satu penulis untuk 97 Things;)
Michael Brown
Ini buku yang bagus.
Sam
Sama-sama. Bagus bukan.
Sam
1

Setelah titik tertentu, Anda telah cukup belajar tentang topik tertentu yang membuat Anda nyaman mengambil pengetahuan baru secara ad hoc. Ketika Anda merasa bahwa tidak banyak lagi yang bisa dipelajari tentang bidang utama Anda, inilah saatnya untuk mulai mendapatkan pengetahuan tambahan yang melengkapi pengetahuan utama Anda.

Bagi saya, saya terjun ke UX dan desain grafis karena saya merasa itu akan membuat saya lebih baik sebagai pengembang untuk menyediakan tidak hanya struktur kode yang elegan tetapi juga antarmuka yang elegan untuk pengguna akhir.

Topik lain yang dapat Anda dekati meliputi manajemen proyek, analisis bisnis, administrasi sistem, dan peningkatan proses perangkat lunak. Jika Anda menemukan diri Anda bekerja di domain tertentu, mungkin masuk akal untuk menyelam lebih dalam ke domain itu. Sebagai contoh, saya telah bekerja keras di sektor jasa keuangan belakangan ini. Saya telah mendaftar untuk kursus Coursera seputar pemodelan keuangan dan sejenisnya yang akan membantu saya berbicara dengan pelanggan saya tentang persyaratan mereka.

Selalu ada lagi yang harus dipelajari, hanya butuh pemikiran di luar kotak.

Michael Brown
sumber
0

Ada dua bagian dari pertanyaan ini: mengapa lebih sulit untuk dipelajari, dan apa yang dapat Anda lakukan?

Bagian pertama cukup mudah - topik yang lebih maju lebih sulit. Meskipun sulit mempelajari cara memprogram, cukup sulit untuk mempelajari cara mendesain program dengan baik, dan bahkan lebih sulit untuk mempelajari cara mendesain aplikasi besar. Faktanya adalah bahwa topik lanjutan lebih sulit, atau kalau tidak mereka tidak akan maju. Anda harus menghabiskan lebih banyak waktu untuk mempelajarinya; lebih banyak waktu berlatih untuk menguasainya.

Adapun apa yang dapat Anda lakukan, Anda tampaknya berfokus pada aspek teknis sebagai insinyur perangkat lunak senior. Anda dapat melakukan lebih banyak hal untuk membantu tim Anda membuat perangkat lunak daripada mempelajari bahasa dan kerangka kerja. Ketrampilan lunak, seperti membimbing pengembang lain, persyaratan negosiasi, manajemen proyek, desain program, visi komunikasi, norma-norma tim pelaksana ... Semua hal penting yang diperlukan untuk membuat tim pengembang efektif membuat perangkat lunak, bukan hanya Anda.

Telastyn
sumber
-3

Setiap kali saya mengunjungi situs Lambda The Ultimate , saya benar-benar tidak / tidak bisa berpikir seperti saya tahu-semua di bidang ilmu komputer.

LtU akan memberi Anda titik awal yang baik untuk paradigma dan pengetahuan teoretis yang tersisa untuk dipelajari.

"Semakin kamu tahu, semakin sedikit yang kamu tahu."

Stephane Rolland
sumber
1
bagaimana hal itu menjawab pertanyaan yang diajukan, "Mengapa belajar menjadi kurang produktif dibandingkan dengan bagaimana sebelumnya?"
nyamuk
Karena ketika saya pergi ke sana, ada artikel dengan sekitar 90% hal baru yang harus saya pelajari. Yang justru dikeluhkan OP: Rasio hal yang dipelajari oleh jumlah baris yang dibaca menjadi terlalu rendah dalam kasusnya. Apakah kamu tidak tahu situs ini juga?
Stephane Rolland
@gnat, dan Anda salah mengira pertanyaannya , yang berjudul: "Apa yang bisa dipelajari oleh pengembang perangkat lunak senior yang mahir secara teknis untuk terus meningkat"?
Stephane Rolland
apakah Anda membaca konten pertanyaan setelah judul?
nyamuk
@gnat Ya tentu saja, saya telah membaca pertanyaannya: ini memang pernyataan jika OP hanya bertanya mengapa : setelah 10 tahun seorang insinyur perangkat lunak senior membaca buku yang tidak lagi mengubah cakrawala karena seorang senior tahu banyak. Ya saya sudah baca itu. Saya telah tersenyum. Saya ulangi diri saya sendiri, "Semakin Anda tahu, semakin sedikit Anda tahu seberapa sedikit yang Anda ketahui."
Stephane Rolland