Hai semuanya! Selamat datang di edisi khusus Tinjauan Kode, rangkaian tantangan coding mingguan dan konten terkait pekerjaan kami. Dalam postingan ini, saya akan berbicara tentang salah satu proyek sampingan favorit saya, Pencari nafkah, dan bagaimana Anda dapat mengesankan calon pemberi kerja dengan mengembangkan keterampilan coding dan pemecahan masalah Anda! Saya akan membahas apa yang membuat proyek sampingan menjadi bagus dan bagaimana membicarakan proyek Anda di resume dan wawancara.

Menemukan ide proyek yang luar biasa

Dari sudut pandang teknis, ide proyek yang bagus mungkin merupakan bagian yang paling tidakpenting dari setiap proyek sampingan yang bagus. Tapi, percayalah, proyek menarik yang memecahkan masalah nyata jauh lebih mengesankan bagi pewawancara dibandingkan 'aplikasi jam alarm' lainnya. Jadi, bagaimana Anda menemukan ide proyek keren?

Anda mungkin punya masalah sendiri, tetapi karena Anda seorang pengembang, kemungkinan besar Anda tahu seseorang pandai mengidentifikasi masalah keren untuk dipecahkan. Secara pribadi, saya terhubung dengan pendiri perusahaan pertama tempat saya bekerja, Nis Frome. Wirausahawan mempunyai rekam jejak dalam memecahkan masalah dan saya menemukan bahwa mereka biasanya mempunyai simpanan ide, baik besar maupun kecil. Anda mungkin tahu lebih dari beberapa orang yang ingin bermitra.

Nis mempunyai sejumlah proyek yang ingin dia kerjakan, tetapi salah satunya memerlukan teknologi mutakhir, yang membuatnya menarik bagi saya. Saat ini, proyek tersebut disebut Breadwinnerss dan proyek ini memecahkan masalah yang sangat disukai Nis: membantu orang-orang di jaringannya mendapatkan pekerjaan di perusahaan-perusahaan di jaringannya.

Setiap minggunya Nis mendapat 5–6 permintaan dari pencari kerja yang meminta perkenalan dengan perusahaan tempat dia berhubungan. Sebelum Breadwinnerss, Nis menghabiskan waktu menelusuri halaman karier dari perusahaan di jaringannya untuk membuat kecocokan dan perkenalan. Breadwinnerss lahir untuk membantu meringankan sebagian pekerjaan manual tersebut. Kami pada dasarnya membuat web scraper besar yang menghapus halaman karier dan menggabungkan pekerjaan ke dalam satu umpan langsung (seperti rss feed… mengerti? Breadwinnerss?). Dengan begitu, saat seseorang meminta perkenalan kepada Nis, dia cukup mengirimi mereka satu tautan ke feed Breadwinnersnya, tempat pengguna dapat meminta perkenalan untuk peran apa pun yang mereka minati di banyak perusahaan. Nis dan pengguna kami yang lain telah membantu beberapa orang mendapatkan pekerjaan baru yang sangat keren.

Melenturkan keterampilan pengembangan Anda

Tujuan utama dari proyek sampingan ini adalah untuk belajar, jadi saya secara khusus memilih teknologi yang belum banyak saya kerjakan sebelumnya. Ini adalah poin pembicaraan yang bagus dalam sebuah wawancara. Ini adalah kesempatan untuk menunjukkan kepada pewawancara Anda apa yang dapat Anda lakukan ketika dihadapkan dengan teknologi baru atau asing yang pada dasarnya akan terjadi di hampir setiap pekerjaan baru yang Anda ambil.

Meskipun demikian, Anda tidak perlu menemukan kembali rodanya. Untuk Breadwinnerss, saya memilih Javascript full stack karena itu adalah sesuatu yang membuat saya nyaman, namun saya memilih hampir semua kerangka kerja dan alat baru untuk digunakan. Saya menggunakan Node dan perpustakaan scraping yang disebut Cheerio dan Puppeteer untuk membuat scraper. Saya menerapkannya ke fungsi Google Cloud yang berjalan setiap hari. Skrip scraper itu sendiri menggores halaman karier masing-masing perusahaan dengan fungsi scraper khusus yang saya buat dan menyimpan semua hasil tersebut ke file dalam bucket AWS S3. Bagian aplikasi web Breadwinnerss juga dibangun menggunakan “Node”, dengan “express” sebagai kerangka perutean dan “Postgres” sebagai database. Bagian depan dibuat menggunakan Vue.js. Aplikasi web membaca pekerjaan yang diambil dari s3 dan menyajikannya ke ujung depan. Ia hidup di Heroku.

filterDepts (data, $) {
  // needed to capture the class instance (at this point the ‘this’    context) which becomes the document in the cheerio callbacks ‘this’ context
  const that = this
  const filteredDepts = data.filter(function () {
    const dept = $(this).closest(‘.ptor-jobs-list__department-section’).find(‘h2’).text()
    return utils.myFilter(that.targetDepts, that.badDepts, dept)
  })
  const ret = []
  filteredDepts.each(function () {
    const jobTitle = $(this).find(‘a’).text()
    const url = $(this).find(‘a’).attr(‘href’)
    const location = $(this).find(‘.ptor-jobs-list__item-location’).text()
    ret.push({
      jobTitle,
      location,
      url
    })
  })
  return ret
}
filterJobs (jobs) {
  return _.filter(jobs, (job) => _.includes(usCities, job.location))
}

Tekankan tantangan dan solusi teknis

Secara umum, wawancara teknologi pada dasarnya adalah salah satu simulasi latihan pemecahan masalah yang besar. Bisakah Anda memecahkan masalah? Bisakah kamu belajar dengan cepat? Bisakah Anda terjun ke lingkungan yang berubah-ubah dan beradaptasi? Penting untuk menekankan bagaimana Anda memecahkan masalah teknis saat membangun proyek Anda — ini akan mengurangi banyak tekanan selama wawancara.

Salah satu perubahan terbesar yang kami lakukan pada arsitektur aplikasi adalah mengubah cara dan waktu pengikisan sebenarnya terjadi. Saat kami memulai, bukti awal konsep hanya untuk Nis dan menghapus 8-10 perusahaan dari jaringannya. Tentu saja, saya baru saja menghapus setiap perusahaan di halaman feed Nis 'Breadwinnerss. Scraper tersebut digabungkan dengan kode aplikasi web dan akan mendapatkan daftar pekerjaan terbaru setiap kali seseorang mengunjungi feed. Ini sebenarnya berhasil bagi kami selama beberapa waktu dan melakukan hal itu karena MVP memungkinkan kami merilis versi awal yang berfungsi. Beberapa orang mungkin berpikir bahwa mempelajari 5 hal sekaligus dan menyempurnakan tumpukan teknologi sebelum rilis akan terlihat sangat mengesankan, tetapi sering kali, hal itu hanya menghalangi Anda untuk merilisnya.

Itu baik-baik saja sampai kami mengumpulkan sekitar 20 perusahaan. Pada saat itu, permintaan untuk pekerjaan yang dihapus membutuhkan waktu lebih lama dari waktu maksimum yang diperbolehkan Heroku untuk permintaan tersebut (sekitar 30 detik). Saat itulah kami memutuskan untuk menyimpan hasil setiap goresan dalam file di bucket S3. Kami juga memindahkan kode scraper ke dalam modul mandiri yang kami terapkan ke fungsi cloud Google untuk dijalankan pada cron harian. Semua ini memungkinkan feed dimuat dengan cepat dan ~100 perusahaan yang sekarang kami sertakan dalam scrape kami setiap malam.

async function processCompanies (browser, companies) {
  const processedCompanies = []
  for (const connectorCompany of companies) {
    const { target_jobs, bad_jobs, target_depts, bad_depts, module_name, scrape_url, base_url, companies_name, company_url, type } = connectorCompany
    console.log(`Scraping ${module_name}…`)
    const companyModule = require(`./companies/${module_name}.js`)
    const connectorCompanyModule = new companyModule(target_jobs, bad_jobs, target_depts, bad_depts, scrape_url, base_url, companies_name, company_url, type)
    const result = await scrape(connectorCompanyModule, browser)
    processedCompanies.push(result)
  }
  return processedCompanies
}

Pamerkan proyek di resume Anda

Sebagian besar pengembang sudah memasukkan profil GitHub mereka di resume mereka. Jika proyek Anda berada dalam repo publik, perekrut yang cerdas dapat memeriksanya. Tapi itu pada dasarnya mengubur sesuatu yang memberi Anda keunggulan signifikan.

Saya sarankan untuk membuat bagian khusus untuk menyebutkan proyek Anda, teknologi mutakhir apa pun yang digunakan untuk membangunnya, dan daya tarik pasar atau validasi apa pun yang Anda miliki seperti jumlah pengguna atau bahkan pendapatan.

Kesimpulan utama

Singkatnya, berikut adalah 4 tip utama saya dalam membangun proyek sampingan:

1. Temukan dan pecahkan masalah yang menarik.
2. Gunakan proyek ini sebagai peluang untuk mencoba teknologi baru.
3. Ulangi! Buat prototipe cepat dalam waktu kurang dari sebulan, lalu tingkatkan berdasarkan masukan pengguna.
4. Berkolaborasilah dengan teman yang biasanya tidak Anda ajak bekerja sama. Proyek sampingan tidak harus sepi!

Lihat kodenya di github!

Kami merasa penting untuk mempublikasikan kode ini sehingga orang lain dapat belajar dari cara kami membangun proyek ini. Periksalah di github dan beri tahu kami pendapat Anda.