Impian kami adalah membuat toolkit terbaik untuk mengembangkan aplikasi bisnis di dunia. Kami memiliki banyak ide hebat, implementasi yang memungkinkan kami untuk memenuhi impian ini, untuk mengembangkan alat kami agar tetap yang terbaik. Nah, untuk mengimplementasikan ide-ide ini pada level yang tepat, kita membutuhkan programmer yang keren.
Singkatnya, kami mencari mereka yang:
- suka (atau siap untuk mencintai) membuat kerangka kerja yang direplikasi
- ingin membuat produk yang digunakan jutaan orang
Untuk menunjukkan secara lebih rinci pengembang mana yang kami cari dan caranya, kami melakukan wawancara singkat dengan manajer perekrutan perusahaan kami. Pertanyaan selama wawancara diajukan:
- Pengembang seperti apa yang Anda butuhkan?
- Apa yang Anda minta untuk wawancara?
- Pertanyaan apa yang Anda sukai dalam wawancara - teoretis atau praktis?
- Haruskah programmer menulis tes?
- Apakah Anda mengajukan pertanyaan bukan dari bidang kegiatan profesional?
- Apakah Anda menetapkan tugas logis untuk berpikir cepat yang tidak terkait langsung dengan pemrograman? Jenis tugas tentang bola dengan helium di dalam mobil :
Dalam bidang apa programmer dapat bekerja dalam pengembangan platform kami? Nah, misalnya:

Grup Pengembangan Internet

Grup ini menulis layanan online yang mungkin digunakan oleh jutaan pengguna akhir produk 1C. Layanan, misalnya, memungkinkan Anda memperoleh informasi tentang rekanan dengan TIN, memeriksa keandalan rekanan, dll. Area kegiatan sangat bertanggung jawab, layanan beroperasi di bawah beban berat, downtime layanan sangat tidak diinginkan, jadi kami mencoba membuat produk yang paling dapat diandalkan. Kami juga membuat produk yang disebut
Sistem Interaksi . Ini adalah mekanisme yang mentransfer informasi antara aplikasi klien dan 1C: Server perusahaan; dengan bantuannya, khususnya, messenger yang dibangun ke dalam aplikasi 1C diimplementasikan.
Dari pengembang saya ingin dia mengembangkan produk secara keseluruhan - menganalisis kebutuhan pengguna, memikirkan arsitektur, menulis kode. Karena orang sering datang untuk wawancara dan mengatakan itu tidak menarik bagi saya untuk menganalisis bidang subjek, saya ingin analis menulis saya TOR, yang menurutnya saya akan memprogram fungsionalitasnya. Artinya, seseorang hanya tertarik pada aspek teknis pemrograman. Kami mencoba untuk tidak mempekerjakan orang seperti itu, karena kami memiliki tim kecil, kami harus berurusan dengan sejumlah besar bidang terkait. Oleh karena itu, persyaratan utama yang tidak terkait dengan keterampilan profesional adalah kemampuan untuk dengan indah dan akurat merumuskan persyaratan produk, memikirkan implementasi, mengembangkan produk dan bertanggung jawab atas hasil akhir. Minat pribadi orang tersebut pada kualitas produk akhir adalah penting, sehingga orang tersebut membuat produk yang ingin dibanggakannya.
Dalam buku Eric Evans,
"Object-Oriented Design", salah satu ide utama adalah bahwa pengembang juga harus menjadi seorang analis, memiliki pemahaman yang baik tentang area subjek yang diotomatisasi, memahami apa yang berharga bagi bisnis, dan jika ia tidak memahami ini, maka ia akan dapat mengembangkan sistem yang baik yang akan memenuhi semua persyaratan pengguna. Jika pengembang mengambil abstrak dari area subjek, maka ia tidak akan membuat keputusan kunci pada arsitektur produk, tetapi ia harus mengimplementasikan keputusan ini, dan dalam hal ini ada risiko implementasi berkualitas rendah. Evans yang sama merekomendasikan untuk membedakan dua bagian dalam area domain - bagian yang secara fundamental penting untuk bisnis, bagian yang membuat produk Anda benar-benar produk Anda, dan bagian kedua, yang tidak terlalu penting, yang bertanggung jawab untuk bundling infrastruktur. Dan pengembang terbaik harus diberi implementasi bagian penting pertama.
Bagaimana wawancaranya? Kami memiliki kuesioner, sekitar 10 pertanyaan yang kami ajukan kepada pelamar. Pertanyaan-pertanyaan dalam kuesioner tidak teoretis, tetapi praktis, misalnya - kode menimbulkan pengecualian dengan jejak tumpukan, jelaskan apa yang akan Anda lakukan. Atau - Anda memiliki kueri ke database yang berjalan lambat (teks kueri diberikan), ada rencana kueri, evaluasi - bahwa rencana kueri buruk, Anda perlu menjelaskan cara mempercepat kueri. Tidak masuk akal untuk bertanya kepada seseorang apa jenis GABUNGAN - tentu saja, dia tahu jenis-jenis ini jika dia bahkan sedikit siap untuk wawancara. Pengalaman praktis menggunakan GABUNGAN ini menarik. Jika seseorang memiliki pengalaman dalam menganalisis rencana kueri, tidak akan sulit baginya untuk berbicara tentang cara menyelesaikan masalah, jika tidak ada pengalaman seperti itu, buku itu tidak akan membantu di sini. Di sinilah garis yang membedakan pengembang yang baru saja membaca tentang fungsionalitas dari pengembang yang benar-benar menggunakan fungsi ini. Kami lebih tertarik berurusan dengan pengembang tipe kedua, kami ingin orang itu segera "terlibat dalam permainan."
Beberapa pertanyaan pada kuesioner sudah berhenti bekerja, dan kami telah mengganti pertanyaan ini dengan yang baru. Sebagai contoh, beberapa waktu lalu, selama wawancara, mereka sering diminta untuk menerapkan pola Singleton, dan ketika kandidat melakukan ini, mereka berkata - sekarang membuatnya malas. Sejak itu, beberapa artikel muncul di Habré, yang menjelaskan secara terperinci bagaimana menulis hal-hal seperti itu, orang hanya mempelajari tugas ini dengan hati, dan tidak lagi menjadi ujian untuk kesesuaian profesional.
Kami juga ingin pengembang menulis tes secara kompeten; misalnya, bahwa tanda tangan kontrak yang harus dipenuhi sistem dijelaskan dalam tanda tangan uji. Ini dapat dilakukan, misalnya, di Jawa dalam
gaya yang direkomendasikan oleh
Roy Osher , ketika nama metode kontrak dibagi menjadi tiga bagian - "diberikan", "apa yang kita harapkan", "apa hasilnya". Dan Anda bisa melakukannya di
Groovy menggunakan
Spock . Penting apakah kandidat memahami apa yang sebenarnya perlu diuji, apakah perlu menguji nilai batas, apakah dia tahu tentang
piramida pengujian , dll.
Kami juga bertanya tentang proyek yang melibatkan orang tersebut, terutama jika mereka menggunakan teknologi yang relevan bagi kami. Misalnya, kami menggunakan
Hazelcast , sejauh ini hanya sedikit orang yang menggunakannya dalam produksi (dari implementasi besar baru-baru ini - di
Yandex.Money ), dan kami sangat tertarik pada orang yang berpengalaman menggunakan Hazelcast. Selain itu, kandidat dapat mengungkapkan kepada kami aspek-aspek yang tidak terduga dan berguna dari teknologi baru, yang belum kita ketahui.
Topik penting bagi kami adalah cara menulis kode agar berfungsi di lingkungan multi-utas. Misalnya, ada beberapa node aplikasi dalam lingkungan yang sangat dimuat, dan kami meminta kandidat untuk memberi tahu Anda bagaimana membuat sistem bisa bekerja dan dapat diandalkan, sambil meminimalkan pemblokirannya.
Haruskah programmer menulis tes? Suatu keharusan, tetapi tidak semua. Programmer harus menulis unit test tanpa syarat. Ngomong-ngomong, kami dalam tim tidak mendesak penggunaan wajib metode apa pun, misalnya,
TDD ; beberapa pengembang menggunakan TDD atas inisiatif mereka sendiri, mereka sangat menyukainya. Kami juga menulis tes integrasi. Para pengembang juga melakukan pengujian beban, menulis rencana pengujian untuk JMeter.

Meskipun kami sedang mengembangkan klien web dalam JavaScript, kami lebih memilih bahwa kandidat, selain pengalaman dalam pengembangan web dalam JavaScript, memiliki pengalaman dalam mengembangkan bahasa OOP "klasik" - C ++ atau Java atau C #. Ini karena kekhasan proyek; Klien web 1C, ditulis dalam JavaScript, tetapi secara ideologis lebih menyerupai aplikasi yang ditulis dalam bahasa OOP. Kami membahas kode JavaScript dengan anotasi
JSDoc , sehingga pemeriksaan tipe statis terjadi selama perakitan. Pendekatan ini dipilih karena kami menggunakan
Google Closure Compiler , yang membantu kami, khususnya, untuk meningkatkan kecepatan kode kami dan mengurangi jumlah memori yang dikonsumsi olehnya. Dengan demikian, pengalaman OOP akan sangat membantu calon.
Pada wawancara, kami bertanya tugas apa yang harus diselesaikan oleh kandidat dan timnya di pekerjaan sebelumnya, kami membahas arsitektur solusi yang diterapkan olehnya. Kami menanyakan tugas kandidat, beberapa di antaranya - dengan pertimbangan cepat dan pemikiran algoritmik. Misalnya, ada tugas-tugas yang "diselesaikan" oleh sejumlah besar kode, dan jika Anda memikirkannya, maka dalam satu baris.
Ada kumpulan tugas untuk pengetahuan tata letak tertentu, dalam JavaScript. Sebagai contoh, kita menggambar struktur kertas pada halaman HTML (struktur bisa dinamis, berubah waktu sesuai dengan algoritma tertentu) dan meminta untuk menulis kode yang akan membuat struktur seperti itu dan mengimplementasikannya dalam dinamika.
Kami juga mencoba untuk mengevaluasi kecenderungan kandidat untuk kegiatan analitis; kami tidak ingin memiliki encoder "bersih" di tim, bahkan jika itu menulis kode berkualitas tinggi, tetapi bekerja secara ketat sesuai dengan spesifikasi teknis tetap. Saya ingin pengembang untuk terlibat dalam tugas-tugas, sangat memahami apa yang sedang dilakukan dalam produk dan mengapa, idealnya, itu juga penggerak fungsi baru.
Jika kandidat adalah siswa atau siswa kemarin, kami dapat mengajukan pertanyaan-pertanyaan teoretis murni, misalnya, menanyakan prinsip-prinsip dasar OOP atau sesuatu yang lain. Jika seseorang dengan pengalaman, pertanyaan seperti itu mungkin tidak ada artinya, kemungkinan besar kandidat mengetahui prinsip-prinsip ini dan menggunakannya dalam pekerjaannya, permintaan untuk merumuskannya dapat menuntunnya ke jalan buntu, karena dia dengan bodohnya melupakan kata-kata dari buku teks.
Setiap wawancara adalah unik. Sangat menarik untuk berbicara dengan satu orang pada beberapa topik, dengan yang lain pada orang lain. Pada akhir wawancara, kami berbicara tentang produk kami, tentang tingkat penggunaannya (dan mereka mengesankan - sistem kami memiliki jutaan pengguna akhir), kami melihat bagaimana orang-orang tertarik.
Tim Skalabilitas Aplikasi

Siapa kita
Tim kami adalah pakar di bidang membangun sistem yang sangat dimuat di platform 1C: Enterprise. Para insinyur ini mengatasi tantangan keandalan dan skalabilitas. Tugas-tugas semacam itu seringkali berada di persimpangan administrasi dan pengembangan. Hasil dari penyelesaian masalah tersebut adalah sistem yang sangat keren. Contoh tugas tersebut:
- Menyebarkan infrastruktur toleran kesalahan di dua pusat data dan mensimulasikan kegagalan
- memastikan penurunan kinerja sistem dengan peningkatan jumlah pengguna sebanyak 10 kali, mempercepat perhitungan biaya berjam-jam sebanyak 3 kali,
- untuk menyelidiki dan menghilangkan kebuntuan yang timbul,
- untuk memastikan pemulihan terkoordinasi lebih dari selusin database informasi terdistribusi pada suatu titik waktu, dengan mempertimbangkan pertukaran akun antara database-database ini.
Dan ini bukan daftar tugas yang lengkap. Sangat menyenangkan bahwa banyak tugas datang kepada kita dengan kata-kata: "Apakah mungkin untuk melakukan ini?" Yaitu orang tidak percaya pada awalnya. Kami tidak berdebat dan selalu berusaha meyakinkan untuk mencoba memeriksa dalam praktik, untuk melakukan. Untuk ini kita perlu menambahkan kesediaan untuk terhubung di tengah malam ke sistem klien besar, karena insinyur lokal telah merusak sesuatu dan tidak ada yang tahu apa yang harus dilakukan. Lebih dari sekali itu perlu untuk mengembalikan basis yang hancur tanpa adanya cadangan atau untuk mencari tahu mengapa beban pada sistem meningkat sebesar 5%. Jika mau, Anda bahkan dapat membaca
ulasan tentang pekerjaan kami.
Siapa yang kita cari
Kami mencari insinyur yang dengan penuh semangat ingin melakukan hal yang mustahil. Salah satu persyaratan paling penting bagi seorang kandidat adalah mata yang menyala-nyala, keinginan dan kemampuan untuk dengan cepat memahami apa yang belum pernah dia temui sebelumnya, menggunakan pengetahuan yang ada. Ini adalah insinyur dan pengembang keandalan yang semuanya digabung menjadi satu. Bayangkan bahwa seorang klien menghubungi Anda dengan beberapa ribu pengguna dan memberi tahu Anda bahwa ia sedang berusaha menjalankan suatu mekanisme rumit yang dikembangkan para insinyurnya selama setahun. Dan omong-omong:
- belum berhasil menyelesaikan pengembangan dalam menghadapi persyaratan yang terus berubah dari bisnis klien;
- sementara pengembangan mekanisme utama untuk implementasi berjalan lancar, para insinyur belum mencapai mekanisme pengujian dengan ribuan pengguna;
- bahkan sekarang, tidak ada yang tahu mengapa, dengan peningkatan jumlah pengguna pada implementasi ini, tepatnya dalam mekanisme ini, produktivitas turun tajam;
- pengembangan dilakukan pada Windows dengan DBMS MS SQL Server, dan pada tahap akhir, keputusan politik dibuat untuk mengimplementasikan PostgreSQL di CentOS dan DBMS berada di pusat tren substitusi impor;
- dan Anda secara tidak sengaja mengetahui bahwa ada batas waktu ketika bahkan 10 pengguna bekerja;
- Anda perlu menghitung peralatan untuk mekanisme ini, karena klien harus membelinya bulan lalu;
- Anda memahami bahwa Anda perlu mengerjakan implementasi algoritma yang paralel dalam mekanisme ini, mengoordinasikannya dengan kolega Anda, dan bersama-sama memutuskan bagaimana Anda akan tepat waktu tanpa memperkenalkan kesalahan baru.
Ya, dan lagi: tidak semua orang siap untuk membantu mengidentifikasi kesalahan dan anti-pola dalam keputusan mereka, jadi Anda harus dapat berkomunikasi secara sangat diplomatis dengan para insinyur yang bekerja dalam tekanan terus menerus dalam beberapa bulan terakhir.
Bagaimana penampilan kita
Wawancara bisa membuat stres bagi kandidat. Tetapi stres ini bahkan tidak dapat dibandingkan dengan stres yang akan Anda dapatkan dalam situasi nyata jika Anda tidak berpikir dan menggunakan semua pengalaman yang ada.
Masalah banyak kandidat adalah bahwa mereka tidak tahu bagaimana menerapkan pengetahuan mereka dan tidak dapat menjelaskan anak mereka yang berusia enam tahun. Itulah sebabnya selama wawancara, kami secara berkala meminta Anda untuk mengajari kami sesuatu yang paling baik dipahami oleh kandidat. Secara alami, saya benar-benar ingin merekrut orang-orang dari siapa kita dapat belajar banyak. Dalam diskusi seperti itu, kedalaman pengetahuan dan pemahaman yang sangat baik sangat penting. Ada pengalaman ketika jam 7 pagi kami mewawancarai kandidat, datang ke diskusi tentang komponen manajemen memori di MS SQL Server dan akhirnya memutuskan pada halaman pemahaman dan luasan. Kemudian HR turun tangan, mengatakan: "Dengan apa kita menyiksanya?! Siapa yang tahu sama sekali!? “, Dan kami meninggalkan ruangan untuk berbicara. Seorang kolega mengantuk dan menguap tanpa sengaja melewati koridor ke arah kopi. Kolega itu ditanyai pertanyaan yang sama, dia menjawab dengan jelas, benar, pada dasarnya, tanpa membuka satu mata dan terus menguap.
Secara alami, kami mencoba menguji pengetahuan matematika, algoritma. Sebaliknya, mereka berhubungan dengan pengetahuan dasar. Tetapi pengetahuan tentang algoritma terdistribusi dan kemampuan untuk menerapkan algoritma seperti itu dalam suatu tugas akan menjadi nilai tambah bagi kandidat.
Cara lain adalah dengan meminta kandidat untuk memperkenalkan dirinya sebagai pengganti pengembang 1C dan memintanya untuk mengimplementasikan beberapa jenis tugas yang diterapkan. Dalam kondisi wawancara dan tekanan dari kandidat, tugas seperti itu memungkinkan Anda untuk melihat bagaimana pemikiran kandidat. Kami melihat solusi kandidat, membantu kandidat melihat masalah teknologi yang signifikan dalam solusinya, kemudian kami melihat bagaimana kandidat akan mengubah solusi, tidak membiarkan masalah teknologi lainnya. Terkadang kita melakukan 6-7 iterasi, mencari dan mengevaluasi kelemahan solusi. Pada saat yang sama, dengan segera menjadi mungkin untuk tidak hanya membahas dan memahami apa yang diketahui seseorang, misalnya, tentang kebuntuan, tetapi apakah ia juga memahami bagaimana mengurangi kemungkinan terjadinya mereka menjadi nol dalam kodenya.
Pengetahuan tentang bahasa pemrograman tertentu bukan merupakan faktor super penting. Itu lebih penting ketika seseorang berpikir dalam hal pemrograman menggunakan bahasa, dan tidak terbatas pada konstruksi bahasa.
Apa yang digunakan dalam pekerjaan itu
Alat pertama dan paling sering digunakan adalah 1C: platform teknologi perusahaan. Pengetahuan tentang platform diperlukan di tingkat administrator dan pengembang. Yaitu Anda perlu memahami cara menerapkan solusi spesifik dan menjalankannya dalam sistem untuk ribuan pengguna.
Sangat sering perlu untuk menganalisis operasi MS SQL Server dan PostgreSQL DBMSs, sehingga penggunaan alat profiling, pandangan dinamis, dan majalah termasuk dalam bagasi keterampilan aktif. Dan di sini kemampuan untuk bekerja dengan volume besar adalah penting. Notepad Windows standar tidak nyaman ketika bekerja dengan log teks 1 TB dengan kueri yang dihasilkan mesin dan rencananya. Segera ada kebutuhan untuk pengetahuan tentang ekspresi reguler, serta seperangkat alat dan bahasa yang mendukungnya. Untuk menganalisis rencana kueri, Anda perlu memahami apa itu indeks dan bagaimana menggabungkan gabungan berbeda dari gabungan hash.
Sistem di pasar perusahaan sering berjalan di Linux. Tidak ada lingkungan grafis di server. Keterampilan konsol cukup penting.
Bayangkan apa yang Anda perlu temukan mengapa CPU memuat pada server PostgreSQL di CentOS oleh proses Postgre meningkat sebesar 5%. Cobalah untuk menulis di selembar kertas algoritma investigasi Anda. Dan segera ada pemahaman tentang apa yang dibutuhkan
- dapat menerapkan tidak hanya uptime , vmstat , sar , di atas , perf ,
- tahu bagaimana menggunakan pgbadger , psql dan mengkonfigurasi logging di postgresql.conf,
- dapat menemukan satu permintaan yang diinginkan,
- gunakan menganalisis, menganalisis rencananya,
- tulis ulang permintaan dan verifikasi bahwa muatannya sudah surut.
Yang penting bagi kita
Sangat penting bahwa seseorang berpikir dalam skala besar dan selalu berusaha melihat gambaran besarnya. Misalnya, sebagian besar kandidat, menyelesaikan tugas menyortir file teks, menawarkan algoritma yang cocok untuk menyortir file 10 MB. Tetapi seberapa banyak pemahaman dan sudut pandang mereka berubah ketika mereka dihadapkan dengan pengurutan file 10 TB dalam kondisi memori terbatas dan ruang disk. Dan Anda perlu ingat bahwa biaya mengakses disk lebih tinggi daripada biaya mengakses memori. Saya benar-benar ingin calon berpikir "pada skala" dalam semua tugas.1C: Grup Pengembangan Platform Perusahaan
Hal utama yang diperlukan tim kami dari kandidat adalah kemampuan berpikir analitis, menganalisis masalah secara menyeluruh, dan kemampuan menimbang solusi. The 1C: Platform perusahaan memiliki siklus pengembangan yang agak panjang (bulan), oleh karena itu tidak mungkin, seperti dalam pengembangan web, untuk mengimplementasikan fungsionalitas di bagian-bagian, langkah demi langkah. Ini membutuhkan kemampuan untuk berpikir secara mendalam ketika mempertimbangkan detail implementasi, Anda perlu mencoba untuk melakukan "sekaligus." Yaitu
tidak menggunakan metode pertama yang tersedia yang saya baca di Habr kemarin untuk menyelesaikan masalah, tapi hati-hati mempertimbangkan semua pro dan kontra dari berbagai solusi.Memahami pada saat wawancara apakah kandidat memiliki kualitas seperti itu tidak begitu sederhana. Cara yang paling relevan adalah berbicara tentang pengalaman kandidat sebelumnya. Ketika seseorang memberi tahu solusi keren apa yang ia hasilkan, kami bertanya - masalah apa, yang sebenarnya, diselesaikan? Mengapa solusi khusus ini dipilih dan bukan yang lain? Dan jika kondisi masalahnya sedikit berubah, bagaimana solusinya akan berubah? Dengan mengajukan beberapa pertanyaan serupa, Anda dapat memahami seberapa dalam orang itu tenggelam dalam topik tersebut.Ada aspek lain yang diilustrasikan oleh frasa: "Kami mempekerjakan mereka yang tahu cara bekerja, dan kemudian untuk beberapa alasan kami ingin mereka ingin bekerja." Karena itu, pada wawancara saya ingin memahami apa pekerjaan untuk seseorang. Jika baginya ini adalah hiburan yang menyenangkan yang memungkinkan Anda untuk mendapatkan uang, maka dengan tingkat probabilitas tinggi tidak ada hal baik yang akan keluar dengan kandidat. Bagi kebanyakan pengembang profesional, pekerjaan mereka adalah hal paling menarik yang pernah mereka lakukan, penelitian, keinginan, dan kemampuan untuk menciptakan sesuatu yang baru. Seseorang yang datang kepada kita harus siap belajar, belajar dan belajar. Kami tidak hanya membutuhkan pemain, kami membutuhkan orang-orang yang tidak pernah bosan belajar, kami harus banyak belajar dan terus-menerus bekerja.Apa lagi yang ingin Anda lihat dengan kandidat adalah keterampilan teknik, yaitu, secara kiasan, kemampuan untuk mengumpulkan solusi elegan dari kubus.Pengetahuan yang diperlukan tentang bahasa pemrograman tergantung pada area pengembangan platform tempat kandidat dicari. Inti dari platform adalah C ++ dan Java, klien web adalah JavaScript dan diinginkan untuk mengetahui dasar-dasar C ++, beberapa proyek memerlukan pengetahuan tentang 1C, tetapi pengetahuan tentang bahasa dan teknologi lain sangat diinginkan. Kami harus membuat banyak hal baru untuk dunia 1C, kami ingin pandangan dan pengetahuan pengembang memungkinkan mereka untuk beroperasi dengan ide dan konsep yang ditemukan dalam bahasa dan teknologi lain, dan untuk memahami bagaimana menerapkannya dengan baik dan benar di tempat yang tepat ketika mengembangkan solusi untuk 1C. Misalnya, untuk mengembangkan produk cloud kami 1cFreshkami menulis berbagai alat, terutama untuk administrasi, dalam 1C (dalam 1C mereka lebih cepat berkembang daripada dalam bahasa tradisional). Jika pengembang memahami pola teknologi dan bahasa yang digunakan oleh administrator sistem (bash, Python, Perl), ini akan membantunya membuat alat yang mudah digunakan.Jika kita mewawancarai seorang siswa, kita dapat memintanya untuk menghitung integralnya dan menjelaskan mengapa integral itu dianggap demikian. Rata-rata siswa senior sudah tidak ingat arti integral, dan seorang siswa yang antusias dan bersemangat mengingat artinya dengan sangat baik dan dapat menjelaskannya.Jika kita memiliki administrator sistem, kita dapat bertanya, misalnya, tentang kekhasan memanipulasi RAM di Linux. Jika seseorang bekerja dengan DBMS, kami bertanya, misalnya, tingkat isolasi transaksi apa yang ada, kandidat mana yang lebih suka menggunakannya, dan mengapa. Jika, misalnya, seseorang bekerja menyinkronkan beberapa database, kami akan membahas dengannya apa yang harus dilakukan jika salah satu database yang disinkronkan tiba-tiba dipulihkan dari cadangan. Masalah arsitektur tipikal yang dapat diselesaikan dengan berbagai cara.Saya juga ingin melihat keinginan untuk mengubah dunia menjadi bagian perfeksionisme yang lebih baik dan sehat sebagai kandidat. Tanpa kesempurnaan yang masuk akal, sulit untuk menulis kode yang akan bekerja bertahun-tahun pada implementasi yang sangat berbeda.Haruskah programmer menulis tes? Programmer harus mengeluarkan produk yang berfungsi. Jika dia seorang programmer dewasa, tidak ada yang peduli bagaimana dia melakukannya. Jika ini adalah programmer pemula - ia disarankan untuk menulis tes. Pengembang yang serius akhirnya mulai memahami tes apa yang harus ditulis untuk kode yang ia buat, di mana ada bagian kode yang lemah yang lebih baik dicakup oleh tes. Kami menentang cakupan uji global yang tidak ada artinya. Program ini bekerja dengan benar, bukan karena itu benar-benar ditutupi dengan tes, tetapi karena pengembang memutar kepalanya. Tes adalah alat bantu untuk melindungi diri dari kesalahan di tempat-tempat yang paling sulit dari suatu program. Dan kita harus ingat bahwa tes bukanlah obat mujarab untuk masalah arsitektur. Yang paling penting, seseorang harus menghidupkan kepalanya.Tentang pertanyaan non-IT, kadang-kadang kita menanyakan pertanyaan ini - dan oleh siapa seseorang melihat dirinya dalam 3-5 tahun? Kami percaya bahwa kami akan bekerja sama dengan seseorang jika aspirasi pengembangannya bertepatan dengan bagaimana perusahaan melihat perkembangannya.Sangat penting untuk mengevaluasi dua hal. Yang pertama adalah di mana orang itu berada sekarang, pengalaman dan pengetahuan apa yang dimilikinya sekarang, tingkat tugas apa yang dapat dia selesaikan sekarang. Yang kedua adalah siapakah seseorang di lingkungan yang menguntungkan siap menjadi dalam beberapa tahun. Jadi, tentu saja, selama beberapa tahun ini, ia bekerja di perusahaan kami, menyelesaikan masalah, tumbuh secara profesional. Kami bahkan lebih tertarik bukan pada apa seseorang sekarang, tetapi siapa dia dalam satu tahun, dua atau tiga. Prospek selalu lebih penting bagi kita daripada keadaan saat ini. Bagi kami, pendatang baru yang lebih menjanjikan lebih menarik daripada orang dengan prestasi besar, tetapi matanya kosong.1: –
Kami biasanya memulai wawancara dengan pertanyaan - proyek apa yang paling menarik, proyek favorit Anda? Saya benar-benar ingin segera memahami apa yang membuat seseorang menyala di tempat kerja, dan apakah dia menyala di tempat kerja secara umum.Kemudian dia bertanya-tanya apakah seseorang harus mengoptimalkan kinerja program, seperti yang dia lakukan.Kami bertanya metode pengujian apa yang digunakan kandidat pada proyeknya, bagaimana ia membangun strategi untuk menguji proyek, kami dapat bertanya - kami memiliki sistem dengan fungsi yang dinyatakan seperti itu, bagaimana kami akan mengujinya?Jika wawancara dilakukan pada pengembang Java, kami bertanya tentang pekerjaan pemulung; seseorang yang mengembangkan program yang kurang lebih kompleks harus menyadari nuansa karyanya, dan bagaimana menulis kode di mana pemulung secara efisien membuang sampah.Dari topik non-programmer, menarik untuk bertanya tentang bisnis - tugas apa dari sudut pandang bisnis yang diselesaikan oleh proyek favorit kandidat, apa manfaatnya. Melihat gambaran besarnya adalah properti yang sangat berharga bagi pengembang. Begitu ada kandidat yang membuat blockchain, ceritanya sangat informatif.Kami mengatur tugas-tugas desain, kami meminta kandidat untuk merancang sistem yang sederhana. Kemudian kita melihat proyek bersama, mencari kekurangan, mendiskusikan bagaimana cara menghilangkannya. Sangat penting bagaimana kandidat merespons komentar.Pastikan untuk berbicara tentang apa yang kami lakukan, yaitu, kami membuat platform 1C: Enterprise. Kami berbicara tentang bagaimana kami dapat bekerja pada hal-hal teknologi tinggi, misalnya, pada server cluster atau pada platform seluler .Kami tidak memaksa kandidat untuk menulis kode di atas kertas. Tapi kami menggambar banyak di atas kertas selama wawancara, kami menggambar arsitektur sistem, diagram modul, gambar interaksi mereka.Pengetahuan tentang bahasa tertentu tidak penting. Kebetulan seseorang datang ke perusahaan sebagai pengembang C ++, menjadi pengembang C #, dan belajar C ++ dengan cepat. Dan ada banyak contoh rekan kerja yang telah mempelajari bahasa baru dalam perjalanan pekerjaan mereka. Jika ada keinginan dan pengetahuan tentang salah satu bahasa, maka mempelajari bahasa baru bukanlah masalah.Kami juga meminta agar seseorang membaca apakah Habr dan stackoverflow, atau bahkan buku tentang spesialisasi, dan yang mana. Terkadang kami menemukan buku yang bermanfaat dengan cara ini.
Kami membutuhkan pengembang C ++ hardcore. Tim kami terlibat dalam mekanisme pelaporan, yang berarti bahwa kode kami banyak bekerja dengan data dalam jumlah besar, dan kami membutuhkan pengetahuan yang baik tentang wadah dan algoritma.Pada wawancara kami bertanya - perpustakaan mana yang digunakan kandidat dalam karyanya, algoritma mana. Kami banyak menggunakan STL , jadi kami secara aktif bertanya tentang perpustakaan ini, wadah mana yang digunakan pengembang untuk tugas-tugas apa. Sebagai contoh, kami meminta Anda untuk menulis kode yang menempatkan kelas tertentu di peta, dan beberapa tugas serupa lainnya. Untuk tugas-tugas seperti itu, Anda dapat langsung melihat level apa yang ada di hadapan kami.Pertanyaan tentang teori pemrograman jarang ditanyakan. Kami percaya bahwa pengetahuan praktis lebih penting. Jika seseorang menyelesaikan masalah dengan baik, berhasil menerapkan teori dalam praktik, tidak begitu penting bahwa dia tidak ingat perumusan yang tepat dari prinsip-prinsip dasar OOP.Ngomong-ngomong, jika seorang siswa datang untuk wawancara, yang, karena kurangnya pengalaman, masih sulit untuk mengatasi tugas yang diusulkan, kami akan membuat diskon untuk ini. Masuk akal untuk mendorongnya secara teori, untuk bertanya tentang minat profesionalnya. Jika seseorang terlihat menjanjikan seperti seorang spesialis, masuk akal untuk memberinya kesempatan untuk berkembang bersama kami sebagai seorang profesional yang baik.Kriteria yang cukup penting bagi kami adalah kesediaan untuk memahami kode orang lain. Platform 1C: Enterprise adalah produk besar, lebih dari 10 juta baris kode, tabrakan dengan kode ini dalam pekerjaan sehari-hari tidak bisa dihindari, setidaknya pada tingkat penyisipan kode Anda sendiri di dalamnya.Kami bertanya bagaimana kandidat lebih memilih untuk diberikan tugas - dalam bentuk spesifikasi rinci, atau hanya pengaturan dalam bentuk "lakukan mekanisme ini dan itu". Kami memahami dan menerima kedua pendekatan, kami tidak akan menolak programmer yang baik hanya karena dia perlu mengunyah pernyataan masalah; penting bagi kita untuk segera memahami cara bekerja dengan seseorang. Tetapi saya ingin karyawan tersebut berkembang ke arah kemandirian yang lebih besar di masa depan, agar dapat mengambil tanggung jawab untuk arah yang terpisah. Saya bisa memberikan contoh arahdaftar atau diagram dinamis . Dan saya ingin karyawan mengembangkan arah ini - mencari tahu kebutuhan pengguna mekanisme ini, berkomunikasi dengan pengguna di forum dan konferensi, menyusun daftar fitur baru, memprioritaskan mereka, memahami masalah mekanisme, dan menyarankan solusi. Jika seseorang tertarik, dia dapat berkembang sebagai pemimpin tim, mulai dengan mengawasi siswa magang dari Center for Young Specialists , dan kemudian memimpin timnya. Nah, jika seseorang secara alami adalah pengembang "bersih" yang lebih suka bekerja pada TK dan tidak terlalu tertarik untuk memahami kebutuhan pengguna - well, kita membutuhkan orang-orang seperti itu.Haruskah seorang programmer menguji? Tentu saja! Seorang programmer yang tidak melakukan tes seperti seorang juru masak yang tidak mencoba apa yang telah disiapkannya. Tentu saja, Anda tidak dapat meminta programmer untuk menyelesaikan tes pada semua lingkungan yang didukung (Windows, Linux, macOS, web dan klien seluler), tetapi ia harus memverifikasi fungsionalitas dasar pada OS saat ini. Yah, bahkan lebih baik jika Anda menulis tes otomatis. Ini akan menjadi uji regresi yang sudah jadi, yang akan jatuh ke pustaka uji dan akan secara rutin dijalankan ketika mengubah area kode yang sesuai.
1C: Alat Pengembangan Perusahaan ditulis dalam Java, dan kami mencari pengembang dan penguji dengan pengetahuan Java. Kami mencari orang-orang dengan mata menyala, baik yang sudah berprofesi profesional maupun pemula dengan potensi. Pengetahuan tentang Java diperlukan bagi kami, juga pengetahuan tentang algoritma dan struktur data, pemrograman multi-utas; Sayangnya, di tim kami, kami tidak bisa menunggu sampai pengembang baru mengetahui hal-hal ini. Tetapi pengetahuan tentang kerangka kerja spesifik yang kami gunakan ( EMF , Xtext , GEF , Lucene , Handly , ...) adalah hal yang murah. Jika Anda dapat melihat bahwa seseorang sangat sadar dan nyaman berbicara dengannya, itu berarti ia akan masuk ke dalam tim dan dengan cepat menerima pengetahuan yang diperlukan.Secara umum, cocok dengan tim mungkin merupakan kriteria utama bagi kami, bersama dengan profesionalisme. Tim kami adalah tim penggemar, kami tidak ingin mencairkannya dengan orang-orang yang berbeda sifatnya. Dan seseorang dengan karakter yang berbeda di tim kami mungkin tidak nyaman bekerja. Bendera merah yang tidak ambigu bagi kita adalah cara komunikasi yang tidak sopan. Seseorang bisa menjadi profesional yang sangat baik, tetapi jika dia tidak bisa berkomunikasi dengan penuh hormat dengan rekan-rekannya, dia tidak akan cocok untuk kita. Kami memiliki permainan - murni tim.Keunikan pendidikan lembaga adalah bahwa massa lembaga tidak mengajarkan pemrograman industri. Mereka mengajarkan sintaks, konstruksi bahasa, algoritma. Tetapi kemampuan untuk menulis didokumentasikan, disertai kode, yang berisi kemungkinan pengembangan, ekstensibilitas, diajarkan sangat sedikit di mana. Oleh karena itu, dalam sebuah wawancara jenis tugas yang sangat penting adalah tugas desain. Sebagai contoh, kami bertanya bagaimana kandidat akan menulis tetris, komponen apa yang akan dibagi proyek, antarmuka mana yang akan ia rancang agar komponen saling berinteraksi. Selanjutnya, kita menyulitkan pengantar - misalnya, kita mengatakan bahwa tetris akan tiga dimensi (atau jenis bentuk baru akan ditambahkan, atau bentuk akan jatuh dari sisi yang berbeda) dan melihat seberapa baik desain yang dipilih sesuai dengan kondisi yang berubah. Secara umum, salah satu tugas utama wawancara adalah untuk memahamiseberapa fleksibel dan luasnya kandidat dapat berpikir. Dan tentu saja, programmer harus menulis tes, setidaknya tes unit, dan tes integrasi akan menyenangkan. Pertanyaan standar untuk tugas desain adalah bagaimana Anda menguji sistem yang dirancang?Nah, bagi seorang tester, kemampuan untuk berpikir luas bahkan lebih berharga! Ada lelucon terkenal tentang bagaimana penguji menguji bar: memesan satu gelas bir, 2 gelas bir, 0 gelas bir, 999999999 gelas bir, –8 gelas bir, qwertyuip gelas bir, dan setelah proyek diserahkan kepada produksi, klien pergi ke bar dan bertanya di mana toilet? Keterampilan utama dari penguji adalah untuk membuat skenario yang tidak standar (dan pada saat yang sama realistis); skrip standar, sebagai aturan, dikembangkan oleh pengembang sendiri.Kesimpulan
Bagaimana tidak memberikan tautan untuk membuka lowongan di sini :)Dan Anda bisa mengirim resume ke job@1c.ru .