Keterampilan apa yang penting untuk pemrograman profesional yang tidak umum diajarkan di sekolah? [Tutup]

14

Saya jurusan ilmu komputer tahun pertama. Saya pergi ke bursa kerja, membagikan resume, sangat mengejutkan saya, saya mendapat wawancara dan akhirnya magang sebagai pengembang.

Saya menjelaskan kepada pewawancara (yang akan menjadi bos saya) bahwa saya baru tahun pertama dan tidak memiliki banyak pengalaman pemrograman. Dia hanya mengatakan kepada saya bahwa karena saya memiliki latar belakang yang kuat dalam matematika (saya hampir selesai dengan BA saya dalam matematika, ditambah saya memiliki beberapa program sarjana di bawah ikat pinggang saya), dia yakin saya akan baik-baik saja.

Saya melakukannya dengan baik di semua kursus pemrograman tetapi saya masih merasa dirugikan. Saat ini, saya benar-benar hanya ingin melakukan pekerjaan yang baik saat ini dimulai. Pekerjaan itu akan menggunakan sebagian besar C #, tetapi selain jelas belajar beberapa C #, keterampilan apa yang Anda harap bisa Anda pelajari sebelum Anda menjadi programmer sejati?

Setiap saran sangat dihargai, tetapi jika Anda memiliki buku dalam pikiran tolong katakan. Terima kasih!

Eric
sumber
8
pertanyaan ini telah ditanyakan berkali-kali di situs ini dengan berbagai cara. silakan cari dulu dan kemudian tanyakan. lihat di FAQ; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog
3
Saya memang mencari, dan saya melihat kedua pertanyaan itu. Tapi saya tidak peduli dengan desain pembelajaran atau pengembangan web. Saya prihatin dengan apa yang menurut para programmer harus dipelajari di sekolah. Pertanyaan-pertanyaan itu memang memiliki beberapa nasihat bagus, tetapi tidak cukup apa yang saya cari. Terima kasih
Eric
+1 Satu keterampilan yang saya harap dapat saya kuasai sebelum menjadi seorang programmer penuh waktu adalah keterampilan matematika yang kuat karena keterampilan matematika bisa dibilang keterampilan yang paling penting untuk dimiliki karena melatih pikiran untuk memecahkan masalah dan untuk mempelajari konsep-konsep baru dan sebagai programmer, yang sebagian besar adalah apa yang akan saya lakukan setiap hari.
Anthony
3
Alur kerja. Dan menyadari kode itu bukan kepingan salju unicorn-unik. Terapkan Prinsip Ketertinggalan saat merancang. Pikirkan sebelum Anda melakukannya. Mengelola kompleksitas menjadi aspek yang sangat penting.
sleeplessnerd
1
Saya sebenarnya tidak terlalu suka bekerja dengan orang-orang dengan keterampilan matematika yang kuat. Mereka mengubah segalanya menjadi formula matematika alih-alih menerapkan prinsip-prinsip rekayasa perangkat lunak. Perangkat lunak BUKAN matematika. Sangat penting bagi Anda untuk menulis kode sehingga mudah dimengerti.
Rob K

Jawaban:

21

Di sekolah, Anda belajar tentang menulis kode. Apa yang tidak Anda pelajari adalah sisa pengembangan perangkat lunak. Hal-hal utama yang tidak pernah saya pelajari di sekolah adalah:

  • bekerja sebagai bagian dari tim pengembangan
  • menggunakan kontrol versi
  • menggunakan pelacak bug

Ini adalah keterampilan yang sangat penting bagi pengembang mana pun, dan sayangnya Anda tidak mungkin mendapatkannya di ruang kelas.

Mason Wheeler
sumber
4
Bekerja sebagai bagian dari tim pengembangan adalah seni yang halus dan kompleks. Saya tidak mengerti mengapa kontrol versi dan pelacakan bug selalu dibingkai sebagai beberapa rintangan utama bagi pengembang baru. Mereka tentu saja alat yang penting tetapi Anda mengarahkan orang baru ke halaman manual, buku O'Reilly, atau tutorial online dan mereka dapat mengambil roti dan penggunaan mentega dalam hitungan jam. Mengapa Anda membuang waktu di kelas untuk hal seperti itu?
Charles E. Grant
1
@ CharlesE.Grant Version control mirip dengan pemrograman di mana Anda bisa mendapatkan dasar-dasarnya dalam waktu yang relatif singkat, tetapi butuh pengalaman untuk menggunakannya secara efektif. Dan DVCS seperti git dan Mercurial lebih memahami daripada CVCS seperti svn.
Izkata
8
Saya tidak pernah memiliki kelas untuk mempertahankan kode yang sudah ada (yang merupakan bagian utama dari bekerja sebagai bagian dari tim pengembangan) dan pengalaman kelas saya tentang cara menguji kode sangat minim.
Velociraptors
1
@ CharlesE.Grant: Saya telah mengajar kursus tingkat pascasarjana dalam pemrograman dan topik terkait selama beberapa tahun. Bahkan mahasiswa pascasarjana memiliki kesulitan memahami mengapa mereka harus menggunakan sistem kontrol revisi apa pun. Dan ketika mereka dengan enggan mulai menggunakannya, mereka tampaknya menjadi sangat bingung dengan sangat cepat. +1 ke Mason karena mengangkatnya sebagai topik penting yang tidak dipelajari.
Peter K.
1
+1 +1 +1, satu untuk setiap poin. Sangat bodoh sampai mereka tidak mengajarimu hal-hal ini ... atau setidaknya mencoba untuk mengajarimu.
Radu Murzea
20

Saya berharap saya tahu sebelumnya dalam karir saya bahwa sebagai seorang pengembang, saya memiliki peran yang sangat penting dalam bisnis ini . Saya bukan hanya kode monyet.

Sebagai seorang pengembang, Anda memiliki andil besar dalam bagian-bagian bisnis yang terkait dengan perangkat lunak yang sedang Anda kerjakan.

Jika perusahaan Anda tidak menulis tes untuk kode mereka, mulailah menulis tes sekarang.

Jika mereka tidak melacak bug, cari pelacak bug yang sesuai sekarang.

Jika bos Anda ingin Anda segera mulai mengerjakan animasi mewah untuk splash screen aplikasi spreadsheet Anda - tetapi Anda masih memiliki lusinan bug untuk diperbaiki dan beberapa fitur penting yang belum selesai sebelum batas waktu rilis pelanggan berikutnya - berbincang-bincang tentang memprioritaskan pekerjaan dengan benar .

Bahkan jika Anda hanya "karyawan biasa," bertindak seperti konsultan adalah cara yang bagus untuk memisahkan diri Anda dari pengembang lain yang hanya menulis kode dan tidak bertindak seolah-olah mereka memiliki kepentingan pribadi dalam bisnis.

Mark Rushakoff
sumber
9

Sekolah saya tidak pernah mengajari saya cara memecahkan masalah. Mereka mengajari saya mekanisme pengkodean, tetapi untuk dapat mempelajari masalah, memahaminya, dan menemukan solusi adalah sesuatu yang tidak mereka ajarkan. Itu membutuhkan kesabaran, ketelitian, dan intuisi di samping pemahaman bahasa pemrograman.

Mereka juga tidak mengajarkan tentang kerja tim, tentang kontrol versi, dan tentang pentingnya menulis kode yang mudah dipelihara. Mereka juga tidak mengajarkan banyak tentang cara menguji perangkat lunak. Mereka mungkin telah menyentuh pada pengujian unit, tetapi mereka tidak mempelajari konsep pengujian penerimaan, pengujian regresi, dll.

Penafian: Saya kuliah di tahun 80-an. Namun, saya melihat bukti ini dengan orang-orang yang saya pekerjakan hari ini - lulusan baru yang memiliki sedikit pengetahuan tentang dunia pemrograman yang sebenarnya: kontrol versi, pengujian, pengkodean bersih, keterampilan debugging, dll.

Bryan Oakley
sumber
+1 untuk bagian pengujian. Di universitas saya, mereka juga tidak mengajarkannya. Saya punya 1 kelas (ya: satu) di mana guru menyebutkan pengujian unit ... selama sekitar 3 menit. Itu dia.
Radu Murzea
Saya tahu ini adalah respons yang terlambat tetapi itu adalah salah satu hal yang membuat gelar matematika saya menarik bagi atasan saya. Pandangan ini jelas dibagikan di antara pengusaha juga.
Eric
Setuju, di banyak sekolah, algoritma (alias "pemecahan masalah") tidak diajarkan dengan benar, atau tidak diajarkan sama sekali, atau tidak mengajarkan bagaimana menerapkannya dengan bahasa pemrograman, bahkan jika saya harus pl "agnostik".
umlcat
Hmmmm .... jawaban Anda tidak bisa lebih dari apa yang saya alami. Inti dari sekolah adalah untuk memberikan latar belakang sehingga Anda dapat secara efektif mempelajari masalah, memahaminya dan menghasilkan solusi. Lulusan baru mungkin tidak "baik" dalam hal itu baru lulus dari sekolah tetapi mereka tentu harus dilatih dan mampu melakukannya. Di sekolah saya, mereka sama sekali tidak mengajar pemrograman. Anda diharapkan untuk mempelajari cara memprogram (sendiri) sambil mempelajari informasi yang ingin diajarkan kursus. Jadi dari mana Anda mendapatkannya, mereka hanya mengajarkan "mekanisme pengkodean" dari saya ...
Dunk
... Di sekolah yang layak, Anda tidak mendapatkan kredit hanya karena belajar cara membuat kode. Jika Anda merasa kesulitan untuk menggunakan kontrol versi maka Anda memiliki masalah yang jauh lebih serius sehingga tidak ada sekolah yang dapat membantu. Ketika Anda menemukan cara definitif untuk menulis kode yang mudah dipelihara, maka tulislah sebuah buku dan menjadi kaya. Belum ada yang memecahkan masalah itu. Anda harus melewatkan bagian-bagian di sekolah tempat Anda harus menyerahkan program Anda untuk diuji. Tes penerimaan / regresi khusus untuk industri dan lebih baik diajarkan di tempat kerja dengan cara perusahaan daripada di sekolah.
Dunk
7

Menurut pendapat saya beberapa hal terpenting yang tidak dipelajari (atau dipelajari dengan benar) di sekolah adalah:

  • Cara menggunakan dan IDE dengan benar; menggunakan kekuatan penuh dari IDE modern memberikan peningkatan besar dalam produktivitas: refactoring otomatis, navigasi kode, integrasi VCS, analisis kode, penyelesaian kode dll.
  • Cara menggunakan debugger dengan benar: debugging jarak jauh, debugging aplikasi multi-utas, evaluasi cepat dll.
  • Perbaikan dan pemeliharaan bug; di universitas mereka tidak mengajari Anda apa pun tentang ini, tetapi di industri cukup umum untuk memperbaiki bug.
  • Cara bekerja dalam tim besar dan proyek besar; pada dasarnya di universitas, proyeknya agak kecil, dibandingkan dengan proyek industri besar.
  • Cara menulis kode yang baik dan cara memberi aksen pada keterbacaan; ini dilengkapi dengan pengalaman, tetapi ada beberapa buku yang mengajarkan Anda dasar-dasar (Kode Lengkap, Kode Bersih dll).
  • Cara menggunakan kerangka kerja dengan kekuatan penuh, menggunakan kustomisasi itu; di universitas mungkin Anda belajar bagaimana menggunakan beberapa kerangka kerja pada beberapa skenario yang sangat mendasar; dalam industri Anda akan mencapai kasus sudut.
  • Bagaimana memahami dan menulis kode setelah spesifikasi; Anda mungkin akan belajar cara menulis spesifikasi tetapi sekarang cara membacanya dan bagaimana menafsirkannya

VCS, sistem pelacakan bug, alat pembangunan dll. Adalah alat yang wajib Anda pelajari untuk dapat bekerja dengan tim; mereka tidak memerlukan banyak waktu untuk dipelajari di tingkat dasar, dan cukup mudah setelah itu (setidaknya di awal); daftar di atas berisi kehalusan yang jika diketahui, meningkatkan produktivitas Anda.

m3th0dman
sumber
alias "Pemrograman" tidak hanya mengetahui bahasa pemrograman, ada "lingkungan", "ekosistem", "kerangka kerja" ...
umlcat
4

Hal terbesar yang saya lihat hilang dari lulusan baru adalah pemahaman yang baik tentang kontrol versi.

Jika Anda memiliki pengalaman dalam pengembangan perangkat lunak open source menggunakan repositori kode sumber (seperti GitHub ), Anda selangkah lebih maju dari mostteman sekelas Anda.

Yang kedua adalah pemahaman tentang kompleksitas ( big O). Kebanyakan orang dari perguruan tinggi telah mendengar tentang hal itu, tetapi belum mengembangkan perangkat lunak yang nyata di mana ia bermain dan dengan demikian tidak memahami pentingnya yang sebenarnya.

Ketika set data Anda begitu besar sehingga brute-force tidak akan pernah memotongnya dan memahami teknik-teknik lain berguna dan bisa menebak kapan brute force akan baik-baik saja untuk situasi tersebut, adalah sesuatu yang Anda kembangkan dengan pengalaman dan membuat kesalahan.

Martin York
sumber
1
Saya pikir kurangnya pendidikan versi kontrol mulai berubah. Kontrol versi sangat ditekankan di sekolah saya.
Kelinci Southpaw
@SouthpawHare: Saya tidak mengatakan itu tidak ada, mereka bahkan mengajarkannya kembali pada hari saya. Hanya saja orang-orang yang keluar dari Universitas dengan pengalaman ini masih merupakan minoritas. Dan karena itu orang yang memilikinya lebih berharga. Saya tidak setuju bahwa itu telah banyak berubah dalam 20 tahun terakhir.
Martin York
3

Cara debug dengan baik, terutama menggunakan debugger dan mengambil pendekatan yang tepat untuk mengatasi bug, yaitu mencari tahu apa yang menyebabkannya, mencari tahu mengapa itu menyebabkannya dan memahami mengapa solusi Anda memperbaikinya daripada sekadar mencoba barang dan berharap.

Kebanyakan lulusan ilmu komputer sangat buruk dalam debugging, dan - sebagai hasilnya - membutuhkan waktu lebih lama untuk memperbaiki hal-hal yang diperlukan dan membuat lebih banyak bug saat melakukannya.

Hal-hal lain seperti kontrol versi, pelacakan bug, dan sebagainya patut disebutkan, tetapi menurut saya kurangnya pendekatan yang masuk akal untuk debugging adalah masalah yang jauh lebih besar dan membutuhkan lebih banyak pembelajaran.

Jack Aidley
sumber
2

apa keahlian yang Anda harap bisa Anda pelajari sebelum menjadi programmer sejati?

Dalam pengalaman saya, sekolah saya tidak pernah mengajari saya cara memecahkan masalah.

Dalam pengalaman saya pemrograman adalah tentang menyelesaikan masalah. Di sekolah saya mereka hanya memeriksa apakah Anda dapat menulis program tanpa kesalahan sintaksis. Apa yang sebenarnya dibutuhkan tidak diberikan sebagai input. Sintaksnya hanya sesuatu yang bisa Anda cari dari buku mana pun jika diperlukan. Tetapi kemampuan untuk memecahkan masalah tidak dapat dicapai dari mana pun kecuali bahwa Anda berlatih dengan baik dan melatih diri Anda untuk itu.

Biarkan apa pun jenisnya, coba selesaikan sebanyak mungkin pertanyaan sehingga Anda membangun kepercayaan diri. Cobalah melakukannya dengan semangat dalam pikiran Anda, dan Anda pasti akan berhasil.

Abijith Kp
sumber
2

Luangkan waktu untuk mempelajari beberapa pola desain umum: pabrik, singleton, adaptor, perintah dan pengamat (perguruan tinggi saya tidak mengajar mereka).

Jika perusahaan menggunakan metodologi Agile untuk pengembangan perangkat lunak, akan sangat berharga untuk memahaminya.

pengguna86834
sumber
2

Banyak keterampilan yang Anda perlukan sebagai programmer profesional hampir tidak mungkin untuk masing-masing dalam pengaturan universitas / akademik.

Mereka hanya dapat berasal dari pengalaman bekerja langsung di lapangan.

  • Pelajari cara berkolaborasi dan berkomunikasi dengan orang-orang di luar "profesi" Anda, seperti desainer grafis, desainer produk, manajer, dll.

  • Memahami bahwa pekerjaan Anda bukanlah menulis kode, tetapi menghidupkan produk. Lebih mudah diucapkan daripada dilakukan.

  • Mengetahui bagaimana menyeimbangkan praktik pengkodean yang baik dengan pertimbangan praktis. Memperoleh kemampuan untuk menilai ketika kode "cukup baik", "lebih dari direkayasa", atau "perlu refactoring".

  • Belajar untuk mengatasi kelemahan dan rasa tidak aman Anda sendiri. Memperoleh kemampuan untuk menahan kritik. Melepaskan ego Anda. Belajar apa artinya mengambil tanggung jawab pribadi, dan kemudian mengambilnya.

Sangat mudah untuk membaca tentang semua ini. Ini hal yang sama sekali berbeda untuk benar-benar mempraktikkannya. Satu-satunya cara adalah dengan melakukannya. Anda akan digigit berkali-kali, dan mungkin akan sakit, tetapi Anda akan keluar dari itu lebih kuat dan lebih baik.

Bacaan yang relevan: Pola Magang

Hasen
sumber
1

Itu semua tergantung sekolah. Di kampus saya, kami memiliki banyak proyek praktis. Cukup sering dalam tim dan menggunakan berbagai kontrol sumber. Jadi saya pikir beberapa sekolah memang fokus pada hal itu.

Tetapi satu hal yang tidak diajarkan sekolah: perincian. Cukup sering ketika sekolah mengajarkan beberapa teknologi atau praktik (seperti pengembangan web, pengembangan JAVA UI, database canggih), mereka hanya akan menggaruk permukaan dan tidak pernah merinci, yang akan diperlukan untuk menggunakan teknologi atau praktik ini dalam bisnis dunia nyata. Anda akan mendapatkan gambaran umum tentang cara-cara yang mungkin bagaimana menyelesaikan masalah Anda, tetapi Anda perlu mempelajari sendiri detail yang diperlukan.

Hanya waktu ketika sekolah mengajarkan sesuatu ke detail adalah ketika ada latar belakang matematika atau teori yang kuat di balik sesuatu. Hal-hal seperti bahasa formal atau database SQL seringkali merupakan bagian inti dari kurikulum sekolah, karena mereka dibangun berdasarkan matematika dan banyak digunakan dalam ilmu komputer atau teknik.

Euforia
sumber
1
  • persyaratan - salah dan istirahat sebagian besar adalah pemborosan
  • prioritas (fitur di mana rilis)
  • membuat atau menggunakan di luar kotak (beli / freeware)
  • kerja tim
  • manajemen proyek - persyaratan, kualitas (sampel data dalam produk, kasus uji, cara menguji, cakupan sebelum kode Anda, ada lebih banyak seperti biaya tetapi tidak relevan. baca buku PMI
  • alat komunikasi (surat, rapat: perencana kalender)
  • manajemen kode sumber
tgkprog
sumber
0

Saya berharap saya akan memutuskan dengan cara yang lebih awal dalam permainan apakah saya ingin menjadi programmer keseluruhan, mempelajari banyak hal, bahasa, database, dan platform yang berbeda, dan akhirnya menjadi pengembang web, atau haruskah saya hanya mengkhususkan diri dalam satu CMS, atau bahkan hanya mengkhususkan diri dalam Photoshop, sebagai spesialis, keterampilan Anda akan sama berharganya dan menguntungkan kemudian benar-benar mengetahui apa yang seharusnya diketahui oleh programmer. Dengan kata lain, jika Anda hanya perlu menghasilkan banyak uang, khususkan dalam SATU HAL. Jika Anda menyukai komputer dan senang memecahkan masalah, maka jadilah seorang programmer.

[merefleksikan kembali dan setelah belajar seperti 4 atau 5 'kerangka kerja' javascript yang berbeda sebelum JQuery benar-benar keluar dengan kuat, Mendapatkan sertifikasi di JAWA dan tidak pernah mendapatkan posisi java, dan setelah bekerja di berbagai platform; AS400- rpg,> .NET - c #, dan PHP, sebelum berharap saya baru saja menguasai photoshop dan menghasilkan uang yang sama tanpa harus memperbaiki bug atau menulis perangkat lunak. ]

Maksud saya ada kepuasan tertentu dalam mengetahui berbagai topik, tetapi kepuasan itu terpincang-pincang ketika Anda melihat seseorang yang hanya tahu photoshop menguangkan gaji yang sama.

Eric
sumber
2
Ya, tetapi spesialis semacam itu tidak akan pernah membuka toko sendiri. Jika impian Anda adalah menjadi CEO dari startup Anda sendiri di masa depan, Anda akan membutuhkan sejumlah besar keterampilan.
Davor Ždralo