Tuesday, 28 August 2012
Short Story tentang Mahasiswa ITB yang Internship di Facebook part 2
Yeah, part 2. Bagi yang belum baca part 1 nya, silakan dibaca di sini.
------------------------------------- START OF PART 2 ---------------------------------------
Jam delapan pagi. Hari ini saya hanya tidur dua jam. Saya ingat jam delapan pada dua tahun lalu memiliki arti khusus. Jam delapan pada dua tahun lalu adalah saat saya mendapatkan keputusan bahwa saya diterima untuk internship di Facebook.
Dua minggu berselang saya mendapatkan keputusan bahwa saya lolos interview pertama. Tidak ada kabar dari Kinh. Saat itu saya sedang mengikuti kompetisi pemrograman Gemastik bersama Irvan dan Karol di Surabaya. Kami hanya mendapatkan juara dua saat itu. Pada malam harinya saya memutuskan untuk meminjam internet dari Karol untuk mengecek email. Diluar dugaan, ternyata ada email dari Natalie (recruiter yang menjadwalkan interview saya) yang menyatakan bahwa saya sudah dijadwalkan untuk interview besok. Saya langsung panik karena saya masih di Surabaya dan saat itu internet tidak memadai. Saya langsung meng-email Natalie tentang situasi saya dan kami setuju untuk melakukan interview lusa tengah malam saat saya sudah pulang ke Bandung.
Singkat cerita saya ditelepon pada tengah malam. Lagi-lagi suara seorang pria terdengar sebagai lawan bicara saya. Basa-basi yang ia lakukan jauh lebih singat dan ia langsung memberikan pertanyaan. Ia memberikan tiga buah pertanyaan yang menurut saya cenderung lebih mudah dari interview sebelumnya. Dari hasil pembelajaran pada interview sebelumnya, setelah saya memberikan solusi, saya langsung memberikan test case bagaimana saya menguji solusi saya. Interview ini berakhir dengan sangat lancar.
Malam itu saya tidak bisa tidur cepat. Saya terlalu excited karena saya yakin interview kali ini sangat sukses. Setelah bermain DoTA satu ronde dan melanjutkan membuat proyek sejenak, saya tidur pukul 4 pagi.
Jam delapan pagi saya bangun. Saya mendapat email dari Kinh yang mengatakan bahwa ia ingin menelepon saya sekarang. Kebetulan email itu baru dikirim setengah jam yang lalu. Saya segera membalas bahwa saya sudah bangun dan siap ditelepon. Dan pada saat itu ia menyatakan bahwa saya lolos interview dan sekaligus terpilih sebagai intern musim panas di Facebook periode 2011.
Saya sangat senang. Saya melompat-lompat kegirangan seperti kangguru, atau kelinci, atau belalang, atau apapun yang melompat-lompat. Alwi yang sepertinya baru bangun bertanya: "Ada apa to, Go?" Dan saya ceritakan bahwa saya lolos interview di Facebook. Singkat setelahnya satu kontrakan (yang berisi 5 orang) menyelamati saya. Saat itu saya merasa bahwa saya telah menaklukkan dunia.
Berita menyebar sangat cepat. Saya yakin saya tidak pernah menceritakan tentang diterimanya saya di Facebook selain kepada keluarga saya dan beberapa teman baik saya (dan status Facebook yang sangat implisit). Namun bahkan rekan proyek saya dari SBM mengenali saya sebagai orang yang akan intern di Facebook.
Bukannya saya tidak suka menjadi orang populer, tapi saya merasa terganggu dengan hal ini. Selain orang-orang menjadi memiliki ekspektasi berlebihan terhadap saya dan memberikan stereotype yang sampai saat ini saya pegang: orang Facebook, Facebook-er, or such. Saya tidak menyukai hal ini. Apabila seorang teman mengingat saya, saya ingin ia mengingat saya sebagai teman berjuang bersama, teman bermain DoTA, teman dengan sense musik yang sama; bukan sebagai manusia unknown yang pernah bekerja di Facebook.
Dari sini saya menghabiskan banyak waktu menyiapkan visa. Masalah pertama adalah: paspor saya akan kadaluarsa pada waktu internship, padahal internship-nya masih lama. Hal ini membuat paspor saya tidak dapat diperbaharui (karena belum waktunya). Namun saya tidak punya waktu untuk menunggu hingga paspor-nya kadaluarsa karena mengurus visa membutuhkan waktu yang cukup lama. Akhirnya saya berhasil membuat paspor dengan memalsukan bahwa "paspor saya hilang." Dengan cara ini saya berhasil mendapat paspor baru.
Setelah mengurus paspor, saya mengurus tiket untuk pulang-pergi. Facebook saat itu bekerjasama dengan Carlson Wagonlit untuk masalah transportasi. Saya hanya perlu memberikan tanggal, tujuan dan informasi paspor dan saya mendapatkan tiket pulang-pergi gratis.
Setelah itu saya mengurus visa ke CDS (sekarang Cultural Vitae). Saya diharuskan memiliki transkrip dan surat pernyataan bahwa saya masih kuliah di ITB. Setelah itu saya mengisi essay mengenai mengapa saya ingin ke US, apa yang saya harapkan dari internship di US, dan essay-essay sejenis. Proses ini diakhiri dengan interview singkat dari CDS untuk memastikan saya bisa berbahasa Inggris dengan baik dan benar.
Proses terakhir adalah proses yang paling menyebalkan, mengurus visa ke kedubes. Banyak form yang harus diisi, dokumen yang harus dibawa dan ketentuan yang perlu dipatuhi. Singkat cerita setelah mendapatkan dokumen-dokumen yang dibutuhkan, membuat pas foto dan membayar fee, saya harus pergi ke kedubes pukul 6 pagi untuk interview. Disana saya masih harus menunggu hingga pukul 11 siang untuk mendapatkan interview. Mengantri untuk interview cukup menegangkan. Hal ini dikarenakan 3 orang didepan saya tidak diterima aplikasi visa-nya (ya, interview-nya terbuka). Saya tidak terlalu ingat alasannya. Saya yang mengantri diakhir barisan menjadi grogi. Namun ternyata aplikasi visa saya diterima dengan cepat.
Pada akhir April saya sudah siap. Paspor baru, tiket pesawat untuk pulang-pergi, apartemen yang sudah disewakan kan oleh Facebook selama 3 bulan, dan visa sudah ditangan. Tepat ketika saya merasa cukup siap dari segi non-teknis, HR Facebook mengontak saya dan memberi tahu tim dimana saya akan bekerja dan mentor yang akan "mengurus"saya selama 3 bulan. Everything finally fell in its places and I was very excited.
Dengan sigap saya langsung mengontak mentor saya, Chris Tice. Yang pertama saya lakukan tentu mengirim dia email. Kebetulan ketika saya mengirim email itu Chris sedang ulang tahun. Jadi selain perkenalan saya sekaligus menyelamati dia. Setelah itu saya langsung add dia sebagai friend, dan mengirim beberapa pesan-pesan perkenalan.
Diluar dugaan, yang ia balas pertama kali adalah email. Ia berterima kasih dan menyebutkan bahwa saya akan bekerja di proyek yang namanya tidak bisa saya sebutkan. Ia juga memberitahu saya tools dan framework yang harus saya pelajari (yang tidak bisa saya sebutkan juga). Saya lalu menghabiskan beberapa hari untuk mempelajari framework yang diberikan. Sayangnya karena framework tersebut masih baru dan dokumentasinya minim, saya mengalami kesulitan untuk mendapatkan esensi dari framework tersebut.
Dengan sebuah koper besar penuh baju, laptop mini yang tidak bisa di-charge, kemampuan berbicara Bahasa Inggris yang pas-pasan dan pengetahuan tentang medan pertempuran di Facebook yang minim, saya berangkat ke US pada tanggal 17 Juni 2011.
--------------------------------------- END OF PART 2 ---------------------------------------
Wah yang ini mulai gak niat nulis-nya. Nulis-nya di-postpone dulu deh biar quality nya sama dengan sebelumnya >.<
Wednesday, 1 August 2012
Random thought July
Busy these days :(
- [Android] Apparently when you clean your Android project on Eclipse, it will generate new id on R.java. And there's this small probability it will make your app works on some OS and crash on the other. Fuck!
- Akhir-akhir ini sering kagum dengan beberapa pekerjaan where my code "just work. Dimana kode-nya kadang-kadang bekerja lebih bagus dari perkiraan. This is not exactly a good thing tapi kejutannya cukup menyenangkan :).
- Punya ide startup yang cukup solid. Moga-moga ada waktu untuk nyicil.
- Dapat ide aplikasi mobile. Sangat simple. Moga-moga tidak di-banned oleh Google Play nanti :(
- [Facebook] Hackathon di Facebook! Niatnya gak mau ikut lagi. Tapi gara-gara Hendri >.<
Saturday, 28 July 2012
Short Story tentang Mahasiswa ITB yang Internship di Facebook part 1
Warning: tulisan ini banyak berisi ratapan dan kegalauan seorang mahasiswa. Tidak dianjurkan dibaca saat anda sedang bahagia.
------------------------------------- START OF PART 1 ---------------------------------------
Sruput. Mie instan dua bungkus sedang saya lahap sebagai sahur saya untuk persiapan puasa hari ini. Hari ini tanggal 28 Juli 2012. Sebentar lagi subuh di Palo Alto dan saya sedang merenung karena seringnya ditanya oleh teman-teman: bagaimana cara bisa internship di Facebook? Bagaimana rasanya?
Saya ingat 2 tahun lalu ketika saya masih tingkat 3 awal, saya sibuk sekali mengerjakan banyak hal. Proyek, mengajar untuk TOKI, himpunan, dan kerja part-time. Saya hampir tidak peduli dengan kuliah. Merenungi saat-saat itu saya jadi merasa bahwa saat itu saya sedang mencari jati diri saya. Namun saya yakin, diri saya yang dahulu hanya memiliki satu pikiran: "jalani saja apa yang diberikan oleh dunia kepadamu." Hingga saat ini pun saya masih berpikir demikian.
Istilah internship masih asing bagi saya saat itu. Saya hanya berpikir bahwa internship di Facebook berarti kita akan pergi ke Facebook untuk belajar. Namun ternyata internship di Facebook berarti kita akan pergi ke Facebook untuk bekerja.
Dan saat-saat itulah saya mendengar kabar bahwa salah satu teman saya, Irvan, sedang di-interview untuk internship di Facebook. Saya cukup mengenal Irvan. Saya kira-kira tahu dari mana ia mendapat tawaran tersebut dan saya yakin saya bukanlah orang yang qualified untuk hal tersebut. Apalagi saya tidak memiliki banyak pengalaman dalam berbicara Bahasa Inggris. Jadi ketika Irvan menawarkan saya untuk di-refer untuk interview, saya hanya angguk-angguk dan menerima email recruiter yang ia berikan ke saya. Toh, tidak ada salahnya saya menyimpan email orang yang tidak saya kenal barang satu atau dua.
Kebetulan kami yang sudah tingkat tiga akhir diharuskan untuk melakukan kerja praktek. Kerja praktek ini pada umumnya berlangsung sekitar satu sampai tiga bulan. Kerja praktek ini juga harus dilaksanakan di tempat yang "jelas." Saat itu saya sudah memiliki pekerjaan sambilan, yakni menjadi programmer untuk Zingmobile. Saat itu bekerja untuk Zingmobile merupakan pengalaman yang baru dan menyenangkan. Jadi saya tidak terlalu berpikir untuk mencari kerja di tempat lain dan saya merasa relatif aman.
Diluar dugaan Irvan tidak diterima untuk internship di Facebook. Tentu saja hal ini makin memantapkan saya untuk tidak mencoba. Saya adalah manusia yang sudah sering merasakan kegagalan dan kekecewaan. Saya memutuskan untuk melanjutkan kehidupan normal saya yang sudah cukup amburadul agar tidak perlu mengenal kegagalan lagi.
Namun perlu diketahui, setelah interview dengan Facebook, Irvan melakukan interview dengan Google dan diterima. Menurut saya itu adalah pencapaian yang luar biasa mengingat usahanya yang sangat keras mengejar materi tentang Computer Science dan Software Engineering dengan membaca banyak buku-buku berat. Saya pernah berusaha membaca satu-dua buku rekomendasinya dan tertidur dalam 40 halaman pertama.
Tidak lama setelah itu, sekitar bulan Agustus, saya mendengar bahwa Adhit juga mendaftar untuk interview di Facebook melalui link lain. Saya yakin Adhit pasti sudah mendengar berita tentang Irvan. Saya mengagumi keberanian Adhit untuk mencoba, sehingga saya juga terpacu untuk mencoba. Saat itu saya mulai mengerjakan Facebook puzzle.
Hari demi hari saya habiskan untuk meratapi dan melakukan problem solving yang sudah sekian lama tidak saya lakukan. Soal demi soal saya kerjakan dengan teknik OOP, yang tidak umum digunakan untuk problem solving. Hal ini dikarenakan saya lebih terbiasa menghadapi segala hal dari sudut pandang OOP. Saya teringat kembali bagaimana dahulu saya sempat mengalami masa-masa trance dimana saya hanya tidur dua jam selama tiga minggu berturut-turut hanya untuk mengerjakan USACO.
Setelah cukup yakin dengan apa yang saya raih dalam mengerjakan puzzle, pada bulan September saya memutuskan untuk meng-email recruiter yang diberikan oleh Irvan. Saya masih ingat bahwa email saya sangatlah awkward. Tidak ada perkenalan, tidak ada basa-basi. Tiba-tiba saya menyodorkan CV dan meminta untuk interview. Tidak lama setelah itu recruiter saya, Kinh, membalas. Ia menanyakan darimana saya mendapatkan emailnya, dan beberapa hal basa-basi yang lupa saya lakukan sebelumnya. Setelah bertukar beberapa email, Kinh memutuskan untuk menelpon saya untuk interview singkat via Skype.
Saya grogi ketika akan ditelepon. Ini pertama kalinya saya akan menggunakan Bahasa Inggris untuk keperluan kerja. Saya bahkan tidak pernah berbicara Bahasa Inggris lebih dari 5 menit sebelumnya. Ketika ditelepon, ternyata internet saya kurang kuat. Akhirnya kami berbicang menggunakan telepon asli. Walau suara-nya tidak terlalu jelas, namun logat Amerika Kinh sangat membantu saya untuk melakukan percakapan. Singkat cerita percakapan kami diakhiri dengan Kinh menyuruh saya untuk mengerjakan puzzle tersulit Facebook.
Cukup lama waktu yang saya habiskan untuk mengerjakan puzzle tersebut. Saya habiskan satu hari untuk memikir berbagai macam algoritma. Hari kedua saya habiskan untuk membuat implementasi dan mengirim solusi. Dua hari berikutnya saya gunakan untuk membenarkan solusi dan membuat solusi alternatif hingga akhirnya saya berhasil memecahkan puzzle tersebut. Malamnya saya langsung memberitahu Kinh bawa saya sudah menyelesaikan puzzle yang ditugaskan.
Dua hari kemudian Kinh mengatakan bahwa saya akan di interview teknis selama satu jam. Malam itu tidak terlalu dingin namun saya menggigil kediningan karena grogi dengan interview teknis pertama saya. Saya meminta teman sekontrakan saya untuk tidak menggunakan internet pada saat saya interview dan teman-teman saya yang baik menyetujuinya. Sehingga pada interview kali ini Skype berjalan dengan sempurna.
Kring...kring... suara notifikasi telepon di Skype berdering. Jadwal interview adalah pukul 00.30 dan telepon berdering tepat ketika waktu memasuki menit ke 30 pada hari itu. Sangat tepat waktu pikir saya. Yang menjadi lawan bicara saya adalah seorang pria, engineer Facebook yang sudah bekerja selama 2 tahun disana. Ia dengan santainya melakukan percakapan santai selama 2 menit. Setelah itu kita masuk ke real-deal nya, interview teknis.
Ia menyuruh saya membuka editor online yang dimana saya bisa membuat kode secara live disana dan ia dapat membacanya. Saat itu saya menggunakan Collabedit. Lalu ia memberikan sebuah pertanyaan. Saya habiskan beberapa menit untuk mengerjakan pertanyaan-nya dan beberapa menit untuk menjelaskan apa yang saya tulis di editor. Ia menanyakan test case apa yang saya gunakan untuk memastikan jawaban saya benar. Lalu saya memberikan beberapa test case dan ia baru yakin bahwa jawaban saya benar.
Lalu ia memberikan pertanyaan kedua. Pertanyaan kedua relatif lebih sulit dari yang pertama. Saya menghabiskan beberapa menit untuk memikirkan algoritmanya. Setelah mendapat secercah ide, saya langsung menuliskan solusi saya. Kali ini saya langsung memberikan test case yang saya gunakan untuk mengujinya. Namun saya mengalami kesulitan untuk menjelaskan algoritma yang saya gunakan dalam menyelesaikan pertanyaan kedua. Setelah beberapa menit berlalu, interviewer saya percaya dengan solusi saya.
Ia lalu bertanya apakah saya punya pertanyaan untuk dia. Saat itu saya menanyakan tentang bagaimana Facebook bisa menangani arus data yang sangat besar. Saya tidak ingat jawaban dari dia karena penjelasannya sangat rumit. Yang saya ingat adalah saya merasa excited dengan interview tersebut. Namun pada saat itu saya tidak memiliki harapan untuk lolos. Karena saya cukup meragukan apakah saya telah menjelaskan solusi terhadap pertanyaan kedua dengan baik atau tidak. Setelah menjelaskan tentang arus data di Facebook, kami menghentikan pembicaraan dan saya langsung tidur. Ngomong-ngomong soal tidur, saat ini sudah saatnya saya menarik selimut tebal saya yang empuk dan menikmati tidur.
--------------------------------------- END OF PART 1 ---------------------------------------
Hiyaa, maap kalau gayanya sok novelist tapi gak jadi. There's a first time for everything right? Btw nantikan part-2 nya :)
------------------------------------- START OF PART 1 ---------------------------------------
Sruput. Mie instan dua bungkus sedang saya lahap sebagai sahur saya untuk persiapan puasa hari ini. Hari ini tanggal 28 Juli 2012. Sebentar lagi subuh di Palo Alto dan saya sedang merenung karena seringnya ditanya oleh teman-teman: bagaimana cara bisa internship di Facebook? Bagaimana rasanya?
Saya ingat 2 tahun lalu ketika saya masih tingkat 3 awal, saya sibuk sekali mengerjakan banyak hal. Proyek, mengajar untuk TOKI, himpunan, dan kerja part-time. Saya hampir tidak peduli dengan kuliah. Merenungi saat-saat itu saya jadi merasa bahwa saat itu saya sedang mencari jati diri saya. Namun saya yakin, diri saya yang dahulu hanya memiliki satu pikiran: "jalani saja apa yang diberikan oleh dunia kepadamu." Hingga saat ini pun saya masih berpikir demikian.
Istilah internship masih asing bagi saya saat itu. Saya hanya berpikir bahwa internship di Facebook berarti kita akan pergi ke Facebook untuk belajar. Namun ternyata internship di Facebook berarti kita akan pergi ke Facebook untuk bekerja.
Dan saat-saat itulah saya mendengar kabar bahwa salah satu teman saya, Irvan, sedang di-interview untuk internship di Facebook. Saya cukup mengenal Irvan. Saya kira-kira tahu dari mana ia mendapat tawaran tersebut dan saya yakin saya bukanlah orang yang qualified untuk hal tersebut. Apalagi saya tidak memiliki banyak pengalaman dalam berbicara Bahasa Inggris. Jadi ketika Irvan menawarkan saya untuk di-refer untuk interview, saya hanya angguk-angguk dan menerima email recruiter yang ia berikan ke saya. Toh, tidak ada salahnya saya menyimpan email orang yang tidak saya kenal barang satu atau dua.
Kebetulan kami yang sudah tingkat tiga akhir diharuskan untuk melakukan kerja praktek. Kerja praktek ini pada umumnya berlangsung sekitar satu sampai tiga bulan. Kerja praktek ini juga harus dilaksanakan di tempat yang "jelas." Saat itu saya sudah memiliki pekerjaan sambilan, yakni menjadi programmer untuk Zingmobile. Saat itu bekerja untuk Zingmobile merupakan pengalaman yang baru dan menyenangkan. Jadi saya tidak terlalu berpikir untuk mencari kerja di tempat lain dan saya merasa relatif aman.
Diluar dugaan Irvan tidak diterima untuk internship di Facebook. Tentu saja hal ini makin memantapkan saya untuk tidak mencoba. Saya adalah manusia yang sudah sering merasakan kegagalan dan kekecewaan. Saya memutuskan untuk melanjutkan kehidupan normal saya yang sudah cukup amburadul agar tidak perlu mengenal kegagalan lagi.
Namun perlu diketahui, setelah interview dengan Facebook, Irvan melakukan interview dengan Google dan diterima. Menurut saya itu adalah pencapaian yang luar biasa mengingat usahanya yang sangat keras mengejar materi tentang Computer Science dan Software Engineering dengan membaca banyak buku-buku berat. Saya pernah berusaha membaca satu-dua buku rekomendasinya dan tertidur dalam 40 halaman pertama.
Tidak lama setelah itu, sekitar bulan Agustus, saya mendengar bahwa Adhit juga mendaftar untuk interview di Facebook melalui link lain. Saya yakin Adhit pasti sudah mendengar berita tentang Irvan. Saya mengagumi keberanian Adhit untuk mencoba, sehingga saya juga terpacu untuk mencoba. Saat itu saya mulai mengerjakan Facebook puzzle.
Hari demi hari saya habiskan untuk meratapi dan melakukan problem solving yang sudah sekian lama tidak saya lakukan. Soal demi soal saya kerjakan dengan teknik OOP, yang tidak umum digunakan untuk problem solving. Hal ini dikarenakan saya lebih terbiasa menghadapi segala hal dari sudut pandang OOP. Saya teringat kembali bagaimana dahulu saya sempat mengalami masa-masa trance dimana saya hanya tidur dua jam selama tiga minggu berturut-turut hanya untuk mengerjakan USACO.
Setelah cukup yakin dengan apa yang saya raih dalam mengerjakan puzzle, pada bulan September saya memutuskan untuk meng-email recruiter yang diberikan oleh Irvan. Saya masih ingat bahwa email saya sangatlah awkward. Tidak ada perkenalan, tidak ada basa-basi. Tiba-tiba saya menyodorkan CV dan meminta untuk interview. Tidak lama setelah itu recruiter saya, Kinh, membalas. Ia menanyakan darimana saya mendapatkan emailnya, dan beberapa hal basa-basi yang lupa saya lakukan sebelumnya. Setelah bertukar beberapa email, Kinh memutuskan untuk menelpon saya untuk interview singkat via Skype.
Saya grogi ketika akan ditelepon. Ini pertama kalinya saya akan menggunakan Bahasa Inggris untuk keperluan kerja. Saya bahkan tidak pernah berbicara Bahasa Inggris lebih dari 5 menit sebelumnya. Ketika ditelepon, ternyata internet saya kurang kuat. Akhirnya kami berbicang menggunakan telepon asli. Walau suara-nya tidak terlalu jelas, namun logat Amerika Kinh sangat membantu saya untuk melakukan percakapan. Singkat cerita percakapan kami diakhiri dengan Kinh menyuruh saya untuk mengerjakan puzzle tersulit Facebook.
Cukup lama waktu yang saya habiskan untuk mengerjakan puzzle tersebut. Saya habiskan satu hari untuk memikir berbagai macam algoritma. Hari kedua saya habiskan untuk membuat implementasi dan mengirim solusi. Dua hari berikutnya saya gunakan untuk membenarkan solusi dan membuat solusi alternatif hingga akhirnya saya berhasil memecahkan puzzle tersebut. Malamnya saya langsung memberitahu Kinh bawa saya sudah menyelesaikan puzzle yang ditugaskan.
Dua hari kemudian Kinh mengatakan bahwa saya akan di interview teknis selama satu jam. Malam itu tidak terlalu dingin namun saya menggigil kediningan karena grogi dengan interview teknis pertama saya. Saya meminta teman sekontrakan saya untuk tidak menggunakan internet pada saat saya interview dan teman-teman saya yang baik menyetujuinya. Sehingga pada interview kali ini Skype berjalan dengan sempurna.
Kring...kring... suara notifikasi telepon di Skype berdering. Jadwal interview adalah pukul 00.30 dan telepon berdering tepat ketika waktu memasuki menit ke 30 pada hari itu. Sangat tepat waktu pikir saya. Yang menjadi lawan bicara saya adalah seorang pria, engineer Facebook yang sudah bekerja selama 2 tahun disana. Ia dengan santainya melakukan percakapan santai selama 2 menit. Setelah itu kita masuk ke real-deal nya, interview teknis.
Ia menyuruh saya membuka editor online yang dimana saya bisa membuat kode secara live disana dan ia dapat membacanya. Saat itu saya menggunakan Collabedit. Lalu ia memberikan sebuah pertanyaan. Saya habiskan beberapa menit untuk mengerjakan pertanyaan-nya dan beberapa menit untuk menjelaskan apa yang saya tulis di editor. Ia menanyakan test case apa yang saya gunakan untuk memastikan jawaban saya benar. Lalu saya memberikan beberapa test case dan ia baru yakin bahwa jawaban saya benar.
Lalu ia memberikan pertanyaan kedua. Pertanyaan kedua relatif lebih sulit dari yang pertama. Saya menghabiskan beberapa menit untuk memikirkan algoritmanya. Setelah mendapat secercah ide, saya langsung menuliskan solusi saya. Kali ini saya langsung memberikan test case yang saya gunakan untuk mengujinya. Namun saya mengalami kesulitan untuk menjelaskan algoritma yang saya gunakan dalam menyelesaikan pertanyaan kedua. Setelah beberapa menit berlalu, interviewer saya percaya dengan solusi saya.
Ia lalu bertanya apakah saya punya pertanyaan untuk dia. Saat itu saya menanyakan tentang bagaimana Facebook bisa menangani arus data yang sangat besar. Saya tidak ingat jawaban dari dia karena penjelasannya sangat rumit. Yang saya ingat adalah saya merasa excited dengan interview tersebut. Namun pada saat itu saya tidak memiliki harapan untuk lolos. Karena saya cukup meragukan apakah saya telah menjelaskan solusi terhadap pertanyaan kedua dengan baik atau tidak. Setelah menjelaskan tentang arus data di Facebook, kami menghentikan pembicaraan dan saya langsung tidur. Ngomong-ngomong soal tidur, saat ini sudah saatnya saya menarik selimut tebal saya yang empuk dan menikmati tidur.
--------------------------------------- END OF PART 1 ---------------------------------------
Hiyaa, maap kalau gayanya sok novelist tapi gak jadi. There's a first time for everything right? Btw nantikan part-2 nya :)
Sunday, 15 July 2012
Perbandingan Performa SharedPreferences dan SQLite
Yup bersama saya lagi bermain-main dengan Android! Kali ini saya ingin membahas tentang SharedPreferences dan SQLite sebagai pilihan untuk menyimpan data pada Android.
Pembuat aplikasi Android pasti suatu saat akan menemui suatu permasalahan tentang penyimpanan data. Bagaimana cara menyimpan data? Bagaimana data itu disimpan? Dimana harus disimpan? Jawaban dari pertanyaan itu dapat dijawab dengan membaca tutorial Android disini. Menurut saya tutorial itu sudah cukup memberikan pengantar yang cukup untuk memulai merambah dunia simpan-menyimpan di Android (sehubungan dengan simpan-menyimpan, saya jadi ingat dengan "simpanan" saya. Tapi itu untuk lain cerita).
Apabila si pembuat aplikasi ini sudah mulai advance, ia akan mulai bingung antara "apakah saya harus menggunakan SharedPreferences atau kah saya harus menggunakan SQLite?" dengan asumsi kita tidak memperdulikan penyimpanan di storage (internal maupun eksternal). Karena sudah dipastikan penyimpanan di storage itu lambat (akan disinggung sedikit nanti mengapa penyimpanan di storage itu lambat). Seperti kita ketahui, SharedPreferences hanya dapat menyimpan data dalam bentuk key-value pair sehingga mudah dimodifikasi. Sedangkan SQLite hanya dapat diubah dengan membuat query SQL.
Di sebuah post di StackOverflow sudah dibahas tipe penyimpanan mana yang harus anda gunakan pada suatu kondisi tertentu. Inti dari post itu adalah: Gunakan SharedPreferences bila data-nya kecil dan bermacam-macam. Gunakan SQLite bila data-nya besar, terstruktur dan sedikit macam-nya. Contoh data yang ingin anda simpan di SharedPreferences adalah: "opsi apakah user ingin mendapatkan notifikasi", "opsi apakah user hanya ingin mengunduh data dari internet ketika terhubung dengan wireless", "berapa kali notifikasi harus dilakukan tiap hari" dan berbagai macam data yang kecil yang lain. Contoh data yang ingin anda simpan di SQLite adalah: "daftar manga yang di bookmark oleh user", "contact list", "kumpulan teman-teman yang baru saja saya miss-call" dan berbagai macam data yang terstruktur yang lain.
Namun anda yang suka bermain Javascript atau fanatik dengan JSON akan berargumen: "Bitch please! Saya bisa mengubah data saya, misalnya Manga, menjadi sebuah JSON lalu saya simpan ke SharedPreferences. Manga saya nanti punya sebuah key, misal URL darimana Manga tersebut diambil, untuk mendapatkan Manga yang saya mau dari SharedPreferences dengan mudah. Solusi ini mudah dibuat dan sangat mudah dikembangkan! Semua-nya jadi rata ke SharedPreferences! Screw SQL!"
Baik saya sangat setuju bahwa dengan SharedPreferences pasti perlu digunakan (untuk setting, konstanta-konstanta kecil, menyimpan versi terakhir yang digunakan, menyimpan waktu update dari internet terakhir kali, dan lain sebagainya). Sedangkan seperti yang telah disebutkan diatas, SQLite tidak sepenuhnya dibutuhkan dengan alasan struktur yang kita butuhkan dapat dikompres dengan mudah kedalam JSON lalu kita simpan sebagai String biasa. Tapi bagaimana kalau kita tinjau dari segi performa?
Pertama SharedPreference akan makin lambat seiring dengan banyak-nya data yang disimpan dalam SharedPreference tersebut. Lambat disini hanya terjadi saat aplikasi mulai dijalankan. Misal anda menyimpan segala sesuatu di SharedPreference SPMangaMobile. Maka suatu saat apabila terlalu banyak Manga yang anda simpan di SPMangaMobile ini, untuk bisa me-load opsi-opsi trivial seperti "kapan terakhir kali aplikasi ini di-update" akan memakan waktu sangat lama. Samsung Galaxy Mini saya merasakan 5 detik startup hanya untuk memulai aplikasi karena saya menggunakan cara ini.
"Kalau begitu, pisahkan saja SharedPreference yang bersifat struktural, seperti Manga, ke SPManga. Sedangkan untuk yang lain, masukkan ke SPMangaMobile." In a way, solusi ini cukup benar sampai anda punya 1 MegaByte data. Me-load 300kB data saja membutuhkan waktu hingga hampir 1200 ms! Dan ini dilakukan di Android yang tidak sembarangan: Galaxy Tab 8.9" dengan processor Tegra 2 dual core 1 GHz! Bayangkan berapa lama waktu yang dibutuhkan di Galaxy Mini?
Wow. Pengguna Android sekarang pasti akan mulai membanting HP-nya apabila HP-nya berhenti me-respon dalam waktu lebih dari 3 detik (ya, pengguna Android se-tidak-sabaran itu). "Nexus gw gak mungkin selambat itu! Yang lambat itu cuma BB!" Baik, coba tunjukkan waktu yang dibutuhkan bila menggunakan SQLite! Segera komandan!
Ya, bisa anda lihat bahwa performa menggunakan SQLite tidak berbeda jauh dari menggunakan SharedPreference. Lalu apa gunanya donk kita menggunakan SQLite? Tunggu dulu! Mari kita simak lagi.
Berbeda dengan apabila kita menggunakan JSON terstruktur pada SharedPreferences, pada SQLite kita bisa mengambil data-data yang kita perlukan saja (dengan menspesifikasikan query yang tepat). Misalnya untuk kasus ini, saya hanya ingin mengambil judul, url, dan rating dari suatu Manga. Saya tidak peduli dengan deskripsi, genre, maupun data-data yang lain. Tentu hal ini bisa meningkatkan performa! Tapi sebesar apa? Mari kita lihat!
Yes! Akhirnya peningkatan performa! Kali ini aplikasi dapat me-load data dalam waktu hanya 231ms saja! Tiga kali lebih cepat dibandingkan sebelumnya!
Dari percobaan ini saya kembali ke kesimpulan yang sebelumnya telah dibuat oleh suatu post di StackOverflow : Gunakan SharedPreferences bila data-nya kecil dan bermacam-macam. Gunakan SQLite bila data-nya besar, terstruktur dan sedikit macam-nya.
Sekian dari saya. Seperti biasa, komentar dan tanggapan sangat diterima :)
Pembuat aplikasi Android pasti suatu saat akan menemui suatu permasalahan tentang penyimpanan data. Bagaimana cara menyimpan data? Bagaimana data itu disimpan? Dimana harus disimpan? Jawaban dari pertanyaan itu dapat dijawab dengan membaca tutorial Android disini. Menurut saya tutorial itu sudah cukup memberikan pengantar yang cukup untuk memulai merambah dunia simpan-menyimpan di Android (sehubungan dengan simpan-menyimpan, saya jadi ingat dengan "simpanan" saya. Tapi itu untuk lain cerita).
Apabila si pembuat aplikasi ini sudah mulai advance, ia akan mulai bingung antara "apakah saya harus menggunakan SharedPreferences atau kah saya harus menggunakan SQLite?" dengan asumsi kita tidak memperdulikan penyimpanan di storage (internal maupun eksternal). Karena sudah dipastikan penyimpanan di storage itu lambat (akan disinggung sedikit nanti mengapa penyimpanan di storage itu lambat). Seperti kita ketahui, SharedPreferences hanya dapat menyimpan data dalam bentuk key-value pair sehingga mudah dimodifikasi. Sedangkan SQLite hanya dapat diubah dengan membuat query SQL.
![]() |
| Ini ngomongin apa sih? Saya maunya pake Hadoop saja >:) |
Namun anda yang suka bermain Javascript atau fanatik dengan JSON akan berargumen: "Bitch please! Saya bisa mengubah data saya, misalnya Manga, menjadi sebuah JSON lalu saya simpan ke SharedPreferences. Manga saya nanti punya sebuah key, misal URL darimana Manga tersebut diambil, untuk mendapatkan Manga yang saya mau dari SharedPreferences dengan mudah. Solusi ini mudah dibuat dan sangat mudah dikembangkan! Semua-nya jadi rata ke SharedPreferences! Screw SQL!"
![]() |
| JSON can save the world! JSON can even kill and fight Freddy! |
Pertama SharedPreference akan makin lambat seiring dengan banyak-nya data yang disimpan dalam SharedPreference tersebut. Lambat disini hanya terjadi saat aplikasi mulai dijalankan. Misal anda menyimpan segala sesuatu di SharedPreference SPMangaMobile. Maka suatu saat apabila terlalu banyak Manga yang anda simpan di SPMangaMobile ini, untuk bisa me-load opsi-opsi trivial seperti "kapan terakhir kali aplikasi ini di-update" akan memakan waktu sangat lama. Samsung Galaxy Mini saya merasakan 5 detik startup hanya untuk memulai aplikasi karena saya menggunakan cara ini.
"Kalau begitu, pisahkan saja SharedPreference yang bersifat struktural, seperti Manga, ke SPManga. Sedangkan untuk yang lain, masukkan ke SPMangaMobile." In a way, solusi ini cukup benar sampai anda punya 1 MegaByte data. Me-load 300kB data saja membutuhkan waktu hingga hampir 1200 ms! Dan ini dilakukan di Android yang tidak sembarangan: Galaxy Tab 8.9" dengan processor Tegra 2 dual core 1 GHz! Bayangkan berapa lama waktu yang dibutuhkan di Galaxy Mini?
![]() |
| Tiap kali pengguna memulai aplikasi, pengguna harus menunggu selama 516 ms untuk mempersiapkan SharedPreferences. Another 720 ms untuk mendapatkan data yang dibutuhkan. |
![]() | |
|
![]() | |
|
Berbeda dengan apabila kita menggunakan JSON terstruktur pada SharedPreferences, pada SQLite kita bisa mengambil data-data yang kita perlukan saja (dengan menspesifikasikan query yang tepat). Misalnya untuk kasus ini, saya hanya ingin mengambil judul, url, dan rating dari suatu Manga. Saya tidak peduli dengan deskripsi, genre, maupun data-data yang lain. Tentu hal ini bisa meningkatkan performa! Tapi sebesar apa? Mari kita lihat!
![]() | |
|
Dari percobaan ini saya kembali ke kesimpulan yang sebelumnya telah dibuat oleh suatu post di StackOverflow : Gunakan SharedPreferences bila data-nya kecil dan bermacam-macam. Gunakan SQLite bila data-nya besar, terstruktur dan sedikit macam-nya.
Sekian dari saya. Seperti biasa, komentar dan tanggapan sangat diterima :)
Subscribe to:
Posts (Atom)






