Rasa takut dari web-app tidak menjadi "masa depan-bukti"

I'm web developer kecil, lokal SaaS aplikasi web. Saat ini memiliki sekitar setengah lusin klien.

Seperti yang saya melanjutkan untuk merancang aplikasi,'s menjadi semakin sulit bagi saya untuk meyakinkan diri saya sendiri untuk melakukan setiap saat untuk proyek ini, yang telah terjadi di awal fase. Setelah tumbuh melekat pada proyek dan kode I've sudah ditulis, saya'm takut bahwa semua pekerjaan tambahan saya komit akan terbalik di dekat masa depan, ketika aplikasi ternyata tidak baik skala sebagai bisnis tumbuh.

Sebagai seorang mahasiswa yang melamar untuk magang, saya've telah majikan pertanyaan pilihan saya dalam tidak menggunakan web framework selama wawancara, yang telah menyebabkan saya untuk lebih keraguan saya sebelumnya bekerja. Aku hanya don't tahu ada web framework, dan don't tahu di mana untuk mulai menggunakan.

I've mendarat magang sebagai full-stack pengembang pada bulan januari, di mana saya'll mulai belajar front-end framework, tapi tekanan untuk menyelesaikan aplikasi pemasangan, dan I'm mengingat scrapping aplikasi benar-benar dan mulai lagi dari awal, yang merupakan sesuatu yang saya've dilakukan sebelumnya. Saat ini aplikasi ini dibangun dengan PHP dan jQuery (untuk panggilan AJAX) dan menggunakan MySQL untuk database-nya. Pemikiran tentang bagaimana saya dapat mengatasi mental blok, dan untuk memastikan aplikasi saya akan dilipatgandakan? Terima kasih sebelumnya.

Mengomentari pertanyaan (18)

Sempurna adalah musuh yang baik.

Atau dengan kata lain, don't khawatir tentang hal itu hari ini. Jika aplikasi anda tidak apa yang perlu dilakukan, maka's baik-baik saja. It's tidak hal yang buruk untuk menulis ulang bagian-bagian dari perangkat lunak yang lebih bawah garis; pada saat itu anda 1) mengetahui lebih jelas apa yang anda're berusaha untuk membangun dan 2) mengetahui bit yang benar-benar kemacetan. Anda bisa menghabiskan sejumlah besar waktu untuk menulis sebuah aplikasi yang akan skala untuk satu juta pengguna, tapi itu tidak't akan ada yang lebih baik untuk anda saat ini enam pelanggan dari apa yang anda've punya hari ini.

Komentar (16)

pemikiran tentang bagaimana saya dapat mengatasi mental blok, dan untuk memastikan aplikasi saya akan dilipatgandakan? Inti dari masalah ini isn't skalabilitas. Inti dari masalah ini adalah berpikir bahwa anda akan bisa melakukannya dengan benar pertama kalinya. Anda harus fokus pada menulis kode yang bersih. Karena kode yang bersih memaksimalkan kenyamanan saat anda (mau tidak mau) harus mengubah sesuatu di masa depan. Dan yang's tujuan sebenarnya anda harus memiliki. Apa yang anda're coba lakukan sekarang adalah mencoba untuk memikirkan kode yang sempurna untuk menulis. Tetapi bahkan jika anda berhasil melakukan itu, siapa yang mengatakan persyaratan aren't akan berubah, atau mungkin anda membuat keputusan didasarkan pada informasi yang salah atau miskomunikasi? Anda tidak dapat menghindari membuat kesalahan, bahkan jika mereka're bukan kesalahan anda. Fokus pada penulisan kode yang's mudah untuk mengubah hal-hal yang kemudian, alih-alih berharap untuk menulis kode yang anda tidak't perlu perubahan di masa depan. Setelah tumbuh melekat pada proyek dan kode I've sudah tertulis, Aku benar-benar bersimpati dengan sentimen ini. Tapi semakin melekat pada kode anda've tertulis adalah masalah. Satu-satunya hal yang harus konstan adalah your keinginan untuk memecahkan tertentu problem. Bagaimana anda pergi tentang pemecahan masalah itu hanya sebuah perhatian sekunder. Jika besok alat baru ini dirilis yang mengurangi anda codebase sebesar 80%, anda akan menjadi marah bahwa kode anda tidak lagi digunakan, atau apakah anda akan senang bahwa anda codebase telah menjadi lebih kecil dan jauh lebih bersih/lebih mudah dikelola? Jika mantan anda memiliki masalah: anda're tidak melihat solusi untuk kode. Dengan kata lain, anda're berfokus pada kode dan tidak melihat gambaran yang lebih besar (solusi ini bertujuan untuk memberikan). I'm takut bahwa semua pekerjaan tambahan saya komit akan terbalik di dekat masa depan, ketika aplikasi ternyata tidak baik skala sebagai bisnis tumbuh. Itu adalah masalah yang berbeda untuk hari yang berbeda. Pertama, anda membangun sesuatu yang bekerja. Kedua, anda meningkatkan kode untuk memperbaiki setiap kekurangan yang mungkin masih menunjukkan. Apa yang anda're saat ini lakukan adalah memegang kembali pada tugas pertama karena takut maka harus melakukan tugas kedua. Tapi apa pilihan yang ada? Anda tidak bisa mengatakan masa depan. Jika anda menghabiskan waktu anda merenungkan kemungkinan di masa depan, anda're akan berakhir guessing pula. Menebak selalu rentan untuk menjadi salah mati. Sebaliknya, membangun aplikasi, dan prove bahwa memang ada masalah. Dan setelah masalah ini jelas, maka anda mulai menyikapi hal itu. Dengan kata lain: Henry Ford pernah membangun sebuah mobil yang sesuai dengan 2018 standar/harapan. Tapi jika dia tidak't dibangun Model T, cacat mobil dengan standar modern, tidak akan ada yang mulai menggunakan mobil, tidak akan ada industri mobil, dan tidak ada yang akan memiliki mobil yang mereka bisa maka cobalah untuk meningkatkan. I've telah majikan pertanyaan pilihan saya dalam tidak menggunakan web framework selama wawancara, yang telah menyebabkan saya untuk lebih keraguan saya sebelumnya bekerja. Bagian penting di sini adalah bukan yang framework anda're menggunakan (setiap majikan yang menghakimi anda pada yang tidak melakukan pekerjaan mereka dengan baik). Bagian penting di sini adalah mengetahui apa yang anda're lakukan dan mengapa anda're melakukannya. Misalnya, anda bisa menghindari ada kerangka khusus karena anda ingin belajar why kerangka ini berguna dengan melakukan itu dengan cara yang keras terlebih dahulu. Atau anda bisa mencoba untuk membuat sendiri framework. Satu-satunya jawaban buruk di sini adalah "aku't tahu", karena hal itu menunjukkan kurangnya membuat keputusan. Bahwa sebuah _is bendera merah untuk majikan. aku hanya don't tahu ada web framework, dan don't tahu di mana untuk mulai menggunakan. Masalah yang sama muncul di sini. Solusinya adalah untuk tidak berpikir lebih lanjut, melainkan untuk bertindak:

  • Berhenti memikirkan jawaban yang sempurna.
  • Pilih framework. Kecuali anda memiliki preferensi, memilih secara acak satu. Menggunakan papan dart, melempar dadu, melempar koin, mengambil kartu.
  • Gunakan.
  • Apakah anda suka menggunakan itu? Apakah ada sesuatu yang anda temukan menjengkelkan?
  • Mencari cara untuk mencegah hal-elemen buruk. Apakah anda penyalahgunaan kerangka, atau ini hanya bagaimana kerangka seharusnya bekerja?
  • Setelah anda merasa anda memiliki pegangan pada framework (terlepas dari apakah anda suka atau tidak), memilih sebuah kerangka kerja baru dan ulangi siklus. Untuk membaca lebih lanjut tentang ini, baca melakukan pola pikir > pemikiran mindset. Penulis menjelaskan hal itu lebih baik daripada yang saya bisa. tetapi tekanan untuk menyelesaikan aplikasi pemasangan, dan I'm mengingat scrapping aplikasi benar-benar dan mulai lagi dari awal Kecuali saat ini, namanya adalah benar-benar unmaintainable berantakan; anda're pembuatan sebaliknya keputusan. Pengembang sering berpikir bahwa membuang hal-hal akan menjadi pilihan yang lebih baik. It's perasaan yang sangat umum. Tapi hal ini jarang pilihan yang tepat. Melemparkan code anda dan mulai dari awal seperti terjebak dalam lalu lintas di jalan untuk bekerja, mengkhawatirkan anda'll terlambat untuk bekerja (miss batas waktu), dan bukannya pulang ke rumah dan mencoba mengemudi menyusuri jalan yang sama lagi. Itu doesn't make sense. Anda mungkin akan terjebak dalam lalu lintas, tetapi anda're masih lebih dekat untuk bekerja daripada anda ketika anda berada di rumah.
Komentar (9)

Meskipun sejumlah besar uang Facebook dan Google telah dituangkan ke pemasaran untuk meyakinkan anda sebaliknya, front end framework yang ada untuk dua alasan utama:

  • Pertama, pembongkaran perangkat keras/jaringan tuntutan untuk client-side operasi dengan cara menempatkan negara dan logika pada klien
  • Kedua, berkaitan dengan tambahan klien logika yang diperlukan untuk mendukung poin pertama, mereka menyediakan terisolasi eksekusi konteks sehingga anda dapat menjejalkan orang lain's kode ke halaman tanpa melanggar apa-apa.

Anda mungkin hanya perlu untuk mencapai suatu kerangka kerja untuk memecahkan masalah ini jika aplikasi anda adalah inheren stateful, jika jumlah aplikasi negara anda're menyimpan sisi client cukup kompleks, jika anda mengharapkan banyak klien besar dengan jaringan yang buruk latency (mobile, atau jauh dari server), atau jika ada bisnis yang kuat perlu dukungan yang sangat canggih CSS atau unsur dinamis penciptaan.

Kerangka pemasaran ingin anda untuk percaya bahwa mereka metode khusus arsitektur meningkatkan pengembangan kecepatan dan membuat perawatan lebih mudah. Ini adalah terang-terangan tidak benar untuk tim kecil bekerja pada proyek-proyek sederhana. Mengisolasi kode dan mengatur impor dapat membantu tim besar membawa produk ke pasar dengan lebih cepat. Ini menyediakan banyak kurang untuk satu orang tim pengembangan bekerja pada aplikasi yang sudah fungsional proyek.

Anda akan menghabiskan lebih banyak waktu untuk belajar bagaimana untuk menyesuaikan yang sudah ada, fungsional kode ke dalam kerangka kerja dari anda akan benar-benar menerapkan fitur, dan kemungkinan cukup baik bahwa seseorang di suatu tempat akan update sesuatu, dan kode yang ditulis dalam kerangka itu akan berhenti berfungsi dalam 18 bulan kecuali seseorang yang ada untuk terus mempertahankan hal itu.

Vanilla JS, dan untuk tingkat yang lebih rendah namun masih signifikan sejauh JQuery, tidak menderita dari masalah tersebut. Dengan beberapa pengecualian, JQuery + AJAX aplikasi yang tidak bergantung pada browser perilaku tertentu, dan tanpa dependensi eksternal mana yang masuk akal, terus bekerja 10-15 tahun setelah mereka awalnya ditulis dengan perubahan sangat kecil.

Kerangka kerja yang besar untuk khas startup pendukung yang sedang berlangsung, kompleks, secara terbuka menghadap aplikasi web. Mereka membiarkan tim besar co-ordinat sama dengan baik, berintegrasi baik dengan vendor menambahkan kerangka kerja, dan dukungan mencolok widget baru dan desain paradigma untuk membantu anda tetap kompetitif.

Semua itu penting untuk perangkat lunak dengan tetap pemirsa yang anda're tentang meninggalkan. Mengambil kerangka kedua memperlambat perkembangan anda kecepatan saat anda beradaptasi dengan paradigma baru, dan memperkenalkan yang tidak perlu kompatibilitas risiko. Menjaga sisi klien kode sederhana, (dan idealnya self hosted) berarti bahwa luas permukaan kompatibilitas risiko turun secara signifikan. Browser akan berubah, CDN url akan berhenti bekerja, ketergantungan akan keluar tanggal - Tapi tak seorang pun yang menyentuh server, dan akan tetap bekerja baik-baik saja.

Don't mengadopsi kerangka kecuali memecahkan arsitektur yang spesifik masalah yang anda miliki saat ini atau dapat meramalkan segera, dan sangat mempertimbangkan mengatasi kekhawatiran bahwa dengan cara lain daripada jika itu semua dapat dipertahankan.

Komentar (12)

Hal terbaik yang dapat anda lakukan untuk "bukti masa depan" aplikasi ini adalah untuk mengikuti praktek-praktek terbaik dalam desain sistem anda untuk memaksimalkan kopling longgar dan pemisahan dari kekhawatiran. Tidak ada bagian dari aplikasi yang aman dari menjadi usang, tapi banyak yang dapat anda lakukan untuk mengisolasi kode-kode yang menjadi usang untuk alasan X dari kode yang doesn't necessarily harus dipengaruhi oleh X.

Namun, saya akan berpendapat bahwa kekhawatiran anda harus kurang untuk pertumbuhan/skalabilitas aplikasi anda dari tingkat pertumbuhan dari pengalaman anda sendiri dan kemampuan. Mental blok anda menggambarkan kedengarannya saya seperti belajar stagnasi atau kesadaran banyak diketahui diketahui tanpa strategi atau alat-alat untuk menangani mereka.

Kerangka kerja ini adalah tidak sangat cocok untuk memecahkan "masa depan-pemeriksaan" tantangan, meskipun mereka dapat memberikan yang relevan initial bimbingan kepada yang berpengalaman, biasanya melalui tingkat tinggi pola desain seperti MVC. Sebaliknya, mereka cenderung lebih berguna sebagai cara untuk mempercepat pembangunan dengan menyediakan kohesi yang kuat dan sering di expense ketat kopling. Untuk contoh, misalkan anda menggunakan beberapa framework yang disediakan pemetaan objek-relasional sistem di seluruh aplikasi untuk berinteraksi dengan database, lengkap dengan caching-system integration. Mungkin nanti anda perlu untuk beralih ke non-relasional datastore dan sekarang everything yang menggunakan hal ini terpengaruh.

Kekacauan anda sekarang memiliki didn't berasal dari what anda digunakan, tapi where anda menggunakannya (mungkin cukup banyak di mana-mana di back-end). Berapa banyak lebih baik anda'll jika kode yang membuat sebuah halaman tidak pernah mengambil data itu membuat.

Misalkan anda ingin menambahkan beberapa widget kecil untuk halaman yang membutuhkan script tambahan dan sumber daya untuk bekerja dengan baik. Jika anda're menggunakan framework, anda dapat bertanya "Bagaimana cara ingin saya untuk menambahkan dependensi ke halaman untuk hal ini?" Jika anda'tidak kembali, maka pertanyaannya adalah lebih open-ended: "Apa masalah teknis yang saya menyentuh yang harus entah bagaimana dipisahkan?" pertanyaan Itu membutuhkan lebih banyak pengalaman untuk menjawab, tapi di sini adalah beberapa petunjuk:

  • Apa yang akan terjadi jika besok anda pindah semua sumber daya statis (script, gambar, dll.) untuk server yang terpisah, jaringan pengiriman konten, dll., atau mulai mencoba untuk paket mereka semua bersama-sama untuk meningkatkan kinerja?
  • Apa yang akan terjadi jika anda mulai menempatkan widget ini pada halaman yang berbeda, atau beberapa contoh itu pada halaman yang sama?
  • Bagaimana mungkin anda mulai melakukan A-B testing pada versi yang berbeda dari widget?

Jika semua ini terdengar luar biasa, maka saya'd sarankan anda should menggunakan kerangka kerja untuk sekarang, tidak begitu banyak untuk kepentingan aplikasi anda tapi demi pertumbuhan pribadi anda sendiri. Don't harus mulai dari awal sekalipun. Alih-alih menggunakan kerangka sebagai kurikulum untuk membantu memandu evolusi dari aplikasi anda.

Hanya ada dua cara untuk belajar. Salah satunya adalah dengan trial dan error, dan yang lainnya adalah dengan belajar dari pengalaman orang lain. Trial and error tidak bisa dihilangkan. Pengembangan perangkat lunak adalah dengan sifatnya terus menerus belajar lapangan dan setiap kode yang doesn't melakukan sesuatu yang baru atau berbeda dengan definisi yang tidak perlu. (Alih-alih menggunakan kode yang sudah ditulis).

Trik ini adalah untuk meminimalkan hal ini dengan secara proaktif mencari pra-pengetahuan yang ada (strategi, praktek-praktek terbaik, dan kode/pustaka/kerangka) sepanjang setiap langkah dari proses pengembangan sehingga anda tidak menemukan diri anda terus-menerus re-inventing the wheel.

Adapun aplikasi yang anda sedang menulis, namun, perhatian pertama anda harus hanya untuk mendapatkan itu dilakukan dengan minimal mundane usaha (yang merupakan jenis seperti kode bau, tetapi untuk proses pembangunan). Mengingat sifat manusia belajar, cara tercepat untuk mencapai kualitas tinggi adalah untuk memulai dengan something. Hal ini jauh lebih mudah untuk memahami tujuan ketika anda bisa membentuknya dengan mengkritisi sesuatu yang sudah anda miliki.

Jika anda dapat menerima bahwa banyak dari kode yang anda tulis adalah sekali pakai dalam proses belajar dan diperlukan untuk find desain yang baik, yang akan membantu memotivasi anda untuk terus melakukannya. Setelah semua, itu's tantangan pemecahan masalah yang membuat pengembangan perangkat lunak yang cerdas, dan tantangan itu selalu hadir jika apa yang anda're lakukan adalah berharga (lihat "terus belajar" pernyataan di atas).

Komentar (0)

Di atas semua yang lain, "scrapping hal dan mulai lagi dari awal" adalah tidak pernah pilihan ... setelah semua, tidak't anda mengatakan bahwa anda memiliki "setengah lusin klien?" apakah anda belum berhenti sejenak untuk mempertimbangkan apa mereka mungkin berpikir dari pernyataan anda, mengingat bahwa mereka sekarang (mungkin) "sangat senang dengan pekerjaan anda?!"

Berikut ini's analogi yang saya gunakan:

  • "tugas Saya adalah untuk membangun rumah bagi orang-orang untuk tinggal di, untuk orang-orang untuk membangun bisnis, dan sebagainya." tugas Saya adalah untuk membuat "orang-orang yang terlalu-kecil, atas-dimuliakan bit dari pasir" untuk melakukan pekerjaan yang bermanfaat. (Sama seperti rumah-pembangun kerajinan rumah dari papan gipsum, keramik, beton blok dan 2x4's.)

  • Namun, sedangkan "kuku" bahwa rumah-pembangun gunakan benar-benar belum't banyak berubah dalam dua ratus tahun (kecuali untuk pergi dari "square" untuk "bulat," dan kemudian akan dibuat berguna dengan pneumatik memaku mesin-mesin), teknologi yang kami gunakan adalah selalu berubah dan kadang-kadang mengalami sedikit perubahan. ("Begitu seterusnya.")

  • "meskipun Demikian, masing-masing rumah, setelah dibangun, akan selamanya-setelah menjadi hidup di." Anda dapat't mengusir mereka. Setelah anda membangun dan menyerahkan kunci, "it's tidak 'anda' rumah lagi." Itu adalah apa yang benar-sekarang ini, dan itu akan berdiri untuk waktu yang sangat lama.

Sebagian besar dari bisnis saya hari ini adalah untuk membantu klien untuk mengatasi perangkat lunak yang dibangun sepuluh, dua puluh, tiga puluh atau lebih tahun yang lalu, dengan menggunakan "keadaan seni" teknologi yang ada pada hari – hari - (dan yang, ehem, saya ingat) – dan yang masih dalam pelayanan(!) hari ini.

Komentar (0)

I mulai menulis komentar tentang belajar framework, tapi akhirnya berubah menjadi sesuatu yang lebih terlihat seperti sebuah jawaban, jadi di sini adalah.

Tidak tahu apa-apa saja kerangka sepertinya masalah. Dalam pada dasarnya setiap webdev pekerjaan yang anda akan perlu untuk bekerja dengan some framework. Belajar framework lain setelah anda tahu satu tidak that masalah besar, tapi belajar yang pertama mungkin memakan waktu - yang adalah mengapa pengusaha mungkin peduli tentang hal itu. Menghindari kerangka kerja yang dapat menunjukkan tidak ditemukan di sini sindrom, yang banyak pendekatan praktis.

Sebagai titik utama anda mengetahui terlebih dahulu kerangka kerja ini adalah untuk belajar bahasa yang sama, mungkin hanya mencoba belajar sesuatu yang populer di kalangan rekan-rekan anda. Anda dapat mencoba memodifikasi beberapa proyek sederhana yang ditulis dalam kerangka kerja. Memulai sebuah proyek dari awal dalam kerangka kerja yang anda don't tahu ini sangat tidak efektif cara belajar.

Sekarang, pertanyaan sebenarnya adalah tentang proyek tertentu dan porting ke kerangka. Untuk itu, tampaknya jawabannya adalah: itu tergantung, dan kita bisa't benar-benar tahu anda. Namun, hal-hal porting ke framework anda don't tahu hampir pasti ide yang buruk, seperti you bisa't bahkan tahu jika itu membuat sense. Oleh karena itu, tampaknya anda harus meninggalkan itu seperti apa, dan meninjau kembali keputusan ini di beberapa titik, setelah anda tahu dan seperti beberapa framework. Jawaban lainnya mengandung poin yang baik tentang apa yang harus anda perhatikan ketika membuat keputusan tersebut.

Komentar (0)

Membuat sesuatu adalah bukti masa depan adalah hampir mustahil. Memeriksa aplikasi yang scalable tidak terlalu sulit sekalipun. Anda hanya perlu menulis beberapa tes kinerja untuk aplikasi dan melihat berapa banyak klien yang dapat menangani. Menulis tes pasti akan membuat aplikasi anda lebih banyak bukti masa depan karena anda akan mampu mengukur bagaimana aplikasi berperilaku setelah anda menerapkan perubahan yang lebih ke dalamnya.

wrt framework, saya tidak't terlalu khawatir kinerja/skalabilitas yang bijaksana. Ini adalah sesuatu yang anda dapat dengan mudah memeriksa dan kemungkinan memperbaiki. Masalah yang lebih besar adalah keamanan. Web framework biasanya membantu anda menulis kode otentikasi yang tepat, cookies, CSRF perlindungan, dll. Terutama mengingat kurangnya pengalaman, lebih baik fokus di daerah itu.

Komentar (0)

Artikel ini mendapat banyak perhatian di Hacker News 2,5 tahun yang lalu: Menulis kode yang mudah untuk menghapus, tidak mudah untuk extend. perspektif Ini mungkin atau mungkin tidak membantu anda menangani anda saat codebase, tapi di masa depan, itu bisa membantu mencegah frustrasi yang datang dari perfeksionisme/over-teknik.

Jika kita melihat baris kode' sebagai 'garis menghabiskan', maka ketika kita menghapus baris kode, kita menurunkan biaya pemeliharaan. Bukan membangun kembali digunakan perangkat lunak, kita harus mencoba untuk membangun pakai software.

saya tidak perlu memberitahu anda bahwa menghapus kode adalah lebih menyenangkan dari menulis itu.

(penekanan dari saya)

The pasal's benang di Hacker News juga mungkin layak dibaca.

Komentar (0)

Sejauh yang membuat masa depan bukti dan menerapkan skala & kerangka prinsip-prinsip, it's tinggi tugas untuk mengambil sendiri, aku'd mungkin hanya tidak khawatir tentang hal itu, tetapi jika anda harus:

Menjaga kode yang bersih, ikuti PADAT, KERING prinsip > google.

Menerapkan load-balancer sesegera mungkin.

Berdiri setidaknya dua web server, menangani load balancing skenario dalam kode.

Dan last but not least, ada's baik tumpukan untuk penanganan juta pengguna dari LAMPU, tapi aku'm yakin itu's benar-benar bisa dilakukan.

Kasus dan titik, lihat: https://stackoverflow.com/questions/1276/how-big-can-a-mysql-database-get-before-performance-starts-to-degrade Intinya adalah valid, tetapi 10gb sepele sebagai subjek tes.

Komentar (0)