way of Sun Microsystems • WebLogic, Coherence PM • Started programming in 1982 by accident – 1990 seriously – 1996 – today Java • Contributions to open source – Implementation of boardgame Carcassonne (incomplete) – JVM port of the Nintendo DS • Stopped because of memory restrictions – Jabber/XMPP framework • On going
more about computers than astronomy about telescope” - Dijkstra • Programming is about problem solve – Focus on the problem – Programs are expressions of your solution • “Think outside the box” - What if there is no box? • Define the boundaries of the problem – How do you eat an elephant? On bite at a time • World peace – don't try to solve everything – Bounce problem off people • Don't text – 143 characters cannot describe your problem • Don't email – if you can • Talk face to face – never know where discussion may lead
you have is a hammer, you will see every problem as a nail” - Abraham Maslow • Programming concepts and data structure – Learn programming not programming languages • Build a reservoir of design patterns – Solutions to design problems • Use a variety of tools – IDE, editors, languages, build, test, etc. – Tendency to stick with what we are comfortable with – Don't be dogmatic • The problem should dictate the tool you use – Use tool creatively • Develop your own tool
reliability.” - Dijkstra • Simplicity does not mean “simplistic” – Tetris is simple, tic-tac-toe is simplistic – “Simple things should be simple, complex things should be possible” - Alan Kay • Easy to understand, easy to explain, easy to document, easy to maintain – “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies” - C.A.R Hoare
write code that a computer can understand. Good programmers write code that humans can understand” - Martin Fowler • Code for others to read – Good chance that you will be reading it again • Comment your code – Especially if you are doing clever things • Give meaningful method/class/etc names – Even if it is long • Only incorporate code you understand • Aesthetics and layout of your code – Nobodyisgoingtobeabletoreaditevenifitisbrilliant – Auto format in most IDE
solved becomes rule which served afterwards to solve other problem” - Rene Descartes • Bugs come and go, debugging skill accumulates – Debugging process is more important than the bug • Observe behaviour, Collect information , Isolate code – “When debugging, novices insert corrective code; experts remove defective code” - Richard Pattis • Good debugger and code reading tools – My favourite vim + ctags/cscope • Lay the foundation for debugging – Logging, assert, etc.
further it is by standing on the shoulders of giants” - Isacc Newton • Look for available solutions or algorithms • Adopt a framework instead of developing your own • Talk to a subject matter expert • Search appropriate mailing list and forums – Make it easy for others to help you • Phrase your question so that it can be answered easily – Be persistent – Be creative – take similar solutions and adapt it – Stackover flow • BragBlog about your predicament
of the questions than all the answers” - James Thurber • Anticipate what you will need soon – Know where to get help, bookmark, Diigo • Off-the-job learning – no pressure to find a “solution” – Compare and contrast solutions/algorithms/API • Maximize your learning – Type out the code rather than CTRL-C, CTRL-V • Keep your coding/problem solving skills sharp – Participate in stackover flow • Learn from your past projects – good and bad – “Happy families are all alike; every unhappy family is unhappy in its own way” - Leo Tolstoy