• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Tim Cooke
  • Campbell Ritchie
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Carey Brown
  • Piet Souris
Bartenders:

Teaching Java and OOP

 
Marshal
Posts: 80493
455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote:. . .  There is a push to meet a graduation quota . . .

Same problem exists on this side of the Pond
 
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Whatever reasons there may be for lowering expectations, I just can't see any sane justification for giving programming exercises like this: https://coderanch.com/forums/posts/preList/675232/3162242#3162242
 
Campbell Ritchie
Marshal
Posts: 80493
455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Yes, that is a pretty dreadful assignment. Had the assignment said,

Write a noughts and crosses game, expecting basic output like this:-
  |X|  
O|X|  

  |O|
Additional marks may be given for better functionality or display.

...that would have been a good assignment. The prescriptiveness stops the students thinking about the problem and forces them to use inelegant solutions.
 
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Junilu Lacar wrote:Whatever reasons there may be for lowering expectations, I just can't see any sane justification for giving programming exercises like this: https://coderanch.com/forums/posts/preList/675232/3162242#3162242



Wow, it is hard for me to know where to begin.  I mean, I see what the teacher is trying to do, but think he/she went overboard on constraining the problem!  Why are there so many statics!?

Maybe this is a starting problem and the teacher is trying to keep it simple...  Ya, I don't know.
 
Paul West
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Campbell Ritchie wrote:Yes, that is a pretty dreadful assignment. Had the assignment said,

Write a noughts and crosses game, expecting basic output like this:-
  |X|  
O|X|  

  |O|
Additional marks may be given for better functionality or display.

...that would have been a good assignment. The prescriptiveness stops the students thinking about the problem and forces them to use inelegant solutions.



Agreed!
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote:Maybe this is a starting problem and the teacher is trying to keep it simple...  Ya, I don't know.


If KISS was the intent and the teacher was aiming for the first S, I'd say he/she missed and hit the second one instead.
 
Campbell Ritchie
Marshal
Posts: 80493
455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote: . . . Maybe . . . the teacher is trying to keep it simple . . .

But all these constraints actually make the assignment more difficult to complete. Unless is it something which is supposed to be marked by machine. . . .
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I got another email back from the faculty committee chair. I'm getting a sense that while he says they are open to discussion, they aren't very keen on the idea of changing their curriculum.

...we are in the middle of preparations for a major activity that will not finish until possibly the middle of 2018. And, of course, any changes in content of courses or the program is a fairly long process and requires extensive consultation among faculty and students to ensure that there are no unintended consequences.


I will try to keep at them but it's starting to look like I'm going to eventually end up in a dead end with these guys.

@Paul, I'm starting to think it might be better to continue this conversation with you instead. Since you seem to be already on board with the idea of improving alignment between academia and industry, why don't we explore some ways we can get a more collaborative effort between the two sides going?

This past fall, my wife and I went down to the University of Cincinnati with our daughter for a college visit. One of the things we really liked about UC was their co-op program, where students in certain programs like engineering, computer science, and business are required to spend entire school terms working in the industry, not as unpaid interns but as paid full-time employees. Their mandatory co-op rotations start in their second year. This is just one of many ways a better alignment between education and industry can be achieved but much more could be done in schools during those critical first and second years to give students a better foundation that can make their co-op experiences even more beneficial and rewarding. This is one of the articles I found yesterday: https://arxiv.org/pdf/0908.4353.pdf -- it lists a number of recommendations that I think are worth considering and discussing.

The other document I found was this: http://dl.acm.org/citation.cfm?id=800626 - I haven't read through the whole paper but I did find a preview that included this in its abstract:

... Traditionally, a student's grade point average was one method which could be used to determine if the student was qualified in his particular field of study. Unfortunately, this is not always true, especially in the rapidly changing field of Computer Science. Even though a student has done well in a particular educational program, this does not guarantee that the educational program itself correlates to the needs of the industry. A situation such as this must and can be avoided through mutual procedures between education and industry. Strategies are discussed to eliminate the Computer Science/Industry misalignment, concerning faculty, advisory committees, curriculum guidelines, professional organizations, and student activities.


This aligns with some of the comments that you and Campbell posted recently.
 
Paul West
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Junilu Lacar wrote:I got another email back from the faculty committee chair. I'm getting a sense that while he says they are open to discussion, they aren't very keen on the idea of changing their curriculum.

...we are in the middle of preparations for a major activity that will not finish until possibly the middle of 2018. And, of course, any changes in content of courses or the program is a fairly long process and requires extensive consultation among faculty and students to ensure that there are no unintended consequences.


I will try to keep at them but it's starting to look like I'm going to eventually end up in a dead end with these guys.



Sounds like a large University and/or public school.  Keep in mind change at a lot of these places is very slow...

Junilu Lacar wrote:
@Paul, I'm starting to think it might be better to continue this conversation with you instead. Since you seem to be already on board with the idea of improving alignment between academia and industry, why don't we explore some ways we can get a more collaborative effort between the two sides going?



You have actually caught us at a good time.  Last year the University put forth a a vision for the next 10 years.  One of the key points was called ELI (Experiential Learning Initiative.)   Basically, they (President/VPs/Deans) want to see more partners with industry bringing experience into the classroom.  I have tried to add some (like Git), but there is definitely room for improvement.  

I talked to our chair, we do have some classes for ELI: an internship and teamwork class.  The internship is basically, the student works in industry and then gets classroom credit (after submitting a paper describing the work.)  I'm vague on the teamwork one, so I'll have to get more information there.

The University has an Industry Advisory Board (IAB) that allows industry partners to meet and discuss what should be added/removed from the classroom.  Depending on what you qualifications, I might be able to add you to it.

Anyways, send me me ideas!  I'll try to get to those papers today after class...

~Paul
 
Sheriff
Posts: 9008
652
Mac OS X Spring VI Editor BSD Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote:I have tried to add some (like Git), but there is definitely room for improvement.  

But this is something shouldn't be a one session thing I believe, it supposed to be an ongoing on daily basis used tool of CS lecturers / students - some universities here in UK release coursework materials, class examples, lab exercises via git repos, so you're forced to use it, which means when you leave college, you already have working experience rather than "somewhere heard about it". And it doesn't sound like a complicated thing to achieve to be a part of day-to-day studies.
 
Paul West
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Liutauras Vilda wrote:

Paul West wrote:I have tried to add some (like Git), but there is definitely room for improvement.  

But this is something shouldn't be a one session thing I believe, it supposed to be an ongoing on daily basis...



I agree!  In my classes ALL assignments are submitted through Github.  The course contents (slides, class code, etc..) is stored on Github.  I would run everything on Github if I could find an *easy* way to store grades and run timed exams.  I try to avoid the Blackboard.

~Paul
 
Paul West
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Junilu Lacar wrote:
This past fall, my wife and I went down to the University of Cincinnati with our daughter for a college visit. One of the things we really liked about UC was their co-op program, where students in certain programs like engineering, computer science, and business are required to spend entire school terms working in the industry, not as unpaid interns but as paid full-time employees. Their mandatory co-op rotations start in their second year. This is just one of many ways a better alignment between education and industry can be achieved but much more could be done in schools during those critical first and second years to give students a better foundation that can make their co-op experiences even more beneficial and rewarding. This is one of the articles I found yesterday: https://arxiv.org/pdf/0908.4353.pdf -- it lists a number of recommendations that I think are worth considering and discussing.

The other document I found was this: http://dl.acm.org/citation.cfm?id=800626 - I haven't read through the whole paper but I did find a preview that included this in its abstract ...



Some of those things we have implemented (Industry Advisor Board).  Probably the most significant issue is deciding when to adopt the next technology, drop an old one, or don't do anything.  I've noticed, and hopefully y'all have as well, technologies will come and then wane:  Perl, Struts, Objective-C.  Now these are still used, but they may not be the best focus of technology.  Right now AWS ("the cloud"), and javascript (node.js and angular) are pretty hot right now.  How do I know what will stick?  Perl seemed like it was taking off at first...

It would be good to focus on the principles behind these technologies and leave the language/syntax to whatever is big at the time...
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote:
Anyways, send me me ideas!
~Paul



Just did. To keep everyone who has been following this discussion in the loop, here's the bulk of what I just emailed to Paul:


One of the great benefits (we get at my company) is that we are allotted 40 hours of personal time to do volunteer work. The intent is to encouraged us to give back to our communities. ... This year, I'd like to use some, if not all, of my volunteer hours to give back to the young, up and coming professionals, as well as you, our colleagues in academia.  

One thing that I always preach to developers on my team is that if they think there’s a problem in the system, they should write some failing tests to prove that those problems exist. This is based on what E.W. Dijkstra wrote: “Tests can only show the presence of bugs, never their absence.”  In that spirit, I have been toying with the idea of organizing a workshop in which students and educators can interact directly with industry professionals. The workshop would be run like a Test-Driven Development programming session except that instead of looking for bugs and ways to refactor computer programs, we’d be looking for bugs and ways to improve the design of CS education programs.

The “tests” that we'd run in this workshop would involve students going through simulated interviews / auditions given by the industry professionals. Instructors can either observe or go through the interviews and auditions themselves; first hand experience is always more revealing.  

My experience with professionals going through my interview/audition process has been dismal. In the past couple of years, filling a single position on our team meant that I would need to interview around twenty to thirty people. Only a fraction of the people interviewed would get invited to a second-round audition and then only the most suitable candidate, if there was one who managed to pass the audition, would be offered the position. This kind of selection process is becoming more common in the industry and I have had great success with it even though it takes a lot more time and effort than more traditional methods. In the last two years, I have had to fill five positions on our teams. That’s well over a hundred people and many hours of interviews and auditions.

A note about my interviews and auditions: I never ask questions or give exercises that involve any kind of esotery. My questions and exercises are simple and straightforward and require only a good handle of common programming practices and techniques. For example, I often use the canonical example for refactoring to a Composed Method as my audition exercise. See https://www.industriallogic.com/xp/refactoring/composeMethod.html. If you examine the code in that example, it’s very straightforward. Yet, many professionals are totally stumped by this exercise and many are unable to apply even one refactoring to that code much less write one good unit test to drive the refactoring. I found that appalling and disappointing because I believe the skills and techniques I’m looking for them to have/know should have been things they learned in school.

If the workshop shows that students are also incapable of getting through similar exercises, then I would consider that as compelling empirical evidence that students could benefit from putting more focus on learning some very fundamental concepts and techniques that will make them competitive and more attractive to prospective employers in the industry. These are the kind of gaps I’d like to discover so we can start looking into what re-alignments need to be made between education and industry needs, a discussion of which would also be part of the workshop.

...

Thoughts?

 
Rancher
Posts: 383
13
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
My comment is more to the discussion around post-secondary education and placement or co-op. My daughter is in her final year in a Behavioral Sciences program at a local college. Starting in the 2nd year students are required to participate in an 8-week placement at the end of their classroom training each semester. Further, they are required to submit detailed reports of their progress at the placement, to ensure that they are following the curriculum structure and at the same time, meeting the requirements of the employer with whom they are doing placement. In my opinion, there is absolutely no substitute for combining classroom (theory) training with applying what was learned in the field, while the student is attending college or university.  To me, it is akin to teaching youngsters life-skills, like how to manage their finances, develop coping mechanisms to handle stress (such as work deadlines), handle relationships with co-workers, and so on.

I am a developer for a local insurance company. We have several people here in IT and Corp management who are on various boards with the local college and university. The core purpose is to make sure the educational curriculum remains in parallel or in sync with what the industry requires, and the direction it is heading. Every year our company takes on university and college students in relevant studies. This allows the educators and the company to focus on developing course curriculum that addresses the needs of business, and the students themselves know they are learning course material that is current/relevant. The benefits of this kind of system are immeasurable, in my opinion.

All that to conclude that I wholeheartedly agree with the discussion around the importance of placement/co-op in the education system.

Great topic!
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Paul West wrote:It would be good to focus on the principles behind these technologies and leave the language/syntax to whatever is big at the time...


This is what I have said many times before. I built my career based on knowing how to apply fundamental principles. I believe that has been a big factor in my longevity in this industry. I learned BASIC and Pascal in school but started out professionally as a cocky but pretty good dBase programmer. I progressed through the early days of the PC, learning other xBase dialects like FoxPro and Clipper, worked my way "up" to the IBM S/36 mini-computer environment and RPG II then upgraded to RPG/400 on the AS/400, then to mainframes and COBOL when I worked in the banking industry in Singapore and Hong Kong, then back to client/server on PCs, Object Pascal in Delphi, until I finally started using OO and Java. I have run quite the gamut of technologies over the years. Through all these transitions, fundamental principles of software development have been pretty much the only things that I was able to carry forward and use again to my benefit.

So, when I harp on choosing good names, that's because I believe in the principles of clarity and expressiveness in code. When I harp on refactoring and TDD, it's because these practices go back to knowing how to apply design principles, abstraction, encapsulation, modularization, etc. These are the fundamentals that I think many lose sight of in the shuffle to learn the latest and greatest frameworks or whatever language it is that employers are including in their job ads. When I preach about the benefits of agility to the point of being obnoxious and overbearing, it's because I have personally experienced what it's like to work in an environment where quality and craftsmanship are not just lofty ideals but are real and tangible parts of your daily practice.

So, you're absolutely right, Paul, it's the principles that count and that's what students should learn more about in the context of current techniques and technologies. Familiarity with basic principles of software development is what I look for when hiring people to join our teams and I think more people in industry are looking for the same kind of things. Even if that's not what many other companies look for, I think a new generation of software development professionals who are at least aware of the importance of software principles and quality and craftsmanship would be a great benefit to the industry. Right now, I have to spend a lot of time and effort evangelizing about this stuff and mentoring professionals who, unfortunately, know very little about them.
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Come to think of it, one of the things I remember most from what I learned in school is not related to algorithms, Big Oh, data structures, finite state machines and automata, boolean algebra, or anything that you might consider "technical". The thing that stands out for me, the idea that has influenced me the most is that of "elegance". I believe it was mentioned in the context of a discussion about graph traversal algorithms, the visitor pattern, and a recursive solution. I think I was very fortunate to have an instructor who also worked in the industry, who knew not only the theoretical aspects of the subject but the practical application of the concepts in real-world software development. When he started talking about elegance and being able to easily explain the program to other developers, and how it was easy to prove there were no bugs in the code, that opened up a whole 'nother perspective on software development for me.  I think a lot of schools miss opportunities to give their students this kind of perspective.
 
Paul West
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Junilu,

Elegance is a good word.  In the field I would usually say ``make it easy''.  Yes, it is cool you got something really complicated to start working, but please make it easy to use.  IE, I don't mind creating an object with your setup and then calling a function.  While you are at it,  make the names obvious!

Also, sorry if I have missed your emails, my email filter is strange...

Thanks,

~Paul
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Sorry for the short notice on this but we've been doing dry-runs and briefings -- I'm going to present a short Webinar today at 3:30pm Eastern US Daylight time (about 30 mins from now).

Here's the synopsis:

According to a 2015 Forbes.com article, "Many college students are stunningly ill-prepared for the professional world. What's worse, they don't even realize it!" Many companies have started using auditions as an effective way to find the best and brightest candidates. Auditions are more intense and involved than traditional question-and-answer interviews and many job candidates have little to no idea what to do in one. In this presentation, Junilu Lacar, a Technical Leader at XXXXX and software developer with almost three decades of industry experience, will talk about and demonstrate what an audition is like. Mr. Lacar will give you valuable insights as to what you can do as a new graduate to prepare for an audition and be competitive, even against other applicants who may have more experience than you do.

The presentation will through Adobe Connect: http://moody.adobeconnect.com/cotwebinar

It will be an hour long. You may have to install a plugin. You can join as a guest, no password required.

UPDATE: If you're interested, you can watch the recording here: http://moody.adobeconnect.com/p517hxw8q9l/ (you may need to install a plugin to view the recording)

It looks like we're going to move ahead with a whole-day workshop onsite at the university where Paul is teaching. I'm flying down there in the later part of this month to facilitate the workshop.
 
Greenhorn
Posts: 11
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Junilu Lacar wrote:I was actually able to find some literature that I can cite. I did a search on research into misalignment of industry and academia in Computer Science instruction and found several articles. One article even summarizes the issue quite well: "However, the gap that exists between what is taught at school and the skills required to perform on a job is so wide that a high percentage of young graduates are said to be unemployable for lack of needed skills that would make them profitable for any employer."



Junilu. There is no such thing as a further education college or university which offers courses which aim to turn out world class experts in any field let alone programming. It is the job of a further education establishment to turn out students who have a good all round "basic" grasp of their chosen field! People with "potential"!

Further to that, if a company is too tight to take on young and inexperienced programmers (or any other profession for that matter) and train them up for the companies more specific requirements then that company obviously doesn't give a crap about their employees ambitions or potential and as such that company is undeserving of quality employees.

As for courses unfit for purpose, people have been learning from the ground up for centuries! It is the tried, tested and proven best method.

If all the above isn't convincing enough, there is nothing more difficult to learn than that which is abstract, and programming is 100% abstract! OO principles just add yet another layer to that abstraction!
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The problem, as I see it, is that many teachers seem to just recycle their course materials from one year to the next and don't seem to even bother updating them. I hardly think that a whole-semester course in Java programming  that ends with kids still not knowing anything about objects or still has them writing all their code in main() is an effective way of teaching, much less a way to give kids a good "basic foundation" of OO programming. I'm not saying they need to be perfect and expert programmers when they finish the course but they should at least not be as clueless as many of the students we get around here seem to be.

Of course, I recognize that it may be the case that those who end up at this site are the ones who are really struggling. However, we've had a chance to look at their course materials and many of them are obsolete and have much to be desired. Many schools are doing good things that are starting to align with industry practices but at the same time, they could do much better if only they collaborated more with industry professionals and stayed abreast of latest development practices.
 
Scott Reid
Greenhorn
Posts: 11
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I quote, "Ihardly think that a whole-semester course in Java programming  that ends with kids still not knowing anything about objects or still has them writing all their code in main() is an effective way of teaching, much less a way to give kids a good "basic foundation" of OO programming."

No student ever, anywhere, in any field of endeavour in the entire history of the human race (let alone since the dawn of educational establishments) has EVER studied a single aspect of their chosen subject for "a whole semester"!

Programming is a branch of computer science, not an entire subject on it's own! At best, programming accounts for 3 hours per week of their course and then only over a 6 month period per year across a 4 year course!

At this stage, all they have really proven is that they are capable of learning! Nothing more!

I think you are falling into the trap of "the jaded pro". You are forgetting the backup, the assistance, the advice and direction, the sheparding which you received when you first stepped out from the University onto the beginning of the road of your professional career.

You may well be tired of answering the same old question over and over again, but you had these questions once and someone took the time to sit with you and give you their advice!

That's how people learn! From the bottom up, in small manageable chunks, over time! Then in small, manageable chunks over time, over many years and through different companies!

I've seen this so many times! It happens in every industry!

My main point in my post above was that;

A: The method of teaching isn't wrong! That's been proven conclusively for the last 2000 years! Otherwise we still wouldn't have fire!
B: Expecting people to walk into a programming career and be instantly capable of coding whatever is handed to them without needing help, assistance or further information is utterly unreasonable!

More still, trying to introduce OOP concepts before teaching the basics may well produce more capable and knowledgeable programmers! If so, it will only produce 2 per class of 30! The rest will have quit in the first week!

As for the newbies on here! Myself included! Most of them are studying programming in their own time, for their own desire!  

 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
To give you a couple of real-world examples of teachers doing better:

1. I had a chance to collaborate with some university professors in Germany this past summer. They asked me to do code reviews for code that their students had written. I was able to give the students feedback on their code. Most students don't get this kind of feedback from their teachers.

2. Dr. Venkat Subramaniam, author and NFJS tour speaker, teaches a course on programming where he does pretty much the same thing: he has his students commit their work to a source control system like Git and gets access to their repositories. He then reviews his students' work every week. He gives them a whole semester project to work through and each week (and sometimes even more often) they get feedback from him as they commit their work in progress. The school has asked him to add more classes so they can scale this approach up to more students but he won't because then he would not be able to give as much feedback. He keeps his class size to about 30 students and will not take more than that.

We need more of these kinds of teachers in the universities, who are looking for ways to keep up with industry and give their students as good of a start as they can. This also helps the industry because the more kids who come into the profession already knowing good engineering practices, the less mess we all have to deal with. We already have enough engineers who have little to no clue about what good engineering looks like without schools adding more to their ranks each year.

If you don't recognize this as a problem, then maybe you're part of it.
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Scott Reid wrote:I think you are falling into the trap of "the jaded pro". You are forgetting the backup, the assistance, the advice and direction, the sheparding which you received when you first stepped out from the University onto the beginning of the road of your professional career.


No, I don't think so. In fact, I have been making efforts outside of work to reach out to graduating students to try to give them a better idea of what they're wading into. I've been reaching out to people in academia and have worked with whoever is willing to meet me halfway.

Also, I remember my entry into the profession very well, in spite of it being more than 30 years ago. In fact, I received very little in terms of guidance and mentoring regarding programming itself. In fact, I was the maverick, disrupting accepted ways of working in an effort to find better ways. In 1999, when I suggested to one project manager that Test-Driven Development (known as Test First Programming at that time) seemed like a promising approach, the project manager looked me straight in the eye and said to me, "Why would you do that? That's bass ackwards!" I will never forget that. So, no, from what I have seen in the many years I've been in this industry, not many new professional programmers get the kind of shepherding and mentoring they deserve from their colleagues. Those who do get it are very lucky. For the rest, it's pretty much sink or swim, do or die. More companies are getting better at providing training and mentoring but it's still a crapshoot. There just aren't that many senior guys who know how to teach younger guys.

So, I think it falls to academia to provide a good foundation. If they don't, then teaching newbies what "good engineering" looks like gets left to us in the industry and it's something that we don't do very well, to be totally honest. That's why I have a very good and busy job as a technical coach.
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Scott Reid wrote:
A: The method of teaching isn't wrong! That's been proven conclusively for the last 2000 years! Otherwise we still wouldn't have fire!


Your argument doesn't hold water. Computer programming isn't that old and it's also changing all the time. The methods of teaching 30 years ago, 20 years ago, 10 years ago, are painfully obsolete in the context of today's languages and technologies. Academia has to keep up. Martin Odersky teaches an introductory course on Scala on coursera.org.  In that course, he already introduces build tools and automated testing. Even if students aren't required to write tests themselves, they are still made aware of such techniques. Awareness is the first step to learning.

There are many things academia could do better but based on the kind of questions and homework we see students post about all the time in these forums, there are many instructors out there still stuck on 20-year old methods.
 
Campbell Ritchie
Marshal
Posts: 80493
455
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Scott Reid wrote:. . .
A: The method of teaching isn't wrong! That's been proven conclusively for the last 2000 years! Otherwise we still wouldn't have fire!

I think “proven conclusively” is a bit of an exaggeration; the studies I have seen on the effectiveness of teaching have been disagreed with. Some have had poorly‑defined endpoints, and a few have been withdrawn for being totally bogus. The bit about fire looks like a red herring.

B: Expecting people to walk into a programming career and be instantly capable of coding whatever is handed to them without needing help, assistance or further information is utterly unreasonable!

That is actually the opposite of what Junilu has said; he is complaining about not having such support when he started.

More still, trying to introduce OOP concepts before teaching the basics may well produce more capable and knowledgeable programmers! If so, it will only produce 2 per class of 30! The rest will have quit in the first week!

That is how I was taught Java®, and we all stuck it out to the end of the course.

As for the newbies on here! Myself included! Most of them are studying programming in their own time, for their own desire!

Some people become competent programmers and some don't; we can see the difference pretty quickly I find it hard to imagine that somebody can learn a practical skill without guidance from somebody knowledgeable; that is like learning swimming on your own. One of the problems I perceive is identifying those who won't get far and guiding them into a different field.

But well done throwing your hat into the ring
 
Scott Reid
Greenhorn
Posts: 11
1
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I stand whole heartedly behind my belief that the job of academia is to give it's students a good and broad grounding in their chosen subject!
It is then up to industry to mould those graduates into the kind of employees they need !
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Scott Reid wrote:I stand whole heartedly behind my belief that the job of academia is to give it's students a good and broad grounding in their chosen subject!
It is then up to industry to mould those graduates into the kind of employees they need !



I think we basically agree on this. The disagreement seems to be whether academia actually does a good job at that. All I'm saying is that many in academia can do better.
 
Ranch Hand
Posts: 393
9
Open BSD BSD Debian
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Not to pile on to what's already been pointed out ) and with respect to stakeholders (i have read some of the discussion) here I quote two distinct points i want to say something
Scott's

...the job of academia is to give it's students a good and broad grounding in their chosen subject! ...



and Junilu's

...The disagreement seems to be whether academia actually does a good job at that. All I'm saying is that many in academia can do better...



I was a student too in the early 80's and from my experience so far I'm aware that teaching is not a "normal job" but a natural inclination i guess. So far i had a lot of teachers but i can count in the firm of a hand those who succeeded to be useful to me (and my class) and transmit me their subject matter and their passion to investigate further in the subject matter  because in the end teaching maybe is more  passion than skill.
I'm sure some can understand what i try to say and from my perspective the question is death clear:  Teaching needs teachers with charisma and that quality/property alas is individual,  one can't study it and learn it. You have it or not when you're born.

I guess a good solution to get better than actual were: who has high skills and knowledge but no charisma to teach, do more research work than teaching and the opposite
I think that can meet Junilu's requirement :

...academia can do better..



I agree also with Scott's quote about academia and general/broad instruction but also agree with junilu's that broad instruction must be taught better than what is currently being done

About taught better
Dunno why but out there are lot of textbooks and places that dissect code and all people talk about code and code write down code but very few of them if any talk about software design that's a shame guys why that?
Now about OOP and programming language and design: I'm convinced the student starting from zero to be capable to do associations just from the first lessons have to learn concurrently those three topics(with more weight on design)  
 
Junilu Lacar
Sheriff
Posts: 17734
302
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Harry Kar wrote:
Dunno why but out there are lot of textbooks and places that dissect code and all people talk about code and code write down code but very few of them if any talk about software design that's a shame guys why that?
Now about OOP and programming language and design: I'm convinced the student starting from zero to be capable to do associations just from the first lessons have to learn concurrently those three topics(with more weight on design)


That is a very astute observation, Harry.

I suspect a big part of the reason for this is that many people still view programming and design as separate activities. That's how I was taught. Robert "Uncle Bob" Martin changed that for me when he cited Jack Reeves' essays about how Code is design and that writing code is in fact a design activity. Google for Jack Reeves Code as Design and read his three essays.

When you look at coding as design, the way you approach programming and learning how to program changes drastically. I think many instructors are still stuck in the mindset that design and programming are different activities. That is painfully apparent when students show us their assignments where they are told exactly what classes to create and what fields and methods to provide. This robs the students of that all-important chance to go through the design process. It trains students to think that someone is going to take care of the "design" for them and all they have to do is translate the UML diagrams and "specifications" in prose form to code. This is piss-poor way to teach students how to create programs and it smacks of a lack of understanding and, as you say Harry, research into what programming has now grown to encompass.

It has been years since I have used UML diagrams to design any part of the application systems I have been part of creating. The most we would do is draw out a rough context diagram on a whiteboard. Most of our design is laid out in executable tests. Most of the formal documentation about the systems we design are created after the coding, to document what actually was built. Creating a lot of formal documentation related to design before the system is actually built has proven to be wasteful since design is so fluid and keeps changing, even right up to the moment you can say "We're done and can deploy this now."

Even when we write formal documentation, we keep it at a high level of abstraction because we know aspects of the design will continue to evolve as new requirements come in and we need to make changes. Again, the CODE is the detailed design. Unfortunately, there don't seem to be many instructors who believe this, so they contribute to the software crisis by training students to be essentially code monkeys. That is what really gets my goat.
 
Harry Kar
Ranch Hand
Posts: 393
9
Open BSD BSD Debian
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Scott Reid wrote:...Programming is a branch of computer science, not an entire subject on it's own! ...



I notice the term Programming can have more than one meanings (that depend on the context it's used). I quote that one  

... You are forgetting the backup, the assistance, the advice and direction, the sheparding which you received when you first stepped out from the University onto the beginning of the road of your professional career.



Now I'm wondering why i can't receive that assistance, advice, direction, sheparding etc(lot of positive things=considerable baggage) into my Uni? what's the scope of a Uni if not educate me in a perfect(as possible) manner? If i have to obtain all that "goodies" myself or from others then what's the scope of Uni(note i refer to too much code VS almost zero design)? give me a degree (with some lack of knowledge) and that's it?

...but you had these questions once and someone took the time to sit with you and give you their advice!



I really  appreciate if "someone" were my Uni's personell (profs , assistances etc)

That's how people learn! From the bottom up, in small manageable chunks, over time! Then in small, manageable chunks over time, over many years and through different companies!



A  dear prof of mine (in paleolithic era) used say if you go only bottom up you end up dry if you go only top down you end up wet. If you want  succeed you have to manage in a way that  you maintain a middle humidity state.That means you have to go bottom up for a little then top down for a little then  bottom up for a little   and repeat the loop till the end ofthe process at hand

..My main point in my post above was that;

A: The method of teaching isn't wrong! That's been proven conclusively for the last 2000 years! Otherwise we still wouldn't have fire!
B: Expecting people to walk into a programming career and be instantly capable of coding whatever is handed to them without needing help, assistance or further information is utterly unreasonable!

More still, trying to introduce OOP concepts before teaching the basics may well produce more capable and knowledgeable programmers! If so, it will only produce 2 per class of 30! The rest will have quit in the first week!



How about the results of teaching objects first method? I guess  that(Koelling's) would be the right method(invite you read some of his papers) to learn OOP in a correct manner and moreover overall painlessly and also in less time (starting from the very zero level without any coding and knowledge of basics at  the very start. Certainly apply that method correctly requires more --preparation-- work from the teacher part)

As for the newbies on here! Myself included! Most of them are studying programming in their own time, for their own desire!  



If the time is an issue why not  find a workaround? or expand the time of a course or diminish the quantity of the subject matter?

Anyway how actually goes things(too much code mania out there but code for what ? where's the design ? no one knows ) is not good to not say is really bad
 
Harry Kar
Ranch Hand
Posts: 393
9
Open BSD BSD Debian
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Junilu Lacar wrote:...That is a very astute observation, Harry...



Alas that's not an astute observation but the ugly reality Junilu


I suspect a big part of the reason for this is that many people still view programming and design as separate activities...



needless to say i agree with your line  at 101%

thanks for the hints

 
Consider Paul's rocket mass heater.
reply
    Bookmark Topic Watch Topic
  • New Topic