Belajar pemrograman mundur, atau “jadi saya gagal dalam tes FizzBuzz. Sekarang apa? ”[Ditutup]


94

Latar Belakang Kecil

Saya berusia 28 hari ini, dan saya tidak pernah memiliki pelatihan formal dalam pengembangan perangkat lunak, tetapi saya memiliki dua gelar pendidikan tinggi yang setara dengan BA dalam Hubungan Masyarakat dan MBA Eksekutif yang berfokus pada Manajemen Proyek. Saya telah bekerja di bidang-bidang tersebut selama sekitar 6 tahun, 2,5 tahun yang lalu saya berhenti / kehilangan pekerjaan dan memutuskan untuk mengubah arah.

Setelah sebulan memikirkan segalanya, saya memutuskan untuk mulai lepas mengembangkan situs web kecil di WordPress. Saya belajar sendiri jalan saya ke dalamnya dan hari ini saya bisa mengatakan saya menjalankan karir yang sederhana tetapi berhasil mengembangkan tema dan plugin dari awal untuk klien saya - sebagian besar agen outsourcing beberapa pekerjaan dev mereka untuk situs web menengah / besar.

Tetapi kadang-kadang saya hanya merasa bahwa tidak cukup belajar matematika, atau tidak memiliki pemahaman formal tentang hal-hal yang benar-benar menghambat saya ketika saya harus bersaing atau bekerja dengan pengembang yang lebih berpengalaman. Saya terus mencari cara untuk belajar lebih banyak tetapi sepertinya saya tidak memiliki dasar-dasarnya.

Sayangnya, menghabiskan 4 tahun lagi di Ilmu Komputer bukan merupakan pilihan saat ini, jadi saya mencoba mempelajari semua yang saya bisa dari buku dan sumber daya online. Metode ini tidak akan membuat NASA mempekerjakan saya, tetapi saya benar-benar tidak peduli sekarang. Tujuan saya adalah untuk terlebih dahulu lulus ujian dan untuk dapat menyebut diri saya seorang programmer sejati.

Saat ini saya menghabiskan waktu luang saya mempelajari Java For Programmer (untuk memahami bahasa yang semua orang katakan sulit / menuntut), membaca kutipan Kode Lengkap (untuk mendapatkan praktik terbaik) dan juga Kode: Bahasa Tersembunyi Komputer Hardware dan Software (untuk memahami cara kerja komputer).

TL; DR

Jadi, situasi saya saat ini adalah ini: Saya pada dasarnya mampu menulis sistem lengkap apa pun di PHP (dengan bantuan Google dan beberapa buku), mengintegrasikan Ajax, SQL dan yang lainnya, dan mungkin sedikit lebih lambat dari yang diharapkan oleh dev yang berpengalaman. karena semua penelitian yang terlibat.

Tapi saya terdampar kemarin mencoba mencari (bukan Google) solusi untuk tes FizzBuzz karena saya tidak memiliki if($n1 % $n2 == 0) metode modulus operator hafal.

Apa yang Anda sarankan sebagai cara yang baik untuk menyelesaikan dilema ini? Apa mata pelajaran / buku yang harus saya pelajari yang akan membuat saya memecahkan masalah lebih cepat dan mungkin lebih "dengan cara programmer"?

EDIT - Tampaknya ada beberapa kebingungan tentang apa yang tidak saya ketahui untuk menyelesaikan FizzBuzz.

Mungkin saya tidak mengekspresikan diri saya dengan benar: Saya tahu langkah-langkah yang diperlukan untuk menyelesaikan masalah. Yang tidak saya hafal adalah operator modulus. Masalahnya adalah dalam mentransposisikan matematika dasar ke program, bukan dalam mengetahui matematika dasar.

Saya mengikuti tes untuk bersenang-senang, setelah membacanya di Coding Horror . Saya baru saja memutuskan itu adalah garis perbandingan dasar yang baik antara saya dan para devs yang terlatih secara formal.

Saya hanya menggunakan ini sebagai contoh bagaimana tidak berurusan dengan matematika di lingkungan komputer sebelum membuat saya kehilangan waktu mencari hal-hal dasar seperti operator modulus untuk dapat memecahkan masalah sederhana.


63
Ketika saya membaca ini: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)dan menggabungkan ini dengan Anda tidak tahu if($n1 % $n2 == 0), saya bertanya-tanya tentang paparan Anda terhadap hal-hal yang ditulis dalam PHP. Saya pikir sebagian besar hal yang Anda lakukan melampaui perhitungan modulo sederhana. Bisakah Anda memberi lebih banyak wawasan tentang apa yang menurut Anda bisa Anda lakukan?
phant0m

10
Saya juga seorang programmer otodidak .. telah melakukannya lebih dari 10 tahun sekarang, semua web, sepanjang waktu .. saat itu tidak ada kelas pengembangan web ... saya pikir ada beberapa manfaat untuk belajar sendiri. Anda benar-benar ingin belajar tentang prinsip dan pola desain OO yang mendasar. mereka akan banyak membantu Anda memilikinya di belakang kepala Anda ketika menyerang masalah .. Saya biasanya menemukan bahwa saya tidak selalu memiliki vocab yang dimiliki orang lain, tetapi jika Anda menikmati pengkodean, dan menikmati menulis solusi yang elegan, maka pada akhirnya Anda Anda dapat memasukkan kode jalan Anda ke dalam apa pun yang Anda inginkan
hanzolo

56
Berkaitan dengan stuck b/c I didn't memorize %masalah ini, perlu dicatat bahwa ada cara lain untuk melakukan ini: (dengan asumsi $ n2! = 0) if (is_int ($n1 / $n2))atau if (($n1 / $n2) == (int) ($n1 / $n2))Mengetahui kata kunci adalah satu hal, dan mengetahui bagaimana mengekspresikan ide yang mendasarinya tanpa adanya solusi bawaan adalah lain.
grossvogel

18
@grossvogel Persis! Salah satu alasan orang menyukai Fizzbuzz adalah karena ada begitu banyak cara untuk menyelesaikannya. Ini bukan sekadar trik untuk mengetahui apakah Anda mengenal operator modulus. Salah satu keterampilan pemrograman utama adalah kemampuan untuk menerjemahkan masalah dari formulir yang dinyatakannya dalam bentuk yang terbaik untuk pengetahuan / alat / sumber daya / dll.
octern

18
Tidak mengetahui operator modulus bukan alasan untuk gagal FizzBuzz. Ketika Anda menemukan sesuatu yang hilang, Anda harus dapat mengatasinya.
Loren Pechtel

Jawaban:


144

Dalam kasus Anda, karena Anda belajar sendiri dan sudah memiliki apa yang tampaknya merupakan pendekatan pembelajaran yang baik, sehat, dan tanpa-BS. Masih beberapa saran ...

Latihan membuat sempurna

Saya pikir Anda harus terjun ke dalam latihan progamming, seperti:

Bahkan ambil pertanyaan ujian sebelumnya dari universitas terkenal di sekitar Anda, atau kompetisi pemrograman lokal (atau jarak jauh). Sebagai contoh, kami memiliki yang bagus di Perancis untuk calon programmer sekolah menengah yang disebut Prologin , dan itu memang memberikan setiap tahun serangkaian teka-teki yang menggaruk-garuk kepala (mungkin hanya bahasa Prancis, maaf, tapi itulah yang saya maksudkan ).

Untuk lebih lanjut: Di mana saya dapat menemukan Teka-teki dan Tantangan Pemrograman?

Buku dan Referensi Klasik

Kami juga bisa merekomendasikan daftar buku - buku menakjubkan yang sangat panjang , tetapi saya akan mengatakan jawaban Zen adalah bahwa tidak ada satu pun cara yang tepat untuk Pencerahan.

Akan sulit untuk memberi tahu Anda mana yang berada di daftar teratas. Jadi teruslah membaca banyak hal untuk mempelajari jebakan umum yang harus dihindari dan praktik terbaik yang harus diikuti, seperti yang Anda lakukan dengan benar sekarang.

Untuk lebih:

Mendorong Batas

Juga, cari bahan yang menggaruk kepala, seperti:

Tidak harus diambil sebagai contoh hal yang harus dilakukan saat ini, tetapi patut untuk mencoba mencari tahu apa yang terjadi di sana.

Sistem Peer adalah Motivasi

Anda mungkin juga ingin bersembunyi di sekitar (dan terlibat dalam) komunitas berikut untuk meningkatkan keterampilan Anda secara bertahap dengan dikonfrontasi dengan orang lain.

Pendidikan Paruh Waktu

Jika Anda tidak memiliki waktu atau motivasi untuk ikut serta dalam kursus 4 tahun atau sesuatu yang serupa (yang bahkan mungkin tidak diperlukan atau bermanfaat sama sekali, dan mahal), Anda dapat mempertimbangkan untuk mencari materi pengajaran online. Tentu saja, ini tidak terbatas pada ilmu komputer.

Berkat upaya MIT OpenCourseWare yang asli , sekarang ada banyak universitas yang mengikutinya , dan Anda dapat menemukan banyak materi kursus tingkat universitas secara gratis. Tidak selalu mudah dinavigasi dan membacanya sendiri, tetapi beberapa dilakukan dengan cukup baik. Untuk memulai dari bawah ke atas dan naik ke atas, pertimbangkan juga untuk melihat Akademi Khan .

Beberapa melangkah lebih jauh, dan menawarkan kursus online nyata gratis, di mana Anda juga memiliki akses ke materi kursus, tetapi di mana mereka juga menyediakan kuliah mondar-mandir dan penilaian diri secara teratur. Misalnya, kunjungi Coursera atau Udacity .

Sebagian besar di atas sering menerbitkan kuliah mereka di Youtube atau iTunesU, jadi Anda akan menemukan banyak materi jika kehausan Anda akan pengetahuan belum padam oleh semua tautan sebelumnya.

Jika Anda menginginkan sesuatu yang memberikan pengalaman lebih dekat ke universitas "nyata", Anda dapat mempertimbangkan universitas jarak jauh, yang juga memungkinkan Anda untuk bekerja paruh waktu, tetapi mengharuskan Anda untuk mengikuti langkahnya, dan memiliki penilaian mandiri dan akhir ujian tahun (kadang-kadang di tempat), seperti dengan OpenUniversity dan varian internasionalnya.

Passion Keeps You Going

  • Temukan proyek kesayangan: buat proyek Anda sendiri atau bergabunglah dengan satu atau lebih proyek perangkat lunak yang ada dan berkontribusi.
  • Kode, kode, kode. Dan kemudian kode lagi.

(dan dapatkan bola mata yang cukup melihat kode Anda untuk mengkritik Anda dan perspektif berbedaveve)

Orang Prancis berkata:

C'est en forgeant que l'on devient forgeron.

Terus lakukan apa yang Anda lakukan, dan akhirnya Anda akan menjadi ahli. Membutuhkan waktu dan kerja.

Lihat juga Saya Mengalami Kesulitan Belajar untuk saran lebih lanjut.


PS: Walaupun itu alat yang sangat kontroversial untuk wawancara, dan tidak membantu mengidentifikasi kandidat yang baik, saya sering menggunakan FizzBuzz untuk setidaknya menyingkirkan "yang buruk". Jadi, lakukan latihan ini! :)


3
C'est super ça! :) Terima kasih untuk daftarnya. Project Euler dan teka-tekinya tampak sangat bagus. Dan saya sudah menggunakan beberapa situs SE lainnya. Akan menyelam ke dalamnya.
moraleida

@moraleida: Senang Anda menyukai jawabannya. Sama-sama.
haylem

Tentang PS Anda: Saya tidak terlalu khawatir tentang wawancara sekarang, karena saya benar-benar tidak ingin kembali menjadi karyawan. Saya mengikuti tes untuk bersenang-senang, setelah membacanya di Coding Horror. Saya baru saja memutuskan itu adalah garis perbandingan dasar yang baik antara saya dan para devs yang terlatih secara formal. :)
moraleida

4
Memberi +1 hanya untuk alasan mengapa FizzBuzz digunakan di akhir ... Terlalu sering saya melihat komentar di sini atau di blog tentang orang-orang yang mengkritiknya karena mereka menganggap perusahaan menggunakannya untuk mengidentifikasi pembuat kode-super. (Kepada perusahaan-perusahaan itu: Anda salah melakukannya!)
Izkata

1
Ini terdaftar pada beberapa tautan, tetapi saya merasa itu memerlukan panggilan: Saya juga akan melihat-lihat rosettacode.org . Ini memiliki sejumlah besar masalah yang berbeda dipecahkan dalam sejumlah besar bahasa pemrograman. Ini adalah praktik yang baik dalam membaca kode, yang sama pentingnya dengan menulisnya, serta cara yang bagus untuk melihat banyak pendekatan berbeda untuk menyelesaikan masalah yang sama. Dan jika Anda menemukan masalah yang belum diselesaikan dalam bahasa yang Anda tahu atau ingin pelajari, itu adalah tantangan pemrograman untuk Anda di sana.
Mark Reed

60
I didn't have the if($n1 % $n2 == 0) method memorized.

Saya belum lama mengkode (mulai belajar sendiri SQL sekitar 27 bulan yang lalu dan mulai menulis dalam Perl sekitar 20 bulan lalu), tetapi kutipan di atas terdengar seperti beberapa hal yang saya dengar dari mantan siswa:

Bagaimana saya harus mengingat teknik integrasi mana yang digunakan untuk setiap masalah?

Saya tidak mengingat apakah saya harus menambah atau melipatgandakan probabilitas, atau menggunakan "n pilih k" atau menggunakan faktorial.

Tunggu sebentar! Anda mengatakan bahwa x sama dengan 2 kemarin! Sekarang sama dengan nol ?!

Oke, yang terakhir itu mungkin agak keras ... tapi intinya saya mencoba membuat penyelesaian masalah bukanlah menghafal . Jika ya, maka beberapa orang jenius dapat memprogram komputer untuk menyelesaikan setiap masalah, dan tidak ada di antara kita yang harus berpikir lagi (betapa nerakanya dunia itu ...).

Sekarang, memang benar bahwa setiap upaya intelektual terdiri dari setidaknya sedikit hafalan. Secara khusus, jika Anda akan membuat kode dalam PHP, maka Anda harus memahami tipe data dasar (angka, string, array), hal-hal dasar yang dapat Anda lakukan dengan mereka (untuk angka: penambahan, pengurangan, perkalian, pembagian, dan modulus; untuk string: concatenation, substrings, replacement, dan setidaknya beberapa pengetahuan tentang regular expressions; untuk arrays: concatenation, tacking on elements, splicing out elemen, looping, menghitung elemen, dll), dan struktur logis dasar yang dapat digunakan seseorang (if / then / else pernyataan, foreach loop, while loop, dll).

Kemudian, ketika Anda menemukan masalah, gunakan masalah untuk memberikan konteks untuk alat apa yang Anda butuhkan. Untuk FizzBuzz, Anda perlu tahu kapan angka dapat dibagi 3, 5, atau 15. Oke, jadi kita berhadapan dengan angka .... alat dasar apa yang memungkinkan kita memberi tahu ketika satu bilangan bulat dapat dibagi dengan yang lain? Nah, operator modulus. Jadi, gunakan itu. (Tentu saja, jika nomor Anda adalah $n, Anda bisa menjadi mewah dan melihat apakah digit terakhir $nadalah 0 atau 5, dan / atau jika angka-angka $ndijumlahkan dengan sesuatu yang dapat dibagi oleh 3, tapi saya ngelantur ...) Anda harus lakukan ini untuk setiap angka antara 1 dan 100, sehingga untuk menghindari terowongan karpel, gunakan satu foreachlingkaran.

Moral dari cerita ini adalah bahwa jika di satu sisi Anda mengatakan "Saya pada dasarnya mampu menulis sistem lengkap dalam PHP" dan di sisi lain Anda tidak dapat kode FizzBuzz, maka pernyataan pertama tidak benar. Beberapa mantan siswa kalkulus saya bersumpah bahwa mereka memahami konsep, tetapi mereka tidak bisa melakukan masalah pada ujian ... atau masalah pekerjaan rumah ... atau masalah kuis. Mereka salah tentang pengertian mereka juga.

Berhentilah mencari alasan dan pelajari dasar-dasarnya.


6
Saya tidak menghafal, saya memetabolisme dan menjadikan hal-hal ini bagian dari intuisi saya. Selalu berusaha mengembangkannya.
ncmathsadist

@ncmathsadist - Ya, memperluas intuisi adalah kuncinya, tetapi bahkan intuisi harus bergantung pada menghafal sejumlah kecil konsep dan fakta yang sangat mendasar.

sebagai catatan, Anda tidak perlu mengalikan angka dengan 3 dan kemudian menambahkan digit untuk melihat apakah angka itu dapat dibagi 3, Anda bisa menambahkan angka. misalnya, 864, 8 + 6 + 4 = 18 yang dapat dibagi dengan 3 dan begitu juga 864
Oztaco

@ leaf68 - Duh! [menampar dahi] Anda benar sekali ... biar diedit!

27

Anda mungkin berpikir FizzBuzz adalah masalah mainan; kapan saya harus menggunakan operator modulus dalam program nyata. Tapi sungguh Anda menggunakannya sepanjang waktu. Tiga contoh umum:

  1. Anda menampilkan tabel dan Anda ingin warna latar belakang bergantian untuk baris yang berbeda. Anda memeriksa apakah suatu baris genap ( row_number % 2 == 0) dan menampilkan satu warna untuk baris genap dan satu untuk baris ganjil.
  2. Anda memiliki koleksi objek yang Anda lewati dan Anda ingin mencetak tabel dengan objek N per baris; maka kriteria kapan menambahkan baris baru adalah (item_number% N == 0). Saya sebenarnya punya pertanyaan SO tentang perilaku yang tepat ini meskipun dalam bahasa templating kondisi if item_number % N == 0ditulis sebagai setara ( if item_number|divisbleby: N).
  3. Anda sedang melakukan beberapa operasi yang ingin Anda kelompokkan ke dalam transaksi yang hanya akan dilakukan ketika grup mencapai ukuran tertentu untuk alasan efisiensi. Mungkin Anda menggunakan API data google dan Anda tidak ingin header HTTP / overhead otentikasi untuk membuat transaksi baru untuk setiap operasi, jadi Anda mengelompokkannya menjadi 50 grup operasi. Atau Anda menyimpan catatan ke database Anda dan ingin melakukan transaksi ketika ukurannya masuk akal. Sesuatu seperti if cur_item_number % 50 == 0 then commit_data.

Tentu ada cara lain untuk melakukan semua hal ini. Tetapi Anda dapat melakukan desis desis tanpa menggunakan operator modulus atau membandingkan divisi float ke divisi integer. Misalnya, untuk FizzBuzz Anda dapat melakukan sesuatu seperti pseudo-code berikut.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Untuk menyimpulkan, jika Anda ingin menjadi programmer hebat suatu hari nanti, jangan langsung belajar buku bahasa. Ya, sebuah buku PHP / Java akan membuat Anda mendapatkan jawaban dari google / stackoverflow dan program setengah kerja jauh lebih cepat daripada yang lain. Tetapi untuk benar-benar dapat mengetahui cara menulis program optimal yang berkualitas dan berpikir seperti seorang programmer Anda perlu beberapa paparan buku CS nyata.

Mulailah dengan buku CS yang memperkenalkan bahasa pemrograman dan latar belakang CS, dengan contoh terkenal tentang Struktur dan Interpretasi Program Komputer (yang akan mengajarkan Skema - dialek Lisp) atau mungkin yang lain seperti Think Python Cara Berpikir Seperti Komputer Ilmuwan (yang belum saya baca). Keduanya gratis online.

Anda akhirnya harus membaca buku algoritma yang bagus, yang terbaik adalah Algoritma CLRS (tidak gratis), meskipun buku algoritma online gratis inibisa menjadi pengganti berbiaya rendah (meskipun jika Anda bisa membeli CLRS). Buku algoritma akan mengajarkan Anda bagaimana cara memecahkan masalah komputer dan memperkenalkan Anda ke berbagai struktur data (Array / Linked Linked / Heaps / Binary Trees / B-Trees / HashTables) dan algoritma penting yang perlu Anda ketahui cara menggunakan secara optimal . Anda tidak perlu mengingat setiap bukti atau tahu cara menulis dengan sempurna setiap algoritma (yang pernah menggunakan Fibonacci Heap); tetapi Anda harus secara intuitif tahu dua bersarang untuk loop adalah O (N ^ 2); jenis perbandingan paling baik adalah O (N lg N), pencarian biner adalah O (lg N), dapat menemukan median dalam O (N), mengapa basis data hard disk menggunakan B-Trees, dll.). Minimal, pengetahuan yang kuat tentang buku algoritma akan membantu Anda ace wawancara pemrograman teknis dari berbagai google / facebook. Saat membaca buku pemrograman, jangan hanya membaca sekilas; kamu'

Saya juga merekomendasikan buku tentang rekayasa perangkat lunak (baik Code Complete atau Pragmatic Programmer) setelah Anda melewati buku CS dan algoritma, yang akan mengajarkan praktik terbaik tentang cara menulis kode yang baik yang dapat dipelihara (nama yang jelas; komentar hanya bila perlu ; simpan kode bersama; refactor bila perlu; gunakan kontrol versi; dll).


4
Komentar terbaik; sementara saya melihat banyak orang mengatakan latihan, latihan, latihan, itu bukan cara untuk pergi. Latihan membuat mereka sempurna, tetapi itu hanya menegakkan perilaku buruk. Kepada OP: Ekspos diri Anda dengan konsep lain, pelajari mengapa quicksort lebih disukai daripada bubbleort. Hanya latihan sempurna yang membuat sempurna. Dapatkan kursus CS itu.
Pieter B

2
Terima kasih telah memposting kode contoh itu, saya sudah berpikir saya harus melakukannya sendiri. - Kita dapat membangun sirkuit logis kompleks menggunakan gerbang NAND saja; kami memiliki bahasa dengan sedikit operasi sederhana yang diselesaikan Turing; kita tidak perlu operator mewah itu untuk menyelesaikan masalah. Memecahkan masalah bukan hanya Mengetahui alat yang tepat, bisa mengatasi masalah, mencari solusi yang sesuai dengan pengetahuan Anda sendiri adalah apa yang membuat seorang programmer.
colek

22

Tapi saya terdampar kemarin mencoba mencari (bukan google) solusi untuk tes FizzBuzz karena saya tidak memiliki metode if ($ n1% $ n2 == 0) yang dihafalkan.

Tidak ada yang menghafal hal itu. Anda seharusnya membuat sendiri. Jika Anda tahu operator modulus dan Anda tahu apa fungsinya, maka itu sangat cocok untuk masalah FizzBuzz.

Saya akan mengambil risiko di sini dan umumnya menyarankan bahwa masalahnya adalah PHP. Saya suka mengatakan bahwa Java adalah bahasa terburuk yang pernah dirancang, dan PHP adalah bahasa terburuk yang pernah ada , karena bahkan penciptanya mengakui bahwa itu tidak pernah dirancang. Sulit untuk mempelajari praktik rekayasa perangkat lunak yang baik ketika lingkungan Anda secara praktis merupakan definisi bagaimana tidak melakukannya. Dan tergantung pada kerangka kerja untuk menyelesaikan semuanya tidak banyak bicara.

Saya saat ini menghabiskan waktu luang saya belajar Java For Programmer (untuk memahami bahasa yang semua orang bilang sulit / menuntut)

Jawa adalah salah satu bahasa yang termudah dan terburuk yang ada. Hanya ada satu hal: warisan manual yang dikumpulkan dari sampah. Jika teman atau penasihat Anda mengatakan bahwa Java itu sulit, maka cari teman baru. C ++ adalah bahasa yang sulit yang mencakup banyak konsep, dan bahwa tak seorang pun akan membantah. Anda juga bisa melakukan C #, yang setidaknya memiliki beberapa obat generik dan lambdas.

Bagaimana Anda akan belajar membuat kode, ketika bahasa Anda dirancang dan diimplementasikan oleh orang-orang yang tidak bisa membuat kode, dan Anda bergantung pada kerangka kerja untuk semua yang Anda lakukan?


14
@moraleida: Tidak perlu malu mencari sintaksis untuk operator yang Anda tidak punya alasan untuk digunakan.
DeadMG

2
@moraleida: dalam hal ini saya setuju tidak ada masalah nyata. Saya tidak berpikir seorang profesional, pewawancara atau yang lain, akan keberatan jika Anda tidak dapat menggunakan sintaksis yang tepat untuk bahasa yang berbeda, selama Anda dapat dengan jelas mengungkapkan apa maksud Anda.
haylem

5
Menyetujui sebagian besar poin, tetapi mengapa Anda menganggap Jawa 'bahasa terburuk yang pernah dirancang'? Saya bukan penggemar berat Jawa, tapi ini terdengar sangat keras kepala.
Casey Kuball

7
-1 untuk menggunakan pertanyaan sebagai alasan untuk bash-brengsek PHP ketika memiliki nol hubungan dengan apa yang ditanyakan.
StasM

1
@ Darthfett: Saya bisa menulis esai tentang itu. Datang ke obrolan SO C ++ dan Anda dapat membacanya: P
DeadMG

11

Saya pikir Anda harus memperhatikan mengapa Anda terdampar mencoba mencari tahu FizzBuzz. Jadi, misalkan, Anda ingat ada operator yang memberi $ntahu Anda jika itu dapat dibagi dengan angka. Dan Anda memiliki nasib buruk untuk melupakan apa itu. Baik, mengapa Anda tidak mencoba melakukannya dengan cara lain? Jika Anda tahu sesuatu tentang kode, Anda harus dapat menemukan selusin cara lain untuk melakukannya. Beberapa dari mereka mungkin terlihat aneh - seperti, misalnya, menempatkan setiap kelipatan 5 dalam sebuah array dan kemudian memeriksa apakah $nada di antara mereka - dan itu adalah solusi yang buruk, tetapi masih akan menjadi solusi. Namun, Anda mengatakan Anda tidak memilikinya, Anda hanya terjebak. Ini mungkin merupakan gejala dari masalah yang lebih besar.

Ada dua hal dalam pemrograman yang perlu Anda pelajari.

  1. Banyak trik. Cara membaca file dalam PHP, cara mem-parsing XML di Jawa, cara menghubungkan ke database dengan Python. Beberapa orang menghafalnya, tetapi pada kenyataannya hal-hal ini layak dihafal hanya jika Anda menggunakannya setiap hari. Jika tidak, Anda hanya pergi ke dokumen dan mencarinya. Benda-benda ini tidak memiliki substansi apa pun kecuali bentuk literalnya - Anda hanya perlu tahu bagaimana mantra sihir tertentu terdengar dan apa hasilnya.
  2. Pola pikir. Ini adalah hal yang paling penting. Ini adalah cara Anda memprogram, dan ini tidak ada hubungannya dengan menghafal. Anda perlu memahami cara menjelaskan hal-hal yang ingin Anda lakukan ke komputer, cara mana yang tersedia untuk melakukannya dan mana yang akan digunakan dalam kasus tertentu. Sekarang, mengingat alat-alat modern dan dokumentasi modern, masuk akal bahwa seseorang dapat menulis seluruh CMS di PHP menggunakan pendekatan "trik", tetapi begitu Anda menemukan tugas yang tidak memiliki solusi siap pakai, Anda "terjebak".

Dari deskripsi Anda sepertinya Anda mulai dengan bagian pertama, tetapi agak kurang pada bagian kedua. Kursus CS yang baik biasanya banyak membantu, tetapi bukan satu-satunya cara. Mencoba memecahkan masalah yang berbeda dan membaca tentang bagaimana masalah ini perlu diselesaikan, membaca buku-buku mendasar yang dikutip di sini - semua itu akan membantu. Setelah Anda memiliki pola pikir programmer, Anda akan menemukan bahwa menggunakan tas trik baru tidak akan menjadi masalah. Anda harus google di sana-sini, tentu saja, tetapi Anda tidak akan pernah terdampar.


1
“Dan bacalah tentang bagaimana masalah-masalah ini perlu dipecahkan” - Faktanya, lihat berbagai solusi untuk masalah yang sama. Cobalah untuk memahami masing-masing dari mereka, bandingkan kesamaan mereka dan apa yang mereka lakukan secara berbeda. Pahami hal-hal itu dan Anda akan secara otomatis mengambil cara berpikir yang berbeda untuk masalah yang sama.
colek

Saya akan setuju sepenuhnya pada pola pikir. Setelah Anda memahami pola pikir dan konsep-konsepnya, mempelajari konstruksi bahasa yang mendasari jauh lebih mudah, dan Anda akan mulai memikirkan cara-cara alternatif untuk melakukan sesuatu sebagai hal yang biasa. (Seperti untuk fizzbuzz, semua angka yang dapat dibagi 5 akan berakhir pada 5 atau 0, jadi tidak perlu untuk operand modulus pada porsi itu)
JohnP

9

Anda menjadi pandai dalam pengembangan seperti halnya Anda pandai dalam hal lain: berlatih. Ada konsep yang bagus di dunia pemrograman yang disebut kode kata . Ini pada dasarnya adalah latihan di mana Anda memberi kode solusi untuk masalah yang relatif kecil, menganalisis apa yang baik dan apa yang buruk, membuang semuanya, dan melakukannya lagi. FizBuzz adalah kata dalam dirinya sendiri. Jadi, lakukan, dan lakukan lebih banyak. Ketika Anda menemukan hal-hal yang tampaknya tidak terlalu baik atau tidak berfungsi, lakukan penelitian dan teliti tentang hal itu. Ajukan pertanyaan di situs Q&A, baca artikel dan blog, lihat bagaimana orang lain menangani ini, dan kemudian praktikkan apa yang telah Anda pelajari.

Dalam melakukan praktik ini, Anda akan belajar berapa banyak tambahan matematika / teori yang mungkin Anda butuhkan. Jika Anda menabrak konsep yang tidak bisa Anda hafal, maka bacalah tentang mereka dan pengetahuan prasyarat mereka dan putuskan berdasarkan kasus per kasus jika Anda ingin mengambil kursus atau apa pun yang Anda miliki untuk memperluas latar belakang teoritis.


1
Kata kode ini juga tampak luar biasa!
moraleida

8

... karena saya tidak mengingat metode if ($ n1% $ n2 == 0).

Saya menafsirkan itu berarti, Anda tidak tahu tentang dan / atau tidak ingat operator modulus. Jika demikian, tempat untuk memulai adalah meninjau konstruksi bahasa dalam bahasa yang Anda gunakan. Tinjau apa pun yang Anda tidak 'tahu dingin', dan pelajari apa pun yang tidak Anda ketahui.


4
+1. Sementara jawaban lain berbicara tentang bagaimana menjadi pengrajin yang lebih baik, mungkin lebih penting untuk mengetahui alat mana yang benar-benar ada. Pernah mencoba melepas sekrup yang rusak tanpa mudah keluar ? Ada beberapa cara lain untuk melakukannya, tetapi itu adalah dahi-tamparan ketika Anda akhirnya mempelajari alat yang dibuat untuk itu. Saya akan mengatakan OP seharusnya membaca daftar operator PHP dulu dan bermain-main dengan yang tidak dikenal.
Tim Lehner

5

Terus koding, terus belajar. Akhirnya, dengan dedikasi yang cukup, Anda akan melihat FizzBuzz dan bertanya-tanya mengapa Anda harus memikirkannya. Banyak perusahaan melakukan pertanyaan gaya FizzBuzz sebagai bagian paling awal dari wawancara mereka, jadi jika gagal kali ini berarti Anda setidaknya telah mempelajari sesuatu tentang proses perekrutan.

Teruslah menulis kode, memunculkan ide proyek, dan meneliti.


4

Bolehkah saya merekomendasikan belajar JavaScript sebelum Java, C ++? Alasan untuk Anda:

  1. Digunakan dalam desain front-end (jQuery, beberapa plugin WordPress Anda, feed Twitter, memuat basis data ke browser Anda melalui JSON dengan sedikit atau tanpa pekerjaan back-end, validasi formulir, dll)
  2. Dapat digunakan di sisi server melalui Node.js
  3. Dapat digunakan untuk membangun aplikasi hybrid untuk iOS, Android, Win8, dll
  4. Mempelajari JS akan membantu Anda memahami kinerja halaman web di berbagai browser & perangkat dengan lebih baik
  5. JS dirancang agar lebih ramah bagi pemula
  6. Anda sudah tahu HTML & CSS (saya harap;), sehingga membantu dengan JS

Sumber Daya Pemula Gratis

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
Saya memiliki sekitar 10 tautan lagi, tetapi SE tidak akan membiarkan saya mempostingnya sampai saya menekan 10 rep.

Mempelajari C ++, Java, dll juga membantu, tetapi tidak IMHO tidak memiliki dampak keseluruhan pada pemrograman web seperti halnya JS, karena Anda dapat menggunakannya di bagian depan & belakang. Selamat bersenang-senang!



1
dan ketika Anda siap untuk mendapatkan pekerjaan: jobety.com
imn

3

Anda dapat menemukan dan membantu orang lain misalnya memberi.kode (pengungkapan: situs saya) atau Kode untuk Amerika atau apa pun. Ini adalah cara terbaik untuk mendapatkan lebih banyak eksposur ke masalah pembuatan halaman web non-PHP dan merasa baik juga.

Ketika Anda memiliki masalah untuk dipecahkan - atau membantu memecahkan, atau hanya memahami - mengambil kode datang secara alami di sepanjang jalan. Memiliki tujuan adalah cara terbaik untuk mempelajari sesuatu.


1
Luar biasa! Ini benar-benar cara yang bagus untuk belajar!
moraleida

0

Jadi Anda tidak bisa menyelesaikan masalah FizzBuzz. Masalah besar. Sekarang Anda bisa, dan saya bertaruh Anda tidak akan pernah melupakan banyak cara bagaimana. Cobalah untuk tidak terlalu bersemangat untuk menyebut diri Anda seorang programmer yang buruk hanya karena Anda tidak bisa menyelesaikan satu masalah bodoh di atas kepala Anda.

Itu satu masalah. Yang lain adalah bahwa Anda tampaknya merasa sedikit di belakang kurva pembelajaran pemrograman. Seperti yang orang lain katakan, terus koding dan terus membaca. Semakin banyak Anda melakukannya, semakin baik Anda mendapatkannya. Sesederhana itu. Mulailah dengan apa pun yang Anda rasakan sebagai lubang terbesar di latar belakang Anda dan lanjutkan dari sana.


(Ini dimaksudkan untuk terdengar menggembirakan. Tidak yakin saya berhasil di sana. Lol.)
Nick Spreitzer

0

Saya tidak berpikir saya akan menolak untuk merekomendasikan seseorang untuk disewa karena mereka tidak tahu itu adalah operator modulus asalkan:

  1. Mereka tahu itu semacam operator.
  2. Mereka bisa memberi tahu saya apa "modulus" begitu saya mendorong mereka.

Tidak selalu (meskipun biasanya)%, dan beberapa bahasa aneh. Dan sial, setelah satu dekade, saya tidak dapat dengan jujur ​​mengatakan bahwa saya tahu semua operator perl (dan apa yang dilakukan pesawat ruang angkasa itu lagi?) Atau saya tidak dapat selalu mengingat operator bitwise dengan sempurna. Sudah beberapa tahun sejak saya melakukan sesuatu yang bahkan membutuhkan itu.

Apa yang mungkin membuat saya ragu untuk merekomendasikan seseorang adalah jika itu menyebabkan mereka mengalami serangan panik karena melewatkan pertanyaan / tes itu. Itu mungkin memberi saya kesan mereka agak terlalu hijau (kecuali itu adalah posisi yang sangat entry level). Tidak ada yang membutuhkan seseorang yang (atau merasa perlu) menghafal hal-hal itu. Anda membutuhkan seseorang yang memahami konsep yang jauh lebih luas. Tidak ada yang akan peduli jika Anda mencari di google, tetapi Anda harus yakin dalam wawancara bahwa mengetahui% bukan masalah besar dan juga Anda tahu menggunakan "operator" sebagai kata kunci saat Anda melakukan google cepat Cari.

Juga, ini hanya sebuah ide ... tetapi jika community college lokal Anda memiliki program compsci, kredit Anda yang lain semuanya akan ditransfer, dan Anda kemungkinan hanya membutuhkan sekitar 20 kredit untuk gelar 2 tahun. Hampir bisa menyelesaikannya dalam satu semester. Mereka ingin Anda melakukan kursus struktur data, juga semoga algoritma ... mungkin membuat Anda sedikit lebih kuat.


-1

Berikut ini contoh programnya: http://www.ox.ac.uk/admissions/undergrad_courses/courses/computer_science/computer_science_.html

Saya sarankan baca di berikut ini yang pertama: Pemrograman berorientasi objek (sangat umum, digunakan di mana saja, ini adalah di mana java masuk) Concurrency (untuk menulis program java yang tidak crash secara misterius di dunia nyata, belajar tentang kebuntuan) Konsep basis data (sebagian besar aplikasi perlu menyimpan data, teori penting di sini) Paradigma pemrograman (baca tentang setidaknya satu bahasa non-oops, lebih disukai fungsional, untuk memperluas pemikiran Anda dan mempelajari hal-hal baru)

Ketika saya melihat 4 tahun pendidikan sains comp, jujur ​​saja saya pikir hanya ada beberapa program yang perlu Anda serius.

Struktur data dan algoritme (dan Anda perlu matematika di sini untuk benar-benar bagus dan dianggap serius oleh programmer lain), jaringan komputer dan sistem operasi datang ke pikiran sebagai yang paling penting. Subjek lain yang berurusan dengan kode level yang lebih rendah, seperti bisa kode dalam perakitan bisa dibilang tidak begitu penting bagi Anda. Rekayasa dan pengujian perangkat lunak memaparkan Anda pada konsep yang berguna dan Anda dapat mengambilnya seiring waktu.

Unduh saja pdf yang menjelaskan konsep-konsep ini dengan cara yang intuitif dan Anda akan berada di jalan Anda.

Dalam beberapa program ilmu sains, setidaknya di tambang, tahun pertama adalah pengantar untuk semua bidang teknik, seperti mekanik, listrik, sipil, dll. Ada banyak matematika yang rumit, ingatlah, yang lagi-lagi mungkin atau mungkin tidak relevan untuk sebagian besar programmer aplikasi saat ini. Jadi, banyak insinyur di sekitar hari ini sebenarnya hanya memiliki 3 tahun pendidikan sains yang nyata (Semoga ini membuat Anda merasa lebih baik :)

Inti dari jawabannya: Anda dapat mengambil waktu untuk belajar setiap hari, katakan sekitar satu jam, dan dalam jangka waktu tertentu menjadi programmer yang cukup baik. Teruslah belajar. Dan ingatlah untuk menulis beberapa kode setiap hari.


-3

Bagi saya, strategi saya adalah saya hanya menyerang masalah yang relevan dengan apa yang saya kerjakan, jadi saran saya adalah Anda tidak harus mempelajari semuanya, cukup baca hal-hal yang relevan dengan apa yang Anda kerjakan, karena jika Anda mencoba mempelajarinya sekaligus maka ada kecenderungan Anda bersujud dan akhirnya membenci pemrograman.

Perdamaian

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.