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!
Jawaban:
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:
Ini adalah keterampilan yang sangat penting bagi pengembang mana pun, dan sayangnya Anda tidak mungkin mendapatkannya di ruang kelas.
sumber
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.
sumber
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.
sumber
Menurut pendapat saya beberapa hal terpenting yang tidak dipelajari (atau dipelajari dengan benar) di sekolah adalah:
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.
sumber
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
most
teman 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.
sumber
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.
sumber
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.
sumber
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.
sumber
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
sumber
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.
sumber
sumber
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.
sumber