Menyerap Ilmu Yang Luas Ke Dalam Hati

24.12.14

Improving Your Programming Skills: All You Need Is Motivation

22:15 Posted by Shichibukai Encraptor , No comments

 GraduanICT2In the past many people could come up with easy excuses for not learning a skill. College, after all, is quite expensive! Time consuming! I’ve even heard the lamest excuse of all where people who did go to college make the excuse that their skills are poor because their school didn’t have a good program in their field of study. Hogwash!

I think my school’s Computer Science program was actually pretty good. Now in the real world, I feel I’m a really good developer. But I also have come to recognize that algorithms are my weak spot. Thankfully in this day and age all you really need is the motivation to go look for the knowledge you need and take the time to absorb it. I’ve found MIT’s Open Courseware to be a really excellent resource in this regard. If you were like me an applied at MIT you know that the tuition costs were upwards of $30k… way beyond the means of someone who made “okay” grades from Hannibal, MO. What is awesome is that you can still benefit from the lectures, notes, and exams if only you have the motivation to do so.

So I’ve been working my way through Introduction to Algorithms, which come complete with captions for the hearing impaired (like me)!

Really awesome stuff. Which gets me back to my original point. We hear in the news everyday that there are so many job losses in the unskilled job market or even in certain skilled markets that were traditionally profitable. Meanwhile, EVERY SINGLE COMPANY I KNOW HAS BEEN DESPERATELY LOOKING FOR DEVELOPERS! And even more important, I’ll tell you from experience of being the interviewer for over 100 interviews (and also being the interviewee for several) that interviewers don’t give jack about whether you have a Bachelor, Masters, or even a PhD degree, just whether or not you have good problem solving skills, work well with others, and can write good clean code. So why don’t you help the economy out and start watching lectures and completing coursework for MIT Introduction to Computer Science today?

From http://blog.james-carr.org/2012/02/11/you-only-need-motivation/

Suara Hati Ayah: Jangan takut wahai anakku dengan PhD itu ..

22:00 Posted by Shichibukai Encraptor , , No comments

Salam
Insyaallah , tidak berapa lama lagi anakku akan melanjutkan pelajarannya ke peringkat PhD. Oleh itu, saya mengambil kesempatan untuk menulis untuk nya dan ..  untuk sekalian umat islam di seluruh dunia yang tahu berbahasa Melayu.
Insyallah.
Bacalah wahai anakku.

Gerungggg   mu buat Ph.D?  Blur bang?

Tahniah dah dapat offer dari JPT untuk menjalankan kajian di peringkat PhD.  Itu satu langkah pertama yang sangat berani.  Sekuat-kuat manusia seperti Badang, Hang Tuah, Hang Jebat, Hang Kasturi, Hang Lekir, Hang Lekiu, Tok Kenali, dato' Bahaman  dan ramai lagi hulubalang melayu zaman dahulu kala dan Mahatma Ghandi (Perdana Menteri India) tidak ramai yang sanggup belajar ke peringkat paling tinggi iaitu PhD.  Anda salah seorang jer yang berani menyahut cabaran tugas sejak berada di university.  Oleh itu dikesempatan ini izinkan saya mengucapkan tahniah setinggi-tingginya kepada anda kerana niat anda yang berani dan suci murni ini.

Berikut saya sampaikan sedikit sebanyak petua untuk berjaya PhD.  Bacalah ..  dengan dada dan fikiran terbuka.  Jika ada mutiara gunapakailah dan sebar kepada orang-orang lain dan jika semua ini adalah sampah belaka , saya rela dibuang jauh jauh dan dihanyut pergi bersama sama toufan Sandy di New York City 27 – 31 Okt 2012.  Bacalah…

Langkah-langkah:  bila baru nak start buat phd

1.       Cari tesis di Malaysia , tesis terhampir dengan tajuk kajian anda.

2.       Cari tesis di luar Negara walaupun sebuah, tesis terhampir dengan tajuk kajian anda.

Ini adalah untuk anda mengetahui tahap atau keluasan bidang kajian tersebut.

3.       Setelah memperolehi tesis tesis tersebut, baca abstract, Bab 1, Bab terakhir dan recommendation/ cadangan yang telah diajukan oleh pengkaji di atas.  Lihat dengan rapi semua buku-buku rujukan, journals, proceedings yang telah digunakan oleh tesis-tesis tersebut. Beri banyak masa buat analisa bahan rujukan yang ada dalam tesis ini. Cuba kenalpasti KITAB utama,  theoretical framework/ conceptual framework yang telah diutarakan oleh pengkaji di atas.

4.       Tabiat membaca jurnal dan buku-buku : diminta jangan membaca bahan-bahan ini seperti anda membaca akhbar harian METRO, majalah sukan FUTBALL dan lain-lain.  Anda diminta mempunyai disiplin tinggi untuk membaca benda alah ini.  Mengikut pengalaman saya membaca setiap paper journal sebanyak 3 kali banyaknya. Catit tarikh bacaan tersebut.  Bacaan pertama ialah scanning,  bacaan kedua ialah mengenalpasti scope kajian, research gap, findings dan methodology. Buat bacaan dalam kadar slow-slow sedikit.  Bacaan terakhir ialah menulis rumusan 1 atau 2 paragraph.  Gunakan jadual matriks yang pernah saya syurkan kepada anda terdahulu.  Tidak memenuhi jadual matriks ..ini bermakna ..anda telah gagal membaca apa-apa.

5.       Bina tabiat menanya soalan yang produktif dengan penyelia utama PhD anda.  Buat catitan apa yang dibincangkan.  Sebaik-baiknya gunakanlah recorder untuk merakam semua perbualan anda.  Bila sudah selesai, cuba cari sudut-sudut terpencil dalam library untuk mendengar balik perbualan anda dengan SPVR tadi.  Insya allah Berjaya!

6.       Elakkan dari perangkap mengambil andaian bahawa Tahun 1 PhD adalah honeymooning year.  Ramai pelajar Malaysia PhD di luar Negara tertipu dengan sikap ini di mana pada tahun ini lah mereka merantau seluruh benua Eropah, Amerika Utara, Afrika Utara dan tidak ketinggalan tanah suci Mekah/ Madinah.  Tahun ini juga mereka mula belajar/ berjinak-jinak dengan batang golf, topi bintang golf TIGER WOODS hinggakan masuk library Universiti Birmingham , England jam 0900 mlm waktu Winter pun mereka akan tetap memakai topi golf TIGER WOODS ini.  Bila banyak berjalan, kita akan dapat ramai kenalan-kenalan baru.  Ramai kenalan baru , ada saat happy dan ada saat dukacita.  Perkara dukacitanya ialah .. rumah kita di London akan menjadi BED and BBREAKFAST hostel CYS semua kenalan kita dari Scotland, Ireland, France, USA bila mereka mau melawat kota bandaraya LONDON.  Semua telur ayam, sardine dan susu segar dalam fridge kita akan habis.    Baik sungguh hati tuan hamba. Terima kasih tuan!

7.       Elakkan dari membina computer systems PhD terburu-buru.  Bila siap system and mula menulis tesis kita akan berhadapan dengan 3 masalah terbesar.  Tiga masalah besar ini lah punca utama mengapa ramai pelajar PhD tidak dapat menyelesaikan proses penulisan tesisnya yang sudah berkurun-kurun lamanya. Pertama anda belum yakin sepenuhnya apakah research gap selama ini (sebelum anda terjun ke dalam dunia PhD).  Kedua ialah data yang ada tidak diproses, analysis dengan baik menggunakan teknik programming, software secara efisyien dan bijaksana.  Ketiga disebabkan anda lalai membuat Literature Review secara menyeluruh/ exhaustive pada tahun 1 dan 2, masalah terbesar anda ialah penulisan tesis bab terakhir tidak mempunyai rujukan, penemuan anda tidak mempunyai apa apa kaitan dengan penemuan researchers terdahulu atau terkini, hujah mempertahankan penemuan anda kelihatan lemah dan tidak mencapai tahap kesarjanaaan di peringkat PhD.  Tidak lupa juga, kadang-kadang ada pelajar tidak mempunyai kekuatan dalam penulisan tesis dalam bahasa inggeris.  Ini memainkan peranan penting bila supervisor akan berkali kali menegur .. I just could not figure what the hell you mean by these pages!   Di saat saat tahun 4 , 5 di luar Negara dengan kotak-kotak hadiah dan jualan sales dari Car Boot sales di White Chapel, Aldgate East and Wembley dan juga kereta merx E2.30  second hand berada dalam otak anda bercampur dengan ketakutan kita untuk berjumpa projek supervisor bila Profesor Brown memanggil anda berkali-kali,  minat anda untuk menyiapkan tugas utama PhD akan terus luntur, tenggelam dan … segala-segalanya akan menjadi memori penuh warna-warni di London.

8.       Buat tabiat menulis paper proceedings dan jurnal.  Dengan cara ini, focus anda terjaga.  Pada tahun 1 PhD, pembaca-pembaca akan Nampak ..hasil tulisan ini adalah mereka yang baru terjun dalam dunia research,  buat 3 paper dalam tahun 1 sekurang-kurangnya, hantar jauh-jauh sampai ke Indonesia Institut Teknologi Bandung ;  Australia, Univ of Deakins  dan Japan, Univ of Waseda pada tahun 2 PhD buat 2 paper    yang Nampak lebih canggih dan mantap dibaca di mana pembaca boleh melihat sudah ada method yang tepat dan proses susulan dari metodologi di atas  dan akhirnya pada penghujung tahun 3 PhD buatlah 1 atau 2 paper untuk jurnal berimpak tinggi.  Dengan target begini, Allah Taala akan membantu anda dan akan mengganggap semua masa susah dan senang anda di London , satu amal ibadat yang DIA redhai.

9.       Bila menulis tesis, elak dari menulis dari saat sejurus selepas tamat tahun 3 baru nak mula menulis tesis.  Mulakan dengan penulisan tesis PhD pada tahun 1 lagi.Bukak bab 1 introduction, bab 2 literature review dan bab 3 research methodology serentak dalam computer notebook anda sepanjang masa.  Bila ada idea apa-apa, tanyalah diri anda ada apa-apakah fakta yang sesuai untuk dimasukkan ke dalam mana mana bab ini.   Belajar words outlining.  Saya dapati banyak masa dapat dijimatkan dengan kemahiran outlining dalam words 2010 ini.  Cubalah anakku.

10.   Simpan backup / harddisk/ second back up , third back up/ simpan dalam cloud.  Ada kenalan saya di Birmingham, di saat saat dia mahu pulang ke Malaysia, beliau kehilangan 5 paspost Malaysia dan juga 1 set computer PhD.  Pada masa itu , semua penulisan terbaru selama 4 bulan terkini ,,,,  beliau tidak membuat sebarang backup.  Mengikut temubual , rakan saya ini sibuk dengan servicing Merx 2.3E dia di garaj orang Pakistan/ African brothers berhampiran rumah sewanya.  .  Bayangkan kesusahan yang dialami ini.  Dari jauh, saya dengar dia tidak Berjaya menyerahkan tesis PhD tersebut.  Satu kenangan pahit, bukan?

11.   Sebagai orang islam, banyakkan masa sembahyang hajat dhuha, tahajud ..mintak pertolongan Allah siang dan malam.  Dalam satu ayat dalam doa saya , saya masukkan ayat begini ‘..  jangan sia-siakan masa pengorbananku ini untuk memperolehi PhD demi dunia islam keseluruhannya dan ..ya ROBB (tuhanku) ..janganlah jadikan aku ..satu bahan ketawa oleh pihak JPT, KPTM, Universiti, politeknik, anak anak cucu ku ..ahli masyrakat kampongku kerana aku tewas dalam medan PhD… ya Allah ..bantulah aku.  Jika orang-orang kafirpun kau boleh membantunya .. apa kiranya .. nikmat PhD ni kau kurniakan juga pada diri ..yang serba lemah ini.  Aku tak tahu macam-macam kerana .. kuasa tahu segala-galanya adalah hak milikmu se orang. Ya ROBB  ..’

12.   Sekian.  Maaf ku pinta jika ada apa apa yang tidak bagus dibaca dan tidak enak difahami oleh kalian.  Saya hanya menyampaikan apa yang saya tahu jer untuk maksud berkongsi-kongsi ilmu dan pengalaman.  Yang baik dari Allah dan yang tidak bagussssssshhhhhhhhhhhhhhhhhhhhhhhhhh …..  itu semua adalah kelemahan diri saya sendiri yang penuh dengan kealpaan dan kehinaan.

Wallah huaklam.

ayahandamu,

Sazali Khalid Ph.D ;  Masters Computer Education (Birmingham), BSc Operations Research (Leeds), GCE ‘A’ Levels  Grantham ;  PGCE (Penang);  Qualified Translator IPNMB (Wangsa Maju);  WSEAS Corfu Island 2005 ,  WSEAS Teneriffe Islands Spain 2006, 2nd International Conference Applied Probability and Simulations,   Hanoi , 2008.

Nine Things Developers Want More Than Money

21:57 Posted by Shichibukai Encraptor , , No comments

programmerMany of the developers I know have been programming since they were in junior high. Whether it was building text-based games on an Apple IIe or creating a high school football roster app in Visual Basic, it’s something they did for the challenge, for the love of learning new things and, oh yes, for the ladies. Ladies love a man who can speak BASIC to his Apple.

College graduates face a sad reality when they leave the protective womb of a university and have to get their first real job. Many of my friends found jobs paying around $25k out of school, and were amazed that the starting engineering and computer science salaries were nearly double that. But the majority of the engineers in my class didn’t become engineers for the money; we did it because it touched on a deep inner yearning to tinker and impress their friends. And did I mention the ladies?

Money is a motivating factor for most of us, but assuming comparable pay, what is it that makes some companies attract and retain developers while others churn through them like toilet paper?

Hygiene and Motivation
In the 1950s a researcher named Frederick Herzberg studied 200 engineers and accountants in the US. He asked them a few simple questions and came up with what is one of the most widely-accepted theories on job satisfaction called Two Factor Theory.

His theory breaks job satisfaction into two factors:

  • hygiene factors such as working conditions, quality of supervision, salary, safety, and company policies
  • motivation factors such as achievement, recognition, responsibility, the work itself, personal growth, and advancement

Hygiene factors are necessary to ensure employees don’t become dissatisfied, but they don’t contribute to higher levels of motivation. Motivation factors are what create motivation and job satisfaction by fulfilling a person’s need for meaning and personal growth.

Think of a large financial company like Countrywide or IndyMac. Although I’ve never worked for either, the stories I’ve heard indicate the hygiene factors are well taken care of: working conditions are good, supervision is reasonable, salaries are decent, they have good benefits, etc…

However, the motivation factors are, shall we say, incognito. As Herzberg noticed, this scenario leads to employees viewing the job as little more than a paycheck, which is probably all right for companies like Countrywide and IndyMac.

Take the flip side: a tiny startup in a dingy office with no windows, crappy benefits, little supervision (because the CEO’s on the road making sales), and no company policies (because the CEO’s on the road making sales). But the constant rush of learning, being responsible for the company’s success or failure (almost single-handedly at times), and believing in the company’s future growth makes this job much more desirable for many developers.

One of my early programming jobs was for a web consulting startup during the dot-com boom. There were 7 of us (we grew to 17 during the height of the boom) shooting each other with water pistols, throwing Nerf footballs around the office, and cranking out insane amounts of caffeine-driven code. We learned a new language every project and were always on the cutting edge.

I remember thinking that a company across town could have offered me a $15,000 dollar raise and I wouldn’t have taken it. The motivation factors were overpowering.

On the flip side, the benefits were terrible, the office was a series of tiny cubicles, gray from years of neglect – Smurf-blue network cables hung from the ceiling, and supervision was…well…non-existent. And although hygiene factors were lacking, developers flocked to work for this company and only one left while I was there. She was interested in a more stable work environment and better benefits, and went to work for a large financial institution much like IndyMac.

Rob’s Criteria for Keeping Your Developers Happy
If you want to collect a paycheck for 25 years and retire with a gold watch and a pension then go for companies that have the hygiene factors nailed. Stroll in at 8, head for the door at 4:59, and count the years until you’re kicking up your feet on a beach bar in Costa Rica.

But if you’re reading this, odds are that you aren’t the kind of person who never thinks about code after 5:01; you’re more likely to have a collection of DVDs that come up in an Amazon search for “Silicon Valley.” You’re probably one of those people who needs motivation factors or you go crazy with restlessness, and when the motivation factors are in place you’ll work ridiculous hours for low pay just because it’s so damn fun.

I talked to a dozen colleagues and pored over my own experiences to arrive at this list of nine software development motivation factors – Rob’s Criteria for Keeping Your Developers Happy.

There’s only one rule when determining your score: your vote doesn’t count unless you’re a developer. If you’re not in the trenches writing code then forward this article to someone who does and ask for their opinion. In addition to keeping management from making an unfair assessment, my greater hope is that this inspires conversation and forces management and developers to talk about these issues so we can get them out in the open.

Without further ado, here they are:

1. Being Set Up to Succeed
It’s a sad reality, but most software projects are set up to fail. Every developer has their horror stories; the “anti-patterns” of software project management. I’ve seen an architect given documentation for a legacy system that he pored over for week while designing a new interface for the product. After the design was complete he found out that the documentation was three years old and didn’t reflect several major changes the system.

I’ve spent hours preparing a detailed technical estimate only to be told that the real deadline, already set by product development, gives me half the time I need.

Realistic deadlines are a huge part of being set up to succeed. Developers want to build software that not only works, but is maintainable; something they can take pride in. This is not in-line with product development’s goals, which are for developers to build software that works, and nothing more.

The first thing to go when time is tight is quality and maintainability. Being forced to build crap is one of the worst things you can do to a craftsman. Delivering a project on-time but knowing it’s a piece of crap feels a heck of a lot like failure to someone who takes pride in what they build.

It’s critical to have buy-in to do things the right way, and not just the quick way. As one developer I talked to put it “Quality is as important as feature count and budget.”

Schedule is not the only way a project can be set up to fail, but it is the most common. Others include: being forced to use cheap tools (be it software or hardware), working with a partner who doesn’t deliver, bad project management (see #2, below), changing scope, and unspoken expectations, among others.

2. Having Excellent Management
Excellent management, both for projects and people, is a must-have motivation factor. This means no micro-managing, the encouragement of independent thinking, knowing what it takes to build quality software, quick decision making, and a willingness to take a bullet for the team when product development tries to shorten the schedule

These are the traits of an amazing software manager; the traits of a manager whose team would bathe in boiling oil to defend her, and work all-nighters to prove her right. When a manager takes bullets for the team, good developers tend to return the favor and then some. It creates an almost cult-ish loyalty, and the results are not only motivated developers, but insanely good software.

3. Learning New Things
Behavioral research indicates we’re happiest when we’re learning new skills or challenging old ones. A recent article cites a study by two University of Columbia researchers suggesting that workers would be happy to forgo as much as a 20% raise if it meant a job with more variety or one that required more skill. This research suggests that we are willing to be paid less for work that’s interesting, fun, and teaches us new skills.

This is why companies using Ruby can find experienced programmers willing to work for less than their typical salaries.The learning factor is huge when it comes to negotiating compensation.

Every developer I know loves playing with flashy new technologies. It was Perl and HTML in the mid-90s, ASP, PHP and Java in the late-90s, ASP.NET and XML a few years ago, and today it’s AJAX and Ruby (and in some circles ASP.NET 2.0). Give someone a chance to use these toys and they’ll not only be able to impress their friends, but fulfill that piece inside of them that needs to learn.

Keep a developer learning and they’ll be happy working in a windowless basement eating stale food pushed through a slot in the door. And they’ll never ask for a raise.

4. Exercising Creativity and Solving the Right Kind of Problems
Developers love a challenge. Without them we get bored, our minds wander, we balance our checkbook, check our email, hit Digg and Slashdot, read a few blogs, hit the water cooler, and see if any of our friends are online so we can once and for all settle the debate surrounding your uncle, the IDisposable interface, and that piece of toast shaped like the Virgin Mary.

I’ve watched developers on multiple occasions stay up until sunrise to solve a technical problem without being asked and without extra pay. The best developers are addicted to problem solving. Just drop a Sudoku in the middle of a group and watch them attack it.

Faced with the right type of challenge many developers will not stop until it’s fixed, especially if it requires a particularly creative solution. Faced with the wrong type of challenge and they’re back on instant messenger describing the toast.

The right type of challenge is a technical challenge that teaches a new skill, preferably one everyone’s talking about. One example could be: “Consume these five RSS feeds, aggregate the data, and display the headlines on a web page…and figure out how to use AJAX to make it cool.”

The wrong types of challenges are things like: “Fix that other guy’s code. You know, the one we didn’t fire because we were afraid he might cause problems. Well, he wrote a really crappy system and now we need to fix it and make it high-quality and maintainable. Oh, and you have until tomorrow.”

If your business doesn’t provide challenging work to developers, figure out how you can start. If there is no chance you’ll ever be able to provide challenging work, find developers who are into hygiene factors, because developers who need motivation factors won’t stay long.
5. Having a Voice
Developers are in the trenches, and they’re the first ones to know when a system or process is not working. One developer I spoke with told me:

“[I want] someone to listen to my problems and actually take them seriously. I’ve worked at a few places where more RAM, more hard disk space, or faster/dual CPUs were simply not a priority for the company, but it was incredibly aggravating to the point of impeding my work. At one place I worked, every time I wanted to compile the software I had to clear all my temporary files because I needed more disk space. Talk about asinine. Being forced to work using outdated technology is really frustrating.”

When a developer speaks, someone should listen. When several developers are saying the same thing, someone should listen and act…quickly.

6. Being Recognized for Hard Work
As engineers we love building things that impress ourselves and our friends. At least the ones who realize how hard it is to write a Perl compiler. From scratch. In FORTRAN. On a Vic 20.

Building something great is fun, but it’s much more fun when someone’s there to pat you on the back, throw you a party, sing your praises, or buy you a steak dinner. Most developers enjoy hearing praise and receiving recognition for hard work, but even the ones who don’t need it are somehow soured when they don’t receive it (or worse yet, someone else receives recognition for your work).

Recognition is one of Herzberg’s core motivation factors and it applies to software developers as much as the engineers originally interviewed.

7. Building Something that Matters
Even though we’re not medics in Bosnia or food carriers in Sudan, most people want to feel like we’re somehow doing our part to make the world a better place, both technologically and socially. Some of us might think we do it just for the sake of technology, but in the back of our minds we see ourselves as part of a grand scheme.

For instance, a friend of mine works for a financial company and cherishes every time they launch a product that helps the under-served financial community.

An Albertsons inventory software developer enjoys coming to work every day because his work ensures, via complex supply and demand algorithms, that the baby cereals are always available on the shelves.

Building something that matters makes an L.A. Times software engineer ecstatic that the trucks are now saving over 30% of their mileage and fuel costs due to his shortest path finding software implementation for newspaper delivery.

On the other hand, writing an interface to a buggy API that’ll be used a total of 15 times in the next year doesn’t seem like it matters much.

Copying and pasting an entire application and changing a bunch of labels isn’t as exciting as it might sound.

And hacking in a few more case statements in a ridiculously complex stored procedure in order to service yet another customer without creating a proper data structure somehow doesn’t seem to fulfill that part of us that wants to build something that matters.

8. Building Software without an Act of Congress
I was a contractor for three years starting in 2001, and during that time I built a ton of web applications. Since much of my development was off-site I became accustomed to writing software really quickly once we knew what to build. Another developer and I built insane amounts of software over the course of two years.

When I got my next full-time job it felt like I was dragging 50-pound weights. For every page I wanted to build I had to call a meeting with six people. Any change to the database required three approvals. It was nuts, and applications took 5x longer to build. Talk about frustrating.

The authority to make project decisions without calling a meeting is huge.

9. Having Few Legacy Constraints
No one likes developing against buggy interfaces, crappy code, and poorly-designed data models. Too many legacy constraints kill creativity, require an act of congress to modify, and generally sucks the fun out of building software (see several of the previous points for why this is bad).

If you have gobs of legacy liability, try to figure out a way to minimize its impact on future development. If you can’t, look for people who value hygiene factors, because motivation factor developers are not going to maintain the same poor-quality applications for very long.

Determining Your Score
Let’s face it, the bar has been set pretty low when it comes to motivating developers. How many companies can you think of that would score even as high as a 3?

Since this test hasn’t been administered to companies across the globe there’s no basis for comparison, but that’s where you come in. I’d like to do an informal survey so we can get an idea of how things are in the real world. Please post your company’s score in the comments (you don’t have to post the company name).

Most large companies I can think of would be lucky to score a 1. Google would probably score an 8 or a 9.

Wrap Up
If you’re a manager, when was the last time you asked your developers about these issues? If you’re a developer, when was the last time you respectfully raised one of these issues, providing examples and a possible solution?
If the answer is “a long time ago” then you have some work to do. Send this article to a few of your colleagues and start discussing how to enact change.

If you liked this article you’ll also like my article Personality Traits of the Best Software Developers.

Thanks to Jeremy Lukensmeyer, Curtis Fields, Rick Kopitzke, Adnan Masood, Mike Taber, and a few others for their input into this article.

‘A’ Student Sila Lupakan Impian Memulakan Bisnes Sendiri

21:52 Posted by Shichibukai Encraptor , No comments

Anda sentiasa dapat straight A’s dalam UPSR, PMR, SPM?
Anda sentiasa masuk dalam senarai penerima anugerah dekan setiap semester?
Anda tidak pernah repeat paper dalam mana-mana subjek peperiksaan?

Jika anda tergolong dalam kategori pelajar yang lebih banyak ‘A’ dari gred-gred lain, artikel ini adalah untuk anda. Saya akan kongsikan rahsia untuk jadi kaya.

Rahsianya adalah …

  • Jangan buat bisnes sendiri.
  • Jangan mulakan bisnes dari zero.
  • Jangan buang masa baca buku bisnes from zero to hero dengan harapan nak jadi macam mereka.

Cara untuk anda jadi kaya adalah dengan bekerja di syarikat yang besar, mendaki tangga korporat sehingga dapat jadi CEO atau pengurusan kanan dan bila dah sampai usia 50-an semoga dapat jadi pengarah syarikat berhad.

StudentAJanganBisnes

Cuba ingat kembali zaman anda bersekolah dahulu. Kenapa anda dapat A dalam sesuatu mata pelajaran?

Bukankah anda berjaya menulis balik apa yang diajar di kelas dan apa yang ada dalam buku teks?

  • Sekiranya anda menulis Malaysia mencapai kemerdekaan pada Tahun Gajah; adakah anda mendapat A dalam subjek Sejarah?
  • Sekiranya anda menjawab soalan, “Di manakah terletaknya negeri Pahang?” dan anda menjawab, “Tangga tercorot liga Premier,” adakah anda mendapat A dalam subjek Geografi?
  • Sekiranya anda kata 89 adalah nombor yang lebih besar dari 133, adakah anda mendapat A dalam Matematik?

Fikirkan baik-baik.

Proses ini telah sebati dalam hidup selama kira-kira 16 tahun. Jawab soalan dengan betul. Ikut apa cikgu cakap. Ingat nota. Hafal buku teks. Minum air rebusan nota masa mengulangkaji.

Anda tidak berani buat salah. Anda tidak berani jawab selain dari skema jawapan. Anda hanya tahu ikut arahan. Tak pernah kena marah cikgu disiplin dan masuk mahkamah universiti. Budak kesayangan cikgu. Budak kesayangan pensyarah. Andalah bintang. Wow!

Budak ‘C’ kalau dapat ‘A-’ menangis. sujud syukur dan belanja kawan-kawan makan kerana dapat juga akhirnya gred A sepanjang usia dia jadi mahasiswa. Anda jika dapat ‘A-’ juga menangis tetapi disusuli dengan merayu-rayu dengan pensyarah supaya dapat A+.

Jadi, kalau sifat ini sudah sebati dalam diri anda jangan memulakan bisnes sendiri.

Anda tidak mampu berfikir di luar buku teks. Anda tidak mampu keluar dari tradisi industri. Anda hanya tahu ikut sistem yang stabil.

Sedangkan bisnes dari zero ibarat orang yang hanya ada rakit tapi berangan nak berlayar ke lautan luas. Orang kata jangan, tapi dia nak juga berlayar dengan rakit. Dalam perjalanan tu, dia bina sedikit demi sedikit kapal yang lebih besar. Kalau dibuatnya ada ombak besar, ribut taufan melanda ketika kapal tersebut sedang dibina, dia tenggelam. Nasiblah.

Bisnes dari zero adalah mengenai survival. Lagi banyak buat silap lagi bagus. Lagi cepat buat salah lagi baik. Lagi gila jawapan kita bagi dalam soalan-soalan dalam bisnes yang muncul lagi bagus.

Satu-satunya ilmu bisnes yang betul adalah duit masuk lebih dari duit keluar. Selain dari itu, entah. Boleh jadi sesuai dengan bisnes kita, boleh jadi tak boleh pakai untuk bisnes kita. Kena cuba test try.

  • Walmart jual barang murah-murah, untung. Daimler, jual barang dengan harga mahal, untung juga.
  • Coca Cola, barang utamanya adalah Coke, untung. Nestle, ada lebih 8,000 jenama, untung juga.
  • Zappos , guna strategi masuk pasaran sedia ada, untung. Apple, guna strategi cipta pasaran sendiri, untung juga.

Jadi ‘A’ student pasti gagal menjawab soalan, “Bagaimana nak bina bisnes yang menguntungkan?

Sebab soalan itu jawapannya tiada dalam buku. Sam Walton pasti memberikan jawapan berbeza dengan Asa Griggs Candler dan apa yang menariknya kedua-duanya betul.

Melainkan anda dapat mengubah sikap yang sebati dalam diri seperti sukar berfikir di luar kotak, tidak berani menyahut cabaran baru  dan tidak mahu menjadi ‘budak nakal’ yang langgar rules & regulations (yang sangat sukar untuk dibuat kerana masih takut buat salah dan takut kepada kegagalan), maka selepas anda berjaya mencapai tangga tertinggi kerjaya, peluang menggandakan pendapatan adalah dengan terlibat dalam bisnes jenis franchise.

Iaitu beli bisnes yang telah berjaya.

Bisnes yang telah ada sistem sendiri. Sistem yang anda tidak berani nak ubah. Sistem yang tidak memerlukan banyak kreativiti, hanya ikut manual operasi. Franchise yang baik menyediakan semuanya untuk anda termasuklah kempen pemasaran.

Jadi, jika anda ‘A’ student jangan buang masa memulakan bisnes sendiri ya!

Tips and Tricks for Staying Motivated With Your Programming Project

19:50 Posted by Shichibukai Encraptor , No comments

Do you have a project that you were really excited about in the beginning but now your lack of motivation has you saying “Not that project again, bleh”? I think we all suffer from that once in awhile. Especially on those projects where we are not the lead or never thought of the project to begin with. How are we going to get excited about making a program to track the amortization of a truck for some trucking company? I decided to come up with a list of tips and tricks you can use, as a programmer, to stay motivated and get excited about a project.

The Tips
  1. Write down all your tasks in a list and challenge yourself to knock a few items off the list every day. If the tasks are not small enough to fit into a single day, can you break it up into smaller tasks? The idea here is that you want to be able to knock off a few items every day, so make sure each task is bite size. Maybe the task is a single function or perhaps it is a whole component. When you knock off items and see progress being made, you will get a sense of accomplishment and want to conquer more tasks. It can get addicting!
  2. Keep asking yourself the question “what if?” and then challenge yourself to tackle it… that is if it fits in your task list you created from item 1 above. You made a nice little component that aggregates RSS feeds. But what if you made that widget into something that scrolls? Ok, it is now scrolling, but what if you made it read feeds in real time? How far can you go? Just make sure you do it on a separate branch and your are not feature bloating the project to hell. Branch, implement and show it off at the next meeting. If they like it, perhaps they will have you merge it. Worse case scenario is that they don’t want to merge it, then you learned something for a future project perhaps.
  3. When you hit a milestone, reward yourself by getting a beer or buy some little thing off of ThinkGeek. Heck, go talk to that hot babe over at reception even though she would never ever go out with you. You hit a milestone man, you deserve that pat on the back!
  4. Try making it a game with some fellow programmers. Who can find the most bugs? Who is the ultimate supreme uber-leet programmer in your part of the cubicle jungle? Just keep in mind here that it is all for fun and despite whoever finds the bug everyone benefits. You may have your off day, but tomorrow is another day and another game. You will win some and you will lose some.
  5. If you have been working on a piece of code for a long time and things are slow going, change speeds and work on some other task for awhile. Then you can come back to the original task with a fresh perspective. No use getting yourself down on a tough problem when you can go away and come back and crack that tough problem wide open with a unique thought.
  6. Participate and contribute as much as you can to group meetings. If you can contribute and get some fun tasks into the work flow of the project, then you will get yourself psyched up for the project because you helped make it happen. Perhaps you managed to get a really neat feature into the next development cycle that will help you learn something new.
  7. Keep some interesting and thought provoking items at your desk. Hopefully you are at a company that lets you clutter up your desk with things that you enjoy. Action figures, toys, puzzles or perhaps your favorite Linus Torvalds quote. Ever notice that when you are deep in thought about a programming problem you are not always looking at your screen but perhaps something on your desk? If that item keeps you lighthearted, you may stay upbeat and motivated to push forward.
  8. Take care of yourself and your health. When you are eating right and feeling good, you tend to concentrate more and can stay focused as well as motivated. How are you going to remain motivated if you are always crashing from your last Redbull? Get plenty of sleep and eat healthy foods in between pizza binges (yeah we know that pizza is healthy). Then you will drop some awesome code and make your milestones effortlessly. “Ok Robin, back to reception desk!”
  9. Get into the habit of encouraging others in their work and hopefully they will encourage you in yours. Let them know when you think they wrote a kick ass class that you want to use. You will make their day and in turn they will surely make yours. There is nothing like hearing that your code has made a difference in your team and eventually to the client. So if you can help foster a great dynamic team environment it will help you stay motivated to do your best.
  10. Sprinkle the tasks you like to do in between the tasks you don’t like to do. That way you may be doing something you don’t like now but you know right around the corner there is another fun project just waiting. If you do everything fun in the beginning you are left with a bunch of horrible stuff in the end. If you try to power through the stuff you hate in the beginning, it will seem like you are going long periods with no fun and your motivation will suffer.

If you can stay motivated by staying healthy, having fun, minimizing the crap jobs and keep spirits high the work will turn into a job you will love and then you will not be working anymore, you will be growing and breaking down walls. Do you have some tricks for staying motivated? We would love to hear them. Tell us all about it in the comments below!

Thanks for reading!

How to stay motivated whilst programming a game

19:41 Posted by Shichibukai Encraptor , , , No comments

Lots of people want to know the answer to that question. Most indie games fail. Most indie projects never get completed. I don’t have any way to prove that, but any indie game veterans will know it’s true. Here are my top tips. Some of them may seem like they de-motivate, rather than motivate, but I get motivated by knowing how important and serious it is for me to work hard. Most indies don’t realise how hard they are going to have to work, and how good their game has to be.

1) Code something you like.

Just because you did your research and can prove that a poodle simulator is the best choice for the current games market, doesn’t mean you want to program one. You might kid yourself that you can see it as a ‘mere engineering challenge’, but you won’t. Getting out of bed when nobody forces you to, with no deadline and no boss, to go code poodles probably won’t motivate you for a solid year. Pick something you are passionate about. I love sci fi and space battles, so making gratuitous space battles was a no-brainer. On a related note, save up some ‘fun’ coding for when motivation is low. Feeling keen? code the save game system and the options menu. Get them out of the way.

2) Surround yourself with inspiration

I listen to music from star wars or star trek when coding easy stuff or doing art. Coding scrollbars can seem dull, but the music reminds me these are spacefleet scrollbars and that makes it ok. The people who play your game won’t see the code, only the art and the game, so keep a picture of the final ‘atmosphere’ of your game in your head all the time. Does your pc desktop wallpaper not reflect the mood of your game? why not?

3) Keep a log of what you did each day.

Sometimes its easy to think the day was wasted, that nothing got done. I have lists of things to do for my games like this:

  • Fix bug with plasma torpedoes
  • Resize scrollbars
  • Add tooltips to buttons
  • Add transition to options screen

At the end of the day my log looks like this:

  • **DONE**Fix bug with plasma torpedoes
  • **DONE**Resize scrollbars
  • **DONE**Add tooltips to buttons
  • **DONE**Add transition to options screen

And that makes me realise how much I got done. You get a tiny adrenaline rush by crossing things off a todo list. Make one each day. Make the entries small, simple items, rather than huge projects. It should always be possible to cross something off each day.

4) Do some shiny

Mr Spock would code the entire game engine, get the gameplay balanced using just coder art, then add the graphical fluff last, to minimize re-doing work. I used to assume that made sense too. I used to rail against Lionhead for having so much artwork, code and music done before we were even sure how the game played. So much work got thrown away. Now I realise it’s important for your motivation to have something that looks and plays nice ASAP. The GSB campaign add-on hasn’t got all its gameplay coded yet, but theres a gratuitous map-zoom effect in already, plus background music. Having those things there keeps me positive about how cool the final game will look. There really is a good reason to code some shiny stuff in the first 25% of your project. Just don’t go mad.

5) Hard lessons in money

I gave a talk at a conference recently about the reality of indie games as a business. To be short and sweet, you need to sell a full-price game direct to a customer every 45 minutes, or you probably won’t make a career as a  full-time indie. That means at the very least someone grabbing your demo every 240 seconds. When you keep this in mind, you realise you need to make your game really good. Better than it is. You need to do better, just to survive in this market.

6) Stay aware how high the bar is (know your competition)

Don’t forget that for most gamers, the competition isn’t other indie games, but AAA games, or even other activities, TV, movies, etc. When I worked on the battles for GSB, I spent very little time looking at rival games, and virtually no time looking at indie space games. I compared it to the best sci-fi battle scenes I knew of, by ILM. Yes, you have to pick your battles, and graphics might not be one of them. Spiderweb compete on game length, Dwarf fortress on gameplay depth. Whatever it is that you are competing on, you need to ensure you aim as high as you can. Also remember that your game isn’t measured against the best game there is right now. It’s measured against the best game when your’s gets released…

8) Take short breaks.

Get away from the PC for a short while, so when you come back, you are fresh, keen and energised. Physical activity is a good idea. I do archery now and then. It’s ideal because it involves standing upright, concentrating on a distant object, and 100% focus on what you are doing. It’s the perfect sport for desk-bound geeks

Staying motivated is hard. Everyone has the same problem. Often, its the deciding factor between getting your project done or not. High motivation trumps everything. There are indies making games who are homeless (yes really) and who had to make them ‘undercover’ in Cuba. They still got stuff done. Lack of experience, lack of money, lack of time, can all be overcome by sheer bloody determination, if you can summon it. Now stop reading this, and type out tomorrows todo list.

Top Three Motivators For Developers (Hint: not money!)

19:36 Posted by Shichibukai Encraptor , , No comments

Software has long since lost its glory-days status.  We’re not the go-to field anymore.  Geeks are no longer revered as gods amongst humanity for our ability to manipulate computers.  We get crappy jobs just like everyone else.

So, what is it that still motivates you to work as a software developer?

Ah...satisfaction!

Is it your fat salary, great perks, and end-of-year bonuses?  Unless you’ve been working on Mars for the past two years, I think Computerworld would disagree with you.  We’ve been getting kicked in the nads just as hard as everyone else.  Between budget cutbacks, layoffs and reductions in benefits or increases in hours, clearly our paychecks are not our primary source of satisfaction.

If money was our primary motive, right now we’d be seeing a mass exodus from the tech sector.  So, if it’s not the money, then what is it that we hang on to when we get up each day?  Are we really working for those options?  That salary bonus?

Turns out, we’re kidding ourselves if we think that’s our real motive as developers.

The assumption: People perform better when given a tangible, and even substantial, reward for completing a task.  Think bonuses, stock options, and huge booze-driven parties.

The reality: In a narrow band of actual cases, this is true.  (And by narrow, I mean anything that isn’t a cognitive task, simple or complex, according to the research I quote below).  By and large, the reward-based incentive actually creates poorer performance in any group of workers for cognitive tasks, regardless of economic background or complexity of the task involved.  (Sorry, outsourcers…dangling the reward under your workers noses doesn’t help even when your home country is considerably poorer on average than Western economies.  Yet another surprising finding of their research.)

I’m not making this up, nor am I just drawing on anecdotal experience.  Watch this 18 minute video from TED and I’ll bet you’re convinced too:

Daniel Pink gave this lecture at the 2009 TED.  It’s mind-blowing if you’re stuck in the carrot-and-stick mentalityAnd I’ll just bet, unless you work for Google, are self-employed, or extremely worldly, you probably are.

I’m not saying that to be mean or controversial.  I’m saying that because this mentality has pervasively spread to every business, industry and country on the planet over the past 100 years.  It’s not just software development, but we’re hardly immune from its effect.

While we’re not immune to the impact, we do have a lot going for us that gives us an advantage in stepping outside this mentality:

  • Developers tend to be social oddballs and the normal conventions seem awkward to us. Social oddballs tend to question things.  We don’t like what everyone else likes because, well, we’re nerds and we don’t think like sales people.  Or accountants.  Or athletes.  We’re willing to try things others find weird because we’re weird too.
  • Because we’re odd, we tend to be forward thinking and revolutionary in our approaches to workplace advancements. Think about the good aspects of the Dot Com era:  pets in the workplace, recreation rooms with pool tables and ping pong, better chairs and desks for people, free lunches.  Those innovations didn’t come out of Pepsi, Toyota, or Price Waterhouse Coopers, they came out of tech companies.  Every one.
  • In doing so, our weird becomes the new normal. Witness the output of the Dot Com era:  Aside from the economic meltdown, how many companies now regularly practice some, if not all of those things we did back in the late 90s?  (Albeit with more restraint, thankfully)

 

With that in mind, let’s take Daniel’s idea of the results-oriented work environment (ROWE) forward and create something new for the 21st century.  It focuses on three important ideas, which developers already love and embrace:

  1. Autonomy
  2. Mastery
  3. Purpose

Autonomy: What developer out there doesn’t like to be given the freedom to do their own thing, on their terms, with their preferred hours, using their tools, environment, IDE, language, operating system and favorite t-shirt?  Find me a single developer anywhere that doesn’t crave this kind of freedom and I’ll pay you $10.  Seriously.  Drop me a contact above.  I’m good for it.  Of course, you’ll search for the rest of your life and won’t be able to do it.

Mastery: Every developer on the planet wants to get better at what they do.  We crave new knowledge like some people quaff coffee after a hangover.  Fortunately, the side effects of getting better at development are far more benign than caffeine binging.

Purpose: Nothing is more tedious, horrific, or uninspiring to developers to work on projects that lack any real meaning in the world.  Or lack any real direction.  Or lack any substantial need from the company.  In fact, you can probably point to the brightest points of your career all stemming from those projects that had the deepest meaning to you personally.  Maybe the darkest points are those soul-sucking projects that you waded through because you were glad to have a job but desperately waited for things to improve so you could find a better job elsewhere.  Preferably where soul-vacuums didn’t exist.

Google gets it:  They already advocate the 20% time concept and (near-)complete workplace freedom.  Atlassian gets it:  They have the Fedex challenge where everyone in the company gets 24 hours to work on something they are interested in, with the caveat you have to deliver it at the end of 24 hours and you must present it to the company.  Think those don’t create passion for the company?  How about the Nine Things Developers Want More than Money?  These points all touch on the same three basic concepts:  autonomy, mastery, and purpose.

Does your company “get it”?  If the answer is NO,  what can you do right now to change your workplace to “get it”? And if that is too Sisyphean a task for you, how about starting your own company instead, that does “get it”?

That’s my challenge for you in 2010.  “Make software suck less in the 21st century”

Good luck.

What Programmers Want

19:31 Posted by Shichibukai Encraptor , , No comments

Most people who have been assigned the unfortunate task of managing programmers have no idea how to motivate them. They believe that the small perks (such as foosball tables) and bonuses that work in more relaxed settings will compensate for more severe hindrances like distracting work environments, low autonomy, poor tools, unreasonable deadlines, and pointless projects. They’re wrong. However, this is one of the most important things to get right, for two reasons. The first is that programmer output is multiplicative of a number of factors– fit with tools and project, skill and experience, talent, group cohesion, and motivation. Each of these can have a major effect (plus or minus a factor of 2 at least) on impact, and engineer motivation is one that a manager can actually influence. The second is that measuring individual performance among software engineers is very hard. I would say that it’s almost impossible and in practical terms, economically infeasible. Why do I call infeasible rather than merely difficult? That’s because the only people who can reliably measure individual performance in software are so good that it’s almost never worth their time to have them doing that kind of work. If the best engineers have time to spend with their juniors, it’s more worthwhile to have them mentoring the others (which means their interests will align with the employees rather than the company trying to perform such measurement) than measuring them, the latter being a task they will resent having assigned to them.

Seasoned programmers can tell very quickly which ones are smart, capable, and skilled– the all-day, technical interviews characteristic of the most selective companies achieve that– but individual performance on-site is almost impossible to assess. Software is too complex for management to reliably separate bad environmental factors and projects from bad employees, much less willful underperformance from no-fault lack-of-fit. So measurement-based HR policies add noise and piss people off but achieve very little, because the measurements on which they rely are impossible to make with any accuracy. This means that the only effective strategy is to motivate engineers, because attempting to measure and control performance after-the-fact won’t work.

Traditional, intimidation-based management backfires in technology. To see why, consider the difference between 19th-century commodity labor and 21st-century technological work. For commodity labor, there’s a level of output one can expect from a good-faith, hard-working employee of average capability: the standard. Index that to the number 100. There are some who might run at 150-200, but often they are cutting corners or working in unsafe ways, so often the best overall performers might produce 125. (If the standard were so low that people could risklessly achieve 150, the company would raise the standard.) The slackers will go all the way down to zero if they can get away with it. In this world, one slacker cancels out four good employees, and intimidation-based management– which annoys the high performers and reduces their effectiveness, but brings the slackers in line, having a performance-middling effect across the board– can often work. Intimidation can pay off, because more is gained by intimidating the slacker into mediocrity brings more benefit than is lost. Technology is different. The best software engineers are not at 125 or even 200, but at 500, 1000, and in some cases, 5000+. Also, their response to a negative environment isn’t mere performance middling. They leave. Engineers don’t object to the firing of genuine problem employees (we end up having to clean up their messes) but typical HR junk science (stack ranking, enforced firing percentages, transfer blocks against no-fault lack-of-fit employees) disgusts us. It’s mean-spirited and it’s not how we like to do things. Intimidation doesn’t work, because we’ll quit. Intrinsic motivation is the only option.

Bonuses rarely motivate engineers either, because the bonuses given to entice engineers to put up with undesirable circumstances are often, quite frankly, two or three orders of magnitude too low. We value interesting work more than a few thousand dollars, and there are economic reasons for us doing so. First, we understand that bad projects entail a wide variety of risks. Even when our work isn’t intellectually stimulating, it’s still often difficult, and unrewarding but difficult work can lead to burnout. Undesirable projects often have a 20%-per-year burnout rate between firings, health-based attrition, project failure leading to loss of status, and just plain losing all motivation to continue. A $5,000 bonus doesn’t come close to compensating for a 20% chance of losing one’s job in a year. Additionally, there are the career-related issues associated with taking low-quality work. Engineers who don’t keep current lose ground, and this becomes even more of a problem with age. Software engineers are acutely aware of the need to establish themselves as demonstrably excellent before the age of 40, at which point mediocre engineers (and a great engineer becomes mediocre after too much mediocre experience) start to see prospects fade.

The truth is that typical HR mechanisms don’t work at all in motivating software engineers. Small bonuses won’t convince them to work differently, and firing middling performers (as opposed to the few who are actively toxic) to instill fear will drive out the best, who will flee the cultural fallout of the firings. There is no way around it: the only thing that will bring peak performance out of programmers is to actually make them happy to go to work. So what do software engineers need?

The approach I’m going to take is based on timeframes. Consider, for an aside, peoples’ needs for rest and time off. People need breaks at  work– say, 10 minutes every two hours. They also need 2 to 4 hours of leisure time each day. They need 2 to 3 days per week off entirely. They need (but, sadly, don’t often get) 4 to 6 weeks of vacation per year. And ideally, they’d have sabbaticals– a year off every 7 or so to focus on something different from the assigned work. There’s a fractal, self-similar nature to peoples’ need for rest and refreshment, and these needs for breaks tap into Maslovian needs: biological ones for the short-timeframe breaks and higher, holistic needs pertaining to the longer timeframes. I’m going to assert that something similar exists with regard to motivation, and examine six timeframes: minutes, hours, days, weeks, months, and years.

1. O(minutes): Flow

This may be the most important. Flow is a state of consciousness characterized by intense focus on a challenging problem. It’s a large part of what makes, for example, games enjoyable. It impels us toward productive activities, such as writing, cooking, exercise, and programming. It’s something we need for deep-seated psychological reasons, and when people don’t get it, they tend to become bored, bitter, and neurotic. For a word of warning, while flow can be productive, it can also be destructive if directed toward the wrong purposes. Gambling and video game addictions are probably reinforced, in part, by the anxiolytic properties of the flow state. In general, however, flow is a good thing, and the only thing that keeps people able to stand the office existence is the ability to get into flow and work.

Programming is all about flow. That’s a major part of why we do it. Software engineers get their best work done in a state of flow, but unfortunately, flow isn’t common for most. I would say that the median software engineer spends 15 to 120 minutes per week in a state of flow, and some never get into it. The rest of the time is lost to meetings, interruptions, breakages caused by inappropriate tools or bad legacy code, and context switches. Even short interruptions can easily cause a 30-minute loss. I’ve seen managers harass engineers with frequent status pings (2 to 4 per day) resulting in a collapse of productivity (which leads to more aggressive management, creating a death spiral). The typical office environment, in truth, is quite hostile to flow.

To achieve flow, engineers have to trust their environment. They have to believe that (barring an issue of very high priority and emergency) they won’t be interrupted by managers or co-workers. They need to have faith that their tools won’t break and that their environment hasn’t changed in a catastrophic way due to a mistake or an ill-advised change by programmers responsible for another component. If they’re “on alert”, they won’t get into flow and won’t be very productive. Since most office cultures grew up in the early 20th century when the going philosophy was that workers had to be intimidated or they would slack off, the result is not much flow and low productivity.

What tasks encourage or break flow is a complex question. Debugging can break flow, or it can be flowful. For me, I enjoy it (and can maintain flow) when the debugging is teaching me something new about a system I care about (especially if it’s my own). It’s rare, though, that an engineer can achieve flow while maintaining badly written code, which is a major reason why they tend to prefer new development over maintenance. Trying to understand bad software (and most in-house corporate software is terrible) creates a lot of “pinging” for the unfortunate person who has to absorb several disparate contexts in order to make sense of what’s going on. Reading good code is like reading a well-written academic paper: an opportunity to see how a problem was solved, with some obvious effort put into presentation and aesthetics of the solution. It’s actually quite enjoyable. On the other hand, reading bad code is like reading 100 paragraphs, all clipped from different sources. There’s no coherency or aesthetics, and the flow-inducing “click” (or “aha” experience) when a person makes a connection between two concepts almost never occurs. The problem with reading code is that, although good code is educational, there’s very little learned in reading bad code aside from the parochial idiosyncracies of a badly-designed system, and there’s a hell of a lot of bad code out there.

Perhaps surprisingly, whether a programmer can achieve “flow”, which will influence her minute-by-minute happiness, has almost nothing to do with the macroscopic interestingness of the project or company’s mission. Programmers, left alone, can achieve flow and be happy writing the sorts of enterprise business apps that they’re “supposed” to hate. And if their environment is so broken that flow is impossible, the most interesting, challenging, or “sexy” work won’t change that. Once, I saw someone leave an otherwise ideal machine learning quant job because of “boredom”, and I’m pretty sure his boredom had nothing to do with the quality of the work (which was enviable) but with the extremely noisy environment of a trading desk.

This also explains why “snobby” elite programmers tend to hate IDEs, the Windows operating system, and anything that forces them to use the mouse when key-combinations would suffice. Using the mouse and fiddling with windows can break flow. Keyboarding doesn’t. Of course, there are times when the mouse and GUI are superior. Web surfing is one example, and writing blog posts (WordPress instead of emacs) is another. Programming, on the other hand, is done using the keyboard, not drag-and-drop menus. The latter are a major distraction.

2. O(hours): Feedback

Flow is the essence here, but what keeps the “flow” going? The environmental needs are discussed above, but some sorts of work are more conducive to flow than others. People need a quick feedback cycle. One of the reasons that “data science” and machine learning projects are so highly desired is that there’s a lot of feedback, in comparison to enterprise projects which are developed in one world over months (with no real-world feedback) and released in another. It’s objective, and it comes on a daily basis. You can run your algorithms against real data and watch your search strategies unfold in front of you while your residual sum of squares (error) decreases.

Feedback needs to be objective or positive in order to keep people enthusiastic about their work. Positive feedback is always pleasant, so long as it’s meaningful. Objective, negative feedback can be useful as well. For example, debugging can be fun, because it points out one’s own mistakes and enables a person to improve the program. The same holds for problems that turn out to be more difficult than originally expected: it’s painful, but something is learned. What never works well is subjective, negative feedback (such as bad performance reviews, or aggressive micromanagement that shows a lack of trust). That pisses people off.

I think it should go without saying that this style of “feedback” can’t be explicitly provided on an hourly basis, because it’s unreasonable to expect managers to do that much work (or an employee do put up with such a high frequency of managerial interruption). So, the feedback has to come organically from the work itself. This means there need to be genuine challenges and achievements involved. So most of this feedback is “passive”, by which I mean there is nothing the company or manager does to inject the feedback into the process. The engineer’s experience completing the work provides the feedback itself.

One source of frustration and negative feedback that I consider subjective (and therefore place in that “negative, subjective feedback that pisses people off” category) is the jarring experience of working with badly-designed software. Good software is easy to use and makes the user feel more intelligent. Bad software is hard to use, often impossible to read at the source level, and makes the user or reader feel absolutely stupid. When you have this experience, it’s hard to tell if you are rejecting the ugly code (because it is distasteful) or if it is rejecting you (because you’re not smart enough to understand it). Well, I would say that it doesn’t matter. If the code “rejects” competent developers, it’s shitty code. Fix it.

The “feedback rate” is at the heart of many language debates. High-productivity languages like Python, Scala, and Clojure, allow programmers to implement significant functionality in mere hours. On my best projects, I’ve written 500 lines of good code in a day (by the corporate standard, that’s about two months of an engineer’s time). That provides a lot of feedback very quickly and establishes a virtuous cycle: feedback leads to engagement, which leads to flow, which leads to productivity, which leads to more feedback. With lower-level languages like C and Java– which are sometimes the absolute right tools to use for one’s problem, especially when tight control of performance is needed– macroscopic progress is usually a lot slower. This isn’t an issue, if the performance metric the programmer cares about lives at a lower level (e.g. speed of execution, limited memory use) and the tools available to her are giving good indications of her success. Then there is enough feedback. There’s nothing innate that makes Clojure more “flow-ful” than C; it’s just more rewarding to use Clojure if one is focused on macroscopic development, while C is more rewarding (in fact, probably the only language that’s appropriate) when one is focused on a certain class of performance concerns that require attention to low-level details. The problem is that when people use inappropriate tools (e.g. C++ for complex, but not latency-sensitive, web applications) they are unable to get useful feedback, in a timely manner, about the performance of their solutions.

Feedback is at the heart of the “gameification” obsession that has grown up of late, but in my opinion, it should be absolutely unnecessary. “Gameifcation” feels, to me, like an after-the-fact patch if not an apology, when fundamental changes are necessary. The problem, in the workplace, is that these “game” mechanisms often evolve into high-stakes performance measurements. Then there is too much anxiety for the “gameified” workplace to be fun.

In Java culture, the feedback issue is a severe problem, because development is often slow and the tools and culture tend to sterilize the development process by eliminating that “cosmic horror” (which elite programmers prefer) known as the command line. While IDEs do a great job of reducing flow-breakage that occurs for those unfortunate enough to be maintaining others’ code, they also create a world in which the engineers are alienated from computation and problem-solving. They don’t compile, build, or run code; they tweak pieces of giant systems that run far away in production and are supported by whoever drew the short straw and became “the 3:00 am guy”.

IDEs have some major benefits but some severe drawbacks. They’re good to the extent that they allow people to read code without breaking flow; they’re bad to the extent that they tend to require use patterns that break flow. The best solution, in my opinion, to the IDE problem is to have a read-only IDE served on the web. Engineers write code using a real editor, work at the command line so they are actually using a computer instead of an app, and do almost all of their work in a keyboard-driven environment. However, when they need to navigate others’ code in volume, the surfing (and possibly debugging) capabilities offered by IDEs should be available to them.

3. O(days): Progress

Flow and feedback are nice, but in the long term, programmers need to feel like they’re accomplishing something, or they’ll get bored. The feedback should show continual improvement and mastery. The day scale is the level at which programmers want to see genuine improvements. The same task shouldn’t be repeated more than a couple times: if it’s dull, automate it away. If the work environment is so constrained and slow that a programmer can’t log, on average, one meaningful accomplishment (feature added, bug fixed) per day, something is seriously wrong.  (Of course, most corporate programmers would be thrilled to fix one bug per week.)

The day-by-day level and the need for a sense of progress is where managers and engineers start to understand each other. They both want to see progress on a daily basis. So there’s a meeting point there. Unfortunately, managers have a tendency to pursue this in a counterproductive way, often inadvertently creating a Heisenberg problem (observation corrupts the observed) in their insistence on visibility into progress. I think that the increasing prevalence of Jira, for example, is dangerous, because increasing managerial oversight at a fine-grained level creates anxiety and makes flow impossible. I also think that most “agile” practices do more harm than good, and that much of the “scrum” movement is flat-out stupid. I don’t think it’s good for managers to expect detailed progress reports (a daily standup focused on blockers is probably ok) on a daily basis– that’s too much overhead and flow breakage– but this is the cycle at which engineers tend to audit themselves, and they won’t be happy in an environment where they end the day not feeling that they worked a day.

4. O(weeks): Support.

Progress is good, but as programmers, we tend toward a trait that the rest of the world sees only in the moody and blue: “depressive realism”. It’s as strong a tendency in the mentally healthy among us as the larger-than-baseline percentage who have mental health issues. For us, it’s not depressive. Managers are told every day how awesome they are by their subordinates, regardless of the fact that more than half of the managers in the world are useless. We, on the other hand, have subordinates (computers) that frequently tell us that we fucked up by giving them nonsensical instructions. “Fix this shit because I can’t compile it.” We tend to have an uncanny (by business standards) sense of our own limitations. We also know (on the topic of progress) that we’ll have good days and bad days. We’ll have weeks where we don’t accomplish anything measurable because (a) we were “blocked”, needing someone else to complete work before we could continue, (b) we had to deal with horrendous legacy code or maintenance work– massive productivity destroyers– or (c) the problem we’re trying to solve is extremely hard, or even impossible, but it took us a long time to fairly evaluate the problem and reach that conclusion.

Programmers want an environment that removes work-stopping issues, or “blockers”, and that gives them the benefit of the doubt. Engineers want the counterproductive among them to be mentored or terminated– the really bad ones just have to be let go– but they won’t show any loyalty to a manager if they perceive that he’d give them grief over a slow month. This is why so-called “performance improvement plans” (PIPs)– a bad idea in any case– are disastrous failures with engineers. Even the language is offensive, because it suggests with certainty that an observed productivity problem (and most corporate engineers have productivity problems because most corporate software environments are utterly broken and hostile to productivity) is a performance problem, and not something else. An engineer will not give one mote of loyalty to a manager that doesn’t give her the benefit of the doubt.

I choose “weeks” as the timeframe order of magnitude for this need because that’s the approximate frequency with which an engineer can be expected to encounter blockers, and removal of these is one thing that engineers often need from their managers: resolution of work-stopping issues that may require additional resources or (in rare cases) managerial intervention. However, that frequency can vary dramatically.

5. O(months): Career Development.

This is one that gets a bit sensitive, and it becomes crucial on the order of months, which is much sooner than most employers would like to see their subordinates insisting on career advancement, but, as programmers, we know we’re worth an order of magnitude more than we’re paid, and we expect to be compensated by our employers investing in our long-term career interests. This is probably the most important of the 6 items listed here.

Programmers face a job market that’s unusually meritocratic when changing jobs. Within companies, the promotion process is just as political and bizarre as it is for any other profession, but when looking for a new job, programmers are evaluated not on their past job titles and corporate associations, but on what they actually know. This is quite a good thing overall, because it means we can get promotions and raises (often having to change corporate allegiance in order to do so, but that’s a minor cost) just by learning things, but it also makes for an environment that doesn’t allow for intellectual stagnation. Yet most of the work that software engineers have to do is not very educational and, if done for too long, that sort of work leads in the wrong direction.

When programmers say about their jobs, “I’m not learning”, what they often mean is, “The work I am getting hurts my career.” Most employees in most jobs are trained to start asking for career advancement at 18 months, and to speak softly over the first 36. Most people can afford one to three years of dues paying. Programmers can’t. Programmers, if they see a project that can help their career and that is useful to the firm, expect the right to work on it right away. That rubs a lot of managers the wrong way, but it shouldn’t, because it’s a natural reaction to a career environment that requires actual skill and knowledge. In most companies, there really isn’t a required competence for leadership positions, so seniority is the deciding factor. Engineering couldn’t be more different, and the lifetime cost of two years’ dues-paying can be several hundred thousand dollars.

In software, good projects tend to beget good projects, and bad projects beget more crap work. People are quickly typecast to a level of competence based on what they’ve done, and they have a hard time upgrading, even if their level of ability is above what they’ve been assigned. People who do well on grunt work get more of it, people who do poorly get flushed out, and those who manage their performance precisely to the median can get ahead, but only if managers don’t figure out what they’re doing. As engineers, we understand the career dynamic very well, and quickly become resentful of management that isn’t taking this to heart. We’ll do an unpleasant project now and then– we understand that grungy jobs need to be done sometimes– but we expect to be compensated (promotion, visible recognition, better projects) for doing it. Most managers think they can get an undesirable project done just by threatening to fire someone if the work isn’t done, and that results in adverse selection. Good engineers leave, while bad engineers stay, suffer, and do it– but poorly.

Career-wise, the audit frequency for the best engineers is about 2 months. In most careers, people progress by putting in time, being seen, and gradually winning others’ trust, and actual skill growth is tertiary. That’s not true for us, or at least, not in the same way. We can’t afford to spend years paying dues while not learning anything. That will put us one or two full technology stacks behind the curve with respect to the outside world.

There’s a tension employees face between internal (within a company) and external (within their industry) career optimization. Paying dues is an internal optimization– it makes the people near you like you more, and therefore more likely to offer favors in the future– but confers almost no external-oriented benefit. It was worthwhile in the era of the paternalistic corporation, lifelong employment, and a huge stigma attached to changing jobs (much less getting fired) more than two or three times in one career. It makes much less sense now, so most people focus on the external game. Engineers who focus on the external objective are said to be “optimizing for learning” (or, sometimes, “stealing an education” from the boss). There are several superiorities to a focus on the external career game. First, external career advancement is not zero-sum–while jockeying internally for scarce leadership positions is– and what we do is innately cooperative. It works better with the type of people we are. Second, our average job tenure is about 2 to 3 years. Third, people who suffer and pay dues are usually passed over anyway in favor of more skilled candidates from outside. Our industry has figured out that it needs skilled people more than it needs reliable dues-payers (and it’s probably right). So this explains, in my view, why software engineers are so aggressive and insistent when it comes to the tendency to optimize for learning.

There is a solution for this, and although it seems radical, I’m convinced that it’s the only thing that actually works: open allocation. If programmers are allowed to choose the projects best suited to their skills and aspirations, the deep conflict of interest that otherwise exists among their work, their careers, and their educational aspirations will disappear.

6. O(years): Macroscopic goals. On the timescale of years, macroscopic goals become important. Money and networking opportunities are major concerns here. So are artistic and business visions. Some engineers want to create the world’s best video game, solve hard mathematical problems, or improve the technological ecosystem. Others want to retire early or build a network that will set them up for life.

Many startups focus on “change the world” macroscopic pitches about how their product will connect people, “disrupt” a hated industry or democratize a utility, or achieve some world-changing ambition. This makes great marketing copy for recruiters, but it doesn’t motivate people on the day-to-day basis. On the year-by-year basis, none of that marketing matters, because people will actually know the character of the organization after that much time. That said, the actual macroscopic character, and the meaning of the work, of a business matters a great deal. Over years and decades, it determines whether people will stick around once they develop the credibility, connections, and resources that would give them the ability to move on to something else more lucrative, more interesting, or of higher status.

How to win

It’s conventional wisdom in software that hiring the best engineers is an arbitrage, because they’re 10 times as effective but only twice as costly. This is only true if they’re motivated, and also if they’re put to work that unlocks their talent. If you assign a great engineer to mediocre work, you’re going to lose money. Software companies put an enormous amount of effort into “collecting” talent, but do a shoddy job of using or keeping it. Often, this is justified in the context of a “tough culture”; turnover is reflective of failing employees, not a bad culture. In the long term, this is ruinous. The payoff in retaining top talent is often exponential as a function of the time and effort put into attracting, retaining, and improving it.

Now that I’ve discussed what engineers need from their work environments in order to remain motivated, the next question is what a company should do. There isn’t a one-size-fits-all managerial solution to this. In most cases, the general best move is to reduce managerial control and to empower engineers: to set up an open-allocation work environment in which technical choices and project direction are set by engineers, and to direct from leadership rather than mere authority. This may seem “radical” in contrast to the typical corporate environment, but it’s the only thing that works.

27 inspiring top notch programming quotes

19:25 Posted by Shichibukai Encraptor , No comments

It's been a while that I got a chance to write another post here. Currently, I'm really busy with school/work (just got a "job" at InfoSupport - love it!) which takes a lot of my time.

When my classmates and myself wrote the Getting Groovy in an SOA Study, we added some cool programming quotes that was a real addition to the report. When searching for those inspiring programming quotes, there were loads of others that are really funny (and true) where I (and probably many more) can relate to.

Here are two of my favourite programming quotes:

Java is to JavaScript what Car is to Carpet. ” - Chris Heilmann

It's hard enough to find an error in your code when you're looking for it; it's even harder when you've assumed your code is error-free. ” - Steve McConnell

Check out these other 25 to see if you can relate!

27 inspiring top notch programming quotes

These quotations are in no order. If you're looking for design-related quotes, check out Quotes on Design.

If debugging is the process of removing software bugs, then programming must be the process of putting them in. ” - Edsger Dijkstra

Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
” - Michael A. Jackson

The best method for accelerating a computer is the one that boosts it by 9.8 m/s2. ” - Anonymous

Walking on water and developing software from a specification are easy if both are frozen. ” - Edward V Berard

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. ” - Brian Kernighan

It's not at all important to get it right the first time. It's vitally important to get it right the last time. ” - Andrew Hunt and David Thomas

First, solve the problem. Then, write the code. ” - John Johnson

Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. ” - Stan Kelly-Bootle

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. ” - Rick Osborne

Any fool can write code that a computer can understand. Good programmers write code that humans can understand. ” - Martin Fowler

Software sucks because users demand it to. ” - Nathan Myhrvold

Linux is only free if your time has no value. ” - Jamie Zawinski

Beware of bugs in the above code; I have only proved it correct, not tried it. ” - Donald Knuth

There is not now, nor has there ever been, nor will there ever be, any programming language in which it is the least bit difficult to write bad code. ” - Flon's Law

The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time. ” - Tom Cargill

Good code is its own best documentation. As you're about to add a comment, ask yourself, "How can I improve the code so that this comment isn't needed?" Improve the code and then document it to make it even clearer. ” - Steve McConnell

Programs must be written for people to read, and only incidentally for machines to execute. ” - Abelson / Sussman

Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves. ” - Alan Kay

Programming can be fun, so can cryptography; however they should not be combined. ” - Kreitzberg and Shneiderman

Copy and paste is a design error. ” - David Parnas

Before software can be reusable it first has to be usable. ” - Ralph Johnson

Without requirements or design, programming is the art of adding bugs to an empty text file. ” - Louis Srygley

When someone says, "I want a programming language in which I need only say what I want done," give him a lollipop. ” - Alan Perlis

Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth

Any code of your own that you haven't looked at for six or more months might as well have been written by someone else. ” - Eagleson's law

Do you have one (or more) inspirational programming quotes? Which one did you love the most? Feel free to share them!

What's your motivation for programming?

19:24 Posted by Shichibukai Encraptor , No comments

 

Studies since the 1970s that show that Intrinsic motivation (from within) rather than Extrinsic motivation (external factors like money) is the main motivation for people doing good work. In Drive: The Surprising Truth About What Motivates Us, Daniel Pink talks about the various research and studies and even gave some suggestions on how to improve your workplace, if you are a lead or manager go read the book. If you don't have time to read the book, RSA has a nice video (about 10 mins) that sums up book quite nicely.

So what is your motivation for doing your job as a programmer? What are some of the motivations that you have for continuing to do programming as work? Here are some that I came up with, feel free to add more in the comments section.
1. Joy of knowing that there is always something new to learn
I am always amaze that there are still so many things that I can learn in this field, and that's a motivation for me, because I will always have some new framework, language, technology to play with.
2. Joy of finding a solution to a problem.
Solving a problem be it in programming, performance or a process issue is always satisfying
3. Joy of seeing a user liking your solution.
For most of us, we program for real users and its a good feeling when a user tells you that you did good work.
4. Joy of doing work with people that you like or like minded.
I am glad to be able to work with a bunch of guys who I like and feel comfortable with, the pantry talks and the lunches help make for a more interesting day.

30-Minute Exercise to Become a Better Programmer

18:32 Posted by Shichibukai Encraptor , , No comments

I believe that motivation is really important. That’s why from time to time I read books about time management (as they motivate me to be focused and continue evolve my TM-system) and books about software craftsmanship. The other day I finished one of this kind of books - “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman”. This book motivated me to think carefully what I want to invest my time in.

Also, it coincided with my 25th birthday and, of course, the new year is coming in a few days. As you can imagine, all this stuff pushed me to reflect on my skills and in the end I came up with a learning plan for the next year.

The reason I’m writing about it here is as it was one of the things authors of the book advise. Personally, I think it’s an excellent idea. Sharing it with everyone gives me a huge boost of motivation to finish everything I set out.

Skills

One of the things the authors advise I found really useful is making a list of all your skills, group and evaluate them. Having this kind of list is a great help for choosing what needs to be learnt next, what areas of the craft I lack experience in. Also, being a fan of mindmap I decided to make a mindmap instead of a list.

codeLanguage

I split all my skills into four groups. Two of them are very pragmatic and contain technologies and tools I use at work. The rest are fundamental knowledge about programming – computer science and all kinds of design patterns. It’s worth to mention that I didn’t conduct any serious research; the map is not full list of technologies or skills I obtained over the years. The point of the exercise is not creating a comprehensive list of everything you know but rather giving you’re a high-level overview of your professional knowledge. I marked all skills from 1 to 5:

  • 1 - I have understanding of a subject but I haven’t had a lot of practical experience.
  • 5 - Fluent. Rarely check API documentation. Contributed to open source projects, wrote a few posts about the topic.

When I first looked at my map I realized how badly I suck in computer science. The second thing that showed up is my lack of unix skills. Some tools that I use every day (e.g. zsh) are still puzzling. It needs to be fixed.

In addition, I don’t feel myself as comfortable working with ruby as I feel when I write java or groovy. I definitely need to spend some time making it 5.

Reading List

Books are the easiest and, in my view, the most efficient way to gain information about any subject. You can watch screencasts and read blog posts but your knowledge will remain shallow until you read a good book about the subject. One piece of advice I also found useful is to alternate pragmatic and fundamental books. Though I’ve had a reading list for a few years already I didn’t categorize books as fundamental or pragmatic. When I think about it right now I find it really useful. Reading classical books will pay off in a long run. But you shouldn’t stop learning new cool things that can be useful tomorrow, that’s where pragmatic books come to play.

Looking at my mindmap I decided that improving my Ruby skills is probably the most important thing right now. I picked a very practical book that can help a little bit - “Rails AntiPatterns”. To work on CS knowledge I chose a wonderful book I wanted to read for some time “Types and Programming Languages”.

You may say that making that mindmap didn’t pay off as I could make similar decisions without it. That’s true, but what I like is that I made these decisions consciously.

Try it!

I’d like to recommend this method to everyone Just make a list or a mindmap of all your skills. Don’t spend days recalling all technologies your worked with. This is not the point of this exercise. The important part is to give you a high level picture of what you know and what you’d like to become better at.

Share!

If you’d like to share some your thoughts feel free to write a comment.

Hang Tuah Orang Melayu Bukan Orang Cina

00:16 Posted by Shichibukai Encraptor , No comments

hangtuah0130
Sebut sahaja mengenai Hang Tuah, ramai puak Chauvinist dan Kiasu akan mula berdendang bahawa pahlawan Melayu ini merupakan bangsa cina. Mereka mempunyai hujah mereka untuk mengatakan bahawa Hang Tuah adalah daripada bangsa cina. Justeru artikel ini akan berbentuk Q&A, di mana setiap soalan akan direka berdasarkan hujah-hujah mereka


Soalan: Hang bukan nama biasa yang digunakan oleh orang Melayu. Hanya Hang Tuah lima bersaudara dalam sejarah yang bernama Hang. Nama bangsa Melayu tidak mempunyai nama keluarga. Kalau nama ayah akan dibinkan. Jadi tak logic kalau Hang Tuah, dan terdapat orang lain yang turut berkongsi nama Hang.
Jadi, nama Hang yang sebenarnya ialah Hang Too Ah. Nama Hnag Jebat ialah Hang Jew Fat. Nama Hang Lekir ialah Hang Liew Kier. Nama Lekiu ialah Hang Lee Kiew. Jadi, Hang itu ialah nama keluarga cina.

Jawapan HE: Hei, saya tahu anda yang cuna menulis sejarah Melayu ni tentu tak pernah bergaul dengan orang Melayu? Pandai-pandai jer buat kesimpulan macam tu. Pernah berkawan dengan orang Melayu tak? Kalau tak, meh sini saya ajar anda apa itu budaya Melayu.
Di sesetengah negeri terdapat orang Melayu yang berkongsi nama depan yang sama. Di Kelantan, nama seperti Nik dan Wan selalu digunakan. Nama seperti Daeng pula terkenal di kalangan masyarakat Melayu Bugis. Nama seperti Radeng ialah nama yang selalu digunakan oleh masyarakat jawa. Meor pula nama yang terkenal di kalangan masyarakat Melayu Perak. Masyakat Melayu-Arab pula terkenal dengan nama Syed dan Syarifah di hadapan pangkal nama mereka.
Dan sekali lagi saya tekankan, jangan bercakap mengenai soal Melayu kalau anda tidak pernah bergaul dengan kami. Terdapat banyak lagi Melayu di zaman Melaka yang turut menggunakan nama pangkal Hang. Hang Ali, Hang Iskandar, Hang Nadim, Hang Hasan, dan Hang Hussin? Untuk pengetahuan saudar ajuga, nama Hang ini juga merupakan gelaran yang diberikan oleh Istana Melaka pada waktu itu, seperti mana istilah Dato’ pada hari ini.


Soalan: Tiada rekod mengenai kewujudan Hang Tuah dalam sejarah Melayu sebelum kedatangan Hang Li Po. Jadi jelaslah bahawa Hang Tuah itu di bawa oleh Hang Li Po.

Jawapan HE: Benarkah sedemikian? Pernah baca Sulalatus Salihin dengan Hikayat Hang Tuah? Pernah dengar kisah Hang Tuah menyelamatkan Bendahara daripada orang mengamuk? Pernah dengar kisah Hang Tuah dan para sahabatnya membunuh lanun? Buka balik buku sejarah.
Kalau dirujuk sumber sejarah utama, iaitu Hikayat Hang Tuah yang banyak menceritakan mengenai Hang Tuah, Kisah bagaimana Hang Tuah dan para sahabatnya. Ketika kanak-kanak dahulu, Hang Tuah dan para sahabat telah ke laut menggunakan perahu lading. Berlaku adegan kejar mengejar antara Hang Tuah dan lanun yang mengejar perahu Hang Tuah. Sampai sahaja di darat, maka Hang Tuah telah bertikam dengan sang lanun dan pertempuran itu telah membuatkan Hang Tuah menang.
Antara bukti lain ialah kisah Hang Tuah menewaskan orang mengamuk masih terkemas dalam rekod sejarah. Kisah bagaimana Hang Tuah menyelamatkan Bendahara Tun Perak dan bagaimana Hang Tuah menghadap Sultan Melaka. Kisah Hang Tuah menewaskan lanun-lanun ketika mengembara pada usia muda dan kecil selepas mendapat perkenan juga merupakan bukti bahawa Hang Tuah sudah wujud lama sebelum kedatangan Hang Li Po.


Soalan: Tapi… ada orang cakap yang nama Tuah, Jebat, Kasturi, Lekiu, dan Lekir itu dicinakan. Tiada makna dalam bahasa Melayu. Betul ke?

Jawapan HE: Nama tuah bermaksud bernasib baik. Masakan ada yang bodoh percaya bahawa nama Tuah itu dimelayukan daripada Too Ah? Nama Jebat dalam bahasa Melayu bermaksud bau badan. Pernah dengar tak ungkapan “baunya seperti jebat musang”. Masakan ada yang mengatakan bahawa nama Jebat itu daripada Jee Fat? Kasturi pula ialah nama haruman. Semua orang tahu tu. Lekir pula datang daripada nama ubi. Lekiu pula datang daripada bahasa Melayu lama yang bermaksud lekit.


Soalan: Tapi macam mana Puteri Hang Li Po boleh ada nama Hang?

Jawapan HE: Senang sahaja jawapan saya. Hang ialah gelaran yang diberikan oleh Sultan Melaka. Pada asalnya nama Hang Li Po ialah nama puteri itu. Hang ialah gelaran yang diberikan oleh Sultan Mansur Shah.


Soalan: Ya, Hang Tuah bukan cina. Tapi, apa bukti Hang Tuah itu wujud?
Jawapan HE: Nama Hang Tuah disebut dalam naskah yang menjadi sumber utama Sejarah Melayu iaitu Sulalatus Salatin. Sebanyak 7 Bab diletakkan di dalam kitab sejarah Melayu ini. Kalau Hang Tuah ialah lagenda, kenapa sampai 7 Bab diperuntukkan untuk menceritakan mengenai Hang Tuah?
Juga Hikayat Hang Tuah turut menjadi sumber utama. Bagaimana kalian menolak Hikayat Hang Tuah walhal UNESCO sendiri mengiktiraf naskah sejarah ini sampai menjadikan salah satu daripada Warisan Dunia pada hari ini.

Jika anda menolak kewujudan Hang Tuah, sama juga seperti anda menolak kewujudan Melaka kerana sumber yang menceritakan mengenai Hang Tuah ialah Sulalaltus Salatin. Kalaulah watak Hang Tuah itu tidak wujud, masakan teks sejarah Melayu utama menyebut nama Hang Tuah lebih 170 kali.

Seterusnya, pernah dengar kisah Keris Taming Sari? Keris ini ialah keris yang dirampas oleh Hang Tuah ketika bertikam dengan pendekar daripada Majapahit. Katakanlah Hang Tuah tak wujud, masakan keris ini boleh berada dan menjadi salah satu daripada warisan Keslutanan Perak? Oh ya, Kesultanan Perak ialah salah satu daripada waris Kesultanan Melaka dulu.
Ada satu maklumat yang saya nak sebarkan, Sultan Perak akan mempersembahkan dan mempamerkan keris ini pada umum di Kuala Kangsar di galeri pada bulan ini. And aboleh tengok bukti utama bahawa Hang Tuah itu wujud.
-HE-