From Apprentice to Master

How to Become a Great Programmer

From Apprentice to Master

Emptying Your Cup
Ask the most experienced and available programmer you know for ongoing help.
Never become completely dependent on your more experienced friend to solve all your problems.
Have an actual problem to solve

Learn to think differently by/when learning a new language
Set your previous knowledge aside as you approach new situations.
Make sure your new implementation follows the idioms of the new language.
Unleash Your Enthusiasm (to your team)
Inject some excitement, your ideas, intelligence, and passions into your team.
Question everything
Determine which of these skills would be immediately useful to the team, and strive to acquire the knowledge.
Expose Your Ignorance and Confront Your Ignorance
Brave to ask for help.

Prepare and grasp the opportunity to assume a high-profile role or solve a difficult problem.
Craft over Art
Place the interests of your customers over your desire to display skill
Nurture/Grow Your Passion and Keep Sustainable Motivations
Keep the sense of wonder/curiosity
Be ambitious about your career.
Draw Your Own Development/Career Map

Accurate Self-Assessment
Evaluate yourself frequently and know your weaknesses, and combat them.
Find Mentors to get advices
Kindred Spirits
Immerse into the community
Sweep the Floor for the team
Volunteer for unglamorous, yet necessary, tasks.

Perpetual Learning
Expand Your Bandwidth
Action Items:
l          Subscribe to software development blogs in Google Reader
l          Follow some software luminaries on Twitter
l          Subscribe to an online mailing list and answer people’s questions.
l          Join a newly formed local technology user group
l          Attend technical conference
l          There are hundreds of online academic courses, podcasts, and videos (Google Tech Talks) on iTunes and YouTube.

Keep Practice and Make Breakable Toys
Use the Source, Read and Learn from the code
Use your skills you learn at work
Reflect As You Work
Observation, reflection, and learn from your own activities, your colleagues.
Take notes everywhere, anytime
Record What You Learn and Share What You Learn

Create Feedback Loops
Solicit feedback early, often, and effectively, be conscious of your incompetence.
Pay careful attention to any feedback; avoid defending your behaviors, your skills.
Learn How/Why You Fail

Construct Your Curriculum

Build and Maintain Your Reading List
Read Constantly
Study the Classics

Dig Deeper
Get your information from primary sources
Understand the forces that led to a design rather than just the details of a design.
Understand Why - the problems trying to solve
Understand How it is solved, implemented.

Letting go of familiar and valuable tools
Keep an open mind and learn something new
Understand your tools, knowledge will become obsolete, they need be upgraded.
Discover problems of the tools you use, find whether there are better alternatives.
If not, it's your time to show your talent.

Resources
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman
Post a Comment

Labels

Java (159) Lucene-Solr (112) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (38) Eclipse (33) Code Example (31) Linux (25) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Shell (7) ANT (6) Coding Skills (6) Database (6) Lesson Learned (6) Programmer Skills (6) Scala (6) Tips (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) System Design (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts