Rumah >masalah biasa >Pengaturcara legenda Zhihu Wheel Brother, saya berlutut selepas membaca ini
# Mengenai pengarang:
vczh, yang nama sebenarnya ialah Chen Zihan kerana Zhihu's builder personal information mengatakan “orang yang bekerja di dunia ini memanggilnya sebagai “orang profesional dalam dunia ”. vczh telah menjalani latihan di Microsoft semasa zaman kolejnya dan menyertai Microsoft sejurus selepas tamat pengajian. Saya bermula di Microsoft Shanghai, dan kemudian memasuki Microsoft Research Asia di Beijing. Kini dia telah berpindah ke Seattle, Amerika Syarikat, dan bekerja sebagai jurutera dalam pasukan Pejabat.
Dulu orang sering bertanya kepada saya bagaimana untuk pergi ke Microsoft. Sebenarnya saya tidak pernah terfikir tentang soalan ini, jadi jawapannya pada masa itu adalah secara semula jadi iklan Microsoft (pandai pengaturcaraan, pandai matematik, dan sikap yang baik). Semasa saya senior di kolej pada tahun 2009, krisis gadai janji subprima A.S. secara kebetulan melanda kami, yang menyukarkan kami yang ingin bekerja di syarikat A.S. untuk dieksploitasi. Nasib baik, saya lulus lima ujian dan mengalahkan enam jeneral, dan akhirnya berjaya bertahan selepas latihan. Punca dan kesan ini jelas tidak dapat ditentukan dalam beberapa hari temuduga, jadi kita harus bermula dengan hello world.
# Sekolah Menengah
Saya cukup bernasib baik untuk belajar pengaturcaraan sejak darjah dua sekolah rendah. Pada masa itu, dunia sudah berada pada tahap yang moden adalah berbeza sama sekali.
Ia adalah setengah tahun selepas saya membeli komputer saya, dan saya sangat ingin tahu tentang semua yang saya lihat Di samping itu, ayah saya tidak bersetuju dengan saya bermain permainan pada masa itu, jadi saya berfikir untuk membuat beberapa permainan sendiri, jadi. bahawa saya boleh melakukannya secara terbuka. Jadi apabila saya mendengar bahawa Sekolah Menengah Cina Luar Negara Shantou menawarkan kelas Visual Basic 5.0, saya berasa agak teruja. Tetapi tahap keterujaan itu boleh diabaikan berbanding hari ketika saya terlalu teruja untuk kelas komputer pertama saya dan menunggang basikal dengan pantas sehingga saya berdarah banyak dan kehilangan beberapa gigi.
Ia masih tahun pertama abad ke-21, ketika akses Internet sangat mahal dan Google baru sahaja bermula dan hampir tiada siapa yang tahu mengenainya Belajar memprogram adalah lebih sukar daripada sekarang. Semasa saya mencari ilmu, Internet pada dasarnya tiada harapan, jadi saya mengembangkan hobi pergi ke kedai buku.
Tidak mengambil masa yang lama untuk saya mencari buku yang dipanggil "Tutorial Pengaturcaraan Grafik Lanjutan Visual Studio". Saya sangat menyukai buku ini. Ilustrasinya sangat cantik, dan ia dilukis menggunakan pengaturcaraan Visual Basic. Malangnya, kandungannya terlalu maju, jadi kemudiannya terdapat cerita tentang bagaimana saya mempelajari geometri analitik tiga dimensi asas dengan belajar sendiri pada tahun ketiga sekolah menengah rendah, dan bagaimana saya tidak mendengar kuliah di dalam kelas dalam tahun ketiga sekolah menengah dan hanya bergantung pada analisis matematik saya sendiri, tetapi saya kemudian memahaminya.
Di bahagian tengah, saya cuba menggunakan pengaturcaraan untuk melukis banyak grafik yang kompleks dan melakukan pelbagai transformasi kompleks pada imej, jadi saya terpaksa menyimpulkan formula panjang di atas kertas sebelum menulis program. Jika hasil larian atur cara itu salah, tiada cara untuk menyahpepijatnya, jadi kami perlu mendapatkannya semula, dengan harapan dapat mencari beberapa pepijat dalam formula untuk menerangkan sebab ralat itu berlaku.
Sejak itu saya menjadi sangat mahir dalam aritmetik simbolik. Lebih-lebih lagi, sama ada membuat kerja rumah matematik dan fizik atau memperoleh formula melalui pengaturcaraan, terdapat terlalu banyak perkara untuk dikira dan saya terlalu malas untuk mencari cebisan kertas di mana-mana, jadi saya mendapat keupayaan untuk mengira secara mental proses yang kompleks (malangnya, saya telah kehilangan ia sekarang). Ini secara kebetulan juga memberi saya faedah, iaitu, saya mengira secara mental semua jawapan kepada soalan matematik aneka pilihan dalam peperiksaan kemasukan kolej dalam masa 10 minit selepas kertas diserahkan dan saya tidak dibenarkan menulis, dan semuanya betul.
Selepas melakukan pengaturcaraan grafik untuk masa yang lama, saya teringat ideal asal saya, jadi saya mula bermain permainan. Pada masa itu, saya melihat "Heroes of Mana" yang dibangunkan oleh Kumpulan Kerja Pin Emas Chengdu, yang mencetuskan semangat saya untuk membangunkan RPG. Selepas mengalami beberapa kegagalan, saya akhirnya menyelesaikan semua kerja pengekodan untuk "Tiandi Zhuan" pada hari pertama bulan lunar pertama tahun kedua sekolah menengah saya, dan memuat naiknya ke laman web GameRes tidak lama kemudian.
Ini adalah program pertama saya dengan lebih 10,000 baris. Untuk menyelesaikannya dengan jayanya, saya belajar banyak kebenaran, termasuk mengapa ia berorientasikan objek dan mengapa perlu membahagikan modul untuk mengurangkan saling bergantung. Ini juga menjadi peluang kepada saya untuk membangunkan antara muka grafik dan enjin skrip saya sendiri. Kemudian, saya cuba menggunakan OpenGL untuk membuat permainan 3D, tetapi kerana sukar untuk mencari artis yang mempunyai minat yang sama untuk bekerja dengan saya, saya berputus asa. Tetapi ini memberi saya banyak masa untuk melabur dalam antara muka grafik dan enjin skrip.
Kemudian, saya mendapat idea untuk menerangkan bahasa peringkat tinggi. Ini adalah titik perubahan pertama dalam keseluruhan sejarah pengaturcaraan saya. Pada masa itu, saya hanya menggunakan senarai terpaut untuk struktur data, dan saya tidak pernah mendengar tentang prinsip kompilasi atau corak reka bentuk. Secara semula jadi lebih sukar untuk menerangkan bahasa peringkat tinggi pada masa itu. Oleh itu, selepas beberapa hari berfikir keras, saya menghasilkan kaedah yang kini dipanggil kompilasi satu laluan (yang juga sangat buruk) untuk memproses semula bahasa peringkat tinggi yang mudah menjadi bahasa set arahan yang mudah, yang serupa dengan pemasangan.
Saya sudah berada di tahun senior sekolah menengah pada masa itu, jadi saya sebenarnya tidak mempunyai banyak masa untuk menumpukan pada pengaturcaraan, jadi prototaip pertama yang saya buat ialah penterjemah Pascal yang dipermudahkan, dibangunkan di Delphi. Memikirkannya sekarang, mesti ada banyak kebocoran memori dan masalah prestasi, tetapi saya tidak tahu perkara-perkara ini pada masa itu. Selama tiga bulan terbiar selepas tamat pengajian dari sekolah menengah, saya mereka bentuk semula perkara ini dan mendapat rancangan berpuluh-puluh halaman. Oleh kerana saya tidak mempunyai masa untuk menyelesaikannya, saya mencetaknya dan membawanya ke Universiti Teknologi China Selatan.
#Universiti
Hanya beberapa hari selepas memasuki kolej, saya mendengar daripada seorang kakak senior bahawa guru kelas kami, Encik Chen Jian, mengajar prinsip penyusunan, jadi saya menunjukkan kepadanya timbunan kertas ini. Dia tidak berkata apa-apa (melihat ke belakang sekarang, saya hanya boleh mengatakan bahawa reka bentuk itu benar-benar tidak sedap dipandang...), dan memberi saya buku teks mengenai prinsip penyusunan. Saya selesai membacanya dengan cepat, dan kemudian menggunakan pengetahuan di dalam untuk membuat enjin skrip sebenar pertama Sintaks menyalin beberapa bahagian mudah bahasa Java, dan juga menambah fungsi yang secara automatik menukar parameter templat kepada Sintaks jenis Objek ialah. bernama Jove. Kemudian, saya mengambil kelas Java dan mendapati bahawa Java sebenarnya melakukan ini, yang membuatkan saya berasa sangat pelik.
Kemudian, saya menulis banyak enjin skrip satu demi satu. Jove, yang saya bina semasa saya masih baru, adalah enjin skrip pertama yang saya fikir masih popular. Yang kedua ialah bahasa dinamik yang dibangunkan pada tahun junior saya selepas gagal pada tahun kedua saya dan belajar banyak pelajaran Namanya Percuma (boleh didapati di blog saya http://www.cppblog.com/vczh). Baru-baru ini, ia dirancang untuk mengemas kininya kepada 3.0 untuk bekerjasama dengan GacUI, perpustakaan kelas GUI dipercepatkan kad grafik yang sedang dibangunkan. Seterusnya, sepanjang tempoh saya menjalani latihan dalam kumpulan WCFTools Microsoft Shanghai, saya melengkapkan bahasa berfungsi tulen yang dipanggil KernelFP setiap malam, yang kemudiannya menjadi projek pengijazahan saya.
Selepas menghantar projek tamat pengajian saya, saya menyiapkan CMinus dalam masa beberapa bulan sebelum tamat pengajian. Ini bukanlah CMinus yang sangat mudah yang direka dalam kursus Prinsip Penyusunan, tetapi pengkompil bahasa C yang lengkap (sintaks penunjuk fungsi telah diubah oleh saya, tetapi ia masih disokong). Hasil kompilasi ialah sekeping kod binari X86 yang disimpan dalam ingatan Alamat permulaan fungsi boleh dipaksa untuk ditukar menjadi penunjuk fungsi dan digunakan secara langsung dalam program C++ Ini kerana saya mengikuti beberapa peraturan dalam Visual C++ apabila menjana arahan Konvensyen ini diterangkan dengan jelas dalam MSDN.
Selepas tamat pengajian, saya bercita-cita tinggi membina NativeX, bahasa C dengan generik dan pemetaan konsep. Beberapa bulan yang lalu, saya cuba menyalin C#, tetapi C# terlalu rumit, jadi saya beralih kepada GacUI. Saya juga telah menulis banyak perpustakaan kelas antara muka grafik (GUI). Selepas membangunkan dua perpustakaan kawalan untuk RPG di sekolah menengah, dua perpustakaan GUI yang dibangunkan menggunakan OpenGL di kolej gagal. Kemudian, Windows API (Vczh GUI) telah dikapsulkan sekali, cuba menjadikan kemudahan penggunaannya hampir dengan VCL atau WinForm.
Selepas tamat pengajian, saya cuba menerbitkan GUI berasaskan rendering beberapa kali dan menukar seni bina beberapa kali Ia tidak sehingga GacUI yang saya bangunkan sekarang saya merasakan bahawa saya berada di landasan yang betul. Satu kesimpulan yang saya dapat dalam proses ini ialah: reka bentuk Windows Presentation Foundation benar-benar sempurna... Selain melakukan perkara-perkara ini, saya juga membangunkan tiga program pemaparan perisian untuk objek tiga dimensi yang pertama dilakukan sebelum tamat pengajian. , yang terakhir dibangunkan setahun yang lalu kerana saya tidak tahu bagaimana menggunakan masa lapang untuk memperkayakan hidup saya. Ia dibangunkan untuk membunuh masa.
Di sini saya rasa saya boleh menjawab soalan yang tidak dapat saya jawab dengan baik sebulan yang lalu daripada adik-adik junior saya. Bagaimanakah saya boleh mendapatkan pekerjaan di Microsoft? Kerana saya menulis semua perkara yang saya lakukan di atas pada resume saya. Pada masa yang sama, jika anda tidak bertanya ini sehingga tahun senior anda, sudah terlambat...
Perlu dinyatakan bahawa saya mula membimbing pelajar dari kolej perisian yang dua gred di bawah saya dengan hampir sifar asas untuk belajar pengaturcaraan pada tahun rendah saya. Untuk membolehkan pihak lain mempunyai asas C++ yang kukuh, tahap penulisan ujian unit yang mahir dan dapat secara intuitif menghasilkan beberapa reka bentuk yang tidak terlalu buruk selepas menerima latihan 3 tahun saya, saya menyemak banyak kandungan tentang C++, terutamanya untuk Saya telah membuat persediaan untuk beberapa kelas penunjuk selama beberapa hari, dan ada tugasan setiap hari. Semasa proses ini, saya amat merasakan bahawa jika anda ingin meningkatkan tahap pengaturcaraan anda dengan cepat, anda mesti sentiasa melakukan sesuatu yang boleh anda lakukan, tetapi ia sangat sukar sehingga anda tidak boleh melakukannya jika ia hanya sedikit lebih sukar. Jika anda berterusan seperti ini selama beberapa tahun lagi, anda pasti akan memasuki pangkat tuan.
Oleh itu, dalam proses menyusun kerja rumah, saya sengaja menangguhkan kandungan tentang petunjuk. Mula-mula, biarkan pihak yang satu lagi menerima pembolehubah dan gelung cawangan, kemudian bangunkan gaya yang baik (contohnya, anda tidak boleh selalu menamakan pembolehubah dengan satu huruf, dsb.), kemudian belajar mengendalikan tatasusunan, dan kemudian langkah seterusnya ialah mengenai penunjuk tanpa penukaran jenis paksa Beberapa operasi, dan dalam masa sebulan saya membuat kelas rentetan dengan ujian unit. Perkara utama petunjuk adalah untuk memastikan pihak lain memahami dengan mendalam konsep "penunjuk itu sendiri ialah nombor yang menunjuk kepada kedudukan". Untuk tujuan ini, saya direka khas (tetapi tidak melaksanakan) bahasa himpunan dengan hanya satu tatasusunan panjang tak terhingga global untuk menerangkan beberapa konsep kompleks di sebalik penunjuk. Selepas itu, terdapat sedikit pengetahuan tentang berorientasikan objek, corak reka bentuk, dan perkara yang berkaitan dengan enjin skrip.
Projek pengijazahan pelajar ialah enjin skrip bahasa dinamik yang mudah, dan pelaksanaan enjin skrip menjalankan pustaka fungsi pemprosesan senarai yang saya tiru Linq dengan betul. Pelaksanaan penutupan ini berlapis-lapis antara satu sama lain, menambahkan fungsi pemadaman pada objek di mana-mana, dan mencipta pelbagai iterator pelaksanaan tertunda, yang boleh menguji pelaksanaan enjin skrip. Pihak lain telah direkrut oleh NetEase selepas tamat pengajian dan diberi penjagaan yang berperikemanusiaan dari segi layanan.
Perjalanan pengaturcaraan saya termasuk bukan sahaja program yang saya lakukan pada masa lapang saya, tetapi juga proses latihan dan bekerja di Microsoft. Semasa saya di sekolah menengah, saya mendengar tentang Kelab Microsoft di Universiti Teknologi China Selatan, dan saya juga mempunyai keinginan tertentu untuk Microsoft Oleh itu, selepas mendaftar, sebagai tambahan kepada kesatuan pelajar kolej, saya telah membayar hampir perhatian kepada Kelab Microsoft Rekrut ahli baharu dan abaikan semua pertubuhan lain. Tetapi sejujurnya, kerja saya di Student Union dan Microsoft Club hanyalah pertunjukan sampingan, dan saya tidak pernah melakukan sesuatu yang serius.
Semasa saya pelajar tahun kedua di kolej, apabila Pusat Teknologi Carian Microsoft (STC) datang ke Kelab Microsoft untuk mengumpul resume, saya bertemu dengan Cikgu Chen Jian di jalan raya, yang disebut oleh guru kelas sebelum ini, dan saya memberitahunya tentang perkara ini. Kemudian, saya berputus asa kerana pihak lain mengatakan bahawa saya terlalu muda, kerana semua yang lain adalah pelajar siswazah. Semasa saya di tahun rendah, cikgu Chen Jian menyebut kepada saya bahawa dia boleh meminta rakan sekelas lama untuk membantu saya menyerahkan resume latihan saya di Microsoft, jadi saya menerima temu duga telefon daripada Microsoft Shanghai pada Mac 2008. Terdapat dua temu bual telefon Kali pertama dengan orang HR, dan kali kedua dengan jurutera perisian. Semasa temu bual telefon kedua, kami bercakap tentang Percuma yang disebutkan di atas, dan juga mengadakan perbincangan yang ghairah tentang beberapa isu reka bentuk struktur data dan rangka kerja. Dalam masa beberapa hari, saya menerima notis temu duga dan pergi ke Pelabuhan Maklumat Digital Zizhu di Daerah Minhang, Shanghai untuk temu duga. Itulah wawancara pertama dalam hidup saya.
# Internship
Susunan temu bual Microsoft adalah tepat kepada yang kedua, yang jauh lebih mesra pengguna daripada sesetengah syarikat dan tidak akan membuang masa orang lain berjam-jam. Terdapat tiga pusingan temu duga untuk latihan, dan semua perbualan adalah dalam bahasa Inggeris, walaupun hanya seorang daripada mereka adalah warga asing. Saya masih ingat samar-samar bahawa apabila saya ditemu bual oleh pemuda asing itu, saya terlalu gementar dan gagal memberikan penyelesaian optimum kepada soalan mudah. Tetapi mereka akhirnya membenarkan saya menyertai pasukan Alat Microsoft WCF di Shanghai sebagai pelatih.
Pasukan ini mempunyai pengurus pembangunan perisian, Encik Ge Ziang, yang sangat saya hormati. Encik Ge adalah seorang yang suka tangkas dan sering mengabdikan dirinya dengan amalannya. Dia banyak mengajar saya tentang kejuruteraan perisian semasa latihan amali selama 4.5 bulan, dan perkara paling penting yang banyak memberi manfaat kepada saya ialah tentang ujian unit.
Selain itu, saya juga mengalami lelaran pantas, mesyuarat Scrum, pengaturcaraan pasangan dan proses pembangunan kolaboratif berbilang orang berdasarkan sistem pengurusan versi kod sumber (kami menggunakan TFS). Selepas mengubah suai PetShop untuk mencipta demo WCF untuk persidangan TechEd, membetulkan pepijat untuk alat pembangunan WCF Visual Studio 2010 dan membangunkan editor fail konfigurasi yang sangat berskala, saya menamatkan latihan saya di Microsoft pada Disember 2008. . Selepas latihan ini, keupayaan saya untuk mengawal kod sumber juga telah dipertingkatkan, dan ia secara langsung dicerminkan dalam kualiti kod projek yang saya bangunkan pada masa lapang saya.
# Jadi biasa
Sebelum latihan amali tamat, saya ditawarkan temu duga sebagai pekerja sepenuh masa (FTE). Keadaan sangat serius ketika itu. Krisis gadai janji subprima 2008 di Amerika Syarikat secara rasmi menjejaskan Microsoft Shanghai pada bulan Oktober, dan syarikat itu memutuskan untuk mengurangkan bilangan pengambilan pekerja sepenuh masa dalam tempoh itu. Saya telah ditemu duga untuk pekerjaan tetap pada bulan November, dan kejadian ini membuatkan saya sangat gementar. Kemudian, Encik Ge berkata bahawa cadangan peribadinya ialah dia berharap saya akan kekal dan terus bekerja selepas tamat pengajian, yang memberi saya keyakinan.
Terdapat sebanyak lima pusingan temu duga untuk pelatih untuk menjadi pekerja sepenuh masa. Apa yang sangat mengagumkan saya ialah dalam satu pusingan, penemuduga bertanya kepada saya banyak soalan yang sangat kompleks, dan akhirnya bertanya kepada saya soalan tentang pengemaskinian dalam talian bagi pokok binari petunjuk, tetapi saya tidak ingat kandungan tertentu. Saya hanya ingat bahawa selepas saya menghabiskan masa yang lama akhirnya memikirkan algoritma yang betul, masa itu telah tamat dan tidak ada masa untuk menulis kod di papan putih. Kemudian, saya akhirnya lulus temu duga, dan salah satu daripada beberapa tempat akhirnya telah diambil dari saya. Walau bagaimanapun, saya mendengar bahawa sekatan akan dilonggarkan dalam beberapa bulan dan ia tidak akan sesukar semasa temu duga saya.
Semasa proses amali dan temu duga, saya merasakan bahawa banyak kursus yang ditawarkan oleh Pusat Pengajian Perisian Universiti Teknologi China Selatan sebenarnya sangat berguna, terutamanya mengenai struktur data, corak reka bentuk dan ujian perisian. Ini adalah pengetahuan yang sangat berguna di tempat kerja, dan ia juga perlu untuk terus mengumpul pengalaman dalam perkara ini dalam kerja akan datang. Cuma kerana kolej tersebut mempunyai bilangan pelajar yang ramai, dan kolej baru sentiasa kekurangan beberapa orang guru, ramai rakan sekelas saya mengatakan bahawa sukar untuk memahami peranan kandungan yang disebutkan dalam buku teks. Agaknya keadaan sekarang jauh lebih baik daripada tahun-tahun itu.
#Microsoft SQL Server
Ia mengambil masa berpuluh-puluh hari dari akhir temu duga hingga masa saya mendapat tawaran, dan pemberitahuan terakhir daripada HR akhirnya tiba pada Malam Tahun Baru. Dalam enam bulan berikutnya, saya terus melakukan perkara saya sendiri di sekolah, sekali-sekala mengambil bahagian dalam beberapa aktiviti untuk memperkenalkan pengalaman, dsb., dan keluar bermain dengan beberapa orang. Selepas tamat pengajian, dia pergi ke Shanghai Microsoft. Sesuatu berlaku di tengah-tengah kerana perubahan kuota, walaupun saya menerima tawaran Alat WCF, saya akhirnya ditugaskan ke kumpulan SQL Server saya tidak menerima notis sebelum itu. Memandangkan saya tidak suka pangkalan data dan mempunyai pemahaman yang sangat sedikit tentang SQL Server, saya menghabiskan satu setengah tahun membangunkan SQL Server Management Studio (juga dikenali sebagai "antara muka" legenda). Dalam tempoh ini, saya menyebarkan sedikit pengetahuan tentang ujian unit, pembangunan antara muka, corak reka bentuk, Linq dan penganalisis sintaks dengan rakan sekerja saya.
Pengalaman tahun setengah ini telah menjadikan saya banyak berkembang, terutamanya kerana berbanding dengan latihan amali, apabila saya bekerja secara formal, saya sentiasa perlu melakukan pertukaran yang bersemangat dan meluas dengan pasukan lain, syarikat, kumpulan etnik, negara dan spesies, dan ia juga mengambil banyak masa. Kadang-kadang saya perlu terbang ke Amerika Syarikat untuk merasai keunggulan sosialisme. Bahagian antara muka perisian formal adalah sangat kompleks Bukan sahaja perubahan DPI sistem pengendalian dan proses penyetempatan (kebanyakan kandungan adalah untuk menterjemah teks pada antara muka ke dalam bahasa lain), susun atur antara muka perlu. dilaraskan secara automatik supaya beberapa teks tidak boleh hilang Atau butang hanya separuh dipaparkan, dan pelbagai jenis orang kurang upaya (terutama orang yang hilang penglihatan) mesti dijaga, dan beberapa antara muka masa jalan mesti disediakan untuk beberapa diri. -dilukis kandungan kompleks supaya pasukan ujian automatik dapat menyelesaikan tugas mereka.
Pengalaman ini membuatkan saya rasa betapa sukarnya untuk membangunkan antara muka yang ketat. Perasaan lain ialah tentang perubahan permintaan. Kewujudan corak reka bentuk adalah untuk menentang perubahan dalam keperluan Saya tidak dapat memahami kebenaran ini sehingga saya mula bekerja. Anda mesti mereka bentuk seni bina perisian dengan begitu baik sehingga selepas perubahan besar-besaran dalam keperluan, kod anda secara keseluruhan masih boleh menjadi cantik, mudah diubah suai, berprestasi dan selamat. Setiap perubahan tidak boleh menjadi tampalan, anda sentiasa perlu memfaktorkan semula untuk menjadikan kod anda secara keseluruhannya baik pada bila-bila masa. Untuk mencapai matlamat ini, anda perlu mahir dan menggunakan corak reka bentuk untuk membangunkan projek.
Salah satu kelebihan Microsoft yang jarang berlaku berbanding syarikat lain ialah ia akan memberi anda banyak masa untuk melengkapkan perisian secara perlahan-lahan. Dan definisi yang baik ini, sudah tentu, memfokuskan pada kefungsian dan kebolehselenggaraan. Jika sekeping kod menggunakan kaedah yang sangat halus untuk menyelesaikan tugasan pada kelajuan tinggi, tetapi sangat rumit sehingga ia tidak dapat difahami oleh penyelenggara berikutnya walaupun ia ditulis dengan ulasan, maka kod itu tidak mempunyai nilai praktikal. Sekeping kod yang baik tidak terletak pada kepandaian reka bentuknya, mahupun kecanggihan algoritmanya, tetapi kerana ia boleh dibangunkan oleh beribu-ribu orang pada masa yang sama selama 10 tahun, dan dalam proses menambah fungsi secara berterusan, ia tidak akan menjadi terlalu mengelirukan Ini mengakibatkan keperluan untuk menulis semula.
# Lompat kerja
Kemudian, saya memohon pemindahan kakitangan ke Microsoft Research Asia (MSRA) atas beberapa sebab. Pada Januari 2011, selepas mendapat kelulusan daripada pengurus saya, saya pergi dari Shanghai ke Beijing untuk menghadiri temu duga di institut itu. Masih ada lima pusingan temuduga kali ini. Temu bual ini sukar. Salah seorang penemuduga menemui banyak perkara yang berkaitan dengan penyusun pada resume saya dan memutuskan untuk meminta saya melaksanakan fungsi strncpy, yang memerlukan bilangan minimum akses CPU ke memori. Ini melibatkan pelbagai isu seperti lebar jalur, penjajaran dan operasi peralihan bait binari. Kaedah itu sendiri sudah sangat rumit, dan kesilapan sentiasa tidak dapat dielakkan semasa menulis kod di atas kertas, jadi saya masih tidak mempunyai masa untuk menyelesaikan menulis keseluruhan program. Seorang lagi penemuduga, seorang warga asing, juga melakukan beberapa kerja pada penyusun semasa dia masih muda, dia tidak bertanya kepada saya apa-apa soalan semasa temu bual, sebaliknya, dia bercakap tentang pelbagai algoritma dan masalah dengan penyusun, pada dasarnya segala ilmu yang saya tahu terbongkar kerana saya perlu menjawab soalan. Saya kemudian membina persahabatan yang mendalam dengan lelaki ini.
Saya telah diluluskan untuk berpindah tidak lama kemudian. Selepas melakukan beberapa kerja penamat, termasuk mewujudkan piawaian ujian unit untuk pasukan SQL Server di Shanghai, saya pergi ke Beijing pada April 2011 dan secara rasmi menjadi ahli Microsoft Research Asia, melakukan beberapa kerja yang berkaitan dengan sistem yang diedarkan.
#Microsoft Research Asia
Kerja institut penyelidikan agak istimewa, terutamanya kerana saya tidak mengambil bahagian dalam mana-mana projek jangka panjang dan sentiasa bekerja dengan beberapa penyelidik. Projek pertama adalah terutamanya projek analisis dinamik untuk menentukan sama ada program seni bina C/S akan menemui jalan buntu dan menyediakan beberapa laporan untuk membantu pengaturcara memahami punca masalah dan seterusnya mengubah suai dan menyahpepijat program mereka sendiri. Kemudian, saya mengikuti mereka untuk membina enjin carian imej dan pangkalan data graf yang diedarkan Sebelum pergi, saya membantu mereka membina beberapa perangkak untuk memperkayakan data projek graf pengetahuan Microsoft sendiri, dsb.
Dalam beberapa tahun kebelakangan ini di institut, selain mendapat sedikit pengetahuan teknikal dan belajar bagaimana untuk menjadi seorang veteran, pertumbuhan teknikal utama masih datang daripada projek yang dibangunkan oleh saya sendiri. Struktur institut ini sangat sesuai untuk pengaturcara seperti saya yang suka bermain dengan teknologi yang kompleks (tetapi tidak semestinya baru). Lebih-lebih lagi, bos langsung saya di institut itu ialah Zou Xin, yang membuatkan saya sangat memahami betapa pentingnya seorang pemimpin yang baik.
Sudah empat setengah tahun sejak saya menulisnya. Niat asal menulis GacUI adalah untuk membuat IDE untuk bahasa saya sendiri, tetapi ia menyeronokkan untuk menulis penghurai dalam C++ sebelum ini saya telah bereksperimen dengan projek di mana UI ditulis dalam C# dan algoritma gesaan pintar ditulis dalam C++.
Kemudian, saya hanya berfikir, adalah bagus jika semuanya boleh ditulis dalam C++. Tetapi sokongan perpustakaan C++ GUI untuk MVVM adalah sampah, jadi GacUI muncul. Tetapi beban kerja untuk membuat perpustakaan GUI benar-benar agak berat, dan saya mengejar pengalaman pembangunan yang baik, jadi saya telah mengusahakannya sekian lama. 1.0 sepatutnya dikeluarkan tahun ini...
Dengan membangunkan GacUI, saya bukan sahaja meluruskan pengalaman dan pengajaran daripada perpustakaan GUI 7 Kerajaan Syurgawi yang telah saya bina selama ini, tetapi juga mempelajari cara membangunkan program klien merentas platform pada kos minimum. Sebenarnya, menulis program merentas platform tidak sukar sama sekali. Saya tidak tahu mengapa terdapat begitu ramai orang di Internet yang membuat kekecohan mengenainya. Satu lagi faedah yang dibawa oleh GacUI kepada saya ialah saya pada dasarnya menyemak semua kandungan corak reka bentuk, dan kerana saiznya yang besar, saya juga membuat alat kecil yang secara khusus melaksanakan kebergantungan pesanan separa antara repo git yang berbeza - digunakan untuk kod C++ di bawah keseluruhan repo dibungkus ke dalam dua fail supaya ia boleh digunakan terus oleh repo lain. Saya pada asalnya ingin mencuba submodul, tetapi submodul hanya boleh melaksanakan kebergantungan pokok, yang sangat buruk.
GacUI akhirnya menyemak prinsip kompilasi yang dipelajari sebelum ini. Kerana dalam proses penyusunan XML, GacUI sebenarnya menterjemahkan segala-galanya ke dalam bytecode enjin skrip Pada akhirnya, ia sama ada menjalankan skrip secara langsung atau menterjemahkan skrip ke dalam C++ (dalam pembangunan). Oleh itu, untuk mencapai ini, tidak dapat dielakkan untuk menulis pengkompil, dan perkara yang disusun mesti dapat berkomunikasi dengan kelas dalam C++, jadi saya menyemak semula kandungan COM (walaupun saya tidak menggunakannya, saya hanya mencuba Membuat perkara yang sama).
Selepas penjanaan C++ selesai, saya akan terus menulis GacJS yang saya mulakan tahun lepas, memindahkan GacUI ke penyemak imbas, dan menjalankan IDE saya dalam semua aspek. Kawasan di mana C++ sesuai adalah luas dan mendalam.
# Pergi ke luar negara
Saya perlu mengatakan bahawa saya telah menukar kerja ke Institut Penyelidikan kerana saya tidak menyukai pangkalan data Akibatnya, Institut Penyelidikan melihat bahawa saya berasal dari SQL Server dan membuat banyak perkara pangkalan data untuk saya. Kemudian, saya bertanya kepada bos saya jika saya boleh melakukan sesuatu yang lain? Bos bertanya kepada saya apa yang anda mahu lakukan, dan saya berkata cuba dapatkan beberapa bahan pengkompil? Jadi bos saya kemudiannya mengaturkan saya untuk bekerja di institut penyelidikan lain untuk mencipta bahasa pertanyaan untuk pangkalan data graf yang diedarkan. Tetapi perkara seperti ini sangat mudah untuk dimulakan. Selepas menyelesaikannya dengan cepat, saya menjadi pembangun pangkalan data semula. Jadi ini membuatkan saya memahami kebenaran: kebanyakan institut penyelidikan tidak mempunyai apa-apa yang saya suka.
Jadi selepas beberapa tahun, kerana rasa tidak puas hati saya terhadap Beijing (primer) dan institut (minor) beransur-ansur meningkat, saya cepat-cepat mendapat isteri dan terlibat. Malah, ia sama seperti temuduga biasa:
4 Kemudian temuduga
pastinya) (ini
6 .Mohon visa
Proses ini membuatkan saya mengeluh bahawa penemuduga Amerika belum melihat dunia. Tekanan persaingan terlalu rendah, dan persoalannya sangat mudah untuk diselesaikan. Mereka perlu datang ke China untuk tinggal dan bertemu antara satu sama lain, jika tidak imperialisme AS akan dikalahkan lambat laun. Tetapi saya fikir aspek lain ialah pasukan yang membuat GUI merentas platform untuk Office telah melihat GacUI yang saya buat, saya rasa mereka fikir ia agak bagus, jadi mereka menemu bual saya secara santai.
#Microsoft Office
Kali ini apabila saya bertukar kerja, saya kebetulan bertemu dengan seseorang dari Microsoft yang ingin memecat orang dari Nokia Akibatnya, kebanyakan pasukan dibekukan kuota mereka Hanya Pejabat dengan poket yang dalam boleh merekrut orang, jadi saya tiada pilihan selain untuk datang ke Pejabat. Matlamat asal saya adalah untuk membina enjin JS untuk Edge, atau pergi ke kumpulan VS untuk membina pengkompil atau sesuatu, tetapi mereka terlalu lemah, jadi saya terpaksa menyerah.
Bekerja di Office adalah pembuka mata bagi saya. Saya mengalami cara mencipta perisian yang ditulis oleh 10,000 orang selama 30 tahun dan mempunyai ratusan gigabait kod dalam satu petikan repo. Oleh kerana mesin itu terlalu mahal, apabila anda mengubah suai kod, anda hanya boleh menyusunnya secara setempat Oleh itu, set CI yang kami buat berdasarkan msbuild juga termasuk kod lib/dll yang perlu dipautkan jika ia tidak berada dalam. cakera keras Pergi ke pelayan untuk mencari cache terkumpul pusat pemeriksaan semasa, dan muat turun fungsi terkumpul. Oleh itu, pada hari-hari apabila ladang bina kadang-kadang menutup telefon, kompilasi tempatan tidak dapat dilakukan kerana sambungan rangkaian yang terputus.
# Epilog
Mengimbas kembali perjalanan pengaturcaraan saya, semasa saya seorang pelajar, saya mungkin mula menulis permainan, kemudian menulis enjin permainan, kemudian mengkhusus dalam grafik, perpustakaan GUI dan enjin skrip yang diperlukan oleh enjin permainan Akhirnya, kerana tenaga saya, saya melahirkan Perpustakaan GUI dan peranti penyusun. Apabila saya mereka bentuk enjin skrip dari awal, saya memberi perhatian yang besar kepada isu bagaimana untuk menjeda skrip - sebenarnya, ia pada asasnya diperoleh daripada keperluan permainan - jadi daging manusia membuat pelbagai pelaksanaan coroutine yang aneh. Pada akhirnya, saya akhirnya mempelajari kaedah ortodoks, jadi masalah yang boleh diselesaikan dengan mudah menjadi sedikit lebih rumit disebabkan oleh keperluan kemudian (secara terang-terangan, ia adalah untuk membenarkan skrip menyesuaikan (atau menggodam) berkaitan coroutine sistem jenis kandungan), mengakibatkan keperluan untuk kaedah yang sangat kompleks untuk melaksanakan coroutine. Mengapa manusia saling menyakiti?
Apabila ia datang untuk kerja, ia pada asasnya
1. Saya pada asalnya ingin mendapatkan Visual Studio, dan saya tidak suka SQL semasa saya seorang pelajar Tetapi apabila saya bekerja, kerana krisis ekonomi, saya mendapat SQL Kandungan kerja termasuk Belajar pengetahuan pangkalan data profesional dan kawalan seret.
2 Tetapi selepas bekerja selama beberapa tahun, saya masih merasakan bahawa saya tidak menyukai SQL, jadi saya beralih kepada MSRA. Saya tak fikir pun, cuma saya tak suka buat ni, jadi saya pergi...
3 Kemudian saya fikir, okey, memandangkan penyusun tidak perlu melakukannya Bagaimanapun, saya hanya akan menyeret kawalan. Jadi saya memberitahu orang di Office, lihat betapa hebatnya saya dalam membuat GacUI! Orang di Pejabat berkata, Sial! Jadi saya telah direkrut untuk bertanggungjawab untuk bahagian bukan GUI dalam pasukan.
4. Selepas setengah tahun, bos mula mengatur kerja, dan saya memikirkan cara untuk menyatakan bahawa saya masih suka melakukan perkara lain. Jadi saya akhirnya mula melakukan tugas lama saya - membangunkan penyusun dalaman untuk pengaturcara Office.
Akhirnya, saya akhirnya melakukan kerja yang saya suka.
Atas ialah kandungan terperinci Pengaturcara legenda Zhihu Wheel Brother, saya berlutut selepas membaca ini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!