“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?
- 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.
- 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.
- Never learn to compare yourself with others – be yourself always, try to master the skills you specifically look for.
- 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.
- 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.
- Always remember – Silence is SAGE (“silence is the language of god, all else is poor translation.” ― Rumi)
- 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.\
- 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.
- What is dependency injection, late binding/early binding/ dynamic bynding, XML binding
- How do you inject dependencies between two classes (write your own example)
- What is inversion of control and How do you really invert the control – what are the well-known ways ?
- What are crosscutting features - How do you bring down crosscutting features to general aspects?
- What do you mean by a light weight frame work – try to write your own light weight DI framework with the support of XML.
- How does annotations work.
Instead Struts/GWT/JASPER/AJAX:
- Just remember what are the front end J2EE technologies
- Put lot of effort to learn Http Protocols : What are the well-known http methods and error codes
- How do you troubleshoot server back end and web deployment in web containers (application servers/web servers)
- How do you communicate between two programs in two different computers?
- What are the designs based differences between asynchronous and synchronous communication / RMI and message driven communication.
- What is truly meant by middle ware and what are the mostly available different middleware technologies: what is the principle
- 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
- Never forget the concepts of Object Orientation at OOsA OOsD and OOP (coupling, cohesion, abstraction, polymorphism, encapsulation, dynamic dispatch, dynamic binding)
- 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)
- 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.
- 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)
- Never undervalue the model level knowledge on areas like (RUP, Agile, TDD, Scrums).
- Get use to some estimation skills like – functional points.
Always remember good programming habits and few principles
of quality code.
- Principles of quality code and how you achieve them (maintainability, scalability, extensibility, Open Close principle,Fail Fast, Separation of Concerns.)
- Code quality assistance tools (Check Style, eclipse plugins etc …)
- Best Practices (naming, styling, refactoring, modulating etc etc)
- Read about Principles of Distributed Software Design and Development (Enterprise Scale).
- Learn the principles of middleware and message driven communication /product level advantages / disadvantages
- 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 …
- Learn the principals of Transaction management (ACID atomicity, consistency, Isolation – Isolation levels, Durability)
- Learn different ways of implementing web services (Restful, message driven, RMI based )
- Learn just extended technology modules like WS-Security for SOAP, which possibly uses to implement web service based security and the security principles.
- Always
AlwaysRemember 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.
very important post for a wanna be software engineer like me,Thanks.. :)
ReplyDelete