Nama Pendek: Re, Nama Panjang: Amore
Via Jeff Atwood’s Coding Horror, tersampai ke blog entry ini: “Naming Java Classes Without a ‘Manager’“, yg menyarankan supaya tak gunakan perkataan “manager” sbg nama class. Contohnya mcm SessionManager, ConnectionManager, PolicyManager etc. Sebab, ia vague dan mengelirukan. Skop tugas “manager” tu tak jelas. Article tu seterusnya mencadangkan utk guna perkataan Herder, Bucket, Pool, dan Supervisor. Ok, walaupun pun mcm tak berapa intuitive, tapi aku rasa memang membawa maksud yg lebih tepat tentang tugas class tu.
Kerja software developer ni memang kita juggle with a lot of names most of the time. Ingat nama variable la, nama method la. Sama ada yg kita punya sendiri atau dari library/framework yg kita guna. Banyak maklumat kena sumbat dlm kepala hotak tu dlm satu2 masa. Patutlah aku selalu lupa nama orang. Macam jiran2 sebelah rumah, dan akak jual nasik lemak kat pam minyak tu. Tak ingat aku. Apatah lagi nama kucing peliharaan makcik yg rumah bumbung hijau kat hujung kampung tu.
Bukan senang nak bagi nama ni sebenarnya. Sedangkan orang bagi nama anak 3 tahun sekali pun susah, ini pulak nak bagi nama pada sesuatu setiap hari. Nak bagi nama mestilah nama bagus2. Barulah bangga, ye tak?. Supaya nanti kalau orang baca code kita dia akan cakap, “Fulemek, best siyut nama public static variable kau ni! Jom aku belanja makan. Secret Recipe nak?”
Jeff memetik kandungan buku Code Complete tentang cara2 memilih nama:
- Describe everything the routine does
And we mean literally everything. If that makes the name ridiculously long, the name isn’t the problem. Your routine is.- Avoid meaningless, vague, or wishy-washy verbs
Like UrlManager, or HandleOutput(), or PerformServices(). Be specific. What does it do? If you can’t answer that question succinctly, it may be time to refactor the code until you can.- Don’t differentiate routine names solely by number
I include this only for completeness. If you ever find yourself writing OutputUser1() and OutputUser2(), God help you. And God help the team you work with.- Make names as long as necessary
According to McConnell, the optimum name length for a variable is 9 to 15 characters; routines tend to be more complex and therefore deserve longer names. Make your names as long as they need to be in order to make them understandable.- For functions, try using a description of the return value
An easy, straightforward rule. Some examples are printer.IsReady(), pen.CurrentColor(), etcetera.- Use opposites precisely
For every Open(), there should be a Close(); for every Insert(), a Delete(); for every Start(), a Stop().- Establish conventions for common operations
This is best illustrated with an example, and McConnell provides an excellent one:employee.id.Get()
dependent.GetId()
supervisor()
candidate.id()Now how do I get an Id again?
Bagus betul. Tak pernah pulak terfikir aku pasal kalau susah sangat nak pilih nama tu mungkin class/method kita tu tak berapa betul. Tak cukup cohesive mungkin?
Satu lagi yg aku perasan, programmer Java dan .NET ni dia suka nama yg panjang2 mcm “RegisterStartupScript”. Aku pun sekarang suka pakai nama mcm ni. Kalau dulu masa zaman C/C++, ikut2 adat dia pakai nama ringkas2 je, “regStartScr” mungkin. Kalau ikut programmer C/C++ ni anak2 pun kena bagi nama pendek2, mcm Ali bin <insert_fathers_name_here>, atau Alif bin <insert_fathers_name_here>, atau Salmah binti <insert_fathers_name_here>. Barulah save space.
Dlm C++, tanda < > tu maksudnya dia adalah template. Atau kau yg anak2 muda ni, yg kenal C# je ni, panggil dia generic lah.
Failed To Open Web Project in VS.NET 2003
Caffeine can really get you going in the morning. Got a fix for this error, when failed to open a project in Visual Studio .NET 2005, with the error message
“The project you are trying to open is a web project you need to open it by specifying its URL path”
Solution is here: http://paulfarrow.com/archive/2005/06/08/577.aspx
In my case, the webinfo file is missing. I just create a new one, named it according to my project name, “AwesomeWebProject.vbproj.webinfo”. Inside the file are these 3 lines
<VisualStudioUNCWeb>
<Web URLPath = "http://localhost/AwesomeWebProject/AwesomeWebProject.vbproj" />
</VisualStudioUNCWeb>
Crash Dahulu Pendapatan
I am freakin’ bored! Kena buat byk testing hari ni. Beberapa minggu lepas aku byk buat code tanpa berdasarkan data-data yg cukup. Dalam kabus dan mata sebelah tertutup aku redahi ia. Hasilnya, semalam dan hari ini, error dan exception bercambah dan tumbuh melata bagaikan cendawan disiram hujan panas. Oh, alangkah damainya.
Setelah membaca buku The Pragmatic Programmer tu separuh jalan, aku telah mendapat mengajaran yang baik iaitu utk menjadi programmer yg paranoia. Paranoia dgn tidak mempercayai data-data itu, walaupun sepatutnya ada value, walaupun sekadar sekangkang empty string, namun boleh jadi dia NULL. Aku mesti ragu-ragukan itu.
If (Not IsDbNull(dr("IkanMasin") _
AndAlso dr("IkanMasin").ToString().Length > 0) Then
Gorengkan(dr("IkanMasin"))
Else
PergilahPetikPucukUbi()
End If
Banyak-banyak keluar error pun bagus juga kalau masih waktu sedang develop. Crash early, supaya dapat dikorek bug-bug hanyir dari lubang-lubang gelap mereka. Bak kata pepetah orang-orang tua; “crash dahulu pendapatan, crash kemudian mendapat malunya.”
Tapi, sungguh bencinya aku pada perasaan ini. Kalau tak perlu test kan bagus. Kalau sudah test tentu ada error. Kalau ada error tentu aku kena betulkan. Kan sangat menjengkelkan itu. Menambahkan kerja. Kalau boleh aku mahu diam-diam sahaja, menikmati bliss dalam ignorance.
Pesta Buku Antarabangsa Kuala Lumpur 2006
Kuala Lumpur International Book Fair 2006 akan di adakan,
bertempat di : Pusat Dagangan Dunia Putra (PWTC)
pada tarikh : 24 Mac - 4 April 2006
masa : 10 pagi -10 malam
Seronok jugak aku pergi yang tahun lepas punya (sampai 2 kali). Beli buku dapat banyak diskaun. Dapat hadiah snek biskut berbentuk beruang teddy lagi tu. Biskut tu boleh tahan jugak sedapnya, kalau cicah dengan air kopi petang-petang memang kaw (seronok cow cow). Pembungkus dia warna biru, tapi aku tak ingat jenama apa. Mula-mula aku ingat nama dia Super Ring, tapi lepas tu baru aku tersedar, Super Ring warna oren, snek biskut berbentuk beruang teddy tu warna coklat. Lagipun Super Ring bukannya biskut. Malahan Super Ring tu berbentuk cecincin, tapi snek biskut berbentuk beruang teddy ni adalah berbentuk seperti beruang.
Aku rasa macam nak borong buku banyak-banyak je kali ni, nanti boleh dapat snek biskut berbentuk beruang teddy banyak-banyak. Yum, yum.
The Art in Computer Programming
Seorang colleague (I always had a hard time spelling ‘colleague’), pada beberapa hari yang lepas, telah menudingkan kepada ku satu artikel:
The Art in Computer Programming
http://www.developerdotstar.com/mag/articles/art_computer_programming.html
Ditulis oleh Andy Hunt dan Dave Thomas, penulis buku “The Pragmatic Programmer”, yang tengah aku baca sekarang (err, bukan sekarang, nanti balik rumah).
Beberapa petikan dari perenggan-perenggan awal artikel yang panjang ini:
“What exactly is software development, and why is it so hard? This is a question that continues to engage our thoughts. Is software development an engineering discipline? Is it art? Is it more like a craft?”
“In a way, we programmers are quite lucky. We get the opportunity to create entire worlds out of nothing but thin air. Our very own worlds, complete with our own laws of physics. We may get those laws wrong of course, but it’s still fun.”
Membicarakan beberapa perkara macam prototyping (dan “tracer bullet”), coupling and cohesion, dan sebagainya.
Nil, Null, Nothing
nil to ruby
is like null to c
or nothing to basic
SQL Server Indexes
In my previous entry, I asked a question : “I wonder what is the difference between creating an index consisting of two column, compared to creating 2 index (one for each column)?” I, myself, was not sure to whom did I address this question, but I manage to get some answers today.
SQL Server Indexes
http://www.odetocode.com/Articles/70.aspx
Contains some very good explainations on how database indices works (SQL Server to be exact), about composite index (one index containing multiple column), clustered vs unclustered Index, and some guidelines on using them.

