Asumsi pemrograman yang lama dan salah [ditutup]


281

Saya sedang melakukan penelitian tentang kesalahan umum dan asumsi buruk yang dibuat oleh insinyur perangkat lunak junior (dan mungkin senior).

Apa asumsi Anda yang paling lama dipegang yang akhirnya dikoreksi?

Sebagai contoh, saya salah mengerti bahwa ukuran bilangan bulat bukan standar dan sebagai gantinya tergantung pada bahasa dan target. Agak memalukan untuk menyatakan, tapi itu dia.

Jujur saja; keyakinan teguh apa yang Anda miliki, dan kira-kira berapa lama Anda mempertahankan asumsi itu? Ini bisa tentang algoritma, bahasa, konsep pemrograman, pengujian, atau apa pun tentang pemrograman, bahasa pemrograman, atau ilmu komputer.


Jawaban:


545

Untuk waktu yang lama saya berasumsi bahwa semua orang memiliki penguasaan super dari semua konsep pemrograman (pola desain, bahasa baru terbaru, kompleksitas komputasi, ekspresi lambda, apa saja).

Membaca blog, Stack Overflow, dan buku pemrograman sepertinya selalu membuat saya merasa bahwa saya berada di belakang kurva pada hal-hal yang harus diketahui oleh semua programmer secara intuitif.

Saya telah menyadari dari waktu ke waktu bahwa saya secara efektif membandingkan pengetahuan saya dengan pengetahuan kolektif banyak orang, bukan satu individu dan itu adalah standar yang cukup tinggi bagi siapa pun. Sebagian besar programmer di dunia nyata memiliki cache pengetahuan yang diperlukan untuk melakukan pekerjaan mereka dan memiliki lebih dari beberapa bidang yang mereka lemah atau sama sekali tidak tahu.


68
Benar sekali! Itulah masalah zaman ini. Informasi juga mengecewakan. Saya memiliki wahyu ini beberapa minggu yang lalu ketika saya merasa seperti seorang pecundang total dalam semua hal yang saya lakukan (bukan pertama kali) mengenai penelitian. Orang-orang yang menerbitkan makalah mereka di Transaksi IEEE tidak harus memiliki keterampilan yang sama dengan orang-orang yang bekerja di Google, bermegah di StackOverflow, profesor hebat, atau menulis blog pemrograman yang hebat. Tentu saja, orang-orang terbaik secara eksponensial lebih keren daripada kita, tetapi mereka tidak tahu semua yang Anda tahu bahwa Anda tidak tahu. Jadi, tetap tenang.
jbasko

40
Ini juga membantu untuk memahami bahwa para blogger itu juga tidak menulis semuanya di atas kepala mereka. Blogger yang baik meneliti topik mereka dan mempelajari hal-hal baru saat menulis posting.
JohnFx

47
Saya terobsesi setiap hari tentang hal-hal yang saya tidak punya waktu untuk membaca dan belajar. Itu membuatku merasa bersalah sesekali.
brad

9
@Zupupe: Amin untuk itu. Saya telah menerbitkan beberapa makalah dan jurnal konferensi internasional. Di mata sebagian orang, itu terdengar keren. Sampai Anda menyadari bahwa tidak perlu banyak upaya untuk menerbitkan makalah. Kami bukan jenius. Kami sama seperti orang lain. Kami membuat kesalahan, dan kami menerbitkan makalah omong kosong. Yah, kecuali untuk beberapa kelompok minoritas jenius nyata ...
Hao Wooi Lim

4
+1 Untung saya baca ini. Saya pikir saya adalah satu-satunya.
Randell

308

Bahwa orang tahu apa yang mereka inginkan.

Untuk waktu yang lama saya pikir saya akan berbicara dengan orang-orang, mereka akan menggambarkan masalah atau alur kerja dan saya akan memasukkannya ke dalam kode dan mengotomatiskannya. Ternyata setiap kali itu terjadi, apa yang mereka pikir mereka inginkan sebenarnya bukan yang mereka inginkan.

Sunting: Saya setuju dengan sebagian besar komentar. Ini bukan jawaban teknis dan mungkin bukan yang dicari si penanya. Itu tidak hanya berlaku untuk pemrograman. Saya yakin itu bukan asumsi saya yang paling lama dipegang, tetapi itu adalah hal yang paling mengejutkan yang saya pelajari dalam 10 tahun singkat yang telah saya lakukan ini. Saya yakin itu murni kenaifan bagi saya tetapi cara otak saya / terhubung dan pengajaran dan pengalaman yang saya miliki sebelum memasuki dunia bisnis membuat saya percaya bahwa saya akan melakukan apa yang saya jawab; bahwa saya akan dapat menggunakan kode dan komputer untuk memperbaiki masalah orang.

Saya kira jawaban ini mirip dengan Robin tentang pemahaman non-programmer / peduli tentang apa yang saya bicarakan. Ini tentang mempelajari bisnis sebagai proses interaktif, lincah, berulang. Ini tentang mempelajari perbedaan antara menjadi monyet kode pemrograman dan menjadi pengembang perangkat lunak. Ini tentang menyadari bahwa ada perbedaan antara keduanya dan untuk menjadi sangat baik di lapangan, itu bukan hanya sintaks dan kecepatan mengetik.

Sunting: Jawaban ini sekarang adalah komunitas-wiki untuk menenangkan orang-orang yang kesal dengan jawaban ini yang memberi saya perwakilan.


9
Atau ubah apa yang mereka inginkan setelah melihat apa yang sebelumnya mereka inginkan. Orang-orang suka mengubah pikiran mereka. Saya tahu, karena saya manusia.
J. Polfer

13
Anda memberi mereka apa yang mereka minta, bukan apa yang mereka inginkan.
Brent Baisley

47
Mengapa membosankan tanpa jawaban yang kontroversial bangkit begitu banyak suara ?!
nes1983

39
Wow. Sepertinya seseorang butuh pelukan.
bzlm

24
Ya Tuhan @ orang mengeluh, rep stackoverflow bukan kompetisi. Suara positif jika Anda menikmati jawabannya, jangan mundur karena Anda iri Anda tidak mempostingnya terlebih dahulu.
Dmitri Farkov

292

Yang saya tahu di mana masalah kinerja tanpa profil


10
Saya pikir inilah mengapa optimasi prematur sangat umum dilakukan.
Hao Wooi Lim

10
+1 Wow, seseorang memasukkan jawaban yang tidak sepele atau di luar topik.
Mark Rogers

3
Saya punya beberapa tablet yang dapat membantu dengan optimasi prematur ...
AndyM

232

Bahwa saya seharusnya hanya memiliki satu titik keluar dari fungsi / metode.


91
Realisasi luar biasa; keluar sesering yang diperlukan. Seseorang harus keluar dari suatu fungsi begitu tidak masuk akal untuk melanjutkan lebih jauh ke dalamnya. Melakukan hal ini dapat mengurangi kompleksitas dan meningkatkan keterbacaan dengan, misalnya, menghindari persyaratan bersarang mendalam, ketika mereka adalah prasyarat yang diperlukan agar metode dapat berjalan dengan baik. Dalam bahasa modern dengan manajemen memori dan konstruksi sumber daya seperti menggunakan / akhirnya, melanjutkan sampai akhir metode yang secara dogmatis tidak masuk akal.
Triynko

24
Ngomong-ngomong, siapa yang menemukan ini? Ini seperti legenda urban pemrograman.
brad

49
Orang yang harus men-debug kode orang lain adalah yang membuat ini.
gatorfax

23
Saya pikir ide yang umum dipegang tetapi salah ini didasarkan pada kesalahpahaman. Saat Anda keluar dari suatu fungsi, Anda harus selalu kembali ke titik yang sama. Itu adalah aturan penting dalam bahasa seperti BASIC yang tidak menegakkannya: Aturan itu berarti, misalnya, bahwa Anda harus menggunakan GOSUB daripada GOTO. Dalam bahasa seperti C # atau Java yang memanggil metode, ini otomatis. Tetapi karena ini otomatis, saya pikir itu berubah dari logika "hanya satu titik kembali ke" menjadi tidak masuk akal "hanya satu titik keluar".
Ryan Lundy

35
Dari bahasa seperti C di mana Anda perlu merilis sumber daya secara manual. Beberapa titik keluar adalah peluang bagus untuk membocorkan sumber daya. IMO tidak ada gunanya dalam bahasa dengan pengecualian, karena Anda sering tidak tahu titik keluar Anda lagi, atau berada di tengah-tengah pernyataan. - Dalam bahasa ini, yang tersisa adalah "struktur untuk keterbacaan".
peterchen

228

Orang non-programer itu mengerti apa yang saya bicarakan.


243
mengerti / peduli ..
nickf

8
Saya masih punya satu ini di kali ... Saya pikir setidaknya istri saya akan mulai mengerti dengan benar sekarang: P
workmad3

3
Oh sayang, saya khawatir saya mungkin belum belajar ini!
thatismatt

3
yeah, kadang-kadang saya lupa pemirsa saya dan berakhir dengan sekelompok orang wtih terlihat kosong di thier wajah stairing pada saya, bagus itu ketika orang menunjukkan minat meskipun
Petey B

3
Ini adalah frustrasi terbesar saya dengan profesi ini.
Andres Jaan Tack

219

Perangkat lunak bugfree itu mungkin.


35
+1, meskipun NASA hampir berhasil
Patrick McDonald

55
Ya tapi "hampir" harganya beberapa juta dolar :)
Jem

15
@Triynko "mungkin" dan "mungkin" @ JaredPar Anda tidak sama. Teori dan praktik mungkin sama dalam teori tetapi sangat berbeda dalam praktik.
wilhelmtell

13
@ Joseph, bagian dari masalahnya adalah orang berpikir program Hello World bebas bug. Mereka tidak. Sebagian besar tidak memeriksa kesalahan dalam printf misalnya atau akun untuk upaya IO gagal lainnya.
JaredPar

9
@RussellH, tidak. Anda gagal menentukan nilai kembali dan proses yang dihasilkan akan mengembalikan memori sampah acak.
JaredPar

199

Variabel anggota pribadi itu pribadi untuk instance dan bukan kelas.


192
Saya memegang asumsi itu sampai ... sekarang.
TheMissingLINQ

9
@ebrown Saya biasanya hanya berguna ketika menulis metode equals ()
Dave Webb

12
Mereka ada di Ruby.
Mike Kucera

17
Ini sangat normal bagi saya bahwa jawaban ini tidak masuk akal beberapa kali pertama saya membacanya. Sekarang saya ingin belajar Ruby sehingga bisa membingungkan saya dengan cara lain. :)
jmucchiello

16
@ Kiewic Jika Anda memiliki variabel anggota pribadi bernama myVar di dalam kelas Anda, Anda dapat mereferensikan other.myVar langsung dalam kode Anda jika yang lain adalah turunan dari kelas ini. Saya berasumsi karena itu "pribadi" Anda harus menggunakan other.getMyVar () bahkan di dalam kelas.
Dave Webb

166

Saya pikir pengetikan statis duduk diam di keyboard Anda.


53
Tulus atau tidak, ini membuat saya tertawa keras di akhir hari kerja yang panjang. : P
Olivier Tremblay

5
++ untuk tawa yang bagus. terdengar seperti sesuatu yang akan muncul pada suami saya (non-teknis).
jess

11
+1! Saya pikir mengetik bebek juga melibatkan mengetik. Atau bebek. Atau keduanya.
SqlACID

162

Bahwa Anda dapat sepenuhnya memahami masalah sebelum mulai berkembang.


32
Ini, teman saya, seharusnya: "Agar Anda dapat sepenuhnya memahami masalah." Tapi itu benar sekali. Dan tampaknya konsep yang sulit untuk dipahami atau bahkan diterima.
KarlP

4
Anda tidak dapat memahami masalah "sepenuhnya", tetapi tentu saja Anda HARUS memahami masalah (pada tingkat tertentu) sebelum Anda mulai berkembang. bit.ly/kLXgL
OscarRyz

Terkadang Anda harus mulai berkembang untuk memahami masalahnya. Dan / atau, masalahnya berubah semakin Anda berkembang.
Evan Plaice

158

Orang Cerdas Selalu Lebih Cerdas dari Saya.

Saya benar-benar bisa menyalahkan diri sendiri ketika saya melakukan kesalahan dan sering disuruh mencela diri sendiri. Saya biasa melihat dengan kagum pada banyak pengembang dan sering berasumsi bahwa karena mereka tahu lebih banyak dari saya di X , mereka tahu lebih banyak dari saya.

Ketika saya terus mendapatkan pengalaman dan bertemu lebih banyak orang, saya mulai menyadari bahwa seringkali, sementara mereka tahu lebih banyak dari saya dalam subjek tertentu, mereka tidak selalu lebih pintar dari saya / Anda.

Moral dari cerita ini: Jangan pernah meremehkan apa yang bisa Anda bawa ke meja.


Bagus Saat ini saya sedang bekerja dengan seorang rekan yang benar-benar tahu BANYAK tentang pengembangan .NET. Butuh beberapa waktu untuk menyadari bahwa saya lebih baik dalam memahami apa yang dibutuhkan pelanggan.
Treb

58
Dan di sisi lain, yang saya tahu lebih banyak dari orang lain. Ternyata mereka hanya tahu hal yang berbeda. Moral lainnya: Jangan pernah meremehkan apa yang orang lain dapat bawa ke meja.
thursdaysgeek

1
Inilah hal "Lakukan kepada orang lain" yang lama itu lagi ... Saya menciptakan frase baru: Penggertak teknologi ~ Keadaan merasa lebih unggul karena Anda mengetahui beberapa hal, dan membuat kesalahan dengan membiarkan orang lain mengetahuinya. @seealso: sok pintar.
corlettk

1
Pengamatan yang sangat baik - versi saya lebih negatif "Semua orang melakukan hal bodoh sekarang dan kemudian". Agak terkait dengan "jangan flip bit bozo".
peterchen

2
Anda hanya perlu khawatir ketika orang bodoh, lebih pintar dari Anda.
Brad Gilbert

131

Untuk waktu yang lama saya berpikir bahwa Pemrograman Buruk adalah sesuatu yang terjadi di pinggiran .. bahwa Melakukan Hal dengan Benar adalah norma. Saya tidak begitu naif hari ini.


30
Dulu saya pikir Pemrograman Buruk hanya dilakukan oleh programmer lain, sampai saya selesai oleh salah satu Program Buruk saya. Sekarang saya melakukan sesuatu dengan benar! (Kamu percaya padaku kali ini, kan?)
Jared Updike

2
Sama sekali. Saya telah beralih dari "Itu tidak pernah terjadi" menjadi "Itu tidak pernah terjadi kecuali pada pekerjaan ini " menjadi "Setiap tempat memiliki kode yang buruk."
Ryan Lundy

1
Peretasan adalah norma. Rekayasa adalah bidang yang benar-benar kompeten. Jika pernah bertemu seorang insinyur perangkat lunak, saya akan memberi tahu Anda.
corlettk

3
@corlettk: Maksud Anda monyet-pengkodean adalah norma, bukan? Peretasan adalah seni, pikiran seni tingkat tinggi, yang jauh dari pencapaian saya.
Hasen

2
@ Hasen: Tidak, peretasan adalah analogi dengan tidak terampil membawa kapak ke pohon, memahat potongan-potongan kecil dalam kepanikan gila tanpa rencana nyata, dan menciptakan kekacauan besar berdarah sampai akhirnya pohon itu jatuh di kepala Anda. "Retasan" adalah "orang yang menghasilkan karya biasa dan biasa-biasa saja dengan harapan mendapatkan kesuksesan komersial". Mengapa bidang komputer berubah "retas" menjadi "trampil", saya tidak akan pernah tahu.
Lawrence Dol

113

Saya pikir saya harus bergerak ke arah abstrak sebanyak mungkin. Saya mendapat hit di kepala utama dengan ini, karena terlalu banyak sedikit terjalin fungsionalitas.

Sekarang saya mencoba menjaga hal-hal sesederhana dan terpisah mungkin. Refactoring untuk membuat sesuatu menjadi abstrak jauh lebih mudah daripada memprediksi bagaimana saya perlu mengabstraksikan sesuatu.

Jadi saya pindah dari mengembangkan kerangka kerja yang mengatur semuanya, ke potongan-potongan fungsionalitas yang menyelesaikan pekerjaan. Tidak pernah menoleh ke belakang, kecuali ketika saya berpikir tentang waktu saya dengan naif berpikir saya akan menjadi orang yang mengembangkan hal besar berikutnya.


26
Decoupled = Abstraksi sejati. Abstrak untuk kepentingannya sendiri adalah ... optimasi prematur.
Jared Updike

1
Ini sejalan dengan apa yang saya temukan melakukan penyetelan kinerja. Mungkin ada program yang bagus dengan banyak lapisan abstraksi. Kemudian beban kerja menjadi berat, dan tebak berapa biayanya setiap saat ... semua abstraksi. Komputer menjalankan instruksi, bukan abstraksi.
Mike Dunlavey

5
Abstraksi dan generalisasi adalah alat yang kuat, sayangnya digunakan untuk menggeneralisasi use case abstrak dengan satu implementasi tunggal. Yang lucu adalah bahwa setiap kali ada kebutuhan untuk mengubah pelaksanaan, abstraksi dan generalisasi harus berubah juga ...
KarlP

Saya sepenuhnya setuju dengan Jared ... jika Anda berhasil "sederhana dan terpisah", Anda telah mencapai abstraksi yang sebenarnya. Bagaimana hal-hal dapat dipisahkan jika Anda belum mengabstraksi hal-hal menjadi antarmuka dan pabrik dll ...? Bagaimana bisa sederhana kecuali Anda menghapus semua "jika tipe = ini maka lakukan ini, atau jika jenisnya maka lakukan sesuatu kode lain"?
Richard Anthony Hein

Sama disini. Saya pikir saya belajar tentang abstraksi sebelum membuat banyak kode spageti. Mereka seharusnya mengajarkan cara menyelesaikan sesuatu bahkan jika kodenya spaghetti, dan kemudian mengajari kita tentang OO dan abstraksi.
Hasen

103

Perempuan itu menemukan programmer komputer itu seksi ...


70
Tunggu sebentar???
Çağdaş Tekin

4
he he he he .. okey, aku sedang mencari sesuatu untuk menjaga senyumku untuk sisa hari itu. Saya pikir saya sudah menemukannya !!! :)
OscarRyz

17
"Ooh, sayang! Ya, katakan 'jika' - berikan saya beberapa pengecualian .. Ya, Anda tahu bagaimana saya menginginkannya": P
cwap

5
Apa? Pemrogram kaya? Kapan ini terjadi?
Filip Navara

3
Beberapa wanita (jenis yang tepat) tertarik pada pria cerdas yang berwawasan luas. Yang, kecuali leher-janggut dan sosis-usus prototipikal, adalah sifat yang cukup umum dari programmer. Taburkan sedikit perhatian pada citra diri / kebersihan dan sesekali sensasi / kegembiraan olahraga ekstrem dan Anda dalam perjalanan.
Evan Plaice

100

Bahwa kualitas perangkat lunak akan menghasilkan penjualan yang lebih besar. Terkadang tidak tetapi selalu.


37
Jual perangkat lunak? Itu sangat tahun 1999.
bzlm

Banyak situs web berbasis langganan sekarang aday ...
cgp

11
Microsoft yakin melakukan pembunuhan.
Bill Martin

Harus suka yang ini, sangat benar.
dr. evil

18
Saya berharap bahwa meningkatkan kualitas / kinerja perangkat lunak kami dihitung sebagai fitur
Tom Leys

82

Bahwa semua bahasa (sebagian besar) diciptakan sama.

Untuk waktu yang lama saya pikir bahwa bahasa pilihan tidak benar-benar membuat banyak perbedaan dalam kesulitan proses pengembangan dan potensi keberhasilan proyek. Ini jelas tidak benar.

Memilih bahasa yang tepat untuk pekerjaan itu sama pentingnya / kritis dengan keputusan proyek tunggal lainnya yang dibuat.


13
Saya merasa bahwa memilih perpustakaan yang tepat adalah yang penting. Kebetulan sering ada korespondensi 1-to-1 antara bahasa dan perpustakaan ...
Kevin Montrose

7
Tetapi jika dua bahasa pemrograman keduanya Turing lengkap maka apa bedanya? Anda dapat menulis program apa pun dalam bahasa apa pun! ;)
Bill the Lizard

8
Saya tidak setuju, keputusan bahasa apa yang akan digunakan jauh lebih penting daripada siapa yang sebenarnya akan melaksanakan proyek. Sebagai hanya satu contoh dari banyak keputusan penting lainnya.
Boris Terzic

13
BrainFu ** sama lengkapnya dengan python.
Hasen

9
Bahwa Turing bahasa lengkap entah bagaimana sama-sama berlaku adalah kesalahpahaman umum. Bahasa lengkap Turing dapat menghitung segala sesuatu yang dapat dilakukan mesin Turing (dan sering kali tersirat sebaliknya). Sama sekali tidak ada implikasi mengenai kinerja. Suatu operasi yang membutuhkan waktu linier dalam satu bahasa bisa sangat baik mengambil waktu eksponensial pada yang lain dan mereka berdua masih bisa menyelesaikan Turing. Ada perbedaan besar antara apa yang secara teori dapat dihitung dan apa yang layak dalam praktiknya.
TrayMan

81

Rasio komentar / kode yang besar adalah hal yang baik.

Butuh beberapa saat untuk menyadari bahwa kode harus mendokumentasikan diri. Tentu, komentar di sana-sini sangat membantu jika kode tidak dapat dibuat lebih jelas atau jika ada alasan penting mengapa sesuatu sedang dilakukan. Tapi, secara umum, lebih baik menghabiskan waktu mengubah nama variabel komentar. Lebih bersih, lebih jelas dan komentar tidak "tidak sinkron" dengan kode.


1
Saya setuju di kode aktual ... tidak termasuk komentar javadoc (atau setara).
corlettk

11
+1, bahkan tidak membuat saya memulai risalah yang saya gunakan untuk menulis fungsi 10 baris
wds

Untuk menambahkan ini, pernyataan assert () lebih baik daripada mendokumentasikan prasyarat / postkondisi. Kontrak kode NET. 4 juga dapat secara otomatis diubah menjadi dokumentasi!
Robert Fraser

66

Pemrograman itu tidak mungkin.

Tidak bercanda, saya selalu berpikir bahwa pemrograman adalah hal yang mustahil untuk dipelajari, dan saya selalu menjauhinya. Dan ketika saya mendekati kode, saya tidak pernah bisa memahaminya.

Kemudian suatu hari saya hanya duduk dan membaca beberapa tutorial dasar pemula, dan bekerja dengan cara saya dari sana. Dan hari ini saya bekerja sebagai programmer dan saya suka setiap menitnya.

Untuk menambahkan, saya tidak berpikir pemrograman itu mudah, itu sebuah tantangan dan saya suka belajar lebih banyak dan tidak ada yang lebih menyenangkan daripada menyelesaikan beberapa masalah pemrograman.


7
Amin! Tapi, hei, jangan nyatakan pandangan ini dari atap rumah. Kami tidak ingin semua orang tahu pemrograman itu menyenangkan, bukan? ;); P
Peter Perháč

9
MasterPeter: Ini akan memberi kita lebih banyak makanan bagi kita untuk meningkatkan perwakilan kita ketika mereka datang ke sini mengajukan pertanyaan.
TheTXI

4
Saya akan mengatakan bahwa pemrograman adalah sulit untuk melakukan yang benar . Namun, itu mungkin, yang tampaknya menjadi poin Anda.
Steve S

4
@ Elafur: Mengapa Anda ingin pertanyaannya adalah wiki, tetapi bukan jawaban Anda?
gnovice

2
Ini persis mencerminkan pengalaman saya. Saya berharap saya mulai lebih cepat sekarang: P
Skilldrick

65

"On Error Resume Next" adalah semacam penanganan kesalahan


6
Saya merasa Anda ... tetapi dalam vbscript (esp. Asp), itu adalah opsi "penanganan kesalahan" HANYA tersedia, dikombinasikan dengan pemeriksaan bijaksana apakah kesalahan benar-benar terjadi, dan jumlah doa yang adil.
garis datar

2
Ya ... itu semacam ... hanya jenis yang kita senang bisa pergi dari
Matthew Whited

6
Baik?! tapi memang begitu. Anda memulai blok penanganan kesalahan Anda dengan On Error Resume Next, coba sesuatu, dan kemudian If (err.number <> 0) lalu
jpinto3912

Bukankah ini satu-satunya vbscript yang setara dengan try catch?
James

-1: Ini semacam penanganan kesalahan. Itu tidak elegan.
JohnFx

64

Perangkat lunak pemrograman itu membutuhkan dasar yang kuat dalam matematika yang lebih tinggi.

Selama bertahun-tahun sebelum saya mulai menulis kode, saya selalu diberitahu bahwa untuk menjadi programmer yang baik, Anda harus mahir dalam aljabar, geometri, kalkulus, trigonometri, dll.

Sepuluh tahun kemudian dan saya hanya sekali harus melakukan sesuatu yang siswa kelas delapan tidak bisa.


5
Sangat benar. Dalam kebanyakan kasus, Anda tidak perlu menjadi ahli matematika. Satu-satunya waktu saya benar-benar perlu mengetahui matematika tingkat lanjut adalah ketika saya melakukan pemrograman 3D sebagai hobi. Sebenarnya, sebenarnya pemrograman 3D selama sekolah menengahlah yang mengilhami saya untuk memberikan perhatian yang lebih baik dalam kelas-kelas trigonometri dan pra-kal. Selain itu, matematika yang sangat mendasar biasanya yang Anda butuhkan.
Steve Wortham

29
Saya pikir Anda salah informasi. Tentu saja, untuk menjadi programmer yang baik , Anda tidak benar-benar perlu menggunakan matematika tingkat yang jauh lebih tinggi, tetapi untuk benar-benar memahami dan menerapkan konsep ilmu komputer tertentu, Anda akan membutuhkan lebih dari sekadar matematika kelas delapan.
hbw

12
Saya pikir penekanan pada matematika adalah mengajarkan keterampilan berpikir kritis dan pemecahan masalah bukan sebagai sesuatu yang akan Anda gunakan dalam pemrograman komputer setiap hari.
Zack

14
Jenis abstraksi yang Anda butuhkan untuk memahami matematika tingkat lanjut sangat mirip dengan abstraksi yang Anda perlukan untuk membuat perangkat lunak.
OscarRyz

6
Saya pikir konsep pemrograman fungsional jauh lebih mudah untuk dipahami jika Anda memiliki dasar yang lebih kuat dalam matematika, hanya karena Anda tidak takut oleh sintaksis. Itu terlihat akrab. Saya membuat kesalahan dengan menggunakan fungsi matematika sederhana untuk menunjukkan konsep pemrograman fungsional yang baru ke C #. Beberapa orang segera menyatakan bahwa itu terlalu rumit.
Richard Anthony Hein

63

Itu mengoptimalkan == penulisan ulang dalam bahasa assembly.

Ketika saya pertama kali benar-benar mengerti assembly (berasal dari BASIC), sepertinya satu-satunya cara untuk membuat kode berjalan lebih cepat adalah menulis ulangnya di assembly. Butuh beberapa tahun untuk menyadari bahwa kompiler bisa sangat baik dalam optimasi dan terutama dengan CPU dengan prediksi cabang dll. Mereka mungkin dapat melakukan pekerjaan yang lebih baik daripada yang dapat dilakukan manusia dalam jumlah waktu yang wajar. Selain itu, menghabiskan waktu untuk mengoptimalkan algoritme cenderung memberi Anda kemenangan yang lebih baik daripada menghabiskan waktu mengonversi dari bahasa tingkat tinggi ke rendah. Juga bahwa pengoptimalan prematur adalah akar dari semua kejahatan ...


8
Peek dan Poke adalah teman Anda :)
Matthew Whited

4
Menyesatkan! Katakan itu pada hakim!
Shalom Craimer

1
Di sinilah teori kompleksitas masuk. Majelis umumnya optimasi mikro. Membuat kompleksitas waktu algoritma Anda lebih kecil adalah tempat kecepatan diperoleh.
PeteT

@scraimer: Senang melihat Anda di sini, saya tidak pernah menyangka itu ;-)
Robert S. Barnes

@ Matthew - "Mengintip dan Menyodok adalah temanmu :)": ** Sangat cemburu aku tidak menulis itu dulu.
FastAl

63
  • Bahwa eksekutif perusahaan peduli dengan kualitas kode.
  • Garis yang lebih sedikit lebih baik.

2
mereka memang peduli, tetapi Anda harus menggabungkan keterampilan seniman dengan keterampilan pekerja. Setiap bagian dari algoritma tidak dapat menjadi karya seni juga. Beberapa akan menjadi gemuk, jadi gunakan kembali "kurang digunakan". Ingat aturan 80/20 yang lama. 80% dari program digunakan 20% dari waktu. Jadi fokuskan 80% pada 20% dari kode dan buat itu SEBENARNYA SENI DARI ART! : OP
BerggreenDK

71
lebih sedikit garis lebih baik! bagian dari alasan saya tidak suka java sebagai bahasa adalah bahwa melakukan apa pun membutuhkan begitu banyak baris kode. semakin sedikit baris kode berarti lebih mudah untuk mengubah kode Anda.
Claudiu

7
Itu tergantung pada apa yang Anda hapus untuk mendapatkan lebih sedikit garis. Jika kode masih dapat dibaca dengan lebih sedikit baris maka itu bagus. Namun, ada banyak cara untuk mengurangi jumlah baris kode yang memperburuk kode.
Herms

2
Kecuali ketika orang mengambil mentalitas "garis yang lebih sedikit lebih baik" untuk jauh dengan metode dirantai memanggil 7 dalam sehingga ketika salah satu dari mereka melempar pointer nol, Anda tidak tahu yang mana itu. Atau mereka memadatkan begitu banyak aksi menjadi satu baris sehingga panjangnya 150 karakter dan melakukan 4 operasi. Ini membuatnya lebih sulit untuk dibaca dan lebih sulit untuk debug, tetapi tidak lebih cepat juga tidak menggunakan lebih sedikit memori selama eksekusi.
Trampas Kirk

17
Jika baris Anda berakhir dengan))))) dan Anda tidak menulis Lisp, Anda memiliki terlalu sedikit baris.

58

Saya akan mengatakan bahwa menyimpan elemen tahun tanggal sebagai 2 digit adalah asumsi yang menimpa seluruh generasi pengembang. Uang yang dihembuskan ke Y2K cukup mengerikan.


1
Ini adalah satu-satunya jawaban yang saya akan upvote, meskipun itu CW sehingga tidak masalah ...
Dan Rosenstark

4
IIRC beberapa sistem kembali pada 60-an dan mungkin 70-an hanya menggunakan satu digit karena menggunakan lebih sedikit memori. Saya bahkan telah melihat formulir kertas di mana "196_" dan "197_" sudah dicetak.
beberapa

3
Saya masih melihat formulir dengan 200_ dan mungkin ada beberapa sekarang dengan 201_ dicetak.
Macha

5
Bagian yang menyedihkan adalah ... Unix akan melakukan putaran kedua pada tahun 2038 ini
Evan Plaice

4
@Billy Hanya karena perubahan arsitektur mesin tidak berarti format data akan. Menyimpan 2 digit resolusi dalam format int akan membuat format tanggal byte (8bit) dan, bagaimanapun, itu mempengaruhi banyak mesin arsitektur perangkat keras 32bit dalam 2k. Ini hanyalah satu lagi contoh mengapa Anda tidak membiarkan perangkat keras tingkat rendah menentukan format data. Mereka sen sedikit pun dengan pengetahuan bahwa akan ada SNAFU terjadwal di masa depan yang jauh.
Evan Plaice

57

Apa pun selain penyisipan / gelembung semacam itu hanyalah sihir gelap.


Haha, saya suka yang ini, karena hits dekat dengan rumah. Sortir lebih cepat daripada waktu n-kuadrat ?? Tidak mungkin!
Ross

Sungguh menakjubkan bagaimana algoritma penyortiran yang paling sederhana dan jelas tampak sekali Anda memiliki perasaan yang kuat untuk rekursi dan membagi & menaklukkan. Sampai saat itu, kebanyakan dari mereka merasa seperti ilmu hitam.
Brian

74
Saya seorang PENELITI dalam menyortir algoritma! Dan mereka MASIH terasa seperti sihir gelap.
SPWorley

14
Saya pernah memiliki satu baris kode dalam program saya yang panjang dan rumit dan saya tidak merasa ingin memecahnya atau menjelaskannya (itu adalah formula pencahayaan yang rumit), jadi saya meletakkan semuanya pada satu baris dan #define ' d menjadi DARK_MAGICK, dan satu-satunya komentar adalah peringatan agar tidak mengungkap misteri sihir gelap
Alex

2
Bogosort adalah yang paling misterius dari semuanya.
Alex Beardsley

50

XML itu akan menjadi format data yang benar-benar interoperable dan dapat dibaca manusia.


7
XML bukan obat mujarab tetapi saya tidak ingin kembali ke hari-hari di mana saya secara teratur melihat aplikasi mencoba untuk memeras data relasional ke dalam file csv tunggal.
Tony Edgecombe

4
ini adalah sintaks yang dapat dioperasikan, tidak ada keraguan tentang itu. Hanya saja, sintaksis seringkali merupakan aspek yang paling tidak penting dari solusi apa pun.
Simon Gibbs

2
+1, Anda juga dapat menambahkan kecil dan cepat ke wishlist.
MarkJ

1
Benar tetapi peningkatan csv dan panjang tetap di mana tanpa dokumentasi Anda kacau.
PeteT

7
Saya suka XML untuk standardisasi yang dibawanya ke format data dan untuk penanganan pengkodean karakter dengan benar. Saya benci apa yang kadang-kadang dilakukan dengan menggunakan XML.
Joachim Sauer

48

C ++ itu entah bagaimana secara intrinsik lebih baik daripada semua bahasa lain.

Ini saya terima dari seorang teman beberapa tahun di depan saya di perguruan tinggi. Saya menyimpannya untuk waktu yang memalukan (saya memerah sekarang). Itu hanya setelah bekerja dengannya selama 2 tahun atau lebih sebelum saya bisa melihat celah untuk apa itu.

Tidak ada - dan tidak ada - yang sempurna, selalu ada ruang untuk perbaikan.


5
"lebih baik" akan memberi Anda banyak komentar yang kurang membenci. Tetapi saya akan mengatakan itu adalah salah satu yang paling cepat-mengeksekusi, fleksibel, bebas dari rintangan. Ini juga salah satu yang membutuhkan anak Anda untuk mempelajarinya dengan benar, hanya untuk mengetahui Anda dapat melakukan lebih kurang aplikasi yang sama. (walaupun membutuhkan beberapa atau dua ton batubara penghasil listrik) dengan java atau C #.
jpinto3912

@ JP: Saya senang dengan pilihan kata-kata saya :)
Binary Worrier

Produktivitas lebih penting di dunia aplikasi bisnis. tentu saja, ada beberapa celah yang diperlukan c ++, dan satu-satunya pilihan.
Shaw

7
Saya selalu berasumsi C ++ lebih buruk daripada ANSI C lurus, hanya karena jenis masalah yang saya lihat programmer C ++ jauh lebih rumit daripada jenis masalah yang saya lihat C programmer masuk ke.
Nosredna

1
Sebenarnya, bahasa yang lebih baik dari semua yang lain adalah Common Lisp. C ++ tidak buruk.
David Thornley

47

Saya percaya bahwa membuat program akan persis seperti apa yang diajarkan di kelas ... Anda duduk dengan sekelompok orang, membahas masalah, mencari solusi, dll. Sebaliknya, dunia nyata adalah "Inilah masalah saya, saya perlu diselesaikan, pergi "dan sepuluh menit kemudian Anda mendapatkan yang lain, sehingga Anda tidak punya waktu nyata untuk merencanakan solusi Anda secara efisien.


24
Saya pikir itu disebut kehidupan.
Robin Day

9
hmmm .. saatnya Anda menyelamatkan perusahaan itu. ..
jpinto3912

8
@ jpinto3912: Tidak. Karena perusahaan berikutnya juga akan menjadi bagian dari kehidupan (lihat komentar sebelumnya).
Treb

42

Saya pikir pola desain arus utama itu luar biasa, ketika diperkenalkan di kelas CS. Saya telah memprogram sekitar 8 tahun sebagai hobi sebelumnya, dan saya benar-benar tidak memiliki pemahaman yang kuat tentang cara membuat abstraksi yang baik.

Pola desain terasa seperti sihir; Anda bisa melakukan hal-hal yang sangat rapi. Kemudian saya menemukan pemrograman fungsional (via Mozart / Oz, OCaml, kemudian Scala, Haskell, dan Clojure), dan kemudian saya mengerti bahwa banyak dari pola-pola itu hanya pelat baja, atau kompleksitas tambahan, karena bahasanya tidak cukup ekspresif.

Tentu saja hampir selalu ada semacam pola, tetapi mereka berada pada level yang lebih tinggi dalam bahasa ekspresif. Sekarang saya telah melakukan beberapa pengkodean profesional di Jawa, dan saya benar-benar merasakan sakit ketika saya harus menggunakan konvensi seperti pola pengunjung atau perintah, daripada pencocokan pola dan fungsi urutan yang lebih tinggi.


"Banyak dari pola-pola itu hanya pelat baja, atau kompleksitas tambahan, karena bahasa itu tidak cukup ekspresif." Ekspresivitas hanyalah kode sederhana yang tertanam dalam bahasa.
Tidak diketahui

4
Tidak benar, bagaimana bisa memiliki hal-hal kelas satu daripada membatasi kemampuan seorang programmer, seperti dalam kasus fungsi tingkat tinggi. Lisps adalah contoh yang indah dari ini.
egaga

38

Selama beberapa tahun pertama saya pemrograman saya tidak mengerti bahwa 1 Kbyte secara teknis 1024 byte, bukan 1000. Saya selalu sedikit bingung dengan kenyataan bahwa ukuran file data saya tampak sedikit berbeda dari apa yang saya harapkan dari mereka. menjadi.


114
Produsen hard drive masih belum tertangkap ...
Michael Myers

10
@ Pengacara Saya pikir maksud Anda pemasar hard drive, kan? Atau apakah sebenarnya drive dibuat seperti itu?
Instantsoup

16
Hei, hentikan kibi yang membenci. MeBi dan KiBi setidaknya unbambiguobus.
bzlm

21
Kilo berarti 1000, Mega berarti 1000000, Giga berarti 1000000000. Pembuat RAM dan OSlah yang salah, bukan pembuat drive.
Mark Ransom

39
Tidak ada yang akan melakukannya? Serius? Oke, saya akan melakukannya ... xkcd.com/394
Erik Forbes

36

Kondisi itu memeriksa seperti:

if (condition1 && condition2 && condition3)

dilakukan dalam urutan yang tidak ditentukan ...


15
Dalam bahasa apa? Bahasa seperti C / C ++, Java, dan Python menjamin bahwa kondisi dievaluasi dari kiri ke kanan dan bahwa evaluasi berhenti pada kondisi pertama yang mengembalikan false. Itu bagian dari langauge spec. Saya berasumsi bahwa sebagian besar bahasa lain membuat jaminan yang sama.
Clint Miller

44
@Clint: Ya, karenanya "itu ternyata salah".
bzlm

ya, ini keren. itu membuat hal wrint seperti if (myList! = null && myList.Count> = 0) {melakukan hal-hal ();} jauh lebih mudah
Zack

4
sebenarnya, ini tergantung pada bahasa, dan & akan mengevaluasi semua kondisi (bukan jalan pintas). Dan saya telah melihat banyak orang menggunakan And (&) di VB alih-alih AndAlso (&&)
Lucas

2
. . . Sebenarnya itu akan crash di VB.net juga kecuali jika Anda menggunakan komentar AndAlso re Lucas
Binary Worrier

35

Pemrograman saya akan lebih cepat dan lebih baik jika saya melakukannya sendiri.


Tapi itu tidak bisa seburuk Pair- Pemrograman :-) kecuali mungkin kode Anda
Telur

33
Itu semua tergantung pada orang lain. =)
JohnFx
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.