Bagaimana saya bisa mem-bootstrap komunitas pengembangan perangkat lunak di sekolah saya?


14

Saya seorang mahasiswa di University of South Florida yang frustrasi dengan lingkungan pendidikan dalam program Ilmu Komputer. Saat ini, saya mengambil "Desain Program." Saya harus belajar bagaimana mengatur kode sumber saya ke dalam fungsi dan modul untuk membuat program saya dapat dibaca dan dikelola; sebagai gantinya, saya belajar tentang array dan rekursi di C. Semester berikutnya, saya harus mengambil "Desain Berorientasi Objek," yang diajarkan melalui C ++ ( ngeri .)

Dua tahun lalu, saya jatuh cinta pada pemrograman, dan saya sudah belajar sebanyak yang saya bisa sejak saat itu. Prospek mengambil kelas C ++ lain membuat saya hampir menangis. Untuk alasan itu, saya pikir saya akan memulai klub pemrograman untuk bertemu dengan siswa yang sama ambisiusnya, belajar bahasa baru, mendiskusikan topik pengembangan perangkat lunak, dan bekerja dengan pengembang siswa lainnya.

Namun, saya mulai menyadari bahwa mungkin tidak ada siswa lain yang berbagi pengalaman pengembangan perangkat lunak saya. Itu bukan karena kurangnya motivasi tetapi kurangnya kesempatan: Saya hanya tahu satu kelas pemrograman lain ("Bahasa Pemrograman") dan tidak ada kelas tentang pengembangan perangkat lunak dunia nyata. Semua orang hanya memiliki pengalaman menulis skrip sepele dalam C dan C ++.

Saya menyadari bahwa jika saya ingin bekerja dengan pengembang perangkat lunak siswa lain, saya harus melatih mereka sendiri. Sekarang, saya berencana untuk menjadikan klub bootcamp pengembangan perangkat lunak, mengajar anggota bagaimana mengembangkan perangkat lunak dengan alat dan bahasa modern. Jelas, memulai kursus pengembangan perangkat lunak tidak resmi adalah tugas yang monumental dengan banyak pendekatan yang mungkin. Pertanyaan saya kepada Anda, pembaca yang budiman, adalah

Apa rencana serangan saya?

Haruskah saya

  • kuliah klub sendiri, mencoba menyeimbangkan pekerjaan klub dengan pekerjaan rumah?
  • meminta staf pengajar CS untuk mengajarkan topik-topik dalam keahlian mereka yang mungkin kurang relevan bagi anggota?
  • mencoba mencari pengembang yang simpatik dan berpengalaman di dalam atau di luar sekolah yang dapat berbagi beban kerja saya?
  • tampilkan video ceramah (dari MIT OpenCourseWare , Google Tech Talks , dll)?
  • mengadakan lokakarya pemrograman langsung?
  • menugaskan pekerjaan rumah?
  • melakukan sesuatu yang lain?

3
Mengapa Anda ngeri pada OOP yang diajarkan melalui C ++? Apakah Anda merasa tidak nyaman berurusan dengan bahasa tingkat tinggi? Jika demikian, bagaimana Anda berharap untuk belajar OOP?
Kamera

4
@ Evan: Jujur saja, jika Anda berpikir C ++ adalah bahasa tingkat rendah, maka kursus C ++ akan cocok untuk Anda. Anda akan belajar banyak. C ++ mungkin terlihat tingkat rendah pada awalnya untuk pemula karena ia menawarkan fitur tingkat rendah, tetapi Anda pasti tidak harus menggunakannya. Bahkan sebagian besar waktu, Anda akan menggunakan STL dan semua fitur OOP tingkat tinggi.
Kamera

10
C ++ tingkat rendah dibandingkan dengan, katakanlah, Jawa, Ruby, Javascript, C #, dll. Tingkat tinggi dibandingkan dengan banyak bahasa lainnya. Sepertinya ada perdebatan yang tidak ada gunanya.
Fishtoaster

2
@fishtoaster: Saya tidak akan mengatakan c ++ lebih rendah dibandingkan dengan java dan c #. Levelnya setinggi bahasa itu setidaknya (saya tidak tahu banyak tentang yang lain). Hanya ada keuntungan tambahan yang juga bisa tingkat rendah sehingga Anda mendapatkan yang terbaik dari kedua dunia.
n1ckp

1
@ n1ck: Pointer sebagai hal yang biasa (saya tahu C # memilikinya tetapi penggunaannya jarang), manajemen memori manual, tidak ada lambda (tidak yakin apa yang diberikan C # kepada mereka, python menggunakan lambdas), tidak ada pendahuluan asli, standar yang jauh lebih kecil perpustakaan, twiddling bit lebih sering, kompilasi diperlukan untuk platform yang berbeda, dll. Anda tidak perlu perakitan untuk menjadi tingkat yang lebih rendah daripada keduanya.
Macha

Jawaban:


20

Sejujurnya seluruh sikap Anda menyangkut saya. Anda bahkan belum menyatukan kelompok dan sudah Anda anggap Anda akan menjadi satu-satunya yang memiliki pengetahuan untuk diberikan dan orang yang harus memutuskan apa yang akan dilakukan kelompok.

Taruhan terbaik adalah mengumpulkan kelompok awal dan, sebagai kelompok, bertukar pikiran tentang apa yang ingin mereka lakukan. Apa yang ingin Anda lakukan secara pribadi tidak relevan dalam hal apa yang ingin dilakukan kelompok. Memutuskan apa yang harus dilakukan tanpa masukan dari anggota kelompok lain sebelum pertemuan pertama, Anda akan dianggap sebagai orang idiot yang sombong yang saya tidak ingin bekerja dengan sukarela. Dengan demikian Anda akan membunuh grup sebelum memulai.


Anda memang benar; Saya tidak perlu merumuskan dan mengimplementasikan rencana induk set-in-stone untuk klub sendiri. Namun demikian, saya memerlukan ide untuk kegiatan klub dan pertemuan untuk berdiskusi dengan anggota klub lainnya.
Evan Kroske

5

Karena semua orang di klub Anda datang secara sukarela, Anda harus membuatnya menarik dan memotivasi. Dan pekerjaan rumah tidak sepenuhnya memotivasi.

Mengajar siapa pun itu sulit, tetapi mengapa tidak mencoba mengajar dengan cara seperti apa pada akhirnya? Pada dasarnya Anda mengumpulkan semua orang dan membuat proyek kelompok dan bahasa. Proyek ini harus menarik dan dapat menunjukkan kemajuan yang terlihat tetapi tidak terlalu sulit. Setelah bahasa Anda dipakukan, Anda mengajari mereka dasar-dasar (sintaks, paket / ruang nama, kelas, pengetikan statis / dinamis, dll.). Anda kemudian memberi mereka sumber daya (buku, tutorial online, dokumentasi online), cara mudah untuk menghubungi Anda, dan bagian spesifik dari proyek untuk dikerjakan. Setiap orang kemudian mengerjakan proyek di waktu luang mereka, berkonsultasi dengan dokumentasi dan Anda sesuai kebutuhan.

Apa keuntungan dari proses ini?

  • Orang-orang tidak bosan mendengarkan Anda atau orang lain membicarakan sesuatu tentang setiap pertemuan
  • Orang-orang belajar cara mengajar mandiri, keterampilan dunia nyata yang sangat penting
  • Anda tidak terlalu memaksakan diri karena Anda bukan satu-satunya sumber pengetahuan
  • Anda tidak perlu tahu seluruh bahasa sebelum Anda bisa mengajarkannya karena Anda hanya perlu memperkenalkan mereka ke bahasa. Dan ketika mereka perlu bertanya tentang sesuatu, Anda dapat dengan cepat merisetnya. Namun Anda harus sedikit di depan orang lain, karena beberapa hal memerlukan mengetahui apa yang 5 langkah ke depan
  • Anda sedang menciptakan sesuatu, yang cenderung memotivasi orang

Satu-satunya cara untuk melihat apakah itu berhasil adalah dengan mencobanya.


Proyek kelompok akan menjadi ide yang bagus, jika saya bisa mempertahankan keanggotaan klub di bawah sepuluh siswa. Melewati itu, tim mulai menjadi berat. Namun, saya tidak bisa mendapatkan dukungan universitas jika saya melarang siswa bergabung dengan klub, dan saya yakin bahwa lebih dari 10 siswa akan tertarik untuk bergabung dengan klub. Klub hacking kami selalu memiliki lebih dari tiga puluh siswa di pertemuan mingguannya.
Evan Kroske

1
Jadi lebih dari satu proyek? Cobalah untuk menemukan minat bersama di antara semua anggota grup. Pertemuan pertama survei kepentingan pribadi dan kemudian mencoba untuk datang dengan proyek yang berputar di sekitar proyek-proyek itu?
Chris

4

Melihat diagram alur kursus untuk jurusan Anda, Anda benar-benar salah paham tentang apa yang diharapkan di berbagai kelas jurusan Ilmu Komputer.

Kelas yang Anda bicarakan adalah kelas pengantar yang memperkenalkan siswa pada berbagai konsep dasar dalam pengkodean. Sepertinya "Konsep Pemrograman" merupakan pengantar untuk profesi ini dengan ikhtisar 1 minggu dari semua bidang dasar ilmu komputer, tanpa pengkodean aktual. Dari sana, itu NORMAL untuk memiliki kursus pengantar di C, dan kursus pengantar lain di C ++ adalah NORMAL untuk jurusan Ilmu Komputer. Anda mungkin masuk ke program dengan beberapa pengalaman pengkodean, tetapi kebanyakan orang tidak. Program harus mengajarkonsep seperti rekursi, dan cara menulis kelas, dan overloading operator, dan templat dan semua itu (belum lagi mengajar tentang variabel, for-loop, jika-pernyataan, dll ...), jadi ada dua kelas yang pada dasarnya dirancang untuk mengajarkan Anda cara membuat kode dalam beberapa bahasa pemrograman. Dan mereka biasanya memiliki jenis nama yang menyesatkan yang dilakukan oleh kelas universitas Anda. Kelas yang mengajarkan tingkat organisasi yang Anda inginkan biasanya dinamai "Rekayasa Perangkat Lunak" atau "Pola Desain". Yang pertama biasanya merupakan persyaratan, dan yang terakhir biasanya pilihan (mungkin di tingkat pascasarjana), tetapi keduanya mungkin pilihan.

Ada perdebatan akademis dan industri tentang apakah kurikulum Ilmu Komputer berfokus pada organisasi perangkat lunak sebanyak yang seharusnya, apakah jurusan harus ditata ulang, dan apakah Ilmu Komputer dan Rekayasa Perangkat Lunak adalah jurusan yang berbeda, tetapi untuk saat ini, program Ilmu Komputer Anda adalah NORMAL .

(Dan bertahan di sana - dalam satu atau dua semester, Anda akan mendapatkan kelas yang lebih menantang yang mengajarkan hal-hal yang belum Anda pelajari sendiri.)


Saya tidak puas dengan "normal." Saya ingin meninggalkan perguruan tinggi dengan pendidikan kelas dunia dalam pengembangan perangkat lunak, dan saya bersedia bekerja (keras) untuk mencapainya. Saya berniat untuk pindah ke MIT daripada USF, jadi saya menggunakan program Ilmu dan Teknik Komputer MIT sebagai pendidikan CS ideal saya.
Evan Kroske

@Evan @Ken heh. Maka kuliah saya saya anggap tidak normal. Pengantar Aplikasi Komputer (yaitu, bagaimana Anda menggunakan Word) -> Logika dan Algoritma Komputer (yaitu, diagram alur dan logika boolean. Sebenarnya tidak ada algoritma untuk itu) -> Pemrograman Dalam C ++ (sintaks, OOP, dasar-dasarnya) -> Lanjutan Pemrograman Dalam C ++ (algoritma, rekursi, pointer) -> Pemrograman Di Jawa (hal yang sama seperti dasar C ++) -> Pemrograman dalam Cobol (Belum mendapatkan sejauh itu, tapi Tuhan saya takut itu)
Earlz

1

Bagaimana dengan kompetisi pemrograman? Bahkan sesuatu seperti Perl Golf (atau PHP Golf), di mana Anda memiliki orang (atau tim) yang bekerja untuk memecahkan masalah menggunakan kode seminimal mungkin? Ini cara yang bagus untuk belajar lebih banyak tentang bahasa dan kompetisi selalu membuat hal-hal menarik.

Tentu saja Anda harus menawarkan lebih dari sekadar kompetisi, tetapi mereka cukup mudah diatur dan saya selalu menikmatinya.


1

Anda benar bahwa Anda memerlukan beberapa struktur; Anda ingin memaksakan diri Anda dan orang lain untuk belajar, dan tidak hanya duduk-duduk mengobrol tentang perangkat lunak / menggerutu tentang pilihan kursus yang buruk. Tapi saya tidak yakin memperlakukan ini sebagai kelas dengan Anda sebagai gurunya adalah cara untuk pergi; Anda belum ahli, dan Anda dalam hal ini untuk belajar sesuatu juga.

Bagaimana kalau mengatur klub di sekitar proyek perangkat lunak? Bukan beberapa program pekerjaan rumah mainan, tetapi sesuatu yang menurut Anda mungkin berguna bagi Anda. (Perhatikan bahwa "sedikit berguna" masih memenuhi syarat sebagai "berguna"; Anda sedang mencoba belajar sambil bekerja, tidak menemukan startup. :-)) Jika klub memiliki cukup banyak orang untuk beberapa tim, bentuk beberapa tim. Tim memutuskan bahasa apa yang ingin digunakan, apa spesifikasinya, bagaimana tenaga harus dibagi, dll., Dll., Dan mengerjakannya secara individual dalam waktu mereka sendiri. Kemudian pada pertemuan klub mingguan Anda, Anda membahas bagaimana hal itu akan berhadapan muka, di mana penghalang jalan, hal-hal rapi yang telah Anda pelajari, dll.

Saya juga sangat suka ide membawa dosen tamu, baik itu dosen, profesional, atau video yang menurut Anda atau orang lain layak untuk dibagikan. Jadi, Anda bisa mengatur pertemuan malam seperti ini:

  1. Kuliah tamu tentang beberapa topik perangkat lunak dari seseorang yang mengetahuinya dengan baik.
  2. Sesi tanya jawab pada kuliah (mudah-mudahan dengan dosen yang berpartisipasi, tetapi hanya di antara kalian sendiri untuk video).
  3. Bagilah menjadi tim proyek, lakukan hal-hal proyek.

Itu akan memakan waktu malam dan diisi dengan kebaikan yang meningkatkan pengetahuan. Semoga.

Bagaimanapun, saya berharap Anda beruntung dengan proyek ini. Ketika Anda mendapatkannya dari tanah, saya harap Anda akan kembali ke sini dan memberi tahu kami bagaimana hasilnya.


1

Proyek kelompok adalah ide bagus. Terutama jika proyek itu adalah sesuatu yang dapat membantu universitas, atau teman sekelas Anda.

Saya bergabung dengan grup saat di perguruan tinggi yang mengerjakan proyek untuk siswa.
Proyek paling populer adalah tur virtual 360 derajat kampus.
Kami membeli peralatan yang dibutuhkan dan mulai mengambil foto di sekitar kampus. Kemudian kami membangun sebuah situs web untuk menampung tur, mencari hosting, dan menampilkannya di situs web universitas untuk calon mahasiswa. Proyek ini menjangkau lebih dari sekedar tugas pemrograman, dan membuat non-programmer juga tertarik.

Cobalah mengidentifikasi situs web atau aplikasi baru yang tidak hanya akan Anda gunakan, tetapi semua orang di kampus juga ingin menggunakannya. Saya pikir lebih mudah dan lebih menyenangkan untuk dipelajari jika Anda memiliki tujuan dalam pikiran.


Saya sangat suka ide ini; ada banyak cara yang bisa ditambahkan klub baru saya atau meningkatkan sistem TI kampus. Karena penasaran, kemana kamu kuliah?
Evan Kroske

Universitas Clarion di PA. Saya bahkan pergi ke sebuah wawancara di mana pewawancara menyebutkan telah menggunakan tur untuk pencarian putranya di kampus. Itu sangat keren.
Todd Bumbarger

1

Jika ini akan menjadi kegiatan ekstra kurikuler, jangan lakukan pekerjaan rumah. Itu hanya timpang.

Anda mungkin bisa mendapatkan sesuatu yang keren dengan memulai grup github dan mengirim poster / email di sekolah Anda (saya kira anak-anak sekarang juga menggunakan Facebook dan Twitter? Mungkin juga merupakan ide bagus untuk mencapai poin tersebut). Ketika Anda mendapatkan sekelompok 5-6 orang yang benar-benar tertarik bersama, putuskan proyek dan kerjakan saja.

Jika tidak ada minat, sangat mudah untuk bergabung dengan proyek sumber terbuka jika Anda cukup terampil. Sederhana seperti mencari sesuatu yang Anda minati di github, dan mulai berbicara dengan pengembang.

Keuntungan yang Anda miliki bahwa generasi sebelumnya tidak adalah bahwa sama sekali tidak sulit untuk terhubung ke programmer di tingkat Anda, dan dalam bahasa Anda, sementara secara geografis sangat berbeda. Dan maksud saya bukan hanya mengirim email. Skype / iChat / Ventrilo membuat konferensi suara menjadi mudah, alat-alat seperti git / mercurial (dan halaman proyek terkait online) membuatnya mudah untuk dikodekan sebagai grup bahkan jika Anda berada di sisi yang berlawanan dari atlantic. Sebenarnya tidak ada alasan untuk tidak mengkode secara sosial hari ini, jika itu yang ingin Anda lakukan.

Akhirnya, jangan biasakan menilai orang berdasarkan bahasa yang mereka tahu / ingin ketahui. Ini adalah jebakan mudah untuk jatuh ke dalam ketika Anda satu-satunya Smalltalker dalam kawanan orang yang berpikir C ++ mewakili batas pemrograman, tetapi itu tidak akan membuat Anda banyak teman, dan itu akan memberi Anda bias terhadap alat tertentu. Saya telah bertemu peretas yang jauh di depan saya dalam hal keterampilan dan pengalaman, yang telah menggunakan LISP, Perl dan C pada proyek yang sama . Orang-orang yang berada di puncak tumpukan pengembang profesional cenderung tidak peduli berapa level alat mereka selama mereka melakukan pekerjaan itu.


1

Ini kedengarannya seperti peluang jaringan, saya yakin ada sejumlah siswa yang tertarik dalam pemrograman dengan tingkat pengalaman / pelatihan yang sama ... Anda tidak menemukannya ...

Sudahkah Anda menghadiri salah satu Code Camps (pelatihan terkait pengembang gratis) di area Tampa Bay, atau bergabung dengan salah satu kelompok pengguna pemrograman lokal?

Kedua sumber daya ini akan memberi Anda peluang jaringan. Dan alih-alih merasa harus melatih sesama siswa, Anda akan dapat mengundang teman-teman Anda bersama Anda dan kemudian membahas apa yang dibahas.

Anda juga akan mendapatkan akses ke orang-orang yang memprogram sebagai karier dan bisa mendapatkan gambaran tentang situasi seperti apa yang akan Anda hadapi di "dunia nyata".

Setelah menjelajahi sumber daya lokal ini, Anda mungkin masih menemukan peluang untuk berbagi pengetahuan dengan melakukan presentasi sendiri, yang hebat. Membagikan apa yang telah Anda pelajari dengan grup pengguna atau sebagai pembicara presentasi kamp kode adalah cara yang baik untuk mendapatkan umpan balik tentang apa yang telah Anda pelajari dan membuka Anda untuk belajar lebih banyak juga.

Saya tumbuh di daerah Tampa Bay dan menghadiri banyak acara yang disponsori Microsoft gratis, grup pengguna lokal Anda harus memiliki informasi tentang cara untuk terlibat dalam acara-acara itu juga.

Yah, ini adalah balasan panjang lebar ...

Code Camp berikutnya di Tampa adalah pada 13 November 2010 menurut situs web tampacodecamp.

Berikut ini tautan ke grup pengguna INETA / pemrograman lokal Anda:

http://www.tampadev.org/

(Saya baru di grup ini dan hanya dapat menyertakan satu tautan.)


1

Bagaimana kalau menemukan proyek sumber terbuka (atau lebih dari satu) yang membuat kontribusi kelompok Anda?

Saya pikir tantangan terbesar yang mungkin Anda hadapi adalah ketika menulis kode itu menyenangkan, itu semua admin sekitarnya dll yang dapat dengan cepat mengubahnya menjadi pengalaman yang menyakitkan. Jika Anda dapat menemukan proyek open-source yang ada, Anda setidaknya harus memiliki beberapa kerangka kerja dukungan.

Open source akan membawa Anda ke beberapa kebiasaan baik, dan meskipun Anda akan sedikit basah di belakang telinga dibandingkan dengan beberapa kontributor Anda akan memiliki satu keunggulan utama dibandingkan orang lain - Anda semua akan berada di lokasi yang sama dan dapat mengadakan percakapan dengan anggota tim Anda yang biasanya merupakan salah satu yang terbesar dengan kerja komunitas open source ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.