Taster

Taster

The blog is about life and thoughts of a Solution Architect who come across interesting challenges and some stupid things around his struggle for living. He may also has discussed some non-sense. That has been his habit.

Sunday, July 14, 2013

Few Tips to Climb


“The limits of my language are the limits of my mind. All I know is what I have words for.
Ludwig Josef Johann Wittgenstein

I believe big part of the absolute computing knowledge is your feelability and conceptual understandability on industrial jargon. Like in any other knowledge area, rich understand and memory of some technical words indeed displays one’s true playability in the field. However, how you know all these words is not how you have heard these words. I always believe a person can explain certain words, and paradigms to its due weight and strength when and only when he start to feel the subject – that is when he has gained enough hands on and brains on experience at conceptual level. The rate or speed of gaining these skills may different from individual to individual. Those who learn fast will move faster. Those skills obviously include lot of reading and some hands on. Naturally those guys who are on the job and in the field always are subjected to better hands on – but they may reluctant to read, explore the knowledge – reaffirm the things with conceptual principles. Nowadays – especially in the computing, medical and , engineering fields – people are much loyal towards vendor technologies and vendor terminologies. This dogma completely but sneakily bury the theoretical principal knowledge, and unknowingly produce a loyal set of converged customer’s to a particular technology provider (vendor). This happens so unknown to the Engineers, Lectures, policymakers – danger is that, such vendor orientations hinders new knowledge generation, creativity and more dangerously industry leave no free mind to the Engineers of old Versions of the same technology. 
I always see a huge advantage over learning principles and remembering them thoroughly when you go up in the career ladder. If still you want to be a code monkey – passionate for hands on code, my approach has a good apply than trying to remember various vendor technologies in line. I always suggest students to dig in to the principles – and start to see the vendor technologies through these principles. This makes things easy to remember. Moreover you will be a Creative solution Designer, worthy problem solver and a celebrity philosopher in your respective specialization been you - yourself.

Upon my experience in the field of software engineering for quite some time, I have seen following are some key habits of SMART well paid engineers who could easily remain unharmed and fearless against the dynamically changing turbulent technical paradigms.  Habits are quite important and well hardened through developing various self-skills. 

So what could be these skill driven habits – which could transform you towards so called smart professionals?
  1. Put more effort to be a speed smart typist – Master Touch typing, Keep a healthy WPM rate. Never feel lazy to type. If you happen choose typing than copy and pasting – always choose typing. You will be much stronger and uncatchable for others. 
  2. Get your communication skills ready – how do you speak meeting, what to talk, what not to talk, how to summarize your thoughts, always Google for new words. 
  3.  Never learn to compare yourself with others – be yourself always, try to master the skills you specifically look for. 
  4. When you work with your team members – don’t feel them as comrades, and never treat them as rivals, or competitors. Always share what you know, but never expect others to be so.
  5. Learn good work ethics and try to establish them in you. Never criticize your bosses, subordinates and peers with others. If you have concern, feel genuine and brave to talk directly and personally. 
  6.  Always remember – Silence is SAGE (“silence is the language of god, all else is poor translation.” ― Rumi)
  7. When you see others are having good qualities/skills, never feel jealous. Out of admiration, develop them in to yourself with effort. Simply been humble is been always willing to learn.\
  8. It is also a must that an individual must develop the habit of reading. With limited time you can’t expect to read everything on web and books. So for example you must find few good must read books from industry like programming and code quality. They will include - The Pragmatic Programmer: From Journeyman to Master Clean Code: A Handbook of Agile Software Craftsmanship, Code Complete: A Practical Handbook of Software Construction, Second Edition, Structure and Interpretation of Computer Programs - 2nd Edition are few suggestion from most good software engineers. So specialty in these books are such that they are globally accepted as must reads for any software engineer by most branded software developers.
Why it happen specifically to highlight these behavioral characteristic with the top priority was that that in my contextual experience specially at the Sri Lankan Software Industry, I have witnessed people – coming from universities and general rural back ground, may not believe in these habitual small tips which can bring huge differences to their careers.

When it comes to technical paradox – many people in the industry I find are vendor oriented and top job driven. I have seen lot of youngsters believing talking to their friends, that earning good technical certifications, earning good educational qualifications will help them to earn good remarks in the industry. To me I feel that is the most illusiest magic a green horn never should believe. I have even seen their world of industry is always more or less about what it has been requested in 100 daily software job advertisements – published in newspapers, web pages or through email advertisements. So as you find in law of attraction, if you want to grab a thing, change your doom - you must always clear your wishes: Specially HOW and Whys. (how you get it, why you want to get it and where you want to be). Then only the universe will start to materialize the ways  for you to get there. Otherwise you are just thinking and hanging on your imaginations and thoughts yet have not achieved any pragmatic results. What could make you a pragmatic ideal software career. Perhaps you have already come across the below’s – but have not felt faithful  enough to believed that they could be the key secrets.

Taking an average Java developer in to example – try to see the things in different paradigm. Instead spring: learn the principles of following. 

  1. What is dependency injection, late binding/early binding/ dynamic bynding, XML binding 
  2. How do you inject dependencies between two classes (write your own example)
  3. What is inversion of control and How do you really invert the control – what are the well-known ways ? 
  4. What are crosscutting features - How do you bring down crosscutting features to general aspects? 
  5.  What do you mean by a light weight frame work – try to write your own light weight DI framework with the support of XML. 
  6.  How does annotations work.

Instead Struts/GWT/JASPER/AJAX:
  1. Just remember what are the front end J2EE technologies
  2. Put lot of effort to learn  Http Protocols : What are the well-known http methods and error codes
  3. How do you troubleshoot server back end and web deployment in web containers (application servers/web servers) 
  4.  How do you communicate between two programs in two different computers? 
  5.  What are the designs based differences between asynchronous and synchronous communication / RMI and message driven communication. 
  6. What is truly meant by middle ware and what are the mostly available different middleware technologies: what is the principle
Instead learning libraries: Learn object oriented programming.
  1.  Always remember few key easy design patterns with example - Remember at minimum the name of 23 GOF patterns, with why they use - where, when etc into (structural, behavioral, functional) paradox 
  2.  Never forget the concepts of Object Orientation at OOsA OOsD and OOP (coupling, cohesion, abstraction, polymorphism, encapsulation, dynamic dispatch, dynamic binding)
  3. Learn about few compilers, and principles of how mechanically an OO programming language work (Rutime Compile time differences, core technicality of compilers, difference between CLR and JVM etc) 
  4.  Learn Object-orientation for databases. Not Hibernate/Toplinc etc. First note the Relational data aspect (Entities and Relations) and then the Object model (Classes  and association). Then  Try to see Object-Relational Framework characteristics. Also look at Object-relational impedance mismatch, Object-relational mapping (Who care hibernate, Toplink or any other ORM tool J ), and Object database, NO SQL  like Mongo DBS etc.
  5. Highlight is : Never forget the Software Engineering part. Big part of leading a Software team belongs to less coding, but good software engineering skills. Therefore never forget Requirement Analysis, modeling  and Engineering (UML, various diagrammatic approaches (use cases, collaborations, classes , components , interactions, etc)
  6. Never undervalue the model level knowledge on areas like (RUP, Agile, TDD, Scrums). 
  7. Get use to some estimation skills like – functional points.   

Always remember good programming habits and few principles of quality code.
  1. Principles of quality code and how you achieve them (maintainability, scalability, extensibility,  Open Close principle,Fail Fast, Separation of Concerns.) 
  2. Code quality assistance tools (Check Style,  eclipse plugins etc …) 
  3.  Best Practices (naming, styling, refactoring, modulating etc etc)
Instead learning much vendor EJBs, ESBs (oracle weblogic, IBM websphere, WSO2).
  1. Read about Principles of Distributed Software Design and Development (Enterprise Scale). 
  2. Learn the principles of middleware and message driven communication /product level advantages / disadvantages 
  3.  Learn concepts and granularity always : what is a bus in computer science try to simulate your own bus between two computer programs, What is a container, what is web container, What is a marsheller,  dispatchers, Demons, Schedulers, Work flow engine, Rules Engine, etc … 
  4. Learn  the principals of Transaction management (ACID atomicity, consistency,  Isolation – Isolation levels, Durability) 
  5.  Learn different ways of implementing web services (Restful, message driven, RMI based ) 
  6. Learn just extended technology modules like WS-Security for SOAP, which possibly uses to implement web service based security and the security principles. 
  7.  Always Always Remember Security Principles (2/3 factor authentication, Public – private key encryption,  Kerberos, and  Always learn, remember about the common words on security threats.Learn about security terms related to web technology. (eg :Cross Site Scripting, SQL Injection, PHP Injection, Javascript Injection, Path Disclosure, Denial of Service, Code Execution, Memory Corruption, Cross Site Request Forgery)

Learn XML
1.       Learn X-paths, X-Path tools, XML bindings, DTD, SOAP, WSDL, XSD, XML DOM, DTD, XQuery, :D

As many says, to which I also agree, the most effective way of learning new and potentially confusing thing is implementing those from the scratch. It is always a must remember for inception there may no need to develop high-quality stuff. Quick and dirty implementations should be more than enough. Habitually – if you can start a thing, that is important. Then keep continue. For example if you really want to learn how a search engine works, go ahead and write a rudimentary one from the scratch.  Remember Nothing will work unless you do – (Maya Angelou ).


Last But Not Least. Below is what one quote one day  one my very good friend and the reviewer of this article Upul Bandara found during his research. I think the same act as a key to rocket you to the destinies where you like to see your self within short.

They say that you're the average of the 5 people you spend the most time with. Think about that for a minute: who would be in your circle of 5? I have some good news: MIT is one of the best places in the world to start building that circle. If I hadn't come here, I wouldn't have met Adam, I wouldn't have met my amazing cofounder, Arash, and there would be no Dropbox. One thing I've learned is surrounding yourself with inspiring people is now just as important as being talented or working hard. Can you imagine if Michael Jordan hadn’t been in the NBA, if his circle of 5 had been a bunch of guys in Italy? Your circle pushes you to be better, just as Adam pushed me ...

Seeing Many Biographies of world renown professionals - Like Einstein, Tesla, Newton, Linkon, so and so, one could also say that it is the network they kept and nurture regularly, the time they spend on their topic with regular symposiums seems be what contribute majorly to push their ideas and rectify them to near perfection with due recognition. You know what I mean.