Would love to know your thoughts on a curriculum that will be developed for people that want to get started in the programming field. The goal of the course is to help it’s students to ensure that students have an understanding of the theory and skills required to be a programmer, and have enough skills to get entry-level jobs upon graduation.
Curriculum is:
-
400 hours of instruction plus self-study.
-
40 hours of practicum
1. Foundation
a. Clarity
b. Detail orientation
c. Communication
d. Compartmentalization/abstraction
e. Typing
f. Memory
2. Theory
a. Lexical analysis
b. Parsing
c. Optimization
d. Hierarchical thinking
e. Scope
f. Type systems
3. Computer Science
a. Data structure (ex. sorting, searching, data structure transversal)
b. Recursion
c. Language structures (ex. arrays, linked lists, dictionaries, etc)
4. Systems Architecture
5. Operating System Theory
a. POSIX
b. IO
c. Memory allocation
6. Object Oriented Programming
a. Java
b. PL/SQL
Would love to know:
-
Is the above curriculum laid out clearly? If not, how would it be best to change it?
-
Are there any crucial components being missed from the above outline?
-
Should any components be removed from the above outline (considering the timeline)? Perhaps it’s too detailed at certain points and is not in balance with the rest of the content?
2
Have you looked at the ACM Curriculum Recommendations?
ACM. the Association for Computing Machinery, is the professional society for computer software people. They’ve been thinking about what needed to be taught, in what order, with what emphasis, for decades.
1
I think this is a great start.
With a few changes. Your foundation section includes things like Memory management and abstraction. In my experience these are best handled by programmers who already have a bit of experience : a) writing programs and b) understanding the architecture of the machines running their programs. Furthermore, this type of instruction is best handled with lower level languages such as C or I daresay ASM. I would suggest then moving these into the actual Computer Science stage because by then certain skills will have already been obtained and you can focus more on minute and abstracted details like memory management.
The same goes for lexical analysis and presumably a bit of study on compilers and language theory. These concepts should be handled a little later on.
By the way, in terms of language usage, I think the foundations should be taught in something like python or ruby. Easy to use, dynamically typed and with a syntax and structure that generally reflects human thought. http://www.linuxjournal.com/article/3882
For the heavier stuff like POSIX, Data Structures/Algorithms I think your only serious choice is C.
Object orientation can be done in java, but nowadays I think its more forward thinking to handle it in python. Or if your really bleeding edge, maybe try Go.
I think its important to include some stuff on database theory too. Like relational languages and dependence theory.
In short, there’s a few things I think you are missing, but you’ve got a good solid start.
5
Looks like you’ve got some great stuff in that list. Many people might not like the theory, but I really agree that it makes you a better programmer to understand the fundamental building blocks of languages.
Here’s some more items I consider to be essential for entry-level programmers to have at least some exposure:
- Testing
- Debugging
- Web stuff (HTTP, web applications, etc.)
I’d put the “Object Oriented Programming” before the “Computer Science” so that the concepts in the latter can be actually worked on something without assuming one is already knowledgeable in a programming language.
Testing is a big omission here. Black box, white box and unit testing should be covered as part of what developers should know and understand within the broader scope of things.
The SDLC and methodologies like Agile and Waterfall would also be things I’d suggest covering early in terms of how are projects put together and how are things done in industry. A bit of ITIL may be useful to help illustrate how some of the bigger processes like change management and incident management are handled as this may come up within industry.
This is a good post. One thing that I would encoruage would be if possible, have a How to implement or think on a problem. Can give them certain scenarios and explain why would you take Approach A rather than Approach B. A few examples like these, would definitely help clear thinking and clear concepts.