Analysis and design of learning systems - how much programming experience is needed?

I teach one semester of a university course in Systems Analysis and Design. Topics include design patterns, UML, OOP, software development lifecycles, and the history, advantages and disadvantages of various methodologies (such as Agile / SCRUM / BDUF / Waterfall.)

The students who participate in the course should have some understanding of programming, but I've actually seen everything, from people who are good at one or two modern languages ​​to those who can barely pass the FizzBuzz test.

My question is twofold: how much programming experience do you think students need before they are touched by these topics (or do you think they should study them before they learn to code), and secondly, what do you do you think it fair and appropriate ways to pre-test them at the beginning of the class, knowing that there is no consistent language or platform in their background?

+1


source to share


9 replies


I think students learn best when they can put into practice the material they are learning. To this end, I believe the best course will include some projects (or mini-projects) that involve coding. Generally, I expect this to be taught to undergraduate and graduate students in higher education. By this time, students should have had some programming classes, some discrete mathematics, and a basic data structure course. While there are technically no prerequisites (other than a programming class), if you can require these others, you will be more likely to get students with a proper background.

In terms of pre-test, I would suggest some simple programming projects to illustrate design / OOP patterns early in the course. Perhaps I would be more strict with these projects than the temptation might be for assignments at the beginning of the class. Be aware that programming skills are required for the course and class in this way. Let people know through your assessment that this requirement is serious.



This may sound harsh, but I've seen too many students go through courses relying on their project partners because they can't keep up with the required encoding. I don't think they really got out of the course that much because they didn't have the opportunity to assimilate knowledge through experience.

+4


source


You cannot teach students how to solve a problem they never had. If you want students to be able to do something with this material, they have significant programming experience , so they have some suspicion about the problems that all these ideas are designed to solve .



Ask yourself why you are teaching this material and how you want your students to change by the end of the term. If you want them to be able to explain concepts on a whiteboard, the amount of coding experience is less important. But the real goals are up to you: The more carefully you articulate your goals for the class, the more likely you are to achieve them. What are you hoping to achieve?

+4


source


I was in the same position, and I am convinced that students should have significant programming experience and some mathematical sophistication. At least a good, serious course in programming, a course in data structures, and perhaps a computer organization or a course in systems programming.

+1


source


I did not have a formal computer science education, so I cannot speak from this point of view, but I feel that it takes a significant amount of programming experience to appreciate concepts such as design patterns .

Having gone through the hobby programming phases to get serious about programming, I've found first hand that proper design makes code very usable. I experienced the transition from spaghetti code GOTO

in BASIC to using design patterns and MVC methodologies and seriously appreciated coding based on good design.

Without the appropriate level of experience, students will only see the "Oh, so there are things like design patterns, which is nice" course, but it doesn't really hit the house.

I'm also tvanfosson's second post and believe that having projects as an integral part of the course will really demonstrate how object-oriented programming and design patterns can be used to write well thought out, well-maintainable, reusable code.

+1


source


I would say it depends on your goals / goals for the course, target audience and results.

At first glance, you don't need ANY programming background to get a different course from such a course. At the end of the day, the methodologies and techniques are really about COMMUNICATION, not programming. In fact, a properly executed design can eliminate a lot of unnecessary programming - even using Agile methodologies (why they are told to communicate with the client FIRST and FREQUENTLY).

In addition, this targeted course may be cross-cutting across many other programs, faculties and certifications; such as various business degrees, management courses, etc. Wouldn't it be nice if someone from "management" who took such a course, and actually understood the need for proper communication with clients, rather than just focusing on having a week combined with too short lead times?

So I urge you to think about "programmers" as the target audience for such a course. Think of it as COMMUNICATION first, and go from there.

Regards.

Greetings,

-Richard

+1


source


when i was a student about 2 years ago. topics that are better understood in the last courses. to understand all these topics i think students should have at least 3 courses of programming (structure programming, OOP 1, OOP 2), software development course would be great too, as well as some database db. try to encourage students to start a project from scratch (collect requirements - release) there is nothing better than practice-practice-practice

0


source


Coobird and Tvan are absolutely correct in taking a lot of programming time. I'll add that in a learning environment it is important to have both immediate feedback (other than running the code) and various situations to handle.

Nothing like it if you eat your dog food and have to clean out your own mess to get the gist.

0


source


I think there might be a basic computer programming course that could be given prior to such a course that introduces various basic ideas of modern programming, for example. what is an IDE, what is an algorithm, what are the main ways of measuring difficulties, etc., where there are two choices that give the student: use what the course for the language offers, or choose your own from this list, what TA and others will be knowing is enough to determine whether the solution is acceptable or not. One issue to consider is whether various exotic languages ​​like Logo, Lisp, Modula-3 or Fortran will be okay or not. The idea of ​​understanding how to use different tools will be more focused than using a specific programming language.which cannot be used outside of academia.

In some respects, the final exam for such a course will act as a way to determine if he can miss such a course. The basic idea is to have some stems within a certain area pressed down, as opposed to how in elementary school the Arabic number system in base 10 with the operations of add, subtract, multiply and divide and place values, for example tens, hundreds etc. is the foundation of mathematics, not learning any of them as one introduction to mathematics, which are all possible starting points:

  • Trigonometry using a hexadecimal number base defining functions such as sine, secant, tangent, as well as co-each and the inverse of all these and graphs of such functions.

  • Graph theory consisting of paths, breadth first search, depth first search, and minimum weight trees.

  • Derivatives, integrals and partial differential equations over a system of complex numbers or some larger spaces such as N x N matrices of real numbers.

  • Probability and statistical theory, including arithmetic and geometric mean, median, mode, and the idea of ​​least squares and linear regression with enough algebra that it all makes sense.

  • Finite math such as permutations, combinations, enumeration, and asymptotes.

  • Modular arithmetic and floating point number systems.

  • Geometry of various shapes, considering types of angles and parallel sides as ways of classifying different shapes. It also provides formulas for perimeter, area, surface area, and volume for various shapes.

  • Sequences and series with the idea of ​​limits and infinity as something special to lead to a class along with a sigma of capital for sums and pi for products.

  • Boolean algebra, which includes various logical gates such as AND, OR, XOR, and NOT in the form of truth tables.

  • Linear algebra using only matrices and linear transformations.

  • Logic problems similar to the board game Clue.

  • Pure mathematics containing proofs of various theorems and using a syntax full of abbreviations, including the following: <=> as if and only if, => implies back E for existence, back E followed by an exclamation point since there is only one, up bottom A as "for all" or "for each" qualifier, three points in one arrangement for "hence" and another for "so", as well as ideas of necessary conditions versus sufficient conditions and proof of induction.

  • Algebraic concepts such as groups, rings and fields. There would also be the concept of inversions, associative and commutative operations.

Image if someone has a class of 30 students, 10 of whom have basic North American education and the other 20 are studying one of the 12 parts of math, but not necessarily others. Could terms like "graph" be cases where more than one branch uses a term with a completely different meaning, eg. a graph of a function in the (x, y) plane versus many vertices and edges in a graph or a grid, how in two-dimensional representation on how to construct various three-dimensional shapes? I think it would be a similar situation.

0


source


I've been a programmer for a long time and I wish I had learned proper systems analysis in the beginning.

Analyzing the system correctly and designing a solution is a fundamental step towards creating the right solution. Systems analysis methods give you a foundation for development. This is the plan. How can you create an application without proper planning? It can be done, but it is usually a mess. If I had a programming course, this is what I will teach:

1.System analysis and design.
2. Project planning (PMI Institue) using MS Project. After acquiring these skills, you can professionally do any programming job.
3. Programming (VB.NET, C #, C ++, ASP.NET JAVA, etc.) To create a design.

If you want to be a professional programmer then these are the basic skills you need. Unfortunately, I have not seen these items found in the places where I have worked. A good plan is always helpful.

0


source







All Articles