|Home||Switchboard||Unix Administration||Red Hat||TCP/IP Networks||Neoliberalism||Toxic Managers|
May the source be with you, but remember the KISS principle ;-)
Skepticism and critical thinking is not panacea, but can help to understand the world better
|News||Recommended Books||Recommended Links||Programming as a Profession||Cargo cult programming||Programming Languages Usage and Design Problems|
|Programming as a Profession||Certification||Teacher Life||Toxic managers and coworkers||Programmers Health Issues||Copyright|
|Portraits of Open Source Pioneers||Information overload||Mental Overload||Drinking from a firehose||Humor||Etc|
CS education is now characterized by the set of problems that affect IT in general:
There's no lack of talent, there's not even a lack of workers, just a lack of quality companies and lack of decent positions. Gradates in CS are forces to compete with the army of cheap H1B workers, and nationally most of them lose. Even such companies as Google have problems creating a good environment for talented programmers and the level of wasting of talent is very high.
Programming talent is pretty rare and big programming talent is exceedingly rare. Now such talent is attracted to field that might pay more and have better job stability.
By the time students enter college, many have already decided whether or not they should be majoring in computing. Also, those who do come into the field enter with a great disparity of knowledge. Some students have been around computers ever since they can remember and others only know what they have learned in school. Even though there is a difference between school computing and personal computing, so much is learned outside the classroom. In 60th students used to enter college with any knowledge of computers so everyone was on an equal footing." That changed with the introduction of PCs....
Programming is more than a set of skills; it is a culture (Bernstein, 1997). That's why the greatest predictor of success in programming is self-interest and prior exposure: mucking about, playing around, experimenting (Bernstein, 1991). If students experiment on their own computer and have interest in controlling their computing environment, they have a great advantage in learning programming.
Learning programming eats up a lot of time. This can be a great pleasure or a great detriment to study of other disciplines. Your mileage may vary ;-).
Some textbook writers encourage the mesmerizing quality of computing. On the back cover of a first year computing book, Oh! Pascal, the author, Doug Cooper writes:
The basic premises I work with are that programming should be fun right from the start, and that even beginners can learn to write programs that are at least as good as those you'd buy in a store. During the past year, I lay awake nights trying to figure out ways to keep you awake nights. As a result, this book does not contain even a single problem that involves widgets, payrolls, grading homework or companies like Acme . . .
This approach leads to many contextless programming examples, tricks and "screen hacks." Maybe, as a rebuttal to this approach, Horstmann (1997) promises on its cover that his C++ book is "not a significant source of low-level pointer hacks."
However, stereotypical, nerdy behavior is encouraged as the way to success in the computing world. From Edupage, an electronic clipping service on Information Technology news,
Doing research with mathematics students, Lynn and Hyde (1989) observed that "confident students are more likely to try alternative approaches for problem solutions, to experiment with techniques not taught in class rather than carefully following school procedures and persist with mathematics and science courses".
These findings are very applicable to computing. In computing, much of that confidence is obtained by just sitting in front of the computer and experimenting... Computing can be time consuming and all consuming. But we should not forget the exhilaration factor of computing. When things work, there is tremendous satisfaction.
Computer centers in all organizations operate as gatekeepers. They decide how users will interact with the central computer system. University computer centers are no different in that they require users to have user ids, passwords and to follow instructions precisely in order to use the system.
Elite image of computing is often fostered knowingly or unknowingly by institutional computer services dept. which dole out information to users in a miserly fashion and make frequent and arbitrary changes to the system so that users never feel quite comfortable with their skills.
Lab problems are particularly prevalent at the beginning of the semester. Instructors know this occurs every term and try to keep a sense of perspective about it. It seems that it takes days to get a user id. Passwords that were accepted yesterday mysteriously deny access to the system today. Some electronic mail systems need yet another password.
All organizations have these problems. But some students lose patience, especially if this is their first year in college. They perceive that everyone else is on the system but them. They regard dealing with the computer center as another piece of red tape. But unlike registration and paying tuition, this red tape can be avoided by dropping out of computing courses and not using the computer system.
Some students get overwhelmed by the complexity. But other understand that they do not have to become experts on every piece of software on the system. One man, with a high comfort level, wrote: "I understand the parts that I use, but the other parts are very unfamiliar."
Approximately 30 years ago the transformation similar to transformation in firms started in colleges. Top academic brass start raising this salaries and with time raised them to astronomic levels not dissimilar to similar process in manufacturing companies but of course shy of what happened in financial sector.
With the trend colleges also started to behave more like a training centers for industry not some much general educational institutions. The focus has become to prepare students to fit what industry demanded. In programming that meant OO programming and Java to detriment of everything else and first of all low level languages like assembler and C. Also computerized testing often relies more of memorization of concepts that thinking and as a result many students graduated with associate and bachelor CS degrees can't program at all. Even on the beginner level.
Test students and try to assign students of equal skill level to the beginning class. Advanced students can just take an exam and move to more complex courses.
Survey the class on their perceived knowledge of various computing subjects. Share the results of the survey, as soon as possible at the beginning of the term. This might allay fears by some students that everyone knows more than they do. Surveying also allowed us to approach the undecided majors on the virtues of becoming a computing major. Undecided students are our opportunities to increase the number of majors.
Don't forget the needs of the advanced students. Introduce them to each other. Suggest more challenging work that they can explore.
Discuss the time-consuming aspect of computing with students. Acknowledge that they have chosen a course and a major which take a lot of time.
Do not give homework problems where the people who spend the most time in front of the computer get the best grades. For example, beginning students sometimes spend hours working on their computer output by adding graphic designs and bold, underlined and blinking text. Unless that is the point of the assignment, it should not result in a better mark.
In class, discuss problems with the computer center and red tape. However, though one should be sympathetic to the students' problems, try to encourage assertiveness when they deal with the Computer Center. When is it the students' problems and when is it the Computer Center's problem? And how can they tell the difference?
Explain to students that they need to get fundamentals and without fundamentals they can't become experts.
James Maguire's article raises some interesting questions as to why teaching Java to first year CS / IT students is a bad idea. The article mentions both Ada and Pascal – neither of which really "took off" outside of the States, with the former being used mainly by contractors of the US Dept. of Defense.
This is my own, personal, extension to the article – which I agree with – and why first year students should be taught C in first year. I'm biased though, I learned C as my first language and extensively use C or C++ in projects.
Java is a very high level language that has interesting features that make it easier for programmers. The two main points, that I like about Java, are libraries (although libraries exist for C / C++ ) and memory management.Libraries
Libraries are fantastic. They offer an API and abstract a metric fuck tonne of work that a programmer doesn't care about. I don't care how the library works inside, just that I have a way of putting in input and getting expected output (see my post on abstraction). I've extensively used libraries, even this week, for audio codec decoding. Libraries mean not reinventing the wheel and reusing code (something students are discouraged from doing, as it's plagiarism, yet in the real world you are rewarded). Again, starting with C means that you appreciate the libraries more.Memory Management
Managing your programs memory manually is a pain in the hole. We all know this after spending countless hours finding memory leaks in our programs. Java's inbuilt memory management tool is great – it saves me from having to do it. However, if I had have learned Java first, I would assume (for a short amount of time) that all languages managed memory for you or that all languages were shite compared to Java because they don't manage memory for you. Going from a "lesser" language like C to Java makes you appreciate the memory manager
What's so great about C?
In the context of a first language to teach students, C is perfect. C is
- Relatively simple
- Lacks OOP features, which confuse freshers
- Low level
- Weakly typed
- Easy to get bugs
Java is a complex language that will spoil a first year student. However, as noted, CS / IT courses need to keep student retention rates high. As an example, my first year class was about 60 people, final year was 8. There are ways to keep students, possibly with other, easier, languages in the second semester of first year – so that students don't hate the subject when choosing the next years subject post exams.
Conversely, I could say that you should teach Java in first year and expand on more difficult languages like C or assembler (which should be taught side by side, in my mind) later down the line – keeping retention high in the initial years, and drilling down with each successive semester to more systems level programming.
There's a time and place for Java, which I believe is third year or final year. This will keep Java fresh in the students mind while they are going job hunting after leaving the bosom of academia. This will give them a good head start, as most companies are Java houses in Ireland.
Filed in Programming No CommentsA few things can confuse programming students, or new people to programming. One of these is abstraction.
In computer science, abstraction is the process by which data and programs are defined with a representation similar to its meaning (semantics), while hiding away the implementation details. Abstraction tries to reduce and factor out details so that the programmer can focus on a few concepts at a time. A system can have several abstraction layers whereby different meanings and amounts of detail are exposed to the programmer. For example, low-level abstraction layers expose details of the hardware where the program is run, while high-level layers deal with the business logic of the program.
That might be a bit too wordy for some people, and not at all clear. Here's my analogy of abstraction.
Abstraction is like a car
A car has a few features that makes it unique.
- A steering wheel
- Transmission (Automatic or Manual)
If someone can drive a Manual transmission car, they can drive any Manual transmission car. Automatic drivers, sadly, cannot drive a Manual transmission drivers without "relearing" the car. That is an aside, we'll assume that all cars are Manual transmission cars – as is the case in Ireland for most cars.
Since I can drive my car, which is a Mitsubishi Pajero, that means that I can drive your car – a Honda Civic, Toyota Yaris, Volkswagen Passat.
All I need to know, in order to drive a car – any car – is how to use the breaks, accelerator, steering wheel, clutch and transmission. Since I already know this in my car, I can abstract away your car and it's controls.
I do not need to know the inner workings of your car in order to drive it, just the controls. I don't need to know how exactly the breaks work in your car, only that they work. I don't need to know, that your car has a turbo charger, only that when I push the accelerator, the car moves. I also don't need to know the exact revs that I should gear up or gear down (although that would be better on the engine!)
Virtually all controls are the same. Standardization means that the clutch, break and accelerator are all in the same place, regardless of the car. This means that I do not need to relearn how a car works. To me, a car is just a car, and is interchangeable with any other car.
Abstraction means not caring
As a programmer, or someone using a third party API (for example), abstraction means not caring how the inner workings of some function works – Linked list data structure, variable names inside the function, the sorting algorithm used, etc – just that I have a standard (preferable unchanging) interface to do whatever I need to do.
Abstraction can be taught of as a black box. For input, you get output. That shouldn't be the case, but often is. We need abstraction so that, as a programmer, we can concentrate on other aspects of the program – this is the corner-stone for large scale, multi developer, software projects.
This is the most accurate comment I have ever read. Without the math there is no computer science and not only do students fail to learn that math, they actually seem to fear it. Even undergraduates shudder and gloss over as soon as numbers show up on the board. Teachers in high schools around the world instill this odd notion of a natural, inherent difficulty in simple mathematics, which is absurd. Likely many of the teachers are intimidated by the material themselves, which kids are quick to pick up on.
Getting more under-prepared students into the field is not a solution for anything. A million monkeys on typewriters won't write a damned thing in my lifetime. How about we reallocate some of the billions upon billions of dollars the USA is spending on defense and support public schools: buy good materials geared for modern learning styles, pay qualified teachers a competitive salary, and ensure that kids learn to solve problems and think creatively instead of rehearsing for standardized tests.
We used to have this beautiful weeder class which used C, C++, and Java. Most people coming into the class had only one java class so they got crushed trying to understand pointers. On top of that, you were trying to learn a ton of unix commands and manage to make everything work (in the years before I took it, students had to make their own makefiles). And of course it was the first data structures class so you had to write lists hash tables and trees on top of that. It was beautiful, I learned so much there.
Last year, they replaced it with an all java class...
I took a Data Structures class that used Java. I don't get the whole Java is bad. If I tell a CS Major I know more Java than C they laugh. I know enough C to get by, but honestly most CS majors couldn't explain to me how to build a processor from the silicon and up. I can do that, I am an EE major. It seems like the hate on Java is really unfounded. Java is a simple easy to use language that can make programming easy to understand. And then you can get brought to the big boys. I learned to program Stacks, Hash Tables, Queues, Search Tree's, and how to use them all together using Java. Just because you don't need to worry about pointers doesn't mean the language is too simple. Why don't you just go back to using Assembly.
It's not the language that there's a problem with, it's more cultural. Many of the people in my class have (hopefully had) the attitude of "why do I need to learn pointers, Java does it all for you!".
When that person laughed at you, in his mind, he lumped you with the mass of incompetent programmers who only know Java.
I think most of the hate (in school) comes from the fact that in a language like C you have to implement the data structures yourself, while Java comes standard with them as classes.
Well, I mean we actually had to build the data structures ourselves. We had to create the methods and the array's for a stack and so forth.
Java is becoming the primary CS language in a lot of universities. C# will soon be close behind. I am fortunate enough that my school still uses C++.
Whatever. There's no fucking computer science crisis or worker shortage. Just a bunch of greedy corporations looking for a massive glut of slave labor.
Yeah, I feel like they're living in denial. The market for programmers is tightening, and they don't want to have to pay them in line with market demands. So they turn to outsourcing if they're dumb or H1-B's if they're smart.
A big motivator is to keep pay levels across the company hierarchy in line. Heaven forbid you pay an individually-contributing programmer more than a manager, even if that's not his manager.
the discrepancy between the demand for workers in computer science fields and the supply of qualified candidates produced by the educational system.
there is only a discrepancy between what employers are willing to pay workers in computer science fields and what intelligent people can make in other fields
Internships - do them, do many of them. Here's the thing, it's almost impossible to tell a good coder apart from a bad one (unless they're extremely bad) on resume alone. Once you're in a room with us, yeah, it's pretty easy to weed out the bad ones - but the trick is getting that first interview.
That's where experience comes in - internship experience at well-reputed companies (read: ones reputed for hiring quality people) will bump you way up the list of people we want to interview also.
I wish we had better ways of picking solid interview candidates from resume pools, but honestly it's a total crapshoot. I'm fairly certain that a lot of the resumes we're tossing out are in fact fine candidates - but there's no way we can tell the difference, and there isn't enough time in the world to interview everyone. So - do internships, and make a really kickass resume.
Have a website. Before I interview someone, I will always visit their personal site if it's on their resume (easiest: firstname.lastname@example.org, no way anyone will miss that one). Show off past projects, code samples if you must. You have my attention and control of presentation, it's time to show off. Good design is not a must, but readability/navigability is nice :) If you have the energy, consider starting a blog - you don't have to reveal any earth-shattering insights into programming, just the notion of an enthusiastic, self-driven programmer who cares about the code he writes will get you mostly there.
Is there any good way to tell if I'm one of these underqualified hotshots you speak of?
Nope, not really. I've met a few Java-only monkeys that, with a bit of exploration, turned into perfectly fine coders. That being said, here are a few warning signs I look for when looking at recent grads:
- No evidence of extracurricular coding. Do you like doing this, or what? Sadly, programming is one of those things that is really difficult to get good at if all you do are assignments and class projects.
- Only knows a single language (or a very small family of languages). Most commonly: Java, C#, and VB. It represents a lack of experience, lack of interest, and lack of curiosity, all of which are necessary for success.
- Don't know your basic algorithms. These are the guys who will naively search a sorted list and make everyone's life difficult when we scale to millions of concurrent users.
- Does not know the "big picture" of software development. I've met people who did not know what SQL was until they got to the company. This is ridiculous. Many people don't do coding in their own time, nor do they work on any significant projects, so their coding abilities are strictly limited to tiny microcosms of larger projects.
- Doesn't know how to design and architect code. You should be able to come up with relatively sane data and object models for a specified application. You should care about this (sloppy design is 10x worse than sloppy code... one can be fixed, the other, oh God).
There's no lack of talent, there's not even a lack of workers. What there is, however, is a lack of quality companies.
Can we get a bill to create that instead?
That is what this bill does. It educates future Joe/Jane business persons just enough so they are not completely incompetent when hiring and managing programmers.
It just take a generation or two to take effect in force. This should have been put into place in the 80s maybe earlier.
sorry, this has been archived and can no longer be voted on
This should have been put into place in the 80s maybe earlier.
Your implied alternate history is terrifying.
Scholarships for CS majors will definitely make me a happier soon to be computer scientist.
No one is buying your 'geniuses for less' idea Congress. Anyone smart enough to do original compsci work is not going to be dumb enough to flood a tiny market for their brilliance, when they can easily sell those smarts for several multiples in a recession proof line of work as an MD.
I call bullshit on this. Incoming self-plug.
I've been a software developer for 2 years (I'm 20) and I've been programming for 8 years. I'm very competent; the other developers I work with have all been developing for a minimum of 10 years. My company was expecting someone with similar experience to fill the position I have. When my company found me, they were very weary of hiring me because of my lack of experience and age (the interview process took almost two full months). My knowledge and skill in the areas the company needed (C++, concurrency, networking, winapi, etc.) were on-par, and in some cases exceeded, the experienced developers they had.
It had taken me almost a full year to find this job. I had applied to many other positions, but most immediately threw my resume out, and very few interviewed me. In the few interviews I did get, only my current company cared about my technical skills. The rest of the interviewers asked absolutely nothing about my programming ability. Also, it's not like I was applying to huge Fortune 500 companies who get hundreds of resumes each day; I was applying to small to medium sized companies, and I'm doubting they got more than one application each week.
There are a lot skilled programmers out there in similar situations. Their skills and knowledge exceed their experience, or they don't have degrees (in my opinion, most schools are spitting out incompetent developers, anyway). Most companies just have their heads too far up their asses and won't even look at someone unless they have ten years of experience and at least four years of post-secondary.
I think most great developers who were born with the 'je ne sais quoi' that made them naturally amazing at what they do don't want to put up with the huge waste of time and irrelevant bullshit that is post-secondary, but most companies who want great developers turn their noses up at them.
Side note, I understand that this article refers to 'computer science,' but I took it to be more specific to programmers than actual computer scientists, partly because of the list of people who are endorsing the bill. Also, consider that actual computer scientists are much more niche than programmers.
Is there a crisis?
There are growing numbers of articles in magazines and newspapers trumpeting the death of computer science enrollments.
According to the Chronicle of Higher Education, as enrollment numbers in college computer science departments continue to dwindle – especially among women – "professors are contemplating ever-more-elaborate strategies to keep the United States from slipping further in the international engineering sweepstakes." More than a dozen universities have created "media computation" programs, which hope to introduce students to computer science through digital art and Web design, not traditional programming, according to the Associated Press. Georgia Tech robotics students teach robots to draw shapes, to chirp on command, and to navigate obstacle courses. Many computer science departments are rebranding themselves with emphases like: multi-media, robotics, computational biology, gaming. [ article ]
- Fact: enrollment in U.S. computer science programs is falling.
- Perception: programming is hard and no fun.
- Perception: the assignments are boring ... e.g. the "prime number syndrome" (computing mathematical sequences).
- Reporting: programming jobs are being off-shored.
- History: the industry has a reputation as an unreliable employer.
- Proposal: we need to use robots to stimulate interest.
- Proposal: we need to use drag-and-drop, GUI eye candy, multi-media rich, programming environments to stimulate interest.
Perhaps the software industry will experience a famine-and-feast cycle similar to that of the oil industry. After the U.S. oilfield employment peaked at 860,000 in 1982, companies slashed more than 500,000 jobs over the next 18 years. Texas A&M's petroleum engineering school had 1,422 undergraduates in 1982, 191 majors in 2001, and 507 majors in 2006. Demand for geologists, geophysicists, and petroleum engineers now far outstrips supply. Worldwide energy demand continues to escalate. Waves of baby boomers are beginning to retire. Starting salaries are $70,000 or higher. [ article ]
Very modest proposal: using puzzles is an excellent vehicle for stimulating interest, demonstrating, and practicing programming.
- They require no special hardware or graphics/video performance.
- There is no ambiguity or arguing about requirements - you implement the puzzle ... period.
- They are compelling (i.e. self-motivating).
- Any programming language can be used.
Brian Hurt comes in from another direction entirely, and in the process makes some very good points about the true purpose of higher education. He lays the blame for the flood of single-language programmers entering the workforce at the feet of schools who do just exactly what Joel and Jeff are asking for. He makes some great points. And while he sounds more than a little reminiscent of the classic Joel post about the perils of java schools, his argument is much more thorough than just blaming the tools. Chris Cummer joins this party, wishing that his theory foundations had been firmer, and making an excellent analogy to the difference between someone who studies a language, and someone who studies language. We also have the respectable Raganwald, who although he has admirably pointed out good points from all sides, doesn't shy from offering his opinion that programmers ignore CS fundamentals at risk of their own career advancement.
nk497 writes "Last year, Eric Schmidt slammed British computer science teaching, saying the UK was wasting its computing heritage - since then, the Government has agreed to re-examine how the subject is taught. 'Rebooting computer science education is not straightforward,' Schmidt said. 'Scrapping the existing curriculum was a good first step - the equivalent of pulling the plug out of the wall. The question is now how to power up.' To help, Schmidt has now promised funding from Google to train 100 teachers as well as give classrooms Raspberry Pis, via charity Teach First."
"The UK has an extraordinary computing heritage, but now risks falling behind," Schmidt said. "The state of computing in schools lies at the heart of the problem. Too few UK students have the opportunity to study true computer science, resulting in a workforce that lacks key skills needed to help drive the UK's economic growth."
Jan 11, 2012 | PCPro
The Government is planning a major shake-up of computer science teaching, with schools given a freer rein in a bid to make lessons more relevant and interesting.
In reaction to long-standing criticism that computing classes in schools focus too much on learning basic skills such as how to use Microsoft Office, Education Secretary Michael Gove is expected to announce sweeping changes to computer science learning.
In a speech today, Gove is expected to criticise current ICT classes and outline plans for a more industry-aligned regime focused on developing skills that will be useful in creating applications rather than merely using them.
"Imagine the dramatic change which could be possible in just a few years, once we remove the roadblock of the existing ICT curriculum," Gove will say in a speech released ahead of time to The Guardian, and confirmed to PC Pro as imminent by the Department for Education.
The current curriculum cannot prepare British students to work at the very forefront of technological change
"Instead of children bored out of their minds being taught how to use Word and Excel by bored teachers, we could have 11-year-olds able to write simple 2D computer animations using an MIT tool called Scratch," Gove will say.
"By 16, they could have an understanding of formal logic previously covered only in university courses and be writing their own apps for smartphones."
Supplementing the prescriptive classes currently taught, Gove said the plans would allow schools to use teaching resources designed by the industry and computer academics, although existing ICT classes will continue to be taught alongside the refreshed computer science programme.
In a consultation process to get under way next week, the Government is expected to push universities and tech businesses to develop a new computer science GCSE.
Invoking the inspiration of former British computing giants, such as Alan Turing, Gove will tell the BETT education technology trade show how the existing system is letting industry and students down.
"Millions have left school over the past decade without even the basics they need for a decent job, and the current curriculum cannot prepare British students to work at the very forefront of technological change," the speech reads.
"Technology in schools will no longer be micromanaged by Whitehall. By withdrawing the programme of study, we're giving schools and teachers freedom over what and how to teach."
The goal of this project is to get computer science back to middle schools. Our strategy is to reform middle school IT education at a systemic level exploring the notion of scalable game design as an approach to carefully balance educational and motivational aspects of IT fluency. The original iDREAMS project (Integrative Design-based Reform-oriented Educational Approach for Motivating Students) was designed to spark an interest in IT through students' natural attraction to game design. The second phase of the project, called CT4TC (Computational Thinking for Teaching Computing) continues the original project by looking deeper into how game design helps students learn STEM concepts through collection and analysis of performance data. These data will be used to improve the curriculum and also to increase the effectiveness of teacher training.
By game design we mean the active process of students collaboratively engaging in problem solving, creativity, modeling and communication. Game design develops a rich set of skills consistent with STEM and IT competency frameworks such as the National Academy of Sciences Fluency with IT and the International Society for Technology in Education NETS Standards.
By scalable game design we refer to a low threshold, high ceiling curriculum. This gentle learning slope curriculum allows students and teachers to quickly start with game design activities producing simple classic games but then continue to sophisticated games exhibiting artificial intelligence.
The systemic aspect of this project continues to explores an IT training ecology integrating four regions of decreasing affluence.
The partners working on this project, CU Computer Science Department, School of Education, Science Discovery outreach program, and AgentSheets Inc, have already established collaborations in all four regions:
- Technology-hub: Boulder, CO featuring a high density of IT companies and education opportunities.Our AgentSheets tool has already been introduced to all middle schools in the district because of its potential to address IT fluency and standards, equity, and motivation.
- Inner-city: Aurora, CO where we ran an IT education pilot study exploring issues of universal accessibility regarding gender and ethnicity.
- Rural: Pueblo CO, southwest Colorado Board of Cooperative Educational Services, a 10000 square mile integration of school districts.
- Remote/Tribal: Ignacio, CO, and Oglala, SD, Native American reservations: Southern Ute, and Oglala Sioux. An existing mobile science lab will enable us to reach these areas.
Our immediate objective is to provide teacher and student training in the four regions. Our long-term objective is to create educational ecologies that integrate these regions. We will employ existing programs including the CU Upward Bound, Women in Engineering, and the High School Honors Institute to bring students to the technology-hub region and will work with community and tribal colleges to train local teachers
This NPR story highlights an early and unplanned foray into bringing game-design based computer science education even to elementary schools."
"Stanford University is offering the online world more of its undergraduate level CS courses. These free courses consist of You Tube videos with computer-marked quizzes and programming assignments. The ball had been started rolling by Sebastian Thrun and Peter Norvig's free online version of their Stanford AI class, for which they hoped to reach an audience in the order of a hundred thousand, a target which they seem to have achieved. As well as the previously announced Machine learning course you can now sign up to any of: Computer Science 101, Software as a Service, Human-Computer Interaction, Natural Language Processing, Game Theory, Probabilistic Graphical Models, Cryptography and Design and Analysis of Algorithms.
Almost a complete computer science course and they are adding more. Introductory videos and details are available from each courses website."
$100k? You're doing it wrong if you're going $100k into debt. It hasn't been that long since I graduated and I was only looking at a fraction of that. Most recently I spent a year at grad school for under $5k for all school related expenses.
I'm taking all three courses being offered right now: AI, machine learning, and intro to databases. The AI class uses its own unique software platform, while the other two share one (which will presumably be used for most or all of next quarter's classes).
I like the other two much better than the AI class for several reasons: first, because they make those mid-lecture quizzes optional and also allow the lectures to be downloaded instead of streamed. Second, I like how, unlike the AI class, the other two have actual programming exercises. Third, I like how the homework questions for the other two are presented in a normal web form format (whereas the AI class "homeworks" require you to watch a video of the instructor reading the questions) and also allow multiple submissions.
This is the way education should be, available to anyone with an interest. MIT has a similar program with content freely available I believe: http://ocw.mit.edu/ [mit.edu] .
IMHO this is what libraries will eventually evolve into. This type of knowledge sharing is the root of a libraries books are about, and getting that content from the expert source in the field is hard to beat. Definitely cool stuff.
angry tapir (1463043)MIT has videos of lectures online [mit.edu]. But unlike Stanford it's more a "work at your own pace" style thing instead of actually signing up for a course.
The difference between these classes and MIT's OpenCourseware is that these classes have a schedule with assignments and grades.
For many people, such as procrastinators and those motivated by competing with the other students (since participants get a class ranking at the end), that makes a huge difference.
Is there is a potential crisis in the teaching of computer programming in many universities?
The government target for 50 per cent of all 17 - 30 year olds to be participating in higher education by 2010 has led to an increase in the number of applicants applying to study computing in universities over the past 10 years. Consequently, the range of ability and previous subject knowledge of applicants has widened considerably during this period.
Higher education is now an extremely competitive market, and to compete effectively many university computing departments now offer a broad range of diverse computing pathways with introductory courses that require little or no previous specific subject study or knowledge.
Computer programming is an essential core theme in most computing courses and as a result many computing departments have had to reflect upon what is now appropriate subject content for introductory programming modules. Additionally, how programming modules are delivered and assessed are having to be re-evaluated.
Historically, research suggests that students have always found computer programming difficult; the abstract nature of programming involving problem solving and logical thinking requires a certain aptitude, and the necessary skills and disciplines are not always easy to learn and execute.
Even students who are bright and successful in other areas of study often struggle to grasp the basics of programming, and this has traditionally led to higher than average failure and drop-out rates. Many students end up disillusioned and look for ways to avoid the subject later in the programme.
Modern programming paradigms, based upon the object-oriented programming (OOP) paradigm, and introduced in recent years, have additional complex concepts and constraints associated with them.
OOP languages such as Java and VB.NET are now widely used for teaching introductory programming modules in many universities. These place an additional cognitive burden on students over and above the already difficult programming principles associated with all programming languages.
Many students complain that they find it difficult to understand some of the complexities associated with object orientation. Trying to deal with these concepts at an early stage leads to having less time to focus on more fundamental principles and often results in students having a poorer understanding of the basics.
Add to this the need to include modern windows programming environments with graphics controls and event handling, and it all becomes too much for many students to handle; they simply cannot see the wood for the trees.
If the principles of OOP are introduced too early it may lead to cognitive overload for some students resulting in confusion and disillusionment with the subject.
This additional complexity makes the problem of teaching contemporary programming at an introductory level even more acute and if not addressed is likely to lead to even higher failure and drop-out rates in the early phases of computing programmes, with more students trying to avoid programming at all costs.
Why is it that students find programming courses more difficult than they did in the past?
One reason is that the range of abilities of student cohorts has undoubtedly widened in recent years. Another is simply that OOP programming is more complex and difficult to understand. It has often been suggested that the difficulty in the teaching and understanding of a programming language can be seen by examining the complexity of the ubiquitous 'Hello World' program.
The 'Hello World' program illustrates the simplest form of human-computer interaction (HCI); it sends a text message from a computer program to the user, displayed on the screen. 'Hello World' will be familiar to many computer lecturers and students as it is considered to be the most basic of programs, and is normally used as the first program example in many undergraduate programming text books and introductory programming modules.
To illustrate the additional complexity of OOP consider as a simple metric the comparison of the program code for 'Hello World' written in Pascal, a language used in many universities to teach introductory programming in the past, and Java a contemporary OOP language widely used commercially and in universities today to teach programming.
write ('Hello World')
public static void main (String args[ ])
Message helloWorld = new Message ( );
helloWorld.printMessage ( );
void printMessage ( )
System.out.print ("Hello World");
These two programs perform exactly the same function. It is not difficult to see that the early generation Pascal program is very simple and easy to understand, most students and even most ordinary adults would have no problem understanding what is going on.
The Java program on the other hand is much longer, uses a range of complex programming words, many of which have difficult concepts associated with their use, and is much more difficult to understand. Faced with this as their first exposure to the simplest of introductory programs it is not surprising that many students are overwhelmed and confused.
As an academic who has been involved in teaching programming in a new university for many years I have seen this problem steadily growing worse. If not addressed, the additional cognitive load associated with object orientation, and the wider and more varied backgrounds of contemporary student cohorts, may well lead to a potential crisis in the teaching of introductory programming modules. To avoid this potential crisis computing departments must re-evaluate the structure of programming courses and reflect upon the content of introductory modules.
In the computing department at Christ Church University we have adopted an 'objects later' approach to the teaching of programming. Introductory programming modules in the first year of the undergraduate B.Sc. in Computing are taught using VB.NET a modern windows-based OOP environment.
However the object orientation side of the programming language is de-emphasised and largely avoided leaving the students to concentrate upon the more important basic programming principles that are needed at this level. This allows students to rapidly develop impressive looking windows programs that utilise and illustrate these fundamental principles and which reinforces their understanding and stimulates their interest in the subject.
This is not to suggest that the important concepts associated with the OOP paradigm are to be avoided or ignored just because they are difficult. It is essential that universities teach using OOP languages as prospective employers expect computing students to have an understanding of them. It is suggested that the object orientation should be introduced and explained later in the programme when students have an understanding of the basics and are better equipped to deal with more complex programming concepts.
This approach has been tried now for a number of years and has been widely welcomed by staff and students and has resulted in improvements in attrition rates, with more students choosing programming options later in the programme. This approach may not be suitable for all computing programmes or universities to adopt, but it has certainly led to a more coherent and balanced programme for our students.
It is perhaps ironic that modern OOP paradigms, introduced in part as a solution to the original software crisis, may be the cause of a new software crisis in the teaching and understanding of programming in many universities.
Brian Brighouse MSc is programme director B.Sc. Computing, Department of Computing, Canterbury Christ Church University.
Google matched content
Computer science - Wikipedia, the free encyclopedia
Is Teaching Computer Science Different from Teaching Other Sciences
Using constructivism as a teaching model for computer science
Crisis and Opportunity in Computer Science The future of the field depends on winning back student enrollment, public interest in technology, and government research funding.More Laypersons Are Learning Programming Languages Move over, Spanish. Hello, SQL?
Is there a crisis in recruiting and retaining programming students?
The Last but not Least Technology is dominated by two types of people: those who understand what they do not manage and those who manage what they do not understand ~Archibald Putt. Ph.D
Copyright © 1996-2018 by Dr. Nikolai Bezroukov. www.softpanorama.org was initially created as a service to the (now defunct) UN Sustainable Development Networking Programme (SDNP) in the author free time and without any remuneration. This document is an industrial compilation designed and created exclusively for educational use and is distributed under the Softpanorama Content License. Original materials copyright belong to respective owners. Quotes are made for educational purposes only in compliance with the fair use doctrine.
FAIR USE NOTICE This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. We are making such material available to advance understanding of computer science, IT technology, economic, scientific, and social issues. We believe this constitutes a 'fair use' of any such copyrighted material as provided by section 107 of the US Copyright Law according to which such material can be distributed without profit exclusively for research and educational purposes.
This is a Spartan WHYFF (We Help You For Free) site written by people for whom English is not a native language. Grammar and spelling errors should be expected. The site contain some broken links as it develops like a living tree...
|You can use PayPal to make a contribution, supporting development of this site and speed up access. In case softpanorama.org is down you can use the at softpanorama.info|
The statements, views and opinions presented on this web page are those of the author (or referenced source) and are not endorsed by, nor do they necessarily reflect, the opinions of the author present and former employers, SDNP or any other organization the author may be associated with. We do not warrant the correctness of the information provided or its fitness for any purpose.
Last modified: June, 06, 2019