Tuesday, January 4, 2011

list for a beginning programmer

relational database concepts

pk, fk, candidate key, referential integrity, 1NF through 4NF
indexes, triggers
sql: ddl, dml, dcl,tcl

data modelling (entity-relationship modelling)

Chen-style (relationships shown as nodes)
Information Engineering (IE) style (relationships shown as lines)

data-driven program design

“Principles of Program Design” by M. A. Jackson
“Jackson Structured Programming: A Practical Method of Programme Design” (Paperback) by Leif Ingevaldsson

software requirements and specifications

“Structured Analysis and System Specification” by Tom Demarco & P. J. Plauger (Paperback 1979) Dataflow diagrams can still be useful tools in certain contexts, even though they are obsolete for sofware systems analysis.
“Software Requirements and Specifications:” by Michael Jackson STRONGLY RECOMMENDED
“Problem Frames” by Michael Jackson

object-oriented programming

class, object (or instance), method, static method, instance variable
”Beginning Java Objects” by Jacquie Barker

domain-driven design

“Domain-Driven Design” by Eric Evans

event-driven programming

“Event-Driven Programming” http://eventdrivenpgm.sourceforge.net/

data structures and algorithms

variables (in non-object oriented languages), objects (in OO languages), pointers (references)
stack, queue, LIFO, FIFO, linked list, tree, node (and how to program them)
recursion (for traversing trees)
“Thinking Recursively” or “Thinking Recursively in Java” by Eric Roberts

process modelling, entity life-history modelling

finite-state machine (FSM) and state-transition diagrams
“Software Engineering Fundamentals: Jackson Approach” (Paperback) Leif Ingevaldsson

popular software design methods/tools/ideas

UML and its various diagram types
design patterns – “Head First Design Patterns” might be a painless introductory book

software development management

iterative/evolutionary development (as opposed to “big bang” development)
“waterfall” methods
“agile” methods

programming languages

Dynamically-typed language: Python (or Ruby)
Statically-typed language: Java (or C#)
A good IDE (Eclipse: don’t try to program Java without it!)