Panduan survival Kejuruteraan Perisian

Sumber yang akan membantu anda pada permulaan kerjaya anda

Beberapa tahun pertama karier saya adalah masa pembelajaran sengit.

Saya mengalami realiti sebagai seorang jurutera perisian dan terpaksa memperoleh banyak kemahiran yang saya tidak tahu yang saya perlukan. Melihat ke belakang, pastinya senang untuk mengetahui perkara yang saya tahu sekarang.

Oleh itu, saya menulis panduan ini untuk membantu orang lain berdasarkan pengalaman pemaju yang saya bimbing dalam beberapa tahun pertama mereka sebagai profesional, dan orang-orang dari diri saya dan beberapa rakan sekerja saya.

Saya akan menampung:

  • Bagaimana untuk membuat yang terbaik daripada temu bual,
  • Bagaimana untuk bertahan (dan berkembang maju) dalam kerja anda sebagai jurutera perisian,
  • Dan apa sumber yang perlu dipertimbangkan ketika mempertimbangkan peningkatan berterusan.

Temu bual

Semasa anda memulakan kerjaya dalam Kejuruteraan Perisian, anda perlu menghadapi satu fakta yang tidak dapat dipertikaikan. Temubual menghisap.

Mereka boleh mengerikan untuk semua orang yang terlibat. Setelah menjadi pewawancara dan pewawancara, saya dapat membuktikan bahawa wawancara adalah masa tenggelam yang besar, sangat tertekan dan penunjuk prestasi kerja masa depan yang sangat buruk. Walau bagaimanapun, mereka adalah kejahatan yang perlu bahawa anda dan reseum anda lebih baik bersedia.

Bersedia untuk Pertempuran

Jika anda sedang mempertimbangkan kerjaya dalam Kejuruteraan Perisian, pastikan anda mempelajari beberapa soalan wawancara pengaturcaraan yang paling biasa, seperti 'FizzBuzz':

"Tulis program yang mencetak nombor dari 1 hingga 100. Tetapi untuk gandaan tiga 'Fizz' cetakan bukan nombor dan untuk gandaan lima 'Buzz' cetak. Untuk nombor yang terdiri daripada tiga dan lima cetakan 'FizzBuzz'. "
(Coding Horror)

Bunyi cukup mudah, kan?

Well, kebanyakan orang yang ditemuduga gagal ujian mudah ini, apalagi varian yang lebih kompleks.

Saya secara peribadi melihat banyak calon untuk jawatan kanan gagal ujian ini sementara mempunyai akses internet penuh. Jadi pastikan jika bahasa pengaturcaraan disenaraikan di résumé anda, anda tahu bagaimana melakukan sekurang-kurangnya FizzBuzz di dalamnya. Jika tidak, anda hanya membuang masa semua orang, termasuk anda.

Sudah tentu, anda perlu mengetahui lebih daripada sekadar FizzBuzz untuk bertahan dengan temuduga anda. Anda juga perlu memastikan bahawa anda tahu:

  • Struktur dan algoritma data asas: seperti senarai berkaitan, tatasusunan, pokok dan sebagainya.
  • "Gotchas" biasa dalam bahasa anda pilihan, seperti sama ada rentetan tidak berubah, dan bagaimana ingatan diuruskan.
  • Konsep Pemrograman Berorientasi Objek seperti kelas berbanding objek, dan warisan.

Pada awal kerjaya anda, anda perlu bersinar mengenai pelbagai soalan ini, kerana anda tidak mempunyai pengalaman untuk membuktikan bahawa anda akan menjadi baik di tempat kerja. Terdapat dua sumber yang selalu saya cadangkan ketika bersiap sedia untuk wawancara:

  • "Memecahkan Wawancara Pengkodean", sebuah buku yang hebat yang merangkumi banyak masalah pengkodean dan penyelesaian mereka, serta ringkasan tentang apa yang perlu anda ketahui untuk menyelesaikannya
  • CodeWars, sebuah laman web yang mempunyai banyak masalah pengkodan yang boleh anda selesaikan dalam penyemak imbas menggunakan pelbagai bahasa pilihan. Bahagian yang paling berguna adalah melihat bagaimana pengguna lain menyelesaikan masalah yang sama. Anda akan dapat melihat pendekatan yang berbeza untuk masalah yang sama dan mempelajari alat baru dalam bahasa pilihan anda.

Berikan diri anda kelebihan tambahan

Terdapat beberapa perkara yang boleh anda lakukan yang akan memberi anda sesuatu yang sedikit tambahan.

Pertama, belajar untuk menyampaikan pengalaman anda. Anda harus mempunyai padang lif yang meringkaskan resume anda menjadi naratif yang kaku dan menarik.

Di samping itu, tahu résumé anda sendiri! Kedengarannya bodoh, tetapi saya telah melihat banyak peraduan untuk perjuangan untuk menerangkan item tertentu pada resume mereka. Anda sepatutnya dapat menjawab soalan mengenai sebarang pengalaman yang anda nyatakan pada resume anda dan terangkan bagaimana ia membuat anda calon yang lebih baik untuk pekerjaan itu.

Seterusnya, dapatkan contoh kod untuk dipaparkan di GitHub (atau repositori awam lain).

Melihat adalah kepercayaan, dan penemubual yang dapat melihat kod anda akan melakukan keajaiban. Plus, ia menunjukkan anda mempunyai pemahaman tentang sistem kawalan versi.

Sampel kod tidak perlu terlalu rumit, tetapi mereka perlu bersih dan menunjukkan amalan pengkodan yang baik. Ini adalah peluang anda untuk menunjukkan bagaimana anda kod tanpa tekanan masa temuduga pengekodan.

Sebaik sahaja anda telah melakukan semua perkara di atas, sudah tiba masanya untuk mempertimbangkan untuk mengambil bahagian dalam projek sumber terbuka. Ia akan menunjukkan bahawa anda boleh bekerja di pangkalan kod yang sedia ada dan bekerjasama dengan pengaturcara lain.

Ini akan menjadi yang paling dekat dengan pengaturcaraan anda dalam persekitaran industri tanpa benar-benar berada dalam persekitaran industri. Ini adalah perkara yang paling sukar dan memakan masa setakat ini, jadi simpannya sehingga anda telah menyelesaikan buah gulung rendah yang saya telah dibahas di atas.

Wawancara pewawancara anda

Dalam tergesa-gesa dan tekanan kerja memburu, ramai calon lupa bahawa wawancara adalah jalan dua hala. Memandangkan syarikat sedang berusaha untuk mengetahui sama ada anda orang yang tepat untuk pekerjaan itu, anda perlu memikirkan jika syarikat itu sesuai untuk anda.

Pastikan anda dapat menanya beberapa soalan di bawah ini, walaupun ia dalam e-mel susulan. Perlu diketahui bahawa sering kali, syarikat mungkin cuba berputar tidak mengikuti amalan kejuruteraan terbaik sebagai perangsang, jadi dibaca di antara garisan.

Berikut adalah beberapa contoh soalan yang boleh anda tanyakan:

"Apa yang akan berlaku pada hari kerja biasa untuk saya?"

Adalah penting untuk mengetahui apa yang diharapkan daripada kedudukan tertentu kerana pekerjaan Kejuruteraan Perisian berbeza-beza agak sedikit. Anda mungkin dijangka menjadi pelayan penyelenggaraan atau bercakap dengan klien secara langsung, contohnya.

Bendera Merah: "Saya tidak pasti." → Bermaksud bahawa orang yang menemuramah anda tidak akan berada di dalam pasukan anda, atau mereka tidak mempunyai idea yang jelas mengapa mereka menyewa anda.

"Bagaimana anda menguji perisian anda?"

Secara idealnya, kombinasi pengujian unit, ujian manual, dan ujian automatik harus digunakan untuk mengesahkan kualiti kod.

Bendera merah: "Kami tidak menulis serangga, haha." → Orang-orang itu sebenarnya yang menulis serangga.

"Sistem kawalan versi apa yang anda gunakan?"

Sistem kawalan versi amat berguna untuk kolaborasi dan ada sebab-sebab sifar untuk tidak menggunakannya dalam tetapan profesional.

Bendera Merah # 1: "Uh, sistem kawalan versi?" → Jalankan jauh, jauh.

Sentiasa gunakan kawalan versi.

Bendera Merah # 2: "" → Menunjukkan bahawa mereka kemungkinan besar tidak menepati masa dan tidak memperbaharui infrastruktur mereka dalam masa yang lama.

"Adakah anda melakukan ulasan rakan?"

Tinjauan rakan-rakan, atau orang lain melihat kod anda sebelum masuk ke pangkalan kod, adalah cara yang hebat untuk melihat kesilapan yang bodoh dan merupakan peluang latihan penting ketika memulakan karir anda.

Bendera Merah: "Kami hanya mempercayai satu sama lain!" → Kemungkinan besar bahawa pemaju kanan sangat melindungi kod mereka dan tidak bagus menerima maklum balas.

"Apa program yang anda ada untuk pendidikan berterusan?"

Menjadi seorang jurutera perisian bermakna sentiasa belajar sebagai teknologi muncul, matang dan menjadi bertarikh pada kadar yang menggigil. Oleh itu, banyak syarikat mempunyai belanjawan latihan yang mereka gunakan untuk membayar kelas universiti dan kelas dalam talian, persidangan, atau ceramah dalaman.

Bendera merah: "Maksud anda membaca barang dalam talian dalam masa lapang anda?" → Syarikat itu sama ada mengikat tunai atau melihat pemaju sebagai pengganti dan bukan sebagai pelaburan jangka panjang.

"Apakah proses pembangunan perisian yang anda gunakan?"

Proses adalah penting untuk kejuruteraan perisian, tidak kira butiran sebenar. Butiran tentang apa yang menjadi proses yang optimum adalah tertakluk kepada perdebatan sengit, tetapi kewujudan cara yang dipersetujui untuk mengerjakan sesuatu projek meminimumkan huru-hara dan memastikan semua orang berada pada halaman yang sama.

Bendera Merah: "Proses kami diilhami oleh jazz bentuk bebas." → Kemungkinan besar seluruh jabatan berada dalam mod pemadam kebakaran, melompat dari kecemasan ke kecemasan tanpa matlamat yang jelas.

"Bagaimana anda menangani hutang teknikal?"

Hutang teknikal adalah pengumpulan teknologi ketinggalan zaman dan penyelesaian cepat-tetapi-kotor dalam asas kod. Menanganinya adalah penting untuk kesihatan jangka panjang kod dan perlu dilakukan secara berterusan.

Bendera Merah: "Kami secara eksklusif memberi tumpuan kepada ciri-ciri baru." → Pangkalan kod mereka adalah kekacauan atau tidak lama lagi.

"Apa kebiasaan syarikat anda?"

Budaya syarikat mungkin konsep yang sangat samar-samar, tetapi perkara-perkara kecil seperti pejabat terbuka berbanding bilik kecil akan mengubah interaksi harian anda dengan rakan sekerja dengan cara yang sangat penting. Tidak ada bendera merah umum, tetapi pastikan jawapannya adalah sesuatu yang anda boleh hidup selama 40+ jam seminggu selama bertahun-tahun.

Bekerja sebagai Jurutera Perisian

Pada peringkat ini, jika anda melakukan dengan baik dalam wawancara anda dan suka bagaimana penemuduga menjawab soalan anda, anda mungkin akan diupah.

Tahniah, Awak Jurutera!

Bagaimana sekarang? Nah, sudah tiba masanya untuk mempelajari banyak perkara tentang pengekodan dan kerja. Dan kerana kami pengaturcara, mari bermula dengan membincangkan kod.

Kod Industri yang Baik

Kod industri yang baik mempunyai sifat berikut, dalam susunan itu:

  • Boleh dibaca, kerana kod tersebut dibaca dan diselenggarakan lebih kerap daripada yang ditulis. Niat kod mesti jelas kepada pemaju lain selepas anda menulisnya.
  • Defensif, seperti berikut amalan terbaik kod pengekodan. Pengekodan defensif adalah satu topik yang tersendiri, tetapi terasnya adalah: Anda perlu memastikan penggunaan kelas dan kaedah yang tidak betul yang tidak dituliskan akan menyebabkan kod anda melanggar perisian.
  • Dioptimumkan, yang terakhir di dalam senarai ini kerana kebanyakan masa, anda tidak perlu bimbang mengenainya. Itu tidak bermakna anda harus menulis kod buruk yang melakukan sesuatu dalam O (n³) apabila terdapat penyelesaian linear. Tetapi pemaju pada umumnya tidak sabar-sabar untuk mencuba dan mengoptimumkan apabila tidak memerlukannya, selalunya merugikan kebolehbacaan dan kecocokan kod. Anda harus sentiasa dapat membuktikan bahawa pengoptimuman tertentu yang mengorbankan harta itu sebenarnya diperlukan.

Sekarang anda tahu bagaimana untuk menulis kod industri yang baik:

Anda Tidak Akan Melakukan Banyak Pengkodan

Ia mungkin datang sebagai satu kejutan, tetapi kebanyakan masa anda tidak akan menulis kod baru, tetapi sebaliknya, anda akan:

  • Debugging
  • Membaca kod sedia ada
  • Dalam mesyuarat atau menulis e-mel
  • Meneliti apa yang perlu dilakukan supaya anda tidak menulis kod

Oleh itu, kemahiran selain pengekodan akan sama pentingnya dengan kerjaya anda.

Debugging and Reading Code

  • Anda memerlukan lebih banyak daripada debugging menggunakan pernyataan cetakan. Semua bahasa yang banyak digunakan dan susunan berteknologi mempunyai pelbagai alat yang berkuasa. Belajar menggunakannya kerana mereka akan membuat debugging angin dan menjimatkan banyak jam.
  • Memahami asas kod. Kebanyakan tangkapan teknologi mempunyai beberapa jenis alat penjanaan grafik kod yang akan membantu anda memahami struktur asas kod. IDE perusahaan umumnya mempunyai fungsi yang dibina. Anda juga boleh meneroka kod menggunakan alat seperti ReSharper, grep atau Sourcegraph.
  • Memahami produk. Anda akan terkejut berapa banyak pemaju tidak tahu bagaimana perisian sepatutnya berfungsi sebelum mereka cuba "membetulkan "nya. Cuma baca dokumentasi.

Mengatur Pikiran Anda

Oleh kerana banyak masa anda akan dibelanjakan dalam komunikasi, penyelidikan dan multi-tasking, anda memerlukan beberapa alat untuk membantu memastikan segala-galanya teratur.

  • Senarai TODO / Penugasan: Syarikat anda sepatutnya mempunyai perisian tugas sejenis, tetapi juga membantu sistem peribadi. Gunakan nota pasca atau perisian seperti Trello atau Todoist.
  • Nota: Sentiasa ambil perhatian dalam mesyuarat, bekerja untuk memperbaiki dokumentasi sedia ada dan buat pangkalan pengetahuan peribadi. Gunakan Evernote, OneNote, atau buku nota, seperti pada zaman dahulu. Ia mungkin kelihatan seperti berlebihan, tetapi anda akan mengucapkan terima kasih kepada diri sendiri setahun kemudian apabila anda menyemak semula proses membina yang tidak jelas yang membawa anda 3 hari untuk memikirkan kali pertama. Saya tidak pernah jumpa Jurutera Perisian yang baik yang tidak mengambil nota yang luas.
  • Carta / Visualisasi: Manusia adalah makhluk visual dan mencipta carta proses dan seni bina akan membantu anda dan orang lain memahami topik yang rumit. Rajah sangat berguna apabila berkomunikasi dengan rakan-rakan bukan teknikal. Gunakan Lucidchart, Visio atau papan putih kosong.

Tahu Kapan Menggunakan Perpustakaan

Jawapan ringkas: Hampir sepanjang masa.

Jawapan panjang: 99% masa, anda tidak perlu mencipta semula roda. Dalam kebanyakan jawatan Kejuruteraan Perisian, melaksanakan jenis semacam jenis adalah pembaziran masa yang lengkap. Itu tidak bermakna anda tidak boleh tahu bagaimana algoritma dan struktur data yang anda gunakan berfungsi, kerana itu akan membantu anda memutuskan apa yang hendak digunakan dan bila.

Untuk menjadi Jurutera Perisian yang cekap, anda perlu memahami perpustakaan yang ada pada pelupusan anda. Perpustakaan standard bahasa yang paling popular amat berguna dan lebih besar daripada apa yang anda harapkan. Di samping itu, asas kod mungkin juga menggunakan tambahan, perpustakaan khusus. Baca dokumentasi mereka dan ketahui kapan untuk menggunakannya.

Anda juga tidak perlu takut untuk mencadangkan perpustakaan tambahan jika mereka akan menjimatkan masa. Walau bagaimanapun, anda perlu memastikan bahawa anda memilih perpustakaan yang baik untuk kegunaan industri. Perpustakaan yang baik ialah:

  • Sumber terbuka, jadi anda boleh mengesahkan kualiti kod anda sendiri dan berpotensi membetulkan pepijat yang penting untuk permohonan anda.
  • Berlesen di bawah lesen permisif seperti MIT dan BSD, jadi syarikat anda tidak menghadapi sebarang masalah dengan menggunakannya. Berhati-hati dengan GPL, supaya anda tidak dapat membuka pangkalan keseluruhan kod anda secara tidak sengaja.
  • Matang, i.e. telah keluar untuk beberapa waktu dan mempunyai satu set ciri yang kaya.
  • Dipelihara, dengan siaran baru sering keluar.
  • Digunakan oleh syarikat atau projek lain, yang bertindak sebagai tanda kelulusan dan memastikan ia mempunyai sokongan industri untuk penyelenggaraan yang berterusan.

Penambahbaikan yang berterusan

Di samping mempelajari kemahiran yang akan membuat anda lebih baik pada pekerjaan sehari-hari, anda juga perlu terus meningkatkan kemahiran anda dan belajar yang baru, untuk mewujudkan peluang kerjaya baru untuk diri anda sendiri.

Peluang untuk belajar banyak dan kebanyakannya agak berpatutan:

  • Kursus Dalam Talian: Peluang untuk belajar dari profesor terbaik dalam bidang dalam format fleksibel tidak boleh dilepaskan. Semak Coursera, Udacity, dan edX (antara banyak) untuk kursus yang boleh menambah kemahiran sedia ada anda.
  • Gelaran Master Dalam Talian: Satu trend terkini di kalangan universiti terkemuka, Gelaran Master dalam talian adalah cara yang fleksibel untuk meneruskan pendidikan formal anda. Mereka juga secara umumnya kurang mengucapkan terima kasih kepada darjah kampus, dengan kebanyakan program yang berharga ~ $ 10,000 untuk keseluruhan ijazah. Georgia Tech, UT, dan UC San Diego adalah beberapa universiti yang menawarkan darjah tersebut. Saya secara peribadi mencadangkan Master Dalam Talian Georgia Tech yang saya lulus dari tahun ini.
  • Blog: Blog merupakan bahagian penting dari komuniti pemaju (tidak mengejutkan di sini, seperti yang anda baca sekarang). Blog seperti Coding Horror, Joel on Software, atau lebih banyak laman web lucu seperti The Daily WTF boleh memberi anda idea yang baik tentang apa dan apa yang tidak perlu dilakukan sebagai Jurutera Perisian. Browsing Medium, r / programming, HackerNews atau suapan lain juga akan membawa anda ke artikel dan blog yang baik.
  • Persidangan: Akhirnya, tetapi tidak kurang, persidangan adalah peluang pembelajaran yang luar biasa dan anda pastinya harus mengambil keuntungan dari belanjawan latihan syarikat anda dengan pergi ke mereka. Senarai persidangan yang baik tidak lengkap untuk diperiksa (bersebelahan dengan topik mereka): GOTO; (Umum), Loop Strange (Umum), PyCon (Python), CPPCon (C ++), DEF CON (Security), Fasih (Web dev). Semua ini juga mempunyai video tentang (kebanyakan) perbincangan di YouTube supaya anda dapat belajar sesuatu walaupun anda tidak dapat hadir!

Mudah-mudahan, artikel ini telah memberikan anda pengetahuan tentang apa yang diharapkan dari permulaan kerjaya anda sebagai Jurutera Perisian dan memberi anda alat-alat untuk melakukan yang baik dalam perjalanan yang menarik ini! Terima kasih untuk membaca! Jika anda mempunyai sebarang pertanyaan atau cadangan, sila tinggalkan komen atau tweet @AlexievValeri.