Saturday, April 9, 2011

insist on better (less painful) design? Don't !

(another blog. You need not read...)

It's possible to be less passionate about technical wisdom, and wise decisions.

As you pointed out, software dev is much more flexible than most industries like /putting a nut on a screw/. There are few large industries where every day presents challenging choice to each worker. (Counseling, radio hosts come to mind.)

With the multitude of choices come the criteria of wisdom. Clever choices, regrettable choices, elegant choices, wise choices. After working for 10+ years in software, we all have truckloads of bitter experiences, so to avoid the pains, many of us slowly become purist, meticulous, opinionated, even emotional against lousy choices imposed on us.

Such choices cover not only implementation, coding style/convention, tooling, build/deploy, file layout, but also project teamwork. I'd say Wall St dev teams are commanding not democratic.

Our industry is littered with jargon related to these large number of small choices and wisdom -- "DRY - Don't Repeat Yourself", code-smells, TDD, Agile, Extensible, Reusable, Readability, Maintenance cost/TCO, defensive (and non-defensive) design, Future-proof design, code cloning...

For example, a TDD/BDD purist would see every developer colleague of mine as amateurish, non-professional, tactical... I have seen some architects insisting on some design principles but it made the code base harder to understand, bloated and ... inevitably class proliferation. EJB was a great best-practice rejected by the community/market and replaced by simpler design principles. I was told all 23 GoF design patterns require additional classes (and likely additional code complexity, though the advocates may argue complexity actually reduces at some mysterious higher level.) Now I feel most best-practice principles have non-trivial drawbacks or costs i.e. they can make someone's life harder.

Some developer colleagues (like my Taiwanese colleague) are less stubborn, less lazy, less /purist/, more accommodating. Perhaps they see the code as nothing but a way to get a pay check. Perhaps they don't feel threatened by the risk of losing job. They don't struggle. They do understand the possibility of losing job, so they do things quick and dirty, try to please the mgr and please others who they depend on, and avoid confrontation. Way to go..

No comments:

Total Pageviews

my favorite topics (labels)

_fuxi (302) _misLabel (13) _orig? (3) _rm (2) _vague (2) clarified (58) cpp (39) cpp_const (22) cpp_real (76) cpp/java/c# (101) cppBig4 (54) cppSmartPtr (35) cppSTL (33) cppSTL_itr (27) cppSTL_real (26) cppTemplate (28) creditMkt (14) db (65) db_sybase (43) deepUnder (31) dotnet (20) ECN (27) econ/bank` (36) fin/sys_misc (43) finGreek (34) finReal (45) finRisk (30) finTechDesign (46) finTechMisc (32) finVol (66) FixedIncom (28) fMath (7) fMathOption (33) fMathStoch (67) forex (39) gr8IV_Q (46) GTD_skill (15) GUI_event (30) inMemDB (42) intuit_math (41) intuitFinance (57) javaMisc (68) javaServerSide (13) lambda/delegate (22) marketData (28) math (10) mathStat (55) memIssue (8) memMgmt (66) metaProgram` (6) OO_Design (84) original_content (749) polymorphic/vptr (40) productive (21) ptr/ref (48) py (28) reflect (8) script`/unix (82) socket/stream (39) subquery/join (30) subvert (13) swing/wpf (9) sysProgram` (16) thread (164) thread_CAS (15) thread_cpp (28) Thread* (22) timeSaver (80) transactional (23) tune (24) tuneDB (40) tuneLatency (30) z_ajax (9) z_algoDataStruct (41) z_arch (26) z_arch_job (27) z_automateTest (17) z_autoTrad` (19) z_bestPractice (39) z_bold (83) z_bondMath (35) z_book (18) z_boost (19) z_byRef^Val (32) z_c#GUI (43) z_c#misc (80) z_cast/convert (28) z_container (67) z_cStr/arr (39) z_Favorite* (8) z_FIX (15) z_forex (48) z_fwd_Deal (18) z_gz=job (33) z_gzBig20 (13) z_gzMgr (13) z_gzPain (20) z_gzThreat (19) z_hib (19) z_IDE (52) z_ikm (5) z_IR_misc (36) z_IRS (26) z_javaWeb (28) z_jdbc (10) z_jobFinTech (46) z_jobHunt (20) z_jobRealXp (10) z_jobStrength (15) z_jobUS^asia (27) z_letter (42) z_linq (10) z_memberHid` (11) z_MOM (54) z_nestedClass (5) z_oq (24) z_PCP (12) z_pearl (1) z_php (20) z_prodSupport (7) z_py (31) z_quant (14) z_regex (8) z_rv (38) z_skillist (48) z_slic`Problem (6) z_SOA (14) z_spring (25) z_src_code (8) z_swingMisc (50) z_swingTable (26) z_unpublish (2) z_VBA/Excel (8) z_windoz (17) z_wpfCommand (9)

About Me

New York (Time Square), NY, United States
http://www.linkedin.com/in/tanbin