Apa hal terpenting, berguna, atau mencerahkan yang Anda pelajari dalam 12 bulan terakhir? [Tutup]

14

Banyak orang di komunitas pengkodean berbicara tentang peningkatan terus-menerus, praktik yang disengaja dan sebagainya - tetapi ketika mereka berbicara tentang praktik mereka saat ini, hampir seperti mereka muncul sepenuhnya dari ling Zeus karena Anda tidak mendengar bagaimana pendapat mereka berubah seiring waktu atau apa yang mereka pelajari baru-baru ini.

Sesekali saya pergi ke ceramah, atau membaca buku, atau berbicara dengan seseorang dan mereka membuka sedikit lebih banyak dan saya menemukan bahwa saya belajar banyak dari wawasan ini.

Jadi, jika Anda harus memilih satu dari 12 bulan terakhir, Anda akan tahu apa itu?

FinnNk
sumber

Jawaban:

18

Saya belajar bahwa hanya perlu satu manajer busuk untuk merusak seluruh proyek, tetapi dibutuhkan banyak programmer yang baik untuk membersihkan kekacauan setelahnya.

Martin Wickman
sumber
Martin, saya angkat suara karena pesan Anda membuat saya tersenyum di pagi hari Sabtu yang hujan dan dingin ini, tetapi Anda tidak menjawab pertanyaan;)
Ditambahkan "Saya belajar bahwa ..."
Martin Wickman
+1 karena saya salah satu dari programmer itu bulan ini. 70+ jam minggu lalu == "giliranku dalam tong".
Dan Ray
Saya mengenali yang itu! Itu harus kutipan! "Hanya perlu satu manajer busuk untuk merusak seluruh proyek, tetapi butuh banyak programmer yang baik untuk membersihkan kekacauan sesudahnya."
Amir Rezaei
12

Setelah mempelajari beberapa Clojure , saya mulai menyadari kegunaan pemrograman fungsional , dan gaya pengkodean Java saya sangat dipengaruhi oleh hal itu. Berlawanan dengan kepercayaan populer, bahasa pemrograman fungsional bukanlah prasyarat mutlak untuk melakukan beberapa pemrograman fungsional.

Dimungkinkan untuk menggabungkan beberapa elemen pemrograman fungsional ke dalam bahasa imperatif seperti Java, dan bahkan jika itu tidak selalu idiomatis, itu bisa sangat bermanfaat dalam beberapa masalah. Sebagai contoh, kelas anonim kira-kira sama dengan penutupan, seperti yang dijelaskan dalam wikipedia . Evaluasi malas harus menjadi norma daripada sesuatu yang tidak biasa. Kekekalan sulit digunakan secara berlebihan. Cukup lupakan gagasan (hampir) usang bahwa membangun objek baru alih-alih bermutasi yang sudah ada mahal karena konsumsi GC dan heap - dalam 99,9% kasus itu sama sekali tidak relevan. Faktanya, pemrosesan paralel dapat membalik bahkan argumen efisiensi dengan cara lain: membuat objek baru yang tidak dapat diubah bisa lebih murah daripada memutasikan yang sudah ada, karena Anda menyingkirkan penguncian.

Info lebih lanjut tentang melakukan FP di Jawa murni di sini , di sini , di sini , dan di sini .

Joonas Pulakka
sumber
+1 Saya setuju. Sangat menyedihkan bahwa Java memiliki dukungan yang sangat buruk untuk pemrograman fungsional.
Jonas
Saya sudah lama menaruh minat pada FP (pekerjaan pertama saya terlibat lisp) dan saya pikir itu sangat menarik bahwa dalam beberapa tahun terakhir ini akhirnya menjadi paradigma yang 'umum' bersama dengan OO dll.
FinnNk
Java 7 harus memiliki penutupan yang lebih baik setidaknya. Dan menggunakan perpustakaan pintar seperti lambdaj dapat melakukan keajaiban untuk memperbaiki kekurangan bahasa itu sendiri.
Joonas Pulakka
Saya ingin memiliki dukungan yang lebih baik untuk rekursi ekor di Jawa / JVM.
Jonas
1
Metode @Helper: dua tautan pertama dalam jawaban saya adalah artikel tentang FP dengan Java. Saya tidak mengetahui adanya buku tentang hal ini. Saya pikir metode terbaik untuk "mendapatkannya" adalah mempelajari beberapa bahasa FP yang sebenarnya, dan kemudian mulai menggunakan objek yang lebih tidak dapat diubah dalam kode Java Anda.
Joonas Pulakka
10

Bahkan jika Anda memiliki tim yang hebat, dan manajemen yang kompeten untuk tim itu, pekerjaan Anda masih tidak aman. Manajemen tingkat atas masih dapat melakukan hal-hal bodoh, seperti membubarkan seluruh Direktorat Anda.

Singkatnya: politik itu penting, dan terkadang politik yang memengaruhi Anda, Anda tidak bisa mengendalikan.

Frank Shearar
sumber
Saya memberi Anda +1 virtual karena Martin sudah membuat saya tersenyum dengan jawaban yang sama;) Apakah Anda membaca Dead March? ini adalah buku tentang apa yang Anda bicarakan
(Saya mengkonversi suara virtual menjadi yang nyata)
9

Saya belajar bahwa tujuan pengujian perangkat lunak adalah untuk menemukan bug . Ini bukan untuk memverifikasi bahwa sistemnya benar.

Ada beberapa faktor psikologis penting yang berperan: Jika tujuan Anda adalah untuk menunjukkan bahwa program itu "benar," Anda akan condong ke arah tes yang Anda tahu akan lulus. Tetapi jika tujuan Anda adalah menemukan bug, Anda akan tertarik pada tes yang benar-benar akan mendorong sistem Anda ke batas.

Bahkan ada perubahan penting pada bahasa yang Anda gunakan. Jika tes menemukan bug, Anda menyebutnya berhasil . Jika tes tidak [yaitu, program lulus], Anda menyebutnya tidak berhasil . Saya mendapati diri saya mengikuti pemikiran "verifikasi", dan itu membuat perbedaan besar.

Efek psikologis ini lebih banyak dibahas dalam The Art of Software Testing , sebuah buku klasik yang sangat saya rekomendasikan. Penulis, Myers, juga merekomendasikan bahwa siapa pun yang menguji suatu program tidak boleh menjadi penulis, atau bahkan dalam rantai manajemen yang sama. Anda dapat melakukan ini jika Anda membuat kode sendiri, sehingga diperlukan disiplin.

Macneil
sumber
8

Melakukan pengembangan yang digerakkan pengujian dari awal pengiriman pelanggan untuk melihat bagaimana itu akan mempengaruhi kualitas kode, dan hanya berjalan dari dalam peluncur JUnit di Eclipse. Ini menghasilkan produk yang lebih baik.


sumber
Perhatikan bahwa saya tidak menemukan cara untuk mengikat "Jalankan kembali unit test terbaru" ke kunci. Ini membuatnya agak membosankan.
5

Nilai sebenarnya dari pemrograman tanpa ego.

Pada tingkat tertentu saya selalu tahu bahwa ego dan pemrograman tidak campur aduk, tetapi tidak pernah cukup beralasan konsekuensi. Gagasan bahwa Anda harus secara aktif meninjau dan menemukan kesalahan dalam praktik Anda sendiri adalah sesuatu yang baru mulai saya sadari tahun lalu. Saya juga belajar untuk secara aktif mencari kritik terhadap desain saya (dalam UI dan kode).

Jujur saja, saya masih belajar bagaimana menghilangkan ego, dan saya mungkin akan belajar bagaimana melakukan itu selama sisa karir pemrograman saya.

Joeri Sebrechts
sumber
3

Inilah jawaban saya untuk pertanyaan saya sendiri:

Sekitar setahun yang lalu diklik bahwa tes penerimaan otomatis perlu bukan versi tes otomatis yang akan dilakukan penguji kami secara manual. Memfokuskan pada tes terhadap spesifikasi tunggal daripada mencoba untuk memukul sebanyak mungkin dalam satu lulus membuat tes lebih sederhana, lebih mudah dibaca dan juga membantu mendorong pengiriman tambahan.

FinnNk
sumber
3

Saya belajar bagaimana konsep matematika seperti Semirings berlaku untuk algoritma. Dengan ini, Anda dapat menunjukkan bagaimana beberapa algoritma sama kecuali untuk menggunakan semiring yang berbeda. Ini seharusnya tidak aneh bagi saya sebagai seorang programmer, tetapi kepala saya hancur.

Peter Stuifzand
sumber
1
Apakah Anda punya contoh?
Mark C
Ada sebuah contoh dalam buku Elemen Pemrograman yang menggunakan fungsi yang menghitung kekuatan dan beberapa hal fibonacci, yang menghitung fib dalam waktu O (log n). Saya pikir contohnya dapat ditemukan di sini cpp-next.com/archive/2010/03/eop-ch3-preview , tetapi situs web itu merespons dengan kesalahan server internal.
Peter Stuifzand
3

Selain politik yang disebutkan Frank Shearar , saya baru-baru ini menemukan QUnit dan JSCoverage yang menjadikan hari saya menyenangkan. Dan bulan. Tidak pernah terpikir akan mungkin untuk menguji unit JavaScript dengan cakupan kode, tetapi itu ada ... :-)

dr Hannibal Lecter
sumber
Ini ada di radar saya untuk tahun depan, saya telah mencoba-coba sedikit dalam pengujian unit js tetapi belum pada proyek nyata. Tidak tahu ada alat cakupan yang tersedia!
FinnNk
2

Terima kasih tiga besar saya untuk tahun pemrograman terakhir akan pergi ke berikut (dalam urutan kepentingan dan rasa terima kasih):

  • paradigma pemrograman fungsional untuk membuka pikiran saya terhadap cara lain, seringkali lebih elegan dan singkat untuk mengekspresikan ide dan algoritma dalam kode. Saya merasa bahwa keterampilan pemrograman saya secara keseluruhan telah meningkat banyak dalam waktu yang sangat singkat, berkat ide pemrograman fungsional.

    (Terima kasih pribadi saya pergi ke Tomáš Petříček untuk bukunya yang luar biasa pemrograman fungsional Dunia Nyata .)

  • baik injeksi dependensi dan pengujian unit telah mengajarkan saya bahwa komposisi objek bisa dibilang cara terbaik untuk membuat sistem yang kompleks (berorientasi objek) (dan warisan kelas hampir tidak sepenting yang saya pikirkan). Keduanya telah mengajari saya dan membuat saya berpikir tentang cara terbaik menyusun sistem dan cara menulis komponen yang mudah digunakan, namun masih cukup fleksibel untuk digunakan kembali.

    (Jika saya harus menyebutkan sumber pengajaran yang baik, saya akan mengatakan Seni Pengujian Unit Roy Osherove .)

Semua ini dilakukan secara bersamaan telah menghasilkan saya menulis kode yang umumnya memiliki bug lebih sedikit dari sebelumnya, karena saya sekarang menulis kode yang jauh lebih mudah dimengerti dan salah daripada yang saya keluarkan sebelumnya.

stakx
sumber
2

Apa pun yang pernah berubah dalam industri perangkat lunak yang berkembang cepat, kurva belajar selalu ada di sini. "Jika hanya ada cara belajar tanpa meluangkan waktu untuk belajar."

wassimans
sumber
Fakta bahwa selalu ada hal baru untuk dipelajari adalah, bagi saya, salah satu daya tarik besar dari profesi ini. Sistem TI sering kali adalah tentang cara terbaik menangani peningkatan kompleksitas, dan saya suka menemukan teori dan konsep baru ke arah itu. Di sisi lain, itu semua bisa membuat frustasi pada waktu-waktu tertentu, karena harus mengikuti perkembangan terkini dapat terasa seperti perlombaan yang konstan.
stakx
1

Saya belajar bahwa dijual ke perusahaan baru memang dapat meningkatkan pekerjaan Anda. Organisasi saya dibeli dari perusahaan lama kami pada bulan Mei, dan segala sesuatunya tampak membaik. Perusahaan baru telah menghemat sedikit / tanpa biaya dengan kantor baru kami, mengganti mesin pengembangan kami yang sudah usang dengan peralatan abad ke-21, menunjukkan fleksibilitas dengan mengelola proyek-proyek kami, dan umumnya membuat kami semua merasa lebih dari diterima.

Agak terasa agak menyedihkan dijual (sedikit seperti budak memiliki tuan feodal baru karena dia terikat pada tanah yang berpindah tangan), tetapi hasil akhirnya jauh lebih baik dari yang saya harapkan.

bedwyr
sumber
0

Saya akan mengatakan menggunakan pengujian unit Microsoft dalam Visual Studio 2010.

Saya merasa sangat mudah untuk men-debug metode pengujian tertentu.

Saya dapat menjalankan proyek pengujian kapan saja untuk melihat apakah aplikasi lapisan bisnis berfungsi dengan baik. Proses pengujian menjamin bahwa tim saya seharusnya tidak memiliki masalah ketika menggunakan solusi lengkap untuk pengunjung situs web kami.

Junior M
sumber
0
  • Learned Basic Python (menggunakannya untuk menulis skrip cepat terkadang)

  • Diinstal ArchLinux di VM (sebelumnya Ubuntu di VM, PC saya cepat sekarang!)

  • Dimulai dengan MATLAB (terutama untuk merencanakan grafik dan pemeriksaan numerik cepat)

  • Beralih ke Mercurial (dari SVN) (bercabang dan bergabung!)

Vaibhav Bajpai
sumber
0

Mempelajari pola MVVM membantu saya menjadi jauh lebih mudah.

bufferz
sumber
-1

Saya harus mulai memelihara aplikasi web Python - jadi saya memutuskan itu adalah waktu yang tepat untuk belajar Vim juga. Sekarang saya menggunakan plugin IdeaVim untuk Intellij untuk pengembangan Java dan Flex saya dan saya yakin itu membuat pengetikan saya lebih cepat dan lebih efisien.

Watson
sumber
1
Benarkah - -1? Anda ingin membongkar itu untuk saya - orang-orang tidak berpikir bahwa VIM mencerahkan atau berguna?
Watson