Enof wisdom is in this book not only for programmg but as whole life, so need to watch new Life Wisdom I guess- no OshoStuffs n etc -isms. Vivek, I got work to do- c o d e n NOT keep returning to back-to-square-1-Oh-How-to-code. etc
exerpt from Pragmatic Programmer pdf:
euta kachra faal in 1 place. people will keep throwing there more, thinking Oh its shit place. Keep it clean - none will bother to trash-ify more. thats entropy.
â
Every now and then, you might want to emulate stone soup story.
You may be in a situation where you know exactly what needs doing and how to do it. The entire system just appears before your eyes âyou know itâs right. But ask permission to tackle the whole thing and youâll be met with delays and blank stares. People will form committees, budgets will need approval, and things will get complicated. Everyone will guard their own resources. Sometimes this is called âstart-up fatigue.â
Then, Itâs time to bring out the stones trick.
Work out what you can reasonably ask for. Develop it well. Once youâve got it, show people, and let them marvel. Then say âof course, it wud be better if we added .â Pretend itâs not important. Sit back and wait for them to start asking you to add the functionality you originally wanted. People ïŹnd it easier to join ongoing success. Show them a glimpse of the future and youâll get them to rally around.
â
In Kachraa problem, people lose will to ïŹght entropy because they perceive that no one else cares.
While frog-Which-Sits-On-SLOWLY-hitting-water just doesnât notice the change.
Donât be like the frog. Keep an eye on the big picture. Constantly review whatâs happening around you, not just what you personally are doing.
â
GOOD ENOUGH SOFTWARE: u can discipline yourself to write software thatâs good enoughâgood enough for your users, for future maintainers, for your own peace of mind. Youâll ïŹnd that you are more productive and your users are happier. And you may well ïŹnd that your programs are actually better for their shorter incubation.
If youâre working on new app, youâll have different constraints. Marketing people will have promises to keep, the eventual end users may have made plans based on a delivery schedule, and your company will certainly have cash-ïŹow constraints. It would be unprofessional to ignore these usersâ requirements simply to add new features to the program, or to polish up the code just one more time. Weâre not advocating panic: it is equally unprofessional to promise impossible time scales n to cut basic engineering corners to meet a deadline.
The scope and quality of the system you produce should be speciïŹed as part of that systemâs requirements. Often youâll be in situations where trade-offs are involved.
Surprisingly, many users would rather use software with some rough edges today than wait a year for the multimedia version. So, app initial inner circle lai prayog garna dee haal.
BUT KNOW WHEN TO STOP: In some ways, programming is like painting. painting improvise garna kehi thapera stepBack n look BigPic ta garnu parchh BUT tooMuchPerfection ko naam ma âthrow a canvas away and start againâ jasto gari rahana hunna. All the hard work is ruined if you donât know when to stop. If you add layer upon layer, detail over detail, painting becomes lost in the paint.
Donât spoil a perfectly good program by overembellist. Move on, and let your code stand in its own right for a while. It may not be perfect. Donât worry: it could never be perfect.
â
Invest in KNOWLEDGE just like invest in stocks by:
- Serious investors invest regularlyâas a habit.
- DiversiïŹcation is the key to long-term success- As a baseline, you need to know the ins and outs of particular technology you are working with currently. But donât stop there. The face of computing changes rapidlyâhot technology today may well be close to useless (or at least not in demand) tomorrow. The more technologies you are comfortable with, the better u will be able to adjust to change.
- Smart investors balance their portfolios between conservative (je legacy wala which gives u breadButter) and high-risk, high-reward investments.
- try to catch up new tech like finding about btc in 2012.
- Portfolios should be reviewed and rebalanced periodically.
TakeClasses, ParticipateInLocalUserGroups, StayCURRENT, AskGURUs
Just because a Web search engine lists a hit ïŹrst doesnât mean that itâs the best match; content provider can pay to get top billing. Just because a bookstore features a book prominently doesnât mean itâs a good book, or even popular; they may have been paid to place it there.
â
As programmer, you are
-part listener
-part advisor
-part interpreter
-part dictator.
You try to capture elusive (difficult to find, catch, achieve) requirements
& find a way of expressing them so that mere machine can do justice. U have to be able to make machine do so.
-You try to document your work so that others can understand it.
-You try to engineer your work so that others can build on it, that too against ticking of time, you work small miracles everyday.
â Not necessary that 1 by-the-book thing as best solution in ur situation. Situation dictates it. You adjust your approach to suit current circumstances. You judge relative importance of all factors affecting project n use ur experience to produce appropriate soln.
You should have broad enough background n experience base to allow u to choose good soln in case that u are now facing.
Your background stems from understanding of basic principles of computer science N your experience comes from wider range of practical subjects. THEORY n PRACTICE combine u to make strong.
â Each developer is unique, w individual strengths n weaknessses, preference n dislikes.
Over time, each will craft his/her own personal environment. That environment will reflect his/ her individuality of solving problems, tools/ approach he uses, just as forcefully as his/her hobbies.
So, way/approach of solving problem is not one - by-the-book kind. However, pragmatism can be best summarized as below traits:
-Early adopter/ fast adopter: U have instinct for tech n techniques, n you love trying things out. When given sthg new, u can grasp it quickly n integrate it w rest of your knowledge.
-Inquisitive (having/ showing interest in learning things after being convinced, ok thereâs pt. learningn it): U tend to ask questions- âHow did u do thatâ âDid you have problems w that libraryâ âWhat;s this llm that Iâve been hearing aboutâ âHow are symbolic links implementedâ etc
-Critical Thinker: U rarely take things for granted without getting the facts. I have talked about this Not-Impulsive-But-paying-attention-to-details in âCavemenâs dilemmaâ blogpost
-Realistic n resilient: U try to understand udnerlying nature of each problem. This realism orientation gives u good feel of how difficult things are, n how long things will take. Understanding for urself that a process would be difficult gives u stamina to keep at it.
-Jack of all trades, master at one
â
Care ur craft, think about ur work
â
In order to be pragmatic programmer, u will feel challenged to think about what uâre doing while doing it. This isnt one time audit of current practices - itâss ongoing critical appraisal of every decision u make, everyday n in every development.
Never run on auto-pilot Constantly be thinking, critiquing your work in real time.
â Individual pragmatists, each one in even large teams. One who cuts mere stones must always be envisioning cathedrals.
â Improvement is a continuous ongoing process.
â Producing formatted documents from the comments and declarations in source code is fairly straightforward, but ïŹrst we have to ensure that we actually have comments in the code.
In code, comments should discuss O N L Y why something is done, its purpose and its goal. The code already shows how it is done, so commenting on this is redundant and is a violation of the DRY principle.
Commenting source code gives you the perfect opportunity to document those elusive bits of a project that canât be documented anywhere else: engineering trade-offs, why decisions were made, what other alternatives were discarded, and so on.
We like to see a simple module-level header comment, comments for signiïŹcant data and type declarations, and a brief per-class and per-method header, describing how the function is used and anything that it does that is not obvious.
Variable names, of course, should be well chosen and meaningful. foo, for instance, is meaningless, as is doit or manager or stuff. Even Worse is Misleading names, DONT.