Become a Guru

^<<

This page is about how to become a software development guru. Some of the principles may apply to becoming a guru in other fields.

Over time, progressively develop learning resources on the topics listed below.

If you are an educator of aspiring programmers, do link to your learning resources from this page, and back to this page.

Practices

 * Find good tutorials on the web and learn via "copy/modify" of source code.
 * Pragmatic Software Development Tips

Read Relevant Inspirational Books

 * The Pragmatic Programmer (inspirational for aspiring career programmers).

Understand and Apply Appropriate Software Development Methodologies
Learn about the following (by doing):


 * Agile Methodologies such as
 * Feature Driven Development and
 * Extreme Programming

Identify suitable tools/frameworks to support software development processes such as


 * JUnit, Maven, Ant, Mantis, bugzilla, git, svn, cvs, trac, osrmt, continuous integration software, kosmos, ...

Understand and apply principles of agile software development :


 * The Agile Manifesto
 * 12 principles.

Read great articles on agile software development:


 * The New Methodology - Martin Fowler.
 * Alistair Cockburn's Articles.
 * Feature Driven Development and Extreme Programming by Stephen Palmer.

Join, Learn and Engage with Relevant Online Communities

 * Contribute to free software projects
 * Many to choose from
 * Understand the benefits of Commons-based peer production.

Visit good sites on software development regularly, subscribe to relevant mailing lists:


 * The Server Side
 * Discussions

Learn about Programming Paradigms and Languages
Learn about Programming paradigms (e.g. imperative, procedural, functional, declarative, object-orientation, ...) and try languages which support these paradigms (e.g. Pascal, Lisp, Prolog, SmallTalk, ...).
 * Learn a language a year. Consider the following:
 * Python
 * Ruby
 * C/C++
 * Book: "The C Programming Language" by Brian W Kernighan and Dennis M Ritchie
 * Java
 * Interesting: How to Teach Java (and by implication: how to learn Java)
 * Books:
 * Effective Java - Joshua Bloch
 * PHP
 * Get to know which languages are best in what situations.
 * Get to know which languages are best in what situations.

Study Software Architecture

 * Learn about Software Architecture and Design Patterns
 * Tools for continually improving design and architecture: Unit testing, refactoring, ...
 * Frameworks such as Struts, Spring, Hibernate, Cocoon, JSF, OpenLaszlo, JBPM, Tomcat, JBoss, ...
 * Learn about web services, Service-oriented architecture, mashups, cloud computing, ... (please add and update).

Academic Foundation
Study computing science
 * Data structures and Algorithms
 * Operating systems
 * Databases
 * Compilers and interpreters
 * Artificial Intelligence

Curriculum Frameworks:

Challenge: check out the Java Specialists Symposium 2011 and create a new, updated version of this diagram. All topics covered there provide insight, but this one (Successful Developers) in particular.

Links etc.
Useful links for becoming a guru:


 * How to be a good programmer...My tips
 * Teach Yourself Programming in Ten Years
 * open educational framework for computer science Software Engineering.